Import pangomm2.48_2.50.1.orig.tar.xz
authorJeremy Bicha <jbicha@ubuntu.com>
Sat, 1 Oct 2022 18:12:14 +0000 (14:12 -0400)
committerJeremy Bicha <jbicha@ubuntu.com>
Sat, 1 Oct 2022 18:12:14 +0000 (14:12 -0400)
[dgit import orig pangomm2.48_2.50.1.orig.tar.xz]

127 files changed:
.gitlab-ci.yml [new file with mode: 0644]
AUTHORS [new file with mode: 0644]
COPYING [new file with mode: 0644]
COPYING.tools [new file with mode: 0644]
ChangeLog [new file with mode: 0644]
ChangeLog.pre-2-34-0 [new file with mode: 0644]
HACKING [new file with mode: 0644]
MSVC_NMake/Makefile.vc [new file with mode: 0644]
MSVC_NMake/build-rules-msvc.mak [new file with mode: 0644]
MSVC_NMake/config-msvc.mak [new file with mode: 0644]
MSVC_NMake/create-lists-msvc.mak [new file with mode: 0644]
MSVC_NMake/create-lists.bat [new file with mode: 0644]
MSVC_NMake/detectenv-msvc.mak [new file with mode: 0644]
MSVC_NMake/filelist.am [new file with mode: 0644]
MSVC_NMake/generate-msvc.mak [new file with mode: 0644]
MSVC_NMake/info-msvc.mak [new file with mode: 0644]
MSVC_NMake/install.mak [new file with mode: 0644]
MSVC_NMake/pangomm/meson.build [new file with mode: 0644]
MSVC_NMake/pangomm/pangomm.rc.in [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
NEWS [new file with mode: 0755]
README.SUN [new file with mode: 0644]
README.md [new file with mode: 0644]
README.win32 [new file with mode: 0644]
autogen.sh [new file with mode: 0755]
configure.ac [new file with mode: 0644]
docs/Makefile.am [new file with mode: 0644]
docs/images/gtkmm_logo.gif [new file with mode: 0644]
docs/images/top.gif [new file with mode: 0644]
docs/reference/Doxyfile.in [new file with mode: 0644]
docs/reference/meson.build [new file with mode: 0644]
meson.build [new file with mode: 0644]
meson_options.txt [new file with mode: 0644]
pango/meson.build [new file with mode: 0644]
pango/pangomm-uninstalled.pc.in [new file with mode: 0644]
pango/pangomm.h [new file with mode: 0644]
pango/pangomm.pc.in [new file with mode: 0644]
pango/pangomm/Makefile.am [new file with mode: 0644]
pango/pangomm/cairofontmapimpl.cc [new file with mode: 0644]
pango/pangomm/cairofontmapimpl.h [new file with mode: 0644]
pango/pangomm/filelist.am [new file with mode: 0644]
pango/pangomm/filelist.gmake.am [new file with mode: 0644]
pango/pangomm/init.cc [new file with mode: 0644]
pango/pangomm/init.h [new file with mode: 0644]
pango/pangomm/meson.build [new file with mode: 0644]
pango/pangomm/types.h [new file with mode: 0644]
pango/pangomm/wrap_init.h [new file with mode: 0644]
pango/pangommconfig.h.in [new file with mode: 0644]
pango/pangommconfig.h.meson [new file with mode: 0644]
pango/src/Makefile.am [new file with mode: 0644]
pango/src/attributes.ccg [new file with mode: 0644]
pango/src/attributes.hg [new file with mode: 0644]
pango/src/attriter.ccg [new file with mode: 0644]
pango/src/attriter.hg [new file with mode: 0644]
pango/src/attrlist.ccg [new file with mode: 0644]
pango/src/attrlist.hg [new file with mode: 0644]
pango/src/cairofontmap.ccg [new file with mode: 0644]
pango/src/cairofontmap.hg [new file with mode: 0644]
pango/src/color.ccg [new file with mode: 0644]
pango/src/color.hg [new file with mode: 0644]
pango/src/context.ccg [new file with mode: 0644]
pango/src/context.hg [new file with mode: 0644]
pango/src/coverage.ccg [new file with mode: 0644]
pango/src/coverage.hg [new file with mode: 0644]
pango/src/filelist.am [new file with mode: 0644]
pango/src/font.ccg [new file with mode: 0644]
pango/src/font.hg [new file with mode: 0644]
pango/src/fontdescription.ccg [new file with mode: 0644]
pango/src/fontdescription.hg [new file with mode: 0644]
pango/src/fontface.ccg [new file with mode: 0644]
pango/src/fontface.hg [new file with mode: 0644]
pango/src/fontfamily.ccg [new file with mode: 0644]
pango/src/fontfamily.hg [new file with mode: 0644]
pango/src/fontmap.ccg [new file with mode: 0644]
pango/src/fontmap.hg [new file with mode: 0644]
pango/src/fontmetrics.ccg [new file with mode: 0644]
pango/src/fontmetrics.hg [new file with mode: 0644]
pango/src/fontset.ccg [new file with mode: 0644]
pango/src/fontset.hg [new file with mode: 0644]
pango/src/glyph.ccg [new file with mode: 0644]
pango/src/glyph.hg [new file with mode: 0644]
pango/src/glyphitem.ccg [new file with mode: 0644]
pango/src/glyphitem.hg [new file with mode: 0644]
pango/src/glyphstring.ccg [new file with mode: 0644]
pango/src/glyphstring.hg [new file with mode: 0644]
pango/src/item.ccg [new file with mode: 0644]
pango/src/item.hg [new file with mode: 0644]
pango/src/language.ccg [new file with mode: 0644]
pango/src/language.hg [new file with mode: 0644]
pango/src/layout.ccg [new file with mode: 0644]
pango/src/layout.hg [new file with mode: 0644]
pango/src/layoutiter.ccg [new file with mode: 0644]
pango/src/layoutiter.hg [new file with mode: 0644]
pango/src/layoutline.ccg [new file with mode: 0644]
pango/src/layoutline.hg [new file with mode: 0644]
pango/src/pango.defs [new file with mode: 0644]
pango/src/pango_docs.xml [new file with mode: 0644]
pango/src/pango_docs_override.xml [new file with mode: 0644]
pango/src/pango_enums.defs [new file with mode: 0644]
pango/src/pango_extra_objects.defs [new file with mode: 0644]
pango/src/pango_methods.defs [new file with mode: 0644]
pango/src/pango_vfuncs.defs [new file with mode: 0644]
pango/src/rectangle.ccg [new file with mode: 0644]
pango/src/rectangle.hg [new file with mode: 0644]
pango/src/renderer.ccg [new file with mode: 0644]
pango/src/renderer.hg [new file with mode: 0644]
pango/src/tabarray.ccg [new file with mode: 0644]
pango/src/tabarray.hg [new file with mode: 0644]
pangomm.doap [new file with mode: 0644]
subprojects/cairomm-1.16.wrap [new file with mode: 0644]
subprojects/glibmm-2.68.wrap [new file with mode: 0644]
subprojects/pango.wrap [new file with mode: 0644]
tests/Makefile.am [new file with mode: 0644]
tools/Makefile.am [new file with mode: 0644]
tools/dummy-header.py [new file with mode: 0755]
tools/extra_defs_gen/generate_defs_pango.cc [new file with mode: 0644]
tools/extra_defs_gen/meson.build [new file with mode: 0644]
tools/gen_scripts/generate_all.sh [new file with mode: 0755]
tools/gen_scripts/init_generate.sh [new file with mode: 0755]
tools/gen_scripts/pango_generate_docs.sh [new file with mode: 0755]
tools/gen_scripts/pango_generate_enums.sh [new file with mode: 0755]
tools/gen_scripts/pango_generate_extra_defs.sh [new file with mode: 0755]
tools/gen_scripts/pango_generate_methods.sh [new file with mode: 0755]
tools/m4/convert.m4 [new file with mode: 0644]
tools/m4/convert_pango.m4 [new file with mode: 0644]
tools/m4/convert_pangomm.m4 [new file with mode: 0644]
tools/m4/filelist.am [new file with mode: 0644]

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644 (file)
index 0000000..c4cea36
--- /dev/null
@@ -0,0 +1,159 @@
+# 2022-05-19: ubuntu:latest = 22.04, ubuntu:rolling = 22.04, ubuntu:devel = 22.10
+# See https://hub.docker.com/_/ubuntu
+image: ubuntu:rolling
+
+stages:
+  - deps
+  - build
+  - deploy
+
+variables:
+  MESON_GCC_DEPS: g++
+                  gettext
+                  git
+                  yelp-tools
+                  gtk-doc-tools
+                  python3-pygments
+                  python3-setuptools
+                  libglib2.0-dev
+                  libcairo2-dev
+                  libpango1.0-dev
+                  mm-common
+                  libxml-libxml-perl
+                  meson
+                  ninja-build
+                  glib-networking
+  GIO_EXTRA_MODULES: "/usr/lib/x86_64-linux-gnu/gio/modules"
+  GIT_SUBMODULE_STRATEGY: normal
+
+.build_default:
+  before_script:
+    - export DEBIAN_FRONTEND=noninteractive
+    - apt update && apt -y upgrade && apt -y install $DEPENDENCIES
+
+# Clear the cache manually.
+clear_cache:
+  stage: deps
+  when: manual
+  script:
+    - echo Clearing the build-deps cache
+  cache:
+    key: build-deps
+    paths:
+      - libsigc/
+      - glibmm/
+      - cairomm/
+    policy: push
+
+build_deps:
+  extends: .build_default
+  stage: deps
+  variables:
+    DEPENDENCIES: $MESON_GCC_DEPS docbook5-xml docbook-xsl
+  script:
+    # Build and cache dependencies that can't be installed with apt.
+    # Install to ./installdir, with the contents of the installed files
+    # (notably .pc files) suited for installation to /usr.
+    - export DESTDIR=`pwd`/installdir
+    # Build libsigc++3
+    - if test ! -d libsigc; then
+    - git clone --branch 3.2.0 --depth 1 https://github.com/libsigcplusplus/libsigcplusplus.git libsigc
+    - cd libsigc
+    - mkdir _build && cd _build
+    - meson --prefix=/usr --libdir=lib -Dvalidation=false -Dbuild-examples=false -Dbuildtype=release
+    - meson compile
+    - cd ../..
+    - fi
+    - ninja -C libsigc/_build install
+    - cp -r installdir/usr /
+    # Build glibmm-2.68
+    - if test ! -d glibmm; then
+    - git clone --branch 2.72.1 --depth 1 https://gitlab.gnome.org/GNOME/glibmm.git glibmm
+    - cd glibmm
+    - mkdir _build && cd _build
+    - meson --prefix=/usr --libdir=lib -Dbuild-examples=false -Dbuildtype=release
+    - meson compile
+    - cd ../..
+    - fi
+    - ninja -C glibmm/_build install
+    # Build cairomm-1.16
+    - if test ! -d cairomm; then
+    - git clone --branch 1.16.1 --depth 1 https://gitlab.freedesktop.org/cairo/cairomm.git cairomm
+    - cd cairomm
+    - mkdir _build && cd _build
+    - meson --prefix=/usr --libdir=lib -Dbuild-examples=false -Dbuild-tests=false -Dbuildtype=release
+    - meson compile
+    - cd ../..
+    - fi
+    - ninja -C cairomm/_build install
+  cache:
+    key: build-deps
+    paths:
+      - libsigc/
+      - glibmm/
+      - cairomm/
+    policy: pull-push
+  # Transfer the installed part of the built dependencies to later stages
+  # as artifacts. The cache does not always work.
+  # https://gitlab.gnome.org/Infrastructure/Infrastructure/-/issues/775
+  artifacts:
+    paths:
+      - installdir/
+    expire_in: 1 day
+
+release_gcc_build:
+  extends: .build_default
+  stage: build
+  variables:
+    DEPENDENCIES: $MESON_GCC_DEPS
+  script:
+    - cp -r installdir/usr /
+    - mkdir _build && cd _build
+    # -Ddebug=false + -Doptimization=3 correspond to -Dbuildtype=release
+    - meson --prefix=/usr --libdir=lib -Ddebug=false -Doptimization=3 -Dwarnings=fatal -Dwarning_level=3 -Dwerror=true
+    - meson compile
+    # Must wrap the command in single quotes because of the colon.
+    # See https://gitlab.gnome.org/help/ci/yaml/script.md#use-special-characters-with-script
+    # Don't test subprojects.
+    - 'meson test --suite pangomm:'
+    - meson install
+  artifacts:
+    when: always
+    paths:
+      - _build/docs/reference
+
+release_clang_build:
+  extends: .build_default
+  stage: build
+  variables:
+    DEPENDENCIES: $MESON_GCC_DEPS clang
+  script:
+    - cp -r installdir/usr /
+    - mkdir _build && cd _build
+    # -Ddebug=false + -Doptimization=3 correspond to -Dbuildtype=release
+    - CC=clang CXX=clang++ meson --prefix=/usr --libdir=lib -Ddebug=false -Doptimization=3 -Dwarnings=fatal -Dwarning_level=3 -Dwerror=true
+    - meson compile
+    # Don't test subprojects.
+    - 'meson test --suite pangomm:'
+    - meson install
+  allow_failure: true
+  artifacts:
+    when: on_failure
+    paths:
+      - _build/meson-logs/testlog.txt
+      - _build/meson-logs/meson-log.txt
+    expire_in: 1 week
+
+# Publish reference documentation at gnome.pages.gitlab.gnome.org/pangomm
+pages:
+  stage: deploy
+  needs: [release_gcc_build]
+  script:
+    - mkdir public
+    - mv _build/docs/reference/html/* public
+  artifacts:
+    paths:
+      - public
+  only:
+    refs:
+      - master
diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..35ef03f
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,20 @@
+Please use the mailing list (gtkmm-list@gnome.org) instead of emailing developers directly.
+See the ChangeLog for up-to-date information.
+
+Murray Cumming <murrayc@usa.net>
+Daniel Elstner <daniel.elstner@gmx.net>
+
+Some former contributors:
+
+Karl Nelson <kenelson@ece.ucdavis.edu>
+Tero Pulkkinen <terop@modeemi.cs.tut.fi>
+Elliot Lee <sopwith@redhat.com>
+Phil Dawes <P.L.Dawes-CSSE94@cs.bham.ac.uk>
+Erik Andersen <andersee@debian.org>
+Bibek Sahu <scorpio@dodds.net>
+Mirko Streckenbach 
+Havoc Pennington <hp@pobox.com>
+Guillaume Laurent <glaurent@telegraph-road.org>
+Todd Dukes <tdukes@ibmoto.com>
+Peter Lerner <peter.lerner@bnbt.de>
+Herbert Valerio Riedel <hvr@gnu.org>
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..c4792dd
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,515 @@
+
+                  GNU LESSER GENERAL PUBLIC LICENSE
+                       Version 2.1, February 1999
+
+ Copyright (C) 1991, 1999 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 Lesser GPL.  It also counts
+ as the successor of the GNU Library Public License, version 2, hence
+ the version number 2.1.]
+
+                            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 Lesser General Public License, applies to some
+specially designated software packages--typically libraries--of the
+Free Software Foundation and other authors who decide to use it.  You
+can use it too, but we suggest you first think carefully about whether
+this license or the ordinary General Public License is the better
+strategy to use in any particular case, based on the explanations
+below.
+
+  When we speak of free software, we are referring to freedom of use,
+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 and use pieces of
+it in new free programs; and that you are informed that you can do
+these things.
+
+  To protect your rights, we need to make restrictions that forbid
+distributors to deny you these rights or to ask you to surrender these
+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 other code 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.
+
+  We protect your rights with a two-step method: (1) we copyright the
+library, and (2) we offer you this license, which gives you legal
+permission to copy, distribute and/or modify the library.
+
+  To protect each distributor, we want to make it very clear that
+there is no warranty for the free library.  Also, if the library is
+modified by someone else and passed on, the recipients should know
+that what they have is not the original version, so that the original
+author's reputation will not be affected by problems that might be
+introduced by others.
+^L
+  Finally, software patents pose a constant threat to the existence of
+any free program.  We wish to make sure that a company cannot
+effectively restrict the users of a free program by obtaining a
+restrictive license from a patent holder.  Therefore, we insist that
+any patent license obtained for a version of the library must be
+consistent with the full freedom of use specified in this license.
+
+  Most GNU software, including some libraries, is covered by the
+ordinary GNU General Public License.  This license, the GNU Lesser
+General Public License, applies to certain designated libraries, and
+is quite different from the ordinary General Public License.  We use
+this license for certain libraries in order to permit linking those
+libraries into non-free programs.
+
+  When a program is linked with a library, whether statically or using
+a shared library, the combination of the two is legally speaking a
+combined work, a derivative of the original library.  The ordinary
+General Public License therefore permits such linking only if the
+entire combination fits its criteria of freedom.  The Lesser General
+Public License permits more lax criteria for linking other code with
+the library.
+
+  We call this license the "Lesser" General Public License because it
+does Less to protect the user's freedom than the ordinary General
+Public License.  It also provides other free software developers Less
+of an advantage over competing non-free programs.  These disadvantages
+are the reason we use the ordinary General Public License for many
+libraries.  However, the Lesser license provides advantages in certain
+special circumstances.
+
+  For example, on rare occasions, there may be a special need to
+encourage the widest possible use of a certain library, so that it
+becomes
+a de-facto standard.  To achieve this, non-free programs must be
+allowed to use the library.  A more frequent case is that a free
+library does the same job as widely used non-free libraries.  In this
+case, there is little to gain by limiting the free library to free
+software only, so we use the Lesser General Public License.
+
+  In other cases, permission to use a particular library in non-free
+programs enables a greater number of people to use a large body of
+free software.  For example, permission to use the GNU C Library in
+non-free programs enables many more people to use the whole GNU
+operating system, as well as its variant, the GNU/Linux operating
+system.
+
+  Although the Lesser General Public License is Less protective of the
+users' freedom, it does ensure that the user of a program that is
+linked with the Library has the freedom and the wherewithal to run
+that program using a modified version of the Library.
+
+  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, whereas the latter must
+be combined with the library in order to run.
+^L
+                  GNU LESSER GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License Agreement applies to any software library or other
+program which contains a notice placed by the copyright holder or
+other authorized party saying it may be distributed under the terms of
+this Lesser 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.
+^L
+  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.
+^L
+  6. As an exception to the Sections above, you may also combine 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) Use a suitable shared library mechanism for linking with the
+    Library.  A suitable mechanism is one that (1) uses at run time a
+    copy of the library already present on the user's computer system,
+    rather than copying library functions into the executable, and (2)
+    will operate properly with a modified version of the library, if
+    the user installs one, as long as the modified version is
+    interface-compatible with the version that the work was made with.
+
+    c) 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.
+
+    d) 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.
+
+    e) 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 materials to be 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.
+^L
+  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 with
+this License.
+^L
+  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 Lesser 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.
+^L
+  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
+^L
+           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 Lesser 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
+    Lesser General Public License for more details.
+
+    You should have received a copy of the GNU Lesser 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/COPYING.tools b/COPYING.tools
new file mode 100644 (file)
index 0000000..d511905
--- /dev/null
@@ -0,0 +1,339 @@
+                   GNU GENERAL PUBLIC LICENSE
+                      Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+                           Preamble
+
+  The licenses for most software are designed to take away your
+freedom to share and change it.  By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users.  This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it.  (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.)  You can apply it to
+your programs, 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 software, or if you modify it.
+
+  For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have.  You must make sure that they, too, receive or can get the
+source code.  And you must show them these terms so they know their
+rights.
+
+  We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+  Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software.  If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+  Finally, any free program is threatened constantly by software
+patents.  We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary.  To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+  The precise terms and conditions for copying, distribution and
+modification follow.
+
+                   GNU GENERAL PUBLIC LICENSE
+   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+  0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License.  The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language.  (Hereinafter, translation is included without limitation in
+the term "modification".)  Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope.  The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+  1. You may copy and distribute verbatim copies of the Program's
+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 give any other recipients of the Program a copy of this License
+along with the Program.
+
+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.
+
+  2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, 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) You must cause the modified files to carry prominent notices
+    stating that you changed the files and the date of any change.
+
+    b) You must cause any work that you distribute or publish, that in
+    whole or in part contains or is derived from the Program or any
+    part thereof, to be licensed as a whole at no charge to all third
+    parties under the terms of this License.
+
+    c) If the modified program normally reads commands interactively
+    when run, you must cause it, when started running for such
+    interactive use in the most ordinary way, to print or display an
+    announcement including an appropriate copyright notice and a
+    notice that there is no warranty (or else, saying that you provide
+    a warranty) and that users may redistribute the program under
+    these conditions, and telling the user how to view a copy of this
+    License.  (Exception: if the Program itself is interactive but
+    does not normally print such an announcement, your work based on
+    the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole.  If
+identifiable sections of that work are not derived from the Program,
+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 Program, 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 Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+  3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+    a) 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; or,
+
+    b) Accompany it with a written offer, valid for at least three
+    years, to give any third party, for a charge no more than your
+    cost of physically performing source distribution, a complete
+    machine-readable copy of the corresponding source code, to be
+    distributed under the terms of Sections 1 and 2 above on a medium
+    customarily used for software interchange; or,
+
+    c) Accompany it with the information you received as to the offer
+    to distribute corresponding source code.  (This alternative is
+    allowed only for noncommercial distribution and only if you
+    received the program in object code or executable form with such
+    an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it.  For an executable work, 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 executable.  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.
+
+If distribution of executable or 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 counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+  4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License.  Any attempt
+otherwise to copy, modify, sublicense or distribute the Program 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.
+
+  5. 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 Program or its derivative works.  These actions are
+prohibited by law if you do not accept this License.  Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+  6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program 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.
+
+  7. 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 Program at all.  For example, if a patent
+license would not permit royalty-free redistribution of the Program 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 Program.
+
+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.
+
+  8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program 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.
+
+  9. The Free Software Foundation may publish revised and/or new versions
+of the 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 Program
+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 Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+  10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, 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
+
+  11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW.  EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "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 PROGRAM IS WITH YOU.  SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+  12. 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 PROGRAM 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 PROGRAM (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 PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+                    END OF TERMS AND CONDITIONS
+
+           How to Apply These Terms to Your New Programs
+
+  If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+  To do so, attach the following notices to the program.  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 program's name and a brief idea of what it does.>
+    Copyright (C) <year>  <name of author>
+
+    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.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+    Gnomovision version 69, Copyright (C) year name of author
+    Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+    This is free software, and you are welcome to redistribute it
+    under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License.  Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary.  Here is a sample; alter the names:
+
+  Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+  `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+  <signature of Ty Coon>, 1 April 1989
+  Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs.  If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library.  If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/ChangeLog b/ChangeLog
new file mode 100644 (file)
index 0000000..8b26a8f
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,1465 @@
+2022-09-21  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  2.50.1
+
+2022-09-12  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Convert README to README.md
+
+2022-05-24  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson/MSVC: Re-organize warning-related compiler flags
+
+  Add a short description for each of the warning-related compiler flags that we
+  apply globally.
+  
+  Also, apply '/wd4267' only when we are building a 64-bit build, as that warning
+  should only be related to 64-bit builds.
+
+2022-05-20  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  meson.build: Avoid configuration warnings
+
+2022-03-18  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Use artifacts to transfer data between stages, part 2
+
+2022-03-16  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Build documentation of dependencies
+
+  Build documentation of libsigc++, glibmm, cairomm, or else pangomm's
+  inheritance diagrams will be incomplete due to missing tag files.
+
+2022-03-16  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Use artifacts to transfer data between stages
+
+2022-02-27  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Don't build everything with warnings=fatal
+
+  Build only pangomm with warnings=fatal.
+  Select latest released version of libsigc++3.
+
+2022-02-27  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  meson.build: Check if Perl is required for building documentation
+
+  New versions of mm-common use the Python scripts doc_postprocess.py
+  and doc_install.py instead of the Perl scripts doc-postprocess.pl and
+  doc-install.pl when documentation is built.
+
+2022-02-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Context::get_font_map(): Fix reference count
+
+  pango_context_get_font_map() returns "(transfer none)".
+  See https://mail.gnome.org/archives/gtkmm-list/2022-February/msg00031.html
+
+2022-02-15  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  meson.build: Specify 'check' option in run_command()
+
+  The default value will be changed in future Meson releases.
+  
+  Don't use deprecated python3.path().
+  Let import('python').find_installation() always find the python
+  installation used to run Meson.
+
+2022-01-04  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Reinsert 'meson test'
+
+  now with (hopefully) correct YAML syntax.
+
+2022-01-04  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Skip 'meson test'
+
+2022-01-04  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Don't build documentation of dependencies
+
+2021-12-06  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  2.50.0
+
+2021-12-06  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Comment out 'meson test'
+
+  If the package manager does not find a new enough version of pango,
+  pango is built as a subproject, and 'meson test' tests both pango and
+  pangomm. If a pango test fails, the whole CI fails.
+  There are no tests in pangomm, anyway.
+
+2021-12-06  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Attribute: Add some create_attr_*() methods
+
+  and add TextTransform, BaselineShift and FontScale enums.
+
+2021-12-06  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  AttrList: Add to_string() and from_string()
+
+  and require pango >= 1.49.4.
+
+2021-12-06  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Regenerate docs.xml and .defs files, using files from pango 1.50.0
+
+  and update pango_docs_override.xml.
+
+2021-11-10  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  build: Support Visual Studio 2022 builds
+
+  Make these builds distinct from the Visual Studio 2019 builds.
+
+2021-10-11  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Add FontMap::get_family()
+
+2021-10-11  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Add the CairoFontMapImpl class
+
+  * pango/pangomm/.gitignore:
+  * pango/pangomm/filelist.am:
+  * pango/pangomm/meson.build: Add cairofontmapimpl.
+  * pango/src/cairofontmap.hg: Improve the documentation of get_default().
+  * pango/src/fontmap.[ccg|hg]: Add a custom wrap_new(). Wrap in a
+  CairoFontMapImpl if the PangoFontMap object implements PangoCairoFontMap.
+  * pango/pangomm/cairofontmapimpl.[cc|h]: New files. A CairoFontMapImpl
+  derives from FontMap and implements CairoFontMap.
+  
+  Fixes #15
+
+2021-09-12  Pavlo Solntsev  <p.sun.fun@gmail.com>
+
+  CI: Switching to debian:testing
+
+2021-09-06  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  AttrList: Add get_attributes(), update(), equal()
+
+  Fixes #12
+
+2021-09-06  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  docs/reference/Doxyfile.in: Remove obsolete entry
+
+2021-08-25  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  CI: Add .gitlab-ci.yml
+
+2021-08-25  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Don't include individual pango headers, part 2
+
+2021-08-24  Matthias Clasen  <mclasen@redhat.com>
+
+  Don't include individual pango headers
+
+  As in every gnome library, you are only supposed
+  to include the main pango.h header from the outside.
+  
+  This was causing build failures after some recent
+  pango header rearrangements.
+
+2021-07-16  Matthias Clasen  <mclasen@redhat.com>
+
+  Use pango from the main branch
+
+  Change the Pango subproject to use the main branch.
+  
+  This depends on
+  https://gitlab.gnome.org/GNOME/pango/-/merge_requests/379
+
+2021-05-21  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  2.49.1
+
+2021-05-18  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Add dependencies to Doxygen tag files in subprojects
+
+  Doxygen in a main project shall not be called before tag files have been
+  created or updated in subprojects.
+
+2021-05-14  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Fix build as subproject without building documentation
+
+  * meson.build: If mm-common-get is not found in maintainer-mode
+  with 'required: false', try with 'required: true'.
+  Don't try to use tag_file, if documentation is not built.
+  * docs/reference/meson.build: Don't use variables from modules
+  that don't define doxytagfile. These are subprojects that don't build
+  their documentation.
+
+2021-05-11  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Visual Studio builds: Clean up build files
+
+  glibmm will be updated to be clear of classes that export items making the
+  built binaries dependent on the exact compiler version and the STL version,
+  which will eliminate the need to ignore warnings C4251, C4273 and C4275.
+  
+  We will also use the /EHsc compiler flag so that we can also drop the
+  ignore on warning C4530.
+
+2021-05-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Subprojects can use meson.add_dist_script() if meson.version() >= 0.58.0
+
+  Call add_dist_script() in a subproject, if meson.version() >= 0.58.0.
+
+2021-04-08  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: No implicit_include_directories
+
+2021-03-26  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: No implicit_include_directories
+
+  It shall not be possible to find a pangomm header file
+  with #include <xxx.h> instead of #include <pangomm/xxx.h>.
+  Not fully fixed until https://github.com/mesonbuild/meson/issues/8562
+  has been fixed.
+
+2021-03-16  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: Make it possible to use pangomm as a subproject
+
+  pango, cairomm and glibmm can be subprojects of pangomm.
+
+2021-03-09  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  pangommconfig.h.*: Don't dllimport on MinGW
+
+  This will fix warnings when building items using pangomm with MinGW/GCC.
+  
+  Please see: https://gitlab.gnome.org/GNOME/gtkmm/-/issues/90
+
+2021-02-25  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: Use relative paths to untracked/
+
+  The paths to the source code in untracked/ shall be relative to the
+  meson.build file, when library files are built from a tarball.
+  With absolute paths Meson may generate too long file names.
+  See merge request gtkmm!61
+
+2021-01-18  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  GlyphItem: Make most methods public
+
+  They became private by mistake 12 years ago in
+  commit d5781fecebf7eeb5bafbfb875027f6f1707a2bf1.
+  
+  Fixes #11
+
+2021-01-18  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Layout, LayoutIter: Add get_const_line() and get_const_lines()
+
+  * pango/src/layout.hg: Add get_const_line() and get_const_lines().
+  * pango/src/layoutiter.hg: Add get_const_line().
+  
+  Fixes #10
+
+2021-01-17  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Layout: Speed up get_log_attrs()
+
+  Call pango_layout_get_log_attrs_readonly() instead of
+  pango_layout_get_log_attrs(). The PangoLogAttr structs
+  will then be copied once instead of twice.
+
+2021-01-16  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  GlyphItem: Fix a memory leak in split()
+
+2021-01-16  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  docs/reference/Doxyfile.in: Remove obsolete entries
+
+2020-12-19  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  2.48.0
+
+2020-12-18  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Regenerate docs.xml and .defs files
+
+2020-12-11  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Change ABI to pangomm-2.48; Use glibmm-2.68 instead of glibmm-2.66
+
+  So we can use the 2.44-2.46 version numbers for stable releases in
+  the pangomm-1.4 ABI series.
+  
+  We've done similar ABI name changes before.
+
+2020-11-27  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Add Layout::set/get_line_spacing()
+
+  See #9
+
+2020-11-27  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  configure.ac, meson.build: Require pangocairo >= 1.45.1
+
+  Overline support, such as pango_attr_overline_new(), was added in
+  pango 1.45.1. The requirement should have been bumped when those
+  functions were wrapped.
+
+2020-11-16  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Wrap pango_shape_with_flags()
+
+  * configure.ac:
+  * meson.build: Require pangocairo >= 1.44.3
+  * pango/src/glyphstring.[ccg|hg]: Add constructor
+  GlyphString(const Glib::ustring& item_text,
+  const Glib::ustring& paragraph_text, const Analysis& analysis,
+  ShapeFlags flags = ShapeFlags::NONE).
+  * pango/src/item.[ccg|hg]: Add enum ShapeFlags and
+  shape(const Glib::ustring& item_text, const Glib::ustring& paragraph_text,
+  ShapeFlags flags = ShapeFlags::NONE).
+  * tools/m4/convert_pango.m4: Add conversions for ShapeFlags.
+  
+  See #9
+
+2020-10-07  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Bump version to 2.43.3
+
+  Even micro version in released versions, odd micro version in Git.
+  See https://wiki.gnome.org/MaintainersCorner/Releasing
+  (which says minor version in one sentence where it should
+  say micro version)
+
+2020-10-01  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: Fix versioning on macOS
+
+  See libsigcplusplus, pull request 65
+
+2020-07-23  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Use Meson-style DLL and .lib naming if requested
+
+  To make things more consistent and less prone to confusion, if 'USE_MESON_LIBS'
+  is specified in the NMake command line, build the DLLs and .lib's that are
+  named like the Meson counterparts.  Binaries built with Meson+Visual Studio
+  and the ones that are built via NMake using 'USE_MESON_LIBS' are
+  interchangeable, provided that they are built with the same Visual Studio
+  version.
+
+2020-07-23  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Fix generating pangomm[config.h|.rc]
+
+  The previous additions to generate those files accidentally made the build
+  attempt to generate them, even if done from a release tarball that is done by
+  the autotools builds.
+  
+  This will fix this situation, and improve the situation that if pangomm.rc or
+  pangommconfig.h needs to be generated, these files will be generated
+  automatically
+
+2020-07-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  LayoutIter: Fix get_run() and get_line()
+
+  get_run() shall call pango_layout_iter_get_run_readonly() and
+  take a copy of the returned PangoLayoutRun.
+  Make proper const and non-const versions of get_line().
+
+2020-07-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  LayoutRun: Rename to GlyphItem
+
+  PangoLayoutRun was renamed to PangoGlyphItem in the year 2002.
+  For backward compatibility PangoLayoutRun is a typedef of PangoGlyphItem.
+  No such backward compatibility is needed in this version of pangomm.
+
+2020-07-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Renderer: Add vfuncs
+
+  See #9
+
+2020-07-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Font, FontFace, FontFamily, FontMetrics: Add new methods
+
+2020-07-22  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Link with giomm
+
+  ...since we are now using items from giomm since commit 17021092, and ensure
+  that we do indeed refer to the glibmm (giomm) master headers
+  as we are using items from
+
+2020-07-20  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Attribute: Add Overline and ShowFlags enums and some create*() methods
+
+  Fixes #9
+
+2020-07-20  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Regenerate docs.xml and .defs files
+
+2020-07-19  Andreas Persson  <andreasp56@outlook.com>
+
+  Let FontMap and FontFamily implement ListModel
+
+  Let the FontMap and FontFamily classes implement the Gio::ListModel
+  interface, just as the C level pango classes do. For this, a dependency
+  to giomm was added. Wrap CairoFontMap::get_default().
+
+2020-07-08  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Fix headers search
+
+  We ought to look in $(PREFIX)\include\harfbuzz and $(PREFIX)\include, as the
+  HarfBuzz and Cairo headers can be found in these respective locations.
+
+2020-07-08  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Support ARM64 Windows builds
+
+  This will make the NMake Makefiles capable of building ARM64 binaries of
+  pangomm, which can be used on Windows 10 on ARM systems.
+
+2020-06-30  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  README.win32: Update Meson build info
+
+  It is now possible to build Pango directly from a GIT checkout on Visual Studio
+  builds for a while, so let people know about this.
+  
+  Also note that glibmm and cairomm should be built with Meson in order to use the
+  Meson build files for pangomm, and that it is recommended to use the same compiler
+  to build pangomm, glibmm and cairomm.
+
+2020-06-30  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Use the /utf-8 compiler flag
+
+  This makes it easier to build pangomm on non-Western locales, without requiring
+  to change the "Locale settings for non-Unicode programs" to English, which will
+  require a restart, since warning (error) C4819 can be otherwise triggered, which
+  can indicate broken builds due to Unicode handling issues in the compiler.
+
+2020-06-30  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Apply toolset version for Meson-built deps
+
+  As the Meson build files for Visual Studio apply the toolset version in the
+  .lib filenames by default, apply the toolset version in the Meson-built -mm
+  .lib files that we link in, just as we did when we we link in the -mm .lib
+  files that was built with NMake, by default.
+  
+  The option 'USE_COMPAT_LIBS' will also mean that we will use the former
+  behavior when we link in the Meson-built -mm .lib's, just as we did when we
+  link in the NMake-built -mm .lib's.
+  
+  Also fix the case also when the 'USE_COMPAT_LIBS' option is used and when
+  'USE_MESON_LIBS' is not used on Visual Studio 2017, where the toolset version
+  was not correctly applied.
+
+2020-06-29  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  docs/reference/: Update for Doxygen >= 1.8.16
+
+  * docs/reference/meson.build: Doxygen 1.8.16 and later does not store
+  tag file names in the html files. This requires changes in meson.build
+  and in doc-install.pl (in mm-common). Otherwise references to other modules
+  won't be updated in the html files when they are installed.
+  * docs/reference/Doxyfile.in: Remove PERL_PATH and MSCGEN_PATH.
+  Doxygen since version 1.8.0 does not use them.
+
+2020-06-29  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Meson/Visual Studio builds: Include toolset version by default
+
+  This makes the built DLL and .lib's contain the toolset version if the build is
+  carried out using Visual Studio 2017 or later, unless the
+  'msvc14x-parallel-installable' option is set to be false during configuration.
+  
+  The reasoning behind this change is that there can be subtle problems when, for
+  instance, one tries to link to a Visual Studio 2017-built pangomm when building
+  items dependening on pangomm with Visual Studio 2019.  This is unfortunate as
+  Microsoft did try hard to make interoperating between binaries built with
+  Visual Studio 2017 and 2019 as easy as possible in terms of ABI and API, but
+  unfortunately this can hit the corner cases where this compatibility does not
+  work.
+  
+  As the name suggests, this attempts to make Visual Studio 2017 and 2019 builds
+  share a single set of underlying C DLLs easier, while avoiding breakages caused
+  by such subtle differences.
+
+2020-06-29  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson.build: Check for /utf-8 on Visual Studio
+
+  Enable this compiler flag on Visual Studio if it is supported, so that building
+  under non-English (East Asian) locales is made easier, which helps to avoid the
+  C4819 error under such situations, due to a Unicode handling issue in the
+  compiler when running under such locales
+
+2020-06-29  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Meson: Use pkg-config to find glibmm and cairomm for all builds
+
+  Stop manually looking for glibmm and cairomm for better consistency, as:
+  
+  -Items that depended on glibmm which added Meson build support after glibmm,
+   such as gtkmm and libxml++ also required glibmm to be found via pkg-config
+   files, and they still had NMake Makefile support for Visual Studio builds.
+   For items that use cairomm directly, this will be the case as well.
+  -There could be corner cases on the glibmm and cairomm libraries that pangomm
+   links to in  terms of ABI compatibility between Visual Studio 2015, 2017 and
+   2019.
+
+2020-06-16  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Use toolset version in DLL/.lib naming
+
+  Instead of using the Visual Studio version ('vc150' for Visual Studio 2017),
+  use the toolset version ('vc141' for Visual Studio 2017 and 'vc142' for Visual
+  Studio 2019, as defined by Microsoft) so that we are more in-line with what
+  is now done in the pangomm-2-42 branch.
+  
+  If using the old naming convention is desired, an NMake command line option
+  'USE_COMPAT_LIBS' have been added-note that this will require glibmm, cairomm,
+  and libsigc++ to be built with that option enabled.
+
+2020-05-05  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson: Clean up Visual Studio bits
+
+  Streamline how we look for the dependencies manually, by using the
+  'has_headers:' attribute of cpp_compiler.find_library(), so that we can
+  check for the presence of the headers at the same time as looking for
+  the glibmm, cairomm and/or libsigc++ headers.
+
+2020-05-05  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Meson/Visual Studio: Support cairomm lookup using pkg-config
+
+  cairomm recently received Meson build support, which will generate the
+  pkg-config files for us, so try to look for cairomm first using
+  pkg-config, before looking for it manually.
+  
+  Since cairomm's pkg-config file also pulls in libsigc++, we can also
+  skip looking for libsigc++ if we found cairomm via pkg-config.
+
+2020-05-05  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Support Meson-built cairomm
+
+  Allow linking directly to Meson-built cairomm when using the
+  USE_MESON_LIBS option when running NMake.
+
+2020-04-28  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  pango/meson.build: Minor fix of pangomm-2.44.pc
+
+  libdir=${exec_prefix}/lib, as when it's generated with Autotools.
+
+2020-04-11  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  pango/src/fontdescription.hg: Mark operators with PANGOMM_API
+
+  We are using a _WRAP_EQUAL here which generates operator== and
+  operator!= overloads that actually need to be exported.  So, pass in a
+  function decorator to _WRAP_EQUAL
+
+2020-04-07  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: If not maintainer-mode, check that generate-binding.py exists
+
+  Trying to build with maintainer-mode=false from a tarball generated with
+  Autotools will fail with a proper error message.
+  Fixes #6
+
+2020-03-31  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: Set default value of the 'warnings' option to 'min'
+
+  And add 'dist-warnings' with default value 'fatal'. It's used when a
+  tarball is tested by 'ninja dist' or 'meson dist'.
+  https://mail.gnome.org/archives/gtkmm-list/2020-March/msg00025.html
+  
+  Add a better error message if mm-common-get is required but not found.
+
+2020-03-31  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  pango/src/*.hg: Mark _WRAP_ENUM with decl_prefix
+
+  This way, we can use compiler directives to export the symbols for the
+  _WRAP_ENUM-generated template<> classes.
+
+2020-03-30  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Fix build instruction info display
+
+  Make up the missing escape carats...
+
+2020-03-29  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: Avoid some recompilations, and other changes
+
+  * MSVC_NMake/filelist.am: Remove pangomm/copy-pangommconfig-h.py.
+  * MSVC_NMake/pangomm/copy-pangommconfig-h.py: Removed file.
+  * MSVC_NMake/pangomm/meson.build: Copy pangommconfig.h with configure_file().
+  * Makefile.am: Distribute tools/dummy-header.py instead of tools/dist-cmd.py.
+  * docs/reference/meson.build: Rename a variable.
+  * meson.build: Rename some variables. Always set gmmproc_dir.
+  In maintainer-mode, show its value in the summary.
+  * pango/meson.build: Set pangommconfig_h.
+  * pango/pangomm/meson.build: Create dummy_header.h, depending on all
+  generated headers. It guarantees that all generated headers are built
+  before pangomm_library is built, at the same time avoiding unnecessary
+  recompilations.
+  * tools/dist-cmd.py: Removed file. It's not necessary in add_dist_script()
+  when the first parameter is python3.path().
+  * tools/dummy-header.py: New file.
+
+2020-03-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  2.43.2
+
+2020-03-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  README: Describe building with Meson and Autotools
+
+2020-03-17  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Use glibmm-2.66 instead of glibmm-2.64
+
+  We have changed the ABI name in glibmm.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Support Meson-built glibmm
+
+  Add the correct naming for the DLLs and .lib's for glibmm that is built
+  with Meson.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Ignore warnings C4251 and C4275
+
+  We might well be building against glibmm that is not built using gendef,
+  so we get C4251 and C4275 warnings when building against such GLib
+  builds.  Ignore those warnings, since we know quite well that we are
+  importing from glibmm's import libraries using __declspec(dllimport) in
+  this case.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Drop gendef from the sources
+
+  Since we are now using compiler directives to export the symbols on
+  Visual Studio builds, we can now drop the venerable gendef tool from the
+  sources.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Visual Studio builds: Do not use gendef.exe
+
+  Instead, use compiler directives to build the pangomm DLLs.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  pango/pangomm/*.h: Decorate APIs with PANGOMM_API
+
+  This prepares for the export of symbols using compiler directives rather
+  than using gendef.exe.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  pango/src/*.hg: Decorate classes and functions with PANGOMM_API
+
+  This prepares for using compiler directives to export symbols rather
+  than using gendef.exe.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  pango/pangomm/meson.build: Define PANGOMM_BUILD
+
+  This will eventually let us tell the compiler that we want to use
+  compiler directives to export the symbols.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  pango/pangommconfig.h.*: Add PANGOMM_API
+
+  This prepares for decoration of the various APIs in pangomm so that we
+  can export symbols at least on Visual Studio buids using compiler
+  directives, without the need of gendef.exe.
+
+2020-03-12  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Fix build from Meson tarballs
+
+  Look also for headers in untraced/pango and untracked/pango/pangomm, and
+  fix up headers installation and build rules.
+
+2020-03-11  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson: Ignore warning C4251 and C4275 on MSVC builds
+
+  We might be building against glibmm that is built with
+  __declspec(dllexport), meaning that warnings C4251 and C4275 will be
+  generated as we are now in-turn using __declspec(dllimport).  We can
+  just ignore these compiler warnings, since we are pretty sure what we
+  are doing at this point.
+
+2020-03-11  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson: Build generate_extra_defs with Visual Studio too
+
+  The NMake Makefiles in glibmm now builds glibmm_generate_extra_defs-2.x.lib,
+  so we can make use of it to build generate_extra_defs on Visual Studio too.
+
+2020-03-11  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson.build: Look for glibmm with pkg-config on MSVC too
+
+  glibmm gained Meson build support for Visual Studio, so we can first
+  try to look for glibmm with pkg-config first, and then fall back to
+  manual searching if that cannot be found.
+  
+  Note that libsigc++ also has a Meson build system as well, but either we
+  look for it via glibmm's pkg-config files, or we look for both glibmm
+  and libsigc++ manually.
+  
+  Also support looking for Meson-built libsigc++ .lib's as well if glibmm
+  is to be looked for manually.
+
+2020-03-11  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Meson: allow maintainer builds on Visual Studio too
+
+  glibmm recently gained the ability to build with Visual Studio from a GIT
+  checkout and to install the PERL scripts used to generate the C++ sources from
+  the respective templates, so enable this support for pangomm as well as the
+  needed infrastructure are largely in place.
+  
+  Note that a new configuration option has been added for Visual Studio builds
+  to specify the directory for gmmproc, although there is Meson build support
+  for building glibmm, but NMake Makefiles could have been used to build
+  glibmm, meaning glibmm built with Visual Studio may not have pkg-config
+  files, so it is used to specify the location if gmmproc if necessary.
+  
+  Since some portions that we use for non-maintainer builds can be used for
+  maintainer builds as well, make them shared to keep changes minimal.
+
+2020-03-11  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  pango/src/color.hg: Fix call to _CLASS_BOXEDTYPE_STATIC
+
+  Remove all the parameters after the second one, they were originally ignored
+  as _CLASS_BOXEDTYPE_STATIC accepted 2 arguments and will cause issues with
+  the new api_decoration stuff that was recently added to glibmm, which was the
+  third argument
+
+2020-02-27  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Support Meson-built libsigc++
+
+  Add an option USE_MESON_LIBS for the NMake command line so that we can use
+  the Meson-built libsigc++ easier, without needing to manually update Makefiles
+
+2020-02-27  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Separate outdir and intdir by toolset version
+
+  This reduces the chances of builds by different Visual Studio versions become
+  mixed up with other versions, and makes the build tree cleaner.  Note that
+  Visaul Studio 2015 through 2019 are treated as the same toolset version since
+  they link to the same CRT.
+
+2020-02-27  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Allow builds from a GIT checkout
+
+  ...or a Meson-generated release tarball.
+  
+  Add targets to the NMake Makefiles which will allow:
+  
+  -Generating MSVC_NMake/pangomm/pangommconfig.h and
+   MSVC_NMake/pangomm/pangomm.rc, needed for GIT checkouts and
+   Meson-generated release tarballs
+  
+  -Generating the sources that need to be generated with gmmproc and
+   generate_wrap_init.pl, needed for GIT checkouts, and fix installation
+   accordingly.
+  
+  -Look for sources also in $(srcroot)/untracked, which will be the case
+   for Meson-generated release tarballs.
+  
+  -"Install" the m4 files in tools/m4, so that other projects may use it.
+
+2020-02-27  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  NMake Makefiles: Add rules to generate pre-configured items
+
+  This will generate the pangomm.rc and pangommconfig.h files, which are needed
+  for a Visual Studio build.  This will make builds from a GIT checkout
+  easier with NMake.
+
+2020-01-13  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Meson build: Improve internal dependencies
+
+  * docs/reference/meson.build: Less difference between maintainer-mode and
+  not maintainer-mode.
+  * pango/pangomm/meson.build: Make separate lists of built .h files and
+  built .cc files.
+
+2020-01-02  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  docs/reference/meson.build: Check if perl is found
+
+  Don't use perl.path() when configuring Doxyfile, if perl is not found.
+  Perl is not required, if build-documentation=false.
+  See https://github.com/libsigcplusplus/libsigcplusplus/issues/53
+
+2019-12-27  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  meson.build: Check if .git is a directory or file
+
+  In a git worktree, .git is a regular file.
+  
+  See MR !8 (Ting-Wei Lan)
+
+2019-10-22  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  README.win32: Add instructions on Meson builds
+
+  This is added for at least the Visual Studio builds.
+
+2019-10-22  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson.build: Fix library search error messages
+
+  The .format(...) items are placed wrongly in the cases that the required
+  -mm libraries are not found.  Fix this.
+  
+  Make these messages clearer to people that all 3 C++-17 versions of the
+  cairomm, glibmm and sigc++ .lib's are required by combining the 3
+  assert messages into a single assert message.
+
+2019-10-21  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson: Link in the version resource on Windows
+
+  For all Windows builds, compile the version resource script (pangomm.rc)
+  and link it into the pangomm DLL so that we embed the version info in
+  that DLL.
+
+2019-10-21  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson.build: Add MSVC-specific warning items
+
+  Let MSVC report warnings that roughly match those reported by the GCC
+  builds, but ignore the warnings that aren't really harmful, by referring
+  to GLib's msvc_recommended_pragmas.h.
+
+2019-10-21  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson: Build import .lib for MSVC builds
+
+  This first builds gendef.cc in MSVC_NMake/gendef so that we can use it
+  to generate the .def file that we need to build the import .lib file for
+  the pangomm DLL.
+  
+  However, in order to do this in Meson, we need to build the sources into
+  a temporary static .lib and run gendef.exe against it (which works with
+  gendef.cc unchanged, thanks to dumpbin /symbols accepting static .lib's
+  as well, so we won't have to figure out where the compiled object files
+  are) in order to obtain the symbols that we need, since Meson does not
+  support pre-link build steps.
+  
+  Note that all the source files are still compiled only once since we are
+  using extract_all_objects(), so the only overhead is the temporary static
+  .lib that we need to build to obtain the .def file.
+
+2019-10-21  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Meson: Don't use 'cp' in MSVC_NMake
+
+  The 'cp' command is unfortunately not available in non-UNIXy shells, so
+  use a Python script instead to do the same thing.
+
+2019-10-21  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson: Don't build generate_extra_defs on MSVC
+
+  This depends on portions in glibmm tat is not applicable directly to
+  MSVC builds, so skip building this on MSVC
+
+2019-10-21  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  meson: Check for -mm deps manually on MSVC
+
+  The MSVC build files for the -mm library dependencies do not generate
+  pkg-config files, so check for them manually.  This can be eventually
+  replaced by the pkg-config checks when these dependencies gain
+  Meson build support for MSVC.
+  
+  This will build and link pangomm without the import libraries, which
+  will require us to build and use gendef.exe that is in
+  MSVC_NMake/gendef, which will be done in a later commit.
+
+2019-10-21  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Meson builds: Improve GIT check on MSVC builds
+
+  Check that we are not attempting to build directly from a GIT
+  checkout on MSVC, as this is currently not supported as m4 is required,
+  which is not well supported on a Windows cmd.exe environment.
+
+2019-10-14  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  pango/pangomm/meson.build: Fix output from declare_dependency()
+
+  * meson.build: Rename pangomm_deps -> pangomm_build_dep to avoid mix-up
+  with pangomm_dep in pango/pangomm/meson.build.
+  * pango/pangomm/meson.build: Add correct include directories in
+  declare_dependency() when maintainer_mode is false. Simplify the code.
+  * tools/extra_defs_gen/meson.build: Depend on pangomm_build_dep.
+
+2019-09-29  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Add support for building pangomm with Meson
+
+  pangomm can be built with either Autotools or Meson.
+  
+  See MR !4
+
+2019-09-18  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Use glibmm-2.64 instead of glibmm-2.62
+
+  We have changed the ABI name in glibmm.
+
+2019-08-12  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Coverage: Minor documentation fix
+
+2019-07-28  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  tools: Remove obsolete files
+
+  * tools/Makefile.am: Don't distribute README.
+  * tools/Makefile_list_of_sources.am_fragment: Remove, not used.
+  * tools/README:
+  * tools/TODO: Remove, once copied from glibmm, don't belong to pangomm.
+
+2019-07-24  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  LayoutLine: Remove unnecessary forward declaration
+
+  The forward declaration of Glib::wrap(PangoLayoutLine*, bool) became
+  unnecessary when the LayoutLineTraits struct was moved to layout.ccg
+  in commit 57d8bceba336e972a4967db6872a373eac1833b9.
+
+2019-07-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Remove deprecated API
+
+  * pango/src/attrlist.[ccg|hg]: Remove non-const operator bool().
+  * pango/src/cairofontmap.[ccg|hg]: Remove create_context().
+  * pango/src/color.[ccg|hg]: Remove non-const operator bool().
+  * pango/src/layout.[ccg|hg]: Remove get_iter(LayoutIter& iter).
+  * pango/src/layoutiter.[ccg|hg]: Remove assign_gobj().
+
+2019-07-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Layout::get_lines(): Fix ownership of the GSList
+
+  Change Glib::OWNERSHIP_SHALLOW -> NONE
+
+2019-07-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Coverage: Remove max(), to_bytes() and one create()
+
+  * pango/src/coverage.[ccg|hg]: pango_coverage_from_bytes(),
+  pango_coverage_to_bytes() and pango_coverage_max() are deprecated in
+  pango 1.43. Remove them in pangomm.
+  * pango/src/fontmap.hg: Remove an _IGNORE() macro.
+
+2019-07-22  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Regenerate pango_docs.xml and .defs files
+
+  and update pango_extra_objects.defs.
+
+2019-03-21  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Doxyfile.in: Remove obsolete glibmm configuration constants
+
+  They have been removed from glibmm. See issue glibmm#22.
+
+2019-03-19  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Use glibmm-2.62 instead of glibmm-2.60
+
+  We have changed the ABI name in glibmm.
+
+2018-12-30  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  tools/gen_scripts: Update for non-source-dir builds
+
+  Most modules (e.g. pango) can be built in a directory separated from the
+  source directory. Update the scripts that generate .defs and doc.xml files
+  to handle that.
+  The environment variable JHBUILD_SOURCES is not used any more.
+  Instead the environment variables GMMPROC_GEN_SOURCE_DIR and
+  GMMPROC_GEN_BUILD_DIR are read. See comments in init_generate.sh.
+
+2018-11-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  2.43.1
+
+2018-11-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Change the ABI to pangomm-2.44
+
+  So we can use the 2.42 version numbers for stable releases in the
+  pangomm-1.4 ABI series.
+  We don't need to release a stable ABI-parallel pangomm until
+  we need to release gtkmm 4.0, and that won't happen until GTK+ 4.0.0
+  happens, and we don't know when that might be.
+  
+  We've done similar ABI name changes before.
+
+2018-11-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  FontDescription: Add set/get_variations()
+
+2018-11-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Regenerate .defs and docs.xml files
+
+2018-11-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Add tools/gen_scripts/generate_all.sh
+
+2018-11-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Use glibmm-2.60 instead of glibmm-2.58
+
+  We have changed the ABI name in glibmm.
+
+2018-10-26  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  configure.ac: Update bug report address
+
+2018-09-10  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Update .gitignore
+
+2018-09-10  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Fix reference documentation generation
+
+  * pango/pangomm/Makefile.am:
+  * pango/pangomm/filelist.gmake.am: Split out again the autotools-specific
+  portion that we previously split out from pango/pangomm/filelist.am into a
+  file of its own.
+  * docs/Makefile.am: Include pango/pangomm/filelist.gmake.am to ensure the
+  reference documentation is generated for all files.
+
+2018-09-07  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  build: Remove Visual Studio 2017 projects
+
+  Since they have been superseded with the NMake Makefiles, remove them
+  from the source tree.
+
+2018-09-07  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  build: Add NMake Makefiles to build pangomm
+
+  This adds a set of NMake Makefiles to be used to build pangomm with
+  Visual Studio 2017 and later, which will share the
+  pango/[src|pangomm]/filelist.am with the autotools build system.  By
+  doing so, this will reduce the likelihood of the Visual Studio build
+  files getting out-of-date when source files are added or removed.
+  
+  This also updates the build instructions in README.win32 (which is also
+  changed to DOS/Windows line endings), and will dist the NMake Makefiles
+  instead of the Visual Studio project files, which have been superseded
+  and will be removed in the next commit.
+
+2018-09-07  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  build: Split out GNU-specific stuff from filelist.am
+
+  This is to prepare for it to be shared with non-GNU Make build systems.
+
+2018-09-07  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  build: Rename MSVC_Net2017 to MSVC_NMake
+
+  This prepares for the transition of the Visual Studio build files from
+  the Visual Studio projects to NMake Makefiles, to ease future
+  maintenance.
+
+2018-09-03  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Attribute: Add several create_attr_*() methods
+
+  * pango/src/attributes.[ccg|hg]: Add create_attr_size_absolute(),
+  create_attr_underline_color(), create_attr_strikethrough_color(),
+  create_attr_fallback(), create_attr_letter_spacing(),
+  create_attr_gravity(), create_attr_gravity_hint(),
+  create_attr_font_features(). Fixes #2
+
+2018-09-03  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Fix compilation of each header file
+
+  Add #includes, necessary to make all header files pass the test with
+  glibmm/tools/test_scripts/testheaders.sh.
+
+2018-04-08  Murray Cumming  <murrayc@murrayc.com>
+
+  Require C++17
+
+  Because libsigc++-3.0 (and therefore glibmm) now requires C++17.
+
+2018-03-26  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Use glibmm-2.58 instead of glibmm-2.56
+
+  We have changed the ABI name in glibmm.
+
+2018-02-22  Murray Cumming  <murrayc@murrayc.com>
+
+  2.41.5
+
+2017-09-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Update .gitignore
+
+2017-09-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  GlyphString: Remove some functions from _IGNORE()
+
+  and remove an obsolete TODO comment. There is no
+  pango_cairo_glyph_string_path() in pango.
+
+2017-09-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Regenerate pango_docs.xml and the .defs files
+
+  and add PangoCoverage to pango_extra_objects.defs.
+
+2017-09-05  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  tools/gen_scripts/: Update for pango built with meson
+
+  When pango is built with meson instead of autotools, generated .h and .c
+  files are stored in pango/build/pango. Files in that directory shall be read
+  when pango_docs.xml and the .defs files are generated.
+  
+  Don't read private and internal .h files.
+
+2017-08-25  Murray Cumming  <murrayc@murrayc.com>
+
+  2.41.4
+
+2017-08-25  Murray Cumming  <murrayc@murrayc.com>
+
+  Use glibmm-2.56 instead of glibmm-2.54.
+
+  We have changed the ABI name in glibmm.
+
+2017-07-13  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Fontset: Remove GLIBMM_EXCEPTIONS_ENABLED
+
+2017-06-26  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  AttrString: Let _MEMBER_GET convert from const char*
+
+  It's better to invoke a _CONVERSION that converts from a constant character
+  array. _MEMBER_GET shall not modify or delete the array. The used _CONVERSION
+  from non-const char* will be removed from convert_glib.m4. Bug 783360
+
+2017-06-11  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Make enum Weight implicitly convertible to int
+
+  Add CONV_TO_INT to _WRAP_ENUM. Bug 86864
+
+2017-04-26  Murray Cumming  <murrayc@murrayc.com>
+
+  2.41.3
+
+2017-04-19  Murray Cumming  <murrayc@murrayc.com>
+
+  Renderer: Change RendererPart to Renderer::Part.
+
+2017-04-19  Murray Cumming  <murrayc@murrayc.com>
+
+  Coverage: Change CoverageLevel to Coverage::Level.
+
+2017-04-11  Kjell Ahlstedt  <kjellahlstedt@gmail.com>
+
+  Fix build when _WRAP_ENUM generates enum class
+
+  Bug 86864
+
+2017-04-07  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Visual Studio builds: Update glibmm ABI version
+
+  The glibmm ABI version has been updated in its unstable development series
+  as we await for GTK+-4.0, so update it accordingly here.
+
+2017-03-30  Murray Cumming  <murrayc@murrayc.com>
+
+  2.41.2
+
+2017-03-22  Murray Cumming  <murrayc@murrayc.com>
+
+  Use glibmm-2.54 instead of glibmm-2.52
+
+  We changed the ABI name of the currently-unstable glibmm series.
+
+2017-03-17  Murray Cumming  <murrayc@murrayc.com>
+
+  Use std::vector instead of Glib::ArrayHandle<>.
+
+  Using Glib::ArrayHandler<>::array_to_vector() and
+  Glib::ArrayHandler<>::vector_to_array() instead, and only in the
+  implementation instead of in the API.
+
+2017-03-17  Murray Cumming  <murrayc@murrayc.com>
+
+  Layout::get_lines(): Use std::vector instead of Glib::SListHandle<>.
+
+  Using Glib::SListHandler<>::slist_to_vector() and
+  Glib::SListHandler<>::vector_to_slist() instead, and only in the
+  implementation instead of in the API.
+
+2017-03-17  Murray Cumming  <murrayc@murrayc.com>
+
+  Item, AttrIter: Use std::vector intead of SListHandle<>.
+
+  Using Glib::SListHandler<>::slist_to_vector() and
+  Glib::SListHandler<>::vector_to_slist() instead, and only in the
+  implementation instead of in the API.
+
+2017-03-17  Murray Cumming  <murrayc@murrayc.com>
+
+  Context::itemize(): Use std::vector instead of ListHandle<>.
+
+  Using Glib::ListHandler<>::list_to_vector() and
+  Glib::ListHandler<>::vector_to_list() instead, and only in the
+  implementation instead of in the API.
+
+2017-03-15  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Visual Studio builds: Require Visual Studio 2017
+
+  pangomm now requires C++-14 features that are only adequately supported
+  with Visual Studio 2017 (and later), so update the projects and related
+  items accordingly.  This also updates the DLL version naming to be in
+  line with what is in the autotools builds.
+  
+  Let people know that this is the case in README.win32.
+
+2017-01-04  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Visual Studio builds: "Install" .pdb files
+
+  Since we already generate the .pdb files during the build, make better use
+  of them so that we could debug easier.  Also clean up the property sheet
+  by removing extra blank lines.
+
+2016-12-12  Kjell Ahlstedt  <kjell.ahlstedt@bredband.net>
+
+  C++11, AttrList: Don't use nullptr with an integer
+
+2016-12-09  Murray Cumming  <murrayc@murrayc.com>
+
+  C++11: Use of auto.
+
+2016-12-09  Murray Cumming  <murrayc@murrayc.com>
+
+  C++11: Use of nullptr.
+
+2016-11-23  Murray Cumming  <murrayc@murrayc.com>
+
+  2.41.1
+
+2016-11-15  Murray Cumming  <murrayc@murrayc.com>
+
+  Link to the glibmm-2.52 version of glibmm_generate_extra_defs.
+
+2016-11-15  Murray Cumming  <murrayc@murrayc.com>
+
+  Correct needed cairomm ABI name to cairomm-1.16
+
+2016-11-14  Murray Cumming  <murrayc@murrayc.com>
+
+  Build: Require C++14 instead of C++11.
+
+  Because we now use a glibmm that requires C++14.
+
+2016-11-11  Murray Cumming  <murrayc@murrayc.com>
+
+  Use cairomm-1.14 instead of cairomm-1.0.
+
+2016-11-11  Murray Cumming  <murrayc@murrayc.com>
+
+  Use the glibmm-2.52 ABI instead of glibmm-2.4
+
+2016-11-11  Murray Cumming  <murrayc@murrayc.com>
+
+  Change ABI from pangomm-1.4 to pangomm-2.42
+
+  This installs in parallel with pangomm-1.4.
+
+2016-08-19  Murray Cumming  <murrayc@murrayc.com>
+
+  2.40.1
+
+2016-07-19  Kjell Ahlstedt  <kjell.ahlstedt@bredband.net>
+
+  Build: Fix silent builds
+
+  * configure.ac: Pass yes to AM_SILENT_RULES, thus enabling silent builds.
+  Replace MM_AX_CXX_COMPILE_STDCXX_11 by MM_AX_CXX_COMPILE_STDCXX (not necessary
+  for silent builds).
+  * docs/reference/Doxyfile.in: Set QUIET=YES.
+  Update for doxygen 1.8.11 (not necessary for silent builds).
+  Bug #768797
+
+2016-04-10  Murray Cumming  <murrayc@murrayc.com>
+
+  C++11: AttrIter, AttrList, Color: Make operator bool() explicit.
+
+  See https://bugzilla.gnome.org/show_bug.cgi?id=626858#c4
+
+2016-03-28  Murray Cumming  <murrayc@murrayc.com>
+
+  2.40
+
+2016-03-28  Murray Cumming  <murrayc@murrayc.com>
+
+  Regenerate docs.xml files.
+
+2016-03-28  Murray Cumming  <murrayc@murrayc.com>
+
+  Regenerate .defs.
+
+2016-03-28  Murray Cumming  <murrayc@murrayc.com>
+
+  Depend on latest glibmm-2.4
+
+  To use the latest gmmproc.
+
+2015-11-29  Murray Cumming  <murrayc@murrayc.com>
+
+  2.39.1
+
+2015-11-29  Murray Cumming  <murrayc@murrayc.com>
+
+  Depend on a recent glibmm
+
+  To use the latest gmmproc.
+
+2015-11-29  Murray Cumming  <murrayc@murrayc.com>
+
+  Renderer: Add get/set_alpha().
+
+  Wrapping pango_renderer_get/set_alpha(), which is new API
+  in pango 1.38.
+
+2015-11-29  Murray Cumming  <murrayc@murrayc.com>
+
+  Attributes: Add create_attr_foreground/background_alpha().
+
+  Wrapping new API in pango.
+
+2015-11-29  Murray Cumming  <murrayc@murrayc.com>
+
+  Regenerate docs.xml file.
+
+2015-11-29  Murray Cumming  <murrayc@murrayc.com>
+
+  Regenerate .defs files.
+
+2015-10-27  Murray Cumming  <murrayc@murrayc.com>
+
+  --enable-warnings=fatal: Use the same warnings as glibmm and gtkmm.
+
+2015-09-23  Murray Cumming  <murrayc@murrayc.com>
+
+  Reduce the cairomm dependency back to 1.2.2.
+
+  Because it probably works, and this is kinder.
+  Bug #755460 (Daniel Stone)
+
+2015-09-22  Murray Cumming  <murrayc@murrayc.com>
+
+  2.38.1
+
+2015-09-21  Murray Cumming  <murrayc@murrayc.com>
+
+  2.38.0
+
+2015-09-17  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  Update .gitignore for MSVC-specific Items
+
+2015-09-10  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  MSVC Builds: Improve Build Speed and Debugging Experience
+
+  Use multiprocessor compilation, which can cut down build times by quite a
+  bit, and use /d2Zi+ to put more useful info into the .pdb's in release
+  builds.
+
+2015-09-10  Chun-wei Fan  <fanchunwei@src.gnome.org>
+
+  MSVC Builds: Support only Visual Studio 2013 (and later)
+
+  The current pangomm code base now requires C++-11 support, which is only
+  supported well enough by Visual Studio 2013 and later, so:
+  
+  -Update the Visaul Studio 2010 projects to be in 2013 format, and rename
+   things as needed.
+  -Remove the Visual Studio 2005/2008 projects
+  -Update the README.win32 file to reflect on these changes.
+
+2015-09-03  Murray Cumming  <murrayc@murrayc.com>
+
+  2.37.2
+
+2015-08-22  Murray Cumming  <murrayc@murrayc.com>
+
+  configure.ac: Require the latest glibmm.
+
+  To use the latest gmmproc, which generates more move operations,
+  and to have the latest Glib::Object/ObjectBase/Interface which have
+  move operations that those generated move operations call.
+
diff --git a/ChangeLog.pre-2-34-0 b/ChangeLog.pre-2-34-0
new file mode 100644 (file)
index 0000000..3236b2a
--- /dev/null
@@ -0,0 +1,745 @@
+2.34.0 (stable):
+
+2012-10-26  José Alburquerque  <jaalburquerque@gmail.com>
+
+       Remove the use of g_type_init() because it has been deprecated.
+
+       * tools/extra_defs_gen/generate_defs_pango.cc: The docs for the
+       function says that the GType system is initialized automatically now
+       as of glib-2.36.
+
+2.28.4 (stable):
+
+2011-10-25  Murray Cumming  <murrayc@murrayc.com>
+
+       Add #includes needed with the latest glibmm.
+
+       * pango/src/attributes.hg:
+       * pango/src/color.hg:
+       * pango/src/fontdescription.hg:
+       * pango/src/fontface.hg:
+       * pango/src/fontmetrics.hg:
+       * pango/src/item.hg:
+       * pango/src/language.hg:
+       * pango/src/layoutline.hg: Add individual includes now that gmmproc does not 
+       add #include glibmm.h at the top of every generated header.
+
+2.28.3 (stable):
+
+2011-09-21 Krzesimir Nowak <qdlacz@gmail.com>
+
+  Don't use obsolete macros.
+    
+  * autogen.sh: Warn about everything during autoreconf.
+  * configure.ac: Replaced obsolete macros with their modern counterparts.
+    
+2011-08-31  Frederic Peters  <fpeters@0d.be>
+
+       Ship convert_pangomm.m4 in tarballs.
+       Bug #657817
+
+2011-05-24  Olav Vitters <olav@vitters.nl>
+
+    Use tar-ustar instead of tar-pax to ensure OpenBSD compatibility
+
+2.28.2 (stable):
+
+2011-03-30  Murray Cumming  <murrayc@murrayc.com>
+
+       Use the latest mm-common.
+
+       * configure.ac: Require the latest version.
+       * doc/Makefile.am: Don't specify the mm-common .pl files to distribute
+       because mm-common now does this automatically.
+
+2011-03-25  Kalev Lember  <kalev@smartlink.ee>
+
+       Install the m4 files without --enable-maintainer-mode
+
+       * Makefile.am: Install the convert.m4 files even if we aren't in
+       maintainer mode; this makes sure distro packages pick up the files.
+
+2.28.1 (stable):
+
+2011-03-25  Murray Cumming  <murrayc@murrayc.com>
+
+       Avoid a tarball dependency on mm-common.
+
+       * configure.ac: Add a call to MM_CONFIG_DOCTOOL_DIR() telling it to
+       copy the files locally and use them from there.
+       * docs/Makefile.am: Dist the copied files, so that the build does not
+       try to use the versions installed by mm-common.
+
+2.28.0 (stable):
+
+Just a version increase and a regenerated tarball due to changes in an m4
+macro in mm-common.
+
+2.27.1:
+
+2011-01-08  Murray Cumming  <murrayc@murrayc.com>
+
+       LayoutIter: Wrap this as a boxed type, which needs less code.
+
+       * pango/src/layoutiter.[hg|ccg]: PangoLayoutIter became a boxed type at some
+       point, with a pango_layout_iter_copy() function, so we can now wrap it
+       normally without so much hand-coding. This also adds a copy constructor.
+       * pango/src/layout.ccg: get_iter(): Use the LayoutIter copy constructor
+       instead of the crappy old assign_gobj() function. Also deprecate this
+       method, adding a get_iter(void), now that the copy constructor allows us to
+       use LayoutIter as a return type.
+
+2011-01-08  Murray Cumming  <murrayc@murrayc.com>
+
+       Improve the generated API documentation.
+
+       * pango/src/pango_methods.defs: Regenerated with h2defs.py
+       * pango/src/pango_extra_objects.defs: Added some object definitions to help
+       the documentation generator, avoiding warnings about not being able to
+       transform C function names into C++ function names. I did the same thing in
+       gtkmm a few months ago.
+       * pango/src/filelist.am: Mention the new files.
+       * pango/src/pango.defs: Include the new file.
+
+2011-01-08  Murray Cumming  <murrayc@murrayc.com>
+
+       Added conversions used by gtkmm.
+
+       * tools/m4/convert_pango.m4: Added the extra conversions that were in the
+       gtkmm copy of this file. They will probably be needed by other modules so
+       it makes sense to keep them to here to avoid duplication.
+
+2011-01-07  Murray Cumming  <murrayc@murrayc.com>
+
+       Allow other modules to use the m4 files.
+
+       * codegen/Makefile.am: Install the m4 files, like gtkmm installs its files.
+       * pango/pangomm.pc.in: Add the gmmproc4mdir variable so that other modules such
+       as gtkmm and cluttermm can get the path to the m4 file, to avoid
+       duplicating its contents.
+
+2011-01-07  Murray Cumming  <murrayc@murrayc.com>
+
+       Fix the build with --enable-warnings=fatal.
+
+       * configure.ac: Add no-long-long to avoid a warning caused by a newer glib.
+       Also avoid use of deprecated GLIBMM API and make sure that GSEAL is defined.
+
+2010-12-09  Murray Cumming  <murrayc@murrayc.com>
+
+       Include convert_glibmm.m4 instead of convert_gtkmm.m4.
+
+       * tools/m4/convert.m4: Inlcude convert_glibmm.m4, just added to glibmm,
+       instead of convert_gtkmm.m4, which glibmm no longer provides.
+       Also include convert_pangomm.m4 - we probably used the copy in glibmm until
+       now.
+
+2010-09-30  Armin Burgmeier  <armin@arbur.net>
+
+       * MSVC_Net2005/gendef/gendef.vcproj:
+       * MSVC_Net2005/pangomm.sln:
+       * MSVC_Net2005/pangomm/pangomm.vcproj:
+       * MSVC_Net2008/gendef/gendef.vcproj:
+       * MSVC_Net2008/pangomm.sln:
+       * MSVC_Net2008/pangomm/pangomm.vcproj:
+       * MSVC_Net2010/filelist.am:
+       * MSVC_Net2010/gendef/gendef.cc:
+       * MSVC_Net2010/gendef/gendef.vcxproj:
+       * MSVC_Net2010/gendef/gendef.vcxproj.filters:
+       * MSVC_Net2010/pangomm.sln:
+       * MSVC_Net2010/pangomm/pangomm.rc.in:
+       * MSVC_Net2010/pangomm/pangomm.vcxproj:
+       * MSVC_Net2010/pangomm/pangomm.vcxproj.filters:
+       * Makefile.am:
+       * configure.ac: Add support for MSVC 2010 and 64 bit.
+
+2.26.2:
+
+2010-05-04  Murray Cumming  <murrayc@murrayc-x61>
+
+       Documentation: Main page: Improve, linking to class and correcting pkg-config
+
+       * pango/pangomm.h: Simplify the text, improving the link, and link to
+       Pango::Layout as a starting point. Correct the pkg-config check from pangomm
+       to pangomm-1.4.
+
+2010-04-27  David King  <davidk@openismus.com>
+
+       Update link formatting in main page of documentation
+
+       * pango/pangomm.h: Add link text to Pango link.
+
+2010-04-23  David King  <davidk@openismus.com>
+
+       Add main page to Doxygen documentation
+
+       * docs/Makefile.am: Parse pango/pangomm.h for documentation.
+       * pango/pangomm.h: Add main page to Doxygen documentation.
+
+2.26.1:
+
+2010-04-16  Murray Cumming  <murrayc@murrayc.com>
+
+    Regenerated C documentation XML.
+
+       * pango/src/pango_docs.xml: Regenerated with the improved docextract_to_xml.py.
+
+2010-03-17  Murray Cumming  <murrayc@murrayc.com>
+
+    Regenerated pango function .defs.
+
+       * pango/src/pango_methods.defs: Regnerated with h2defs.py thought there is
+    no significant change.
+
+2.26.0:
+
+2009-09-19  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       Support Automake silent rules
+
+       * configure.ac: Call the AM_SILENT_RULES macro if it is defined.
+       (AM_INIT_AUTOMAKE): Add check-news option.
+       (MM_INIT_MODULE): Move block below Automake initialization.
+
+2009-09-07  Daniel Elstner  <danielk@openismus.com>
+
+       Update Doxygen configuration for Doxygen 1.6.1
+
+       * docs/reference/Doxyfile.in: Update file using Doxygen 1.6.1.
+       (SORT_MEMBERS_CTORS_1ST): Set option to YES.
+
+2.25.1.3:
+
+2009-08-28  Daniel Elstner  <danielk@openismus.com>
+
+       Increment version to 2.25.1.3 and update news
+
+       * configure.ac (AC_INIT): Bump version to pangomm 2.25.1.3.
+       * NEWS: Write news entry for pangomm 2.25.1.3.
+
+2009-08-28  Daniel Elstner  <danielk@openismus.com>
+
+       Fix documentation location in pkg-config files
+
+       * pango/pangomm{,-uninstalled}.pc.in (htmlrefpub): Point to
+       library.gnome.org.
+
+2009-08-28  Daniel Elstner  <danielk@openismus.com>
+
+       Increment version to 2.25.1.2 and update news
+
+       * configure.ac (AC_INIT): Bump version to pangomm 2.25.1.2.
+       * NEWS: Write news entry for pangomm 2.25.1.2.
+
+2009-08-28  Daniel Elstner  <danielk@openismus.com>
+
+       Remove documentation location override
+
+       * docs/Makefile.am (htmlrefpub): Remove variable override as
+       the documentation is now hosted on library.gnome.org.  D'oh.
+
+2009-08-28  Daniel Elstner  <danielk@openismus.com>
+
+       Increment version to 2.25.1.1 and update news
+
+       * configure.ac (AC_INIT): Bump version to pangomm 2.25.1.1.
+       (MM_PREREQ): Require mm-common 0.7.1.
+       * NEWS: Write news entry for pangomm 2.25.1.1.
+
+2009-08-28  Daniel Elstner  <danielk@openismus.com>
+
+       Use shared mm-common Doxygen style sheet
+
+       * configure.ac (MM_PREREQ): Require mm-common 0.7.
+       * docs/reference/Doxyfile.in (HTML_STYLESHEET): Assign path
+       to the shared doxygen.css provided by mm-common.
+
+2009-08-28  Daniel Elstner  <danielk@openismus.com>
+
+       Remove header and footer HTML fragments
+
+       * docs/reference/pangomm_{header,footer}.html_fragment: Delete
+       files.  These custom fragments were an unnecessary maintenance
+       hassle.  Also, the files were out of date with respect to the
+       encoding and CSS classes used by Doxygen.
+       * docs/reference/Doxyfile.in (HTML_HEADER), (HTML_FOOTER): Set
+       to the empty string.
+       (PROJECT_NUMBER): Substitute @PACKAGE_VERSION@.  It does look
+       nicer in the generated HTML pages, and is probably also less
+       confusing.
+       (SORT_GROUP_NAMES): Enable for predictability.
+       * docs/Makefile.am (dist_noinst_DATA): Remove deleted HTML
+       fragment files.
+
+2009-08-26  Daniel Elstner  <danielk@openismus.com>
+
+       Reenable hierarchy graphs for each class
+
+       * docs/reference/Doxyfile.in (COLLABORATION_GRAPH): Set option
+       to YES to enable the per-class inheritance graphs.
+
+2.25.1:
+
+2009-08-25  Murray Cumming  <murrayc@murrayc.com>
+
+       Regenerated .defs files.
+
+       * pango/src/pango_docs.xml:
+       * pango/src/pango_methods.defs: Regenerated.
+
+This is the master branch. See also the pangomm-2-24 branch.
+
+2009-08-20  Daniel Elstner  <danielk@openismus.com>
+
+       Rename @since back to @newin
+
+       * docs/reference/Doxyfile.in (ALIASES): Rename the @since alias
+       back to its old name @newin, but otherwise keep the parameters.
+       Apparently there is a @since command predefined in Doxygen which
+       I hadn't noticed.  It does seem to get overridden silently, but
+       it is better not to rely on this.
+       * pango/src/{language,layout}.hg: Replace all uses of @since with
+       @newin.
+
+2009-08-20  Daniel Elstner  <danielk@openismus.com>
+
+       Remove bogus backslash in Doxygen configuration
+
+       * docs/reference/Doxyfile.in (STRIP_FROM_PATH): Remove bogus
+       trailing \ after the the last assigned value.  This probably
+       caused the following assignment to STRIP_FROM_INC_PATH to be
+       eaten.
+
+2009-08-20  Daniel Elstner  <danielk@openismus.com>
+
+       Substitute API version in filenames dynamically
+
+       * pango/pangomm.pc.in: Rename file from pango/pangomm-1.4.pc.in.
+       * pango/pangomm-uninstalled.pc.in: Rename file from
+       pango/pangomm-1.4-uninstalled.pc.in.
+       * configure.ac (AC_CONFIG_FILES): Insert ${PANGOMM_MODULE_NAME}
+       into output filenames and remove the hard-coded version from the
+       input filenames.
+       * pango/pangomm/Makefile.am (lib_LTLIBRARIES): Substitute
+       @PANGOMM_API_VERSION@ into the libtool archive name as well as
+       the variable names derived from it instead of hard-coding the
+       API version.
+
+2009-08-20  Daniel Elstner  <danielk@openismus.com>
+
+       Do not hard-code API version in resource files
+
+       * MSVC_Net200[58]/pangomm/pangomm.rc.in: Use newer @PACKAGE_VERSION@
+       substitution in place of @VERSION@.  Use "@PANGOMM_MODULE_NAME@.dll"
+       instead of hardcoding the API version.
+
+2009-08-19  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       Reference external cairomm documentation
+
+       * configure.ac (MM_ARG_WITH_TAGFILE_DOC): Specify cairomm-1.0.tag
+       as Doxygen tag file dependency for links to the external reference
+       documentation of cairomm.
+
+2009-08-18  Daniel Elstner  <danielk@openismus.com>
+
+       Use parametric Doxygen alias @since{m,n}
+
+       * docs/reference/Doxyfile.in (ALIASES): Define a parametrized alias
+       @since{major,minor} to replace the old @newin?p?* aliases which had
+       to be defined manually for every version number used.
+       * pango/src/*.hg: Change all uses of @newin?p?* to @since{m,n}.
+
+2009-08-17  Daniel Elstner  <danielk@openismus.com>
+
+       Define PANGOMM_BUILD macro during build
+
+       * pango/pangomm/Makefile.am (local_cppflags): Add -DPANGOMM_BUILD=1.
+
+2009-08-17  Daniel Elstner  <danielk@openismus.com>
+
+       Make use of new MM_ARG_DISABLE_DEPRECATED macro
+
+       * configure.ac (PANGOMM_DISABLE_DEPRECATED): Call the new
+       MM_ARG_DISABLE_DEPRECATED_API macro from mm-common in order
+       to provide the option to omit deprecated API from the library
+       build, and to define the corresponding configuration macro.
+       * pango/pangommconfig.h.in (PANGOMM_DISABLE_DEPRECATED): Copy
+       the #undef statement from the generated config.h.in template.
+
+2009-08-17  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       Append slash to overridden $(htmlrefpub)
+
+       * docs/Makefile.am (htmlrefpub): Append trailing slash for
+       consistency with the non-overridden value.
+
+2009-08-17  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       Reenable JAVADOC_AUTOBRIEF mode of Doxygen
+
+       * docs/reference/Doxyfile.in (JAVADOC_AUTOBRIEF): Change value
+       back to 'YES'.  I accidentally turned off the setting during the
+       build infrastructure transition.
+
+2009-08-16  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       Include glibmmconfig.h from pangommconfig.h
+
+       * pango/pangommconfig.h.in: Include glibmmconfig.h for
+       consistency with gtkmm.  Also define an include guard.
+
+2009-08-16  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       List PANGOMM_* macros in pangommconfig.h.in
+
+       * pango/pangommconfig.h.in (PANGOMM_*_VERSION): Add #undef
+       statements for the version number component macros.
+
+2009-08-16  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       Add pkg-config file for uninstalled use
+
+       * pango/pangomm-1.4-uninstalled.pc.in: New pkg-config metadata
+       file for building against a non-installed pangomm library.
+       * configure.ac (AC_CONFIG_FILES): Add configure output file
+       pango/pangomm-1.4-uninstalled.pc.
+
+2009-08-16  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       Make use of latest mm-common features
+
+       * configure.ac: Insert MM_PREREQ([0.4]) macro call.
+       (MM_INIT_MODULE): Remove now optional second argument.
+       * pango/pangomm-1.4.pc.in (htmlrefpub): Append trailing slash
+       as per new mm-common guidelines.
+
+2009-08-16  Daniel Elstner  <daniel.kitta@gmail.com>
+
+       Get rid of GLIBMM_USING_STD()
+
+       * pango/src/tabarray.hg: Stop using GLIBMM_USING_STD(), now
+       that it has been removed from glibmm.
+
+2009-08-12  Daniel Elstner  <danielk@openismus.com>
+
+       Install pangomm.h and pangomm-1.4.pc again
+
+       * Makefile.am (pangomm_include_HEADERS): Install pango/pangomm.h.
+       (nodist_pangomm_libinclude_HEADERS): Install pango/pangommconfig.h.
+       (nodist_pkgconfig_DATA): Install pango/pangomm-1.4.pc.
+       * pango/Makefile.am: Delete already unused file.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Provide documentation location via pkg-config
+
+       * pango/pangomm-1.4.pc.in (datadir), (datarootdir): Substitute.
+       (docdir), (doxytagfile), (htmlrefdir), (htmlrefpub): Point to the
+       location of the reference documentation.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Wrap pango_font_map_create_context()
+
+       * pango/src/fontmap.hg (FontMap::create_context): Wrap new
+       pango_font_map_create_context() method.
+       * pango/src/cairofontmap.{ccg,hg} (CairoFontMap::create_context):
+       Wrap method manually in terms of pango_font_map_create_context(),
+       so that it longer uses deprecated API.  The wrapper method should
+       be removed altogether when we can break API and ABI.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Fix typo in tools/m4/convert_pango.m4
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Regenerate pango/src/pango_methods.defs
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Generate more complete extra defs
+
+       * tools/extra_defs_gen/generate_defs_pango.cc (main): Query the
+       defs for all not backend-specific GObject classes in Pango, just
+       in case.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Rename scripts/ subdirectory to build/
+
+       * configure.ac (AC_CONFIG_AUX_DIR): Point to build/ directory.
+       (AC_CONFIG_MACRO_DIR): ditto.
+       * Makefile.am (ACLOCAL_AMFLAGS): Use -I build as M4 include path.
+       * docs/Makefile.am, pango/{src,pangomm}/Makefile.am: Include files
+       from $(top_srcdir)/build/ instead of $(top_srcdir)/scripts/.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Delete obsolete Autoconf M4 files from scripts/
+
+       * scripts/*.m4: Delete all Autoconf M4 files from version control.
+       * scripts/README: Delete superfluous file.
+       * Makefile.am (text_files): Remove scripts/README.
+       (msvc_files): Use $(addprefix ...) for readability.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Transition to mm-common documentation build
+
+       * configure.ac (AC_CONFIG_FILES): List docs/Makefile.am and
+       docs/reference/Doxyfile as output files.
+       * Makefile.am (SUBDIRS): Resurrect docs/ subdirectory.
+       * docs/Makefile.am: Rewrite based upon the new mm-common build
+       infrastructure for the reference documentation.
+       * docs/reference/Doxyfile.in: Heavily modernize and adapt to the
+       new documentation build organization.
+       * docs/Makefile_web.am_fragment: Delete obsolete file.
+       * docs/images/Makefile.am: ditto,
+       * docs/reference/Makefile.am: ditto,
+       * docs/reference/doxygen_to_devhelp.xsl: ditto,
+       * docs/reference/README: ditto.
+       * docs/reference/widget_hierarchy.{dia,html,png}: Delete files as
+       they belong to the documentation of the gtkmm module, not pangomm.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Further reduce pointless make recursion
+
+       * scripts/Makefile.am: Delete file.
+       * MSVC_Net200[58]/**/Makefile.am: Delete files.
+       * MSVC_Net200[58]/filelist.am: New files, defining the files to
+       distribute from the MSVC subdirectories.
+       * Makefile.am: Include MSVC_Net200[58]/filelist.am and distribute
+       the files listed there.
+       (SUBDIRS): Remove scripts/ and MSVC_Net200[58]/.  Temporarily
+       remove docs/ subdirectory.
+       * configure.ac: Use mm-common Autoconf macros for setting up the
+       documentation build.
+       (AC_CONFIG_FILES): Remove deleted Makefiles from the list.
+       (AC_CONFIG_COMMANDS): Append commands to config.status to copy the
+       pangommconfig.h configuration header into the MSVC subdirectories.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Convert tools/ and pango/ to new infrastructure
+
+       * Makefile.am (SUBDIRS): Skip the pango/ subdirectory and recurse
+       directly into pango/src/ and pango/pangomm/.
+       (EXTRA_DIST): Remove the old build_shared/ include files.
+       * configure.ac (AC_CONFIG_FILES): Remove files pango/Makefile.am,
+       pango/pangomm/private/Makefile.am and tools/m4/Makefile.am from
+       the list of output files.
+       * pango/src/filelist.am: Rename Makefile_list_of_hg.am_fragment
+       and adapt to new mm-common Automake include files.
+       * pango/pangomm/filelist.am: New file, defining the list of source
+       code files to compile.
+       * pango/pangomm/private/Makefile.am: Delete obsolete file.
+       * pango/src/Makefile.am: Rewrite to use new mm-common build
+       infrastructure.
+       * pango/pangomm/Makefile.am: ditto,
+       * tools/Makefile.am: ditto.
+       * tools/m4/filelist.am: Rename Makefile_list_of_sources.am_fragment
+       and adapt to new mm-common Automake include files.
+       * tools/m4/Makefile.am: Delete obsolete file.
+       * build_shared/*.am_fragment: Delete obsolete build support files.
+
+2009-08-11  Daniel Elstner  <danielk@openismus.com>
+
+       Begin transition to mm-common build system
+
+       * autogen.sh: Replace with minimal version using mm-common-prepare
+       and autoreconf.
+       * configure.ac: Rename file from configure.in.  Remove a lot of old
+       cruft and clean up the remaining bits.  Make use of mm-common macros.
+       Insert temporary dummy conditionals to keep the module buildable.
+       * config.h.in: Delete file, as it is now generated by autoheader.
+       * Makefile.am (ACLOCAL_AMFLAGS): Set to help autoreconf do its work.
+       * MSVC_Net200[58]/pangomm/Makefile.am: Change rule dependency
+       configure.in to configure.ac.
+
+2009-03-09  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * docs/reference/Makefile.am: Split out devhelp installation rule, so
+       VPATH reference is possible for both tarball and VCS builds, fixing
+       distcheck correctly.
+
+2.24.0:
+
+2009-03-09  Murray Cumming  <murrayc@murrayc.com>
+
+       * docs/reference/Makefile.am: Added srcdir before the devhelp file, to
+       fix distcheck.
+
+2009-03-09  Murray Cumming  <murrayc@murrayc.com>
+
+       * pango/src/pango_docs.xml: Regenerated with doxextract_to_xml.py.
+
+2009-02-05  Theppitak Karoonboonyanan  <thep@linux.thai.net>
+
+       * docs/reference/Doxyfile.in:
+       * docs/reference/Makefile.am: Allow pangomm to build outside the source
+       tree. Bug #570322
+
+2009-01-20  Deng Xiyue  <manphiz@gmail.com>
+
+       * Change license header to mention Lesser General Public License
+       version 2.1 instead of Library General Public License, to be
+       consistent with COPYING.
+
+2008-11-13  Murray Cumming  <murrayc@murrayc.com>
+
+       * docs/reference/Doxyfile.in: Add some more newin2p* aliases.
+       * pango/src/layout.hg: Mark show_in_cairo_context as since 2.16.
+
+2008-11-12  Louis-Francis Ratté-Boulianne <louisfrancis.rb@gmail.com>
+
+       * pango/src/layout.cgg:
+       * pango/src/layout.hg: Added show_in_cairo_context().
+       Bug #560232,
+
+2.14.1:
+
+2008-11-08  Deng Xiyue  <manphiz@gmail.com>
+
+       * docs/reference/doxygen_to_devhelp.xsl: Fix references to gtkmm,
+       should be pangomm, and use reference index.html as start point.
+
+2008-10-23  Jonathon Jongsma  <jonathon@quotidian.org>
+
+       * configure.in:
+       * docs/reference/Makefile.am:
+       * docs/reference/images: Removed gtk stock image stuff that was accidentally
+       left over from splitting up pangomm from gtkmm.
+
+2008-10-09  Armin Burgmeier  <armin@openismus.com>
+
+       * MSVC_Net2005/pangomm/pangomm.vcproj: Changed the library DLL name to
+       match the new naming convention.
+
+       * MSVC_Net2008/: Added Visual Studio 2008 project files.
+
+       * Makefile.am:
+       * configure.in: Added the new files to the distribution.
+
+2.14.0 (wraps pango 1.22):
+
+2008-09-08  Deng Xiyue  <manphiz@gmail.com>
+
+       * Added COPYING.tools with the GPL because the tools/*.cc file is
+       GPL. Bug #550789.
+
+2008-09-08  Deng Xiyue  <manphiz@gmail.com>
+
+       * README: Mention pangomm instead of gtkmm. Bug #550789.
+
+2008-08-27  Armin Burgmeier  <armin@arbur.net>
+
+       * MSVC_Net2005/pangomm/pangomm.rc.in: Replaced #include "afxres.h" by
+       #include <windows.h> which does the job equally well, and allows
+       compilation with the freely available Visual Studio Express compiler.
+
+2008-08-20  Murray Cumming  <murrayc@murrayc.com>
+
+       * pango/src/language.ccg:
+       * pango/src/language.hg: Added get_scripts().
+
+2.13.8:
+
+2008-08-12  Murray Cumming  <murrayc@murrayc.com>
+
+       * pango/src/context.hg: Added set_font_map() because it is now public
+       (non backend-only) API.
+
+2008-08-12  Murray Cumming  <murrayc@murrayc.com>
+
+       * pango/src/layoutrun.ccg:
+       * pango/src/layoutrun.hg: Wrap this with CLASS_BOXEDTYPE() instead of
+       _CLASS_GENERIC(), because the PangoGlyphItem (of which PangoLayoutRun
+       is a typedef) is a boxed type. This reduces the amount of code in .hg,
+       while apparently not breaking API or ABI.
+       This should be renamed to GlyphItem when we can break ABI.
+
+2008-08-12  Murray Cumming  <murrayc@murrayc.com>
+
+       * pango/src/layoutrun.hg: Typedef this to GlyphItem, because
+       that is what it is (and is documented as) in Pango.
+       Added splt() and letter() space to LayoutRun, wrapping PangoGlyphItem
+       functions.
+       * tools/m4/convert_pango.m4:
+       * pango/src/renderer.hg: Added draw_glyph_item().
+
+       * pango/src/cairofontmap.hg: Added set_default().
+
+2008-08-09  Armin Burgmeier  <armin@arbur.net>
+
+       * MSVC_Net2005/gendef/gendef.cc:
+       * MSVC_Net2005/gendef/gendef.vcproj:
+       * MSVC_Net2005/gendef/Makefile.am:
+       * MSVC_Net2005/pangomm/pangomm.vcproj:
+       * MSVC_Net2005/pangomm/pangomm.rc.in:
+       * MSVC_Net2005/pangomm/Makefile.am:
+       * MSVC_Net2005/pangomm.sln:
+       * MSVC_Net2005/blank.cpp:
+       * MSVC_Net2005/Makefile.am: Added project files to build pangomm with
+       Visual Studio 2005.
+
+       * configure.in:
+       * Makefile.am: Adapt build files.
+
+2.13.7:
+
+2008-08-02  Murray Cumming  <murrayc@murrayc.com>
+
+       * docs/Makefile.am: Do not try to upload a non-existant index.html
+       * docs/images/Makefile.am: Correct the filenames.
+       * docs/reference/pangomm_header.html_fragment: Change the links as
+       in glibmm.
+
+2008-08-01  Deng Xiyue <manphiz@gmail.com>
+
+       * docs/Makefile_web.am_fragment:
+       * docs/reference/Makefile.am:
+       * tools/m4/Makefile.am:
+       * Makefile.am: Fix all references of ABI version 2.4 to version 1.4,
+       though the tarball version (as reported by pkgconfig --modversion)
+       must stay as 2.x.
+       Bug #545537.
+
+2008-08-01  Murray Cumming  <murrayc@murrayc.com>
+
+       * docs/Makefile.am:
+       * docs/index.html: Removed index.html. It was just a copy from
+       gtkmm (from where I will also be removing it.) The true copy is in
+       gnomemm-website (uploaded to gtkmm.org).
+
+2008-07-30  Sebastien Bacher  <seb128@ubuntu.com>
+
+       * configure.in: require a correct pango version (bug #545378)
+
+2008-07-27  Murray Cumming  <murrayc@murrayc.com>
+
+       * docs/Makefile_web.am_fragment: Corrected the upload location.
+       * docs/reference/Doxyfile.in: Corrected a variable so we really
+       generate documentation.
+
+2.13.6:
+
+2008-07-27  Murray Cumming  <murrayc@murrayc.com>
+
+       * pango/src/pango_docs.xml:
+       * pango/src/pango_enums.defs:
+       * pango/src/pango_methods.defs: Regenerated.
+
+       * pango/src/layout.hg: Added get_height(), set_height(),
+       get_baseline().
+       * pango/src/layoutiter.ccg:
+       * pango/src/layoutiter.hg: Added get_layout().
+       * pango/src/renderer.hg: Added get_layout() and get_layout_line().
+
+2.13.5:
+
+Created a standalone pangomm module from gtkmm in svn trunk,
+so that things can depend on pangomm without needing gtkmm at
+build time.
diff --git a/HACKING b/HACKING
new file mode 100644 (file)
index 0000000..7754439
--- /dev/null
+++ b/HACKING
@@ -0,0 +1,12 @@
+See the MAINTAINERS file.
+mailing list: gtkmm-list@gnome.org
+
+For information about submitting patches, see
+http://www.gtkmm.org
+
+GNOME sherrifs may make changes if they can't get a quick maintainer response from the mailing list or bugzilla.
+
+
+**** Building from CVS - see README too:
+When building from CVS you will probably need to install this Perl module:
+http://wwwx.netheaven.com/~coopercc/xmlparser/XML-Parser-2.30.tar.gz
\ No newline at end of file
diff --git a/MSVC_NMake/Makefile.vc b/MSVC_NMake/Makefile.vc
new file mode 100644 (file)
index 0000000..0868479
--- /dev/null
@@ -0,0 +1,66 @@
+# NMake Makefile for building libsigc++ on Windows using Visual Studio
+
+# The items below this line should not be changed, unless one is maintaining
+# the NMake Makefiles.  Customizations can be done in the following NMake Makefile
+# portions (please see comments in the these files to see what can be customized):
+#
+# detectenv-msvc.mak
+# config-msvc.mak
+
+!include detectenv-msvc.mak
+
+# Include the Makefile portions with the source listings
+!include ..\pango\src\filelist.am
+!include ..\pango\pangomm\filelist.am
+
+# Include the Makefile portion that enables features based on user input
+!include config-msvc.mak
+
+!if "$(VALID_CFGSET)" == "TRUE"
+
+# We need Visual Studio 2017 or later
+!if $(VSVER) < 15
+VALID_MSC = FALSE
+!else
+VALID_MSC = TRUE
+!endif
+
+!if $(VCVERSION) < 1915
+!message Some portions may fail to build for Visual Studio 2017 15.7 or earlier!
+!endif
+
+!if "$(VALID_MSC)" == "TRUE"
+
+!ifdef GENERATE_VERSIONED_FILES
+!include pkg-ver.mak
+DO_REAL_GEN = 1
+!endif
+
+# Include the Makefile portion to convert the source and header lists
+# into the lists we need for compilation and introspection
+!include create-lists-msvc.mak
+
+all: $(PANGOMM_LIB)  all-build-info
+
+tests: all
+       @echo No tests are provided with this package!
+
+# Include the build rules for sources, DLLs and executables
+!include generate-msvc.mak
+!include build-rules-msvc.mak
+
+!include install.mak
+
+!else # "$(VALID_MSC)" == "TRUE"
+all:
+       @echo You need Visual Studio 2017 or later.
+
+!endif # "$(VALID_MSC)" == "TRUE"
+
+!else # "$(VALID_CFGSET)" == "TRUE"
+all: help
+       @echo You need to specify a valid configuration, via
+       @echo CFG=release or CFG=debug
+!endif # "$(VALID_CFGSET)" == "TRUE"
+
+!include info-msvc.mak
diff --git a/MSVC_NMake/build-rules-msvc.mak b/MSVC_NMake/build-rules-msvc.mak
new file mode 100644 (file)
index 0000000..386473a
--- /dev/null
@@ -0,0 +1,82 @@
+# NMake Makefile portion for compilation rules
+# Items in here should not need to be edited unless
+# one is maintaining the NMake build files.  The format
+# of NMake Makefiles here are different from the GNU
+# Makefiles.  Please see the comments about these formats.
+
+# Inference rules for compiling the .obj files.
+# Used for libs and programs with more than a single source file.
+# Format is as follows
+# (all dirs must have a trailing '\'):
+#
+# {$(srcdir)}.$(srcext){$(destdir)}.obj::
+#      $(CC)|$(CXX) $(cflags) /Fo$(destdir) /c @<<
+# $<
+# <<
+{vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\}.obj::
+       $(CXX) $(LIBPANGOMM_CFLAGS) $(CFLAGS_NOGL) /Fovs$(VSVER)\$(CFG)\$(PLAT)\pangomm\ /Fdvs$(VSVER)\$(CFG)\$(PLAT)\pangomm\ /c @<<
+$<
+<<
+
+{..\untracked\pango\pangomm\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\}.obj::
+       $(CXX) $(LIBPANGOMM_CFLAGS) $(CFLAGS_NOGL) /Fovs$(VSVER)\$(CFG)\$(PLAT)\pangomm\ /Fdvs$(VSVER)\$(CFG)\$(PLAT)\pangomm\ /c @<<
+$<
+<<
+
+{..\pango\pangomm\}.cc{vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\}.obj::
+       $(CXX) $(LIBPANGOMM_CFLAGS) $(CFLAGS_NOGL) /Fovs$(VSVER)\$(CFG)\$(PLAT)\pangomm\ /Fdvs$(VSVER)\$(CFG)\$(PLAT)\pangomm\ /c @<<
+$<
+<<
+
+{..\pango\src\}.ccg{vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\}.obj:
+       @if not exist $(@D)\private\ $(MAKE) /f Makefile.vc CFG=$(CFG) $(@D)\private
+       @for %%s in ($(<D)\*.ccg) do @if not exist ..\pango\pangomm\%%~ns.cc if not exist $(@D)\%%~ns.cc $(PERL) -- $(GMMPROC_DIR)/gmmproc -I ../tools/m4 --defs $(<D:\=/) %%~ns $(<D:\=/) $(@D)
+       @if exist $(@D)\$(<B).cc $(CXX) $(LIBPANGOMM_CFLAGS) $(CFLAGS_NOGL) /Fo$(@D)\ /Fd$(@D)\ /c $(@D)\$(<B).cc
+       @if exist ..\pango\pangomm\$(<B).cc $(CXX) $(LIBPANGOMM_CFLAGS) $(CFLAGS_NOGL) /Fo$(@D)\ /Fd$(@D)\ /c ..\pango\pangomm\$(<B).cc
+       @if exist ..\untracked\pango\pangomm\$(<B).cc $(CXX) $(LIBPANGOMM_CFLAGS) $(CFLAGS_NOGL) /Fo$(@D)\ /Fd$(@D)\ /c ..\pango\pangomm\$(<B).cc
+
+{.\pangomm\}.rc{vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\}.res:
+       rc /fo$@ $<
+
+# Rules for building .lib files
+$(PANGOMM_LIB): $(PANGOMM_DLL)
+
+# Rules for linking DLLs
+# Format is as follows (the mt command is needed for MSVC 2005/2008 builds):
+# $(dll_name_with_path): $(dependent_libs_files_objects_and_items)
+#      link /DLL [$(linker_flags)] [$(dependent_libs)] [/def:$(def_file_if_used)] [/implib:$(lib_name_if_needed)] -out:$@ @<<
+# $(dependent_objects)
+# <<
+#      @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
+$(PANGOMM_DLL): vs$(VSVER)\$(CFG)\$(PLAT)\pangomm $(pangomm_OBJS)
+       link /DLL $(LDFLAGS_NOLTCG) $(PANGOMM_DEP_LIBS) /implib:$(PANGOMM_LIB) -out:$@ @<<
+$(pangomm_OBJS)
+<<
+
+       @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;2
+
+# Rules for linking Executables
+# Format is as follows (the mt command is needed for MSVC 2005/2008 builds):
+# $(dll_name_with_path): $(dependent_libs_files_objects_and_items)
+#      link [$(linker_flags)] [$(dependent_libs)] -out:$@ @<<
+# $(dependent_objects)
+# <<
+#      @-if exist $@.manifest mt /manifest $@.manifest /outputresource:$@;1
+
+clean:
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.exe
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.dll
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.pdb
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.ilk
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.exp
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\*.lib
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\*.res
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\*.pdb
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\*.obj
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\private\*.h
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\*.h
+       @-del /f /q vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\*.cc
+       @-rd vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\private
+       @-rd vs$(VSVER)\$(CFG)\$(PLAT)\pangomm
+
+.SUFFIXES: .cc .h .ccg .hg .obj
diff --git a/MSVC_NMake/config-msvc.mak b/MSVC_NMake/config-msvc.mak
new file mode 100644 (file)
index 0000000..55a11f7
--- /dev/null
@@ -0,0 +1,95 @@
+# NMake Makefile portion for enabling features for Windows builds
+
+# These are the base minimum libraries required for building pangomm.
+BASE_INCLUDES =        /I$(PREFIX)\include
+
+# Please do not change anything beneath this line unless maintaining the NMake Makefiles
+PANGO_API_VERSION = 1.0
+PANGOMM_MAJOR_VERSION = 2
+PANGOMM_MINOR_VERSION = 48
+
+GLIB_API_VERSION = 2.0
+
+LIBSIGC_MAJOR_VERSION = 3
+LIBSIGC_MINOR_VERSION = 0
+GLIBMM_MAJOR_VERSION = 2
+GLIBMM_MINOR_VERSION = 68
+CAIROMM_MAJOR_VERSION = 1
+CAIROMM_MINOR_VERSION = 16
+
+
+!if "$(CFG)" == "debug" || "$(CFG)" == "Debug"
+DEBUG_SUFFIX = -d
+!else
+DEBUG_SUFFIX =
+!endif
+
+!ifndef GMMPROC_DIR
+GMMPROC_DIR=$(PREFIX)\share\glibmm-$(GLIBMM_MAJOR_VERSION).$(GLIBMM_MINOR_VERSION)\proc
+!endif
+
+PANGOMM_BASE_CFLAGS =                  \
+       /Ivs$(VSVER)\$(CFG)\$(PLAT)     \
+       /I..\untracked\pango /I..\untracked\pango\pangomm               \
+       /I..\pango /I..\pango\pangomm /I.\pangomm               \
+       /EHsc /std:c++17 /utf-8                 \
+       /FImsvc_recommended_pragmas.h
+
+PANGOMM_EXTRA_INCLUDES =       \
+       /I$(PREFIX)\include\pango-$(PANGO_API_VERSION)  \
+       /I$(PREFIX)\include\giomm-$(GLIBMM_MAJOR_VERSION).$(GLIBMM_MINOR_VERSION)       \
+       /I$(PREFIX)\lib\giomm-$(GLIBMM_MAJOR_VERSION).$(GLIBMM_MINOR_VERSION)\include   \
+       /I$(PREFIX)\include\glibmm-$(GLIBMM_MAJOR_VERSION).$(GLIBMM_MINOR_VERSION)      \
+       /I$(PREFIX)\lib\glibmm-$(GLIBMM_MAJOR_VERSION).$(GLIBMM_MINOR_VERSION)\include  \
+       /I$(PREFIX)\include\cairomm-$(CAIROMM_MAJOR_VERSION).$(CAIROMM_MINOR_VERSION)   \
+       /I$(PREFIX)\lib\cairomm-$(CAIROMM_MAJOR_VERSION).$(CAIROMM_MINOR_VERSION)\include       \
+       /I$(PREFIX)\include\glib-$(GLIB_API_VERSION)    \
+       /I$(PREFIX)\lib\glib-$(GLIB_API_VERSION)\include        \
+       /I$(PREFIX)\include\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)    \
+       /I$(PREFIX)\lib\sigc++-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)\include        \
+       /I$(PREFIX)\include\harfbuzz    \
+       /I$(PREFIX)\include
+
+LIBPANGOMM_CFLAGS = /DPANGOMM_BUILD $(PANGOMM_BASE_CFLAGS) $(PANGOMM_EXTRA_INCLUDES)
+
+# We build pangomm-vc$(VSVER_LIB)-$(PANGOMM_MAJOR_VERSION)_$(PANGOMM_MINOR_VERSION).dll or
+#          pangomm-vc$(VSVER_LIB)-d-$(PANGOMM_MAJOR_VERSION)_$(PANGOMM_MINOR_VERSION).dll at least
+
+!if $(VSVER) > 14 && "$(USE_COMPAT_LIBS)" != ""
+VSVER_LIB = 150
+MESON_VSVER_LIB =
+!else
+VSVER_LIB = $(PDBVER)$(VSVER_SUFFIX)
+MESON_VSVER_LIB = -vc$(VSVER_LIB)
+!endif
+
+!ifdef USE_MESON_LIBS
+LIBSIGC_LIBNAME = sigc-$(LIBSIGC_MAJOR_VERSION).$(LIBSIGC_MINOR_VERSION)
+GIOMM_LIBNAME = giomm$(MESON_VSVER_LIB)-$(GLIBMM_MAJOR_VERSION).$(GLIBMM_MINOR_VERSION)
+GLIBMM_LIBNAME = glibmm$(MESON_VSVER_LIB)-$(GLIBMM_MAJOR_VERSION).$(GLIBMM_MINOR_VERSION)
+CAIROMM_LIBNAME = cairomm$(MESON_VSVER_LIB)-$(CAIROMM_MAJOR_VERSION).$(CAIROMM_MINOR_VERSION)
+PANGOMM_LIBNAME = pangomm$(MESON_VSVER_LIB)-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)
+
+PANGOMM_DLLNAME = $(PANGOMM_LIBNAME)-1
+!else
+LIBSIGC_LIBNAME = sigc-vc$(VSVER_LIB)$(DEBUG_SUFFIX)-$(LIBSIGC_MAJOR_VERSION)_$(LIBSIGC_MINOR_VERSION)
+GIOMM_LIBNAME = giomm-vc$(VSVER_LIB)$(DEBUG_SUFFIX)-$(GLIBMM_MAJOR_VERSION)_$(GLIBMM_MINOR_VERSION)
+GLIBMM_LIBNAME = glibmm-vc$(VSVER_LIB)$(DEBUG_SUFFIX)-$(GLIBMM_MAJOR_VERSION)_$(GLIBMM_MINOR_VERSION)
+CAIROMM_LIBNAME = cairomm-vc$(VSVER_LIB)$(DEBUG_SUFFIX)-$(CAIROMM_MAJOR_VERSION)_$(CAIROMM_MINOR_VERSION)
+PANGOMM_LIBNAME = pangomm-vc$(VSVER_LIB)$(DEBUG_SUFFIX)-$(PANGOMM_MAJOR_VERSION)_$(PANGOMM_MINOR_VERSION)
+
+PANGOMM_DLLNAME = $(PANGOMM_LIBNAME)
+!endif
+
+LIBSIGC_LIB = $(LIBSIGC_LIBNAME).lib
+GIOMM_LIB = $(GIOMM_LIBNAME).lib
+GLIBMM_LIB = $(GLIBMM_LIBNAME).lib
+CAIROMM_LIB = $(CAIROMM_LIBNAME).lib
+PANGOMM_LIB = vs$(VSVER)\$(CFG)\$(PLAT)\$(PANGOMM_LIBNAME).lib
+
+PANGOMM_DLL = vs$(VSVER)\$(CFG)\$(PLAT)\$(PANGOMM_DLLNAME).dll
+
+GOBJECT_LIBS = gobject-$(GLIB_API_VERSION).lib glib-$(GLIB_API_VERSION).lib
+CAIRO_LIB = cairo.lib
+PANGO_LIBS = pangocairo-$(PANGO_API_VERSION).lib pango-$(PANGO_API_VERSION).lib $(GOBJECT_LIBS) $(CAIRO_LIB)
+PANGOMM_DEP_LIBS = $(GIOMM_LIB) $(GLIBMM_LIB) $(CAIROMM_LIB) $(LIBSIGC_LIB) $(PANGO_LIBS)
diff --git a/MSVC_NMake/create-lists-msvc.mak b/MSVC_NMake/create-lists-msvc.mak
new file mode 100644 (file)
index 0000000..3ab1b5a
--- /dev/null
@@ -0,0 +1,67 @@
+# Convert the source listing to object (.obj) listing in
+# another NMake Makefile module, include it, and clean it up.
+# This is a "fact-of-life" regarding NMake Makefiles...
+# This file does not need to be changed unless one is maintaining the NMake Makefiles
+
+# For those wanting to add things here:
+# To add a list, do the following:
+# # $(description_of_list)
+# if [call create-lists.bat header $(makefile_snippet_file) $(variable_name)]
+# endif
+#
+# if [call create-lists.bat file $(makefile_snippet_file) $(file_name)]
+# endif
+#
+# if [call create-lists.bat footer $(makefile_snippet_file)]
+# endif
+# ... (repeat the if [call ...] lines in the above order if needed)
+# !include $(makefile_snippet_file)
+#
+# (add the following after checking the entries in $(makefile_snippet_file) is correct)
+# (the batch script appends to $(makefile_snippet_file), you will need to clear the file unless the following line is added)
+#!if [del /f /q $(makefile_snippet_file)]
+#!endif
+
+# In order to obtain the .obj filename that is needed for NMake Makefiles to build DLLs/static LIBs or EXEs, do the following
+# instead when doing 'if [call create-lists.bat file $(makefile_snippet_file) $(file_name)]'
+# (repeat if there are multiple $(srcext)'s in $(source_list), ignore any headers):
+# !if [for %c in ($(source_list)) do @if "%~xc" == ".$(srcext)" @call create-lists.bat file $(makefile_snippet_file) $(intdir)\%~nc.obj]
+#
+# $(intdir)\%~nc.obj needs to correspond to the rules added in build-rules-msvc.mak
+# %~xc gives the file extension of a given file, %c in this case, so if %c is a.cc, %~xc means .cc
+# %~nc gives the file name of a given file without extension, %c in this case, so if %c is a.cc, %~nc means a
+
+NULL=
+
+pangomm_generated_private_headers = $(files_hg:.hg=_p.h)
+
+# For pangomm
+
+!if [call create-lists.bat header pangomm.mak pangomm_OBJS]
+!endif
+
+!if [for %c in ($(files_built_cc)) do @if "%~xc" == ".cc" @call create-lists.bat file pangomm.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\pangomm\%~nc.obj]
+!endif
+
+!if [for %c in ($(files_extra_cc)) do @if "%~xc" == ".cc" @call create-lists.bat file pangomm.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\pangomm\%~nc.obj]
+!endif
+
+!if [@call create-lists.bat file pangomm.mak vs^$(VSVER)\^$(CFG)\^$(PLAT)\pangomm\pangomm.res]
+!endif
+
+!if [call create-lists.bat footer pangomm.mak]
+!endif
+
+!if [call create-lists.bat header pangomm.mak pangomm_real_hg]
+!endif
+
+!if [for %c in ($(files_hg)) do @call create-lists.bat file pangomm.mak ..\pango\src\%c]
+!endif
+
+!if [call create-lists.bat footer pangomm.mak]
+!endif
+
+!include pangomm.mak
+
+!if [del /f /q pangomm.mak]
+!endif
diff --git a/MSVC_NMake/create-lists.bat b/MSVC_NMake/create-lists.bat
new file mode 100644 (file)
index 0000000..ef60d5c
--- /dev/null
@@ -0,0 +1,42 @@
+@echo off
+rem Simple .bat script for creating the NMake Makefile snippets.
+
+if not "%1" == "header" if not "%1" == "file" if not "%1" == "footer" goto :error_cmd
+if "%2" == "" goto error_no_destfile
+
+if "%1" == "header" goto :header
+if "%1" == "file" goto :addfile
+if "%1" == "footer" goto :footer
+
+:header
+if "%3" == "" goto error_var
+echo %3 =      \>>%2
+goto done
+
+:addfile
+if "%3" == "" goto error_file
+echo.  %3      \>>%2
+goto done
+
+:footer
+echo.  $(NULL)>>%2
+echo.>>%2
+goto done
+
+:error_cmd
+echo Specified command '%1' was invalid.  Valid commands are: header file footer.
+goto done
+
+:error_no_destfile
+echo Destination NMake snippet file must be specified
+goto done
+
+:error_var
+echo A name must be specified for using '%1'.
+goto done
+
+:error_file
+echo A file must be specified for using '%1'.
+goto done
+
+:done
\ No newline at end of file
diff --git a/MSVC_NMake/detectenv-msvc.mak b/MSVC_NMake/detectenv-msvc.mak
new file mode 100644 (file)
index 0000000..b99227c
--- /dev/null
@@ -0,0 +1,166 @@
+# Change this (or specify PREFIX= when invoking this NMake Makefile) if
+# necessary, so that the libs and headers of the dependent third-party
+# libraries can be located.  For instance, if building from GLib's
+# included Visual Studio projects, this should be able to locate the GLib
+# build out-of-the-box if they were not moved.  GLib's headers will be
+# found in $(GLIB_PREFIX)\include\glib-2.0 and
+# $(GLIB_PREFIX)\lib\glib-2.0\include and its import library will be found
+# in $(GLIB_PREFIX)\lib.
+
+!if "$(PREFIX)" == ""
+PREFIX = ..\..\vs$(VSVER)\$(PLAT)
+!endif
+
+# Location of the PERL interpreter, for running glib-mkenums.  glib-mkenums
+# needs to be found in $(PREFIX)\bin.  Using either a 32-bit or x64 PERL
+# interpreter are supported for either a 32-bit or x64 build.
+
+!if "$(PERL)" == ""
+PERL = perl
+!endif
+
+# Location of the Python interpreter, for building introspection.  The complete set
+# of Python Modules for introspection (the giscanner Python scripts and the _giscanner.pyd
+# compiled module) needs to be found in $(PREFIX)\lib\gobject-introspection\giscanner, and
+# the g-ir-scanner Python script and g-ir-compiler utility program needs to be found
+# in $(PREFIX)\bin, together with any DLLs they will depend on, if those DLLs are not already
+# in your PATH.
+# Note that the Python interpreter and the introspection modules and utility progam must
+# correspond to the build type (i.e. 32-bit Release for 32-bit Release builds, and so on).
+#
+# For introspection, currently only Python 2.7.x is supported.  This may change when Python 3.x
+# support is added upstream in gobject-introspection--when this happens, the _giscanner.pyd must
+# be the one that is built against the release series of Python that is used here.
+
+!if "$(PYTHON)" == ""
+PYTHON = python
+!endif
+
+# Location of the pkg-config utility program, for building introspection.  It needs to be able
+# to find the pkg-config (.pc) files so that the correct libraries and headers for the needed libraries
+# can be located, using PKG_CONFIG_PATH.  Using either a 32-bit or x64 pkg-config are supported for
+# either a 32-bit or x64 build.
+
+!if "$(PKG_CONFIG)" == ""
+PKG_CONFIG = pkg-config
+!endif
+
+# The items below this line should not be changed, unless one is maintaining
+# the NMake Makefiles.  The exception is for the CFLAGS_ADD line(s) where one
+# could use his/her desired compiler optimization flags, if he/she knows what is
+# being done.
+
+# Check to see we are configured to build with MSVC (MSDEVDIR, MSVCDIR or
+# VCINSTALLDIR) or with the MS Platform SDK (MSSDK or WindowsSDKDir)
+!if !defined(VCINSTALLDIR) && !defined(WINDOWSSDKDIR)
+MSG = ^
+This Makefile is only for Visual Studio 2008 and later.^
+You need to ensure that the Visual Studio Environment is properly set up^
+before running this Makefile.
+!error $(MSG)
+!endif
+
+ERRNUL  = 2>NUL
+_HASH=^#
+
+!if ![echo VCVERSION=_MSC_VER > vercl.x] \
+    && ![echo $(_HASH)if defined(_M_IX86) >> vercl.x] \
+    && ![echo PLAT=Win32 >> vercl.x] \
+    && ![echo $(_HASH)elif defined(_M_AMD64) >> vercl.x] \
+    && ![echo PLAT=x64 >> vercl.x] \
+    && ![echo $(_HASH)elif defined(_M_ARM64) >> vercl.x] \
+    && ![echo PLAT=arm64 >> vercl.x] \
+    && ![echo $(_HASH)endif >> vercl.x] \
+    && ![cl -nologo -TC -P vercl.x $(ERRNUL)]
+!include vercl.i
+!if ![echo VCVER= ^\> vercl.vc] \
+    && ![set /a $(VCVERSION) / 100 - 6 >> vercl.vc]
+!include vercl.vc
+!endif
+!endif
+!if ![del $(ERRNUL) /q/f vercl.x vercl.i vercl.vc]
+!endif
+
+VSVER = 0
+PDBVER = 0
+VSVER_SUFFIX = 0
+
+!if $(VCVERSION) > 1499 && $(VCVERSION) < 1600
+PDBVER = 9
+!elseif $(VCVERSION) > 1599 && $(VCVERSION) < 1700
+PDBVER = 10
+!elseif $(VCVERSION) > 1699 && $(VCVERSION) < 1800
+PDBVER = 11
+!elseif $(VCVERSION) > 1799 && $(VCVERSION) < 1900
+PDBVER = 12
+!elseif $(VCVERSION) > 1899 && $(VCVERSION) < 2000
+PDBVER = 14
+!if $(VCVERSION) > 1909 && $(VCVERSION) < 1920
+VSVER_SUFFIX = 1
+VSVER = 15
+!elseif $(VCVERSION) > 1919 && $(VCVERSION) < 1930
+VSVER_SUFFIX = 2
+VSVER = 16
+!elseif $(VCVERSION) > 1929 && $(VCVERSION) < 2000
+VSVER_SUFFIX = 3
+VSVER = 17
+!else
+VSVER = $(PDBVER)
+!endif
+!else
+VSVER = $(PDBVER)
+!endif
+
+!if "$(VSVER)" == "0"
+MSG = ^
+This NMake Makefile set supports Visual Studio^
+9 (2008) through 16 (2019).  Your Visual Studio^
+version is not supported.
+!error $(MSG)
+!endif
+
+VALID_CFGSET = FALSE
+!if "$(CFG)" == "release" || "$(CFG)" == "Release" || "$(CFG)" == "debug" || "$(CFG)" == "Debug"
+VALID_CFGSET = TRUE
+!endif
+
+# One may change these items, but be sure to test
+# the resulting binaries
+!if "$(CFG)" == "release" || "$(CFG)" == "Release"
+CFLAGS_ADD_NO_GL = /MD /O2 /MP
+CFLAGS_ADD = $(CFLAGS_ADD_NO_GL) /GL
+!if "$(VSVER)" != "9"
+CFLAGS_ADD = $(CFLAGS_ADD) /d2Zi+
+CFLAGS_ADD_NO_GL = $(CFLAGS_ADD_NO_GL) /d2Zi+
+!endif
+!else
+CFLAGS_ADD = /MDd /Od
+CFLAGS_ADD_NO_GL = $(CFLAGS_ADD)
+!endif
+
+!if "$(PLAT)" == "x64"
+LDFLAGS_ARCH = /machine:x64
+!elseif "$(PLAT)" == "arm64"
+LDFLAGS_ARCH = /machine:arm64
+!else
+LDFLAGS_ARCH = /machine:x86
+!endif
+
+!if "$(VALID_CFGSET)" == "TRUE"
+CFLAGS_NOGL = $(CFLAGS_ADD_NO_GL) /W3 /Zi
+CFLAGS = $(CFLAGS_ADD) /W3 /Zi
+
+LDFLAGS_BASE = $(LDFLAGS_ARCH) /libpath:$(PREFIX)\lib /DEBUG
+
+!if "$(CFG)" == "debug" || "$(CFG)" == "Debug"
+ARFLAGS_NOLTCG = $(LDFLAGS_ARCH)
+ARFLAGS = $(LDFLAGS_ARCH)
+LDFLAGS_NOLTCG = $(LDFLAGS_BASE)
+LDFLAGS = $(LDFLAGS_BASE)
+!else
+ARFLAGS_NOLTCG = $(LDFLAGS_ARCH) /LTCG
+ARFLAGS = $(ARFLAGS_NOLTCG) /LTCG
+LDFLAGS_NOLTCG = $(LDFLAGS_BASE) /opt:ref
+LDFLAGS = $(LDFLAGS_NOLTCG) /LTCG
+!endif
+!endif
diff --git a/MSVC_NMake/filelist.am b/MSVC_NMake/filelist.am
new file mode 100644 (file)
index 0000000..7e77f51
--- /dev/null
@@ -0,0 +1,14 @@
+## This file is part of pangomm.
+
+msvc_nmake_data =              \
+       build-rules-msvc.mak    \
+       config-msvc.mak         \
+       create-lists-msvc.mak   \
+       create-lists.bat        \
+       detectenv-msvc.mak      \
+       generate-msvc.mak       \
+       info-msvc.mak           \
+       install.mak             \
+       Makefile.vc             \
+       pangomm/pangomm.rc      \
+       pangomm/pangommconfig.h
diff --git a/MSVC_NMake/generate-msvc.mak b/MSVC_NMake/generate-msvc.mak
new file mode 100644 (file)
index 0000000..9bb86c8
--- /dev/null
@@ -0,0 +1,54 @@
+# NMake Makefile portion for code generation and
+# intermediate build directory creation
+# Items in here should not need to be edited unless
+# one is maintaining the NMake build files.
+
+# Create the build directories
+vs$(VSVER)\$(CFG)\$(PLAT)\pangomm      \
+vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\private:
+       @-md $@
+
+# Generate wrap_init.cc files
+vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\wrap_init.cc: $(pangomm_real_hg)
+       @if not exist ..\pango\pangomm\wrap_init.cc $(PERL) -- "$(GMMPROC_DIR)/generate_wrap_init.pl" --namespace=Pango --parent_dir=pangomm $(pangomm_real_hg:\=/)>$@
+
+# Generate pre-generated resources and configuration headers (builds from GIT)
+prep-git-build: pkg-ver.mak
+       $(MAKE) /f Makefile.vc CFG=$(CFG) GENERATE_VERSIONED_FILES=1 pangomm\pangomm.rc pangomm\pangommconfig.h
+
+pangomm\pangomm.rc: ..\configure.ac pangomm\pangomm.rc.in
+       @if not "$(DO_REAL_GEN)" == "1" if exist pkg-ver.mak del pkg-ver.mak
+       @if not exist pkg-ver.mak $(MAKE) /f Makefile.vc CFG=$(CFG) prep-git-build
+       @if "$(DO_REAL_GEN)" == "1" echo Generating $@...
+       @if "$(DO_REAL_GEN)" == "1" copy $@.in $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@PANGOMM_MAJOR_VERSION\@/$(PKG_MAJOR_VERSION)/g" $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@PANGOMM_MINOR_VERSION\@/$(PKG_MINOR_VERSION)/g" $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@PANGOMM_MICRO_VERSION\@/$(PKG_MICRO_VERSION)/g" $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@PACKAGE_VERSION\@/$(PKG_MAJOR_VERSION).$(PKG_MINOR_VERSION).$(PKG_MICRO_VERSION)/g" $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\@PANGOMM_MODULE_NAME\@/pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)/g" $@
+       @if "$(DO_REAL_GEN)" == "1" del $@.bak
+
+# You may change PANGOMM_DISABLE_DEPRECATED if you know what you are doing
+pangomm\pangommconfig.h: ..\configure.ac ..\pango\pangommconfig.h.in
+       @if not "$(DO_REAL_GEN)" == "1" if exist pkg-ver.mak del pkg-ver.mak
+       @if not exist pkg-ver.mak $(MAKE) /f Makefile.vc CFG=$(CFG) prep-git-build
+       @if "$(DO_REAL_GEN)" == "1" echo Generating $@...
+       @if "$(DO_REAL_GEN)" == "1" copy ..\pango\$(@F).in $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\#undef PANGOMM_DISABLE_DEPRECATED/\/\* \#undef PANGOMM_DISABLE_DEPRECATED \*\//g" $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\#undef PANGOMM_MAJOR_VERSION/\#define PANGOMM_MAJOR_VERSION $(PKG_MAJOR_VERSION)/g" $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\#undef PANGOMM_MINOR_VERSION/\#define PANGOMM_MINOR_VERSION $(PKG_MINOR_VERSION)/g" $@
+       @if "$(DO_REAL_GEN)" == "1" $(PERL) -pi.bak -e "s/\#undef PANGOMM_MICRO_VERSION/\#define PANGOMM_MICRO_VERSION $(PKG_MICRO_VERSION)/g" $@
+       @if "$(DO_REAL_GEN)" == "1" del $@.bak
+
+pkg-ver.mak: ..\configure.ac
+       @echo Generating version info Makefile Snippet...
+       @$(PERL) -00 -ne "print if /AC_INIT\(/" $** |   \
+       $(PERL) -pe "tr/, /\n/s" |      \
+       $(PERL) -ne "print if 2 .. 2" | \
+       $(PERL) -ne "print /\[(.*)\]/" > ver.txt
+       @echo @echo off>pkg-ver.bat
+       @echo.>>pkg-ver.bat
+       @echo set /p pangomm_ver=^<ver.txt>>pkg-ver.bat
+       @echo for /f "tokens=1,2,3 delims=." %%%%a IN ("%pangomm_ver%") do (echo PKG_MAJOR_VERSION=%%%%a^& echo PKG_MINOR_VERSION=%%%%b^& echo PKG_MICRO_VERSION=%%%%c)^>$@>>pkg-ver.bat
+       @pkg-ver.bat
+       @del ver.txt pkg-ver.bat
diff --git a/MSVC_NMake/info-msvc.mak b/MSVC_NMake/info-msvc.mak
new file mode 100644 (file)
index 0000000..54c4a3c
--- /dev/null
@@ -0,0 +1,35 @@
+# NMake Makefile portion for displaying config info
+
+all-build-info:
+       @echo.
+       @echo ----------
+       @echo Build info
+       @echo ---------
+       @echo Build Type: $(CFG)
+
+help:
+       @echo.
+       @echo ============================
+       @echo Building pangomm Using NMake
+       @echo ============================
+       @echo nmake /f Makefile.vc CFG=[release^|debug] ^<PREFIX=PATH^> ^<option1=xxx option2=xxx^>
+       @echo.
+       @echo Where:
+       @echo ------
+       @echo CFG: Required, use CFG=release for an optimized build and CFG=debug
+       @echo for a debug build.  PDB files are generated for all builds.
+       @echo.
+       @echo PREFIX: Optional, the path where dependent libraries and tools may be
+       @echo found, default is ^$(srcrootdir)\..\vs^$(short_vs_ver)\^$(platform),
+       @echo where ^$(short_vs_ver) is 15 for VS 2017 and so on; and
+       @echo ^$(platform) is Win32 for 32-bit builds and x64 for x64 builds.
+       @echo.
+       @echo ======
+       @echo A 'clean' target is supported to remove all generated files, intermediate
+       @echo object files and binaries for the specified configuration.
+       @echo.
+       @echo An 'install' target is supported to copy the build (DLLs, utility programs,
+       @echo LIBs, along with the introspection files if applicable) to appropriate
+       @echo locations under ^$(PREFIX).
+       @echo ======
+       @echo.
diff --git a/MSVC_NMake/install.mak b/MSVC_NMake/install.mak
new file mode 100644 (file)
index 0000000..a2acb45
--- /dev/null
@@ -0,0 +1,20 @@
+# NMake Makefile snippet for copying the built libraries, utilities and headers to
+# a path under $(PREFIX).
+
+install: all
+       @if not exist $(PREFIX)\bin\ mkdir $(PREFIX)\bin
+       @if not exist $(PREFIX)\lib\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\include\ mkdir $(PREFIX)\lib\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\include
+       @if not exist $(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\pangomm\private\ @mkdir $(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\pangomm\private
+       @if not exist $(PREFIX)\share\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\proc\m4\ @mkdir $(PREFIX)\share\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\proc\m4
+       @copy /b vs$(VSVER)\$(CFG)\$(PLAT)\$(PANGOMM_LIBNAME).dll $(PREFIX)\bin
+       @copy /b vs$(VSVER)\$(CFG)\$(PLAT)\$(PANGOMM_LIBNAME).pdb $(PREFIX)\bin
+       @copy /b vs$(VSVER)\$(CFG)\$(PLAT)\$(PANGOMM_LIBNAME).lib $(PREFIX)\lib
+       @copy ..\pango\pangomm.h "$(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\"
+       @for %h in ($(files_built_h) $(files_extra_h)) do @if exist ..\untracked\pango\pangomm\%h copy ..\untracked\pango\pangomm\%h "$(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\pangomm\%h"
+       @for %h in ($(files_built_h) $(files_extra_h)) do @if exist ..\pango\pangomm\%h if not exist ..\untracked\pango\pangomm\%h copy ..\pango\pangomm\%h "$(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\pangomm\%h"
+       @for %h in ($(files_built_h) $(files_extra_h)) do @if exist vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\%h copy vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\%h "$(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\pangomm\%h"
+       @for %h in ($(pangomm_generated_private_headers)) do @if exist ..\untracked\pango\pangomm\private\%h copy ..\untracked\pango\pangomm\private\%h "$(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\pangomm\private\%h"
+       @for %h in ($(pangomm_generated_private_headers)) do @if exist ..\pango\pangomm\private\%h if not exist ..\pango\pangomm\private\%h copy ..\pango\pangomm\private\%h "$(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\pangomm\private\%h"
+       @for %h in ($(pangomm_generated_private_headers)) do @if exist vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\private\%h copy vs$(VSVER)\$(CFG)\$(PLAT)\pangomm\private\%h "$(PREFIX)\include\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\pangomm\private\%h"
+       @copy ".\pangomm\pangommconfig.h" "$(PREFIX)\lib\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\include\"
+       @copy ..\tools\m4\*.m4 $(PREFIX)\share\pangomm-$(PANGOMM_MAJOR_VERSION).$(PANGOMM_MINOR_VERSION)\proc\m4
diff --git a/MSVC_NMake/pangomm/meson.build b/MSVC_NMake/pangomm/meson.build
new file mode 100644 (file)
index 0000000..d7c88d2
--- /dev/null
@@ -0,0 +1,17 @@
+# MSVC_NMake/pangomm
+
+# Input: pkg_conf_data, pangommconfig_h
+# Output: pangomm_rc
+
+pangomm_rc = configure_file(
+  input: 'pangomm.rc.in',
+  output: '@BASENAME@',
+  configuration: pkg_conf_data,
+)
+
+# Copy the generated configuration header into the MSVC project directory.
+configure_file(
+  input: pangommconfig_h,
+  output: 'pangommconfig.h',
+  copy: true,
+)
diff --git a/MSVC_NMake/pangomm/pangomm.rc.in b/MSVC_NMake/pangomm/pangomm.rc.in
new file mode 100644 (file)
index 0000000..6b42f24
--- /dev/null
@@ -0,0 +1,71 @@
+
+#define APSTUDIO_READONLY_SYMBOLS
+
+#include <windows.h>
+
+#undef APSTUDIO_READONLY_SYMBOLS
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
+#ifdef _WIN32
+LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
+#pragma code_page(1252)
+#endif //_WIN32
+
+#ifdef APSTUDIO_INVOKED
+
+1 TEXTINCLUDE 
+BEGIN
+    "resource.h\0"
+END
+
+2 TEXTINCLUDE 
+BEGIN
+    "#include ""afxres.h""\r\n"
+    "\0"
+END
+
+3 TEXTINCLUDE 
+BEGIN
+    "\r\n"
+    "\0"
+END
+
+#endif    // APSTUDIO_INVOKED
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION @PANGOMM_MAJOR_VERSION@,@PANGOMM_MINOR_VERSION@,@PANGOMM_MICRO_VERSION@,1
+ PRODUCTVERSION @PANGOMM_MAJOR_VERSION@,@PANGOMM_MINOR_VERSION@,@PANGOMM_MICRO_VERSION@,1
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "040904b0"
+        BEGIN
+            VALUE "CompanyName", "The gtkmm development team (see AUTHORS)"
+            VALUE "FileDescription", "The official C++ wrapper for pango"
+            VALUE "FileVersion", "@PACKAGE_VERSION@"
+            VALUE "LegalCopyright", "Distribution is under the LGPL (see COPYING)"
+            VALUE "OriginalFilename", "@PANGOMM_MODULE_NAME@.dll"
+            VALUE "ProductName", "pangomm"
+            VALUE "ProductVersion", "@PACKAGE_VERSION@"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x409, 1200
+    END
+END
+
+#endif    // English (U.S.) resources
+
+#ifndef APSTUDIO_INVOKED
+
+#endif    // not APSTUDIO_INVOKED
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..21c2b4f
--- /dev/null
@@ -0,0 +1,68 @@
+## Copyright (c) 2009  Openismus GmbH  <http://www.openismus.com/>
+##
+## This file is part of pangomm.
+##
+## pangomm 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.
+##
+## pangomm 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.  If not, see <http://www.gnu.org/licenses/>.
+
+ACLOCAL_AMFLAGS = -I build ${ACLOCAL_FLAGS}
+DISTCHECK_CONFIGURE_FLAGS = --enable-warnings=fatal
+
+if MAINTAINER_MODE
+src_subdirs = pango/src
+else
+src_subdirs =
+endif
+if ENABLE_DOCUMENTATION
+doc_subdirs = docs
+else
+doc_subdirs =
+endif
+SUBDIRS = tools $(src_subdirs) pango/pangomm $(doc_subdirs)
+
+pangomm_includedir = $(includedir)/$(PANGOMM_MODULE_NAME)
+pangomm_include_HEADERS = pango/pangomm.h
+pangomm_libincludedir = $(libdir)/$(PANGOMM_MODULE_NAME)/include
+nodist_pangomm_libinclude_HEADERS = pango/pangommconfig.h
+
+pkgconfigdir = $(libdir)/pkgconfig
+nodist_pkgconfig_DATA = pango/$(PANGOMM_MODULE_NAME).pc
+
+include $(srcdir)/MSVC_NMake/filelist.am
+
+text_files = COPYING.tools README.SUN README.win32
+msvc_files = $(addprefix MSVC_NMake/,$(msvc_nmake_data))
+
+dist_noinst_DATA = $(text_files) $(msvc_files)
+dist_noinst_SCRIPTS = autogen.sh
+
+DISTCLEANFILES = MSVC_NMake/pangomm/pangommconfig.h
+
+# Distribute files needed when building pangomm with Meson.
+EXTRA_DIST = \
+  meson.build \
+  meson_options.txt \
+  MSVC_NMake/pangomm/meson.build \
+  docs/reference/meson.build \
+  pango/meson.build \
+  pango/pangomm/meson.build \
+  pango/pangommconfig.h.meson \
+  subprojects/cairomm-1.16.wrap \
+  subprojects/glibmm-2.68.wrap \
+  subprojects/pango.wrap \
+  tools/dummy-header.py \
+  tools/extra_defs_gen/meson.build \
+  untracked/README
+
+# Optional: auto-generate the ChangeLog file from the git log on make dist
+include $(top_srcdir)/build/dist-changelog.am
diff --git a/NEWS b/NEWS
new file mode 100755 (executable)
index 0000000..e808289
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,418 @@
+2.50.1 (stable):
+
+* Context::get_font_map(): Fix reference count
+  (Kjell Ahlstedt)
+
+Build:
+* Meson build: Specify 'check' option in run_command()
+  Will be necessary with future versions of Meson.
+  Require Meson >= 0.55.0
+* Meson build: Check if Perl is required for building documentation
+* Meson build: Avoid unnecessary configuration warnings
+  (Kjell Ahlstedt)
+* Meson build: Re-organize warning-related compiler flags for MSVC
+  (Chun-wei Fan)
+
+
+2.50.0 (stable):
+
+* AttrList: Add get_attributes(), update(), equal()
+  (Kjell Ahlstedt) Issue #12 (misos1)
+* Make CairoFontMap::set_resolution() usable
+  by adding the CairoFontMapImpl class
+  (Kjell Ahlstedt) Issue #15 (Ievgenii Meshcheriakov)
+* Add FontMap::get_family()
+  (Kjell Ahlstedt)
+* AttrList: Add to_string() and from_string()
+  Attribute: Add TextTransform, BaselineShift and FontScle enums
+  and some create_attr_*() methods
+  (Kjell Ahlstedt)
+
+Build:
+* Don't include individual pango headers
+  (Matthias Clasen, Kjell Ahlstedt) Merge request !22
+* Support Visual Studio 2022 builds
+  (Chun-wei Fan)
+* Require pango >= 1.49.4
+  (Kjell Ahlstedt)
+
+
+2.49.1 (unstable)
+
+* Layout, LayoutIter: Add get_const_line() and get_const_lines()
+  (Kjell Ahlstedt) Issue #10 (misos1)
+* GlyphItem: Make most methods public
+  (Kjell Ahlstedt) Issue #11 (Josh Bialkowski)
+
+
+2.48.1 (stable):
+
+* GlyphItem: Fix a memory leak in split()
+  (Kjell Ahlstedt)
+* Layout: Speed up get_log_attrs()
+  (Kjell Ahlstedt)
+
+Build:
+* Meson build: Use relative paths to untracked/
+  (Kjell Ahlstedt) Merge request gtkmm!61 (Mingli Yu)
+* pangommconfig.h.*: Don't dllimport on MinGW
+  (Chun-wei Fan) Issue gtkmm#90 (Lukas K.)
+* Meson build: Make it possible to use pangomm as a subproject
+  (Kjell Ahlstedt)
+* Meson build: No implicit_include_directories
+  (Kjell Ahlstedt)
+
+
+2.48.0 (stable):
+This is the first stable release in the pangomm-2.48 ABI series.
+It is parallel-installable with the pangomm-1.4 ABI.
+
+The tarball for 2.48.0 has been created with 'meson dist'.
+If you build with Autotools from the tarball, please read the relevant
+part of the README file.
+
+* FontFamily, FontMap: Implement the Gio::ListModel interface
+  CairoFontMap: Add get_default()
+  (Andreas Persson) Merge request !20
+* Attribute: Add Overline and ShowFlags enums and some create*() methods
+  Renderer: Add vfuncs
+  (Kjell Ahlstedt) Issue #9 (misos1)
+* Font, FontFace, FontFamily, FontMetrics: Add new methods
+  (Kjell Ahlstedt)
+* LayoutRun: Rename to GlyphItem
+  (Kjell Ahlstedt)
+* LayoutIter: Fix get_run() and get_line()
+  (Kjell Ahlstedt)
+* GlyphString, Item: Wrap pango_shape_with_flags()
+  (Kjell Ahlstedt) Issue #9 (Tavmjong Bah)
+* Layout: Add set/get_line_spacing()
+  (Kjell Ahlstedt) Issue #9 (misos1)
+
+Build:
+* Depend on giomm (not just glibmm)
+  (Andreas Persson) Merge request !20
+* Use __declspec(dllexport) when building with Visual Studio
+  (Chun-wei Fan) Merge request !15, !16
+* Meson build: Avoid some recompilations
+  (Kjell Ahlstedt)
+* Meson build: Better error message if trying to build with
+  maintainer-mode=false when true is necessary
+  (Kjell Ahlstedt) Issue #6 (Rasmus Thomsen)
+* Meson build: Set default value of the 'warnings' option to 'min'
+  (Kjell Ahlstedt)
+* Improve NMake support
+  (Chun-wei Fan)
+* Improve Visual Studio support
+  (Chun-wei Fan) Merge request !15, !19
+* docs/reference/: Update for Doxygen >= 1.8.16
+  (Kjell Ahlstedt)
+* Meson build: Fix versioning on macOS
+  (Kjell Ahlstedt) Pull request libsigcplusplus#65 (Tom Schoonjans)
+* Change the ABI to pangomm-2.48
+  (Kjell Ahlstedt)
+
+
+2.43.2 (unstable):
+Distro packagers should probably not package this yet.
+
+* Coverage: Remove max(), to_bytes() and one create()
+  (Kjell Ahlstedt)
+* Layout::get_lines(): Fix ownership of the GSList
+  (Kjell Ahlstedt)
+* Remove deprecated API
+  - AttrList: non-const operator bool()
+  - CairoFontMap: create_context()
+  - Color: non-const operator bool()
+  - Layout: get_iter(LayoutIter& iter)
+  - LayoutIter: assign_gobj()
+  (Kjell Ahlstedt)
+* pango/src/color.hg: Fix call to _CLASS_BOXEDTYPE_STATIC
+  (Chun-wei Fan) Merge request !9
+
+Build:
+* Use glibmm-2.66 instead of glibmm-2.60
+  (Kjell Ahlstedt)
+* tools/gen_scripts: Update for non-source-dir builds
+  (Kjell Ahlstedt)
+* Add support for building pangomm with Meson
+  (Chun-wei Fan, Kjell Ahlstedt) Merge request !4, !5, !6
+* meson.build: Check if .git is a directory or file
+  (Ting-Wei Lan) Merge request !8
+* NMake Makefiles: Allow builds from a GIT checkout
+  (Chun-wei Fan)
+* Visual Studio: Drop gendef.exe, use __declspec(dllexport)
+  (Chun-wei Fan) Merge request !13
+* The fixed call to _CLASS_BOXEDTYPE_STATIC in color.hg
+  is necessary in order to use glibmm 2.65.1 or later,
+  combined with maintainer-mode in pangomm.
+
+
+2.43.1 (unstable):
+Distro packagers should probably not package this yet.
+
+* Attribute: Add several create_attr_*() methods
+  (Kjell Ahlstedt) Bug #781059 = Issue #2 (Tony Houghton)
+* FontDescription: Add set/get_variations()
+  (Kjell Ahlstedt)
+
+Build:
+* Require C++17.
+  (Murray Cumming)
+* Replace the Visual Studio project files with MSVC NMake project files
+  (Chun-wei Fan) Merge request !1
+* Use glibmm-2.60 instead of glibmm-2.56
+  (Kjell Ahlstedt)
+* Requires pango >= 1.41.0
+  because of FontDescription::set/get_variations()
+  (Kjell Ahlstedt)
+* Change the ABI to pangomm-2.44
+  (Kjell Ahlstedt)
+
+2.41.5 (unstable):
+Distro packagers should probably not package this yet.
+
+* Only build changes.
+  (Kjell Ahlstedt)
+
+2.41.4 (unstable):
+Distro packagers should probably not package this yet.
+
+* Build: Use glibmm-2.56 instead of glibmm-2.54.
+  We have changed the ABI name in glibmm.
+  (Murray Cumming)
+* Build: Fontset: Remove GLIBMM_EXCEPTIONS_ENABLED
+  (Kjell Ahlstedt)
+* AttrString: Let _MEMBER_GET convert from const char*.
+  (Kjell Ahlstedt)  Bug #783360
+* Weight enum: Make this implicitly convertible to int.
+  (Kjell Ahlstedt) Bug #86864
+
+2.41.3 (unstable):
+
+* Use C++11 enum classes instead of old-style enums, and put many enums
+  inside relevant class declarations:
+  - Coverage: Change CoverageLevel to Coverage::Level.
+  - Renderer: Change RendererPart to Renderer::Part.
+  (Kjell Ahlstedt, Murray Cumming)
+* Build: Windows: Visual Studio builds: Update glibmm ABI version.
+
+
+2.41.2 (unstable):
+
+* Build: Use glibmm-2.54 instead of glibmm-2.52.
+  (Murray Cumming)
+* Visual Studio: Require Visual Studio 2017.
+  (Chun-wei Fan)
+
+* Replace uses of Glib::ArrayHandle<>, Glib::ListHandle, and Glib::SListHandle
+  in the API with std::vector.
+  (Murray Cumming)
+
+
+2.41.1 (unstable):
+
+This is the first release of the pangomm-2.42 API/ABI.
+It installs in parallel with the pangomm-1.4 API/ABI, of which
+the most recent version is pangomm 2.40.1.
+
+* Require C++14.
+  (Murray Cumming)
+* Use glibmm-2.52 instead of glibmm-2.4.
+  (Murray Cumming)
+* Use cairomm-1.16 instad of cairomm-1.0
+  (Murray Cumming)
+
+
+2.40.1 (stable):
+
+* C++11: Make all operator bool()s explicit.
+  (Murray Cumming)
+* Build: Fix silent builds.
+  (Kjell Ahlstedt) Bug #768797
+
+2.40.0 (stable):
+
+* No major changes compared to 2.39.1.
+
+2.39.1 (unstable):
+
+* Renderer: Added get/set_alpha().
+  (Murray Cumming)
+* Attribute: Added create_attr_background_alpha() and
+  create_attr_foreground_alpha().
+  (Murray Cumming)
+* Reduce the cairomm dependency back to 1.2.2.
+  (Murray Cumming) Bug #755460 (Daniel Stone)
+
+2.38.1 (stable):
+
+* Regenerate with the latest glibmm.
+
+2.38.0 (stable):
+
+* MSVC build fixes.
+  (Chun-wei Fan)
+
+2.37.2 (unstable):
+
+* Rebuilt with latest glibmm,
+  whose gmmproc generates C++ move operations.
+  (Murray Cumming)
+* C++11: Mark all _CLASS_OPAQUE_REFCOUNTED classes as final.
+  (Murray Cumming)
+
+2.37.1 (unstable):
+
+* Use (and require) C++11.
+* Attribute: fix operator!=.
+  (Maks Naumov) Bug #751531
+
+2.36.0 (stable):
+
+No changes compared to 2.35.1.
+
+2.35.1 (unstable):
+
+* Context: Add get_serial().
+  (Murray Cumming)
+* FontMap: Add get_serial().
+  (Murray Cumming)
+* Layout: Add get_character_count() and get_serial().
+  (Murray Cumming)
+* Documentatoin: Update appearance to match recent glibmm and gtkmm.
+* Win32 MSVC 2008/2010 Build: Many updates and corrections.
+  (Chun-wei Fan)
+
+2.34.0 (stable):
+
+* Remove the use of g_type_init() because it has been deprecated.
+  (José Alburquerque)
+       
+2.28.4 (stable):
+
+* Add #includes needed with the latest glibmm.
+  (Murray Cumming)
+  
+2.28.3 (stable):
+
+Build
+* Ship convert_pangomm.m4 in tarballs.
+       (Frederic Peters) Bug #657817
+* Don't use obsolete macros.
+  (Krzesimir Nowak)
+
+2.28.2 (stable):
+
+* Install the m4 files even without --enable-maintainer-mode, as with
+  other modules.
+  (Kalev Lember) Bug #645669
+
+2.28.1 (stable):
+
+* Avoid a tarball dependency on mm-common.
+  (Murray Cumming)
+
+2.28.0 (stable):
+
+Just a version increase and a regenerated tarball due to changes in an m4
+macro in mm-common.
+
+2.27.1 (unstable):
+
+* LayoutIter: This now has a copy constructor.
+* Layout::get_iter(): There is now a version of this method that returns a
+  LayoutIter. The version with the output parameter is now deprecated.
+
+2.26.2 (stable):
+
+* Documentation: Added main page text at index.html.
+  (David King, Murray Cumming)
+
+2.26.1 (stable):
+
+* Minor documentation improvements.
+  (Murray Cumming, José Alburquerque)
+
+2.26.0 (stable):
+
+* Minor documentation build fixes. (Daniel Elstner)
+
+2.25.1.3 (unstable):
+
+* Change public documentation location to library.gnome.org in
+  the pkg-config files as well.  (Daniel Elstner)
+
+2.25.1.2 (unstable):
+
+* Change public documentation location to library.gnome.org.
+  (Daniel Elstner)
+
+2.25.1.1 (unstable):
+
+* Reenable the per-class hierarchy graphs in the reference documentation.
+  (Daniel Elstner)
+* Drop the custom HTML header and footer, and use the shared doxygen.css
+  file from mm-common. (Daniel Elstner)
+
+2.25.1 (unstable):
+
+* Reworked the build system, using mm-common.
+  (Daniel Elstner)
+
+2.24.0 (stable):
+
+(Skipped version numbers since 2.14.1, to match pango 1.24
+(apart from the first digit, which we can't decrease.)
+
+* Layout: Added show_in_cairo_context().
+  (Louis-Francis Ratté-Boulianne) Bug #560232.
+* Build: Allow pangomm to build outside the source tree. Bug #570322
+  (Theppitak Karoonboonyanan)
+* License Header consistency. (Deng Xiyue)
+
+2.14.1 (stable):
+
+* Windows build: Use the new DLL naming convention, like boost.
+  (Armin Burgmeier)
+* Documentation:
+  - Corrected the index page for DevHelp.
+    (Deng Xiyue) Bug #559896
+
+2.14.0 (stable):
+
+* Language: Added get_scripts().
+  (Murray Cumming)
+* README and COPYING fixes.
+  (Deng Xiyue)
+* Fixed the Windows build with Visual Studio Express.
+  (Armin Burgmeier)
+
+2.13.8 (unstable):
+
+* Context: Added set_font_map() because the C function is now
+  public (non backend-only) API.
+* LayoutRun/GlyphItem: Added split() and letter().
+* Renderer: Added draw_glyph_item().
+* CairoFontMap:: Added set_default().
+  (Murray Cumming)
+* Build: Updated the MS Visual Studio 2005 build.
+  (Armin Burgmeier)
+
+2.13.7 (unstable):
+
+* Build: Require a correct version of pango.
+  (Sebastian Bacher)
+* Documentation: Correct some mentions of pangomm-2.4 to pangomm-1.4.
+  (Deng Xiyue)
+
+2.13.6 (unstable):
+
+* Layout: Added get_height(), set_height(), get_baseline().
+* LayoutIter: Added get_layout().
+* Renderer: Added get_layout() and get_layout_line().
+  (Murray Cumming)
+
+2.13.5 (unstable):
+
+This is a first version of pangomm in its own tarball.
+The API and ABI are not changed.
diff --git a/README.SUN b/README.SUN
new file mode 100644 (file)
index 0000000..9711097
--- /dev/null
@@ -0,0 +1,88 @@
+Building gtkmm under Sun Solaris
+================================
+
+This README refers currently only to Sun Forte[tm] C++ compiler (WS6U2)
+under Solaris 8/Sparc.
+
+The described procedure to compile gtkmm with Sun's commercial C++
+compiler assumes the default compiler installation of Forte[tm] C++ 6
+update 2. Furthermore all currently available product and adequate SunOS
+patches for Forte[tm] C++ 6 update 2, which can be donwload from the
+links given at http://access1.sun.com/sundev/fdp6u2-patches.html, have
+to be applied. After that your compiler should give the following
+version information:
+
+  $ CC -V
+  CC: Sun WorkShop 6 update 2 C++ 5.3 Patch 111685-10 2002/09/16
+
+You will not be able to compile gtkmm with the unpatched compiler
+installation. Also, it is important to hide any gcc installation
+from your PATH.
+
+
+The installation procedure:
+
+* Recent versions of the following GNU utilities should be avalaible in
+  your PATH:
+
+    make        (3.79.1)
+    libtool     (1.4.2)
+    m4          (1.4)
+    perl        (5.6.1)
+
+    The version information (in brackets) apply to my GNU installation.
+
+* Assuming your compiler installation is in /opt/SUNWspro, the following
+  environment changes are required:
+
+    PATH=/opt/SUNWspro/bin:$PATH
+    LD_LIBRARY_PATH=/opt/SUNWspro/bin:$LD_LIBRARY_PATH
+    export PATH LD_LIBRARY_PATH
+
+    CC="cc"
+    CXX="CC"
+    LD="CC"
+    CFLAGS="-g"         or "-g -xO3" for better optimization
+    CXXFLAGS="-g"       or "-g -O3" for better optimization
+    export CC CXX LD CFLAGS CXXFLAGS
+
+* Select an installation directory ($PREFIX).
+
+* The image libraries jpeg-6b, libpng-1.2.5 and tiff-v3.5.7 are pre-
+  requisites to build gtk+ libraries. They can be obtained from
+  www.sunfreeware.com or build from source. Compiling from source
+  requires some manual corrections (basically prefix settings in the
+  makefiles), because their build mechanism are rather old. All three
+  libraries should be build as shared libraries and installed to the
+  choosen installation directory.
+
+* gtk+-Installation. For each package of pkgconfig-0.12.0, glib-2.0.6,
+  atk-1.0.3, pango-1.0.4, gtk+-2.0.6 do:
+
+    cd <package-path>
+    CPPFLAGS=-I$PREFIX/include CFLAGS="-I$PREFIX/include $CFLAGS" \
+    ./configure --prefix=$PREFIX
+    make
+    make install
+
+* gtkmm-Installation. For each package of libsigc++-1.2.x, gtkmm-2.0.x do:
+
+    cd <package-path>
+    ./configure --prefix=$PREFIX
+    make
+    make install
+
+* Verification can easily done by
+
+    cd gtkmm-1.2.x/examples
+    make
+
+    and testing all built executables.
+
+
+Feel free to contact the gtkmm mailing list in case of problems compiling gtkmm under Sun
+Solaris.
+
+
+Michael v. Szombathely, 31-Oct-02
+<szombath@bifab.de>
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644 (file)
index 0000000..26109b9
--- /dev/null
+++ b/README.md
@@ -0,0 +1,103 @@
+# pangomm
+This is pangomm, a C++ API for Pango. 
+See http://www.gtkmm.org/
+
+# Building
+
+Whenever possible, you should use the official binary packages approved by the
+supplier of your operating system, such as your Linux distribution.
+
+## Building on Windows
+
+See README.win32
+
+## Building from a release tarball
+
+Extract the tarball and go to the extracted directory:
+```
+  $ tar xf pangomm-@PANGOMM_VERSION@.tar.xz
+  $ cd pangomm-@PANGOMM_VERSION@
+```
+
+It's easiest to build with Meson, if the tarball was made with Meson,
+and to build with Autotools, if the tarball was made with Autotools.
+Then you don't have to use maintainer-mode.
+
+How do you know how the tarball was made? If it was made with Meson,
+it contains files in untracked/pango/pangomm/ and other subdirectories
+of untracked/.
+
+### Building from a tarball with Meson
+
+Don't call the builddir 'build'. There is a directory called 'build' with
+files used by Autotools.
+```
+  $ meson --prefix /some_directory --libdir lib your_builddir .
+  $ cd your_builddir
+```
+If the tarball was made with Autotools, you must enable maintainer-mode:
+```
+  $ meson configure -Dmaintainer-mode=true
+```
+
+Then, regardless of how the tarball was made:
+```
+  $ ninja
+  $ ninja install
+```
+### Building from a tarball with Autotools
+
+If the tarball was made with Autotools:
+```
+  $ ./configure --prefix=/some_directory
+```
+If the tarball was made with Meson, you must enable maintainer-mode:
+```
+  $ ./autogen.sh --prefix=/some_directory
+```
+
+Then, regardless of how the tarball was made:
+```
+  $ make
+  $ make install
+```
+## Building from git
+
+Building from git can be difficult so you should prefer building from
+a release tarball unless you need to work on the pangomm code itself.
+
+jhbuild can be a good help
+- https://gitlab.gnome.org/GNOME/jhbuild
+- https://wiki.gnome.org/Projects/Jhbuild
+- https://gnome.pages.gitlab.gnome.org/jhbuild
+
+### Building from git with Meson
+
+Maintainer-mode is enabled by default when you build from a git clone.
+
+Don't call the builddir 'build'. There is a directory called 'build' with
+files used by Autotools.
+```
+  $ meson --prefix /some_directory --libdir lib your_builddir .
+  $ cd your_builddir
+  $ ninja
+  $ ninja install
+```
+You can create a tarball like so:
+```
+  $ ninja dist
+```
+### Building from git with Autotools
+```
+  $ ./autogen.sh --prefix=/some_directory
+  $ make
+  $ make install
+```
+You can create a tarball like so:
+```
+  $ make distcheck
+```
+or
+```
+  $ make dist
+```
diff --git a/README.win32 b/README.win32
new file mode 100644 (file)
index 0000000..80d55c1
--- /dev/null
@@ -0,0 +1,141 @@
+Building gtkmm on Win32\r
+===========================\r
+\r
+Currently, both the mingw (native win32) gcc compiler and MS Visual\r
+Studio 2017 are supported. gtkmm can be built with mingw32-gcc using\r
+the gnu autotools (automake, autoconf, libtool). As explicitly\r
+stated in the gtk+ for win32 distribution (http://www.gimp.org/win32/),\r
+the gcc compiler provided by the cygwin distribution should not be\r
+used to build gtk+/gtkmm libraries and/or applications (see the\r
+README.win32 that comes with the gtk+ DLLs). This MIGHT cause\r
+conflicts between the cygwin and msvcrt runtime environments.\r
+\r
+1. Mingw\r
+\r
+The mingw distribution which has been tested with this release is the\r
+following :\r
+\r
+* MinGW-4.1 as the base distribution.\r
+\r
+The bare mingw distribution does not provide the necessary tools (sh, perl, m4\r
+, autoconf, automake, ..) to run the provided configure script "as is". One\r
+(currently non supported) solution is to use mingw in conjunction with msys,\r
+which is readily available on the mingw website (http://www.mingw.org/).\r
+\r
+The preferred method is to combine the cygwin distribution (for the unix tools\r
+that were mentioned above) with mingw by making sure that the mingw\r
+tools (gcc, ld, dlltool, ..) are called first.\r
+\r
+First, make sure that you have working distribution of the native port\r
+of both libsigc++-3.x and gtk+-2.0 on win32 (see\r
+http://www.gimp.org/win32). If you can't compile a simple gtk+ example\r
+using gcc and `pkg-config --cflags --libs`, you should not even think\r
+about trying to compile gtkmm, let alone using precompiled libgtkmm\r
+DLLs to port your gtkmm application !\r
+\r
+The configure script can then be called using (as an example) the\r
+following options\r
+\r
+./configure --prefix=/target --build=i386-pc-mingw32 --disable-static\r
+\r
+then\r
+\r
+make\r
+make check\r
+make install\r
+\r
+2. MS Visual Studio 2017 15.7.0 or later\r
+\r
+Open a Visual Studio command prompt suitable for your intended build\r
+configuration, and change to the MSVC_NMake directory.  Ensure that\r
+all the depedent libraries could be found in $(PREFIX), which is at\r
+$(srcroot)\..\vs15\$(Platform) by default.  Run\r
+'nmake /f Makefile.vc CFG=[release|debug]' to build pangomm.  If a\r
+different $(PREFIX) is desired rather than the aforementioned default,\r
+pass in PREFIX=$(PATH) into your command line.  If using C++\r
+dependencies that are built with Meson, specify USE_MESON_LIBS=1 in your\r
+NMake command line.\r
+\r
+A 'clean' target is supported to remove all the built object files and\r
+intermediate files that are generated during the build, while an\r
+'install' target is supported to copy the built DLL and PDB, .lib and\r
+headers to their appropriate locations under $(PREFIX).\r
+\r
+The NMake Makefiles now support building the pangomm libraries directly from a GIT checkout\r
+with a few manual steps required, namely to:\r
+\r
+-Ensure that you have a copy of Cygwin or MSYS/MSYS64 installed, including\r
+ m4.exe and sh.exe.  You should also have a PERL for Windows installation\r
+ as well, and your PATH should contain the paths to your PERL interpreter\r
+ and the bin\ directory of your Cygwin or MSYS/MSYS64 installation, and\r
+ it is recommended that these paths are towards the end of your PATH.  You need\r
+ to install the XML::Parser PERL module as well, which requires libexpat.  You\r
+ may wish to pass in the directory where gmmproc and generate_wrap_init.pl\r
+ from glibmm is found, if they are not in $(PREFIX)\share\glibmm-2.4\proc.\r
+\r
+-Make a new copy of the entire source tree to some location, where the build\r
+ is to be done; then in $(srcroot)\MSVC_NMake run\r
+ nmake /f Makefile.vc CFG=[release|debug], which will copy and generate\r
+ the following files with the proper info:\r
+ --$(srcroot)\MSVC_NMake\pangomm\pangommconfig.h\r
+ --$(srcroot)\MSVC_NMake\pangomm\pangomm.rc\r
+ and will proceed with the build\r
+\r
+For pangommconfig.h, it is recommended to keep PANGOMM_DISABLE_DEPRECATED\r
+undefined unless you know what you are doing.  If $(srcroot)\MSVC_NMake\pangomm\pangommconfig.h\r
+and/or $(srcroot)\MSVC_NMake\pangomm\pangomm.rc is missing from the release tarball, they will\r
+also be generated when nmake /f Makefile.vc CFG=[release|debug] is run.\r
+\r
+Note that if $(srcroot)\MSVC_NMake\pangomm\pangommconfig.h and/or\r
+$(srcroot)\MSVC_NMake\pangomm\pangomm.rc needs to be generated, a working PERL installation is\r
+required.\r
+\r
+3. Using Meson\r
+\r
+3.1 Meson with Visual Studio 2017 15.7.0 or later\r
+\r
+You will need to have Python 3.5.x or later installed with Meson 0.50.0\r
+or later in order to use this build option, in addition to glibmm,\r
+cairomm and libsigc++-3.x (built with Visual Studio using Meson) and\r
+PangoCairo, with all of their required dependencies.  The Ninja build tool is\r
+also required if not using --backend=[vs2017|vs2019] in the Meson\r
+command line, as noted towards the end of this section.\r
+\r
+Note that for the -mm libraries (cairomm and glibmm), it is highly recommended that\r
+the same compiler is used to build the -mm libraries and pangomm, even if on Visual\r
+Studio 2017 or 2019.  One should be able to interexchange dependent C libraries that\r
+were built with Visual Studio 2015, 2017 or 2019 without problems\r
+\r
+Visual Studio 2019 may be able to use 2017-built -mm libraries without problems; but\r
+MSVC builds cannot make use of MinGW-built versions of the -mm libraries.  Note\r
+that 'debug' builds should only be used against dependencies that are built\r
+as debug builds, and 'release' and 'debugoptimized' should be only used against\r
+dependencies that are built as 'release' or 'debugoptimized'.  On Visual Studio\r
+builds in Meson, 'debugoptimized' is roughly equivilant to a Release build with\r
+.PDB files enabled, perhaps with some debugging features that are specific to the\r
+respective packages.\r
+\r
+You will need to have a working copy of glibmm, cairomm and PangoCairo's\r
+pkg-config files, which point to the corresponding locations of its headers\r
+and .lib's and the headers and .lib's of all of its dependencies.\r
+\r
+To carry out a build, do this in the same command prompt, with\r
+the Python interpreter, Meson executable script and Ninja executable\r
+(if not using --backend=[2017|2019]) in your PATH:\r
+-Create an empty build directory and cd to it.\r
+-Run "meson <path-to-pangomm-sources> --buildtype=<buildtype> --prefix=<prefix> [--backend=[2017|2019]]" without the quotes.\r
+-Perform the build using ninja or Visual Studio (if --backend=[2017|2019])\r
+ is used.  Install the build results after the build succeeds.\r
+\r
+3.2 Meson with MinGW\r
+The standard Meson build instructions for *NIX should work, although it\r
+is untested at the time of writing.\r
+\r
+4. Gtkmm methods and signals not available on win32\r
+\r
+All gtkmm methods and signals are available on win32.\r
+\r
+5. Gtkmm examples and demos on win32\r
+\r
+All demos and examples compile/run on win32\r
+\r
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..1d3b3de
--- /dev/null
@@ -0,0 +1,7 @@
+#! /bin/sh -e
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+
+mm-common-prepare --force --copy "$srcdir"
+autoreconf --force --install --warnings=all "$srcdir"
+test -n "$NOCONFIGURE" || "$srcdir/configure" --enable-maintainer-mode "$@"
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..a09ac62
--- /dev/null
@@ -0,0 +1,85 @@
+## Copyright (c) 2009  Openismus GmbH  <http://www.openismus.com/>
+##
+## This file is part of pangomm.
+##
+## pangomm 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.
+##
+## pangomm 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.  If not, see <http://www.gnu.org/licenses/>.
+
+AC_INIT([pangomm], [2.50.1],
+        [https://gitlab.gnome.org/GNOME/pangomm/issues/],
+        [pangomm], [http://www.gtkmm.org/])
+AC_PREREQ([2.59])
+
+AC_CONFIG_SRCDIR([pango/pangomm.h])
+AC_CONFIG_AUX_DIR([build])
+AC_CONFIG_MACRO_DIR([build])
+AC_CONFIG_HEADERS([config.h pango/pangommconfig.h])
+
+AM_INIT_AUTOMAKE([1.9 -Wno-portability check-news dist-bzip2 no-define nostdinc tar-ustar])
+# Support silent build rules.
+# Disable by either passing --disable-silent-rules to configure or passing V=1 to make.
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
+AM_MAINTAINER_MODE
+AC_ARG_VAR([ACLOCAL_FLAGS], [aclocal flags, e.g. -I <macro dir>])
+
+MM_PREREQ([0.9.12])
+MM_INIT_MODULE([pangomm-2.48])
+
+# Copy the mm-common .pl scripts into docs/,
+# and use them from there,
+# so we can dist them to avoid a tarball-build dependency.
+MM_CONFIG_DOCTOOL_DIR([docs])
+
+# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
+AC_SUBST([LIBPANGOMM_SO_VERSION], [1:30:0])
+
+AC_PROG_CXX
+MM_AX_CXX_COMPILE_STDCXX([17], [noext], [mandatory])
+
+AC_DISABLE_STATIC
+LT_INIT([win32-dll])
+
+AC_SUBST([PANGOMM_MODULES], ['giomm-2.68 >= 2.68.0 cairomm-1.16 >= 1.15.1 pangocairo >= 1.49.4'])
+AC_SUBST([MSVC_TOOLSET_VER], [''])
+PKG_CHECK_MODULES([PANGOMM], [$PANGOMM_MODULES])
+
+MM_PKG_CONFIG_SUBST([GTHREAD_CFLAGS], [--cflags-only-other gthread-2.0])
+MM_PKG_CONFIG_SUBST([GMMPROC_DIR], [--variable=gmmprocdir glibmm-2.68])
+
+MM_ARG_DISABLE_DEPRECATED_API
+MM_ARG_ENABLE_DOCUMENTATION
+MM_ARG_WITH_TAGFILE_DOC([libstdc++.tag], [mm-common-libstdc++])
+MM_ARG_WITH_TAGFILE_DOC([libsigc++-3.0.tag], [sigc++-3.0])
+MM_ARG_WITH_TAGFILE_DOC([glibmm-2.68.tag], [glibmm-2.68])
+MM_ARG_WITH_TAGFILE_DOC([cairomm-1.16.tag], [cairomm-1.16])
+
+AC_LANG([C++])
+MM_ARG_ENABLE_WARNINGS([PANGOMM_WXXFLAGS],
+                       [-Wall],
+                       [-pedantic -Wall -Wextra -Wformat-security -Wsuggest-override -Wshadow -Wno-long-long],
+                       [G PANGO GLIBMM])
+
+AC_CONFIG_FILES([Makefile
+                 tools/Makefile
+                 pango/${PANGOMM_MODULE_NAME}.pc:pango/pangomm.pc.in
+                 pango/${PANGOMM_MODULE_NAME}-uninstalled.pc:pango/pangomm-uninstalled.pc.in
+                 pango/src/Makefile
+                 pango/pangomm/Makefile
+                 docs/Makefile
+                 docs/reference/Doxyfile
+                 MSVC_NMake/pangomm/pangomm.rc])
+
+# Copy the generated configuration headers into the MSVC project directories.
+AC_CONFIG_COMMANDS([MSVC_NMake/pangomm/pangommconfig.h],
+                   [cp -f pango/pangommconfig.h MSVC_NMake/pangomm/pangommconfig.h])
+AC_OUTPUT
diff --git a/docs/Makefile.am b/docs/Makefile.am
new file mode 100644 (file)
index 0000000..774ea72
--- /dev/null
@@ -0,0 +1,30 @@
+## Copyright (c) 2009  Openismus GmbH  <http://www.openismus.com/>
+##
+## This file is part of pangomm.
+##
+## pangomm 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.
+##
+## pangomm 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.  If not, see <http://www.gnu.org/licenses/>.
+
+include $(top_srcdir)/pango/src/filelist.am
+include $(top_srcdir)/pango/pangomm/filelist.gmake.am
+
+pangomm_files_h = $(files_built_h) $(filter-out wrap_init.h,$(files_extra_h))
+
+book_name = $(PANGOMM_MODULE_NAME)
+doc_input = $(addprefix $(top_srcdir)/pango/pangomm/,$(pangomm_files_h)) \
+            $(top_srcdir)/pango/pangomm.h
+
+docimagesdir = $(libdocdir)/images
+dist_docimages_DATA = images/gtkmm_logo.gif images/top.gif
+
+include $(top_srcdir)/build/doc-reference.am
diff --git a/docs/images/gtkmm_logo.gif b/docs/images/gtkmm_logo.gif
new file mode 100644 (file)
index 0000000..30b502c
Binary files /dev/null and b/docs/images/gtkmm_logo.gif differ
diff --git a/docs/images/top.gif b/docs/images/top.gif
new file mode 100644 (file)
index 0000000..85d395c
Binary files /dev/null and b/docs/images/top.gif differ
diff --git a/docs/reference/Doxyfile.in b/docs/reference/Doxyfile.in
new file mode 100644 (file)
index 0000000..2e64fc9
--- /dev/null
@@ -0,0 +1,338 @@
+# Doxyfile 1.8.11
+# @configure_input@
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+DOXYFILE_ENCODING      = UTF-8
+PROJECT_NAME           = @PACKAGE_NAME@
+PROJECT_NUMBER         = @PACKAGE_VERSION@
+PROJECT_BRIEF          =
+PROJECT_LOGO           =
+OUTPUT_DIRECTORY       = reference
+CREATE_SUBDIRS         = NO
+ALLOW_UNICODE_NAMES    = NO
+OUTPUT_LANGUAGE        = English
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       =
+ALWAYS_DETAILED_SEC    = NO
+INLINE_INHERITED_MEMB  = NO
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = "@abs_top_builddir@/pango/" \
+                         "@abs_top_srcdir@/pango/"
+STRIP_FROM_INC_PATH    = "@abs_top_builddir@/pango/" \
+                         "@abs_top_srcdir@/pango/"
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+QT_AUTOBRIEF           = NO
+MULTILINE_CPP_IS_BRIEF = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 8
+ALIASES                = "newin{2}=\xrefitem since_\1_\2 \"Since @PACKAGE_NAME@ \1.\2\" \"New API in @PACKAGE_NAME@ \1.\2\"" \
+                         "newin{3}=\xrefitem since_\1_\2_\3 \"Since @PACKAGE_NAME@ \1.\2.\3\" \"New API in @PACKAGE_NAME@ \1.\2.\3\""
+OPTIMIZE_OUTPUT_FOR_C  = NO
+OPTIMIZE_OUTPUT_JAVA   = NO
+OPTIMIZE_FOR_FORTRAN   = NO
+OPTIMIZE_OUTPUT_VHDL   = NO
+EXTENSION_MAPPING      =
+MARKDOWN_SUPPORT       = YES
+AUTOLINK_SUPPORT       = YES
+BUILTIN_STL_SUPPORT    = NO
+CPP_CLI_SUPPORT        = NO
+SIP_SUPPORT            = NO
+IDL_PROPERTY_SUPPORT   = YES
+DISTRIBUTE_GROUP_DOC   = NO
+GROUP_NESTED_COMPOUNDS = NO
+SUBGROUPING            = YES
+INLINE_GROUPED_CLASSES = NO
+INLINE_SIMPLE_STRUCTS  = NO
+TYPEDEF_HIDES_STRUCT   = NO
+LOOKUP_CACHE_SIZE      = 0
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = NO
+EXTRACT_PACKAGE        = NO
+EXTRACT_STATIC         = NO
+EXTRACT_LOCAL_CLASSES  = NO
+EXTRACT_LOCAL_METHODS  = NO
+EXTRACT_ANON_NSPACES   = NO
+HIDE_UNDOC_MEMBERS     = NO
+HIDE_UNDOC_CLASSES     = YES
+HIDE_FRIEND_COMPOUNDS  = YES
+HIDE_IN_BODY_DOCS      = YES
+INTERNAL_DOCS          = NO
+CASE_SENSE_NAMES       = YES
+HIDE_SCOPE_NAMES       = NO
+HIDE_COMPOUND_REFERENCE= NO
+SHOW_INCLUDE_FILES     = YES
+SHOW_GROUPED_MEMB_INC  = NO
+FORCE_LOCAL_INCLUDES   = NO
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_MEMBERS_CTORS_1ST = YES
+SORT_GROUP_NAMES       = YES
+SORT_BY_SCOPE_NAME     = YES
+STRICT_PROTO_MATCHING  = NO
+GENERATE_TODOLIST      = NO
+GENERATE_TESTLIST      = NO
+GENERATE_BUGLIST       = NO
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       =
+MAX_INITIALIZER_LINES  = 2
+SHOW_USED_FILES        = NO
+SHOW_FILES             = NO
+SHOW_NAMESPACES        = YES
+FILE_VERSION_FILTER    =
+LAYOUT_FILE            =
+CITE_BIB_FILES         =
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+QUIET                  = YES
+WARNINGS               = YES
+WARN_IF_UNDOCUMENTED   = YES
+WARN_IF_DOC_ERROR      = YES
+WARN_NO_PARAMDOC       = NO
+WARN_AS_ERROR          = NO
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = reference/doxygen.log
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  =
+INPUT_ENCODING         = UTF-8
+FILE_PATTERNS          =
+RECURSIVE              = NO
+EXCLUDE                =
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       =
+EXCLUDE_SYMBOLS        = _* \
+                         adaptor_trait \
+                         basic_filebuf \
+                         basic_streambuf \
+                         binary_function \
+                         char_traits \
+                         internal \
+                         pair \
+                         unary_function
+EXAMPLE_PATH           =
+EXAMPLE_PATTERNS       = *.cc \
+                         *.h
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             =
+INPUT_FILTER           =
+FILTER_PATTERNS        =
+FILTER_SOURCE_FILES    = NO
+FILTER_SOURCE_PATTERNS =
+USE_MDFILE_AS_MAINPAGE =
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = NO
+REFERENCES_RELATION    = NO
+REFERENCES_LINK_SOURCE = YES
+SOURCE_TOOLTIPS        = YES
+USE_HTAGS              = NO
+VERBATIM_HEADERS       = NO
+CLANG_ASSISTED_PARSING = NO
+CLANG_OPTIONS          =
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+IGNORE_PREFIX          =
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = html
+HTML_FILE_EXTENSION    = .html
+HTML_HEADER            =
+HTML_FOOTER            =
+HTML_STYLESHEET        =
+HTML_EXTRA_STYLESHEET  = "$(MMDOCTOOLDIR)/doxygen-extra.css"
+HTML_EXTRA_FILES       =
+HTML_COLORSTYLE_HUE    = 220
+HTML_COLORSTYLE_SAT    = 100
+HTML_COLORSTYLE_GAMMA  = 80
+HTML_TIMESTAMP         = YES
+HTML_DYNAMIC_SECTIONS  = NO
+HTML_INDEX_NUM_ENTRIES = 100
+GENERATE_DOCSET        = NO
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+DOCSET_PUBLISHER_NAME  = Publisher
+GENERATE_HTMLHELP      = NO
+CHM_FILE               =
+HHC_LOCATION           =
+GENERATE_CHI           = NO
+CHM_INDEX_ENCODING     =
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+GENERATE_QHP           = NO
+QCH_FILE               =
+QHP_NAMESPACE          =
+QHP_VIRTUAL_FOLDER     = doc
+QHP_CUST_FILTER_NAME   =
+QHP_CUST_FILTER_ATTRS  =
+QHP_SECT_FILTER_ATTRS  =
+QHG_LOCATION           =
+GENERATE_ECLIPSEHELP   = NO
+ECLIPSE_DOC_ID         = org.doxygen.Project
+DISABLE_INDEX          = NO
+GENERATE_TREEVIEW      = NO
+ENUM_VALUES_PER_LINE   = 1
+TREEVIEW_WIDTH         = 250
+EXT_LINKS_IN_WINDOW    = NO
+FORMULA_FONTSIZE       = 10
+FORMULA_TRANSPARENT    = YES
+USE_MATHJAX            = NO
+MATHJAX_FORMAT         = HTML-CSS
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+MATHJAX_EXTENSIONS     =
+MATHJAX_CODEFILE       =
+SEARCHENGINE           = NO
+SERVER_BASED_SEARCH    = NO
+EXTERNAL_SEARCH        = NO
+SEARCHENGINE_URL       =
+SEARCHDATA_FILE        = searchdata.xml
+EXTERNAL_SEARCH_ID     =
+EXTRA_SEARCH_MAPPINGS  =
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4
+EXTRA_PACKAGES         =
+LATEX_HEADER           =
+LATEX_FOOTER           =
+LATEX_EXTRA_STYLESHEET =
+LATEX_EXTRA_FILES      =
+PDF_HYPERLINKS         = YES
+USE_PDFLATEX           = YES
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+LATEX_SOURCE_CODE      = NO
+LATEX_BIB_STYLE        = plain
+LATEX_TIMESTAMP        = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    =
+RTF_EXTENSIONS_FILE    =
+RTF_SOURCE_CODE        = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_SUBDIR             =
+MAN_LINKS              = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_PROGRAMLISTING     = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+GENERATE_DOCBOOK       = NO
+DOCBOOK_OUTPUT         = docbook
+DOCBOOK_PROGRAMLISTING = NO
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX =
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = YES
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           = "@abs_top_builddir@/pango" \
+                         "@abs_top_srcdir@/pango"
+INCLUDE_FILE_PATTERNS  = *.h
+PREDEFINED             = __cplusplus \
+                         DOXYGEN_SHOULD_SKIP_THIS \
+                         "G_GNUC_CONST=" \
+                         "G_GNUC_NORETURN=" \
+                         "G_GNUC_NULL_TERMINATED=" \
+                         "G_GNUC_PURE=" \
+                         GLIBMM_HAVE_WIDE_STREAM \
+                         "PANGOMM_API="
+EXPAND_AS_DEFINED      = PANGOMM_MAJOR_VERSION \
+                         PANGOMM_MINOR_VERSION \
+                         PANGOMM_MICRO_VERSION
+SKIP_FUNCTION_MACROS   = YES
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+TAGFILES               = @DOXYGEN_TAGFILES@
+GENERATE_TAGFILE       = "reference/@PANGOMM_MODULE_NAME@.tag"
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = NO
+EXTERNAL_PAGES         = YES
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+DIA_PATH               =
+HIDE_UNDOC_RELATIONS   = NO
+HAVE_DOT               = YES
+DOT_NUM_THREADS        = 0
+DOT_FONTNAME           = Sans
+DOT_FONTSIZE           = 10
+DOT_FONTPATH           =
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = NO
+GROUP_GRAPHS           = NO
+UML_LOOK               = NO
+UML_LIMIT_NUM_FIELDS   = 10
+TEMPLATE_RELATIONS     = NO
+INCLUDE_GRAPH          = NO
+INCLUDED_BY_GRAPH      = NO
+CALL_GRAPH             = NO
+CALLER_GRAPH           = NO
+GRAPHICAL_HIERARCHY    = YES
+DIRECTORY_GRAPH        = NO
+DOT_IMAGE_FORMAT       = png
+INTERACTIVE_SVG        = NO
+DOT_PATH               =
+DOTFILE_DIRS           =
+MSCFILE_DIRS           =
+DIAFILE_DIRS           =
+PLANTUML_JAR_PATH      =
+PLANTUML_INCLUDE_PATH  =
+DOT_GRAPH_MAX_NODES    = 50
+MAX_DOT_GRAPH_DEPTH    = 0
+DOT_TRANSPARENT        = NO
+DOT_MULTI_TARGETS      = YES
+GENERATE_LEGEND        = YES
+DOT_CLEANUP            = YES
diff --git a/docs/reference/meson.build b/docs/reference/meson.build
new file mode 100644 (file)
index 0000000..d331a0d
--- /dev/null
@@ -0,0 +1,175 @@
+# docs/reference
+
+# Input: built_files_root, project_source_root, pangomm_pcname, python3,
+#        hg_ccg_basenames, extra_h_files, built_h_file_targets, install_datadir,
+#        doc_reference_py, can_add_dist_script
+# Output: install_docdir, install_devhelpdir, if build_documentation: tag_file
+
+tag_file_modules = [
+  'mm-common-libstdc++',
+  'sigc++-3.0',
+  'glibmm-2.68',
+  'cairomm-1.16',
+]
+doxygen_tagfiles = ''
+doxygen_tag_targets = []
+docinstall_flags = []
+foreach module : tag_file_modules
+  depmod = dependency(module, required: false)
+  if depmod.found()
+    doxytagfile = depmod.get_variable(pkgconfig: 'doxytagfile', internal: 'doxytagfile', default_value: '')
+    if doxytagfile != ''
+      if depmod.type_name() == 'internal'
+        # Subprojects must build their tag files before doxygen is called.
+        if module.startswith('mm-common')
+          doxygen_tag_targets += subproject('mm-common').get_variable('global_tag_file_target')
+        else
+          doxygen_tag_targets += subproject(module).get_variable('global_tag_file_target')
+        endif
+      endif
+      htmlrefpub = depmod.get_variable(pkgconfig: 'htmlrefpub', internal: 'htmlrefpub', default_value: '')
+      htmlrefdir = depmod.get_variable(pkgconfig: 'htmlrefdir', internal: 'htmlrefdir', default_value: '')
+      if htmlrefpub == ''
+        htmlrefpub = htmlrefdir
+      elif htmlrefdir == ''
+        htmlrefdir = htmlrefpub
+      endif
+      doxygen_tagfiles += ' "' + doxytagfile + '=' + htmlrefpub + '"'
+
+      # Doxygen <= 1.8.15
+      docinstall_flags += ['-l', doxytagfile.split('/')[-1] + '@' + htmlrefdir]
+      if htmlrefpub != htmlrefdir
+        # Doxygen >= 1.8.16
+        docinstall_flags += ['-l', 's@' + htmlrefpub + '@' + htmlrefdir]
+      endif
+    endif
+  endif
+endforeach
+
+book_name = pangomm_pcname
+book_title = meson.project_name() + ' Reference Manual'
+
+# Configuration data for Doxyfile.
+doc_conf_data = configuration_data()
+doc_conf_data.set('configure_input',
+  'docs/reference/Doxyfile. Generated from Doxyfile.in by meson.configure_file().')
+doc_conf_data.set('PACKAGE_NAME', meson.project_name())
+doc_conf_data.set('PACKAGE_VERSION', meson.project_version())
+doc_conf_data.set('abs_top_builddir', built_files_root)
+doc_conf_data.set('abs_top_srcdir', project_source_root)
+doc_conf_data.set('PANGOMM_MODULE_NAME', book_name)
+doc_conf_data.set('DOXYGEN_TAGFILES', doxygen_tagfiles)
+
+doxyfile = configure_file(
+  input: 'Doxyfile.in',
+  output: '@BASENAME@',
+  configuration: doc_conf_data,
+)
+
+# Installation directories relative to {prefix}.
+install_docdir = install_datadir / 'doc' / book_name
+install_reference_docdir = install_docdir / 'reference'
+install_image_docdir = install_docdir / 'images'
+install_devhelpdir = install_datadir / 'devhelp' / 'books' / book_name
+
+if not build_documentation
+  # Documentation shall not be built or installed.
+  # Return to the calling meson.build file.
+  subdir_done()
+endif
+
+# Built input .h files to Doxygen.
+built_h_files = []
+foreach file : hg_ccg_basenames
+  built_h_files += built_files_root / 'pango' / 'pangomm' / file + '.h'
+endforeach
+
+# Hand-coded input .h files to Doxygen.
+src_h_files = []
+foreach file : extra_h_files
+  if file != 'wrap_init.h'
+    src_h_files += project_source_root / 'pango' / 'pangomm' / file
+  endif
+endforeach
+src_h_files += project_source_root / 'pango' / 'pangomm.h'
+
+doctool_dir = project_source_root / 'untracked' / 'docs' # MMDOCTOOLDIR
+doctool_dist_dir = 'untracked' / 'docs' # Relative to MESON_DIST_ROOT
+
+doc_h_files = src_h_files
+if built_h_file_targets.length() > 0
+  # .h files have been generated from .hg files (maintainer mode).
+  # Use built_h_file_targets instead of built_h_files here, or else Meson won't
+  # know that Doxygen must not be executed until the .h files have been built.
+  doc_h_files += built_h_file_targets
+else
+  # All .h files are stored in the source tree (not maintainer mode).
+  doc_h_files += built_h_files
+endif
+
+# Can't use @INPUT@ in the command. It requires absolute file paths.
+# Paths in built_h_file_targets are relative to project_build_root.
+tag_file = custom_target('html_and_tag',
+  input: doc_h_files,
+  output: book_name + '.tag',
+  command: [
+    python3, doc_reference_py, 'doxygen',
+    doctool_dir,
+    '@OUTPUT@',
+    src_h_files,
+    built_h_files,
+  ],
+  depend_files: doxyfile,
+  depends: doxygen_tag_targets,
+  build_by_default: build_documentation,
+  install: true,
+  install_dir: install_reference_docdir,
+)
+
+devhelp_file = custom_target('devhelp',
+  input: tag_file,
+  output: book_name + '.devhelp2',
+  command: [
+    python3, doc_reference_py, 'devhelp',
+    doctool_dir,
+    '@INPUT@',
+    '@OUTPUT@',
+    book_name,
+    book_title,
+  ],
+  build_by_default: build_documentation,
+)
+
+# Install Devhelp file and html files.
+meson.add_install_script(
+  python3, doc_reference_py, 'install_doc',
+  doctool_dir,
+  devhelp_file.full_path(),
+  install_devhelpdir,
+  install_reference_docdir / 'html',
+  docinstall_flags
+)
+
+# Install images.
+image_basefiles = [
+  'gtkmm_logo.gif',
+  'top.gif',
+]
+image_files = []
+foreach file : image_basefiles
+  image_files += '..' / 'images' / file
+endforeach
+
+install_data(image_files, install_dir: install_image_docdir)
+
+if can_add_dist_script
+  # Distribute built files and files copied by mm-common-get.
+  meson.add_dist_script(
+    python3, doc_reference_py, 'dist_doc',
+    doctool_dir,
+    doctool_dist_dir,
+    meson.current_build_dir(),
+    tag_file.full_path(),
+    devhelp_file.full_path(),
+  )
+endif
diff --git a/meson.build b/meson.build
new file mode 100644 (file)
index 0000000..16c039c
--- /dev/null
@@ -0,0 +1,341 @@
+# This file is part of pangomm.
+
+project('pangomm', 'cpp',
+  version: '2.50.1',
+  license: 'LGPLv2.1+',
+  default_options: [
+    'cpp_std=c++17',
+    'warning_level=1',
+  ],
+  meson_version: '>= 0.55.0', # required for meson.add_dist_script(python3, ...)
+                              # and meson.add_install_script(python3, ...)
+)
+
+pangomm_api_version = '2.48'
+pangomm_pcname = meson.project_name() + '-' + pangomm_api_version
+
+pangomm_version_array = meson.project_version().split('.')
+pangomm_major_version = pangomm_version_array[0].to_int()
+pangomm_minor_version = pangomm_version_array[1].to_int()
+pangomm_micro_version = pangomm_version_array[2].to_int()
+
+# http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
+# The relation between libtool's current:revison:age interface versioning
+# and the .so filename, .so.x.y.z, is
+# x = current - age
+# y = age
+# z = revision
+# If libtool_soversion is updated as described in libtool's documentation,
+# x.y.z will usually *not* be equal to meson.project_version().
+libtool_soversion = [1, 30, 0]
+pangomm_libversion = '@0@.@1@.@2@'.format(
+  libtool_soversion[0] - libtool_soversion[2],
+  libtool_soversion[2],
+  libtool_soversion[1]
+)
+macos_darwin_versions = [
+  libtool_soversion[0] + 1,
+  '@0@.@1@'.format(libtool_soversion[0] + 1, libtool_soversion[1])
+]
+
+# Use these instead of meson.source_root() and meson.build_root() in subdirectories.
+# source_root() and build_root() are not useful, if this is a subproject.
+project_source_root = meson.current_source_dir()
+project_build_root = meson.current_build_dir()
+
+cpp_compiler = meson.get_compiler('cpp')
+is_msvc = cpp_compiler.get_id() == 'msvc'
+python3 = import('python').find_installation()
+
+python_version = python3.language_version()
+python_version_req = '>= 3.5'
+if not python_version.version_compare(python_version_req)
+  error('Requires Python @0@, found @1@.'.format(python_version_req, python_version))
+endif
+
+# Do we build from a git repository?
+# Suppose we do if and only if a '.git' directory or file exists.
+cmd_py = '''
+import os
+import sys
+sys.exit(os.path.isdir("@0@") or os.path.isfile("@0@"))
+'''.format(project_source_root / '.git')
+is_git_build = run_command(python3, '-c', cmd_py, check: false).returncode() != 0
+
+# Are we testing a dist tarball while it's being built?
+# There ought to be a better way. https://github.com/mesonbuild/meson/issues/6866
+is_dist_check = project_source_root.contains('dist-unpack') and \
+                project_build_root.contains('dist-build')
+
+# Options.
+maintainer_mode_opt = get_option('maintainer-mode')
+maintainer_mode = maintainer_mode_opt == 'true' or \
+                 (maintainer_mode_opt == 'if-git-build' and is_git_build)
+if is_dist_check
+  message('Looks like a tarball is being tested. ' + \
+  'Option "dist-warnings" is used instead of "warnings".')
+  cpp_warnings = get_option('dist-warnings')
+else
+  cpp_warnings = get_option('warnings')
+endif
+warning_level = get_option('warning_level').to_int()
+werror = get_option('werror')
+build_deprecated_api = get_option('build-deprecated-api')
+build_documentation_opt = get_option('build-documentation')
+build_documentation = build_documentation_opt == 'true' or \
+                     (build_documentation_opt == 'if-maintainer-mode' and maintainer_mode)
+
+# Installation directories are relative to {prefix}.
+install_prefix = get_option('prefix')
+install_includedir = get_option('includedir')
+install_libdir = get_option('libdir')
+install_datadir = get_option('datadir')
+install_pkgconfigdir = install_libdir / 'pkgconfig'
+
+# Dependencies.
+# pangomm_build_dep: Dependencies when building the pangomm library.
+# pangomm_dep (created in pango/pangomm/meson.build):
+#   Dependencies when using the pangomm library.
+
+# cairomm and glibmm recently gained Meson build support, so we look
+# for their pkg-config files on Visual Studio, too
+cairomm_req = '>= 1.15.1'
+glibmm_req = '>= 2.68.0'
+
+# Pango supported pkg-config files on MSVC files for a good while,
+# so just use that
+pangocairo_req = '>= 1.49.4'
+pangocairo_dep = dependency('pangocairo', version: pangocairo_req)
+
+glibmm_req_minor_ver = '68'
+cairomm_req_minor_ver = '16'
+
+cairomm_dep = dependency('cairomm-1.@0@'.format(cairomm_req_minor_ver), version: cairomm_req)
+glibmm_dep = dependency('glibmm-2.@0@'.format(glibmm_req_minor_ver), version: glibmm_req)
+giomm_dep = dependency('giomm-2.@0@'.format(glibmm_req_minor_ver), version: glibmm_req)
+
+pangomm_build_dep = [giomm_dep, cairomm_dep, pangocairo_dep]
+pangomm_requires = ' '.join([
+  'giomm-2.@0@'.format(glibmm_req_minor_ver), glibmm_req,
+  'cairomm-1.@0@'.format(cairomm_req_minor_ver), cairomm_req,
+  'pangocairo', pangocairo_req,
+])
+
+# Some dependencies are required only in maintainer mode and/or if
+# reference documentation shall be built.
+mm_common_get = find_program('mm-common-get', required: false)
+if maintainer_mode and not mm_common_get.found()
+  message('Maintainer mode requires the \'mm-common-get\' command. If it is not found,\n' +
+          'install the \'mm-common\' package, version 1.0.0 or higher.')
+  # If meson --wrap-mode != forcefallback, Meson falls back to the mm-common
+  # subproject only if mm-common-get is required.
+  mm_common_get = find_program('mm-common-get', required: true)
+endif
+m4 = find_program('m4', required: maintainer_mode) # Used by gmmproc (in glibmm)
+doxygen = find_program('doxygen', required: build_documentation)
+dot = find_program('dot', required: build_documentation) # Used by Doxygen
+xsltproc = find_program('xsltproc', required: build_documentation)
+
+# Where to find gmmproc and generate_wrap_init.pl.
+gmmproc_dir = glibmm_dep.get_variable(pkgconfig: 'gmmprocdir', internal: 'gmmprocdir')
+
+# Script files copied to 'untracked' by mm-common-get.
+script_dir = project_source_root / 'untracked' / 'build_scripts'
+generate_binding_py = script_dir / 'generate-binding.py'
+doc_reference_py = script_dir / 'doc-reference.py'
+dist_changelog_py = script_dir / 'dist-changelog.py'
+dist_build_scripts_py = script_dir / 'dist-build-scripts.py'
+
+if maintainer_mode
+  # Copy files to untracked/build_scripts and untracked/docs.
+  run_command(mm_common_get, '--force', script_dir,
+    project_source_root / 'untracked' / 'docs',
+    check: true,
+  )
+else
+  cmd_py = '''
+import os
+import sys
+sys.exit(os.path.isfile("@0@"))
+'''.format(generate_binding_py)
+  file_exists = run_command(python3, '-c', cmd_py, check: false).returncode() != 0
+  if not file_exists
+    error('Missing files in untracked/. You must enable maintainer-mode.')
+  endif
+endif
+
+# Check if perl is required and available.
+doc_perl_prop = run_command(
+  python3, doc_reference_py, 'get_script_property',
+  '', # MMDOCTOOLDIR is not used
+  'requires_perl',
+  check: false,
+)
+doc_requires_perl = true
+if doc_perl_prop.returncode() == 0 and doc_perl_prop.stdout() == 'false'
+  doc_requires_perl = false
+endif
+
+perl = find_program('perl', required: maintainer_mode or \
+  (build_documentation and doc_requires_perl))
+
+# pangomm's own script files.
+pangomm_script_dir = project_source_root / 'tools'
+dummy_header_py = pangomm_script_dir / 'dummy-header.py'
+
+# Whether to include toolset version in .lib and DLL file names
+# on Visual Studio 2017 and later (default: yes)
+use_msvc14x_toolset_ver = get_option('msvc14x-parallel-installable')
+
+# Add toolset version in builds done with Visual Studio 2017 or later
+msvc14x_toolset_ver = ''
+
+if is_msvc
+  # Put in the toolset version if the build is done with Visual Studio
+  # 2017 or later, unless explicitly told not to
+  if use_msvc14x_toolset_ver
+    if cpp_compiler.version().version_compare('>=19.30')
+      msvc14x_toolset_ver = '-vc143'
+    elif cpp_compiler.version().version_compare('>=19.20')
+      msvc14x_toolset_ver = '-vc142'
+    elif cpp_compiler.version().version_compare('>=19.10')
+      msvc14x_toolset_ver = '-vc141'
+    endif
+  endif
+endif
+
+# Set compiler warnings.
+# Meson warns if any of the /W1, /W2, /W3, /W4, /Wall, -Wall, -Wextra, -Werror
+# compiler options are added with add_project_arguments().
+# Avoid such warnings, when possible.
+# See _warn_about_builtin_args() in meson/mesonbuild/interpreter/interpreter.py.
+warning_flags = []
+if cpp_warnings == 'min'
+  if warning_level == 0
+    warning_flags = is_msvc ? ['/W2'] : ['-Wall']
+  endif
+elif cpp_warnings == 'max' or cpp_warnings == 'fatal'
+  if warning_level < 3
+    warning_flags = is_msvc ? ['/W4'] : ['-pedantic', '-Wall', '-Wextra']
+  endif
+  if not is_msvc
+    warning_flags += '-Wformat-security -Wsuggest-override -Wshadow -Wno-long-long'.split()
+  endif
+  if cpp_warnings == 'fatal'
+    if not werror
+      warning_flags += is_msvc ? ['/WX'] : ['-Werror']
+    endif
+    deprecations = 'G PANGO GLIBMM SIGCXX'.split()
+    foreach d : deprecations
+      warning_flags += '-D@0@_DISABLE_DEPRECATED'.format(d)
+    endforeach
+  endif
+endif
+
+warning_flags = cpp_compiler.get_supported_arguments(warning_flags)
+add_project_arguments(warning_flags, language: 'cpp')
+
+# MSVC: Ignore warnings that aren't really harmful, but make those
+#       that should not be overlooked stand out.
+if is_msvc
+  disable_warnings_list = [
+    '/FImsvc_recommended_pragmas.h', # Turn off harmless warnings but make potentially
+                                     # dangerous ones glaring, distributed with GLib
+    '/EHsc',  # avoid warnings caused by exception handling model used
+    '/utf-8', # Avoid C4819 unicode conversion warnings when building on CJK locales
+  ]
+  if host_machine.cpu_family() == 'x86_64' or host_machine.cpu_family() == 'aarch64'
+    # 'var' : conversion from 'size_t' to 'type', possible loss of data (applies on 64-bit builds)
+    disable_warnings_list += '/wd4267'
+  endif
+  add_project_arguments(
+    cpp_compiler.get_supported_arguments(disable_warnings_list),
+    language: 'cpp'
+  )
+endif
+
+# add_dist_script() is not allowed in a subproject if meson.version() < 0.58.0.
+can_add_dist_script = not meson.is_subproject() or meson.version().version_compare('>= 0.58.0')
+
+subdir('tools/extra_defs_gen')
+subdir('pango')
+subdir('MSVC_NMake/pangomm')
+subdir('pango/pangomm')
+subdir('docs/reference')
+
+if can_add_dist_script
+  # Add a ChangeLog file to the distribution directory.
+  meson.add_dist_script(
+    python3, dist_changelog_py,
+    project_source_root,
+  )
+  # Add build scripts to the distribution directory, and delete .gitignore
+  # files and an empty $MESON_PROJECT_DIST_ROOT/build/ directory.
+  meson.add_dist_script(
+    python3, dist_build_scripts_py,
+    project_source_root,
+    'untracked' / 'build_scripts',
+  )
+endif
+
+if meson.is_subproject()
+  pkgconfig_vars = {
+    'gmmprocm4dir': project_source_root / 'tools' / 'm4',
+    'htmlrefdir': install_prefix / install_docdir / 'reference' / 'html',
+    'htmlrefpub': 'http://library.gnome.org/devel/' + pkg_conf_data.get_unquoted('PACKAGE_TARNAME') + '/unstable/'
+  }
+  if build_documentation
+    pkgconfig_vars += {'doxytagfile': tag_file.full_path()}
+    # May be used in a main project.
+    global_tag_file_target = tag_file
+  endif
+  pangomm_dep = declare_dependency(
+    dependencies: pangomm_own_dep,
+    variables: pkgconfig_vars,
+  )
+
+  # A main project that looks for pangomm_pcname.pc shall find pangomm_dep.
+  meson.override_dependency(pangomm_pcname, pangomm_dep)
+endif
+
+# Print a summary.
+real_maintainer_mode = ''
+if maintainer_mode_opt == 'if-git-build'
+  real_maintainer_mode = ' (@0@)'.format(maintainer_mode)
+endif
+
+real_build_documentation = ''
+if build_documentation_opt == 'if-maintainer-mode'
+  real_build_documentation = ' (@0@)'.format(build_documentation)
+endif
+
+summary = [
+  '',
+  '------',
+  meson.project_name() + ' ' + meson.project_version(),
+  '',
+  '         Maintainer mode: @0@@1@'.format(maintainer_mode_opt, real_maintainer_mode),
+  '       Compiler warnings: @0@ (warning_level: @1@, werror: @2@)'. \
+                             format(cpp_warnings, warning_level, werror),
+  '    Build deprecated API: @0@'.format(build_deprecated_api),
+  'Build HTML documentation: @0@@1@'.format(build_documentation_opt, real_build_documentation),
+  'Directories:',
+  '                  prefix: @0@'.format(install_prefix),
+  '              includedir: @0@'.format(install_prefix / install_includedir),
+  '       includepangommdir: @0@'.format(install_prefix / install_includedir / pangomm_pcname),
+  '                  libdir: @0@'.format(install_prefix / install_libdir),
+  '        includeconfigdir: @0@'.format(install_prefix / install_includeconfigdir),
+  '                   m4dir: @0@'.format(install_prefix / install_m4dir),
+  '            pkgconfigdir: @0@'.format(install_prefix / install_pkgconfigdir),
+  '                 datadir: @0@'.format(install_prefix / install_datadir),
+  '                  docdir: @0@'.format(install_prefix / install_docdir),
+  '              devhelpdir: @0@'.format(install_prefix / install_devhelpdir),
+]
+if maintainer_mode
+  summary += [
+    '              gmmprocdir: @0@'.format(gmmproc_dir),
+  ]
+endif
+summary += ['------']
+
+message('\n'.join(summary))
diff --git a/meson_options.txt b/meson_options.txt
new file mode 100644 (file)
index 0000000..940a398
--- /dev/null
@@ -0,0 +1,12 @@
+option('maintainer-mode', type: 'combo', choices: ['false', 'if-git-build', 'true'],
+  value: 'if-git-build', description: 'Generate source code from .hg and .ccg files')
+option('warnings', type: 'combo', choices: ['no', 'min', 'max', 'fatal'], value: 'min',
+  description: 'Compiler warning level')
+option('dist-warnings', type: 'combo', choices: ['no', 'min', 'max', 'fatal'], value: 'fatal',
+  description: 'Compiler warning level when a tarball is created')
+option('build-deprecated-api', type: 'boolean', value: true,
+  description: 'Build deprecated API and include it in the library')
+option('build-documentation', type: 'combo', choices: ['false', 'if-maintainer-mode', 'true'],
+  value: 'if-maintainer-mode', description: 'Build and install the documentation')
+option('msvc14x-parallel-installable', type: 'boolean', value: true,
+  description: 'Use separate DLL and LIB filenames for Visual Studio 2017 and 2019')
diff --git a/pango/meson.build b/pango/meson.build
new file mode 100644 (file)
index 0000000..f2df13e
--- /dev/null
@@ -0,0 +1,51 @@
+# pango
+
+# Input: install_prefix, install_datadir, install_includedir,
+#        pangomm_pcname, pangomm_api_version, pangomm_requires,
+#        install_pkgconfigdir, install_libdir, build_deprecated_api,
+#        pangomm_major_version, pangomm_minor_version, pangomm_micro_version,
+#        msvc14x_toolset_ver
+# Output: pkg_conf_data, install_includeconfigdir, pangommconfig_h
+
+pkg_conf_data = configuration_data()
+pkg_conf_data.set('prefix', install_prefix)
+pkg_conf_data.set('exec_prefix', '${prefix}')
+pkg_conf_data.set('libdir', '${exec_prefix}' / install_libdir)
+pkg_conf_data.set('datarootdir', '${prefix}' / install_datadir)
+pkg_conf_data.set('datadir', '${datarootdir}')
+pkg_conf_data.set('includedir', '${prefix}' / install_includedir)
+pkg_conf_data.set('srcdir', meson.current_source_dir())
+pkg_conf_data.set('PACKAGE_TARNAME', meson.project_name())
+pkg_conf_data.set('PACKAGE_VERSION', meson.project_version())
+pkg_conf_data.set('PANGOMM_MODULE_NAME', pangomm_pcname)
+pkg_conf_data.set('PANGOMM_API_VERSION', pangomm_api_version)
+pkg_conf_data.set('PANGOMM_MODULES', pangomm_requires)
+pkg_conf_data.set('MSVC_TOOLSET_VER', msvc14x_toolset_ver)
+
+if not build_deprecated_api
+  pkg_conf_data.set('PANGOMM_DISABLE_DEPRECATED', true)
+endif
+pkg_conf_data.set('PANGOMM_MAJOR_VERSION', pangomm_major_version)
+pkg_conf_data.set('PANGOMM_MINOR_VERSION', pangomm_minor_version)
+pkg_conf_data.set('PANGOMM_MICRO_VERSION', pangomm_micro_version)
+
+configure_file(
+  input: 'pangomm.pc.in',
+  output: pangomm_pcname + '.pc',
+  configuration: pkg_conf_data,
+  install_dir: install_pkgconfigdir,
+)
+
+configure_file(
+  input: 'pangomm-uninstalled.pc.in',
+  output: pangomm_pcname + '-uninstalled.pc',
+  configuration: pkg_conf_data,
+)
+
+install_includeconfigdir = install_libdir / pangomm_pcname / 'include'
+pangommconfig_h = configure_file(
+  input: 'pangommconfig.h.meson',
+  output: 'pangommconfig.h',
+  configuration: pkg_conf_data,
+  install_dir: install_includeconfigdir,
+)
diff --git a/pango/pangomm-uninstalled.pc.in b/pango/pangomm-uninstalled.pc.in
new file mode 100644 (file)
index 0000000..4eaea77
--- /dev/null
@@ -0,0 +1,10 @@
+doxytagfile=${pc_top_builddir}/docs/reference/@PANGOMM_MODULE_NAME@.tag
+htmlrefpub=http://library.gnome.org/devel/@PACKAGE_TARNAME@/unstable/
+
+Name: pangomm
+Description: C++ binding for Pango, not installed
+Version: @PACKAGE_VERSION@
+URL: http://www.gtkmm.org/
+Requires: @PANGOMM_MODULES@
+Libs: ${pc_top_builddir}/${pcfiledir}/pangomm/libpangomm@MSVC_TOOLSET_VER@-@PANGOMM_API_VERSION@.la
+Cflags: -I${pc_top_builddir}/${pcfiledir} -I${pc_top_builddir}/${pcfiledir}/@srcdir@
diff --git a/pango/pangomm.h b/pango/pangomm.h
new file mode 100644 (file)
index 0000000..ca5afc1
--- /dev/null
@@ -0,0 +1,85 @@
+/* pangomm - a C++ wrapper for the GLib toolkit
+ *
+ * Copyright 2002 Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _PANGOMM_H
+#define _PANGOMM_H
+
+/** @mainpage pangomm Reference Manual
+ *
+ * @section description Description
+ *
+ * pangomm is the official C++ interface for the <a href="http://www.pango.org/">Pango</a> font layout library.
+ * See, for instance, the Pango::Layout class.
+ *
+ * @section basics Basic usage
+ *
+ * Include the pangomm header:
+ * @code
+ * #include <pangomm.h>
+ * @endcode
+ * This includes every header installed by pangomm, so can slow down
+ * compilation, but suffices for this simple example. Assuming that your
+ * program source file is @c program.cc, compile it with:
+ * @code
+ * g++ program.cc -o program  `pkg-config --cflags --libs pangomm-2.48`
+ * @endcode
+ * If your version of g++ is not C++17-compliant by default,
+ * add the @c -std=c++17 option.
+ *
+ * If you use <a href="https://mesonbuild.com/">Meson</a>, include the following
+ * in @c meson.build:
+ * @code
+ * pangomm_dep = dependency('pangomm-2.48')
+ * program_name = 'program'
+ * cpp_sources = [ 'program.cc' ]
+ * executable(program_name,
+ *   cpp_sources,
+ *   dependencies: [ pangomm_dep ]
+ * )
+ * @endcode
+ *
+ * Alternatively, if using autoconf, use the following in @c configure.ac:
+ * @code
+ * PKG_CHECK_MODULES([PANGOMM], [pangomm-2.48])
+ * @endcode
+ * Then use the generated @c PANGOMM_CFLAGS and @c PANGOMM_LIBS variables in
+ * the project @c Makefile.am files. For example:
+ * @code
+ * program_CPPFLAGS = $(PANGOMM_CFLAGS)
+ * program_LDADD = $(PANGOMM_LIBS)
+ * @endcode
+ */
+
+
+#include <pangomm/attrlist.h>
+#include <pangomm/context.h>
+#include <pangomm/coverage.h>
+#include <pangomm/fontdescription.h>
+#include <pangomm/fontface.h>
+#include <pangomm/fontfamily.h>
+#include <pangomm/font.h>
+#include <pangomm/fontmap.h>
+#include <pangomm/fontmetrics.h>
+#include <pangomm/fontset.h>
+#include <pangomm/layout.h>
+#include <pangomm/layoutiter.h>
+#include <pangomm/layoutline.h>
+#include <pangomm/tabarray.h>
+
+#endif /* _PANGOMM_H */
diff --git a/pango/pangomm.pc.in b/pango/pangomm.pc.in
new file mode 100644 (file)
index 0000000..979450e
--- /dev/null
@@ -0,0 +1,21 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+datarootdir=@datarootdir@
+datadir=@datadir@
+includedir=@includedir@
+
+gmmprocm4dir=${libdir}/@PANGOMM_MODULE_NAME@/proc/m4
+
+docdir=${datarootdir}/doc/@PANGOMM_MODULE_NAME@
+doxytagfile=${docdir}/reference/@PANGOMM_MODULE_NAME@.tag
+htmlrefdir=${docdir}/reference/html
+htmlrefpub=http://library.gnome.org/devel/@PACKAGE_TARNAME@/unstable/
+
+Name: pangomm
+Description: C++ binding for Pango
+Version: @PACKAGE_VERSION@
+URL: http://www.gtkmm.org/
+Requires: @PANGOMM_MODULES@
+Libs: -L${libdir} -lpangomm@MSVC_TOOLSET_VER@-@PANGOMM_API_VERSION@
+Cflags: -I${includedir}/@PANGOMM_MODULE_NAME@  -I${libdir}/@PANGOMM_MODULE_NAME@/include
diff --git a/pango/pangomm/Makefile.am b/pango/pangomm/Makefile.am
new file mode 100644 (file)
index 0000000..f1ac2b7
--- /dev/null
@@ -0,0 +1,32 @@
+## Copyright (c) 2009  Openismus GmbH  <http://www.openismus.com/>
+##
+## This file is part of pangomm.
+##
+## pangomm 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.
+##
+## pangomm 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.  If not, see <http://www.gnu.org/licenses/>.
+
+lib_LTLIBRARIES = libpangomm-@PANGOMM_API_VERSION@.la
+
+include $(srcdir)/../src/filelist.am
+include $(srcdir)/filelist.gmake.am
+
+include $(top_srcdir)/build/compile-binding.am
+
+local_cppflags = $(binding_includes) $(binding_cppflags) -DPANGOMM_BUILD=1
+
+AM_CPPFLAGS = $(local_cppflags) $(GTHREAD_CFLAGS) $(PANGOMM_CFLAGS)
+AM_CXXFLAGS = $(PANGOMM_WXXFLAGS)
+
+libpangomm_@PANGOMM_API_VERSION@_la_SOURCES = $(binding_sources)
+libpangomm_@PANGOMM_API_VERSION@_la_LDFLAGS = -no-undefined -version-info $(LIBPANGOMM_SO_VERSION)
+libpangomm_@PANGOMM_API_VERSION@_la_LIBADD  = $(PANGOMM_LIBS)
diff --git a/pango/pangomm/cairofontmapimpl.cc b/pango/pangomm/cairofontmapimpl.cc
new file mode 100644 (file)
index 0000000..a76441b
--- /dev/null
@@ -0,0 +1,41 @@
+/* Copyright (C) 2021 The gtkmm Development Team
+ *
+ * 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.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <pangomm/cairofontmapimpl.h>
+#include <utility> // std::move()
+
+namespace Pango
+{
+CairoFontMapImpl::CairoFontMapImpl(PangoFontMap* castitem)
+: Glib::ObjectBase(nullptr), FontMap(castitem)
+{}
+
+CairoFontMapImpl::CairoFontMapImpl(CairoFontMapImpl&& src) noexcept
+: CairoFontMap(std::move(src)),
+  FontMap(std::move(src))
+{}
+
+CairoFontMapImpl& CairoFontMapImpl::operator=(CairoFontMapImpl&& src) noexcept
+{
+  CairoFontMap::operator=(std::move(src));
+  FontMap::operator=(std::move(src));
+  return *this;
+}
+
+CairoFontMapImpl::~CairoFontMapImpl() noexcept
+{}
+
+} // namespace Pango
diff --git a/pango/pangomm/cairofontmapimpl.h b/pango/pangomm/cairofontmapimpl.h
new file mode 100644 (file)
index 0000000..9b06122
--- /dev/null
@@ -0,0 +1,63 @@
+#ifndef _PANGO_CAIROFONTMAPIMPL_H
+#define _PANGO_CAIROFONTMAPIMPL_H
+
+/* Copyright (C) 2021 The gtkmm Development Team
+ *
+ * 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.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <pangommconfig.h>
+#include <pangomm/cairofontmap.h>
+#include <pangomm/fontmap.h>
+
+namespace Pango
+{
+
+/** %Gdk::CairoFontMapImpl is a Pango::FontMap that implements the Pango::CairoFontMap interface.
+ *
+ * The PangoCairoFontMap interface can be implemented by C classes that
+ * derive from PangoFontMap. No public %Pango class implements PangoCairoFontMap.
+ * Some %Pango functions, such as pango_cairo_font_map_get_default(), return an object
+ * of a class which is derived from PangoFontMap and implements PangoCairoFontMap.
+ * Since that C class is not public, it's not wrapped in a C++ class.
+ * A C object of such a class can be wrapped in a %Pango::CairoFontMapImpl object.
+ * %Pango::CairoFontMapImpl does not directly correspond to any %Pango class.
+ *
+ * This class is intended only for wrapping C objects returned from %Pango functions.
+ *
+ * @see Pango::CairoFontMap::get_default()
+ * @newin{2,50}
+ */
+class PANGOMM_API CairoFontMapImpl : public CairoFontMap, public FontMap
+{
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+protected:
+  explicit CairoFontMapImpl(PangoFontMap* castitem);
+  friend class FontMap_Class;
+
+  // noncopyable
+  CairoFontMapImpl(const CairoFontMapImpl&) = delete;
+  CairoFontMapImpl& operator=(const CairoFontMapImpl&) = delete;
+#endif /* DOXYGEN_SHOULD_SKIP_THIS */
+
+public:
+  CairoFontMapImpl(CairoFontMapImpl&& src) noexcept;
+  CairoFontMapImpl& operator=(CairoFontMapImpl&& src) noexcept;
+
+  ~CairoFontMapImpl() noexcept override;
+};
+
+} // namespace Pango
+
+#endif /* _PANGO_CAIROFONTMAPIMPL_H */
diff --git a/pango/pangomm/filelist.am b/pango/pangomm/filelist.am
new file mode 100644 (file)
index 0000000..2138b30
--- /dev/null
@@ -0,0 +1,13 @@
+## This file is part of pangomm.
+
+files_built_cc = $(files_hg:.hg=.cc) wrap_init.cc
+files_built_h  = $(files_hg:.hg=.h)
+files_extra_cc = \
+  cairofontmapimpl.cc \
+  init.cc
+files_extra_h = \
+  cairofontmapimpl.h \
+  init.h \
+  types.h \
+  wrap_init.h
+files_extra_ph =
diff --git a/pango/pangomm/filelist.gmake.am b/pango/pangomm/filelist.gmake.am
new file mode 100644 (file)
index 0000000..527f580
--- /dev/null
@@ -0,0 +1,6 @@
+## This file is part of pangomm.
+
+include $(top_srcdir)/pango/pangomm/filelist.am
+
+# Split out from $(top_srcdir)/pango/pangomm/filelist.am
+files_built_ph = $(patsubst %.hg,private/%_p.h,$(files_hg))
diff --git a/pango/pangomm/init.cc b/pango/pangomm/init.cc
new file mode 100644 (file)
index 0000000..3dc4f2b
--- /dev/null
@@ -0,0 +1,34 @@
+// -*- c++ -*-
+/* $Id: init.cc 89 2003-12-08 04:46:54Z murrayc $ */
+
+/* Copyright (C) 2003 The pangomm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm/init.h>
+#include <pangomm/wrap_init.h>
+
+namespace Pango
+{
+
+void init()
+{
+  Glib::init();
+  Pango::wrap_init();  
+}
+
+} // namespace Pango
+
diff --git a/pango/pangomm/init.h b/pango/pangomm/init.h
new file mode 100644 (file)
index 0000000..f4c8f3d
--- /dev/null
@@ -0,0 +1,43 @@
+// -*- c++ -*-
+#ifndef _PANGOMM_INIT_H
+#define _PANGOMM_INIT_H
+
+/* $Id: init.h 89 2003-12-08 04:46:54Z murrayc $ */
+
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangommconfig.h>
+
+namespace Pango
+{
+
+/** Initialize pangomm.
+ * You may call this more than once.
+ * You do not need to call this if you are using Gtk::Main,
+ * because it calls it for you.
+ */
+PANGOMM_API
+void init();
+
+} // namespace Pango
+
+
+
+#endif // _PANGOMM_INIT_H
+
+
diff --git a/pango/pangomm/meson.build b/pango/pangomm/meson.build
new file mode 100644 (file)
index 0000000..5e0d2bc
--- /dev/null
@@ -0,0 +1,246 @@
+# pango/pangomm
+
+# Input: pangomm_build_dep, pangomm_pcname, maintainer_mode, project_source_root,
+#        generate_binding_py, m4_files, pangomm_libversion, install_includedir,
+#        python3, pangomm_rc, dummy_header_py, gmmproc_dir, msvc14x_toolset_ver,
+#        can_add_dist_script
+# Output: hg_ccg_basenames, extra_h_files, built_h_file_targets, built_files_root,
+#         pangomm_own_dep
+
+defs_basefiles = [
+  'pango.defs',
+  'pango_methods.defs',
+  'pango_enums.defs',
+  'pango_vfuncs.defs',
+  'pango_extra_objects.defs',
+  'pango_docs.xml',
+  'pango_docs_override.xml',
+]
+
+defs_files = []
+foreach file : defs_basefiles
+  defs_files += '..' / 'src' / file
+endforeach
+
+hg_ccg_basenames = [
+  'attributes',
+  'attriter',
+  'attrlist',
+  'cairofontmap',
+  'color',
+  'context',
+  'coverage',
+  'font',
+  'fontdescription',
+  'fontface',
+  'fontfamily',
+  'fontmap',
+  'fontmetrics',
+  'fontset',
+  'glyph',
+  'glyphitem',
+  'glyphstring',
+  'item',
+  'language',
+  'layout',
+  'layoutiter',
+  'layoutline',
+  'rectangle',
+  'renderer',
+  'tabarray',
+]
+
+extra_cc_files = [
+  'cairofontmapimpl.cc',
+  'init.cc',
+]
+
+extra_h_files = [
+  'cairofontmapimpl.h',
+  'init.h',
+  'types.h',
+  'wrap_init.h',
+]
+
+install_headers('..' / 'pangomm.h', subdir: pangomm_pcname)
+install_headers(extra_h_files, subdir: pangomm_pcname / 'pangomm')
+
+untracked_pangomm = 'untracked' / 'pango' / 'pangomm'
+rel_untracked_pangomm = '..' / '..' / untracked_pangomm
+src_untracked_pangomm = project_source_root / untracked_pangomm
+
+pangomm_cpp_args = [ '-DPANGOMM_BUILD=1' ]
+
+extra_pangomm_objects = []
+
+# Build the .rc file for Windows builds and link to it
+if host_machine.system() == 'windows'
+  windows = import('windows')
+  pangomm_res = windows.compile_resources(pangomm_rc)
+  extra_pangomm_objects += pangomm_res
+endif
+
+pangomm_libname = meson.project_name() + msvc14x_toolset_ver + '-' + pangomm_api_version
+
+if maintainer_mode
+
+  # Maintainer mode. Generate .h and .cc files from .hg and .ccg files in ../src.
+
+  # docs/reference/meson.build needs these.
+  built_files_root = project_build_root
+  built_h_file_targets = []
+
+  # Force meson+ninja to generate source files before anything is compiled.
+  # Compilation must depend on these targets.
+  built_cc_file_targets = []
+
+  hg_files = []
+  foreach file : hg_ccg_basenames
+    hg_files += '..' / 'src' / file + '.hg'
+  endforeach
+
+  # Create wrap_init.cc in project_build_root/pango/pangomm.
+  built_cc_file_targets += custom_target('wrap_init.cc',
+    input: hg_files,
+    output: 'wrap_init.cc',
+    command: [
+      python3, generate_binding_py, 'generate_wrap_init',
+      gmmproc_dir,
+      '@OUTPUT@',
+      'Pango', # namespace
+      '@INPUT@',
+    ],
+    build_by_default: maintainer_mode,
+    install: false,
+  )
+
+  # Create .h/_p.h/.cc files from .hg/.ccg files in project_build_root/pango/pangomm.
+  foreach file : hg_ccg_basenames
+    hg_file = '..' / 'src' / file + '.hg'
+    ccg_file = '..' / 'src' / file + '.ccg'
+    built_file_target = custom_target(file + '.cc',
+      input: [hg_file, ccg_file],
+      output: [file + '.stamp', file + '.cc', file + '.h'],
+      command: [
+        python3, generate_binding_py, 'gmmproc',
+        gmmproc_dir,
+        '@OUTPUT0@',
+        file,
+        meson.current_source_dir() / '..' / 'src',
+        project_source_root / 'tools' / 'm4',
+      ],
+      depend_files: defs_files + m4_files,
+      build_by_default: maintainer_mode,
+      install: false,
+    )
+    built_cc_file_targets += built_file_target[1]
+    built_h_file_targets += built_file_target[2]
+  endforeach
+
+  # Create dummy_header.h, depending on all generated headers.
+  # It's created if it does not exist, but it's never updated.
+  # It guarantees that all generated headers are built before pangomm_library
+  # is built, at the same time avoiding unnecessary recompilations.
+  # If built_h_file_targets would be listed as sources to pangomm_library,
+  # all generated .cc files could be recompiled if one generated .h file has
+  # been changed.
+  built_dummy_h_file_target = custom_target('dummy_header.h',
+    input: built_h_file_targets,
+    output: 'dummy_header.h',
+    command: [
+      python3, dummy_header_py,
+      '@OUTPUT@',
+    ],
+    build_by_default: maintainer_mode,
+    install: false,
+  )
+
+  extra_include_dirs = ['..']
+
+  pangomm_library = library(pangomm_libname, extra_pangomm_objects,
+    built_cc_file_targets, extra_cc_files, built_dummy_h_file_target,
+    version: pangomm_libversion,
+    darwin_versions: macos_darwin_versions,
+    implicit_include_directories: false,
+    include_directories: extra_include_dirs,
+    cpp_args: pangomm_cpp_args,
+    dependencies: pangomm_build_dep,
+    install: true,
+  )
+
+  built_h_cc_dir = meson.current_build_dir()
+
+else # not maintainer_mode
+
+  # Not maintainer mode. Compile built source code files in
+  # project_source_root/untracked/pango/pangomm.
+
+  # docs/reference/meson.build needs these.
+  built_files_root = project_source_root / 'untracked'
+  built_h_file_targets = []
+
+  # Two cases:
+  # 1. The source code comes from a tarball, where the built files
+  #    are stored in project_source_root/untracked.
+  #    There are no built files in the build tree.
+  # 2. Files have been built in the build tree. Then maintainer_mode has
+  #    been changed from true to false. Files that are missing or not up to date
+  #    in project_source_root/untracked are copied from the build tree.
+
+  # Try to copy built source code files to the source tree.
+  run_command(
+    python3, generate_binding_py, 'copy_built_files',
+    meson.current_build_dir(),
+    src_untracked_pangomm,
+    hg_ccg_basenames,
+    check: true,
+  )
+
+  built_cc_files = [ rel_untracked_pangomm / 'wrap_init.cc' ]
+  foreach file : hg_ccg_basenames
+    built_cc_files += rel_untracked_pangomm / file + '.cc'
+  endforeach
+
+  extra_include_dirs = [ '..', '..' / '..' / 'untracked' / 'pango' ]
+
+  pangomm_library = library(pangomm_libname, extra_pangomm_objects,
+    built_cc_files, extra_cc_files,
+    version: pangomm_libversion,
+    darwin_versions: macos_darwin_versions,
+    implicit_include_directories: false,
+    include_directories: extra_include_dirs,
+    cpp_args: pangomm_cpp_args,
+    dependencies: pangomm_build_dep,
+    install: true
+  )
+
+  built_h_cc_dir = src_untracked_pangomm
+
+endif
+
+# Install built .h and _p.h files.
+meson.add_install_script(
+  python3, generate_binding_py, 'install_built_h_files',
+  built_h_cc_dir,
+  install_includedir / pangomm_pcname / 'pangomm', # subdir below {prefix}
+  hg_ccg_basenames
+)
+
+if can_add_dist_script
+  # Distribute built files.
+  meson.add_dist_script(
+    python3, generate_binding_py, 'dist_built_files',
+    built_h_cc_dir,
+    untracked_pangomm,
+    hg_ccg_basenames,
+  )
+endif
+
+# This is part of pangomm_dep, when pangomm is a subproject.
+# It can also be used if there are example programs and test programs to build.
+pangomm_own_dep = declare_dependency(
+  sources: built_h_file_targets,
+  link_with: pangomm_library,
+  include_directories: extra_include_dirs,
+  dependencies: pangomm_build_dep
+)
diff --git a/pango/pangomm/types.h b/pango/pangomm/types.h
new file mode 100644 (file)
index 0000000..72de3d9
--- /dev/null
@@ -0,0 +1,30 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef _PANGOMM_TYPES_H
+#define _PANGOMM_TYPES_H
+
+#include <pango/pango.h>
+
+namespace Pango
+{
+
+typedef PangoMatrix Matrix;
+
+} // namespace Pango
+
+#endif /* _PANGOMM_TYPES_H */
diff --git a/pango/pangomm/wrap_init.h b/pango/pangomm/wrap_init.h
new file mode 100644 (file)
index 0000000..5d91c83
--- /dev/null
@@ -0,0 +1,35 @@
+#ifndef _PANGOMM_WRAP_INIT_H
+#define _PANGOMM_WRAP_INIT_H
+
+/* wrap_init.h
+ *
+ * Copyright (C) 1998-2001 The Gtk-- Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+// wrap_init.cc is generated by tools/generate_wrap_init.pl
+
+#include <pangommconfig.h>
+
+namespace Pango
+{
+
+PANGOMM_API
+void wrap_init();
+
+} /* namespace Pango */
+
+#endif // _PANGOMM_WRAP_INIT_H
diff --git a/pango/pangommconfig.h.in b/pango/pangommconfig.h.in
new file mode 100644 (file)
index 0000000..710d38d
--- /dev/null
@@ -0,0 +1,37 @@
+/* This file is part of pangomm. */
+#ifndef PANGOMM_PANGOMMCONFIG_H_INCLUDED
+#define PANGOMM_PANGOMMCONFIG_H_INCLUDED
+
+#include <glibmmconfig.h>
+
+/* Define to omit deprecated API from the library. */
+#undef PANGOMM_DISABLE_DEPRECATED
+
+/* Major version number of pangomm. */
+#undef PANGOMM_MAJOR_VERSION
+
+/* Micro version number of pangomm. */
+#undef PANGOMM_MICRO_VERSION
+
+/* Minor version number of pangomm. */
+#undef PANGOMM_MINOR_VERSION
+
+/* Enable DLL-specific stuff only when not building a static library */
+#if !defined(__CYGWIN__) && (defined(__MINGW32__) || defined (_MSC_VER)) && !defined(PANGOMM_STATIC_LIB)
+# define PANGOMM_DLL 1
+#endif
+
+#ifdef PANGOMM_DLL
+# if defined(PANGOMM_BUILD)
+#  define PANGOMM_API __declspec(dllexport)
+# elif !defined (__GNUC__)
+#  define PANGOMM_API __declspec(dllimport)
+# else /* don't dllimport classes/methods on GCC/MinGW */
+#  define PANGOMM_API
+# endif /* PANGOMM_BUILD - _WINDLL */
+#else
+/* Build a static library or a non-native-Windows library */
+# define PANGOMM_API
+#endif /* PANGOMM_DLL */
+
+#endif /* !PANGOMM_PANGOMMCONFIG_H_INCLUDED */
diff --git a/pango/pangommconfig.h.meson b/pango/pangommconfig.h.meson
new file mode 100644 (file)
index 0000000..58fa4d8
--- /dev/null
@@ -0,0 +1,37 @@
+/* This file is part of pangomm. */
+#ifndef PANGOMM_PANGOMMCONFIG_H_INCLUDED
+#define PANGOMM_PANGOMMCONFIG_H_INCLUDED
+
+#include <glibmmconfig.h>
+
+/* Define to omit deprecated API from the library. */
+#mesondefine PANGOMM_DISABLE_DEPRECATED
+
+/* Major version number of pangomm. */
+#mesondefine PANGOMM_MAJOR_VERSION
+
+/* Minor version number of pangomm. */
+#mesondefine PANGOMM_MINOR_VERSION
+
+/* Micro version number of pangomm. */
+#mesondefine PANGOMM_MICRO_VERSION
+
+/* Enable DLL-specific stuff only when not building a static library */
+#if !defined(__CYGWIN__) && (defined(__MINGW32__) || defined (_MSC_VER)) && !defined(PANGOMM_STATIC_LIB)
+# define PANGOMM_DLL 1
+#endif
+
+#ifdef PANGOMM_DLL
+# if defined(PANGOMM_BUILD)
+#  define PANGOMM_API __declspec(dllexport)
+# elif !defined (__GNUC__)
+#  define PANGOMM_API __declspec(dllimport)
+# else /* don't dllimport classes/methods on GCC/MinGW */
+#  define PANGOMM_API
+# endif /* PANGOMM_BUILD - _WINDLL */
+#else
+/* Build a static library or a non-native-Windows library */
+# define PANGOMM_API
+#endif /* PANGOMM_DLL */
+
+#endif /* !PANGOMM_PANGOMMCONFIG_H_INCLUDED */
diff --git a/pango/src/Makefile.am b/pango/src/Makefile.am
new file mode 100644 (file)
index 0000000..be5cccf
--- /dev/null
@@ -0,0 +1,24 @@
+## Copyright (c) 2009  Openismus GmbH  <http://www.openismus.com/>
+##
+## This file is part of pangomm.
+##
+## pangomm 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.
+##
+## pangomm 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.  If not, see <http://www.gnu.org/licenses/>.
+
+binding_name    = pangomm
+wrap_init_flags = --namespace=Pango --parent_dir=pangomm
+codegen_srcdir  = $(top_srcdir)/tools
+
+include $(srcdir)/filelist.am
+include $(top_srcdir)/tools/m4/filelist.am
+include $(top_srcdir)/build/generate-binding.am
diff --git a/pango/src/attributes.ccg b/pango/src/attributes.ccg
new file mode 100644 (file)
index 0000000..ecec4f7
--- /dev/null
@@ -0,0 +1,468 @@
+/*
+ *
+ * Copyright 2002 Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/context.h>
+
+namespace Pango
+{
+
+Attribute::Attribute()
+:
+  gobject_(0)
+{}
+
+Attribute::Attribute(const Attribute& src)
+:
+  gobject_(src.gobject_ ? pango_attribute_copy(src.gobject_) : nullptr)
+{}
+
+Attribute::Attribute(PangoAttribute* castitem, bool take_copy)
+{
+  if(take_copy)
+  {
+    if(castitem)
+      gobject_ = pango_attribute_copy(castitem);
+    else
+      gobject_ = nullptr;
+  }
+  else
+  {
+    // It was given to us by a function which has already made a copy for us to keep.
+    gobject_ = castitem;
+  }
+}
+
+Attribute::~Attribute()
+{
+  if(gobject_)
+    pango_attribute_destroy(gobject_);
+  gobject_ = nullptr;
+}
+
+Attribute& Attribute::operator=(const Attribute& src)
+{
+  auto* const new_gobject = (src.gobject_ ? pango_attribute_copy(src.gobject_) : nullptr);
+
+  if(gobject_)
+    pango_attribute_destroy(gobject_);
+  gobject_ = new_gobject;
+
+  return *this;
+}
+
+AttrType Attribute::get_type() const
+{
+  return (AttrType) ((gobject_) ? gobj()->klass->type : PANGO_ATTR_INVALID);
+}
+
+AttrType Attribute::register_type(const Glib::ustring& name)
+{
+  return (AttrType)pango_attr_type_register(name.c_str());
+}
+
+Glib::ustring Attribute::get_type_name(AttrType type)
+{
+  return Glib::convert_const_gchar_ptr_to_ustring(pango_attr_type_get_name((PangoAttrType)type));
+}
+
+AttrString Attribute::create_attr_family(const Glib::ustring& family)
+{
+  return Glib::wrap((PangoAttrString*)pango_attr_family_new(family.c_str()));
+}
+
+AttrLanguage Attribute::create_attr_language(const Language& language)
+{
+  return Glib::wrap((PangoAttrLanguage*)pango_attr_language_new(const_cast<PangoLanguage*>(language.gobj())));
+}
+
+AttrColor Attribute::create_attr_foreground(guint16 red, guint16 green, guint16 blue)
+{
+  return Glib::wrap((PangoAttrColor*)pango_attr_foreground_new(red, green, blue));
+}
+
+AttrColor Attribute::create_attr_background(guint16 red, guint16 green, guint16 blue)
+{
+  return Glib::wrap((PangoAttrColor*)pango_attr_background_new(red, green, blue));
+}
+
+AttrInt Attribute::create_attr_foreground_alpha(guint16 alpha)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_foreground_alpha_new(alpha));
+}
+
+AttrInt Attribute::create_attr_background_alpha(guint16 alpha)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_background_alpha_new(alpha));
+}
+
+AttrInt Attribute::create_attr_size(int size)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_size_new(size));
+}
+
+AttrInt Attribute::create_attr_size_absolute(int size)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_size_new_absolute(size));
+}
+
+AttrInt Attribute::create_attr_style(Style style)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_style_new((PangoStyle)style));
+}
+
+AttrInt Attribute::create_attr_weight(Weight weight)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_weight_new((PangoWeight)weight));
+}
+
+AttrInt Attribute::create_attr_variant(Variant variant)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_variant_new((PangoVariant)variant));
+}
+
+AttrInt Attribute::create_attr_stretch(Stretch stretch)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_stretch_new((PangoStretch)stretch));
+}
+
+AttrFontDesc Attribute::create_attr_font_desc(const FontDescription& desc)
+{
+  return Glib::wrap((PangoAttrFontDesc*)pango_attr_font_desc_new(desc.gobj()));
+}
+
+AttrInt Attribute::create_attr_underline(Underline underline)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_underline_new((PangoUnderline)underline));
+}
+
+AttrColor Attribute::create_attr_underline_color(guint16 red, guint16 green, guint16 blue)
+{
+  return Glib::wrap((PangoAttrColor*)pango_attr_underline_color_new(red, green, blue));
+}
+
+AttrInt Attribute::create_attr_overline(Overline overline)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_overline_new((PangoOverline)overline));
+}
+
+AttrColor Attribute::create_attr_overline_color(guint16 red, guint16 green, guint16 blue)
+{
+  return Glib::wrap((PangoAttrColor*)pango_attr_overline_color_new(red, green, blue));
+}
+
+AttrInt Attribute::create_attr_strikethrough(bool strikethrough)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_strikethrough_new(strikethrough));
+}
+
+AttrColor Attribute::create_attr_strikethrough_color(guint16 red, guint16 green, guint16 blue)
+{
+  return Glib::wrap((PangoAttrColor*)pango_attr_strikethrough_color_new(red, green, blue));
+}
+
+AttrInt Attribute::create_attr_rise(int rise)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_rise_new(rise));
+}
+
+AttrInt Attribute::create_attr_baseline_shift(int shift)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_baseline_shift_new(shift));
+}
+
+AttrInt Attribute::create_attr_font_scale(FontScale scale)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_font_scale_new((PangoFontScale)scale));
+}
+
+AttrFloat Attribute::create_attr_scale(double scale_factor)
+{
+  return Glib::wrap((PangoAttrFloat*)pango_attr_scale_new(scale_factor));
+}
+
+AttrInt Attribute::create_attr_fallback(bool enable_fallback)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_fallback_new(enable_fallback));
+}
+
+AttrInt Attribute::create_attr_letter_spacing(int letter_spacing)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_letter_spacing_new(letter_spacing));
+}
+
+AttrShape Attribute::create_attr_shape(const Rectangle& ink_rect, const Rectangle& logical_rect)
+{
+  return Glib::wrap((PangoAttrShape*)pango_attr_shape_new(ink_rect.gobj(), logical_rect.gobj()));
+}
+
+AttrInt Attribute::create_attr_gravity(Gravity gravity)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_gravity_new((PangoGravity)gravity));
+}
+
+AttrInt Attribute::create_attr_gravity_hint(GravityHint hint)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_gravity_hint_new((PangoGravityHint)hint));
+}
+
+AttrString Attribute::create_attr_font_features(const Glib::ustring& features)
+{
+  return Glib::wrap((PangoAttrString*)pango_attr_font_features_new(features.c_str()));
+}
+
+AttrInt Attribute::create_attr_allow_breaks(bool allow_breaks)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_allow_breaks_new(allow_breaks));
+}
+
+AttrInt Attribute::create_attr_word()
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_word_new());
+}
+
+AttrInt Attribute::create_attr_sentence()
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_sentence_new());
+}
+
+AttrInt Attribute::create_attr_insert_hyphens(bool insert_hyphens)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_insert_hyphens_new(insert_hyphens));
+}
+
+AttrInt Attribute::create_attr_show(ShowFlags show)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_show_new((PangoShowFlags)show));
+}
+
+AttrFloat Attribute::create_attr_line_height(double factor)
+{
+  return Glib::wrap((PangoAttrFloat*)pango_attr_line_height_new(factor));
+}
+
+AttrInt Attribute::create_attr_line_height_absolute(int height)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_line_height_new_absolute(height));
+}
+
+AttrInt Attribute::create_attr_text_transform(TextTransform transform)
+{
+  return Glib::wrap((PangoAttrInt*)pango_attr_text_transform_new((PangoTextTransform)transform));
+}
+
+
+AttrString::AttrString()
+{}
+
+AttrString::AttrString(const AttrString& src)
+:
+  Attribute(src)
+{}
+
+AttrString::AttrString(PangoAttrString* castitem, bool take_copy)
+:
+  Attribute((PangoAttribute*)castitem, take_copy)
+{}
+
+AttrString& AttrString::operator=(const AttrString& src)
+{
+  Attribute::operator=(src);
+  return *this;
+}
+
+void AttrString::set_string(const Glib::ustring& str)
+{
+  g_free(gobj()->value);
+  gobj()->value = g_strdup(str.c_str());
+}
+
+
+AttrLanguage::AttrLanguage()
+{}
+
+AttrLanguage::AttrLanguage(const AttrLanguage& src)
+:
+  Attribute(src)
+{}
+
+AttrLanguage::AttrLanguage(PangoAttrLanguage* castitem, bool take_copy)
+:
+  Attribute((PangoAttribute*)castitem, take_copy)
+{}
+
+AttrLanguage& AttrLanguage::operator=(const AttrLanguage& src)
+{
+  Attribute::operator=(src);
+  return *this;
+}
+
+
+AttrColor::AttrColor()
+{}
+
+AttrColor::AttrColor(const AttrColor& src)
+:
+  Attribute(src)
+{}
+
+AttrColor::AttrColor(PangoAttrColor* castitem, bool take_copy)
+:
+  Attribute((PangoAttribute*)castitem, take_copy)
+{}
+
+AttrColor& AttrColor::operator=(const AttrColor& src)
+{
+  Attribute::operator=(src);
+  return *this;
+}
+
+
+AttrInt::AttrInt()
+{}
+
+AttrInt::AttrInt(const AttrInt& src)
+:
+  Attribute(src)
+{}
+
+AttrInt::AttrInt(PangoAttrInt* castitem, bool take_copy)
+:
+  Attribute((PangoAttribute*)castitem, take_copy)
+{}
+
+AttrInt& AttrInt::operator=(const AttrInt& src)
+{
+  Attribute::operator=(src);
+  return *this;
+}
+
+
+AttrFloat::AttrFloat()
+{}
+
+AttrFloat::AttrFloat(const AttrFloat& src)
+:
+  Attribute(src)
+{}
+
+AttrFloat::AttrFloat(PangoAttrFloat* castitem, bool take_copy)
+:
+  Attribute((PangoAttribute*)castitem, take_copy)
+{}
+
+AttrFloat& AttrFloat::operator=(const AttrFloat& src)
+{
+  Attribute::operator=(src);
+  return *this;
+}
+
+
+AttrFontDesc::AttrFontDesc()
+{}
+
+AttrFontDesc::AttrFontDesc(const AttrFontDesc& src)
+:
+  Attribute(src)
+{}
+
+AttrFontDesc::AttrFontDesc(PangoAttrFontDesc* castitem, bool take_copy)
+:
+  Attribute((PangoAttribute*)castitem, take_copy)
+{}
+
+AttrFontDesc& AttrFontDesc::operator=(const AttrFontDesc& src)
+{
+  Attribute::operator=(src);
+  return *this;
+}
+
+void AttrFontDesc::set_desc(const FontDescription& desc)
+{
+  pango_font_description_free(gobj()->desc);
+  gobj()->desc = pango_font_description_copy(desc.gobj());
+}
+
+
+AttrShape::AttrShape()
+{}
+
+AttrShape::AttrShape(const AttrShape& src)
+:
+  Attribute(src)
+{}
+
+AttrShape::AttrShape(PangoAttrShape* castitem, bool take_copy)
+:
+  Attribute((PangoAttribute*)castitem, take_copy)
+{}
+
+AttrShape& AttrShape::operator=(const AttrShape& src)
+{
+  Attribute::operator=(src);
+  return *this;
+}
+
+} //namespace Pango
+
+
+namespace Glib
+{
+
+Pango::Attribute wrap(PangoAttribute* object, bool take_copy)
+{
+  return Pango::Attribute(object, take_copy);
+}
+
+Pango::AttrString wrap(PangoAttrString* object, bool take_copy)
+{
+  return Pango::AttrString(object, take_copy);
+}
+
+Pango::AttrLanguage wrap(PangoAttrLanguage* object, bool take_copy)
+{
+  return Pango::AttrLanguage(object, take_copy);
+}
+
+Pango::AttrColor wrap(PangoAttrColor* object, bool take_copy)
+{
+  return Pango::AttrColor(object, take_copy);
+}
+
+Pango::AttrInt wrap(PangoAttrInt* object, bool take_copy)
+{
+  return Pango::AttrInt(object, take_copy);
+}
+
+Pango::AttrFloat wrap(PangoAttrFloat* object, bool take_copy)
+{
+  return Pango::AttrFloat(object, take_copy);
+}
+
+Pango::AttrFontDesc wrap(PangoAttrFontDesc* object, bool take_copy)
+{
+  return Pango::AttrFontDesc(object, take_copy);
+}
+
+Pango::AttrShape wrap(PangoAttrShape* object, bool take_copy)
+{
+  return Pango::AttrShape(object, take_copy);
+}
+
+} //namespace Glib
+
diff --git a/pango/src/attributes.hg b/pango/src/attributes.hg
new file mode 100644 (file)
index 0000000..16e3af6
--- /dev/null
@@ -0,0 +1,769 @@
+/* attributes.h
+ *
+ * Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/language.h>
+#include <pangomm/rectangle.h>
+#include <pangomm/color.h>
+#include <pangomm/fontdescription.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+/** Pango::AttrType distinguishes between different types of attributes.
+ * Along with the predefined values, it is possible to allocate additional values for
+ * custom attributes using Pango::Attribute::register_type(). The predefined values
+ * are given below. The type of structure used to store the
+ * attribute is listed in parentheses after the description.
+ */
+_WRAP_ENUM(AttrType, PangoAttrType, s#^SCALE$#SCALE_FACTOR#, decl_prefix PANGOMM_API)
+// gcc complains that SCALE shadows the global constant SCALE from font.h.
+
+_WRAP_ENUM(Underline, PangoUnderline, decl_prefix PANGOMM_API)
+_WRAP_ENUM(Overline, PangoOverline, decl_prefix PANGOMM_API)
+_WRAP_ENUM(ShowFlags, PangoShowFlags, decl_prefix PANGOMM_API)
+_WRAP_ENUM(TextTransform, PangoTextTransform, newin "2,50", decl_prefix PANGOMM_API)
+_WRAP_ENUM(BaselineShift, PangoBaselineShift, CONV_TO_INT, newin "2,50", decl_prefix PANGOMM_API)
+_WRAP_ENUM(FontScale, PangoFontScale, newin "2,50", decl_prefix PANGOMM_API)
+
+/** A Pango::LogAttr stores information about the attributes of a single character.
+ */
+typedef PangoLogAttr LogAttr;
+
+
+class PANGOMM_API AttrString;
+class PANGOMM_API AttrLanguage;
+class PANGOMM_API AttrColor;
+class PANGOMM_API AttrInt;
+class PANGOMM_API AttrFloat;
+class PANGOMM_API AttrFontDesc;
+class PANGOMM_API AttrShape;
+
+enum class PANGOMM_API GravityHint;
+
+/** The %Pango::Attribute structure represents the common portions of all attributes.
+ * Particular types of attributes derive this class. It holds the range in which the
+ * value in the type-specific part of the attribute applies.
+ *
+ * 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 Pango::Layout.
+ */
+class PANGOMM_API Attribute
+{
+  _CLASS_GENERIC(Attribute, PangoAttribute)
+  _IGNORE(pango_attribute_copy, pango_attribute_destroy, pango_attribute_init)
+
+public:
+  /** Constructs an invalid attribute.
+   */
+  Attribute();
+
+  Attribute(const Attribute& src);
+  explicit Attribute(PangoAttribute* castitem, bool take_copy=true);
+  ~Attribute();
+
+  Attribute& operator=(const Attribute& src);
+
+  /** Gets the type ID for this attribute.
+   * @return The type ID for this attribute or ATTR_INVALID if the attribute is invalid.
+   */
+  AttrType get_type() const;
+
+  /** Allocate a new attribute type ID.
+   *
+   * The attribute type name can be accessed later by using get_type_name().
+   *
+   * @param name An identifier for the type.
+   * @return The new type ID.
+   */
+  static AttrType register_type(const Glib::ustring& name);
+
+  /** Fetches the attribute type name passed in when registering the type using
+   * register_type().
+   *
+   * @newin{2,46}
+   *
+   * @param type An attribute type ID to fetch the name for.
+   * @return The type ID name (which may be an empty string), or an empty string
+   *         if @a type is a built-in Pango attribute type or invalid.
+   */
+  static Glib::ustring get_type_name(AttrType type);
+  // _WRAP_METHOD() can't be used here, because glibmm/tools/defs_gen/h2def.py
+  // assumes that pango_attr_type_get_name() is a method of a class named PangoAttrType.
+
+  /** Gets the start index of the range.
+   * @return The start index of the range.
+   */
+  _MEMBER_GET(start_index, start_index, unsigned int, guint)
+
+  /** Gets the end index of the range. The character at this index is not included in the range.
+   * @return The end index of the range.
+   */
+  _MEMBER_GET(end_index, end_index, unsigned int, guint)
+
+  /** Sets the start index of the range.
+   * @param value The new start index (in bytes).
+   */
+  _MEMBER_SET(start_index, start_index, unsigned int, guint)
+
+  /** Sets the end index of the range. The character at this index is not included in the range.
+   * @param value The new end index (in bytes).
+   */
+  _MEMBER_SET(end_index, end_index, unsigned int, guint)
+
+  _WRAP_METHOD(bool equal(const Attribute& attr2) const, pango_attribute_equal)
+
+  /// Provides access to the underlying C GObject.  
+  PangoAttribute*       gobj()       { return gobject_; }
+  /// Provides access to the underlying C GObject.
+  const PangoAttribute* gobj() const { return gobject_; }
+
+  /** Create a new font family attribute.
+   * @param family The family or comma separated list of families.
+   * @return An attribute of type AttrString.
+   */
+  static AttrString create_attr_family(const Glib::ustring& family);
+
+  /** Create a new language tag attribute
+   * @param language The language tag.
+   * @return An attribute of type AttrLanguage.
+   */
+  static AttrLanguage create_attr_language(const Language& language);
+
+  /** Create a new foreground color attribute.
+   * @param red The red value (ranging from 0 to 65535).
+   * @param green The green value (ranging from 0 to 65535).
+   * @param blue The blue value (ranging from 0 to 65535).
+   * @return An attribute of type AttrColor.
+   */
+  static AttrColor create_attr_foreground(guint16 red, guint16 green, guint16 blue);
+
+  /** Create a new background color attribute.
+   * @param red The red value (ranging from 0 to 65535).
+   * @param green The green value (ranging from 0 to 65535).
+   * @param blue The blue value (ranging from 0 to 65535).
+   * @return An attribute of type AttrColor.
+   */
+  static AttrColor create_attr_background(guint16 red, guint16 green, guint16 blue);
+
+  /** Create a new foreground alpha attribute.
+   * @param alpha The alpha value, between 1 and 65536.
+   */
+  static AttrInt create_attr_foreground_alpha(guint16 alpha);
+
+  /** Create a new background alpha attribute.
+   * @param alpha The alpha value, between 1 and 65536.
+   */
+  static AttrInt create_attr_background_alpha(guint16 alpha);
+
+  /** Create a new font-size attribute.
+   * @param size The font size, in 1024ths of a point.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_size(int size);
+
+  /** Create a new font-size attribute.
+   *
+   * @newin{2,42}
+   *
+   * @param size The font size, in 1024ths of a device unit.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_size_absolute(int size);
+
+  /** Create a new font slant style attribute.
+   * @param style The slant style.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_style(Style style);
+
+  /** Create a new font weight attribute.
+   * @param weight The weight.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_weight(Weight weight);
+
+  /** Create a new font variant attribute (normal or small caps).
+   * @param variant The variant.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_variant(Variant variant);
+
+  /** Create a new font stretch attribute.
+   * @param stretch The stretch.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_stretch(Stretch stretch);
+
+  /** Create a new font description attribute.
+   * This attribute allows setting family, style, weight, variant, stretch, and size simultaneously.
+   * @param desc The font description.
+   * @return An attribute of type AttrFontDesc.
+   */
+  static AttrFontDesc create_attr_font_desc(const FontDescription& desc);
+
+  /** Create a new underline-style object.
+   * @param underline The underline style.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_underline(Underline underline);
+
+  /** Create a new underline color attribute.
+   * This attribute modifies the color of underlines. If not set,
+   * underlines will use the foreground color.
+   *
+   * @newin{2,42}
+   *
+   * @param red The red value (ranging from 0 to 65535).
+   * @param green The green value (ranging from 0 to 65535).
+   * @param blue The blue value (ranging from 0 to 65535).
+   * @return An attribute of type AttrColor.
+   */
+  static AttrColor create_attr_underline_color(guint16 red, guint16 green, guint16 blue);
+
+  /** Create a new overline-style object.
+   *
+   * @newin{2,46}
+   *
+   * @param overline The overline style.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_overline(Overline overline);
+
+  /** Create a new overline color attribute.
+   *
+   * This attribute modifies the color of overlines. If not set,
+   * overlines will use the foreground color.
+   *
+   * @newin{2,46}
+   *
+   * @param red The red value (ranging from 0 to 65535).
+   * @param green The green value (ranging from 0 to 65535).
+   * @param blue The blue value (ranging from 0 to 65535).
+   * @return An attribute of type AttrColor.
+   */
+  static AttrColor create_attr_overline_color(guint16 red, guint16 green, guint16 blue);
+
+  /** Create a new font strike-through attribute.
+   * @param strikethrough True indicates the text should be struck-through.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_strikethrough(bool strikethrough);
+
+  /** Create a new strikethrough color attribute.
+   * This attribute modifies the color of strikethrough lines. If not set,
+   * strikethrough lines will use the foreground color.
+   *
+   * @newin{2,42}
+   *
+   * @param red The red value (ranging from 0 to 65535).
+   * @param green The green value (ranging from 0 to 65535).
+   * @param blue The blue value (ranging from 0 to 65535).
+   * @return An attribute of type AttrColor.
+   */
+  static AttrColor create_attr_strikethrough_color(guint16 red, guint16 green, guint16 blue);
+
+  /** Create a new baseline displacement attribute.
+   * @param rise The amount that the text should be displaced vertically, in 10'000ths of an em. Positive values displace the text upwards.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_rise(int rise);
+
+  /** Create a new baseline displacement attribute.
+   *
+   * The effect of this attribute is to shift the baseline of a run,
+   * relative to the run of preceding run.
+   *
+   * @newin{2,50}
+   *
+   * @param shift Either a Pango::BaselineShift enumeration value or an absolute value (> 1024)
+   *   in %Pango units, relative to the baseline of the previous run.
+   *   Positive values displace the text upwards.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_baseline_shift(int shift);
+
+  /** Create a new font scale attribute.
+   *
+   * The effect of this attribute is to change the font size of a run,
+   * relative to the size of preceding run.
+   *
+   * @newin{2,50}
+   *
+   * @param scale A Pango::FontScale value, which indicates font size change relative
+   *   to the size of the previous run.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_font_scale(FontScale scale);
+
+  /** Create a new font size scale attribute.
+   * The base font for the affected text will have its size multiplied by scale_factor.
+   * @param scale_factor Factor to scale the font.
+   * @return An attribute of type AttrFloat.
+   */
+  static AttrFloat create_attr_scale(double scale_factor);
+
+  /** 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.
+   *
+   * @newin{2,42}
+   *
+   * @param enable_fallback <tt>true</tt> if we should fall back on other fonts
+   *                        for characters the active font is missing.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_fallback(bool enable_fallback);
+
+  /** Create a new letter-spacing attribute.
+   *
+   * @newin{2,42}
+   *
+   * @param letter_spacing Amount of extra space to add between graphemes
+   *                       of the text, in Pango units.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_letter_spacing(int letter_spacing);
+
+  /** Create a new shape attribute.
+   * A shape is used to impose a particular ink and logical rect on the result of shaping a particular glyph.
+   * This might be used, for instance, for embedding a picture or a widget inside a PangoLayout.
+   * @param ink_rect Ink rectangle to assign to each character.
+   * @param logical_rect Logical rectangle assign to each character.
+   * @return An attribute of type AttrShape.
+   */
+  static AttrShape create_attr_shape(const Rectangle& ink_rect, const Rectangle& logical_rect);
+
+  /** Create a new gravity attribute.
+   *
+   * @newin{2,42}
+   *
+   * @param gravity The gravity value; should not be Pango::Gravity::AUTO.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_gravity(Gravity gravity);
+
+  /** Create a new gravity hint attribute.
+   *
+   * @newin{2,42}
+   *
+   * @param hint The gravity hint value.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_gravity_hint(GravityHint hint);
+
+  /** Create a new font features tag attribute.
+   *
+   * @newin{2,42}
+   *
+   * @param features A string with OpenType font features, in CSS syntax.
+   * @return An attribute of type AttrString.
+   */
+  static AttrString create_attr_font_features(const Glib::ustring& features);
+
+  /** Create a new allow-breaks attribute.
+   *
+   * If breaks are disabled, the range will be kept in a
+   * single run, as far as possible.
+   *
+   * @newin{2,46}
+   *
+   * @param allow_breaks <tt>true</tt> if line breaks are allowed.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_allow_breaks(bool allow_breaks);
+
+  /** Marks the range of the attribute as a single word.
+   *
+   * Note that this may require adjustments to word and
+   * sentence classification around the range.
+   *
+   * @newin{2,50}
+   *
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_word();
+
+  /** Marks the range of the attribute as a single sentence.
+   *
+   * Note that this may require adjustments to word and
+   * sentence classification around the range.
+   *
+   * @newin{2,50}
+   *
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_sentence();
+
+  /** Create a new insert-hyphens attribute.
+   *
+   * Pangomm will insert hyphens when breaking lines in the middle
+   * of a word. This attribute can be used to suppress the hyphen.
+   *
+   * @newin{2,46}
+   *
+   * @param insert_hyphens <tt>true</tt> if hyphens should be inserted.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_insert_hyphens(bool insert_hyphens);
+
+  /** Create a new attribute that influences how invisible characters are rendered.
+   *
+   * @newin{2,46}
+   *
+   * @param flags Pango::ShowFlags to apply.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_show(ShowFlags show);
+
+  /** Modify the height of logical line extents by a factor.
+   *
+   * This affects the values returned by Pango::LayoutLine::get_extents(),
+   * Pango::LayoutLine::get_pixel_extents() and Pango::LayoutIter::get_line_extents().
+   *
+   * @newin{2,50}
+   *
+   * @param factor The scaling factor to apply to the logical height.
+   * @return An attribute of type AttrFloat.
+   */
+  static AttrFloat create_attr_line_height(double factor);
+
+  /** Override the height of logical line extents to be @a height.
+   *
+   * This affects the values returned by Pango::LayoutLine::get_extents(),
+   * Pango::LayoutLine::get_pixel_extents() and Pango::LayoutIter::get_line_extents().
+   *
+   * @newin{2,50}
+   *
+   * @param height The line height, in Pango::SCALE-ths of a point.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_line_height_absolute(int height);
+
+  /** Create a new attribute that influences how characters are transformed during shaping.
+   *
+   * @newin{2,50}
+   *
+   * @param transform Pango::TextTransform to apply.
+   * @return An attribute of type AttrInt.
+   */
+  static AttrInt create_attr_text_transform(TextTransform transform);
+
+  _IGNORE(pango_attribute_as_string, pango_attribute_as_language, pango_attribute_as_int)
+  _IGNORE(pango_attribute_as_size, pango_attribute_as_float, pango_attribute_as_color)
+  _IGNORE(pango_attribute_as_font_desc, pango_attribute_as_shape, pango_attribute_as_font_features)
+
+protected:
+  PangoAttribute* gobject_;
+};
+
+/** @relates Pango::Attribute */
+inline bool operator==(const Attribute& lhs, const Attribute& rhs)
+{
+  return lhs.equal(rhs);
+}
+
+/** @relates Pango::Attribute */
+inline bool operator!=(const Attribute& lhs, const Attribute& rhs)
+{
+  return !lhs.equal(rhs);
+}
+
+
+/** A Pango::AttrString is used to represent an attribute with a string value.
+ */
+class PANGOMM_API AttrString : public Attribute
+{
+  _CLASS_GENERIC(AttrString, PangoAttrString)
+
+protected:
+  AttrString();
+public:
+  AttrString(const AttrString& src);
+  explicit AttrString(PangoAttrString* castitem, bool take_copy=true);
+
+  AttrString& operator=(const AttrString& src);
+
+  /** Gets the string which is the value of the attribute.
+   * @return The string value of the attribute.
+   */
+  _MEMBER_GET(string, value, Glib::ustring, const char*)
+
+  /** Sets the string which is the value of the attribute.
+   * @param string The new string value for the attribute.
+   */
+  void set_string(const Glib::ustring& string);
+
+  /// Provides access to the underlying C GObject.  
+  PangoAttrString*       gobj()       { return reinterpret_cast<PangoAttrString*>(gobject_); }
+  /// Provides access to the underlying C GObject.
+  const PangoAttrString* gobj() const { return reinterpret_cast<const PangoAttrString*>(gobject_); }
+};
+
+
+/** A Pango::AttrLanguage is used to represent an attribute that is a language.
+ */
+class PANGOMM_API AttrLanguage : public Attribute
+{
+  _CLASS_GENERIC(AttrLanguage, PangoAttrLanguage)
+
+protected:
+  AttrLanguage();
+public:
+  AttrLanguage(const AttrLanguage& src);
+  explicit AttrLanguage(PangoAttrLanguage* castitem, bool take_copy=true);
+
+  AttrLanguage& operator=(const AttrLanguage& src);
+
+  /** Gets the language which is the value of the attribute.
+   * @return The language tag of the attribute.
+   */
+  _MEMBER_GET(language, value, Language, PangoLanguage*)
+
+  /** Sets the language which is the value of the attribute.
+   * @param value The new language tag for the attribute.
+   */
+  _MEMBER_SET_PTR(language, value, const Language&, PangoLanguage*)
+
+  /// Provides access to the underlying C GObject.  
+  PangoAttrLanguage*       gobj()       { return reinterpret_cast<PangoAttrLanguage*>(gobject_); }
+  /// Provides access to the underlying C GObject.
+  const PangoAttrLanguage* gobj() const { return reinterpret_cast<const PangoAttrLanguage*>(gobject_); }
+};
+
+
+/** A Pango::AttrColor is used to represent an attribute which is a color.
+ */
+class PANGOMM_API AttrColor : public Attribute
+{
+  _CLASS_GENERIC(AttrColor, PangoAttrColor)
+
+protected:
+  AttrColor();
+public:
+  AttrColor(const AttrColor& src);
+  explicit AttrColor(PangoAttrColor* castitem, bool take_copy=true);
+
+  AttrColor& operator=(const AttrColor& src);
+
+  /** Gets the color which is the value of the attribute.
+   * @return The color value of the attribute.
+   */
+  _MEMBER_GET(color, color, Color, PangoColor)
+
+  /** Sets the color which is the value of the attribute.
+   * @param value The new color value for the attribute.
+   */
+  _MEMBER_SET(color, color, Color, PangoColor)
+
+  /// Provides access to the underlying C GObject.  
+  PangoAttrColor*       gobj()       { return reinterpret_cast<PangoAttrColor*>(gobject_); }
+  /// Provides access to the underlying C GObject.
+  const PangoAttrColor* gobj() const { return reinterpret_cast<const PangoAttrColor*>(gobject_); }
+};
+
+
+/** A Pango::AttrInt is used to represent an attribute with an integer or enumeration value.
+ */
+class PANGOMM_API AttrInt : public Attribute
+{
+  _CLASS_GENERIC(AttrInt, PangoAttrInt)
+
+protected:
+  AttrInt();
+public:
+  AttrInt(const AttrInt& src);
+  explicit AttrInt(PangoAttrInt* castitem, bool take_copy=true);
+
+  AttrInt& operator=(const AttrInt& src);
+
+  /** Gets the integer value of the attribute.
+   * @return The integer value of the attribute.
+   */
+  _MEMBER_GET(value, value, int, int)
+
+  /** Sets the integer value of the attribute.
+   * @param value The new integer value for the attribute.
+   */
+  _MEMBER_SET(value, value, int, int)
+
+  /// Provides access to the underlying C GObject.  
+  PangoAttrInt*       gobj()       { return reinterpret_cast<PangoAttrInt*>(gobject_); }
+  /// Provides access to the underlying C GObject.
+  const PangoAttrInt* gobj() const { return reinterpret_cast<const PangoAttrInt*>(gobject_); }
+};
+
+
+/** A Pango::AttrFloat is used to represent an attribute with a float or double value.
+ */
+class PANGOMM_API AttrFloat : public Attribute
+{
+  _CLASS_GENERIC(AttrFloat, PangoAttrFloat)
+
+protected:
+  AttrFloat();
+public:
+  AttrFloat(const AttrFloat& src);
+  explicit AttrFloat(PangoAttrFloat* castitem, bool take_copy=true);
+
+  AttrFloat& operator=(const AttrFloat& src);
+
+  /** Gets the floating point value of the attribute.
+   * @return The floating point value of the attribute.
+   */
+  _MEMBER_GET(value, value, double, double)
+
+  /** Sets the floating point value of the attribute.
+   * @param value The new floating point value for the attribute.
+   */
+  _MEMBER_SET(value, value, double, double)
+
+  /// Provides access to the underlying C GObject.
+  PangoAttrFloat*       gobj()       { return reinterpret_cast<PangoAttrFloat*>(gobject_); }
+  /// Provides access to the underlying C GObject.
+  const PangoAttrFloat* gobj() const { return reinterpret_cast<const PangoAttrFloat*>(gobject_); }
+};
+
+
+/** A Pango::AttrFontDesc is used to represent an attribute that sets all aspects of the font description at once.
+ */
+class PANGOMM_API AttrFontDesc : public Attribute
+{
+  _CLASS_GENERIC(AttrFontDesc, PangoAttrFontDesc)
+
+protected:
+  AttrFontDesc();
+public:
+  AttrFontDesc(const AttrFontDesc& src);
+  explicit AttrFontDesc(PangoAttrFontDesc* castitem, bool take_copy=true);
+
+  AttrFontDesc& operator=(const AttrFontDesc& src);
+
+  /** Gets the font description which is the value of the attribute.
+   * @return The font description of the attribute.
+   */
+  _MEMBER_GET(desc, desc, FontDescription, PangoFontDescription*)
+
+  /** Sets the font description which is the value of the attribute.
+   * @param desc The new font description for the attribute.
+   */
+  void set_desc(const FontDescription& desc);
+  
+  /// Provides access to the underlying C GObject.
+  PangoAttrFontDesc*       gobj()       { return reinterpret_cast<PangoAttrFontDesc*>(gobject_); }
+  /// Provides access to the underlying C GObject.
+  const PangoAttrFontDesc* gobj() const { return reinterpret_cast<const PangoAttrFontDesc*>(gobject_); }
+};
+
+
+/** A Pango::AttrShape structure is used to represent an attribute which imposes shape restrictions.
+ */
+class PANGOMM_API AttrShape : public Attribute
+{
+  _CLASS_GENERIC(AttrShape, PangoAttrShape)
+
+protected:
+  AttrShape();
+public:
+  AttrShape(const AttrShape& src);
+  explicit AttrShape(PangoAttrShape* castitem, bool take_copy=true);
+
+  AttrShape& operator=(const AttrShape& src);
+
+  /** Gets the ink rectangle to restrict to.
+   * @return The ink rectangle of the attribute.
+   */
+  _MEMBER_GET(ink_rect, ink_rect, Rectangle, PangoRectangle)
+
+  /** Gets the logical rectangle to restrict to.
+   * @return The logical rectangle of the attribute.
+   */
+  _MEMBER_GET(logical_rect, logical_rect, Rectangle, PangoRectangle)
+
+  /** Sets the ink rectangle to restrict to.
+   * @param value The new ink rectangle for the attribute.
+   */
+  _MEMBER_SET(ink_rect, ink_rect, Rectangle, PangoRectangle)
+
+  /** Sets the logical rectangle to restrict to.
+   * @param value The new logical rectangle for the attribute.
+   */
+  _MEMBER_SET(logical_rect, logical_rect, Rectangle, PangoRectangle)
+
+  /// Provides access to the underlying C GObject.  
+  PangoAttrShape*       gobj()       { return reinterpret_cast<PangoAttrShape*>(gobject_); }
+  /// Provides access to the underlying C GObject.
+  const PangoAttrShape* gobj() const { return reinterpret_cast<const PangoAttrShape*>(gobject_); }
+};
+
+
+struct AttributeTraits
+{
+  typedef Pango::Attribute      CppType;
+  typedef const PangoAttribute* CType;
+  typedef PangoAttribute*       CTypeNonConst;
+
+  static CType   to_c_type      (const CppType& obj) { return obj.gobj(); }
+  static CType   to_c_type      (CType ptr) { return ptr; }
+  static CppType to_cpp_type    (CType ptr) { return CppType(const_cast<CTypeNonConst>(ptr), true); }
+  static void    release_c_type (CType ptr) { pango_attribute_destroy(const_cast<CTypeNonConst>(ptr)); }
+};
+
+} // namespace Pango
+
+
+namespace Glib
+{
+
+/** @relates Pango::Attribute */
+PANGOMM_API
+Pango::Attribute wrap(PangoAttribute* object, bool take_copy = false);
+
+/** @relates Pango::AttrString */
+PANGOMM_API
+Pango::AttrString wrap(PangoAttrString* object, bool take_copy = false);
+
+/** @relates Pango::AttrLanguage */
+PANGOMM_API
+Pango::AttrLanguage wrap(PangoAttrLanguage* object, bool take_copy = false);
+
+/** @relates Pango::AttrColor */
+PANGOMM_API
+Pango::AttrColor wrap(PangoAttrColor* object, bool take_copy = false);
+
+/** @relates Pango::AttrInt */
+PANGOMM_API
+Pango::AttrInt wrap(PangoAttrInt* object, bool take_copy = false);
+
+/** @relates Pango::AttrFloat */
+PANGOMM_API
+Pango::AttrFloat wrap(PangoAttrFloat* object, bool take_copy = false);
+
+/** @relates Pango::AttrFontDesc */
+PANGOMM_API
+Pango::AttrFontDesc wrap(PangoAttrFontDesc* object, bool take_copy = false);
+
+/** @relates Pango::AttrShape */
+PANGOMM_API
+Pango::AttrShape wrap(PangoAttrShape* object, bool take_copy = false);
+
+} //namespace Glib
+
diff --git a/pango/src/attriter.ccg b/pango/src/attriter.ccg
new file mode 100644 (file)
index 0000000..f46712d
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ *
+ * Copyright 1998-1999 The Gtk-- Development Team
+ * Copyright 2001      Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Pango
+{
+
+AttrIter::AttrIter()
+:
+  gobject_(0)
+{}
+
+AttrIter::AttrIter(const AttrIter& src)
+:
+  gobject_(src.gobject_ ? pango_attr_iterator_copy(src.gobject_) : nullptr)
+{}
+
+AttrIter::AttrIter(PangoAttrIterator* castitem, bool take_copy)
+{
+  if(take_copy)
+  {
+    if(castitem)
+      gobject_ = pango_attr_iterator_copy(castitem);
+    else
+      gobject_ = nullptr;
+  }
+  else
+  {
+    gobject_ = castitem;
+  }
+}
+
+AttrIter::~AttrIter()
+{
+  if(gobject_)
+     pango_attr_iterator_destroy(gobject_);
+}
+
+AttrIter& AttrIter::operator=(const AttrIter& src)
+{
+  auto* const new_gobject = (src.gobject_ ? pango_attr_iterator_copy(src.gobject_) : nullptr);
+
+  if(gobject_)
+     pango_attr_iterator_destroy(gobject_);
+  gobject_ = new_gobject;
+
+  return *this;
+}
+
+AttrIter& AttrIter::operator++()
+{
+  next();
+  return *this;
+}
+
+const AttrIter AttrIter::operator++(int)
+{
+  AttrIter previous(*this);
+  next();
+  return previous;
+}
+
+/* operator bool() cannot be implemented to work properly if a Pango::AttrIter is created
+ * from an already invalid PangoAttrIterator* because there is no way to validate it.
+ * Otherwise the iterator can only become invalid after some call to Pango::AttrIter::next()
+ * in which case gobject_ is destroyed thus marking the iterator as invalid.
+ */
+AttrIter::operator bool() const
+{
+  return (gobject_ != nullptr);
+}
+
+bool AttrIter::next()
+{
+  if(!pango_attr_iterator_next(gobj()))
+  {
+    pango_attr_iterator_destroy(gobject_);
+    gobject_ = nullptr; // Mark as invalid. There is no other way to determine whether the iterator is valid later.
+    return false;
+  }
+  else
+    return true;
+}
+
+FontDescription AttrIter::get_font_desc() const
+{
+  FontDescription desc;
+  pango_attr_iterator_get_font(const_cast<PangoAttrIterator*>(gobj()), desc.gobj(), 0, 0);
+
+  // See pango ref docs for pango_attr_iterator_get_font.
+  pango_font_description_set_family(desc.gobj(), pango_font_description_get_family(desc.gobj()));
+
+  return desc;
+}
+
+Language AttrIter::get_language() const
+{
+  FontDescription desc;
+  PangoLanguage* language = nullptr;
+
+  pango_attr_iterator_get_font(const_cast<PangoAttrIterator*>(gobj()), desc.gobj(), &language, 0);
+
+  return Language(language, true);
+}
+
+using SListHandler_Attribute = Glib::SListHandler<Attribute, AttributeTraits>;
+
+std::vector<Attribute> AttrIter::get_extra_attrs() const
+{
+  FontDescription desc;
+  GSList* extra_attrs = nullptr;
+
+  pango_attr_iterator_get_font(const_cast<PangoAttrIterator*>(gobj()), desc.gobj(), 0, &extra_attrs);
+
+  return SListHandler_Attribute::slist_to_vector(extra_attrs, Glib::OWNERSHIP_DEEP);
+}
+
+std::vector<Attribute> AttrIter::get_attrs() const
+{
+  auto attrs = pango_attr_iterator_get_attrs( const_cast<PangoAttrIterator*>(gobj()) );
+  return SListHandler_Attribute::slist_to_vector(attrs, Glib::OWNERSHIP_DEEP);
+}
+   
+
+} /* namespace Pango */
+
+
+namespace Glib
+{
+
+Pango::AttrIter wrap(PangoAttrIterator* object, bool take_copy)
+{
+  return Pango::AttrIter(object, take_copy);
+}
+
+} /* namespace Glib */
+
diff --git a/pango/src/attriter.hg b/pango/src/attriter.hg
new file mode 100644 (file)
index 0000000..07b4810
--- /dev/null
@@ -0,0 +1,114 @@
+/* attriter.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/attributes.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+/** A Pango::AttrIter is used to represent an iterator through a Pango::AttrList.
+ * A new iterator is created with Pango::AttrList::get_iter(). Once the iterator is created,
+ * it can be advanced through the style changes in the text using Pango::AttrIter::next().
+ * At each style change, the range of the current style segment and the attributes currently in effect can be queried.
+ */
+class PANGOMM_API AttrIter
+{
+  _CLASS_GENERIC(AttrIter, PangoAttrIterator)
+  _IGNORE(pango_attr_iterator_copy, pango_attr_iterator_destroy, pango_attr_iterator_next, pango_attr_iterator_get_font)
+public:
+  typedef std::forward_iterator_tag iterator_category;
+  typedef int                       difference_type;
+
+protected:
+  AttrIter();
+
+public:
+  explicit AttrIter(PangoAttrIterator* castitem, bool take_copy=true);
+  AttrIter(const AttrIter& src);
+
+  ~AttrIter();
+
+  AttrIter& operator=(const AttrIter& src);
+
+  /** Advance the iterator until the next change of style.
+   * The iterator becomes invalid if the end of the list is reached.
+   * @return The iterator itself.
+   */
+  AttrIter&      operator++();
+
+  const AttrIter operator++(int);
+
+  /** Check whether the iterator is valid.
+   * @return <tt>true</tt> if the iterator is valid.
+   */
+  explicit operator bool() const;
+
+  /** The same as operator++().
+   * @return <tt>false</tt> if the end of the list is reached.
+   */
+  bool next();
+
+  _WRAP_METHOD(void get_range(int& start, int& end) const, pango_attr_iterator_range)
+  _WRAP_METHOD(Attribute get_attribute(AttrType type) const, pango_attr_iterator_get)
+
+  /** Get the font description used at the current iterator position.
+   * @return The font description used at the current iterator position.
+   */
+  FontDescription get_font_desc() const;
+
+  /** Gets the language tag used at current iterator position.
+   * @return The language tag or an empty Pango::Language object if non is found.
+   */
+  Language get_language() const;
+
+  /** Gets a list of non-font attributes at the the current iterator position.
+   * Only the highest priority value of each attribute will be added to this list.
+   * @return The list of non-font attributes at the current iterator position.
+   */
+  std::vector<Attribute> get_extra_attrs() const;
+
+  /** Gets a list all attributes a the current position of the
+   * iterator.
+   *
+   * @result A list of all attributes for the current range.
+   */
+  std::vector<Attribute> get_attrs() const;
+  _IGNORE(pango_attr_iterator_get_attrs)
+
+  PangoAttrIterator*       gobj()       { return gobject_; }
+  const PangoAttrIterator* gobj() const { return gobject_; }
+
+protected:
+  PangoAttrIterator* gobject_;
+};
+
+} // namespace Pango
+
+
+namespace Glib
+{
+
+/** @relates Pango::AttrIter */
+PANGOMM_API
+Pango::AttrIter wrap(PangoAttrIterator* object, bool take_copy=false);
+
+} // namespace Glib
+
diff --git a/pango/src/attrlist.ccg b/pango/src/attrlist.ccg
new file mode 100644 (file)
index 0000000..0bbc1e8
--- /dev/null
@@ -0,0 +1,73 @@
+/*
+ * Copyright 1998-1999 The Gtk-- Development Team
+ * Copyright 2001      Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Pango
+{
+
+using SListHandler_Attribute = Glib::SListHandler<Attribute, AttributeTraits>;
+
+AttrList::AttrList(const Glib::ustring& markup_text, gunichar accel_marker)
+{
+  gboolean bTest = pango_parse_markup(markup_text.c_str(), -1 /* means null-terminated */, accel_marker,
+                                         &gobject_, 0, 0, 0);
+  if(bTest == FALSE)
+    gobject_ = nullptr;
+}
+
+AttrList::operator bool() const
+{
+  return gobj() != nullptr;
+}
+
+AttrList::AttrList(const Glib::ustring& markup_text, gunichar accel_marker, Glib::ustring& text, gunichar& accel_char)
+{
+  //initialize output parameters:
+  text.erase();
+  accel_char = 0;
+
+  gchar* pchText = nullptr;
+  gboolean bTest = pango_parse_markup(markup_text.c_str(), -1 /* means null-terminated */, accel_marker,
+                                         &gobject_, &pchText, &accel_char, 0);
+  if(bTest == FALSE)
+  {
+    gobject_ = nullptr;
+  }
+  else
+  {
+    text = pchText;
+    g_free(pchText);
+  }
+}
+
+void AttrList::insert(Attribute& attr)
+{
+  pango_attr_list_insert(gobj(), pango_attribute_copy(attr.gobj()));
+}
+void AttrList::insert_before(Attribute& attr)
+{
+  pango_attr_list_insert_before(gobj(), pango_attribute_copy(attr.gobj()));
+}
+
+void AttrList::change(Attribute& attr)
+{
+  pango_attr_list_change(gobj(), pango_attribute_copy(attr.gobj()));
+}
+} /* namespace Pango */
diff --git a/pango/src/attrlist.hg b/pango/src/attrlist.hg
new file mode 100644 (file)
index 0000000..d001398
--- /dev/null
@@ -0,0 +1,99 @@
+/* attrlist.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/attributes.h>
+#include <pangomm/attriter.h>
+#include <vector>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+/** A %Pango::AttrList 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::AttrList::change(), the overlap between properties will meet stricter criteria.
+ *
+ * Since the %Pango::AttrList 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 %Pango::AttrList for more than one paragraph of text.
+ *
+ * When obtaining an %AttrList, you should check that it is valid. For instance, if(attrlist).
+ */
+class PANGOMM_API AttrList
+{
+  _CLASS_BOXEDTYPE(AttrList, PangoAttrList, pango_attr_list_new, pango_attr_list_copy, pango_attr_list_unref, PANGOMM_API)
+  _IGNORE(pango_attr_list_copy, pango_attr_list_ref, pango_attr_list_unref)
+public:
+  /** Constructs an attribute list by parsing a marked-up text (see markup format).
+   * If @a accel_marker is nonzero, the given character will mark the character
+   * following it as an accelerator. For example, the accel marker might be an
+   * ampersand or underscore. All characters marked as an accelerator will receive
+   * a Pango::UNDERLINE_LOW attribute.
+   * Two @a accel_marker characters following each other
+   * produce a single literal @a accel_marker character.
+   *
+   * @param markup_text Markup to parse (see markup format).
+   * @param accel_marker Character that precedes an accelerator, or <tt>0</tt> for none.
+   */
+  explicit AttrList(const Glib::ustring& markup_text, gunichar accel_marker=0);
+
+  /** Constructs an attribute list by parsing a marked-up text (see markup format).
+   * @a text is set to the plaintext string.
+   * If @a accel_marker is nonzero, the given character will mark the character 
+   * following it as an accelerator. For example, the accel marker might be an 
+   * ampersand or underscore. All characters marked as an accelerator will receive
+   * a Pango::UNDERLINE_LOW attribute. The first character so marked will be 
+   * returned in @a accel_char. Two @a accel_marker characters following each other 
+   * produce a single literal @a accel_marker character.
+   *
+   * @param markup_text Markup to parse (see markup format).
+   * @param accel_marker Character that precedes an accelerator, or <tt>0</tt> for none.
+   * @param text Return location for text with tags stripped.
+   * @param accel_char Return location for accelerator char.
+   */
+  AttrList(const Glib::ustring& markup_text, gunichar accel_marker, Glib::ustring& text, gunichar& accel_char);
+
+  ///Tests whether the %AttrList is valid.
+  explicit operator bool() const;
+
+  void insert(Attribute& attr);
+  _IGNORE(pango_attr_list_insert) // hand code because we need to pass a copy of the attribute
+  void insert_before(Attribute& attr);
+  _IGNORE(pango_attr_list_insert_before) // hand code because we need to pass a copy of the attribute
+  void change(Attribute& attr);
+  _IGNORE(pango_attr_list_change) // hand code because we need to pass a copy of the attribute
+  _WRAP_METHOD(void splice(AttrList& other, int pos, int len), pango_attr_list_splice)
+  _WRAP_METHOD(void update(int pos, int remove, int add), pango_attr_list_update, newin "2,50")
+
+#m4 _CONVERSION(`GSList*',`std::vector<Attribute>',`SListHandler_Attribute::slist_to_vector($3, Glib::OWNERSHIP_DEEP)')
+  _WRAP_METHOD(std::vector<Attribute> get_attributes() const, pango_attr_list_get_attributes, newin "2,50")
+
+  _WRAP_METHOD(bool equal(const AttrList& other_list) const, pango_attr_list_equal, newin "2,50")
+  _WRAP_METHOD(Glib::ustring to_string() const, pango_attr_list_to_string, newin "2,50")
+  // Don't replace from_string() by a constructor. A call to such a constructor would be
+  // ambiguous because of AttrList(markup_text, accel_marker=0).
+#m4 _CONVERSION(`PangoAttrList*',`AttrList',`AttrList($3, false)')
+  _WRAP_METHOD(static AttrList from_string(const Glib::ustring& text), pango_attr_list_from_string, newin "2,50")
+  _WRAP_METHOD(AttrIter get_iter(), pango_attr_list_get_iterator)
+
+  //TODO: Though it doesn't seem important:
+  //PangoAttrList* pango_attr_list_filter (PangoAttrList* list, PangoAttrFilterFunc  func, gpointer             data)
+};
+
+} //namespace Pango
diff --git a/pango/src/cairofontmap.ccg b/pango/src/cairofontmap.ccg
new file mode 100644 (file)
index 0000000..da4b125
--- /dev/null
@@ -0,0 +1,19 @@
+/*
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pango/pangocairo.h>
diff --git a/pango/src/cairofontmap.hg b/pango/src/cairofontmap.hg
new file mode 100644 (file)
index 0000000..40f303d
--- /dev/null
@@ -0,0 +1,86 @@
+/* fontmap.h
+ *
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_CONFIGINCLUDE(pangommconfig.h)
+
+#include <glibmm/interface.h>
+#include <pangomm/fontmap.h>
+#include <cairomm/enums.h>
+#include <pango/pangocairo.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/interface_p.h)
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+typedef struct _PangoCairoFontMapIface PangoCairoFontMapIface;
+#endif
+
+namespace Pango
+{
+
+/** %Pango::CairoFontMap is an interface implemented 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.
+ */
+class PANGOMM_API CairoFontMap : public Glib::Interface
+{
+   _CLASS_INTERFACE(CairoFontMap, PangoCairoFontMap, PANGO_CAIRO_FONT_MAP, PangoCairoFontMapIface, , , PANGOMM_API)
+
+public:
+  /** Gets a default %Pango::CairoFontMap 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 Pango::FontMap and
+   * %Pango::CairoFontMap API on the returned object.
+   *
+   * The default Cairo fontmap can be changed by using
+   * set_default(). This can be used to change the Cairo font backend
+   * that the default fontmap uses for example.
+   *
+   * Note that since %Pango 1.32.6, the default fontmap is per-thread.
+   * Each thread gets its own default fontmap. In this way,
+   * PangoCairo can be used safely from multiple threads.
+   *
+   * To use %Pango::CairoFontMap API, do something like
+   * @code
+   * auto font_map = Pango::CairoFontMap::get_default();
+   * auto cairo_font_map = std::dynamic_pointer_cast<Pango::CairoFontMap>(font_map);
+   * if (cairo_font_map)
+   *   cairo_font_map->do_something();
+   * @endcode
+   *
+   * @newin{1,10}
+   *
+   * @return The default PangoCairo fontmap for the current thread.
+   */
+  _WRAP_METHOD(static Glib::RefPtr<FontMap> get_default(), pango_cairo_font_map_get_default, refreturn)
+
+  _WRAP_METHOD(void set_default(), pango_cairo_font_map_set_default)
+
+#m4 _CONVERSION(`cairo_font_type_t',`Cairo::FontType',`static_cast<Cairo::FontType>($3)')
+  _WRAP_METHOD(Cairo::FontType get_font_type() const, pango_cairo_font_map_get_font_type)
+
+  _WRAP_METHOD(void set_resolution(double dpi), pango_cairo_font_map_set_resolution)
+  _WRAP_METHOD(double get_resolution() const, pango_cairo_font_map_get_resolution)
+  _IGNORE(pango_cairo_font_map_create_context)dnl// deprecated
+};
+
+} // namespace Pango
diff --git a/pango/src/color.ccg b/pango/src/color.ccg
new file mode 100644 (file)
index 0000000..a43853d
--- /dev/null
@@ -0,0 +1,33 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Pango
+{
+
+/* For some unknown reason pango doesn't provide pango_color_new(). Let's define an
+ * equivalent function ourself! */
+PangoColor* _pango_color_new()
+{
+  return g_new(PangoColor, 1);
+}
+
+Color::operator bool() const
+{
+  return gobj() != nullptr;
+}
+
+} /* namespace Pango */
diff --git a/pango/src/color.hg b/pango/src/color.hg
new file mode 100644 (file)
index 0000000..4c9c9e0
--- /dev/null
@@ -0,0 +1,76 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_CONFIGINCLUDE(pangommconfig.h)
+
+#include <glibmm/value.h>
+#include <glibmm/utility.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+/** A Pango::Color is used to represent a color in an uncalibrated RGB colorspace.
+ */
+class PANGOMM_API Color
+{
+  _CLASS_BOXEDTYPE_STATIC(Color, PangoColor, PANGOMM_API)
+  _IGNORE(pango_color_copy, pango_color_free)
+
+public:
+
+  /// Tests whether the Color is valid.
+  explicit operator bool() const;
+  
+  /** Gets the red component of the color.
+   * @return The red component of the color. This is a value between 0 and 65535, with 65535 indicating full intensity.
+   */
+  _MEMBER_GET(red, red, guint16, guint16)
+
+  /** Gets the green component of the color.
+   * @return The green component of the color. This is a value between 0 and 65535, with 65535 indicating full intensity.
+   */
+  _MEMBER_GET(green, green, guint16, guint16)
+
+  /** Gets the blue component of the color.
+   * @return The blue component of the color. This is a value between 0 and 65535, with 65535 indicating full intensity.
+   */
+  _MEMBER_GET(blue, blue, guint16, guint16)
+
+  /** Sets the red component of the color.
+   * @param value The red component of the color. This is a value between 0 and 65535, with 65535 indicating full intensity.
+   */
+  _MEMBER_SET(red, red, guint16, guint16)
+
+  /** Sets the green component of the color.
+   * @param value The green component of the color. This is a value between 0 and 65535, with 65535 indicating full intensity.
+   */
+  _MEMBER_SET(green, green, guint16, guint16)
+
+  /** Sets the blue component of the color.
+   * @param value The blue component of the color. This is a value between 0 and 65535, with 65535 indicating full intensity.
+   */
+  _MEMBER_SET(blue, blue, guint16, guint16)
+
+  _WRAP_METHOD(bool parse(const Glib::ustring& spec), pango_color_parse)
+
+  _WRAP_METHOD(Glib::ustring to_string() const, pango_color_to_string)
+};
+
+} /* namespace Pango */
diff --git a/pango/src/context.ccg b/pango/src/context.ccg
new file mode 100644 (file)
index 0000000..3d50764
--- /dev/null
@@ -0,0 +1,91 @@
+/* 
+ * Copyright 1998-1999 The Gtk-- Development Team
+ * Copyright 2001      Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pango/pangocairo.h>
+
+namespace Pango
+{
+
+std::vector<Glib::RefPtr<FontFamily>> Context::list_families() const
+{
+  //Get array:
+  PangoFontFamily** pFamilies = nullptr;
+  int n_families = 0;
+  pango_context_list_families(const_cast<PangoContext*>(gobj()), &pFamilies, &n_families);
+  
+  return Glib::ArrayHandler<Glib::RefPtr<FontFamily>>::array_to_vector
+      (pFamilies, n_families, Glib::OWNERSHIP_SHALLOW);
+}
+
+Pango::FontMetrics Context::get_metrics(const FontDescription& desc) const
+{
+  return FontMetrics(pango_context_get_metrics(const_cast<PangoContext*>(gobj()), desc.gobj(), nullptr));
+}
+
+struct ItemTraits
+{
+  typedef Pango::Item       CppType;
+  typedef const PangoItem*  CType;
+  typedef PangoItem*        CTypeNonConst;
+
+  static CType   to_c_type      (const CppType& obj) { return obj.gobj(); }
+  static CType   to_c_type      (CType ptr) { return ptr; }
+  static CppType to_cpp_type    (CType ptr) { return CppType(const_cast<CTypeNonConst>(ptr), true); }
+  static void    release_c_type (CType ptr) { pango_item_free(const_cast<CTypeNonConst>(ptr)); }
+};
+
+using ListHandler_Item = Glib::ListHandler<Item, ItemTraits>;
+
+std::vector<Item> Context::itemize(const Glib::ustring& text, const AttrList& attrs) const
+{
+  return ListHandler_Item::list_to_vector(
+      pango_itemize(const_cast<PangoContext*>(gobj()),
+                    text.c_str(), 0, text.bytes(),
+                    const_cast<PangoAttrList*>(attrs.gobj()), nullptr),
+      Glib::OWNERSHIP_DEEP);
+}
+
+std::vector<Item> Context::itemize(const Glib::ustring& text, int start_index, int length,
+                                 const AttrList& attrs, AttrIter& cached_iter) const
+{
+  return ListHandler_Item::list_to_vector(
+      pango_itemize(const_cast<PangoContext*>(gobj()),
+                    text.c_str(), start_index, length,
+                    const_cast<PangoAttrList*>(attrs.gobj()), cached_iter.gobj()),
+      Glib::OWNERSHIP_DEEP);
+}
+
+void Context::update_from_cairo_context(const Cairo::RefPtr<Cairo::Context>& context)
+{
+  pango_cairo_update_context(context->cobj(), gobj());
+}
+
+Matrix Context::get_matrix() const
+{
+  const auto* matrix = pango_context_get_matrix(const_cast<PangoContext*>(gobj()));
+  if(matrix)
+    return *matrix;
+  else
+  {
+    PangoMatrix identity_transform = PANGO_MATRIX_INIT;
+    return identity_transform;
+  }
+}
+
+} /* namespace Pango */
diff --git a/pango/src/context.hg b/pango/src/context.hg
new file mode 100644 (file)
index 0000000..3eddfa4
--- /dev/null
@@ -0,0 +1,174 @@
+/* context.h
+ * 
+ * Copyright (C) 1998-1999 The gtkmm Development Team 
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#include <glibmm/object.h>
+#include <pangomm/fontdescription.h>
+#include <pangomm/fontmetrics.h>
+#include <pangomm/fontset.h>
+#include <pangomm/fontmap.h>
+#include <pangomm/item.h>
+#include <pangomm/attrlist.h>
+#include <pangomm/types.h> //For Matrix
+#include <pango/pango.h>
+#include <cairomm/context.h>
+#include <cairomm/fontoptions.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/object_p.h)
+
+namespace Pango
+{
+
+_WRAP_ENUM(Direction, PangoDirection, decl_prefix PANGOMM_API)
+_WRAP_ENUM(GravityHint, PangoGravityHint, decl_prefix PANGOMM_API)
+
+
+/** A Pango::Context stores global information used to control the itemization process.
+ * You can retrieve a Pango::Context object with Gtk::Widget::create_pango_context() or
+ * Gtk::Widget::get_pango_context(). If you don't use gtkmm call some c function of the
+ * pango backend you intend to use and create a wrapper for the returned context,
+ * e.g. Glib::wrap(pango_x_get_context()).
+ *
+ * Creating a Pango::Context object is the starting point of every rendering process.
+ * You can either use it to create a high level Pango::Layout object which does all
+ * the hard work for you by passing it into
+ * Pango::Layout::create() or to generate glyph strings from character strings with
+ * the help of itemize() and Pango::Item::shape() subsequently.
+ *
+ * Which fonts are used for rendering can be influenced by setting the default
+ * font description, language and base direction of the context.
+ *
+ * If you want to calculate the space some text will need to be displayed you
+ * might find the functions of Pango::FontMetrics useful. Use get_metrics() to
+ * obtain the Pango::FontMetrics object for a specific Pango::FontDescription.
+ * For more detailed calculations in a rendering-system-independant manner
+ * and to determine whether specific characters can be represented by the
+ * font that would be used for a specific Pango::FontDescription load a
+ * Pango::Fontset with load_fontset() (load_font() returns the Pango::Font
+ * that is the closest match for a Pango::FontDescription; however that's not
+ * necessarily the font that will be used for rendering).
+ */
+class PANGOMM_API Context : public Glib::Object
+{
+   _CLASS_GOBJECT(Context, PangoContext, PANGO_CONTEXT, Glib::Object, GObject, , , PANGOMM_API)
+   _IGNORE(pango_context_set_font_map) //PANGO_ENABLE_BACKEND
+   _IGNORE(pango_context_list_families)
+protected:
+  _CTOR_DEFAULT
+  _IGNORE(pango_context_new)
+  
+public:
+  /** List all available font families for a context.
+   * You can specify one of these as your desired font family in the Pango::FontDesciption
+   * objects you use, e.g. in the default font description of the context.
+   * @return An array of Pango::FontFamily objects.
+   */
+  std::vector<Glib::RefPtr<FontFamily>> list_families() const;
+  
+  _IGNORE(pango_context_changed)
+
+  _WRAP_METHOD(void set_font_map(const Glib::RefPtr<FontMap>& font_map), pango_context_set_font_map)
+
+  _WRAP_METHOD(Glib::RefPtr<FontMap> get_font_map(), pango_context_get_font_map, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const FontMap> get_font_map() const, pango_context_get_font_map, refreturn, constversion)
+
+  _WRAP_METHOD(guint get_serial() const, pango_context_get_serial)
+
+  _WRAP_METHOD(Glib::RefPtr<Font> load_font(const FontDescription& desc) const, pango_context_load_font)
+  _WRAP_METHOD(Glib::RefPtr<Fontset> load_fontset(const FontDescription& desc, const Language& language) const, pango_context_load_fontset)
+
+  /** Get overall metric information for a particular font description.
+   * The metrics may be substantially different for different scripts. However this
+   * function overload returns the metrics of the entire font.
+   * @param desc A Pango::FontDescription object.
+   * @return A Pango::FontMetrics object.
+   */
+  FontMetrics get_metrics(const FontDescription& desc) const;
+  _WRAP_METHOD(FontMetrics get_metrics(const FontDescription& desc, const Language& language) const, pango_context_get_metrics)
+  _WRAP_METHOD(void set_font_description(const FontDescription& desc), pango_context_set_font_description)
+  _WRAP_METHOD(FontDescription get_font_description() const, pango_context_get_font_description)
+  _WRAP_METHOD(Language get_language() const, pango_context_get_language)
+  _WRAP_METHOD(void set_language(const Language& language), pango_context_set_language)
+  _WRAP_METHOD(void set_base_dir(Direction direction), pango_context_set_base_dir)
+  _WRAP_METHOD(Direction get_base_dir() const, pango_context_get_base_dir)
+
+  _WRAP_METHOD(void set_base_gravity(Gravity gravity), pango_context_set_base_gravity)
+  _WRAP_METHOD(Gravity get_base_gravity() const, pango_context_get_base_gravity)
+  _WRAP_METHOD(Gravity get_gravity() const, pango_context_get_gravity)
+  _WRAP_METHOD(void set_gravity_hint(GravityHint hint), pango_context_set_gravity_hint)
+  _WRAP_METHOD(GravityHint get_gravity_hint() const, pango_context_get_gravity_hint)
+
+  _WRAP_METHOD(void set_matrix(const Matrix& matrix), pango_context_set_matrix)
+
+  Matrix get_matrix() const;
+  _IGNORE(pango_context_get_matrix)
+
+  /** Breaks a piece of text into segments with consistent directional level and shaping engine.
+   * Each byte of @a 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).
+   * @param text The text to itemize.
+   * @param attrs The set of attributes that apply.
+   * @return A list of Pango::Item objects.
+   */
+  std::vector<Item> itemize(const Glib::ustring& text, const AttrList& attrs) const;
+
+  /** Breaks a piece of text into segments with consistent directional level and shaping engine.
+   * Each byte of @a 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).
+   *
+   * @a cached_iter should be an iterator over @a attrs currently positioned at a range before
+   * or containing @a start_index. @a cached_iter will be advanced to the range covering the
+   * position just after @a start_index + @a length. (i.e. if itemizing in a loop, just keep
+   * passing in the same @a cached_iter).
+   *
+   * @param text The text to itemize.
+   * @param start_index First byte in @a text to process.
+   * @param length The number of bytes (not characters) to process after @a start_index. This must be >= <tt>0</tt>.
+   * @param attrs The set of attributes that apply to @a text.
+   * @param cached_iter Cached attribute iterator.
+   * @return A list of Pango::Item structures.
+   */
+  std::vector<Item> itemize(const Glib::ustring& text, int start_index, int length,
+                          const AttrList& attrs, AttrIter& cached_iter) const;
+
+  /** Updates a Pango Context 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.
+   *
+   * @param context A Cairo context, from CairoFontMap::create_context().
+   */
+  void update_from_cairo_context(const Cairo::RefPtr<Cairo::Context>& context);
+
+
+  _WRAP_METHOD(void set_cairo_font_options(const Cairo::FontOptions& options), pango_cairo_context_set_font_options)
+
+#m4 _CONVERSION(`const cairo_font_options_t*',`Cairo::FontOptions',`Cairo::FontOptions(const_cast< cairo_font_options_t*>($3), false /* take_copy */)')
+  _WRAP_METHOD(Cairo::FontOptions get_font_options() const, pango_cairo_context_get_font_options)
+
+  _WRAP_METHOD(void set_resolution(double dpi), pango_cairo_context_set_resolution)
+  _WRAP_METHOD(double get_resolution() const, pango_cairo_context_get_resolution)
+
+};
+
+} /* namespace Pango */
diff --git a/pango/src/coverage.ccg b/pango/src/coverage.ccg
new file mode 100644 (file)
index 0000000..7100696
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright 1998-1999 The Gtk-- Development Team
+ * Copyright 2001      Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+using Level = Pango::Coverage::Level;
diff --git a/pango/src/coverage.hg b/pango/src/coverage.hg
new file mode 100644 (file)
index 0000000..b73147d
--- /dev/null
@@ -0,0 +1,50 @@
+/* coverage.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_CONFIGINCLUDE(pangommconfig.h)
+
+#include <glibmm/value.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+/** A Pango::Coverage represents a map from ISO-10646 character point to Pango::Coverage::Level.
+ * 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. Pango::Coverage holds this information.
+ */
+class PANGOMM_API Coverage final
+{
+  _CLASS_OPAQUE_REFCOUNTED(Coverage, PangoCoverage, pango_coverage_new, pango_coverage_ref, pango_coverage_unref, PANGOMM_API)
+  _IGNORE(pango_coverage_ref, pango_coverage_unref)
+  _IGNORE(pango_coverage_copy) //pango ref doc: "This function may now be unecessary since we refcount the structure. Mail otaylor redhat.com if you use it."
+  _IGNORE(pango_coverage_to_bytes, pango_coverage_from_bytes, pango_coverage_max)dnl// deprecated
+
+public:
+  _WRAP_ENUM(Level, PangoCoverageLevel, decl_prefix PANGOMM_API)
+
+  //_WRAP_METHOD(Glib::RefPtr<Coverage> copy() const, pango_coverage_copy) //see above
+
+  _WRAP_METHOD(Level get(int index) const, pango_coverage_get)
+  _WRAP_METHOD(void set(int index, Level level), pango_coverage_set)
+};
+
+} // namespace Pango
diff --git a/pango/src/filelist.am b/pango/src/filelist.am
new file mode 100644 (file)
index 0000000..68ec6a0
--- /dev/null
@@ -0,0 +1,39 @@
+## This file is part of pangomm.
+
+files_defs =                   \
+       pango.defs              \
+       pango_methods.defs      \
+       pango_enums.defs        \
+       pango_vfuncs.defs       \
+       pango_extra_objects.defs \
+       pango_docs.xml          \
+       pango_docs_override.xml
+
+files_hg =                     \
+       attributes.hg           \
+       attriter.hg             \
+       attrlist.hg             \
+       cairofontmap.hg         \
+       color.hg                \
+       context.hg              \
+       coverage.hg             \
+       font.hg                 \
+       fontdescription.hg      \
+       fontface.hg             \
+       fontfamily.hg           \
+       fontmap.hg              \
+       fontmetrics.hg          \
+       fontset.hg              \
+       glyph.hg                \
+       glyphitem.hg            \
+       glyphstring.hg          \
+       item.hg                 \
+       language.hg             \
+       layout.hg               \
+       layoutiter.hg           \
+       layoutline.hg           \
+       rectangle.hg            \
+       renderer.hg             \
+       tabarray.hg
+
+files_ccg = $(files_hg:.hg=.ccg)
diff --git a/pango/src/font.ccg b/pango/src/font.ccg
new file mode 100644 (file)
index 0000000..256569d
--- /dev/null
@@ -0,0 +1,45 @@
+/* 
+ * Copyright 1998-1999 The Gtk-- Development Team
+ * Copyright 2001      Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/fontface.h>
+#include <pangomm/fontmap.h>
+
+namespace Pango
+{
+
+FontMetrics Font::get_metrics() const
+{
+  return FontMetrics(pango_font_get_metrics(const_cast<PangoFont*>(gobj()), 0));
+}
+
+Rectangle Font::get_glyph_ink_extents(Glyph glyph) const
+{
+  Rectangle ink_rect;
+  pango_font_get_glyph_extents(const_cast<PangoFont*>(gobj()), glyph, ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle Font::get_glyph_logical_extents(Glyph glyph) const
+{
+  Rectangle logical_rect;
+  pango_font_get_glyph_extents(const_cast<PangoFont*>(gobj()), glyph, 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+} /* namespace Pango */
diff --git a/pango/src/font.hg b/pango/src/font.hg
new file mode 100644 (file)
index 0000000..66e0126
--- /dev/null
@@ -0,0 +1,95 @@
+/* font.h
+ * 
+ * Copyright (C) 1998-1999 The gtkmm Development Team 
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#include <glibmm/object.h>
+#include <pangomm/rectangle.h>
+#include <pangomm/language.h>
+#include <pangomm/glyph.h>
+#include <pangomm/fontdescription.h>
+#include <pangomm/fontmetrics.h>
+#include <pangomm/coverage.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/object_p.h)
+
+namespace Pango
+{
+
+const int    SCALE          = 1024;
+const double SCALE_XX_SMALL = 0.5787037037037;
+const double SCALE_X_SMALL  = 0.6444444444444;
+const double SCALE_SMALL    = 0.8333333333333;
+const double SCALE_MEDIUM   = 1.0;
+const double SCALE_LARGE    = 1.2;
+const double SCALE_X_LARGE  = 1.4399999999999;
+const double SCALE_XX_LARGE = 1.728;
+
+#ifndef DOXYGEN_SHOULD_SKIP_THIS
+class PANGOMM_API FontFace;
+class PANGOMM_API FontMap;
+#endif //DOXYGEN_SHOULD_SKIP_THIS
+
+/** A Pango::Font is used to represent a font in a rendering-system-independent matter.
+ */
+class PANGOMM_API Font : public Glib::Object
+{
+  _CLASS_GOBJECT(Font, PangoFont, PANGO_FONT, Glib::Object, GObject, , , PANGOMM_API)
+  _IGNORE(pango_font_find_shaper) // Deprecated
+
+public:
+  _WRAP_METHOD(FontDescription describe() const, pango_font_describe)
+  _WRAP_METHOD(FontDescription describe_with_absolute_size() const, pango_font_describe_with_absolute_size)
+  _WRAP_METHOD(Glib::RefPtr<Coverage> get_coverage(const Language& language) const, pango_font_get_coverage)
+
+  /** Gets overall metric information for a font.
+   * The metrics may be substantially different for different scripts.
+   * However, this function overload returns the metrics for the entire font.
+   */
+  FontMetrics get_metrics() const;
+  _WRAP_METHOD(FontMetrics get_metrics(const Language& language) const, pango_font_get_metrics)
+
+  _WRAP_METHOD(void get_glyph_extents(Glyph glyph, Rectangle& ink_rect, Rectangle& logical_rect) const, pango_font_get_glyph_extents)
+
+  _WRAP_METHOD(Glib::RefPtr<FontMap> get_font_map(), pango_font_get_font_map)
+  _WRAP_METHOD(Glib::RefPtr<const FontMap> get_font_map() const, pango_font_get_font_map, constversion)
+
+  _WRAP_METHOD(Glib::RefPtr<FontFace> get_face(), pango_font_get_face, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const FontFace> get_face() const, pango_font_get_face, refreturn, constversion)
+
+  _WRAP_METHOD(bool has_char(gunichar wc) const, pango_font_has_char)
+
+  /** Get the ink extents of a glyph within the font.
+   * @param glyph The glyph index.
+   * @return The extents of the glyph as drawn.
+   */
+  Rectangle get_glyph_ink_extents(Glyph glyph) const;
+
+  /** Gets the logical extents of a glyph within the font.
+   * @param glyph The glyph index.
+   * @return The logical extents of the glyph.
+   */
+  Rectangle get_glyph_logical_extents(Glyph glyph) const;
+
+// PangoFontClass is hidden when PANGO_DISABLE_DEPRECATED is defined.
+// Don't wrap vfuncs.
+};
+
+} /* namespace Pango */
diff --git a/pango/src/fontdescription.ccg b/pango/src/fontdescription.ccg
new file mode 100644 (file)
index 0000000..bd7bb09
--- /dev/null
@@ -0,0 +1,35 @@
+// -*- c++ -*-
+/* $Id: fontdescription.ccg,v 1.1 2003/01/21 13:41:03 murrayc Exp $ */
+
+/*
+ *
+ * Copyright 1998-2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm/utility.h>
+
+
+namespace Pango
+{
+
+FontDescription::FontDescription(const Glib::ustring& font_name)
+{
+  gobject_ = pango_font_description_from_string(font_name.c_str());
+}
+
+} // namespace Pango
+
diff --git a/pango/src/fontdescription.hg b/pango/src/fontdescription.hg
new file mode 100644 (file)
index 0000000..340457b
--- /dev/null
@@ -0,0 +1,103 @@
+/* fontdescription.h
+ *
+ * Copyright (C) 1998-2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_CONFIGINCLUDE(pangommconfig.h)
+
+#include <glibmm/value.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+_WRAP_ENUM(Style, PangoStyle, decl_prefix PANGOMM_API)
+_WRAP_ENUM(Variant, PangoVariant, decl_prefix PANGOMM_API)
+_WRAP_ENUM(Stretch, PangoStretch, decl_prefix PANGOMM_API)
+_WRAP_ENUM(Weight, PangoWeight, CONV_TO_INT, decl_prefix PANGOMM_API)
+_WRAP_ENUM(FontMask, PangoFontMask, decl_prefix PANGOMM_API)
+_WRAP_ENUM(Gravity, PangoGravity, decl_prefix PANGOMM_API)
+
+/** A Pango::FontDescription represents the description of an ideal font.
+ * It is used both to list what fonts are available on the system and also for specifying the characteristics of a font to load.
+ */
+class PANGOMM_API FontDescription
+{
+  _CLASS_BOXEDTYPE(FontDescription, PangoFontDescription, pango_font_description_new, pango_font_description_copy, pango_font_description_free, PANGOMM_API)
+  _IGNORE(pango_font_description_free, pango_font_description_copy, pango_font_description_copy_static, pango_font_description_equal)
+
+  /* These functions are dangerous! The first casts the "const" from the parameter away
+   * copying the pointer and keep it hanging around.
+   * So desc.set_family_static("some_family") would lead to a segfault.
+   * The latter makes a shallow copy of the parameter's "family" data member.
+   * So if the FontDescription you passed in dies, a pointer to its (deleted)
+   * family data member still hangs around!
+   * This is why we can't wrap these functions!
+   */
+  _IGNORE(pango_font_description_set_family_static, pango_font_description_merge_static)
+
+public:
+  /** Constructs a font description from a string representation.
+   * @a font_name must have 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,
+   * or stretch, and SIZE is an decimal number (size in points). 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 0. 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.
+   * @param font_name String representation of a font description.
+   */
+  explicit FontDescription(const Glib::ustring& font_name);
+
+  _WRAP_METHOD(guint hash() const, pango_font_description_hash)
+  _WRAP_METHOD(void set_family(const Glib::ustring& family), pango_font_description_set_family)
+  _WRAP_METHOD(Glib::ustring get_family() const, pango_font_description_get_family)
+  _WRAP_METHOD(void set_style(Style style), pango_font_description_set_style)
+  _WRAP_METHOD(Style get_style() const, pango_font_description_get_style)
+  _WRAP_METHOD(void set_variant(Variant variant),pango_font_description_set_variant)
+  _WRAP_METHOD(Variant get_variant() const, pango_font_description_get_variant)
+  _WRAP_METHOD(void set_weight(Weight weight), pango_font_description_set_weight)
+  _WRAP_METHOD(Weight get_weight() const, pango_font_description_get_weight)
+  _WRAP_METHOD(void set_stretch(Stretch stretch), pango_font_description_set_stretch)
+  _WRAP_METHOD(Stretch get_stretch() const, pango_font_description_get_stretch)
+  _WRAP_METHOD(void set_size(int size), pango_font_description_set_size)
+  _WRAP_METHOD(int get_size() const, pango_font_description_get_size)
+  _WRAP_METHOD(void set_absolute_size(double size), pango_font_description_set_absolute_size)
+  _WRAP_METHOD(bool get_size_is_absolute() const, pango_font_description_get_size_is_absolute)
+  _WRAP_METHOD(void set_gravity(Gravity gravity), pango_font_description_set_gravity)
+  _WRAP_METHOD(Gravity get_gravity() const, pango_font_description_get_gravity)
+  _IGNORE(pango_font_description_set_variations_static)
+  _WRAP_METHOD(void set_variations(const Glib::ustring& settings), pango_font_description_set_variations)
+  _WRAP_METHOD(Glib::ustring get_variations() const, pango_font_description_get_variations)
+  _WRAP_METHOD(FontMask get_set_fields() const, pango_font_description_get_set_fields)
+  _WRAP_METHOD(void unset_fields(FontMask to_unset), pango_font_description_unset_fields)
+  _WRAP_METHOD(void merge(const FontDescription& desc_to_merge, bool replace_existing), pango_font_description_merge)
+  _WRAP_METHOD(bool better_match(const FontDescription& old_match, const FontDescription& new_match) const, pango_font_description_better_match)
+  _WRAP_METHOD(Glib::ustring to_string() const, pango_font_description_to_string)
+  _WRAP_METHOD(Glib::ustring to_filename() const, pango_font_description_to_filename)
+
+#m4begin
+  _WRAP_EQUAL(pango_font_description_equal, , PANGOMM_API)
+#m4end
+};
+
+} //namespace Pango
+
diff --git a/pango/src/fontface.ccg b/pango/src/fontface.ccg
new file mode 100644 (file)
index 0000000..60327da
--- /dev/null
@@ -0,0 +1,33 @@
+/* 
+ * Copyright 1998-2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/fontfamily.h>
+
+namespace Pango
+{
+
+std::vector<int> FontFace::list_sizes() const
+{
+  int* sizes = nullptr;
+  int n_sizes = 0;
+  pango_font_face_list_sizes(const_cast<PangoFontFace*>(gobj()), &sizes, &n_sizes);
+
+  return Glib::ArrayHandler<int>::array_to_vector(sizes, n_sizes, Glib::OWNERSHIP_SHALLOW); //The ArrayHandle will free the array.
+}
+
+} //namespace Pango
diff --git a/pango/src/fontface.hg b/pango/src/fontface.hg
new file mode 100644 (file)
index 0000000..086fa0d
--- /dev/null
@@ -0,0 +1,56 @@
+/* fontface.h
+ * 
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/fontdescription.h>
+#include <glibmm/object.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/object_p.h)
+
+namespace Pango
+{
+class PANGOMM_API FontFamily;
+
+/** A Pango::FontFace is used to represent a group of fonts with the same family, slant, weight, width, but varying sizes.
+ */
+class PANGOMM_API FontFace : public Glib::Object
+{
+   _CLASS_GOBJECT(FontFace, PangoFontFace, PANGO_FONT_FACE, Glib::Object, GObject, , , PANGOMM_API)
+
+public:
+  _WRAP_METHOD(FontDescription describe() const, pango_font_face_describe)
+  _WRAP_METHOD(Glib::ustring get_name() const, pango_font_face_get_face_name)
+
+  /** List the available sizes for a font. This is only applicable to bitmap fonts. 
+   * For scalable fonts this returns an empty array. 
+   * The sizes returned are in Pango units and are sorted in ascending order.
+   */
+  std::vector<int> list_sizes() const;
+  _IGNORE(pango_font_face_list_sizes)
+
+  _WRAP_METHOD(bool is_synthesized() const, pango_font_face_is_synthesized)
+  _WRAP_METHOD(Glib::RefPtr<FontFamily> get_family(), pango_font_face_get_family, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const FontFamily> get_family() const, pango_font_face_get_family, refreturn, constversion)
+  
+// PangoFontFaceClass is hidden when PANGO_DISABLE_DEPRECATED is defined.
+// Don't wrap vfuncs.
+};
+
+} /* namespace Pango */
diff --git a/pango/src/fontfamily.ccg b/pango/src/fontfamily.ccg
new file mode 100644 (file)
index 0000000..2c68b1f
--- /dev/null
@@ -0,0 +1,38 @@
+// -*- c++ -*-
+/* $Id: fontfamily.ccg,v 1.1 2003/01/21 13:41:03 murrayc Exp $ */
+
+/* 
+ *
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Pango
+{
+
+std::vector<Glib::RefPtr<FontFace>> FontFamily::list_faces() const
+{
+  //Get the array:
+  PangoFontFace** pFontFaces = nullptr;
+  int n_fonts = 0;
+  pango_font_family_list_faces(const_cast<PangoFontFamily*>(gobj()), &pFontFaces, &n_fonts);
+
+  return Glib::ArrayHandler<Glib::RefPtr<FontFace>>::array_to_vector(pFontFaces, n_fonts, Glib::OWNERSHIP_SHALLOW);
+}
+
+} /* namespace Pango */
+
+
diff --git a/pango/src/fontfamily.hg b/pango/src/fontfamily.hg
new file mode 100644 (file)
index 0000000..62ae2ce
--- /dev/null
@@ -0,0 +1,74 @@
+/* fontfamily.h
+ * 
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm/object.h>
+#include <giomm/listmodel.h>
+#include <pangomm/fontface.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/object_p.h)
+
+namespace Pango
+{
+
+/** A Pango::FontFamily 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.
+ */
+class PANGOMM_API FontFamily : public Glib::Object, public Gio::ListModel
+{
+   _CLASS_GOBJECT(FontFamily, PangoFontFamily, PANGO_FONT_FAMILY, Glib::Object, GObject, , , PANGOMM_API)
+   _IMPLEMENTS_INTERFACE(Gio::ListModel)
+   _IGNORE(pango_font_family_list_faces)
+
+public:
+  /** 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.
+   * @return an array of pointers to Pango::FontFace objects.
+   */
+  std::vector<Glib::RefPtr<FontFace>> list_faces() const;
+
+  _WRAP_METHOD(Glib::ustring get_name() const, pango_font_family_get_name)
+  _WRAP_METHOD(bool is_monospace() const, pango_font_family_is_monospace)
+  _WRAP_METHOD(bool is_variable() const, pango_font_family_is_variable)
+
+  _WRAP_METHOD(Glib::RefPtr<FontFace> get_face(const Glib::ustring& name{NULL} = {}),
+    pango_font_family_get_face, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const FontFace> get_face(const Glib::ustring& name{NULL} = {}) const,
+    pango_font_family_get_face, refreturn, constversion)
+
+// PangoFontFamilyClass is hidden when PANGO_DISABLE_DEPRECATED is defined.
+// Don't wrap vfuncs.
+};
+
+/*
+struct FontFamilyRefPtrTraits
+{
+  typedef Glib::RefPtr<FontFamily> CppType;
+  typedef PangoFontFamily *        CType;
+  typedef PangoFontFamily *        CTypeNonConst;
+
+  static CType   to_c_type      (const CppType& ptr) { return Glib::unwrap (ptr);                   }
+  static CType   to_c_type      (CType          ptr) { return ptr;                                  }
+  static CppType to_cpp_type    (CType          ptr) { return FontFamily::wrap_specific_type (ptr); }
+  static void    release_c_type (CType          ptr) { g_object_unref (ptr);                        }
+};
+*/
+
+} // namespace Pango
diff --git a/pango/src/fontmap.ccg b/pango/src/fontmap.ccg
new file mode 100644 (file)
index 0000000..e4d9ea6
--- /dev/null
@@ -0,0 +1,46 @@
+/* 
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/cairofontmapimpl.h>
+#include <pangomm/context.h>
+#include <pango/pangocairo.h>
+
+namespace Pango
+{
+
+// Custom wrap_new() because we want to create
+// a CairoFontMapImpl if the underlying C class implements the PangoCairoFontMap interface.
+Glib::ObjectBase* FontMap_Class::wrap_new(GObject* object)
+{
+  if (PANGO_IS_CAIRO_FONT_MAP(object))
+     return new CairoFontMapImpl((PangoFontMap*)object);
+  return new FontMap((PangoFontMap*)object);
+}
+
+std::vector<Glib::RefPtr<FontFamily>> FontMap::list_families() const
+{
+  //Get the array:
+  PangoFontFamily** pFamilies = nullptr;
+  int n_families = 0;
+  pango_font_map_list_families(const_cast<PangoFontMap*>(gobj()), &pFamilies, &n_families);
+
+  return Glib::ArrayHandler<Glib::RefPtr<FontFamily>>::array_to_vector
+      (pFamilies, n_families, Glib::OWNERSHIP_SHALLOW);
+}
+
+} /* namespace Pango */
diff --git a/pango/src/fontmap.hg b/pango/src/fontmap.hg
new file mode 100644 (file)
index 0000000..cd6c1a3
--- /dev/null
@@ -0,0 +1,70 @@
+/* fontmap.h
+ *
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm/object.h>
+#include <giomm/listmodel.h>
+#include <pangomm/font.h>
+#include <pangomm/fontset.h>
+#include <pangomm/fontfamily.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/object_p.h)
+
+namespace Pango
+{
+
+class PANGOMM_API Context;
+
+/** A %Pango::FontMap represents the set of fonts available for a particular rendering system.
+ *
+ * This is an abstract base class with implementations being specific to
+ * particular rendering systems.
+ *
+ * @see Pango::CairoFontMap::get_default()
+ */
+class PANGOMM_API FontMap : public Glib::Object, public Gio::ListModel
+{
+  _CLASS_GOBJECT(FontMap, PangoFontMap, PANGO_FONT_MAP, Glib::Object, GObject, , , PANGOMM_API)
+  _IMPLEMENTS_INTERFACE(Gio::ListModel)
+  _CUSTOM_WRAP_NEW
+  _IGNORE(pango_font_map_list_families)
+
+public:
+  _WRAP_METHOD(Glib::RefPtr<Font> load_font(const Glib::RefPtr<Context>& context, const FontDescription& desc) const, pango_font_map_load_font)
+  _WRAP_METHOD(Glib::RefPtr<Fontset> load_fontset(const Glib::RefPtr<Context>& context, const FontDescription& desc, const Language& language) const, pango_font_map_load_fontset)
+
+  _WRAP_METHOD(Glib::RefPtr<Context> create_context(), pango_font_map_create_context)
+
+  /** List all families for the fontmap.
+   * @return an array of pointers to Pango::FontFamily objects.
+   */
+  std::vector<Glib::RefPtr<FontFamily>> list_families() const;
+
+  _WRAP_METHOD(guint get_serial() const, pango_font_map_get_serial)
+
+  _IGNORE(pango_font_map_changed)dnl// Shall not be used by applications
+
+  _WRAP_METHOD(Glib::RefPtr<FontFamily> get_family(const Glib::ustring& name),
+    pango_font_map_get_family, refreturn, newin "2,50")
+  _WRAP_METHOD(Glib::RefPtr<const FontFamily> get_family(const Glib::ustring& name) const,
+    pango_font_map_get_family, refreturn, constversion, newin "2,50")
+};
+
+} /* namespace Pango */
diff --git a/pango/src/fontmetrics.ccg b/pango/src/fontmetrics.ccg
new file mode 100644 (file)
index 0000000..60f0241
--- /dev/null
@@ -0,0 +1,22 @@
+// -*- c++ -*-
+/* $Id: fontmetrics.ccg,v 1.1 2003/01/21 13:41:04 murrayc Exp $ */
+
+/*
+ *
+ * Copyright 1998-1999 The Gtk-- Development Team
+ * Copyright 2001      Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
diff --git a/pango/src/fontmetrics.hg b/pango/src/fontmetrics.hg
new file mode 100644 (file)
index 0000000..869f0a1
--- /dev/null
@@ -0,0 +1,50 @@
+/* fontmetrics.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_CONFIGINCLUDE(pangommconfig.h)
+
+#include <glibmm/value.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+/** A Pango::FontMetrics holds the overall metric information for a font (possibly restricted to a script).
+ */
+class PANGOMM_API FontMetrics
+{
+  _CLASS_BOXEDTYPE(FontMetrics, PangoFontMetrics, NONE, pango_font_metrics_ref, pango_font_metrics_unref, PANGOMM_API)
+  _IGNORE(pango_font_metrics_unref, pango_font_metrics_ref)
+public:
+  _WRAP_METHOD(int get_ascent() const, pango_font_metrics_get_ascent)
+  _WRAP_METHOD(int get_descent() const, pango_font_metrics_get_descent)
+  _WRAP_METHOD(int get_height() const, pango_font_metrics_get_height)
+  _WRAP_METHOD(int get_approximate_char_width() const, pango_font_metrics_get_approximate_char_width)
+  _WRAP_METHOD(int get_approximate_digit_width() const, pango_font_metrics_get_approximate_digit_width)
+
+  _WRAP_METHOD(int get_underline_position() const, pango_font_metrics_get_underline_position)
+  _WRAP_METHOD(int get_underline_thickness() const, pango_font_metrics_get_underline_thickness)
+  _WRAP_METHOD(int get_strikethrough_position() const, pango_font_metrics_get_strikethrough_position)
+  _WRAP_METHOD(int get_strikethrough_thickness() const, pango_font_metrics_get_strikethrough_thickness)
+
+};
+
+} //namespace Pango
diff --git a/pango/src/fontset.ccg b/pango/src/fontset.ccg
new file mode 100644 (file)
index 0000000..f02a660
--- /dev/null
@@ -0,0 +1,45 @@
+/* 
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+static gboolean fontset_foreach_callback(PangoFontset* /* fontset */, PangoFont* font, gpointer data)
+{
+  try
+  {
+    auto& slot = *static_cast<Pango::Fontset::ForeachSlot*>(data);
+    auto cppFont = Glib::wrap(font, true /* take_copy */);
+
+    return slot(cppFont);
+  }
+  catch(...)
+  {
+    Glib::exception_handlers_invoke();
+  }
+
+  return false; //arbitrary default
+}
+
+
+namespace Pango
+{
+
+void Fontset::foreach(const ForeachSlot& slot)
+{
+  pango_fontset_foreach(gobj(), &fontset_foreach_callback, (void*)&slot); 
+}
+           
+} //namespace
diff --git a/pango/src/fontset.hg b/pango/src/fontset.hg
new file mode 100644 (file)
index 0000000..03b36ab
--- /dev/null
@@ -0,0 +1,58 @@
+/* fontset.h
+ *
+ * Copyright 2001      The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm/object.h>
+#include <pangomm/language.h>
+#include <pangomm/font.h>
+#include <pangomm/fontmetrics.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/object_p.h)
+
+namespace Pango
+{
+
+/** A Pango::Fontset is used to represent a set of fonts.
+ */
+class PANGOMM_API Fontset : public Glib::Object
+{
+  _CLASS_GOBJECT(Fontset, PangoFontset, PANGO_FONTSET, Glib::Object, GObject, , , PANGOMM_API)
+
+public:
+  _WRAP_METHOD(Glib::RefPtr<Font> get_font(guint wc) const, pango_fontset_get_font)
+  _WRAP_METHOD(FontMetrics get_metrics() const, pango_fontset_get_metrics)
+
+  /** For instance,
+   * bool on_foreach(const Glib::RefPtr<Pango::Font>& font);
+   */
+  typedef sigc::slot<bool(const Glib::RefPtr<Font>&)> ForeachSlot;
+
+  /** Iterates through all the fonts in a fontset, calling @a slot for
+   * each one. If @a slot returns true, that stops the iteration.
+   *
+   * @since-1.4
+   *
+   * @param slot Callback function
+   */
+  void foreach(const ForeachSlot& slot);
+  _IGNORE(pango_fontset_foreach)
+};
+
+} /* namespace Pango */
diff --git a/pango/src/glyph.ccg b/pango/src/glyph.ccg
new file mode 100644 (file)
index 0000000..d175075
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2001      Free Software Foundation
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Pango
+{
+
+GlyphInfo::GlyphInfo()
+{
+  gobject_.glyph = 0;
+}
+
+
+GlyphGeometry::GlyphGeometry()
+{
+  gobject_.width = gobject_.x_offset = gobject_.y_offset = 0;
+}
+
+GlyphGeometry::GlyphGeometry(const PangoGlyphGeometry* src)
+{
+  gobject_.width = src->width;
+  gobject_.x_offset = src->x_offset;
+  gobject_.y_offset = src->y_offset;
+}
+
+
+/*GlyphVisAttr::GlyphVisAttr()
+{
+  gobject_.is_cluster_start = 0;
+}
+
+GlyphVisAttr::GlyphVisAttr(const PangoGlyphVisAttr* src)
+{
+  gobject_.is_cluster_start = src->is_cluster_start;
+}*/
+
+} //namespace Pango
+
+
+namespace Glib
+{
+
+Pango::GlyphInfo& wrap(PangoGlyphInfo* object)
+{
+  return *reinterpret_cast<Pango::GlyphInfo*>(object);
+}
+
+const Pango::GlyphInfo& wrap(const PangoGlyphInfo* object)
+{
+  return *reinterpret_cast<const Pango::GlyphInfo*>(object);
+}
+
+Pango::GlyphGeometry& wrap(PangoGlyphGeometry* object)
+{
+  return *reinterpret_cast<Pango::GlyphGeometry*>(object);
+}
+
+const Pango::GlyphGeometry& wrap(const PangoGlyphGeometry* object)
+{
+  return *reinterpret_cast<const Pango::GlyphGeometry*>(object);
+}
+
+/*Pango::GlyphVisAttr& wrap(PangoGlyphVisAttr* object)
+{
+  return *reinterpret_cast<Pango::GlyphVisAttr*>(object);
+}
+
+const Pango::GlyphVisAttr& wrap(const PangoGlyphVisAttr* object)
+{
+  return *reinterpret_cast<const Pango::GlyphVisAttr*>(object);
+}*/
+
+} //namespace Glib
diff --git a/pango/src/glyph.hg b/pango/src/glyph.hg
new file mode 100644 (file)
index 0000000..48c97f9
--- /dev/null
@@ -0,0 +1,203 @@
+/* glyph.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_CONFIGINCLUDE(pangommconfig.h)
+
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+class PANGOMM_API GlyphInfo;
+class PANGOMM_API GlyphGeometry;
+
+
+/** A Pango::Glyph represents a single glyph in the output form of a string.
+ */
+typedef PangoGlyph Glyph; //This is defined as a guint32
+
+
+/** A Pango::GlyphUnit is used to store dimensions within Pango. Dimensions are stored in 1/64ths of a point.
+ */
+typedef PangoGlyphUnit GlyphUnit;
+
+
+/** A Pango::GlyphVisAttr is used to communicate information between the shaping phase and the rendering phase. It's contents are still evolving.
+ */
+typedef PangoGlyphVisAttr GlyphVisAttr;
+
+
+/** A Pango::GlyphInfo represents a single glyph together with positioning information and visual attributes.
+ */
+class PANGOMM_API GlyphInfo
+{
+  _CLASS_GENERIC(GlyphInfo, PangoGlyphInfo)
+
+public:
+  GlyphInfo();
+
+  /** Gets the glyph itself.
+   * @return The glyph.
+   */
+  _MEMBER_GET(glyph, glyph, Glyph, PangoGlyph)
+
+  /** Gets the positional information about the glyph.
+   * @return A GylphGeometry object.
+   */
+  _MEMBER_GET(geometry, geometry, GlyphGeometry, PangoGlyphGeometry)
+
+  /** Gets the visual attributes of the glyph.
+   * @return A GlyphVisAttr structure.
+   */
+  _MEMBER_GET(attr, attr, GlyphVisAttr, PangoGlyphVisAttr)
+
+//I don't think that we need these set_* functions!
+//TODO: Who wrote this comment? Investigate. murrayc.
+  /* Sets the glyph itself.
+   * @param glyph The new glyph.
+   */
+//  _MEMBER_SET(glyph, glyph, Glyph, PangoGlyph)
+
+  /* Sets the positional information about the glyph.
+   * @param geometry A GlyphGeometry object.
+   */
+//  _MEMBER_SET(geometry, geometry, GlyphGeometry, PangoGlyphGeometry)
+
+  /* Sets the visual attributes of the glyph.
+   * @param attr A GylphVisAttr structure.
+   */
+//  _MEMBER_SET(attr, attr, GlyphVisAttr, PangoGlyphVisAttr)
+
+  /// Provides access to the underlying C GObject.
+  PangoGlyphInfo*       gobj()       { return &gobject_; }
+  /// Provides access to the underlying C GObject.
+  const PangoGlyphInfo* gobj() const { return &gobject_; }
+
+protected:
+  PangoGlyphInfo gobject_;
+};
+
+
+/** A Pango::GlyphGeometry contains width and positioning information for a single glyph. Distances are in 1/64ths of a point.
+ */
+class PANGOMM_API GlyphGeometry
+{
+  _CLASS_GENERIC(GlyphGeometry, PangoGlyphGeometry)
+
+public:
+  GlyphGeometry();
+  explicit GlyphGeometry(const PangoGlyphGeometry* src);
+
+  /** Gets the logical width to use for the character.
+   * @return The logical width.
+   */
+  _MEMBER_GET(width, width, GlyphUnit, PangoGlyphUnit)
+
+  /** Gets the horizontal offset from nominal character position.
+   * @return The horizontal offset.
+   */
+  _MEMBER_GET(x_offset, x_offset, GlyphUnit, PangoGlyphUnit)
+
+  /** Gets the vertical offset from nominal character position.
+   * @return The vertical offset.
+   */
+  _MEMBER_GET(y_offset, y_offset, GlyphUnit, PangoGlyphUnit)
+
+//I don't think that we need these set_* functions!
+  /* Sets the logical width to use for the character.
+   * @param width The new logical width.
+   */
+//  _MEMBER_SET(width, width, GlyphUnit, PangoGlyphUnit)
+
+  /* Sets the horizontal offset from nominal character position.
+   * @param x_offset The new horizontal offset.
+   */
+//  _MEMBER_SET(x_offset, x_offset, GlyphUnit, PangoGlyphUnit)
+
+  /* Sets the vertical offset from nominal character position.
+   * @param y_offset The new vertical offset.
+   */
+//  _MEMBER_SET(y_offset, y_offset, GlyphUnit, PangoGlyphUnit)
+
+  PangoGlyphGeometry*       gobj()       { return &gobject_; }
+  const PangoGlyphGeometry* gobj() const { return &gobject_; }
+
+protected:
+  PangoGlyphGeometry gobject_;
+};
+
+
+/* Since "the contents [of this struct] are still evolving" it might get necessary
+ * to create a wrapper class for PangoGlyphVisAttr in future. Currently, however,
+ * PangoGlyphVisAttr just contains one simple data field (guint is_cluster_start).
+ */
+/*class PANGOMM_API GlyphVisAttr
+{
+  _CLASS_GENERIC(GlyphVisAttr, PangoGlyphVisAttr)
+
+public:
+  GlyphVisAttr();
+  explicit GlyphVisAttr(const PangoGlyphVisAttr* src);
+
+  _MEMBER_GET(cluster_start, is_cluster_start, bool, guint)
+
+  _MEMBER_SET(cluster_start, is_cluster_start, bool, guint)
+
+  /// Provides access to the underlying C GObject.
+  PangoGlyphVisAttr*       gobj()       { return &gobject_; }
+  /// Provides access to the underlying C GObject.
+  const PangoGlyphVisAttr* gobj() const { return &gobject_; }
+
+protected:
+  PangoGlyphVisAttr gobject_;
+};*/
+
+} //namespace Pango
+
+
+namespace Glib
+{
+
+/** @relates Pango::GlyphInfo */
+PANGOMM_API
+Pango::GlyphInfo& wrap(PangoGlyphInfo* object);
+
+/** @relates Pango::GlyphInfo */
+PANGOMM_API
+const Pango::GlyphInfo& wrap(const PangoGlyphInfo* object);
+
+/** @relates Pango::GlyphGeometry */
+PANGOMM_API
+Pango::GlyphGeometry& wrap(PangoGlyphGeometry* object);
+
+/** @relates Pango::GlyphGeometry */
+PANGOMM_API
+const Pango::GlyphGeometry& wrap(const PangoGlyphGeometry* object);
+
+/* @relates Pango::GlyphVisAttr */
+//PANGOMM_API
+//Pango::GlyphVisAttr& wrap(PangoGlyphVisAttr* object);
+
+/* @relates Pango::GlyphVisAttr */
+//PANGOMM_API
+//const Pango::GlyphVisAttr& wrap(const PangoGlyphVisAttr* object);
+
+} //namespace Glib
diff --git a/pango/src/glyphitem.ccg b/pango/src/glyphitem.ccg
new file mode 100644 (file)
index 0000000..57c96e0
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/item.h>
+#include <pangomm/glyphstring.h>
diff --git a/pango/src/glyphitem.hg b/pango/src/glyphitem.hg
new file mode 100644 (file)
index 0000000..53e77f1
--- /dev/null
@@ -0,0 +1,69 @@
+/* glyphitem.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/attributes.h> //For LogAttr.
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+class PANGOMM_API Item;
+class PANGOMM_API GlyphString;
+
+/** A %Pango::GlyphItem is a pair of a Pango::Item and the glyphs
+ * resulting from shaping the text corresponding to an item.
+ *
+ * As an example of the usage of %Pango::GlyphItem, the results
+ * of shaping text with Pango::Layout is a list of Pango::LayoutLine,
+ * each of which contains a list of Pango::GlyphItem.
+ *
+ * For backward compatibility PangoLayoutRun is an alias for PangoGlyphItem
+ * in pango's C code. There is no Pango::LayoutRun in this version of pangomm.
+ *
+ * @newin{2,48}
+ */
+class PANGOMM_API GlyphItem
+{
+  _CLASS_BOXEDTYPE(GlyphItem, PangoGlyphItem, NONE, pango_glyph_item_copy, pango_glyph_item_free, PANGOMM_API)
+  _IGNORE(pango_glyph_item_free, pango_glyph_item_copy)
+
+public:
+  // pango_glyph_item_split() returns a newly created PangoGlyphItem. Don't take a copy.
+#m4 _CONVERSION(`PangoGlyphItem*',`GlyphItem',`Glib::wrap($3)')
+  _WRAP_METHOD(GlyphItem split(const Glib::ustring& text, int split_index), pango_glyph_item_split)
+
+  //This takes ownership of the GlyphItem, which is strange:
+  // _WRAP_METHOD(GSList* apply_attrs(const Glib::ustring& text, const AttrList& list), pango_glyph_item_apply_attrs)
+  _WRAP_METHOD(void letter_space(const Glib::ustring& text, const LogAttr& log_attrs,
+    int letter_spacing = 0), pango_glyph_item_letter_space)
+
+  /** Gets the Pango::Item object that provides information about the segment of text in this run.
+   * @return A Pango::Item object.
+   */
+  _MEMBER_GET(item, item, Item, PangoItem*)
+
+  /** Gets the string of glyphs obtained by shaping the text for this item.
+   * @return A Pango::GlyphString object.
+   */
+  _MEMBER_GET(glyphs, glyphs, GlyphString, PangoGlyphString*)
+};
+
+} /* namespace Pango */
diff --git a/pango/src/glyphstring.ccg b/pango/src/glyphstring.ccg
new file mode 100644 (file)
index 0000000..b8dd6ea
--- /dev/null
@@ -0,0 +1,95 @@
+/*
+ * Copyright 1998-2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm/utility.h>
+#include <pango/pangocairo.h>
+
+namespace Pango
+{
+
+GlyphString::GlyphString(const Glib::ustring& text, const Analysis& analysis)
+:
+  gobject_(pango_glyph_string_new())
+{
+  pango_shape(text.c_str(), text.bytes(), analysis.gobj(), gobj());
+}
+
+GlyphString::GlyphString(const Glib::ustring& item_text, const Glib::ustring& paragraph_text,
+  const Analysis& analysis, ShapeFlags flags)
+:
+  gobject_(pango_glyph_string_new())
+{
+  pango_shape_with_flags(item_text.c_str(), item_text.bytes(), paragraph_text.c_str(),
+   paragraph_text.bytes(), analysis.gobj(), gobj(), static_cast<PangoShapeFlags>(flags));
+}
+
+Rectangle GlyphString::get_ink_extents(const Glib::RefPtr<const Font>& font) const
+{
+  Rectangle ink_rect;
+  pango_glyph_string_extents(const_cast<PangoGlyphString*>(gobj()), const_cast<PangoFont*>(font->gobj()), ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle GlyphString::get_ink_extents(int start, int end, const Glib::RefPtr<const Font>& font) const
+{
+  Rectangle ink_rect;
+  pango_glyph_string_extents_range(const_cast<PangoGlyphString*>(gobj()), start, end, const_cast<PangoFont*>(font->gobj()), ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle GlyphString::get_logical_extents(const Glib::RefPtr<const Font>& font) const
+{
+  Rectangle logical_rect;
+  pango_glyph_string_extents(const_cast<PangoGlyphString*>(gobj()), const_cast<PangoFont*>(font->gobj()), 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+Rectangle GlyphString::get_logical_extents(int start, int end, const Glib::RefPtr<const Font>& font) const
+{
+  Rectangle logical_rect;
+  pango_glyph_string_extents_range(const_cast<PangoGlyphString*>(gobj()), start, end, const_cast<PangoFont*>(font->gobj()), 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+std::vector<int> GlyphString::get_logical_widths(const Glib::ustring& text, int embedding_level) const
+{
+  int* logical_widths = g_new(int, text.length());
+  pango_glyph_string_get_logical_widths(const_cast<PangoGlyphString*>(gobj()), text.c_str(), text.bytes(), embedding_level, logical_widths);
+  return Glib::ArrayHandler<int>::array_to_vector(logical_widths, text.length(), Glib::OWNERSHIP_SHALLOW);
+}
+
+int GlyphString::index_to_x(const Glib::ustring& text, const Analysis& analysis, int index, bool trailing) const
+{
+  int x_pos;
+  pango_glyph_string_index_to_x(const_cast<PangoGlyphString*>(gobj()), const_cast<gchar*>(text.c_str()), text.bytes(), const_cast<PangoAnalysis*>(analysis.gobj()), index, static_cast<int>(trailing), &x_pos);
+  return x_pos;
+}
+
+void GlyphString::x_to_index(const Glib::ustring& text, const Analysis& analysis, int x_pos, int& index, bool& trailing) const
+{
+  gboolean trailing_temp = FALSE;
+  pango_glyph_string_x_to_index(const_cast<PangoGlyphString*>(gobj()), const_cast<char*>(text.c_str()), text.bytes(), const_cast<PangoAnalysis*>(analysis.gobj()), x_pos, &index, &trailing_temp);
+  trailing = trailing_temp;
+}
+
+std::vector<GlyphInfo> GlyphString::get_glyphs() const
+{
+  return Glib::ArrayHandler<GlyphInfo>::array_to_vector(reinterpret_cast<GlyphInfo*>(gobj()->glyphs), gobj()->num_glyphs, Glib::OWNERSHIP_NONE);
+}
+
+} //namespace Pango
diff --git a/pango/src/glyphstring.hg b/pango/src/glyphstring.hg
new file mode 100644 (file)
index 0000000..6df1641
--- /dev/null
@@ -0,0 +1,152 @@
+/* glyphstring.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/font.h>
+#include <pangomm/glyph.h>
+#include <pangomm/item.h> // for Analysis and ShapeFlags
+#include <cairomm/context.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+/** A Pango::GlyphString is used to store strings of glyphs with geometry and visual attribute information.
+ * It can be measured or drawn to the screen.
+ */
+class PANGOMM_API GlyphString
+{
+  _CLASS_BOXEDTYPE(GlyphString, PangoGlyphString, pango_glyph_string_new, pango_glyph_string_copy, pango_glyph_string_free, PANGOMM_API)
+  _IGNORE(pango_glyph_string_free, pango_glyph_string_copy)
+  _IGNORE(pango_glyph_string_index_to_x, pango_glyph_string_x_to_index, pango_glyph_string_get_logical_widths)
+
+public:
+
+  /** Constructs a string of glyphs from a string of characters.
+   *
+   * Given a segment of text and the corresponding Pango::Analysis structure
+   * returned from Pango::Context::itemize(), convert the characters into glyphs.
+   * You may also pass in only a substring of the item.
+   *
+   * It is recommended that you use the constructor with @a item_text and
+   * @a paragraph_text parameters instead, since that API allows for shaping
+   * interaction happening across text item boundaries.
+   *
+   * @param text The text to process. You must pass the same string into those
+   *             member functions expecting a const Glib::ustring&.
+   * @param analysis The analysis information returned from Pango::Context::itemize().
+   */
+  GlyphString(const Glib::ustring& text, const Analysis& analysis);
+
+  /** Constructs a string of glyphs from a string of characters.
+   *
+   * Given a segment of text and the corresponding Pango::Analysis structure
+   * returned from Pango::Context::itemize(), convert the characters into glyphs.
+   * You may also pass in only a substring of the item.
+   *
+   * This is similar to the constructor with only one @a text parameter, except
+   * it also takes @a flags and the full paragraph text as input, which will then
+   * be used to perform certain cross-item shaping interactions. If you have
+   * access to the broader text of which @a item_text is a part, provide the
+   * broader text as @a paragraph_text.
+   *
+   * @newin{2,44}
+   *
+   * @param item_text Valid UTF-8 text to shape.
+   * @param paragraph_text Text of the paragraph (see details).
+   * @param analysis The analysis information returned from Pango::Context::itemize().
+   * @param flags Flags influencing the shaping process.
+   */
+  GlyphString(const Glib::ustring& item_text, const Glib::ustring& paragraph_text,
+    const Analysis& analysis, ShapeFlags flags = ShapeFlags::NONE);
+
+  _WRAP_METHOD(void set_size (int new_len), pango_glyph_string_set_size)
+
+  _WRAP_METHOD(void get_extents(const Glib::RefPtr<const Font>& font, Rectangle& ink_rect, Rectangle& logical_rect) const, pango_glyph_string_extents)
+  _WRAP_METHOD(void get_extents(int start, int end, const Glib::RefPtr<const Font>& font, Rectangle& ink_rect, Rectangle& logical_rect) const, pango_glyph_string_extents_range)
+
+  _WRAP_METHOD(int get_width() const, pango_glyph_string_get_width)
+
+  /** Computes the extents of the glyph string as drawn.
+   * @param font A Pango::Font.
+   * @return The extents of the glyph string as drawn.
+   */
+  Rectangle get_ink_extents(const Glib::RefPtr<const Font>& font) const;
+
+  /** Computes the extents of a sub-portion of the glyph string as drawn.
+   * @param start The start index.
+   * @param end The end index.
+   * @param font A Panog::Font
+   * @return The extents of the sub-portion of the glyph string as drawn.
+   */
+  Rectangle get_ink_extents(int start, int end, const Glib::RefPtr<const Font>& font) const;
+
+  /** Computes the logical extents of a sub-portion of the glyph string.
+   * @param font A Pango::Font.
+   * @return The logical extents of the glyph string.
+   */
+  Rectangle get_logical_extents(const Glib::RefPtr<const Font>& font) const;
+
+  /** Computes the logical extents of a sub-portion of the glyph string.
+   * @param start The start index.
+   * @param end The end index.
+   * @param font A Pango::Font.
+   * @return The logical extents of the sub-portion of the glyph string.
+   */
+  Rectangle get_logical_extents(int start, int end, const Glib::RefPtr<const Font>& font) const;
+
+  /** 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.
+   * @param text The text corresponding to the glyphs.
+   * @param embedding_level The embedding level of the string.
+   * @return An array of integers representing the resulting character widths.
+   */
+  std::vector<int> get_logical_widths(const Glib::ustring& text, int embedding_level) const;
+
+  /** 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.
+   * @param text The text corresponding to the glyphs.
+   * @param analysis The analysis information return from Pango::Context::itemize().
+   * @param index The byte index within text.
+   * @param trailing Whether we should compute the result for the beginning or end of the character.
+   * @return The x position.
+   */
+  int index_to_x(const Glib::ustring& text, const Analysis& analysis, int index, bool trailing) const;
+
+  /** 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.
+   * @param text The text corresponding to the glyphs.
+   * @param analysis The analysis information return from Pango::Context::itemize().
+   * @param x_pos The x offset (in thousands of a device unit).
+   * @param index The location to store calculated byte index within.
+   * @param trailing The location to store a boolean indicating whether the user clicked on the leading or trailing edge of the character.
+   */
+  void x_to_index(const Glib::ustring& text, const Analysis& analysis, int x_pos, int& index, bool& trailing) const;
+
+  /** Gharacter positions are computed by dividing up each cluster into equal portions.
+   * @return An array of Pango::GlyphInfo objects.
+   */
+  std::vector<GlyphInfo> get_glyphs() const;
+};
+
+} //namespace Pango
diff --git a/pango/src/item.ccg b/pango/src/item.ccg
new file mode 100644 (file)
index 0000000..9bb29c7
--- /dev/null
@@ -0,0 +1,130 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/font.h>
+#include <pangomm/attributes.h>
+#include <pangomm/glyphstring.h>
+
+namespace Pango
+{
+
+Analysis::Analysis()
+{}
+
+Analysis::Analysis(const PangoAnalysis* src)
+:
+  gobject_ (*src)
+{}
+
+std::vector<Attribute> Analysis::get_extra_attrs() const
+{
+  using SListHandler_Attribute = Glib::SListHandler<Attribute, AttributeTraits>;
+  return SListHandler_Attribute::slist_to_vector(gobj()->extra_attrs, Glib::OWNERSHIP_NONE);
+}
+
+
+Item::Item(const Item& src)
+:
+  gobject_ ((src.gobject_) ? pango_item_copy(src.gobject_) : nullptr)
+{}
+
+Item::Item(PangoItem* castitem, bool make_a_copy)
+{
+  // For BoxedType wrappers, make_a_copy is true by default.  The static
+  // BoxedType wrappers must always take a copy, thus make_a_copy = true
+  // ensures identical behaviour if the default argument is used.
+
+  if(make_a_copy)
+  {
+    if(castitem)
+      gobject_ = pango_item_copy(castitem);
+    else
+      gobject_ = nullptr;
+  }
+  else
+  {
+    // It was given to us by a function which has already made a copy for us to keep.
+    gobject_ = castitem;
+  }
+}
+
+Item& Item::operator=(const Item& src)
+{
+  auto* const new_gobject = (src.gobject_) ? pango_item_copy(src.gobject_) : nullptr;
+
+  if(gobject_)
+    pango_item_free(gobject_);
+  gobject_ = new_gobject;
+
+  return *this;
+}
+
+Item::~Item()
+{
+  if(gobject_)
+    pango_item_free(gobject_);
+}
+
+PangoItem* Item::gobj_copy() const
+{
+  return pango_item_copy(gobject_);
+}
+
+Analysis Item::get_analysis() const
+{
+  return Analysis(&gobj()->analysis);
+}
+
+Glib::ustring Item::get_segment(const Glib::ustring& text) const
+{
+  const char *const start = text.data() + gobj()->offset;
+  return Glib::ustring(start, start + gobj()->length);
+}
+
+Pango::GlyphString Item::shape(const Glib::ustring& text) const
+{
+  return GlyphString(text, get_analysis());
+}
+
+Pango::GlyphString Item::shape(const Glib::ustring& item_text,
+  const Glib::ustring& paragraph_text, ShapeFlags flags) const
+{
+  return GlyphString(item_text, paragraph_text, get_analysis(), flags);
+}
+
+} /* namespace Pango */
+
+
+namespace Glib
+{
+
+Pango::Analysis& wrap(PangoAnalysis* object)
+{
+  return *reinterpret_cast<Pango::Analysis*>(object);
+}
+
+const Pango::Analysis& wrap(const PangoAnalysis* object)
+{
+  return *reinterpret_cast<const Pango::Analysis*>(object);
+}
+
+Pango::Item wrap(PangoItem* object, bool take_copy)
+{
+  return Pango::Item(object, take_copy);
+}
+
+} /* namespace Glib */
diff --git a/pango/src/item.hg b/pango/src/item.hg
new file mode 100644 (file)
index 0000000..d388ade
--- /dev/null
@@ -0,0 +1,191 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#include <pangomm/attributes.h>
+#include <pangomm/language.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+_WRAP_ENUM(ShapeFlags, PangoShapeFlags, newin "2,44", decl_prefix PANGOMM_API)
+
+class Font;
+class GlyphString;
+
+/** A %Pango::Analysis stores information about the properties of a segment of text.
+ * %Pango::Analysis is used as an output type only so there is no public default constructor.
+ * You can retrieve an object of this type from an object of type Pango::Item by
+ * calling Pango::Item::get_analysis(). Objects of this class can be used for some
+ * calculations in Pango::GlyphString.
+ */
+class PANGOMM_API Analysis
+{
+  _CLASS_GENERIC(Analysis, PangoAnalysis)
+
+protected:
+  // This class is only used as an output type.
+  Analysis();
+
+public:
+  explicit Analysis(const PangoAnalysis* src);
+
+public:
+//  _MEMBER_GET_PTR(engine_shape, shape_engine, EngineShape*, PangoEngineShape*) //We don't wrap the Engine* stuff.
+//  _MEMBER_GET_PTR(engine_lang, lang_engine, EngineLang*, PangoEngineLang*)
+
+  /** Gets the font used to render this segment.
+   * @return The font used to render this segment.
+   */
+  _MEMBER_GET_GOBJECT(font, font, Font, PangoFont*)
+
+  /** Gets the bidrectional level for this segment.
+   * @return The bidirectional level for this segment.
+   */
+  _MEMBER_GET(level, level, guint8, guint8)
+
+  /** Gets the language of this segment.
+   * @return The language of this segment.
+   */
+  _MEMBER_GET(language, language, Language, PangoLanguage*)
+
+  /** Gets a list of non-font attributes for this segment.
+   * @return A list of non-font attributes for this segment.
+   */
+  std::vector<Attribute> get_extra_attrs() const;
+
+  /// Provides access to the underlying C GObject.
+  PangoAnalysis*       gobj()       { return &gobject_; }
+  /// Provides access to the underlying C GObject.
+  const PangoAnalysis* gobj() const { return &gobject_; }
+
+protected:
+  PangoAnalysis gobject_;
+};
+
+
+/** A Pango::Item stores information about a segment of text.
+ * Pango::Item is used as an output type only so there is no public default constructor.
+ * You retrieve objects of this type by calling Pango::Context::itemize() with some text.
+ * The actual rendering of the segment of text that corresponds to a particular Pango::Item
+ * (or some sub-string) into a string of glyphs is done with shape().
+ * The segment of text that corresponds to a Pango::Item can be computed from the
+ * text passed into Pango::Context::itemize() with get_segment(). Together with
+ * the Pango::Analysis data member that can be accessed with get_analysis()
+ * it is needed for further calculations in Pango::GlyphString.
+ */
+class PANGOMM_API Item
+{
+  _CLASS_GENERIC(Item, PangoItem) //There is the whole set of functions for _CLASS_BOXEDTYPE but unfortunately PangoItem is not registered as a boxed type and lacks pango_item_get_type...
+  _IGNORE(pango_item_copy,pango_item_free)
+
+public:
+  // There is no default constructor. This class is only used as an output type.
+  explicit Item(PangoItem* castitem, bool make_a_copy = true);
+
+  Item(const Item& src);
+  Item& operator=(const Item& src);
+
+  ~Item();
+
+  /// Provides access to the underlying C GObject. The caller is responsible for freeing it. Use when directly setting fields in structs.
+  PangoItem* gobj_copy() const;
+
+public:
+  _WRAP_METHOD(Item split(int split_index, int split_offset), pango_item_split)
+
+  /** Gets the offset of the segment from the beginning of the string in bytes.
+   * @return The offset of the segment from the beginning of the string in bytes.
+   */
+  _MEMBER_GET(offset, offset, int, gint)
+
+  /** Gets the length of the segment in bytes.
+   * @return The length of the segment in bytes.
+   */
+  _MEMBER_GET(length, length, int, gint)
+
+  /** Gets the length of the segment in characters.
+   * @return The length of the semgment in characters.
+   */
+  _MEMBER_GET(num_chars, num_chars, int, gint)
+
+  /** Gets the properties of the segment.
+   * @return The properties of the segment.
+   */
+  Analysis get_analysis() const;
+
+  /** Computes the segment of text that is represented by the item.
+   * @param text The text that has been passed into Pango::Context::itemize().
+   * @return The sub-string of @a text that corresponds to the item.
+   */
+  Glib::ustring get_segment(const Glib::ustring& text) const;
+
+  /** Converts a segment of text into a string of glyphs.
+   *
+   * @param text The text to process. This must either be the whole segment of text
+   *             that corresponds to the item as returned by get_segment() or a
+   *             substring of that segment. You need to pass the same text to
+   *             the member functions of Pango::GlyphString for further calculations.
+   * @return A Pango::GlyphString object that can be measured or drawn.
+   */
+  GlyphString shape(const Glib::ustring& text) const;
+
+  /** Converts a segment of text into a string of glyphs.
+   *
+   * @newin{2,44}
+   *
+   * @param item_text The text to process. This must either be the whole segment of text
+   *             that corresponds to the item as returned by get_segment() or a
+   *             substring of that segment. You need to pass the same text to
+   *             the member functions of Pango::GlyphString for further calculations.
+   * @param paragraph_text Text of the paragraph. See GlyphString::GlyphString(
+   *        const Glib::ustring& item_text, const Glib::ustring& paragraph_text,
+   *        const Analysis& analysis, ShapeFlags flags).
+   * @param flags Flags influencing the shaping process.
+   * @return A Pango::GlyphString object that can be measured or drawn.
+   */
+  GlyphString shape(const Glib::ustring& item_text, const Glib::ustring& paragraph_text,
+    ShapeFlags flags = ShapeFlags::NONE) const;
+
+  /// Provides access to the underlying C GObject.  
+  PangoItem*       gobj()       { return gobject_; }
+  /// Provides access to the underlying C GObject.
+  const PangoItem* gobj() const { return gobject_; }
+
+protected:
+  PangoItem* gobject_;
+};
+
+} // namespace Pango
+
+namespace Glib
+{
+
+/** @relates Pango::Analysis */
+PANGOMM_API
+Pango::Analysis& wrap(PangoAnalysis* object);
+
+/** @relates Pango::Analysis */
+PANGOMM_API
+const Pango::Analysis& wrap(const PangoAnalysis* object);
+
+/** @relates Pango::Item */
+PANGOMM_API
+Pango::Item wrap(PangoItem* object, bool take_copy=true);
+
+} // namespace Glib
diff --git a/pango/src/language.ccg b/pango/src/language.ccg
new file mode 100644 (file)
index 0000000..f6b9178
--- /dev/null
@@ -0,0 +1,70 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Pango
+{
+
+/* PangoLanguage is just another example of inconsistent coding in atk/pango/gtk:
+ * on the one hand it is defined and registered as a boxed type, on the other
+ * hand it is always a pointer to some statically allocated string and thus
+ * neither allocated by itself, nor copied by value, nor freed. Similar dummy
+ * functions as below are defined in pango/pango-util.c but they are not exported.
+ * Compare with pango/pango-util.c for reference. */
+ //(I wonder who wrote this - it wasn't me. murrayc)
+inline PangoLanguage* _pango_language_new()
+{
+  return 0;
+}
+
+inline PangoLanguage* _pango_language_copy(const PangoLanguage* language)
+{
+  return const_cast<PangoLanguage*>(language);
+}
+
+inline void _pango_language_free(PangoLanguage*)
+{
+  return;
+}
+
+Language::Language()
+:
+  gobject_(0)
+{}
+
+Language::Language(const Glib::ustring& language)
+:
+  gobject_(pango_language_from_string(language.c_str()))
+{}
+
+Glib::ustring Language::get_string() const
+{
+  if (gobject_)
+    return pango_language_to_string(const_cast<PangoLanguage*>(gobj()));
+  else
+    return Glib::ustring();
+}
+
+std::vector<Script> Language::get_scripts() const
+{
+  int num_scripts = 0;
+  const auto* carray = pango_language_get_scripts(const_cast<PangoLanguage*>(gobj()), &num_scripts);
+  return Glib::ArrayHandler<Script>::array_to_vector((const Script*)carray, num_scripts, Glib::OWNERSHIP_NONE);
+}
+
+
+} /* namespace Pango */
diff --git a/pango/src/language.hg b/pango/src/language.hg
new file mode 100644 (file)
index 0000000..f018cb8
--- /dev/null
@@ -0,0 +1,78 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_CONFIGINCLUDE(pangommconfig.h)
+
+#include <glibmm/value.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+_WRAP_ENUM(Script, PangoScript, decl_prefix PANGOMM_API)
+
+/** A Pango::Language is used to represent a language.
+ */
+class PANGOMM_API Language
+{
+  _CLASS_BOXEDTYPE(Language, PangoLanguage, _pango_language_new, _pango_language_copy, _pango_language_free, PANGOMM_API)
+  _IGNORE(pango_language_get_sample_string) //This function is a bad hack for internal use by renderers and Pango (from pango/pango-utils.c)
+  _IGNORE(pango_language_to_string) //This is defined as a macro
+  _CUSTOM_DEFAULT_CTOR
+
+public:
+  /** Constructs an empty language tag.
+   */
+  Language();
+
+  /** Constructs a Pango::Language object from a RFC-3066 format language tag.
+   * This function first canonicalizes the string by converting it to lowercase,
+   * mapping '_' to '-', and stripping all characters other than letters and '-'.
+   */
+  Language(const Glib::ustring& language);
+
+  /** Gets a RFC-3066 format string representing the given language tag.
+   * @return A string representing the language tag. An empty string is returned if the language tag is empty.
+   */
+  Glib::ustring get_string() const;
+
+  _WRAP_METHOD(bool matches(const Glib::ustring & range_list) const, pango_language_matches)
+  _WRAP_METHOD(bool includes_script(Script script) const, pango_language_includes_script)
+
+
+ /** Determines the scripts used to to write this language.
+   * If nothing is known about the language tag then an empty container is returned.
+   * The list of scripts returned starts with the script that the
+   * language uses most and continues to the one it uses least.
+   *
+   * 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 a small number.
+   *
+   * @result A container of Script values.
+   *
+   * @newin{2,14}
+   */
+  std::vector<Script> get_scripts() const;
+  _IGNORE(pango_language_get_scripts)
+};
+
+} /* namespace Pango */
diff --git a/pango/src/layout.ccg b/pango/src/layout.ccg
new file mode 100644 (file)
index 0000000..2e5b3d5
--- /dev/null
@@ -0,0 +1,151 @@
+/* 
+ * Copyright 1998-2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pango/pangocairo.h>
+
+namespace Pango
+{
+
+namespace {
+
+struct LayoutLineTraits
+{
+  typedef Glib::RefPtr<LayoutLine>  CppType;
+  typedef PangoLayoutLine *         CType;
+  typedef PangoLayoutLine *         CTypeNonConst;
+
+  static CType   to_c_type      (const CppType& ptr) { return Glib::unwrap(ptr);     }
+  static CType   to_c_type      (CType          ptr) { return ptr;                   }
+  static CppType to_cpp_type    (CType          ptr) { return Glib::wrap(ptr, true); }
+  static void    release_c_type (CType          ptr) { pango_layout_line_unref(ptr); }
+};
+
+using SListHandler_LayoutLine = Glib::SListHandler<Glib::RefPtr<LayoutLine>, LayoutLineTraits>;
+using SListHandler_ConstLayoutLine = Glib::SListHandler<Glib::RefPtr<const LayoutLine>, LayoutLineTraits>;
+
+} // anonymous namespace
+
+Layout::Layout(const Glib::RefPtr<Context>& context)
+:
+  Glib::Object(G_OBJECT(pango_layout_new(context->gobj())))
+{}
+
+Glib::RefPtr<Layout> Layout::create(const Cairo::RefPtr<Cairo::Context>& context)
+{
+  return Glib::wrap( pango_cairo_create_layout(context->cobj()) );
+}
+
+void Layout::update_from_cairo_context(const Cairo::RefPtr<Cairo::Context>& context)
+{
+  pango_cairo_update_layout(context->cobj(), gobj());
+}
+
+void Layout::set_text(const Glib::ustring& text)
+{
+  pango_layout_set_text(gobj(), text.c_str(), text.bytes());
+}
+
+void Layout::set_markup(const Glib::ustring& markup)
+{
+  return pango_layout_set_markup(gobj(), markup.c_str(), markup.bytes());
+}
+
+void Layout::set_markup(const Glib::ustring& markup, gunichar accel_marker, gunichar& accel_char)
+{
+  return pango_layout_set_markup_with_accel(gobj(), markup.c_str(), markup.bytes(), accel_marker, &accel_char);
+}
+
+std::vector<PangoLogAttr> Layout::get_log_attrs() const
+{
+  int n_attrs = 0;
+  const PangoLogAttr* const pAttrs = pango_layout_get_log_attrs_readonly(const_cast<PangoLayout*>(gobj()), &n_attrs);
+
+  return Glib::ArrayHandler<PangoLogAttr>::array_to_vector(pAttrs, n_attrs, Glib::OWNERSHIP_NONE);
+}
+
+Rectangle Layout::index_to_pos(int index) const
+{
+  Rectangle pos;
+  pango_layout_index_to_pos(const_cast<PangoLayout*>(gobj()), index, pos.gobj());
+  return pos;
+}
+
+Rectangle Layout::get_cursor_strong_pos(int index) const
+{
+  Rectangle strong_pos;
+  pango_layout_get_cursor_pos(const_cast<PangoLayout*>(gobj()), index, strong_pos.gobj(), 0);
+  return strong_pos;
+}
+
+Rectangle Layout::get_cursor_weak_pos(int index) const
+{
+  Rectangle weak_pos;
+  pango_layout_get_cursor_pos(const_cast<PangoLayout*>(gobj()), index, 0, weak_pos.gobj());
+  return weak_pos;
+}
+
+Rectangle Layout::get_ink_extents() const
+{
+  Rectangle ink_extents;
+  pango_layout_get_extents(const_cast<PangoLayout*>(gobj()), ink_extents.gobj(), 0);
+  return ink_extents;
+}
+
+Rectangle Layout::get_logical_extents() const
+{
+  Rectangle logical_extents;
+  pango_layout_get_extents(const_cast<PangoLayout*>(gobj()), 0, logical_extents.gobj());
+  return logical_extents;
+}
+
+Rectangle Layout::get_pixel_ink_extents() const
+{
+  Rectangle ink_extents;
+  pango_layout_get_pixel_extents(const_cast<PangoLayout*>(gobj()), ink_extents.gobj(), 0);
+  return ink_extents;
+}
+
+Rectangle Layout::get_pixel_logical_extents() const
+{
+  Rectangle logical_extents;
+  pango_layout_get_pixel_extents(const_cast<PangoLayout*>(gobj()), 0, logical_extents.gobj());
+  return logical_extents;
+}
+
+LayoutIter Layout::get_iter()
+{
+  auto* cobject = pango_layout_get_iter(gobj());
+  return Glib::wrap(cobject, false /* don't take_copy */);
+}
+
+void Layout::unset_font_description()
+{
+  pango_layout_set_font_description(gobj(), 0);
+}
+
+void Layout::add_to_cairo_context(const Cairo::RefPtr<Cairo::Context>& context)
+{
+  pango_cairo_layout_path(context->cobj(), gobj());
+}
+
+void Layout::show_in_cairo_context(const Cairo::RefPtr<Cairo::Context>& context)
+{
+  pango_cairo_show_layout(context->cobj(), gobj());
+}
+
+} /* namespace Pango */
diff --git a/pango/src/layout.hg b/pango/src/layout.hg
new file mode 100644 (file)
index 0000000..fa75994
--- /dev/null
@@ -0,0 +1,341 @@
+/* layout.h
+ *
+ * Copyright(C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm/object.h>
+#include <pangomm/font.h>
+#include <pangomm/fontdescription.h>
+#include <pangomm/context.h>
+#include <pangomm/attrlist.h>
+#include <pangomm/tabarray.h>
+#include <pangomm/layoutline.h>
+#include <pangomm/layoutiter.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/object_p.h)
+
+namespace Pango
+{
+
+_WRAP_ENUM(Alignment, PangoAlignment, decl_prefix PANGOMM_API)
+_WRAP_ENUM(WrapMode, PangoWrapMode, decl_prefix PANGOMM_API)
+_WRAP_ENUM(EllipsizeMode, PangoEllipsizeMode, decl_prefix PANGOMM_API)
+
+/** A Pango::Layout represents an entire paragraph of text.
+ * It is initialized with a Pango::Context, 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.
+ */
+class PANGOMM_API Layout : public Glib::Object
+{
+  _CLASS_GOBJECT(Layout, PangoLayout, PANGO_LAYOUT, Glib::Object, GObject, , , PANGOMM_API)
+
+  _IGNORE(pango_layout_set_text, pango_layout_set_markup, pango_layout_set_markup_with_accel,
+    pango_layout_get_log_attrs, pango_layout_get_log_attrs_readonly, pango_layout_get_iter)
+
+protected:
+  explicit Layout(const Glib::RefPtr<Context>& context);
+
+public:
+  _WRAP_CREATE(const Glib::RefPtr<Context>& 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
+  * get_size() or drawing with methods like show_in_cairo_contet(). 
+  * If you change the transformation or target surface for @a context, 
+  * you need to call update_from_cairo_context()
+  *
+  * This is the most convenient way to use Cairo with Pango. 
+  * However it is slightly inefficient since it creates a separate
+  * Pango Context object for each layout. This might matter in an
+  * application that is laying out large amounts of text.
+  * 
+  * @param context A Cairo context.
+  * @return The newly created Pango Layout.
+  */
+  static Glib::RefPtr<Layout> create(const Cairo::RefPtr<Cairo::Context>& context);
+
+  /** Updates the private Pango Context of a Pango Layout created with
+   * create(const Cairo::RefPtr<Cairo::Context>&) to match the current transformation
+   * and target surface of a Cairo Context.
+   *
+   * @param context A Cairo context.
+   */
+  void update_from_cairo_context(const Cairo::RefPtr<Cairo::Context>& context);
+
+
+  _WRAP_METHOD(Glib::RefPtr<Layout> copy(), pango_layout_copy)
+  _WRAP_METHOD(Glib::RefPtr<Context> get_context() const, pango_layout_get_context, refreturn)
+  _WRAP_METHOD(void set_attributes(AttrList& attrs), pango_layout_set_attributes)
+  _WRAP_METHOD(AttrList get_attributes() const, pango_layout_get_attributes)
+
+  /** Set the text of the layout.
+   * @param text The text for the layout.
+   */
+  void set_text(const Glib::ustring& text);
+
+  _WRAP_METHOD(Glib::ustring get_text() const, pango_layout_get_text)
+
+  _WRAP_METHOD(int get_character_count() const, pango_layout_get_character_count)
+
+  /** Sets the layout text and attribute list from marked-up text (see markup format).
+   * Replaces the current text and attribute list.
+   * @param markup Some marked-up text.
+   */
+  void set_markup(const Glib::ustring& markup);
+
+  /** Sets the layout text and attribute list from marked-up text (see markup format).
+   * Replaces the current text and attribute list.
+   *
+   * If @a accel_marker is nonzero, the given character will mark the character following
+   * it as an accelerator. For example, the 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 @a accel_char. Two @a accel_marker characters following each other produce a
+   * single literal @a accel_marker character.
+   * @param markup Some marked-up text.
+   * @param accel_marker Marker for accelerators in the text.
+   * @param accel_char Return location for any located accelerators.
+   */
+  void set_markup(const Glib::ustring& markup, gunichar accel_marker, gunichar& accel_char);
+
+  _WRAP_METHOD(void set_font_description(const FontDescription& desc), pango_layout_set_font_description)
+  void unset_font_description();
+
+  _WRAP_METHOD(FontDescription get_font_description() const, pango_layout_get_font_description)
+
+  _WRAP_METHOD(void set_width(int width), pango_layout_set_width)
+  _WRAP_METHOD(int get_width() const, pango_layout_get_width)
+  _WRAP_METHOD(void set_height(int height), pango_layout_set_height)
+  _WRAP_METHOD(int get_height() const, pango_layout_get_height)
+  _WRAP_METHOD(void set_wrap(WrapMode wrap), pango_layout_set_wrap)
+  _WRAP_METHOD(WrapMode get_wrap() const, pango_layout_get_wrap)
+  _WRAP_METHOD(bool is_wrapped() const, pango_layout_is_wrapped)
+  _WRAP_METHOD(void set_indent(int indent), pango_layout_set_indent)
+  _WRAP_METHOD(int get_indent() const, pango_layout_get_indent)
+  _WRAP_METHOD(void set_spacing(int spacing), pango_layout_set_spacing)
+  _WRAP_METHOD(int get_spacing() const, pango_layout_get_spacing)
+  _WRAP_METHOD(void set_line_spacing(float factor), pango_layout_set_line_spacing)
+  _WRAP_METHOD(float get_line_spacing() const, pango_layout_get_line_spacing)
+  _WRAP_METHOD(void set_justify(bool justify = true), pango_layout_set_justify)
+  _WRAP_METHOD(bool get_justify() const, pango_layout_get_justify)
+
+  _WRAP_METHOD(bool get_auto_dir() const, pango_layout_get_auto_dir)
+  _WRAP_METHOD(void set_auto_dir(bool auto_dir = true), pango_layout_set_auto_dir)
+  
+  _WRAP_METHOD(void set_alignment(Alignment alignment), pango_layout_set_alignment)
+  _WRAP_METHOD(Alignment get_alignment() const, pango_layout_get_alignment)
+
+  _WRAP_METHOD(void set_tabs(TabArray& tabs), pango_layout_set_tabs)
+  _WRAP_METHOD(TabArray get_tabs() const, pango_layout_get_tabs)
+
+  _WRAP_METHOD(void set_single_paragraph_mode(bool setting = true), pango_layout_set_single_paragraph_mode)
+  _WRAP_METHOD(bool get_single_paragraph_mode() const, pango_layout_get_single_paragraph_mode)
+
+  _WRAP_METHOD(void set_ellipsize(EllipsizeMode ellipsize), pango_layout_set_ellipsize)
+  _WRAP_METHOD(EllipsizeMode get_ellipsize() const, pango_layout_get_ellipsize)
+
+  _WRAP_METHOD(bool is_ellipsized() const, pango_layout_is_ellipsized)
+  _WRAP_METHOD(int get_unknown_glyphs_count() const, pango_layout_get_unknown_glyphs_count)
+
+  _WRAP_METHOD(void context_changed(), pango_layout_context_changed)
+
+  _WRAP_METHOD(guint get_serial() const, pango_layout_get_serial)
+
+  /** Retrieve a vector of logical attributes for each character in the layout.
+   *
+   * The number of attributes returned 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.
+   *
+   * @return A vector of logical attributes.
+   */
+  std::vector<LogAttr> get_log_attrs() const;
+
+  /** Convert from an index within the layout to the onscreen position corresponding to the grapheme at that index, which is represented as rectangle.
+   * Note that @a x in the returned rectangle is always the leading edge of the grapheme
+   * and @a x + @a width the trailing edge of the grapheme.
+   * If the directionality of the grapheme is right-to-left, then @a width will be negative.
+   * @param index Byte index within layout.
+   * @return The position of the grapheme.
+   */
+  Rectangle index_to_pos(int index) const;
+  _IGNORE(pango_layout_index_to_pos)
+
+  _WRAP_METHOD(void index_to_line_x(int index_, bool trailing, int& line, int& x_pos) const, pango_layout_index_to_line_x)
+
+  _WRAP_METHOD(void get_cursor_pos(int index, Rectangle& strong_pos, Rectangle& weak_pos) const, pango_layout_get_cursor_pos)
+
+  /** Given an index within the layout, determine the positions that of the strong cursors if the insertion point is at that index.
+   * @param index The byte index of the cursor.
+   * @return The strong cursor position.
+   */
+  Rectangle get_cursor_strong_pos(int index) const;
+
+  /** Given an index within the layout, determine the positions that of the weak cursors if the insertion point is at that index.
+   * @param index The byte index of the cursor.
+   * @return The weak cursor position.
+   */
+  Rectangle get_cursor_weak_pos(int index) const;
+
+  _WRAP_METHOD(void move_cursor_visually(bool strong,
+     int old_index, int old_trailing, int direction,
+     int& new_index, int& new_trailing) const, pango_layout_move_cursor_visually)
+
+  _WRAP_METHOD(bool xy_to_index(int x, int y, int& index, int& trailing) const, pango_layout_xy_to_index)
+
+  _WRAP_METHOD(void get_extents(Rectangle& ink_rect, Rectangle& logical_rect) const, pango_layout_get_extents)
+
+  /** Compute the ink extents of layout.
+   * @return The extents of the layout as drawn.
+   */
+  Rectangle get_ink_extents() const;
+
+  /** Compute the logical extents of layout.
+   * @return The logical extents of the layout.
+   */
+  Rectangle get_logical_extents() const;
+
+  _WRAP_METHOD(void get_pixel_extents(Rectangle& ink_rect, Rectangle& logical_rect) const, pango_layout_get_pixel_extents)
+
+  /** Compute the ink extents of the layout in device units.
+   * @return The extents of the layout as drawn.
+   */
+  Rectangle get_pixel_ink_extents() const;
+
+  /** Compute the logical extents of the layout in device units.
+   * @return The logical extents of the layout.
+   */
+  Rectangle get_pixel_logical_extents() const;
+
+  _WRAP_METHOD(void get_size(int& width, int& height) const, pango_layout_get_size)
+  _WRAP_METHOD(void get_pixel_size(int& width, int& height) const, pango_layout_get_pixel_size)
+
+  _WRAP_METHOD(int get_baseline() const, pango_layout_get_baseline)
+
+  _WRAP_METHOD(int get_line_count() const, pango_layout_get_line_count)
+
+  //Note that the const version uses a different (faster) C function:
+  /** Retrieves a particular line from a Pango::Layout.
+   *
+   * Use the faster get_const_line() if you do not plan
+   * to modify the contents of the line (glyphs, glyph widths, etc.).
+   *
+   * @param line The index of a line, which must be between 0 and
+   * <tt>get_line_count() - 1</tt>, inclusive.
+   * @return The requested Pango::LayoutLine, or an empty RefPtr if the index
+   * is out of range. This layout line will become invalid if changes are made
+   * to the Pango::Layout.
+   */
+  _WRAP_METHOD(Glib::RefPtr<LayoutLine> get_line(int line), pango_layout_get_line, refreturn)
+
+  /** Retrieves a particular line from a Pango::Layout.
+   *
+   * @param line The index of a line, which must be between 0 and
+   * <tt>get_line_count() - 1</tt>, inclusive.
+   * @return The requested Pango::LayoutLine, or an empty RefPtr if the index
+   * is out of range. This layout line will become invalid if changes are made
+   * to the Pango::Layout. No changes should be made to the line.
+   */
+  _WRAP_METHOD(Glib::RefPtr<const LayoutLine> get_line(int line) const, pango_layout_get_line_readonly, refreturn)
+
+  /** Retrieves a particular line from a Pango::Layout.
+   *
+   * This is a faster alternative to get_line(), but the user is not expected
+   * to modify the contents of the line (glyphs, glyph widths, etc.).
+   *
+   * @newin{2,50}
+   *
+   * @param line The index of a line, which must be between 0 and
+   * <tt>get_line_count() - 1</tt>, inclusive.
+   * @return The requested Pango::LayoutLine, or an empty RefPtr if the index
+   * is out of range. This layout line will become invalid if changes are made
+   * to the Pango::Layout. No changes should be made to the line.
+   */
+  _WRAP_METHOD(Glib::RefPtr<const LayoutLine> get_const_line(int line) const, pango_layout_get_line_readonly, refreturn)
+
+#m4 _CONVERSION(`GSList*',`std::vector<Glib::RefPtr<LayoutLine>>',`SListHandler_LayoutLine::slist_to_vector($3, Glib::OWNERSHIP_NONE)',)
+#m4 _CONVERSION(`GSList*',`std::vector<Glib::RefPtr<const LayoutLine>>',`SListHandler_ConstLayoutLine::slist_to_vector($3, Glib::OWNERSHIP_NONE)')
+
+  //Note that the const version uses a different (faster) C function:
+  /** Returns the lines of the layout as a vector.
+   *
+   * Use the faster get_const_lines() if you do not plan
+   * to modify the contents of the lines (glyphs, glyph widths, etc.).
+   *
+   * @return A std::vector containing
+   * the lines in the layout. This points to internal data of the Pango::Layout
+   * and must be used with care. It will become invalid on any change to the layout's
+   * text or properties.
+   */
+  _WRAP_METHOD(std::vector<Glib::RefPtr<LayoutLine>> get_lines(), pango_layout_get_lines)
+
+  /** Returns the lines of the layout as a vector.
+   *
+   * @return A std::vector containing
+   * the lines in the layout. This points to internal data of the Pango::Layout 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.
+   */
+  _WRAP_METHOD(std::vector<Glib::RefPtr<const LayoutLine>> get_lines() const, pango_layout_get_lines_readonly)
+
+  /** Returns the lines of the layout as a vector.
+   *
+   * This is a faster alternative to get_lines(), but the user is not expected
+   * to modify the contents of the lines (glyphs, glyph widths, etc.).
+   *
+   * @newin{2,50}
+   *
+   * @return A std::vector containing
+   * the lines in the layout. This points to internal data of the Pango::Layout 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.
+   */
+  _WRAP_METHOD(std::vector<Glib::RefPtr<const LayoutLine>> get_const_lines() const, pango_layout_get_lines_readonly)
+
+  /** Gets an iterator to iterate over the visual extents of the layout.
+   * @return The iterator.
+   *
+   * @newin{2,28}
+   */
+  LayoutIter get_iter();
+
+  /** Adds the text in this LayoutLine to the current path in the
+   * specified Cairo @a context. The origin of the glyphs (the left edge
+   * of the line) will be at the current point of the cairo context.
+   *
+   * @param context A Cairo context.
+   */
+  void add_to_cairo_context(const Cairo::RefPtr<Cairo::Context>& context);
+
+  /** Draws a Layout in the specified Cairo @a context. The top-left
+   *  corner of the Layout will be drawn at the current point of the
+   *  cairo context.
+   *
+   * @param context A Cairo context.
+   *
+   * @newin{2,16}
+   */
+  void show_in_cairo_context(const Cairo::RefPtr<Cairo::Context>& context);
+};
+
+} /* namespace Pango */
diff --git a/pango/src/layoutiter.ccg b/pango/src/layoutiter.ccg
new file mode 100644 (file)
index 0000000..3165a1f
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2001-2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/layout.h>
+
+namespace Pango
+{
+
+Rectangle LayoutIter::get_char_extents() const
+{
+  Rectangle logical_rect;
+  pango_layout_iter_get_char_extents(const_cast<PangoLayoutIter*>(gobj()), logical_rect.gobj());
+  return logical_rect;
+}
+
+Rectangle LayoutIter::get_cluster_ink_extents() const
+{
+  Rectangle ink_rect;
+  pango_layout_iter_get_cluster_extents(const_cast<PangoLayoutIter*>(gobj()), ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle LayoutIter::get_cluster_logical_extents() const
+{
+  Rectangle logical_rect;
+  pango_layout_iter_get_cluster_extents(const_cast<PangoLayoutIter*>(gobj()), 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+Rectangle LayoutIter::get_run_ink_extents() const
+{
+  Rectangle ink_rect;
+  pango_layout_iter_get_run_extents(const_cast<PangoLayoutIter*>(gobj()), ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle LayoutIter::get_run_logical_extents() const
+{
+  Rectangle logical_rect;
+  pango_layout_iter_get_run_extents(const_cast<PangoLayoutIter*>(gobj()), 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+Rectangle LayoutIter::get_line_ink_extents() const
+{
+  Rectangle ink_rect;
+  pango_layout_iter_get_line_extents(const_cast<PangoLayoutIter*>(gobj()), ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle LayoutIter::get_line_logical_extents() const
+{
+  Rectangle logical_rect;
+  pango_layout_iter_get_line_extents(const_cast<PangoLayoutIter*>(gobj()), 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+Rectangle LayoutIter::get_layout_ink_extents() const
+{
+  Rectangle ink_rect;
+  pango_layout_iter_get_layout_extents(const_cast<PangoLayoutIter*>(gobj()), ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle LayoutIter::get_layout_logical_extents() const
+{
+  Rectangle logical_rect;
+  pango_layout_iter_get_layout_extents(const_cast<PangoLayoutIter*>(gobj()), 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+} // namespace Pango
diff --git a/pango/src/layoutiter.hg b/pango/src/layoutiter.hg
new file mode 100644 (file)
index 0000000..483215d
--- /dev/null
@@ -0,0 +1,148 @@
+/* layoutiter.h
+ *
+ * Copyright 2001-2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/layoutline.h>
+#include <pangomm/glyphitem.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+/** A Pango::LayoutIter can be used to iterate over the visual extents of a Pango::Layout.
+ */
+class PANGOMM_API LayoutIter
+{
+  _CLASS_BOXEDTYPE(LayoutIter, PangoLayoutIter, NONE, pango_layout_iter_copy, pango_layout_iter_free, PANGOMM_API)
+  _IGNORE(pango_layout_iter_copy, pango_layout_iter_free)
+
+public:
+
+  _WRAP_METHOD(int get_index() const, pango_layout_iter_get_index)
+
+  /** Gets the current run.
+   *
+   * When iterating by run, at the end of each line, there's a position with
+   * a <tt>nullptr</tt> run, so this function can return an invalid GlyphItem.
+   * The <tt>nullptr</tt> run at the end of each line ensures that all lines have
+   * at least one run, even lines consisting of only a newline.
+   *
+   * @return The current run.
+   */
+  _WRAP_METHOD(GlyphItem get_run() const, pango_layout_iter_get_run_readonly)
+  _IGNORE(pango_layout_iter_get_run)
+
+  /** Gets the current line.
+   *
+   * Use the faster get_const_line() if you do not plan
+   * to modify the contents of the line (glyphs, glyph widths, etc.).
+   *
+   * @return The current line.
+   */
+  _WRAP_METHOD(Glib::RefPtr<LayoutLine> get_line(), pango_layout_iter_get_line, refreturn)
+
+  /** Gets the current line for read-only access.
+   *
+   * @return The current line, that should not be modified.
+   */
+  _WRAP_METHOD(Glib::RefPtr<const LayoutLine> get_line() const, pango_layout_iter_get_line_readonly, refreturn)
+
+  /** Gets the current line for read-only access.
+   *
+   * This is a faster alternative to get_line(), but the user is not expected
+   * to modify the contents of the line (glyphs, glyph widths, etc.).
+   *
+   * @newin{2,50}
+   *
+   * @return The current line, that should not be modified.
+   */
+  _WRAP_METHOD(Glib::RefPtr<const LayoutLine> get_const_line() const, pango_layout_iter_get_line_readonly, refreturn)
+
+  _WRAP_METHOD(bool at_last_line() const, pango_layout_iter_at_last_line)
+
+  _WRAP_METHOD(Glib::RefPtr<Layout> get_layout(), pango_layout_iter_get_layout, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const Layout> get_layout() const, pango_layout_iter_get_layout, refreturn, constversion)
+
+  _WRAP_METHOD(bool next_char(), pango_layout_iter_next_char)
+  _WRAP_METHOD(bool next_cluster(), pango_layout_iter_next_cluster)
+  _WRAP_METHOD(bool next_run(), pango_layout_iter_next_run)
+  _WRAP_METHOD(bool next_line(), pango_layout_iter_next_line)
+
+  /** 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.
+   * @return The logical extents of the current character.
+   */
+  Rectangle get_char_extents() const;
+  _IGNORE(pango_layout_iter_get_char_extents)
+
+  _WRAP_METHOD(void get_cluster_extents(Rectangle& ink_rect, Rectangle& logical_rect) const, pango_layout_iter_get_cluster_extents)
+
+  /** Gets the ink extents of the current cluster, in layout coordinates (origin is the top left of the entire layout).
+   * @return The extents of the current cluster as drawn.
+   */
+  Rectangle get_cluster_ink_extents() const;
+
+  /** Gets the logical extents of the current cluster, in layout coordinates (origin is the top left of the entire layout).
+   * @return The logical extents of the current cluster.
+   */
+  Rectangle get_cluster_logical_extents() const;
+
+  _WRAP_METHOD(void get_run_extents(Rectangle& ink_rect, Rectangle& logical_rect) const, pango_layout_iter_get_run_extents)
+
+  /** Gets the ink extents of the current run in layout coordinates (origin is the top left of the entire layout).
+   * @return The extents of the current run as drawn.
+   */
+  Rectangle get_run_ink_extents() const;
+
+  /** Gets the logical extents of the current run in layout coordinates (origin is the top left of the entire layout).
+   * @return The logical extents of the current run.
+   */
+  Rectangle get_run_logical_extents() const;
+
+  _WRAP_METHOD(void get_line_extents(Rectangle& ink_rect, Rectangle& logical_rect) const,   pango_layout_iter_get_line_extents)
+
+  /** Obtains the ink extents of the current line.
+   * @return The extents of the current line as drawn.
+   */
+  Rectangle get_line_ink_extents() const;
+
+  /** Obtains the logical extents of the current line.
+   * @return The logical extents of the current line.
+   */
+  Rectangle get_line_logical_extents() const;
+
+  _WRAP_METHOD(void get_line_yrange(int& y0, int& y1) const, pango_layout_iter_get_line_yrange)
+
+  _WRAP_METHOD(void get_layout_extents(Rectangle& ink_rect, Rectangle& logical_rect) const, pango_layout_iter_get_layout_extents)
+
+  /** Obtains the ink extents of the Pango::Layout being iterated over.
+   * @return The extents of the layout as drawn.
+   */
+  Rectangle get_layout_ink_extents() const;
+
+  /** Obtains the logical extents of the Pango::Layout being iterated over.
+   * @return The logical extents of the layout.
+   */
+  Rectangle get_layout_logical_extents() const;
+
+  _WRAP_METHOD(int get_baseline() const, pango_layout_iter_get_baseline)
+};
+
+} //namespace Pango
diff --git a/pango/src/layoutline.ccg b/pango/src/layoutline.ccg
new file mode 100644 (file)
index 0000000..60c32b6
--- /dev/null
@@ -0,0 +1,82 @@
+// -*- c++ -*-
+/* $Id: layoutline.ccg,v 1.3 2006/05/30 17:14:21 murrayc Exp $ */
+
+/*
+ *
+ * Copyright 1998-2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/layout.h>
+#include <pango/pangocairo.h>
+
+namespace Pango {
+
+Rectangle LayoutLine::get_ink_extents() const
+{
+  Rectangle ink_rect;
+  pango_layout_line_get_extents(const_cast<PangoLayoutLine*>(gobj()), ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle LayoutLine::get_logical_extents() const
+{
+  Rectangle logical_rect;
+  pango_layout_line_get_extents(const_cast<PangoLayoutLine*>(gobj()), 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+Rectangle LayoutLine::get_pixel_ink_extents() const
+{
+  Rectangle ink_rect;
+  pango_layout_line_get_pixel_extents(const_cast<PangoLayoutLine*>(gobj()), ink_rect.gobj(), 0);
+  return ink_rect;
+}
+
+Rectangle LayoutLine::get_pixel_logical_extents() const
+{
+  Rectangle logical_rect;
+  pango_layout_line_get_pixel_extents(const_cast<PangoLayoutLine*>(gobj()), 0, logical_rect.gobj());
+  return logical_rect;
+}
+
+int LayoutLine::index_to_x(int index, bool trailing) const
+{
+  int x_pos;
+  pango_layout_line_index_to_x(const_cast<PangoLayoutLine*>(gobj()), index, trailing, &x_pos);
+  return x_pos;
+}
+
+std::vector<std::pair<int,int> > LayoutLine::get_x_ranges(int start_index, int end_index) const
+{
+  //TODO: This reinterpret_cast<> is scary. There should at least be a comment explaining it.
+  int* ranges = nullptr;
+  int n_ranges = 0;
+  pango_layout_line_get_x_ranges(const_cast<PangoLayoutLine*>(gobj()), start_index, end_index, &ranges, &n_ranges);
+  return Glib::ArrayHandler<std::pair<int,int>>::array_to_vector(reinterpret_cast<std::pair<int,int>*>(ranges), n_ranges, Glib::OWNERSHIP_SHALLOW);
+}
+
+void LayoutLine::show_in_cairo_context(const Cairo::RefPtr<Cairo::Context>& context)
+{
+  pango_cairo_show_layout_line(context->cobj(), gobj());
+}
+
+void LayoutLine::add_to_cairo_context(const Cairo::RefPtr<Cairo::Context>& context)
+{
+  pango_cairo_layout_line_path(context->cobj(), gobj());
+}
+
+} /* namespace Pango */
diff --git a/pango/src/layoutline.hg b/pango/src/layoutline.hg
new file mode 100644 (file)
index 0000000..efee914
--- /dev/null
@@ -0,0 +1,117 @@
+/* layoutline.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm/refptr.h>
+#include <pangomm/rectangle.h>
+#include <cairomm/context.h>
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+class PANGOMM_API Layout;
+
+/** A Pango::LayoutLine represents one of the lines resulting from laying out a paragraph via Pango::Layout.
+ * Pango::LayoutLine objects are obtained by calling Pango::Layout::get_line()
+ * and are only valid until the text, attributes, or settings of the parent Pango::Layout are modified.
+ * Routines for rendering Pango::Layout objects are provided in code specific to each rendering system.
+ */
+class PANGOMM_API LayoutLine final
+{
+  _CLASS_OPAQUE_REFCOUNTED(LayoutLine, PangoLayoutLine, NONE, pango_layout_line_ref, pango_layout_line_unref, PANGOMM_API)
+  _IGNORE(pango_layout_line_ref, pango_layout_line_unref)
+  _IGNORE(pango_layout_line_get_x_ranges)
+public:
+
+  _WRAP_METHOD(bool x_to_index(int x_pos, int& index, int& trailing) const, pango_layout_line_x_to_index)
+
+  /** Converts an index within a line to a @a x position.
+   * @param index Byte offset of a grapheme within the layout.
+   * @param trailing  A boolean indicating the edge of the grapheme to retrieve the position of. If <tt>false</tt>, the trailing edge of the grapheme, if <tt>true</tt> the leading of the grapheme. 
+   * @return The x offset (in thousands of a device unit).
+   */
+  int index_to_x(int index, bool trailing) const;
+  _IGNORE(pango_layout_line_index_to_x)
+
+  /** Get 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.
+   * @param start_index The start byte index of the logical range.
+   * If the value of @a start_index 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.
+   * @param end_index The end byte index of the logical range.
+   * If the value of @a end_index 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.
+   * @return An array of ranges represented by pairs of integers marking the start and end pixel coordinates of the ranges.
+   */
+  std::vector<std::pair<int,int> > get_x_ranges(int start_index, int end_index) const;
+
+  _WRAP_METHOD(void get_extents(Rectangle& ink_rect, Rectangle& logical_rect) const, pango_layout_line_get_extents)
+
+  /** Compute the ink extents of a layout line.
+   * @return The extents of the layout line as drawn.
+   */
+  Rectangle get_ink_extents() const;
+
+  /** Compute the logical extents of a layout line.
+   * @return The logical extents of the layout line.
+   */
+  Rectangle get_logical_extents() const;
+
+  _WRAP_METHOD(void get_pixel_extents(Rectangle& ink_rect, Rectangle& logical_rect) const, pango_layout_line_get_pixel_extents)
+
+  /** Compute the ink extents of a layout line in device units.
+   * @return The extents of the layout line as drawn.
+   */
+  Rectangle get_pixel_ink_extents() const;
+
+  /** Compute the logical extents of a layout line in device units.
+   * @return The logical extents of the layout line.
+   */
+  Rectangle get_pixel_logical_extents() const;
+
+  /** Draws this LayoutLine 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.
+   *
+   * @param context A Cairo context.
+   */
+  void show_in_cairo_context(const Cairo::RefPtr<Cairo::Context>& context);
+
+  /** Adds the text in this LayoutLine to the current path in the
+   * specified Cairo @a context. The origin of the glyphs (the left edge
+   * of the line) will be at the current point of the cairo context.
+   *
+   * @param context A Cairo context.
+   */
+  void add_to_cairo_context(const Cairo::RefPtr<Cairo::Context>& context);
+
+  _MEMBER_GET_GOBJECT(layout, layout, Pango::Layout, PangoLayout*)
+  //_MEMBER_SET_GOBJECT(layout, layout, Pango::Layout, PangoLayout*)
+  _MEMBER_GET(length, length, int, gint)
+  _MEMBER_GET(start_index, start_index, int, gint)
+    
+};
+
+} // namespace Pango
diff --git a/pango/src/pango.defs b/pango/src/pango.defs
new file mode 100644 (file)
index 0000000..8c174b7
--- /dev/null
@@ -0,0 +1,6 @@
+(include pango_methods.defs)
+(include pango_vfuncs.defs)
+(include pango_enums.defs)
+(include pango_extra_objects.defs)
+
+
diff --git a/pango/src/pango_docs.xml b/pango/src/pango_docs.xml
new file mode 100644 (file)
index 0000000..b5b2d6f
--- /dev/null
@@ -0,0 +1,16824 @@
+<root>
+<enum name="PangoAlignment">
+<description>
+`PangoAlignment` describes how to align the lines of a `PangoLayout`
+within the available space.
+
+If the `PangoLayout` is set to justify using [method@Pango.Layout.set_justify],
+this only has effect for partial lines.
+
+See [method@Pango.Layout.set_auto_dir] for how text direction affects
+the interpretation of `PangoAlignment values.
+
+</description>
+<parameters>
+<parameter name="PANGO_ALIGN_LEFT">
+<parameter_description> Put all available space on the right
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ALIGN_CENTER">
+<parameter_description> Center the line within the available space
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ALIGN_RIGHT">
+<parameter_description> Put all available space on the left
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoAttrType">
+<description>
+The `PangoAttrType` distinguishes between different types of attributes.
+
+Along with the predefined values, it is possible to allocate additional
+values for custom attributes using [func@AttrType.register]. The predefined
+values are given below. The type of structure used to store the attribute is
+listed in parentheses after the description.
+
+</description>
+<parameters>
+<parameter name="PANGO_ATTR_INVALID">
+<parameter_description> does not happen
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_LANGUAGE">
+<parameter_description> language ([struct@Pango.AttrLanguage])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_FAMILY">
+<parameter_description> font family name list ([struct@Pango.AttrString])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_STYLE">
+<parameter_description> font slant style ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_WEIGHT">
+<parameter_description> font weight ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_VARIANT">
+<parameter_description> font variant (normal or small caps) ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_STRETCH">
+<parameter_description> font stretch ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_SIZE">
+<parameter_description> font size in points scaled by %PANGO_SCALE ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_FONT_DESC">
+<parameter_description> font description ([struct@Pango.AttrFontDesc])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_FOREGROUND">
+<parameter_description> foreground color ([struct@Pango.AttrColor])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_BACKGROUND">
+<parameter_description> background color ([struct@Pango.AttrColor])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_UNDERLINE">
+<parameter_description> whether the text has an underline ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_STRIKETHROUGH">
+<parameter_description> whether the text is struck-through ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_RISE">
+<parameter_description> baseline displacement ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_SHAPE">
+<parameter_description> shape ([struct@Pango.AttrShape])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_SCALE">
+<parameter_description> font size scale factor ([struct@Pango.AttrFloat])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_FALLBACK">
+<parameter_description> whether fallback is enabled ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_LETTER_SPACING">
+<parameter_description> letter spacing ([struct@PangoAttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_UNDERLINE_COLOR">
+<parameter_description> underline color ([struct@Pango.AttrColor])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_STRIKETHROUGH_COLOR">
+<parameter_description> strikethrough color ([struct@Pango.AttrColor])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_ABSOLUTE_SIZE">
+<parameter_description> font size in pixels scaled by %PANGO_SCALE ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_GRAVITY">
+<parameter_description> base text gravity ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_GRAVITY_HINT">
+<parameter_description> gravity hint ([struct@Pango.AttrInt])
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_FONT_FEATURES">
+<parameter_description> OpenType font features ([struct@Pango.AttrFontFeatures]). Since 1.38
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_FOREGROUND_ALPHA">
+<parameter_description> foreground alpha ([struct@Pango.AttrInt]). Since 1.38
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_BACKGROUND_ALPHA">
+<parameter_description> background alpha ([struct@Pango.AttrInt]). Since 1.38
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_ALLOW_BREAKS">
+<parameter_description> whether breaks are allowed ([struct@Pango.AttrInt]). Since 1.44
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_SHOW">
+<parameter_description> how to render invisible characters ([struct@Pango.AttrInt]). Since 1.44
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_INSERT_HYPHENS">
+<parameter_description> whether to insert hyphens at intra-word line breaks ([struct@Pango.AttrInt]). Since 1.44
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_OVERLINE">
+<parameter_description> whether the text has an overline ([struct@Pango.AttrInt]). Since 1.46
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_OVERLINE_COLOR">
+<parameter_description> overline color ([struct@Pango.AttrColor]). Since 1.46
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_LINE_HEIGHT">
+<parameter_description> line height factor ([struct@Pango.AttrFloat]). Since: 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_ABSOLUTE_LINE_HEIGHT">
+<parameter_description> line height ([struct@Pango.AttrInt]). Since: 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_WORD">
+<parameter_description> override segmentation to classify the range of the attribute as a single word ([struct@Pango.AttrInt]). Since 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_SENTENCE">
+<parameter_description> override segmentation to classify the range of the attribute as a single sentence ([struct@Pango.AttrInt]). Since 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_BASELINE_SHIFT">
+<parameter_description> baseline displacement ([struct@Pango.AttrInt]). Since 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ATTR_FONT_SCALE">
+<parameter_description> font-relative size change ([struct@Pango.AttrInt]). Since 1.50
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoBaselineShift">
+<description>
+An enumeration that affects baseline shifts between runs.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="PANGO_BASELINE_SHIFT_NONE">
+<parameter_description> Leave the baseline unchanged
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BASELINE_SHIFT_SUPERSCRIPT">
+<parameter_description> Shift the baseline to the superscript position,
+relative to the previous run
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BASELINE_SHIFT_SUBSCRIPT">
+<parameter_description> Shift the baseline to the subscript position,
+relative to the previous run
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoBidiType">
+<description>
+`PangoBidiType` represents the bidirectional character
+type of a Unicode character.
+
+The values in this enumeration are specified by the
+[Unicode bidirectional algorithm](http://www.unicode.org/reports/tr9/).
+
+Since: 1.22
+Deprecated: 1.44: Use fribidi for this information
+
+</description>
+<parameters>
+<parameter name="PANGO_BIDI_TYPE_L">
+<parameter_description> Left-to-Right
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_LRE">
+<parameter_description> Left-to-Right Embedding
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_LRO">
+<parameter_description> Left-to-Right Override
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_R">
+<parameter_description> Right-to-Left
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_AL">
+<parameter_description> Right-to-Left Arabic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_RLE">
+<parameter_description> Right-to-Left Embedding
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_RLO">
+<parameter_description> Right-to-Left Override
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_PDF">
+<parameter_description> Pop Directional Format
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_EN">
+<parameter_description> European Number
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_ES">
+<parameter_description> European Number Separator
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_ET">
+<parameter_description> European Number Terminator
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_AN">
+<parameter_description> Arabic Number
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_CS">
+<parameter_description> Common Number Separator
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_NSM">
+<parameter_description> Nonspacing Mark
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_BN">
+<parameter_description> Boundary Neutral
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_B">
+<parameter_description> Paragraph Separator
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_S">
+<parameter_description> Segment Separator
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_WS">
+<parameter_description> Whitespace
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_ON">
+<parameter_description> Other Neutrals
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_LRI">
+<parameter_description> Left-to-Right isolate. Since 1.48.6
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_RLI">
+<parameter_description> Right-to-Left isolate. Since 1.48.6
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_FSI">
+<parameter_description> First strong isolate. Since 1.48.6
+</parameter_description>
+</parameter>
+<parameter name="PANGO_BIDI_TYPE_PDI">
+<parameter_description> Pop directional isolate. Since 1.48.6
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoCoverageLevel">
+<description>
+`PangoCoverageLevel` is used to indicate how well a font can
+represent a particular Unicode character for a particular script.
+
+Since 1.44, only %PANGO_COVERAGE_NONE and %PANGO_COVERAGE_EXACT
+will be returned.
+
+</description>
+<parameters>
+<parameter name="PANGO_COVERAGE_NONE">
+<parameter_description> The character is not representable with
+the font.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_COVERAGE_FALLBACK">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_COVERAGE_APPROXIMATE">
+<parameter_description> The character is represented as
+basically the correct graphical form, but with a stylistic
+variant inappropriate for the current script.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_COVERAGE_EXACT">
+<parameter_description> The character is represented as the
+correct graphical form.
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoDirection">
+<description>
+`PangoDirection` 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 [func@unichar_direction]
+and [func@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 [func@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.
+
+If you are interested in text direction, you should really use fribidi
+directly. `PangoDirection` is only retained because it is used in some
+public apis.
+
+</description>
+<parameters>
+<parameter name="PANGO_DIRECTION_LTR">
+<parameter_description> A strong left-to-right direction
+</parameter_description>
+</parameter>
+<parameter name="PANGO_DIRECTION_RTL">
+<parameter_description> A strong right-to-left direction
+</parameter_description>
+</parameter>
+<parameter name="PANGO_DIRECTION_TTB_LTR">
+<parameter_description> Deprecated value; treated the
+same as %PANGO_DIRECTION_RTL.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_DIRECTION_TTB_RTL">
+<parameter_description> Deprecated value; treated the
+same as %PANGO_DIRECTION_LTR
+</parameter_description>
+</parameter>
+<parameter name="PANGO_DIRECTION_WEAK_LTR">
+<parameter_description> A weak left-to-right direction
+</parameter_description>
+</parameter>
+<parameter name="PANGO_DIRECTION_WEAK_RTL">
+<parameter_description> A weak right-to-left direction
+</parameter_description>
+</parameter>
+<parameter name="PANGO_DIRECTION_NEUTRAL">
+<parameter_description> No direction specified
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoEllipsizeMode">
+<description>
+`PangoEllipsizeMode` describes what sort of ellipsization
+should be applied to 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.
+
+</description>
+<parameters>
+<parameter name="PANGO_ELLIPSIZE_NONE">
+<parameter_description> No ellipsization
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ELLIPSIZE_START">
+<parameter_description> Omit characters at the start of the text
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ELLIPSIZE_MIDDLE">
+<parameter_description> Omit characters in the middle of the text
+</parameter_description>
+</parameter>
+<parameter name="PANGO_ELLIPSIZE_END">
+<parameter_description> Omit characters at the end of the text
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<property name="PangoFcFont:fontmap">
+<description>
+The PangoFc font map this font is associated with.
+
+</description>
+</property>
+
+<property name="PangoFcFont:pattern">
+<description>
+The fontconfig pattern for this font.
+
+</description>
+</property>
+
+<enum name="PangoFontMask">
+<description>
+The bits in a `PangoFontMask` correspond to the set fields in a
+`PangoFontDescription`.
+
+</description>
+<parameters>
+<parameter name="PANGO_FONT_MASK_FAMILY">
+<parameter_description> the font family is specified.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_MASK_STYLE">
+<parameter_description> the font style is specified.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_MASK_VARIANT">
+<parameter_description> the font variant is specified.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_MASK_WEIGHT">
+<parameter_description> the font weight is specified.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_MASK_STRETCH">
+<parameter_description> the font stretch is specified.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_MASK_SIZE">
+<parameter_description> the font size is specified.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_MASK_GRAVITY">
+<parameter_description> the font gravity is specified (Since: 1.16.)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_MASK_VARIATIONS">
+<parameter_description> OpenType font variations are specified (Since: 1.42)
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoFontScale">
+<description>
+An enumeration that affects font sizes for superscript
+and subscript positioning and for (emulated) Small Caps.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="PANGO_FONT_SCALE_NONE">
+<parameter_description> Leave the font size unchanged
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_SCALE_SUPERSCRIPT">
+<parameter_description> Change the font to a size suitable for superscripts
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_SCALE_SUBSCRIPT">
+<parameter_description> Change the font to a size suitable for subscripts
+</parameter_description>
+</parameter>
+<parameter name="PANGO_FONT_SCALE_SMALL_CAPS">
+<parameter_description> Change the font to a size suitable for Small Caps. Since: 1.50
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoGravity">
+<description>
+`PangoGravity` 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 [struct@Pango.Matrix], 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
+[method@Pango.Context.set_base_gravity] and can only be returned by
+[method@Pango.Context.get_base_gravity].
+
+See also: [enum@Pango.GravityHint]
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="PANGO_GRAVITY_SOUTH">
+<parameter_description> Glyphs stand upright (default) &lt;img align=&quot;right&quot; valign=&quot;center&quot; src=&quot;m-south.png&quot;&gt;
+</parameter_description>
+</parameter>
+<parameter name="PANGO_GRAVITY_EAST">
+<parameter_description> Glyphs are rotated 90 degrees counter-clockwise. &lt;img align=&quot;right&quot; valign=&quot;center&quot; src=&quot;m-east.png&quot;&gt;
+</parameter_description>
+</parameter>
+<parameter name="PANGO_GRAVITY_NORTH">
+<parameter_description> Glyphs are upside-down. &lt;img align=&quot;right&quot; valign=&quot;cener&quot; src=&quot;m-north.png&quot;&gt;
+</parameter_description>
+</parameter>
+<parameter name="PANGO_GRAVITY_WEST">
+<parameter_description> Glyphs are rotated 90 degrees clockwise. &lt;img align=&quot;right&quot; valign=&quot;center&quot; src=&quot;m-west.png&quot;&gt;
+</parameter_description>
+</parameter>
+<parameter name="PANGO_GRAVITY_AUTO">
+<parameter_description> Gravity is resolved from the context matrix
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoGravityHint">
+<description>
+`PangoGravityHint` defines how horizontal scripts should behave in a
+vertical context.
+
+That is, English excerpts in a vertical paragraph for example.
+
+See also [enum@Pango.Gravity]
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="PANGO_GRAVITY_HINT_NATURAL">
+<parameter_description> scripts will take their natural gravity based
+on the base gravity and the script.  This is the default.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_GRAVITY_HINT_STRONG">
+<parameter_description> always use the base gravity set, regardless of
+the script.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_GRAVITY_HINT_LINE">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoLayoutDeserializeError">
+<description>
+Errors that can be returned by [func@Pango.Layout.deserialize].
+
+</description>
+<parameters>
+<parameter name="PANGO_LAYOUT_DESERIALIZE_INVALID">
+<parameter_description> Unspecified error
+</parameter_description>
+</parameter>
+<parameter name="PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE">
+<parameter_description> A JSon value could not be
+interpreted
+</parameter_description>
+</parameter>
+<parameter name="PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE">
+<parameter_description> A required JSon member was
+not found
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoLayoutDeserializeFlags">
+<description>
+Flags that influence the behavior of [func@Pango.Layout.deserialize].
+
+New members may be added to this enumeration over time.
+
+</description>
+<parameters>
+<parameter name="PANGO_LAYOUT_DESERIALIZE_DEFAULT">
+<parameter_description> Default behavior
+</parameter_description>
+</parameter>
+<parameter name="PANGO_LAYOUT_DESERIALIZE_CONTEXT">
+<parameter_description> Apply context information
+from the serialization to the `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoLayoutSerializeFlags">
+<description>
+Flags that influence the behavior of [method@Pango.Layout.serialize].
+
+New members may be added to this enumeration over time.
+
+</description>
+<parameters>
+<parameter name="PANGO_LAYOUT_SERIALIZE_DEFAULT">
+<parameter_description> Default behavior
+</parameter_description>
+</parameter>
+<parameter name="PANGO_LAYOUT_SERIALIZE_CONTEXT">
+<parameter_description> Include context information
+</parameter_description>
+</parameter>
+<parameter name="PANGO_LAYOUT_SERIALIZE_OUTPUT">
+<parameter_description> Include information about the formatted output
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoOTTableType">
+<description>
+The PangoOTTableType enumeration values are used to
+identify the various OpenType tables in the
+pango_ot_info_… functions.
+
+</description>
+<parameters>
+<parameter name="PANGO_OT_TABLE_GSUB">
+<parameter_description> The GSUB table.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_OT_TABLE_GPOS">
+<parameter_description> The GPOS table.
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoOverline">
+<description>
+The `PangoOverline` enumeration is used to specify whether text
+should be overlined, and if so, the type of line.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="PANGO_OVERLINE_NONE">
+<parameter_description> no overline should be drawn
+</parameter_description>
+</parameter>
+<parameter name="PANGO_OVERLINE_SINGLE">
+<parameter_description> Draw a single line above the ink
+extents of the text being underlined.
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoRenderPart">
+<description>
+`PangoRenderPart` defines different items to render for such
+purposes as setting colors.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="PANGO_RENDER_PART_FOREGROUND">
+<parameter_description> the text itself
+</parameter_description>
+</parameter>
+<parameter name="PANGO_RENDER_PART_BACKGROUND">
+<parameter_description> the area behind the text
+</parameter_description>
+</parameter>
+<parameter name="PANGO_RENDER_PART_UNDERLINE">
+<parameter_description> underlines
+</parameter_description>
+</parameter>
+<parameter name="PANGO_RENDER_PART_STRIKETHROUGH">
+<parameter_description> strikethrough lines
+</parameter_description>
+</parameter>
+<parameter name="PANGO_RENDER_PART_OVERLINE">
+<parameter_description> overlines
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoScript">
+<description>
+The `PangoScript` enumeration identifies different writing
+systems.
+
+The values correspond to the names as defined in the Unicode standard. See
+[Unicode Standard Annex 24: Script names](http://www.unicode.org/reports/tr24/)
+
+Note that this enumeration is deprecated and will not be updated
+to include values in newer versions of the Unicode standard.
+Applications should use the `GUnicodeScript` enumeration instead,
+whose values are interchangeable with `PangoScript`.
+
+</description>
+<parameters>
+<parameter name="PANGO_SCRIPT_INVALID_CODE">
+<parameter_description> a value never returned from pango_script_for_unichar()
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_COMMON">
+<parameter_description> a character used by multiple different scripts
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_INHERITED">
+<parameter_description> a mark glyph that takes its script from the
+base glyph to which it is attached
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_ARABIC">
+<parameter_description>        Arabic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_ARMENIAN">
+<parameter_description> Armenian
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BENGALI">
+<parameter_description>        Bengali
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BOPOMOFO">
+<parameter_description> Bopomofo
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CHEROKEE">
+<parameter_description>        Cherokee
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_COPTIC">
+<parameter_description>        Coptic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CYRILLIC">
+<parameter_description>        Cyrillic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_DESERET">
+<parameter_description>        Deseret
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_DEVANAGARI">
+<parameter_description>        Devanagari
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_ETHIOPIC">
+<parameter_description>        Ethiopic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_GEORGIAN">
+<parameter_description>        Georgian
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_GOTHIC">
+<parameter_description>        Gothic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_GREEK">
+<parameter_description>        Greek
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_GUJARATI">
+<parameter_description>        Gujarati
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_GURMUKHI">
+<parameter_description>        Gurmukhi
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_HAN">
+<parameter_description>        Han
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_HANGUL">
+<parameter_description>        Hangul
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_HEBREW">
+<parameter_description>        Hebrew
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_HIRAGANA">
+<parameter_description>        Hiragana
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_KANNADA">
+<parameter_description>        Kannada
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_KATAKANA">
+<parameter_description>        Katakana
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_KHMER">
+<parameter_description>        Khmer
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_LAO">
+<parameter_description>        Lao
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_LATIN">
+<parameter_description>        Latin
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MALAYALAM">
+<parameter_description>        Malayalam
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MONGOLIAN">
+<parameter_description>        Mongolian
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MYANMAR">
+<parameter_description>        Myanmar
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_OGHAM">
+<parameter_description>        Ogham
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_OLD_ITALIC">
+<parameter_description>        Old Italic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_ORIYA">
+<parameter_description>        Oriya
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_RUNIC">
+<parameter_description>        Runic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SINHALA">
+<parameter_description>        Sinhala
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SYRIAC">
+<parameter_description>        Syriac
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TAMIL">
+<parameter_description>        Tamil
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TELUGU">
+<parameter_description>        Telugu
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_THAANA">
+<parameter_description>        Thaana
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_THAI">
+<parameter_description>        Thai
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TIBETAN">
+<parameter_description>        Tibetan
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CANADIAN_ABORIGINAL">
+<parameter_description>        Canadian Aboriginal
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_YI">
+<parameter_description>        Yi
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TAGALOG">
+<parameter_description>        Tagalog
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_HANUNOO">
+<parameter_description>        Hanunoo
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BUHID">
+<parameter_description>        Buhid
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TAGBANWA">
+<parameter_description>        Tagbanwa
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BRAILLE">
+<parameter_description>        Braille
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CYPRIOT">
+<parameter_description>        Cypriot
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_LIMBU">
+<parameter_description>        Limbu
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_OSMANYA">
+<parameter_description>        Osmanya
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SHAVIAN">
+<parameter_description>        Shavian
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_LINEAR_B">
+<parameter_description>        Linear B
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TAI_LE">
+<parameter_description>        Tai Le
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_UGARITIC">
+<parameter_description>        Ugaritic
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_NEW_TAI_LUE">
+<parameter_description>        New Tai Lue. Since 1.10
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BUGINESE">
+<parameter_description>        Buginese. Since 1.10
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_GLAGOLITIC">
+<parameter_description>        Glagolitic. Since 1.10
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TIFINAGH">
+<parameter_description>        Tifinagh. Since 1.10
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SYLOTI_NAGRI">
+<parameter_description>        Syloti Nagri. Since 1.10
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_OLD_PERSIAN">
+<parameter_description>        Old Persian. Since 1.10
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_KHAROSHTHI">
+<parameter_description>        Kharoshthi. Since 1.10
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_UNKNOWN">
+<parameter_description>                an unassigned code point. Since 1.14
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BALINESE">
+<parameter_description>                Balinese. Since 1.14
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CUNEIFORM">
+<parameter_description>        Cuneiform. Since 1.14
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_PHOENICIAN">
+<parameter_description>        Phoenician. Since 1.14
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_PHAGS_PA">
+<parameter_description>                Phags-pa. Since 1.14
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_NKO">
+<parameter_description>                N'Ko. Since 1.14
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_KAYAH_LI">
+<parameter_description>   Kayah Li. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_LEPCHA">
+<parameter_description>     Lepcha. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_REJANG">
+<parameter_description>     Rejang. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SUNDANESE">
+<parameter_description>  Sundanese. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SAURASHTRA">
+<parameter_description> Saurashtra. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CHAM">
+<parameter_description>       Cham. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_OL_CHIKI">
+<parameter_description>   Ol Chiki. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_VAI">
+<parameter_description>        Vai. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CARIAN">
+<parameter_description>     Carian. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_LYCIAN">
+<parameter_description>     Lycian. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_LYDIAN">
+<parameter_description>     Lydian. Since 1.20.1
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BATAK">
+<parameter_description>      Batak. Since 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BRAHMI">
+<parameter_description>     Brahmi. Since 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MANDAIC">
+<parameter_description>    Mandaic. Since 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CHAKMA">
+<parameter_description>               Chakma. Since: 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MEROITIC_CURSIVE">
+<parameter_description>     Meroitic Cursive. Since: 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MEROITIC_HIEROGLYPHS">
+<parameter_description> Meroitic Hieroglyphs. Since: 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MIAO">
+<parameter_description>                 Miao. Since: 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SHARADA">
+<parameter_description>              Sharada. Since: 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SORA_SOMPENG">
+<parameter_description>         Sora Sompeng. Since: 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TAKRI">
+<parameter_description>                Takri. Since: 1.32
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_BASSA_VAH">
+<parameter_description>            Bassa. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_CAUCASIAN_ALBANIAN">
+<parameter_description>   Caucasian Albanian. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_DUPLOYAN">
+<parameter_description>             Duployan. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_ELBASAN">
+<parameter_description>              Elbasan. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_GRANTHA">
+<parameter_description>              Grantha. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_KHOJKI">
+<parameter_description>               Kjohki. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_KHUDAWADI">
+<parameter_description>            Khudawadi, Sindhi. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_LINEAR_A">
+<parameter_description>             Linear A. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MAHAJANI">
+<parameter_description>             Mahajani. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MANICHAEAN">
+<parameter_description>           Manichaean. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MENDE_KIKAKUI">
+<parameter_description>        Mende Kikakui. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MODI">
+<parameter_description>                 Modi. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MRO">
+<parameter_description>                  Mro. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_NABATAEAN">
+<parameter_description>            Nabataean. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_OLD_NORTH_ARABIAN">
+<parameter_description>    Old North Arabian. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_OLD_PERMIC">
+<parameter_description>           Old Permic. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_PAHAWH_HMONG">
+<parameter_description>         Pahawh Hmong. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_PALMYRENE">
+<parameter_description>            Palmyrene. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_PAU_CIN_HAU">
+<parameter_description>          Pau Cin Hau. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_PSALTER_PAHLAVI">
+<parameter_description>      Psalter Pahlavi. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SIDDHAM">
+<parameter_description>              Siddham. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_TIRHUTA">
+<parameter_description>              Tirhuta. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_WARANG_CITI">
+<parameter_description>          Warang Citi. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_AHOM">
+<parameter_description>                 Ahom. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS">
+<parameter_description> Anatolian Hieroglyphs. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_HATRAN">
+<parameter_description>               Hatran. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_MULTANI">
+<parameter_description>              Multani. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_OLD_HUNGARIAN">
+<parameter_description>        Old Hungarian. Since: 1.40
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SCRIPT_SIGNWRITING">
+<parameter_description>          Signwriting. Since: 1.40
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoShapeFlags">
+<description>
+Flags influencing the shaping process.
+
+`PangoShapeFlags` can be passed to [func@Pango.shape_with_flags].
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="PANGO_SHAPE_NONE">
+<parameter_description> Default value.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SHAPE_ROUND_POSITIONS">
+<parameter_description> Round glyph positions
+and widths to whole device units. This option should
+be set if the target renderer can't do subpixel
+positioning of glyphs.
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoShowFlags">
+<description>
+These flags affect how Pango treats characters that are normally
+not visible in the output.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="PANGO_SHOW_NONE">
+<parameter_description> No special treatment for invisible characters
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SHOW_SPACES">
+<parameter_description> Render spaces, tabs and newlines visibly
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SHOW_LINE_BREAKS">
+<parameter_description> Render line breaks visibly
+</parameter_description>
+</parameter>
+<parameter name="PANGO_SHOW_IGNORABLES">
+<parameter_description> Render default-ignorable Unicode
+characters visibly
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoStretch">
+<description>
+An enumeration specifying the width of the font relative to other designs
+within a family.
+
+</description>
+<parameters>
+<parameter name="PANGO_STRETCH_ULTRA_CONDENSED">
+<parameter_description> ultra condensed width
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STRETCH_EXTRA_CONDENSED">
+<parameter_description> extra condensed width
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STRETCH_CONDENSED">
+<parameter_description> condensed width
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STRETCH_SEMI_CONDENSED">
+<parameter_description> semi condensed width
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STRETCH_NORMAL">
+<parameter_description> the normal width
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STRETCH_SEMI_EXPANDED">
+<parameter_description> semi expanded width
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STRETCH_EXPANDED">
+<parameter_description> expanded width
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STRETCH_EXTRA_EXPANDED">
+<parameter_description> extra expanded width
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STRETCH_ULTRA_EXPANDED">
+<parameter_description> ultra expanded width
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoStyle">
+<description>
+An enumeration specifying the various slant styles possible for a font.
+
+</description>
+<parameters>
+<parameter name="PANGO_STYLE_NORMAL">
+<parameter_description> the font is upright.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STYLE_OBLIQUE">
+<parameter_description> the font is slanted, but in a roman style.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_STYLE_ITALIC">
+<parameter_description> the font is slanted in an italic style.
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoTabAlign">
+<description>
+`PangoTabAlign` specifies where the text appears relative to the tab stop
+position.
+
+Support for tab alignments other than %PANGO_TAB_LEFT was added
+in Pango 1.50.
+
+</description>
+<parameters>
+<parameter name="PANGO_TAB_LEFT">
+<parameter_description> the text appears to the right of the tab stop position
+</parameter_description>
+</parameter>
+<parameter name="PANGO_TAB_RIGHT">
+<parameter_description> the text appears to the left of the tab stop position
+until the available space is filled
+</parameter_description>
+</parameter>
+<parameter name="PANGO_TAB_CENTER">
+<parameter_description> the text is centered at the tab stop position
+until the available space is filled
+</parameter_description>
+</parameter>
+<parameter name="PANGO_TAB_DECIMAL">
+<parameter_description> text before the first '.' appears to the left of the
+tab stop position (until the available space is filled), the rest to
+the right
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoTextTransform">
+<description>
+An enumeration that affects how Pango treats characters during shaping.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="PANGO_TEXT_TRANSFORM_NONE">
+<parameter_description> Leave text unchanged
+</parameter_description>
+</parameter>
+<parameter name="PANGO_TEXT_TRANSFORM_LOWERCASE">
+<parameter_description> Display letters and numbers as lowercase
+</parameter_description>
+</parameter>
+<parameter name="PANGO_TEXT_TRANSFORM_UPPERCASE">
+<parameter_description> Display letters and numbers as uppercase
+</parameter_description>
+</parameter>
+<parameter name="PANGO_TEXT_TRANSFORM_CAPITALIZE">
+<parameter_description> Display the first character of a word
+in titlecase
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoUnderline">
+<description>
+The `PangoUnderline` enumeration is used to specify whether text
+should be underlined, and if so, the type of underlining.
+
+</description>
+<parameters>
+<parameter name="PANGO_UNDERLINE_NONE">
+<parameter_description> no underline should be drawn
+</parameter_description>
+</parameter>
+<parameter name="PANGO_UNDERLINE_SINGLE">
+<parameter_description> a single underline should be drawn
+</parameter_description>
+</parameter>
+<parameter name="PANGO_UNDERLINE_DOUBLE">
+<parameter_description> a double underline should be drawn
+</parameter_description>
+</parameter>
+<parameter name="PANGO_UNDERLINE_LOW">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_UNDERLINE_ERROR">
+<parameter_description> an underline indicating an error should
+be drawn below. The exact style of rendering is up to the
+`PangoRenderer` in use, but typical styles include wavy
+or dotted lines.
+This underline is typically used to indicate an error such
+as a possible mispelling; in some cases a contrasting color
+may automatically be used. This type of underlining is
+available since Pango 1.4.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_UNDERLINE_SINGLE_LINE">
+<parameter_description> Like @PANGO_UNDERLINE_SINGLE, but
+drawn continuously across multiple runs. This type
+of underlining is available since Pango 1.46.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_UNDERLINE_DOUBLE_LINE">
+<parameter_description> Like @PANGO_UNDERLINE_DOUBLE, but
+drawn continuously across multiple runs. This type
+of underlining is available since Pango 1.46.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_UNDERLINE_ERROR_LINE">
+<parameter_description> Like @PANGO_UNDERLINE_ERROR, but
+drawn continuously across multiple runs. This type
+of underlining is available since Pango 1.46.
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoVariant">
+<description>
+An enumeration specifying capitalization variant of the font.
+
+</description>
+<parameters>
+<parameter name="PANGO_VARIANT_NORMAL">
+<parameter_description> A normal font.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_VARIANT_SMALL_CAPS">
+<parameter_description> A font with the lower case characters
+replaced by smaller variants of the capital characters.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_VARIANT_ALL_SMALL_CAPS">
+<parameter_description> A font with all characters
+replaced by smaller variants of the capital characters.
+Since: 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_VARIANT_PETITE_CAPS">
+<parameter_description> A font with the lower case characters
+replaced by smaller variants of the capital characters.
+Petite Caps can be even smaller than Small Caps.
+Since: 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_VARIANT_ALL_PETITE_CAPS">
+<parameter_description> A font with all characters
+replaced by smaller variants of the capital characters.
+Petite Caps can be even smaller than Small Caps.
+Since: 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_VARIANT_UNICASE">
+<parameter_description> A font with the upper case characters
+replaced by smaller variants of the capital letters.
+Since: 1.50
+</parameter_description>
+</parameter>
+<parameter name="PANGO_VARIANT_TITLE_CAPS">
+<parameter_description> A font with capital letters that
+are more suitable for all-uppercase titles.
+Since: 1.50
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoWeight">
+<description>
+An enumeration specifying the weight (boldness) of a font.
+
+This is a numerical value ranging from 100 to 1000, but there
+are some predefined values.
+
+</description>
+<parameters>
+<parameter name="PANGO_WEIGHT_THIN">
+<parameter_description> the thin weight (= 100; Since: 1.24)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_ULTRALIGHT">
+<parameter_description> the ultralight weight (= 200)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_LIGHT">
+<parameter_description> the light weight (= 300)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_SEMILIGHT">
+<parameter_description> the semilight weight (= 350; Since: 1.36.7)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_BOOK">
+<parameter_description> the book weight (= 380; Since: 1.24)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_NORMAL">
+<parameter_description> the default weight (= 400)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_MEDIUM">
+<parameter_description> the normal weight (= 500; Since: 1.24)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_SEMIBOLD">
+<parameter_description> the semibold weight (= 600)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_BOLD">
+<parameter_description> the bold weight (= 700)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_ULTRABOLD">
+<parameter_description> the ultrabold weight (= 800)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_HEAVY">
+<parameter_description> the heavy weight (= 900)
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WEIGHT_ULTRAHEAVY">
+<parameter_description> the ultraheavy weight (= 1000; Since: 1.24)
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<enum name="PangoWrapMode">
+<description>
+`PangoWrapMode` describes how to wrap the lines of a `PangoLayout`
+to the desired width.
+
+For @PANGO_WRAP_WORD, Pango uses break opportunities that are determined
+by the Unicode line breaking algorithm. For @PANGO_WRAP_CHAR, Pango allows
+breaking at grapheme boundaries that are determined by the Unicode text
+segmentation algorithm.
+
+</description>
+<parameters>
+<parameter name="PANGO_WRAP_WORD">
+<parameter_description> wrap lines at word boundaries.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WRAP_CHAR">
+<parameter_description> wrap lines at character boundaries.
+</parameter_description>
+</parameter>
+<parameter name="PANGO_WRAP_WORD_CHAR">
+<parameter_description> wrap lines at word boundaries, but fall back to
+character boundaries if there is not enough space for a full word.
+</parameter_description>
+</parameter>
+</parameters>
+</enum>
+
+<function name="pango_attr_allow_breaks_new">
+<description>
+Create a new allow-breaks attribute.
+
+If breaks are disabled, the range will be kept in a
+single run, as far as possible.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="allow_breaks">
+<parameter_description> %TRUE if we line breaks are allowed
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_background_alpha_new">
+<description>
+Create a new background alpha attribute.
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="alpha">
+<parameter_description> the alpha value, between 1 and 65536
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_background_new">
+<description>
+Create a new background color attribute.
+
+
+</description>
+<parameters>
+<parameter name="red">
+<parameter_description> the red value (ranging from 0 to 65535)
+</parameter_description>
+</parameter>
+<parameter name="green">
+<parameter_description> the green value
+</parameter_description>
+</parameter>
+<parameter name="blue">
+<parameter_description> the blue value
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_baseline_shift_new">
+<description>
+Create a new baseline displacement attribute.
+
+The effect of this attribute is to shift the baseline of a run,
+relative to the run of preceding run.
+
+&lt;picture&gt;
+&lt;source srcset=&quot;baseline-shift-dark.png&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;
+&lt;img alt=&quot;Baseline Shift&quot; src=&quot;baseline-shift-light.png&quot;&gt;
+&lt;/picture&gt;
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="shift">
+<parameter_description> either a `PangoBaselineShift` enumeration value or an absolute value (&gt; 1024)
+in Pango units, relative to the baseline of the previous run.
+Positive values displace the text upwards.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_break">
+<description>
+Apply customization from attributes to the breaks in @attrs.
+
+The line breaks are assumed to have been produced
+by [func@Pango.default_break] and [func@Pango.tailor_break].
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> text to break. Must be valid UTF-8
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of text in bytes (may be -1 if @text is nul-terminated)
+</parameter_description>
+</parameter>
+<parameter name="attr_list">
+<parameter_description> `PangoAttrList` to apply
+</parameter_description>
+</parameter>
+<parameter name="offset">
+<parameter_description> Byte offset of @text from the beginning of the paragraph
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> array with one `PangoLogAttr`
+per character in @text, plus one extra, to be filled in
+</parameter_description>
+</parameter>
+<parameter name="attrs_len">
+<parameter_description> length of @attrs array
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_fallback_new">
+<description>
+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.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="enable_fallback">
+<parameter_description> %TRUE if we should fall back on other fonts
+for characters the active font is missing
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_family_new">
+<description>
+Create a new font family attribute.
+
+
+</description>
+<parameters>
+<parameter name="family">
+<parameter_description> the family or comma-separated list of families
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_font_desc_new">
+<description>
+Create a new font description attribute.
+
+This attribute allows setting family, style, weight, variant,
+stretch, and size simultaneously.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> the font description
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_font_features_new">
+<description>
+Create a new font features tag attribute.
+
+You can use this attribute to select OpenType font features like small-caps,
+alternative glyphs, ligatures, etc. for fonts that support them.
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="features">
+<parameter_description> a string with OpenType font features, with the syntax of the [CSS
+font-feature-settings property](https://www.w3.org/TR/css-fonts-4/#font-rend-desc)
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_font_scale_new">
+<description>
+Create a new font scale attribute.
+
+The effect of this attribute is to change the font size of a run,
+relative to the size of preceding run.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="scale">
+<parameter_description> a `PangoFontScale` value, which indicates font size change relative
+to the size of the previous run.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_foreground_alpha_new">
+<description>
+Create a new foreground alpha attribute.
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="alpha">
+<parameter_description> the alpha value, between 1 and 65536
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_foreground_new">
+<description>
+Create a new foreground color attribute.
+
+
+</description>
+<parameters>
+<parameter name="red">
+<parameter_description> the red value (ranging from 0 to 65535)
+</parameter_description>
+</parameter>
+<parameter name="green">
+<parameter_description> the green value
+</parameter_description>
+</parameter>
+<parameter name="blue">
+<parameter_description> the blue value
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_gravity_hint_new">
+<description>
+Create a new gravity hint attribute.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="hint">
+<parameter_description> the gravity hint value
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_gravity_new">
+<description>
+Create a new gravity attribute.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="gravity">
+<parameter_description> the gravity value; should not be %PANGO_GRAVITY_AUTO
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_insert_hyphens_new">
+<description>
+Create a new insert-hyphens attribute.
+
+Pango will insert hyphens when breaking lines in
+the middle of a word. This attribute can be used
+to suppress the hyphen.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="insert_hyphens">
+<parameter_description> %TRUE if hyphens should be inserted
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_iterator_copy">
+<description>
+Copy a `PangoAttrIterator`.
+
+
+</description>
+<parameters>
+<parameter name="iterator">
+<parameter_description> a `PangoAttrIterator`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttrIterator`, which should be freed with
+[method@Pango.AttrIterator.destroy]
+</return>
+</function>
+
+<function name="pango_attr_iterator_destroy">
+<description>
+Destroy a `PangoAttrIterator` and free all associated memory.
+
+</description>
+<parameters>
+<parameter name="iterator">
+<parameter_description> a `PangoAttrIterator`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_iterator_get">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="iterator">
+<parameter_description> a `PangoAttrIterator`
+</parameter_description>
+</parameter>
+<parameter name="type">
+<parameter_description> the type of attribute to find
+</parameter_description>
+</parameter>
+</parameters>
+<return> the current
+attribute of the given type, or %NULL if no attribute
+of that type applies to the current location.
+</return>
+</function>
+
+<function name="pango_attr_iterator_get_attrs">
+<description>
+Gets a list of all attributes at the current position of the
+iterator.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="iterator">
+<parameter_description> a `PangoAttrIterator`
+</parameter_description>
+</parameter>
+</parameters>
+<return>
+a list of all attributes for the current range. To free
+this value, call [method@Pango.Attribute.destroy] on each
+value and g_slist_free() on the list.
+
+</return>
+</function>
+
+<function name="pango_attr_iterator_get_font">
+<description>
+Get the font and other attributes at the current
+iterator position.
+
+</description>
+<parameters>
+<parameter name="iterator">
+<parameter_description> a `PangoAttrIterator`
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription` to fill in with the current
+values. The family name in this structure will be set using
+[method@Pango.FontDescription.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:
+`pango_font_description_set_family (desc, pango_font_description_get_family (desc))`.
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> location to store language tag
+for item, or %NULL if none is found.
+</parameter_description>
+</parameter>
+<parameter name="extra_attrs">
+<parameter_description>
+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
+[method@Pango.Attribute.destroy] on each member.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_iterator_next">
+<description>
+Advance the iterator until the next change of style.
+
+
+</description>
+<parameters>
+<parameter name="iterator">
+<parameter_description> a `PangoAttrIterator`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if the iterator is at the end
+of the list, otherwise %TRUE
+</return>
+</function>
+
+<function name="pango_attr_iterator_range">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="iterator">
+<parameter_description> a PangoAttrIterator
+</parameter_description>
+</parameter>
+<parameter name="start">
+<parameter_description> location to store the start of the range
+</parameter_description>
+</parameter>
+<parameter name="end">
+<parameter_description> location to store the end of the range
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_language_new">
+<description>
+Create a new language tag attribute.
+
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> language tag
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_letter_spacing_new">
+<description>
+Create a new letter-spacing attribute.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="letter_spacing">
+<parameter_description> amount of extra space to add between
+graphemes of the text, in Pango units
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_line_height_new">
+<description>
+Modify the height of logical line extents by a factor.
+
+This affects the values returned by
+[method@Pango.LayoutLine.get_extents],
+[method@Pango.LayoutLine.get_pixel_extents] and
+[method@Pango.LayoutIter.get_line_extents].
+
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="factor">
+<parameter_description> the scaling factor to apply to the logical height
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_line_height_new_absolute">
+<description>
+Override the height of logical line extents to be @height.
+
+This affects the values returned by
+[method@Pango.LayoutLine.get_extents],
+[method@Pango.LayoutLine.get_pixel_extents] and
+[method@Pango.LayoutIter.get_line_extents].
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="height">
+<parameter_description> the line height, in %PANGO_SCALE-ths of a point
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_list_change">
+<description>
+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 [method@Pango.AttrList.insert]
+for creating an attribute list in order (potentially
+much slower for large lists). However,
+[method@Pango.AttrList.insert] is not suitable for
+continually changing a set of attributes since it
+never removes or combines existing attributes.
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="attr">
+<parameter_description> the attribute to insert
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_list_copy">
+<description>
+Copy @list and return an identical new list.
+
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttrList`, with a reference count of one,
+which should be freed with [method@Pango.AttrList.unref].
+Returns %NULL if @list was %NULL.
+</return>
+</function>
+
+<function name="pango_attr_list_equal">
+<description>
+Checks whether @list and @other_list contain the same
+attributes and whether those attributes apply to the
+same ranges.
+
+Beware that this will return wrong values if any list
+contains duplicates.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="other_list">
+<parameter_description> the other `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the lists are equal, %FALSE if
+they aren't
+
+</return>
+</function>
+
+<function name="pango_attr_list_filter">
+<description>
+Given a `PangoAttrList` and callback function, removes
+any elements of @list for which @func returns %TRUE and
+inserts them into a new list.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="func">
+<parameter_description> callback function;
+returns %TRUE if an attribute should be filtered out
+</parameter_description>
+</parameter>
+<parameter name="data">
+<parameter_description> Data to be passed to @func
+</parameter_description>
+</parameter>
+</parameters>
+<return> the new
+`PangoAttrList` or %NULL if no attributes of the
+given types were found
+
+</return>
+</function>
+
+<function name="pango_attr_list_from_string">
+<description>
+Deserializes a `PangoAttrList` from a string.
+
+This is the counterpart to [method@Pango.AttrList.to_string].
+See that functions for details about the format.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> a string
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new `PangoAttrList`
+</return>
+</function>
+
+<function name="pango_attr_list_get_attributes">
+<description>
+Gets a list of all attributes in @list.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return>
+a list of all attributes in @list. To free this value,
+call [method@Pango.Attribute.destroy] on each value and
+g_slist_free() on the list.
+
+</return>
+</function>
+
+<function name="pango_attr_list_get_iterator">
+<description>
+Create a iterator initialized to the beginning of the list.
+
+@list must not be modified until this iterator is freed.
+
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttrIterator`, which should be freed with
+[method@Pango.AttrIterator.destroy]
+</return>
+</function>
+
+<function name="pango_attr_list_insert">
+<description>
+Insert the given attribute into the `PangoAttrList`.
+
+It will be inserted after all other attributes with a
+matching @start_index.
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="attr">
+<parameter_description> the attribute to insert
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_list_insert_before">
+<description>
+Insert the given attribute into the `PangoAttrList`.
+
+It will be inserted before all other attributes with a
+matching @start_index.
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="attr">
+<parameter_description> the attribute to insert
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_list_new">
+<description>
+Create a new empty attribute list with a reference
+count of one.
+
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated
+`PangoAttrList`, which should be freed with
+[method@Pango.AttrList.unref]
+</return>
+</function>
+
+<function name="pango_attr_list_ref">
+<description>
+Increase the reference count of the given attribute
+list by one.
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute list passed in
+
+</return>
+</function>
+
+<function name="pango_attr_list_splice">
+<description>
+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 [method@Pango.AttrList.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.
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="other">
+<parameter_description> another `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="pos">
+<parameter_description> the position in @list at which to insert @other
+</parameter_description>
+</parameter>
+<parameter name="len">
+<parameter_description> 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)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_list_to_string">
+<description>
+Serializes a `PangoAttrList` to a string.
+
+No guarantees are made about the format of the string,
+it may change between Pango versions.
+
+The intended use of this function is testing and
+debugging. The format is not meant as a permanent
+storage format.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly allocated string
+</return>
+</function>
+
+<function name="pango_attr_list_unref">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_list_update">
+<description>
+Update indices of attributes in @list for a change in the
+text they refer to.
+
+The change that this function applies is removing @remove
+bytes at position @pos and inserting @add bytes instead.
+
+Attributes that fall entirely in the (@pos, @pos + @remove)
+range are removed.
+
+Attributes that start or end inside the (@pos, @pos + @remove)
+range are shortened to reflect the removal.
+
+Attributes start and end positions are updated if they are
+behind @pos + @remove.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="pos">
+<parameter_description> the position of the change
+</parameter_description>
+</parameter>
+<parameter name="remove">
+<parameter_description> the number of removed bytes
+</parameter_description>
+</parameter>
+<parameter name="add">
+<parameter_description> the number of added bytes
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attr_overline_color_new">
+<description>
+Create a new overline color attribute.
+
+This attribute modifies the color of overlines.
+If not set, overlines will use the foreground color.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="red">
+<parameter_description> the red value (ranging from 0 to 65535)
+</parameter_description>
+</parameter>
+<parameter name="green">
+<parameter_description> the green value
+</parameter_description>
+</parameter>
+<parameter name="blue">
+<parameter_description> the blue value
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_overline_new">
+<description>
+Create a new overline-style attribute.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="overline">
+<parameter_description> the overline style
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_rise_new">
+<description>
+Create a new baseline displacement attribute.
+
+
+</description>
+<parameters>
+<parameter name="rise">
+<parameter_description> the amount that the text should be displaced vertically,
+in Pango units. Positive values displace the text upwards.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_scale_new">
+<description>
+Create a new font size scale attribute.
+
+The base font for the affected text will have
+its size multiplied by @scale_factor.
+
+
+</description>
+<parameters>
+<parameter name="scale_factor">
+<parameter_description> factor to scale the font
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_sentence_new">
+<description>
+Marks the range of the attribute as a single sentence.
+
+Note that this may require adjustments to word and
+sentence classification around the range.
+
+Since: 1.50
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_shape_new">
+<description>
+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`.
+
+
+</description>
+<parameters>
+<parameter name="ink_rect">
+<parameter_description> ink rectangle to assign to each character
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> logical rectangle to assign to each character
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_shape_new_with_data">
+<description>
+Creates a new shape attribute.
+
+Like [func@Pango.AttrShape.new], but a user data pointer
+is also provided; this pointer can be accessed when later
+rendering the glyph.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="ink_rect">
+<parameter_description> ink rectangle to assign to each character
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> logical rectangle to assign to each character
+</parameter_description>
+</parameter>
+<parameter name="data">
+<parameter_description> user data pointer
+</parameter_description>
+</parameter>
+<parameter name="copy_func">
+<parameter_description> function to copy @data when the
+attribute is copied. If %NULL, @data is simply copied
+as a pointer
+</parameter_description>
+</parameter>
+<parameter name="destroy_func">
+<parameter_description> function to free @data when the
+attribute is freed
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_show_new">
+<description>
+Create a new attribute that influences how invisible
+characters are rendered.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="flags">
+<parameter_description> `PangoShowFlags` to apply
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_size_new">
+<description>
+Create a new font-size attribute in fractional points.
+
+
+</description>
+<parameters>
+<parameter name="size">
+<parameter_description> the font size, in %PANGO_SCALE-ths of a point
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_size_new_absolute">
+<description>
+Create a new font-size attribute in device units.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="size">
+<parameter_description> the font size, in %PANGO_SCALE-ths of a device unit
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_stretch_new">
+<description>
+Create a new font stretch attribute.
+
+
+</description>
+<parameters>
+<parameter name="stretch">
+<parameter_description> the stretch
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_strikethrough_color_new">
+<description>
+Create a new strikethrough color attribute.
+
+This attribute modifies the color of strikethrough lines.
+If not set, strikethrough lines will use the foreground color.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="red">
+<parameter_description> the red value (ranging from 0 to 65535)
+</parameter_description>
+</parameter>
+<parameter name="green">
+<parameter_description> the green value
+</parameter_description>
+</parameter>
+<parameter name="blue">
+<parameter_description> the blue value
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_strikethrough_new">
+<description>
+Create a new strike-through attribute.
+
+
+</description>
+<parameters>
+<parameter name="strikethrough">
+<parameter_description> %TRUE if the text should be struck-through
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_style_new">
+<description>
+Create a new font slant style attribute.
+
+
+</description>
+<parameters>
+<parameter name="style">
+<parameter_description> the slant style
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_text_transform_new">
+<description>
+Create a new attribute that influences how characters
+are transformed during shaping.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="transform">
+<parameter_description> `PangoTextTransform` to apply
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_type_get_name">
+<description>
+Fetches the attribute type name.
+
+The attribute type name is the string passed in
+when registering the type using
+[func@Pango.AttrType.register].
+
+The returned value is an interned string (see
+g_intern_string() for what that means) that should
+not be modified or freed.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="type">
+<parameter_description> an attribute type ID to fetch the name for
+</parameter_description>
+</parameter>
+</parameters>
+<return> the type ID name (which
+may be %NULL), or %NULL if @type is a built-in Pango
+attribute type or invalid.
+
+</return>
+</function>
+
+<function name="pango_attr_type_register">
+<description>
+Allocate a new attribute type ID.
+
+The attribute type name can be accessed later
+by using [func@Pango.AttrType.get_name].
+
+
+</description>
+<parameters>
+<parameter name="name">
+<parameter_description> an identifier for the type
+</parameter_description>
+</parameter>
+</parameters>
+<return> the new type ID.
+</return>
+</function>
+
+<function name="pango_attr_underline_color_new">
+<description>
+Create a new underline color attribute.
+
+This attribute modifies the color of underlines.
+If not set, underlines will use the foreground color.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="red">
+<parameter_description> the red value (ranging from 0 to 65535)
+</parameter_description>
+</parameter>
+<parameter name="green">
+<parameter_description> the green value
+</parameter_description>
+</parameter>
+<parameter name="blue">
+<parameter_description> the blue value
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attr_underline_new">
+<description>
+Create a new underline-style attribute.
+
+
+</description>
+<parameters>
+<parameter name="underline">
+<parameter_description> the underline style
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_variant_new">
+<description>
+Create a new font variant attribute (normal or small caps).
+
+
+</description>
+<parameters>
+<parameter name="variant">
+<parameter_description> the variant
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoAttribute`,
+which should be freed with [method@Pango.Attribute.destroy].
+</return>
+</function>
+
+<function name="pango_attr_weight_new">
+<description>
+Create a new font weight attribute.
+
+
+</description>
+<parameters>
+<parameter name="weight">
+<parameter_description> the weight
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+</return>
+</function>
+
+<function name="pango_attr_word_new">
+<description>
+Marks the range of the attribute as a single word.
+
+Note that this may require adjustments to word and
+sentence classification around the range.
+
+Since: 1.50
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy]
+
+</return>
+</function>
+
+<function name="pango_attribute_as_color">
+<description>
+Returns the attribute cast to `PangoAttrColor`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` such as foreground
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrColor`,
+or %NULL if it's not a color attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_as_float">
+<description>
+Returns the attribute cast to `PangoAttrFloat`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` such as scale
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrFloat`,
+or %NULL if it's not a floating point attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_as_font_desc">
+<description>
+Returns the attribute cast to `PangoAttrFontDesc`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` representing a font description
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrFontDesc`,
+or %NULL if it's not a font description attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_as_font_features">
+<description>
+Returns the attribute cast to `PangoAttrFontFeatures`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` representing font features
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrFontFeatures`,
+or %NULL if it's not a font features attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_as_int">
+<description>
+Returns the attribute cast to `PangoAttrInt`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` such as weight
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrInt`,
+or %NULL if it's not an integer attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_as_language">
+<description>
+Returns the attribute cast to `PangoAttrLanguage`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` representing a language
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrLanguage`,
+or %NULL if it's not a language attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_as_shape">
+<description>
+Returns the attribute cast to `PangoAttrShape`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` representing a shape
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrShape`,
+or %NULL if it's not a shape attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_as_size">
+<description>
+Returns the attribute cast to `PangoAttrSize`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` representing a size
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrSize`,
+or NULL if it's not a size attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_as_string">
+<description>
+Returns the attribute cast to `PangoAttrString`.
+
+This is mainly useful for language bindings.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> A `PangoAttribute` such as family
+</parameter_description>
+</parameter>
+</parameters>
+<return> The attribute as `PangoAttrString`,
+or %NULL if it's not a string attribute
+
+</return>
+</function>
+
+<function name="pango_attribute_copy">
+<description>
+Make a copy of an attribute.
+
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> a `PangoAttribute`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoAttribute`, which should be freed with
+[method@Pango.Attribute.destroy].
+</return>
+</function>
+
+<function name="pango_attribute_destroy">
+<description>
+Destroy a `PangoAttribute` and free all associated memory.
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> a `PangoAttribute`.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_attribute_equal">
+<description>
+Compare two attributes for equality.
+
+This compares only the actual value of the two
+attributes and not the ranges that the attributes
+apply to.
+
+
+</description>
+<parameters>
+<parameter name="attr1">
+<parameter_description> a `PangoAttribute`
+</parameter_description>
+</parameter>
+<parameter name="attr2">
+<parameter_description> another `PangoAttribute`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the two attributes have the same value
+</return>
+</function>
+
+<function name="pango_attribute_init">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="attr">
+<parameter_description> a `PangoAttribute`
+</parameter_description>
+</parameter>
+<parameter name="klass">
+<parameter_description> a `PangoAttrClass`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_bidi_type_for_unichar">
+<description>
+Determines the bidirectional type of a character.
+
+The bidirectional type is specified in the Unicode Character Database.
+
+A simplified version of this function is available as [func@unichar_direction].
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="ch">
+<parameter_description> a Unicode character
+</parameter_description>
+</parameter>
+</parameters>
+<return> the bidirectional character type, as used in the
+Unicode bidirectional algorithm.
+
+</return>
+</function>
+
+<function name="pango_break">
+<description>
+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
+[func@Pango.get_log_attrs].
+
+Deprecated: 1.44: Use [func@Pango.default_break],
+[func@Pango.tailor_break] and func@Pango.attr_break].
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> the text to process. Must be valid UTF-8
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of @text in bytes (may be -1 if @text is nul-terminated)
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description> `PangoAnalysis` structure for @text
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> an array to store character information in
+</parameter_description>
+</parameter>
+<parameter name="attrs_len">
+<parameter_description> size of the array passed as @attrs
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_context_get_font_options">
+<description>
+Retrieves any font rendering options previously set with
+[func@PangoCairo.context_set_font_options].
+
+This function does not report options that are derived from
+the target surface by [func@update_context].
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`, from a pangocairo font map
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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.
+
+</return>
+</function>
+
+<function name="pango_cairo_context_get_resolution">
+<description>
+Gets the resolution for the context.
+
+See [func@PangoCairo.context_set_resolution]
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`, from a pangocairo font map
+</parameter_description>
+</parameter>
+</parameters>
+<return> the resolution in &quot;dots per inch&quot;. A negative value will
+be returned if no resolution has previously been set.
+
+</return>
+</function>
+
+<function name="pango_cairo_context_get_shape_renderer">
+<description>
+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
+[func@PangoCairo.context_set_shape_renderer], if any.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`, from a pangocairo font map
+</parameter_description>
+</parameter>
+<parameter name="data">
+<parameter_description> Pointer to `gpointer` to return user data
+</parameter_description>
+</parameter>
+</parameters>
+<return> the shape rendering callback
+previously set on the context, or %NULL if no shape rendering callback
+have been set.
+
+</return>
+</function>
+
+<function name="pango_cairo_context_set_font_options">
+<description>
+Sets the font options used when rendering text with this context.
+
+These options override any options that [func@update_context]
+derives from the target surface.
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`, from a pangocairo font map
+</parameter_description>
+</parameter>
+<parameter name="options">
+<parameter_description> a `cairo_font_options_t`, or %NULL to unset
+any previously set options. A copy is made.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_context_set_resolution">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`, from a pangocairo font map
+</parameter_description>
+</parameter>
+<parameter name="dpi">
+<parameter_description> the resolution in &quot;dots per inch&quot;. (Physical inches aren't actually
+involved; the terminology is conventional.) A 0 or negative value
+means to use the resolution from the font map.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_context_set_shape_renderer">
+<description>
+Sets callback function for context to use for rendering attributes
+of type %PANGO_ATTR_SHAPE.
+
+See `PangoCairoShapeRendererFunc` for details.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`, from a pangocairo font map
+</parameter_description>
+</parameter>
+<parameter name="func">
+<parameter_description> Callback function for rendering attributes of
+type %PANGO_ATTR_SHAPE, or %NULL to disable shape rendering.
+</parameter_description>
+</parameter>
+<parameter name="data">
+<parameter_description> User data that will be passed to @func.
+</parameter_description>
+</parameter>
+<parameter name="dnotify">
+<parameter_description> Callback that will be called when the
+context is freed to release @data
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_create_context">
+<description>
+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 [ctor@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 [func@create_layout] instead.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly created `PangoContext`
+
+</return>
+</function>
+
+<function name="pango_cairo_create_layout">
+<description>
+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 [method@Pango.Layout.get_size] or drawing with functions like
+[func@show_layout]. If you change the transformation or target
+surface for @cr, you need to call [func@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.
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly created `PangoLayout`
+
+</return>
+</function>
+
+<function name="pango_cairo_error_underline_path">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> The X coordinate of one corner of the rectangle
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> The Y coordinate of one corner of the rectangle
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> Non-negative width of the rectangle
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> Non-negative height of the rectangle
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_font_get_scaled_font">
+<description>
+Gets the `cairo_scaled_font_t` used by @font.
+The scaled font can be referenced and kept using
+cairo_scaled_font_reference().
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont` from a `PangoCairoFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `cairo_scaled_font_t`
+used by @font
+
+</return>
+</function>
+
+<function name="pango_cairo_font_map_create_context">
+<description>
+Create a `PangoContext` for the given fontmap.
+
+Since: 1.10
+
+Deprecated: 1.22: Use pango_font_map_create_context() instead.
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoCairoFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly created context; free with g_object_unref().
+
+</return>
+</function>
+
+<function name="pango_cairo_font_map_get_default">
+<description>
+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
+[method@PangoCairo.FontMap.set_default]. This can be used to
+change the Cairo font backend that the default fontmap uses
+for example.
+
+Note that since Pango 1.32.6, the default fontmap is per-thread.
+Each thread gets its own default fontmap. In this way, PangoCairo
+can be used safely from multiple threads.
+
+Since: 1.10
+
+</description>
+<parameters>
+</parameters>
+<return> the default PangoCairo fontmap
+for the current thread. This object is owned by Pango and must
+not be freed.
+
+</return>
+</function>
+
+<function name="pango_cairo_font_map_get_font_type">
+<description>
+Gets the type of Cairo font backend that @fontmap uses.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoCairoFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `cairo_font_type_t` cairo font backend type
+
+</return>
+</function>
+
+<function name="pango_cairo_font_map_get_resolution">
+<description>
+Gets the resolution for the fontmap.
+
+See [method@PangoCairo.FontMap.set_resolution].
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoCairoFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the resolution in &quot;dots per inch&quot;
+
+</return>
+</function>
+
+<function name="pango_cairo_font_map_new">
+<description>
+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 `func@PangoCairo.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.
+
+You can override the type of backend returned by using an
+environment variable %PANGOCAIRO_BACKEND. Supported types,
+based on your build, are fc (fontconfig), win32, and coretext.
+If requested type is not available, NULL is returned. Ie.
+this is only useful for testing, when at least two backends
+are compiled in.
+
+Since: 1.10
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated `PangoFontMap`,
+which should be freed with g_object_unref().
+
+</return>
+</function>
+
+<function name="pango_cairo_font_map_new_for_font_type">
+<description>
+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 [func@PangoCairo.FontMap.new], or
+in fact in most of those cases, just use [func@PangoCairo.FontMap.get_default].
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="fonttype">
+<parameter_description> desired #cairo_font_type_t
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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.
+
+</return>
+</function>
+
+<function name="pango_cairo_font_map_set_default">
+<description>
+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.
+
+Note that since Pango 1.32.6, the default fontmap is per-thread.
+This function only changes the default fontmap for
+the current thread. Default fontmaps of existing threads
+are not changed. Default fontmaps of any new threads will
+still be created using [func@PangoCairo.FontMap.new].
+
+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 [func@PangoCairo.FontMap.new].
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> The new default font map
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_font_map_set_resolution">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoCairoFontMap`
+</parameter_description>
+</parameter>
+<parameter name="dpi">
+<parameter_description> the resolution in &quot;dots per inch&quot;. (Physical inches aren't actually
+involved; the terminology is conventional.)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_glyph_string_path">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> a `PangoFont` from a `PangoCairoFontMap`
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_layout_line_path">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_layout_path">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="layout">
+<parameter_description> a Pango layout
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_show_error_underline">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> The X coordinate of one corner of the rectangle
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> The Y coordinate of one corner of the rectangle
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> Non-negative width of the rectangle
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> Non-negative height of the rectangle
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_show_glyph_item">
+<description>
+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 [func@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 `glyph_item-&gt;item-&gt;offset`.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the UTF-8 text that @glyph_item refers to
+</parameter_description>
+</parameter>
+<parameter name="glyph_item">
+<parameter_description> a `PangoGlyphItem`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_show_glyph_string">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> a `PangoFont` from a `PangoCairoFontMap`
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_show_layout">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="layout">
+<parameter_description> a Pango layout
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_show_layout_line">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_update_context">
+<description>
+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 [method@Pango.Layout.context_changed] on those layouts.
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="context">
+<parameter_description> a `PangoContext`, from a pangocairo font map
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_cairo_update_layout">
+<description>
+Updates the private `PangoContext` of a `PangoLayout` created with
+[func@create_layout] to match the current transformation and target
+surface of a Cairo context.
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="cr">
+<parameter_description> a Cairo context
+</parameter_description>
+</parameter>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`, from [func@create_layout]
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_color_copy">
+<description>
+Creates a copy of @src.
+
+The copy should be freed with [method@Pango.Color.free].
+Primarily used by language bindings, not that useful
+otherwise (since colors can just be copied by assignment
+in C).
+
+
+</description>
+<parameters>
+<parameter name="src">
+<parameter_description> color to copy
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoColor`,
+which should be freed with [method@Pango.Color.free]
+</return>
+</function>
+
+<function name="pango_color_free">
+<description>
+Frees a color allocated by [method@Pango.Color.copy].
+
+</description>
+<parameters>
+<parameter name="color">
+<parameter_description> an allocated `PangoColor`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_color_parse">
+<description>
+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 CSS Color [specification](https://www.w3.org/TR/css-color-4/#named-colors),
+or it can be a 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`.)
+
+
+</description>
+<parameters>
+<parameter name="color">
+<parameter_description> a `PangoColor` structure in which
+to store the result
+</parameter_description>
+</parameter>
+<parameter name="spec">
+<parameter_description> a string specifying the new color
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if parsing of the specifier succeeded,
+otherwise %FALSE
+</return>
+</function>
+
+<function name="pango_color_parse_with_alpha">
+<description>
+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 CSS Color [specification](https://www.w3.org/TR/css-color-4/#named-colors),
+or it can be a hexadecimal 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`.)
+
+Additionally, parse strings of the form `#rgba`, `#rrggbbaa`,
+`#rrrrggggbbbbaaaa`, if @alpha is not %NULL, and set @alpha
+to the value specified by the hex digits for `a`. If no alpha
+component is found in @spec, @alpha is set to 0xffff (for a
+solid color).
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="color">
+<parameter_description> a `PangoColor` structure in which
+to store the result
+</parameter_description>
+</parameter>
+<parameter name="alpha">
+<parameter_description> return location for alpha
+</parameter_description>
+</parameter>
+<parameter name="spec">
+<parameter_description> a string specifying the new color
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if parsing of the specifier succeeded,
+otherwise %FALSE
+
+</return>
+</function>
+
+<function name="pango_color_to_string">
+<description>
+Returns a textual specification of @color.
+
+The string is in the hexadecimal form `#rrrrggggbbbb`,
+where `r`, `g` and `b` are hex digits representing the
+red, green, and blue components respectively.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="color">
+<parameter_description> a `PangoColor`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly-allocated text string that must
+be freed with g_free().
+
+</return>
+</function>
+
+<function name="pango_config_key_get">
+<description>
+Do not use.  Does not do anything.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> Key to look up, in the form &quot;SECTION/KEY&quot;
+</parameter_description>
+</parameter>
+</parameters>
+<return> %NULL
+
+</return>
+</function>
+
+<function name="pango_config_key_get_system">
+<description>
+Do not use.  Does not do anything.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> Key to look up, in the form &quot;SECTION/KEY&quot;
+</parameter_description>
+</parameter>
+</parameters>
+<return> %NULL
+
+</return>
+</function>
+
+<function name="pango_context_changed">
+<description>
+Forces a change in the context, which will cause any `PangoLayout`
+using this context to re-layout.
+
+This function is only useful when implementing a new backend
+for Pango, something applications won't do. Backends should
+call this function if they have attached extra data to the context
+and such data is changed.
+
+Since: 1.32.4
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_get_base_dir">
+<description>
+Retrieves the base direction for the context.
+
+See [method@Pango.Context.set_base_dir].
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the base direction for the context.
+</return>
+</function>
+
+<function name="pango_context_get_base_gravity">
+<description>
+Retrieves the base gravity for the context.
+
+See [method@Pango.Context.set_base_gravity].
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the base gravity for the context.
+
+</return>
+</function>
+
+<function name="pango_context_get_font_description">
+<description>
+Retrieve the default font description for the context.
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a pointer to the context's default font
+description. This value must not be modified or freed.
+</return>
+</function>
+
+<function name="pango_context_get_font_map">
+<description>
+Gets the `PangoFontMap` used to look up fonts for this context.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the font map for the `PangoContext`.
+This value is owned by Pango and should not be unreferenced.
+
+</return>
+</function>
+
+<function name="pango_context_get_gravity">
+<description>
+Retrieves the gravity for the context.
+
+This is similar to [method@Pango.Context.get_base_gravity],
+except for when the base gravity is %PANGO_GRAVITY_AUTO for
+which [func@Pango.Gravity.get_for_matrix] is used to return the
+gravity from the current context matrix.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the resolved gravity for the context.
+
+</return>
+</function>
+
+<function name="pango_context_get_gravity_hint">
+<description>
+Retrieves the gravity hint for the context.
+
+See [method@Pango.Context.set_gravity_hint] for details.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the gravity hint for the context.
+
+</return>
+</function>
+
+<function name="pango_context_get_language">
+<description>
+Retrieves the global language tag for the context.
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the global language tag.
+</return>
+</function>
+
+<function name="pango_context_get_matrix">
+<description>
+Gets the transformation matrix that will be applied when
+rendering with this context.
+
+See [method@Pango.Context.set_matrix].
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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.
+
+</return>
+</function>
+
+<function name="pango_context_get_metrics">
+<description>
+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 [func@itemize],
+and the family name may be a comma separated list of names. 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.
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription` structure. %NULL means that the
+font description from the context will be used.
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> 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 [func@Pango.Language.get_default]
+will be returned.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoFontMetrics` object. The caller must call
+[method@Pango.FontMetrics.unref] when finished using the object.
+</return>
+</function>
+
+<function name="pango_context_get_round_glyph_positions">
+<description>
+Returns whether font rendering with this context should
+round glyph positions and widths.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_get_serial">
+<description>
+Returns the current serial number of @context.
+
+The serial number is initialized to an small number larger than zero
+when a new context is created and is increased whenever the context
+is changed using any of the setter functions, or the `PangoFontMap` it
+uses to find fonts has changed. The serial may wrap, but will never
+have the value 0. Since it can wrap, never compare it with &quot;less than&quot;,
+always use &quot;not equals&quot;.
+
+This can be used to automatically detect changes to a `PangoContext`,
+and is only useful when implementing objects that need update when their
+`PangoContext` changes, like `PangoLayout`.
+
+Since: 1.32.4
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> The current serial number of @context.
+
+</return>
+</function>
+
+<function name="pango_context_list_families">
+<description>
+List all families for a context.
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="families">
+<parameter_description> location
+to store a pointer to an array of `PangoFontFamily`. This array should
+be freed with g_free().
+</parameter_description>
+</parameter>
+<parameter name="n_families">
+<parameter_description> location to store the number of elements in @descs
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_load_font">
+<description>
+Loads the font in one of the fontmaps in the context
+that is the closest match for @desc.
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription` describing the font to load
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoFont`
+that was loaded, or %NULL if no font matched.
+</return>
+</function>
+
+<function name="pango_context_load_fontset">
+<description>
+Load a set of fonts in the context that can be used to render
+a font matching @desc.
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription` describing the fonts to load
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> a `PangoLanguage` the fonts will be used for
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoFontset` loaded, or %NULL if no font matched.
+</return>
+</function>
+
+<function name="pango_context_new">
+<description>
+Creates a new `PangoContext` initialized to default values.
+
+This function is not particularly useful as it should always
+be followed by a [method@Pango.Context.set_font_map] call, and the
+function [method@Pango.FontMap.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,
+`gtk_widget_get_pango_context()`. Use those instead.
+
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated `PangoContext`, which should
+be freed with g_object_unref().
+</return>
+</function>
+
+<function name="pango_context_set_base_dir">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="direction">
+<parameter_description> the new base direction
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_set_base_gravity">
+<description>
+Sets the base gravity for the context.
+
+The base gravity is used in laying vertical text out.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="gravity">
+<parameter_description> the new base gravity
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_set_font_description">
+<description>
+Set the default font description for the context
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> the new pango font description
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_set_font_map">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="font_map">
+<parameter_description> the `PangoFontMap` to set.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_set_gravity_hint">
+<description>
+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
+[method@Pango.Context.get_gravity] is set to %PANGO_GRAVITY_EAST
+or %PANGO_GRAVITY_WEST.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="hint">
+<parameter_description> the new gravity hint
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_set_language">
+<description>
+Sets the global language tag for the context.
+
+The default language for the locale of the running process
+can be found using [func@Pango.Language.get_default].
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> the new language tag.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_set_matrix">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`, or %NULL to unset any existing
+matrix. (No matrix set is the same as setting the identity matrix.)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_context_set_round_glyph_positions">
+<description>
+Sets whether font rendering with this context should
+round glyph positions and widths to integral positions,
+in device units.
+
+This is useful when the renderer can't handle subpixel
+positioning of glyphs.
+
+The default value is to round glyph positions, to remain
+compatible with previous Pango behavior.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="round_positions">
+<parameter_description> whether to round glyph positions
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_core_text_font_get_ctfont">
+<description>
+Returns the CTFontRef of a font.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> A `PangoCoreTextFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the CTFontRef associated to @font.
+
+</return>
+</function>
+
+<function name="pango_coverage_copy">
+<description>
+Copy an existing `PangoCoverage`.
+
+
+</description>
+<parameters>
+<parameter name="coverage">
+<parameter_description> a `PangoCoverage`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoCoverage`,
+with a reference count of one, which should be freed with
+[method@Pango.Coverage.unref].
+</return>
+</function>
+
+<function name="pango_coverage_from_bytes">
+<description>
+Convert data generated from pango_coverage_to_bytes()
+back to a `PangoCoverage`.
+
+Deprecated: 1.44: This returns %NULL
+
+</description>
+<parameters>
+<parameter name="bytes">
+<parameter_description> binary data
+representing a `PangoCoverage`
+</parameter_description>
+</parameter>
+<parameter name="n_bytes">
+<parameter_description> the size of @bytes in bytes
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly allocated `PangoCoverage`
+
+</return>
+</function>
+
+<function name="pango_coverage_get">
+<description>
+Determine whether a particular index is covered by @coverage.
+
+
+</description>
+<parameters>
+<parameter name="coverage">
+<parameter_description> a `PangoCoverage`
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> the index to check
+</parameter_description>
+</parameter>
+</parameters>
+<return> the coverage level of @coverage for character @index_.
+</return>
+</function>
+
+<function name="pango_coverage_max">
+<description>
+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.
+
+Deprecated: 1.44: This function does nothing
+
+</description>
+<parameters>
+<parameter name="coverage">
+<parameter_description> a `PangoCoverage`
+</parameter_description>
+</parameter>
+<parameter name="other">
+<parameter_description> another `PangoCoverage`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_coverage_new">
+<description>
+Create a new `PangoCoverage`
+
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated `PangoCoverage`, initialized
+to %PANGO_COVERAGE_NONE with a reference count of one, which
+should be freed with [method@Pango.Coverage.unref].
+</return>
+</function>
+
+<function name="pango_coverage_ref">
+<description>
+Increase the reference count on the `PangoCoverage` by one.
+
+
+</description>
+<parameters>
+<parameter name="coverage">
+<parameter_description> a `PangoCoverage`
+</parameter_description>
+</parameter>
+</parameters>
+<return> @coverage
+</return>
+</function>
+
+<function name="pango_coverage_set">
+<description>
+Modify a particular index within @coverage
+
+</description>
+<parameters>
+<parameter name="coverage">
+<parameter_description> a `PangoCoverage`
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> the index to modify
+</parameter_description>
+</parameter>
+<parameter name="level">
+<parameter_description> the new level for @index_
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_coverage_to_bytes">
+<description>
+Convert a `PangoCoverage` structure into a flat binary format.
+
+Deprecated: 1.44: This returns %NULL
+
+</description>
+<parameters>
+<parameter name="coverage">
+<parameter_description> a `PangoCoverage`
+</parameter_description>
+</parameter>
+<parameter name="bytes">
+<parameter_description>
+location to store result (must be freed with g_free())
+</parameter_description>
+</parameter>
+<parameter name="n_bytes">
+<parameter_description> location to store size of result
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_coverage_unref">
+<description>
+Decrease the reference count on the `PangoCoverage` by one.
+
+If the result is zero, free the coverage and all associated memory.
+
+</description>
+<parameters>
+<parameter name="coverage">
+<parameter_description> a `PangoCoverage`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_default_break">
+<description>
+This is the default break algorithm.
+
+It applies Unicode rules without language-specific
+tailoring, therefore the @analyis argument is unused
+and can be %NULL.
+
+See [func@Pango.tailor_break] for language-specific breaks.
+
+See [func@Pango.attr_break] for attribute-based customization.
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> text to break. Must be valid UTF-8
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of text in bytes (may be -1 if @text is nul-terminated)
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description> a `PangoAnalysis` structure for the @text
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> logical attributes to fill in
+</parameter_description>
+</parameter>
+<parameter name="attrs_len">
+<parameter_description> size of the array passed as @attrs
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_extents_to_pixels">
+<description>
+Converts extents from Pango units to device units.
+
+The conversion is done by 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
+
+</description>
+<parameters>
+<parameter name="inclusive">
+<parameter_description> rectangle to round to pixels inclusively
+</parameter_description>
+</parameter>
+<parameter name="nearest">
+<parameter_description> rectangle to round to nearest pixels
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_decoder_get_charset">
+<description>
+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.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="decoder">
+<parameter_description> a `PangoFcDecoder`
+</parameter_description>
+</parameter>
+<parameter name="fcfont">
+<parameter_description> the `PangoFcFont` to query.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `FcCharset` for @fcfont; must not
+be modified or freed.
+
+</return>
+</function>
+
+<function name="pango_fc_decoder_get_glyph">
+<description>
+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.)
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="decoder">
+<parameter_description> a `PangoFcDecoder`
+</parameter_description>
+</parameter>
+<parameter name="fcfont">
+<parameter_description> a `PangoFcFont` to query.
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> the Unicode code point to convert to a single `PangoGlyph`.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the glyph index, or 0 if the glyph isn't
+covered by the font.
+
+</return>
+</function>
+
+<function name="pango_fc_font_description_from_pattern">
+<description>
+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.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="pattern">
+<parameter_description> a `FcPattern`
+</parameter_description>
+</parameter>
+<parameter name="include_size">
+<parameter_description> 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)
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new `PangoFontDescription`. Free with
+pango_font_description_free().
+
+</return>
+</function>
+
+<function name="pango_fc_font_get_glyph">
+<description>
+Gets the glyph index for a given Unicode character
+for @font.
+
+If you only want to determine whether the font has
+the glyph, use [method@PangoFc.Font.has_char].
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> Unicode character to look up
+</parameter_description>
+</parameter>
+</parameters>
+<return> the glyph index, or 0, if the Unicode
+character doesn't exist in the font.
+
+</return>
+</function>
+
+<function name="pango_fc_font_get_languages">
+<description>
+Returns the languages that are supported by @font.
+
+This corresponds to the FC_LANG member of the FcPattern.
+
+The returned array is only valid as long as the font
+and its fontmap are valid.
+
+Since: 1.48
+Deprecated: 1.50: Use pango_font_get_language()
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a %NULL-terminated
+array of `PangoLanguage`*
+
+</return>
+</function>
+
+<function name="pango_fc_font_get_pattern">
+<description>
+Returns the FcPattern that @font is based on.
+
+Since: 1.48
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the fontconfig pattern for this font
+
+</return>
+</function>
+
+<function name="pango_fc_font_get_raw_extents">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="fcfont">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+<parameter name="glyph">
+<parameter_description> the glyph index to load
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> location to store ink extents of the
+glyph
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> location to store logical extents
+of the glyph
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_get_unknown_glyph">
+<description>
+Returns the index of a glyph suitable for drawing @wc
+as an unknown character.
+
+Use PANGO_GET_UNKNOWN_GLYPH() instead.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> the Unicode character for which a glyph is needed.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a glyph index into @font.
+
+</return>
+</function>
+
+<function name="pango_fc_font_has_char">
+<description>
+Determines whether @font has a glyph for the codepoint @wc.
+
+Since: 1.4
+Deprecated: 1.44: Use [method@Pango.Font.has_char]
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> Unicode codepoint to look up
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @font has the requested codepoint.
+
+</return>
+</function>
+
+<function name="pango_fc_font_kern_glyphs">
+<description>
+This function used to adjust each adjacent pair of glyphs
+in @glyphs according to kerning information in @font.
+
+Since 1.44, it does nothing.
+
+Since: 1.4
+Deprecated: 1.32
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_key_get_context_key">
+<description>
+Gets the context key member of @key.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the font key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the context key, which is owned by @key and should not be modified.
+
+</return>
+</function>
+
+<function name="pango_fc_font_key_get_matrix">
+<description>
+Gets the matrix member of @key.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the font key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the matrix, which is owned by @key and should not be modified.
+
+</return>
+</function>
+
+<function name="pango_fc_font_key_get_pattern">
+<description>
+Gets the fontconfig pattern member of @key.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the font key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the pattern, which is owned by @key and should not be modified.
+
+</return>
+</function>
+
+<function name="pango_fc_font_lock_face">
+<description>
+Gets the FreeType `FT_Face` associated with a font.
+
+This face will be kept around until you call
+[method@PangoFc.Font.unlock_face].
+
+Since: 1.4
+Deprecated: 1.44: Use pango_font_get_hb_font() instead
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the FreeType `FT_Face` associated with @font.
+
+</return>
+</function>
+
+<function name="pango_fc_font_map_add_decoder_find_func">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> The `PangoFcFontMap` to add this method to.
+</parameter_description>
+</parameter>
+<parameter name="findfunc">
+<parameter_description> The `PangoFcDecoderFindFunc` callback function
+</parameter_description>
+</parameter>
+<parameter name="user_data">
+<parameter_description> User data.
+</parameter_description>
+</parameter>
+<parameter name="dnotify">
+<parameter_description> A `GDestroyNotify` callback that will be called when the
+fontmap is finalized and the decoder is released.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_map_cache_clear">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_map_config_changed">
+<description>
+Informs font map that the fontconfig configuration (i.e., FcConfig
+object) used by this font map has changed.
+
+This currently calls [method@PangoFc.FontMap.cache_clear] which
+ensures that list of fonts, etc will be regenerated using the
+updated configuration.
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_map_create_context">
+<description>
+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.
+
+Since: 1.4
+
+Deprecated: 1.22: Use pango_font_map_create_context() instead.
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new `PangoContext`
+
+</return>
+</function>
+
+<function name="pango_fc_font_map_find_decoder">
+<description>
+Finds the decoder to use for @pattern.
+
+Decoders can be added to a font map using
+[method@PangoFc.FontMap.add_decoder_find_func].
+
+Since: 1.26
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> The `PangoFcFontMap` to use.
+</parameter_description>
+</parameter>
+<parameter name="pattern">
+<parameter_description> The `FcPattern` to find the decoder for.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly created `PangoFcDecoder`
+object or %NULL if no decoder is set for @pattern.
+
+</return>
+</function>
+
+<function name="pango_fc_font_map_get_config">
+<description>
+Fetches the `FcConfig` attached to a font map.
+
+See also: [method@PangoFc.FontMap.set_config].
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `FcConfig` object attached to
+@fcfontmap, which might be %NULL. The return value is
+owned by Pango and should not be freed.
+
+</return>
+</function>
+
+<function name="pango_fc_font_map_get_hb_face">
+<description>
+Retrieves the `hb_face_t` for the given `PangoFcFont`.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+<parameter name="fcfont">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `hb_face_t`
+for the given font
+
+</return>
+</function>
+
+<function name="pango_fc_font_map_set_config">
+<description>
+Set the `FcConfig` for this font map to use.
+
+The default value
+is %NULL, which causes Fontconfig to use its global &quot;current config&quot;.
+You can create a new `FcConfig` object and use this API to attach it
+to a font map.
+
+This is particularly useful for example, if you want to use application
+fonts with Pango. For that, you would create a fresh `FcConfig`, add your
+app fonts to it, and attach it to a new Pango font map.
+
+If @fcconfig is different from the previous config attached to the font map,
+[method@PangoFc.FontMap.config_changed] is called.
+
+This function acquires a reference to the `FcConfig` object; the caller
+does **not** need to retain a reference.
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+<parameter name="fcconfig">
+<parameter_description> a `FcConfig`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_map_set_default_substitute">
+<description>
+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.48
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+<parameter name="func">
+<parameter_description> function to call to to do final config tweaking on `FcPattern` objects
+</parameter_description>
+</parameter>
+<parameter name="data">
+<parameter_description> data to pass to @func
+</parameter_description>
+</parameter>
+<parameter name="notify">
+<parameter_description> function to call when @data is no longer used
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_map_shutdown">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="fcfontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_map_substitute_changed">
+<description>
+Call this function any time the results of the default
+substitution function set with
+[method@PangoFc.FontMap.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.48
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFcFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_font_unlock_face">
+<description>
+Releases a font previously obtained with
+[method@PangoFc.Font.lock_face].
+
+Since: 1.4
+Deprecated: 1.44: Use pango_font_get_hb_font() instead
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fc_fontset_key_get_absolute_size">
+<description>
+Gets the absolute font size of @key in Pango units.
+
+This is adjusted for both resolution and transformation matrix.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the fontset key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the pixel size of @key.
+
+</return>
+</function>
+
+<function name="pango_fc_fontset_key_get_context_key">
+<description>
+Gets the context key member of @key.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the font key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the context key, which is owned by @key and should not be modified.
+
+</return>
+</function>
+
+<function name="pango_fc_fontset_key_get_description">
+<description>
+Gets the font description of @key.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the fontset key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the font description, which is owned by @key and should not be modified.
+
+</return>
+</function>
+
+<function name="pango_fc_fontset_key_get_language">
+<description>
+Gets the language member of @key.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the fontset key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the language
+
+</return>
+</function>
+
+<function name="pango_fc_fontset_key_get_matrix">
+<description>
+Gets the matrix member of @key.
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the fontset key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the matrix, which is owned by @key and should not be modified.
+
+</return>
+</function>
+
+<function name="pango_fc_fontset_key_get_resolution">
+<description>
+Gets the resolution of @key
+
+Since: 1.24
+
+</description>
+<parameters>
+<parameter name="key">
+<parameter_description> the fontset key
+</parameter_description>
+</parameter>
+</parameters>
+<return> the resolution of @key
+
+</return>
+</function>
+
+<function name="pango_find_base_dir">
+<description>
+Searches a string the first character that has a strong
+direction, according to the Unicode bidirectional algorithm.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> the text to process. Must be valid UTF-8
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of @text in bytes (may be -1 if @text is nul-terminated)
+</parameter_description>
+</parameter>
+</parameters>
+<return> The direction corresponding to the first strong character.
+If no such character is found, then %PANGO_DIRECTION_NEUTRAL is returned.
+
+</return>
+</function>
+
+<function name="pango_find_map">
+<description>
+Do not use.  Does not do anything.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> the language tag for which to find the map
+</parameter_description>
+</parameter>
+<parameter name="engine_type_id">
+<parameter_description> the engine type for the map to find
+</parameter_description>
+</parameter>
+<parameter name="render_type_id">
+<parameter_description> the render type for the map to find
+</parameter_description>
+</parameter>
+</parameters>
+<return> %NULL.
+
+</return>
+</function>
+
+<function name="pango_find_paragraph_boundary">
+<description>
+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 paragrap (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).
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> UTF-8 text
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of @text in bytes, or -1 if nul-terminated
+</parameter_description>
+</parameter>
+<parameter name="paragraph_delimiter_index">
+<parameter_description> return location for index of
+delimiter
+</parameter_description>
+</parameter>
+<parameter name="next_paragraph_start">
+<parameter_description> return location for start of next
+paragraph
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_describe">
+<description>
+Returns a description of the font, with font size set in points.
+
+Use [method@Pango.Font.describe_with_absolute_size] if you want
+the font size in device units.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly-allocated `PangoFontDescription` object.
+</return>
+</function>
+
+<function name="pango_font_describe_with_absolute_size">
+<description>
+Returns a description of the font, with absolute font size set
+in device units.
+
+Use [method@Pango.Font.describe] if you want the font size in points.
+
+Since: 1.14
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly-allocated `PangoFontDescription` object.
+
+</return>
+</function>
+
+<function name="pango_font_description_better_match">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="old_match">
+<parameter_description> a `PangoFontDescription`, or %NULL
+</parameter_description>
+</parameter>
+<parameter name="new_match">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @new_match is a better match
+</return>
+</function>
+
+<function name="pango_font_description_copy">
+<description>
+Make a copy of a `PangoFontDescription`.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoFontDescription`,
+which should be freed with [method@Pango.FontDescription.free],
+or %NULL if @desc was %NULL.
+</return>
+</function>
+
+<function name="pango_font_description_copy_static">
+<description>
+Make a copy of a `PangoFontDescription`, but don't duplicate
+allocated fields.
+
+This is like [method@Pango.FontDescription.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.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoFontDescription`,
+which should be freed with [method@Pango.FontDescription.free],
+or %NULL if @desc was %NULL.
+</return>
+</function>
+
+<function name="pango_font_description_equal">
+<description>
+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.)
+
+
+</description>
+<parameters>
+<parameter name="desc1">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="desc2">
+<parameter_description> another `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the two font descriptions are identical,
+%FALSE otherwise.
+</return>
+</function>
+
+<function name="pango_font_description_free">
+<description>
+Frees a font description.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_from_string">
+<description>
+Creates a new font description from a string representation.
+
+The string must have the form
+
+&quot;\[FAMILY-LIST] \[STYLE-OPTIONS] \[SIZE] \[VARIATIONS]&quot;,
+
+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 &quot;px&quot; for absolute size.
+VARIATIONS is a comma-separated list of font variation
+specifications of the form &quot;\@axis=value&quot; (the = sign is optional).
+
+The following words are understood as styles:
+&quot;Normal&quot;, &quot;Roman&quot;, &quot;Oblique&quot;, &quot;Italic&quot;.
+
+The following words are understood as variants:
+&quot;Small-Caps&quot;, &quot;All-Small-Caps&quot;, &quot;Petite-Caps&quot;, &quot;All-Petite-Caps&quot;,
+&quot;Unicase&quot;, &quot;Title-Caps&quot;.
+
+The following words are understood as weights:
+&quot;Thin&quot;, &quot;Ultra-Light&quot;, &quot;Extra-Light&quot;, &quot;Light&quot;, &quot;Semi-Light&quot;,
+&quot;Demi-Light&quot;, &quot;Book&quot;, &quot;Regular&quot;, &quot;Medium&quot;, &quot;Semi-Bold&quot;, &quot;Demi-Bold&quot;,
+&quot;Bold&quot;, &quot;Ultra-Bold&quot;, &quot;Extra-Bold&quot;, &quot;Heavy&quot;, &quot;Black&quot;, &quot;Ultra-Black&quot;,
+&quot;Extra-Black&quot;.
+
+The following words are understood as stretch values:
+&quot;Ultra-Condensed&quot;, &quot;Extra-Condensed&quot;, &quot;Condensed&quot;, &quot;Semi-Condensed&quot;,
+&quot;Semi-Expanded&quot;, &quot;Expanded&quot;, &quot;Extra-Expanded&quot;, &quot;Ultra-Expanded&quot;.
+
+The following words are understood as gravity values:
+&quot;Not-Rotated&quot;, &quot;South&quot;, &quot;Upside-Down&quot;, &quot;North&quot;, &quot;Rotated-Left&quot;,
+&quot;East&quot;, &quot;Rotated-Right&quot;, &quot;West&quot;.
+
+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.
+
+A typical example:
+
+&quot;Cantarell Italic Light 15 \@wght=200&quot;
+
+
+</description>
+<parameters>
+<parameter name="str">
+<parameter_description> string representation of a font description.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new `PangoFontDescription`.
+</return>
+</function>
+
+<function name="pango_font_description_get_family">
+<description>
+Gets the family name field of a font description.
+
+See [method@Pango.FontDescription.set_family].
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`.
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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.
+</return>
+</function>
+
+<function name="pango_font_description_get_gravity">
+<description>
+Gets the gravity field of a font description.
+
+See [method@Pango.FontDescription.set_gravity].
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the gravity field for the font description.
+Use [method@Pango.FontDescription.get_set_fields] to find out
+if the field was explicitly set or not.
+
+</return>
+</function>
+
+<function name="pango_font_description_get_set_fields">
+<description>
+Determines which fields in a font description have been set.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a bitmask with bits set corresponding to the
+fields in @desc that have been set.
+</return>
+</function>
+
+<function name="pango_font_description_get_size">
+<description>
+Gets the size field of a font description.
+
+See [method@Pango.FontDescription.set_size].
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the size field for the font description in points
+or device units. You must call
+[method@Pango.FontDescription.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 [method@Pango.FontDescription.get_set_fields] to find out
+if the field was explicitly set or not.
+</return>
+</function>
+
+<function name="pango_font_description_get_size_is_absolute">
+<description>
+Determines whether the size of the font is in points (not absolute)
+or device units (absolute).
+
+See [method@Pango.FontDescription.set_size]
+and [method@Pango.FontDescription.set_absolute_size].
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> whether the size for the font description is in
+points or device units. Use [method@Pango.FontDescription.get_set_fields]
+to find out if the size field of the font description was explicitly
+set or not.
+
+</return>
+</function>
+
+<function name="pango_font_description_get_stretch">
+<description>
+Gets the stretch field of a font description.
+
+See [method@Pango.FontDescription.set_stretch].
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the stretch field for the font description.
+Use [method@Pango.FontDescription.get_set_fields] to find
+out if the field was explicitly set or not.
+</return>
+</function>
+
+<function name="pango_font_description_get_style">
+<description>
+Gets the style field of a `PangoFontDescription`.
+
+See [method@Pango.FontDescription.set_style].
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the style field for the font description.
+Use [method@Pango.FontDescription.get_set_fields] to
+find out if the field was explicitly set or not.
+</return>
+</function>
+
+<function name="pango_font_description_get_variant">
+<description>
+Gets the variant field of a `PangoFontDescription`.
+
+See [method@Pango.FontDescription.set_variant].
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the variant field for the font description.
+Use [method@Pango.FontDescription.get_set_fields] to find
+out if the field was explicitly set or not.
+</return>
+</function>
+
+<function name="pango_font_description_get_variations">
+<description>
+Gets the variations field of a font description.
+
+See [method@Pango.FontDescription.set_variations].
+
+Since: 1.42
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the variations 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.
+
+</return>
+</function>
+
+<function name="pango_font_description_get_weight">
+<description>
+Gets the weight field of a font description.
+
+See [method@Pango.FontDescription.set_weight].
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the weight field for the font description.
+Use [method@Pango.FontDescription.get_set_fields] to find
+out if the field was explicitly set or not.
+</return>
+</function>
+
+<function name="pango_font_description_hash">
+<description>
+Computes a hash of a `PangoFontDescription` structure.
+
+This is suitable to be used, for example, as an argument
+to g_hash_table_new(). The hash value is independent of @desc-&gt;mask.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the hash value.
+</return>
+</function>
+
+<function name="pango_font_description_merge">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="desc_to_merge">
+<parameter_description> the `PangoFontDescription` to merge from,
+or %NULL
+</parameter_description>
+</parameter>
+<parameter name="replace_existing">
+<parameter_description> if %TRUE, replace fields in @desc with the
+corresponding values from @desc_to_merge, even if they
+are already exist.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_merge_static">
+<description>
+Merges the fields that are set in @desc_to_merge into the fields in
+@desc, without copying allocated fields.
+
+This is like [method@Pango.FontDescription.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.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="desc_to_merge">
+<parameter_description> the `PangoFontDescription` to merge from
+</parameter_description>
+</parameter>
+<parameter name="replace_existing">
+<parameter_description> if %TRUE, replace fields in @desc with the
+corresponding values from @desc_to_merge, even if they
+are already exist.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_new">
+<description>
+Creates a new font description structure with all fields unset.
+
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated `PangoFontDescription`, which
+should be freed using [method@Pango.FontDescription.free].
+</return>
+</function>
+
+<function name="pango_font_description_set_absolute_size">
+<description>
+Sets the size field of a font description, in device units.
+
+This is mutually exclusive with [method@Pango.FontDescription.set_size]
+which sets the font size in points.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="size">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_family">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`.
+</parameter_description>
+</parameter>
+<parameter name="family">
+<parameter_description> a string representing the family name.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_family_static">
+<description>
+Sets the family name field of a font description, without copying the string.
+
+This is like [method@Pango.FontDescription.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.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="family">
+<parameter_description> a string representing the family name
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_gravity">
+<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
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="gravity">
+<parameter_description> the gravity for the font description.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_size">
+<description>
+Sets the size field of a font description in fractional points.
+
+This is mutually exclusive with
+[method@Pango.FontDescription.set_absolute_size].
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="size">
+<parameter_description> 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 [method@Pango.FontDescription.set_absolute_size] if you need
+a particular size in device units.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_stretch">
+<description>
+Sets the stretch field of a font description.
+
+The [enum@Pango.Stretch] field specifies how narrow or
+wide the font should be.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="stretch">
+<parameter_description> the stretch for the font description
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_style">
+<description>
+Sets the style field of a `PangoFontDescription`.
+
+The [enum@Pango.Style] 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.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="style">
+<parameter_description> the style for the font description
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_variant">
+<description>
+Sets the variant field of a font description.
+
+The [enum@Pango.Variant] can either be %PANGO_VARIANT_NORMAL
+or %PANGO_VARIANT_SMALL_CAPS.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="variant">
+<parameter_description> the variant type for the font description.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_variations">
+<description>
+Sets the variations field of a font description.
+
+OpenType font variations allow to select a font instance by
+specifying values for a number of axes, such as width or weight.
+
+The format of the variations string is
+
+AXIS1=VALUE,AXIS2=VALUE...
+
+with each AXIS a 4 character tag that identifies a font axis,
+and each VALUE a floating point number. Unknown axes are ignored,
+and values are clamped to their allowed range.
+
+Pango does not currently have a way to find supported axes of
+a font. Both harfbuzz or freetype have API for this.
+
+Since: 1.42
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`.
+</parameter_description>
+</parameter>
+<parameter name="variations">
+<parameter_description> a string representing the variations
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_variations_static">
+<description>
+Sets the variations field of a font description.
+
+This is like [method@Pango.FontDescription.set_variations], except
+that no copy of @variations 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
+@variations is a static string such as a C string literal,
+or if @desc is only needed temporarily.
+
+Since: 1.42
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="variations">
+<parameter_description> a string representing the variations
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_set_weight">
+<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 [enum@Pango.Weight] enumeration, other
+intermediate numeric values are possible.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="weight">
+<parameter_description> the weight for the font description.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_to_filename">
+<description>
+Creates a filename representation of a font description.
+
+The filename is identical to the result from calling
+[method@Pango.FontDescription.to_string], but with underscores
+instead of characters that are untypical in filenames, and in
+lower case only.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new string that must be freed with g_free().
+</return>
+</function>
+
+<function name="pango_font_description_to_string">
+<description>
+Creates a string representation of a font description.
+
+See [func@Pango.FontDescription.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.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new string that must be freed with g_free().
+</return>
+</function>
+
+<function name="pango_font_description_unset_fields">
+<description>
+Unsets some of the fields in a `PangoFontDescription`.
+
+The unset fields will get back to their default values.
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription`
+</parameter_description>
+</parameter>
+<parameter name="to_unset">
+<parameter_description> bitmask of fields in the @desc to unset.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_descriptions_free">
+<description>
+Frees an array of font descriptions.
+
+</description>
+<parameters>
+<parameter name="descs">
+<parameter_description> a pointer
+to an array of `PangoFontDescription`, may be %NULL
+</parameter_description>
+</parameter>
+<parameter name="n_descs">
+<parameter_description> number of font descriptions in @descs
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_deserialize">
+<description>
+Loads data previously created via [method@Pango.Font.serialize].
+
+For a discussion of the supported format, see that function.
+
+Note: to verify that the returned font is identical to
+the one that was serialized, you can compare @bytes to the
+result of serializing the font again.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="bytes">
+<parameter_description> the bytes containing the data
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> return location for an error
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new `PangoFont`
+
+</return>
+</function>
+
+<function name="pango_font_face_describe">
+<description>
+Returns the family, style, variant, weight and stretch of
+a `PangoFontFace`. The size field of the resulting font description
+will be unset.
+
+
+</description>
+<parameters>
+<parameter name="face">
+<parameter_description> a `PangoFontFace`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly-created `PangoFontDescription` structure
+holding the description of the face. Use [method@Pango.FontDescription.free]
+to free the result.
+</return>
+</function>
+
+<function name="pango_font_face_get_face_name">
+<description>
+Gets a name representing the style of this face among the
+different faces in the `PangoFontFamily` for the face. The
+name is suitable for displaying to users.
+
+
+</description>
+<parameters>
+<parameter name="face">
+<parameter_description> a `PangoFontFace`.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the face name for the face. This string is
+owned by the face object and must not be modified or freed.
+</return>
+</function>
+
+<function name="pango_font_face_get_family">
+<description>
+Gets the `PangoFontFamily` that @face belongs to.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="face">
+<parameter_description> a `PangoFontFace`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoFontFamily`
+
+</return>
+</function>
+
+<function name="pango_font_face_is_synthesized">
+<description>
+Returns whether a `PangoFontFace` is synthesized by the underlying
+font rendering engine from another face, perhaps by shearing, emboldening,
+or lightening it.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="face">
+<parameter_description> a `PangoFontFace`
+</parameter_description>
+</parameter>
+</parameters>
+<return> whether @face is synthesized.
+
+</return>
+</function>
+
+<function name="pango_font_face_list_sizes">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="face">
+<parameter_description> a `PangoFontFace`.
+</parameter_description>
+</parameter>
+<parameter name="sizes">
+<parameter_description>
+location to store a pointer to an array of int. This array
+should be freed with g_free().
+</parameter_description>
+</parameter>
+<parameter name="n_sizes">
+<parameter_description> location to store the number of elements in @sizes
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_family_get_face">
+<description>
+Gets the `PangoFontFace` of @family with the given name.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="family">
+<parameter_description> a `PangoFontFamily`
+</parameter_description>
+</parameter>
+<parameter name="name">
+<parameter_description> the name of a face. If the name is %NULL,
+the family's default face (fontconfig calls it &quot;Regular&quot;)
+will be returned.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoFontFace`,
+or %NULL if no face with the given name exists.
+
+</return>
+</function>
+
+<function name="pango_font_family_get_name">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="family">
+<parameter_description> a `PangoFontFamily`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the name of the family. This string is owned
+by the family object and must not be modified or freed.
+</return>
+</function>
+
+<function name="pango_font_family_is_monospace">
+<description>
+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
+[method@Pango.FontMetrics.get_approximate_digit_width], since the
+results of [method@Pango.FontMetrics.get_approximate_char_width] may
+be affected by double-width characters.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="family">
+<parameter_description> a `PangoFontFamily`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the family is monospace.
+
+</return>
+</function>
+
+<function name="pango_font_family_is_variable">
+<description>
+A variable font is a font which has axes that can be modified to
+produce different faces.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="family">
+<parameter_description> a `PangoFontFamily`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the family is variable
+
+</return>
+</function>
+
+<function name="pango_font_family_list_faces">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="family">
+<parameter_description> a `PangoFontFamily`
+</parameter_description>
+</parameter>
+<parameter name="faces">
+<parameter_description>
+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.
+</parameter_description>
+</parameter>
+<parameter name="n_faces">
+<parameter_description> location to store number of elements in @faces.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_find_shaper">
+<description>
+Finds the best matching shaper for a font for a particular
+language tag and character point.
+
+Deprecated: Shape engines are no longer used
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> the language tag
+</parameter_description>
+</parameter>
+<parameter name="ch">
+<parameter_description> a Unicode character.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the best matching shaper.
+</return>
+</function>
+
+<function name="pango_font_get_coverage">
+<description>
+Computes the coverage map for a given font and language tag.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> the language tag
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly-allocated `PangoCoverage`
+object.
+</return>
+</function>
+
+<function name="pango_font_get_face">
+<description>
+Gets the `PangoFontFace` to which @font belongs.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoFontFace`
+
+</return>
+</function>
+
+<function name="pango_font_get_features">
+<description>
+Obtain the OpenType features that are provided by the font.
+
+These are passed to the rendering system, together with features
+that have been explicitly set via attributes.
+
+Note that this does not include OpenType features which the
+rendering system enables by default.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="features">
+<parameter_description> Array to features in
+</parameter_description>
+</parameter>
+<parameter name="len">
+<parameter_description> the length of @features
+</parameter_description>
+</parameter>
+<parameter name="num_features">
+<parameter_description> the number of used items in @features
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_get_font_map">
+<description>
+Gets the font map for which the font was created.
+
+Note that the font maintains a *weak* 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.
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoFontMap`
+for the font
+
+</return>
+</function>
+
+<function name="pango_font_get_glyph_extents">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="glyph">
+<parameter_description> the glyph index
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the glyph as drawn
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the glyph
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_get_hb_font">
+<description>
+Get a `hb_font_t` object backing this font.
+
+Note that the objects returned by this function are cached
+and immutable. If you need to make changes to the `hb_font_t`,
+use hb_font_create_sub_font().
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `hb_font_t` object
+backing the font
+
+</return>
+</function>
+
+<function name="pango_font_get_languages">
+<description>
+Returns the languages that are supported by @font.
+
+If the font backend does not provide this information,
+%NULL is returned. For the fontconfig backend, this
+corresponds to the FC_LANG member of the FcPattern.
+
+The returned array is only valid as long as the font
+and its fontmap are valid.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> an array of `PangoLanguage`
+
+</return>
+</function>
+
+<function name="pango_font_get_metrics">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> language tag used to determine which script
+to get the metrics for, or %NULL to indicate to get the metrics for
+the entire font.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoFontMetrics` object. The caller must call
+[method@Pango.FontMetrics.unref] when finished using the object.
+</return>
+</function>
+
+<function name="pango_font_has_char">
+<description>
+Returns whether the font provides a glyph for this character.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> a Unicode character
+</parameter_description>
+</parameter>
+</parameters>
+<return>%TRUE if @font can render @wc
+
+</return>
+</function>
+
+<function name="pango_font_map_changed">
+<description>
+Forces a change in the context, which will cause any `PangoContext`
+using this fontmap to change.
+
+This function is only useful when implementing a new backend
+for Pango, something applications won't do. Backends should
+call this function if they have attached extra data to the
+context and such data is changed.
+
+Since: 1.34
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_map_create_context">
+<description>
+Creates a `PangoContext` connected to @fontmap.
+
+This is equivalent to [ctor@Pango.Context.new] followed by
+[method@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,
+gtk_widget_get_pango_context(). Use those instead.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoContext`,
+which should be freed with g_object_unref().
+
+</return>
+</function>
+
+<function name="pango_font_map_get_family">
+<description>
+Gets a font family by name.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFontMap`
+</parameter_description>
+</parameter>
+<parameter name="name">
+<parameter_description> a family name
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoFontFamily`
+
+</return>
+</function>
+
+<function name="pango_font_map_get_serial">
+<description>
+Returns the current serial number of @fontmap.
+
+The serial number is initialized to an small number larger than zero
+when a new fontmap is created and is increased whenever the fontmap
+is changed. It may wrap, but will never have the value 0. Since it can
+wrap, never compare it with &quot;less than&quot;, always use &quot;not equals&quot;.
+
+The fontmap can only be changed using backend-specific API, like changing
+fontmap resolution.
+
+This can be used to automatically detect changes to a `PangoFontMap`,
+like in `PangoContext`.
+
+Since: 1.32.4
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> The current serial number of @fontmap.
+
+</return>
+</function>
+
+<function name="pango_font_map_get_shape_engine_type">
+<description>
+Returns the render ID for shape engines for this fontmap.
+See the `render_type` field of `PangoEngineInfo`.
+
+Since: 1.4
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the ID string for shape engines
+for this fontmap
+
+</return>
+</function>
+
+<function name="pango_font_map_list_families">
+<description>
+List all families for a fontmap.
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFontMap`
+</parameter_description>
+</parameter>
+<parameter name="families">
+<parameter_description> location to
+store a pointer to an array of `PangoFontFamily` *.
+This array should be freed with g_free().
+</parameter_description>
+</parameter>
+<parameter name="n_families">
+<parameter_description> location to store the number of elements in @families
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_map_load_font">
+<description>
+Load the font in the fontmap that is the closest match for @desc.
+
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFontMap`
+</parameter_description>
+</parameter>
+<parameter name="context">
+<parameter_description> the `PangoContext` the font will be used with
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription` describing the font to load
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoFont`
+loaded, or %NULL if no font matched.
+</return>
+</function>
+
+<function name="pango_font_map_load_fontset">
+<description>
+Load a set of fonts in the fontmap that can be used to render
+a font matching @desc.
+
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFontMap`
+</parameter_description>
+</parameter>
+<parameter name="context">
+<parameter_description> the `PangoContext` the font will be used with
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a `PangoFontDescription` describing the font to load
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> a `PangoLanguage` the fonts will be used for
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated
+`PangoFontset` loaded, or %NULL if no font matched.
+</return>
+</function>
+
+<function name="pango_font_metrics_get_approximate_char_width">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the character width, in Pango units.
+</return>
+</function>
+
+<function name="pango_font_metrics_get_approximate_digit_width">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the digit width, in Pango units.
+</return>
+</function>
+
+<function name="pango_font_metrics_get_ascent">
+<description>
+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.)
+
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the ascent, in Pango units.
+</return>
+</function>
+
+<function name="pango_font_metrics_get_descent">
+<description>
+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.)
+
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the descent, in Pango units.
+</return>
+</function>
+
+<function name="pango_font_metrics_get_height">
+<description>
+Gets the line height from a font metrics structure.
+
+The line height is the recommended distance between successive
+baselines in wrapped text using this font.
+
+If the line height is not available, 0 is returned.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the height, in Pango units
+
+</return>
+</function>
+
+<function name="pango_font_metrics_get_strikethrough_position">
+<description>
+Gets the suggested position to draw the strikethrough.
+
+The value returned is the distance *above* the
+baseline of the top of the strikethrough.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the suggested strikethrough position, in Pango units.
+
+</return>
+</function>
+
+<function name="pango_font_metrics_get_strikethrough_thickness">
+<description>
+Gets the suggested thickness to draw for the strikethrough.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the suggested strikethrough thickness, in Pango units.
+
+</return>
+</function>
+
+<function name="pango_font_metrics_get_underline_position">
+<description>
+Gets the suggested position to draw the underline.
+
+The value returned is the distance *above* the baseline of the top
+of the underline. Since most fonts have underline positions beneath
+the baseline, this value is typically negative.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the suggested underline position, in Pango units.
+
+</return>
+</function>
+
+<function name="pango_font_metrics_get_underline_thickness">
+<description>
+Gets the suggested thickness to draw for the underline.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure
+</parameter_description>
+</parameter>
+</parameters>
+<return> the suggested underline thickness, in Pango units.
+
+</return>
+</function>
+
+<function name="pango_font_metrics_new">
+<description>
+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.
+
+
+</description>
+<parameters>
+</parameters>
+<return> a newly-created `PangoFontMetrics` structure
+with a reference count of 1.
+</return>
+</function>
+
+<function name="pango_font_metrics_ref">
+<description>
+Increase the reference count of a font metrics structure by one.
+
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return> @metrics
+</return>
+</function>
+
+<function name="pango_font_metrics_unref">
+<description>
+Decrease the reference count of a font metrics structure by one.
+If the result is zero, frees the structure and any associated memory.
+
+</description>
+<parameters>
+<parameter name="metrics">
+<parameter_description> a `PangoFontMetrics` structure, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_serialize">
+<description>
+Serializes the @font in a way that can be uniquely identified.
+
+There are no guarantees about the format of the output across different
+versions of Pango.
+
+The intended use of this function is testing, benchmarking and debugging.
+The format is not meant as a permanent storage format.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `GBytes` containing the serialized form of @font
+
+</return>
+</function>
+
+<function name="pango_fontset_foreach">
+<description>
+Iterates through all the fonts in a fontset, calling @func for
+each one.
+
+If @func returns %TRUE, that stops the iteration.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="fontset">
+<parameter_description> a `PangoFontset`
+</parameter_description>
+</parameter>
+<parameter name="func">
+<parameter_description> Callback function
+</parameter_description>
+</parameter>
+<parameter name="data">
+<parameter_description> data to pass to the callback function
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fontset_get_font">
+<description>
+Returns the font in the fontset that contains the best glyph for a
+Unicode character.
+
+
+</description>
+<parameters>
+<parameter name="fontset">
+<parameter_description> a `PangoFontset`
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> a Unicode character
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoFont`
+</return>
+</function>
+
+<function name="pango_fontset_get_metrics">
+<description>
+Get overall metric information for the fonts in the fontset.
+
+
+</description>
+<parameters>
+<parameter name="fontset">
+<parameter_description> a `PangoFontset`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoFontMetrics` object
+</return>
+</function>
+
+<function name="pango_fontset_simple_append">
+<description>
+Adds a font to the fontset.
+
+The fontset takes ownership of @font.
+
+</description>
+<parameters>
+<parameter name="fontset">
+<parameter_description> a `PangoFontsetSimple`.
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> a `PangoFont`.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_fontset_simple_new">
+<description>
+Creates a new `PangoFontsetSimple` for the given language.
+
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> a `PangoLanguage` tag
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoFontsetSimple`
+</return>
+</function>
+
+<function name="pango_fontset_simple_size">
+<description>
+Returns the number of fonts in the fontset.
+
+
+</description>
+<parameters>
+<parameter name="fontset">
+<parameter_description> a `PangoFontsetSimple`.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the size of @fontset
+</return>
+</function>
+
+<function name="pango_ft2_font_get_coverage">
+<description>
+Gets the `PangoCoverage` for a `PangoFT2Font`.
+
+Use [method@Pango.Font.get_coverage] instead.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a Pango FT2 font
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> a language tag.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoCoverage`
+</return>
+</function>
+
+<function name="pango_ft2_font_get_face">
+<description>
+Returns the native FreeType2 `FT_Face` structure
+used for this `PangoFont`.
+
+This may be useful if you want to use FreeType2
+functions directly.
+
+Use [method@PangoFc.Font.lock_face] instead; when you are
+done with a face from [method@PangoFc.Font.lock_face], you
+must call [method@PangoFc.Font.unlock_face].
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a pointer to a `FT_Face` structure,
+with the size set correctly
+</return>
+</function>
+
+<function name="pango_ft2_font_get_kerning">
+<description>
+Retrieves kerning information for a combination of two glyphs.
+
+Use pango_fc_font_kern_glyphs() instead.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="left">
+<parameter_description> the left `PangoGlyph`
+</parameter_description>
+</parameter>
+<parameter name="right">
+<parameter_description> the right `PangoGlyph`
+</parameter_description>
+</parameter>
+</parameters>
+<return> The amount of kerning (in Pango units) to
+apply for the given combination of glyphs.
+</return>
+</function>
+
+<function name="pango_ft2_font_map_create_context">
+<description>
+Create a `PangoContext` for the given fontmap.
+
+Since: 1.2
+
+Deprecated: 1.22: Use [method@Pango.FontMap.create_context] instead.
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFT2FontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly created context; free with
+g_object_unref().
+
+</return>
+</function>
+
+<function name="pango_ft2_font_map_for_display">
+<description>
+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.
+
+
+</description>
+<parameters>
+</parameters>
+<return> a `PangoFT2FontMap`.
+</return>
+</function>
+
+<function name="pango_ft2_font_map_new">
+<description>
+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
+[method@PangoFT2.FontMap.set_default_substitute]).
+
+Since: 1.2
+
+</description>
+<parameters>
+</parameters>
+<return> the newly created fontmap object. Unref
+with g_object_unref() when you are finished with it.
+
+</return>
+</function>
+
+<function name="pango_ft2_font_map_set_default_substitute">
+<description>
+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.
+
+Deprecated: 1.46: Use [method@PangoFc.FontMap.set_default_substitute]
+instead.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFT2FontMap`
+</parameter_description>
+</parameter>
+<parameter name="func">
+<parameter_description> function to call to to do final config tweaking
+on #FcPattern objects.
+</parameter_description>
+</parameter>
+<parameter name="data">
+<parameter_description> data to pass to @func
+</parameter_description>
+</parameter>
+<parameter name="notify">
+<parameter_description> function to call when @data is no longer used.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_font_map_set_resolution">
+<description>
+Sets the horizontal and vertical resolutions for the fontmap.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFT2FontMap`
+</parameter_description>
+</parameter>
+<parameter name="dpi_x">
+<parameter_description> dots per inch in the X direction
+</parameter_description>
+</parameter>
+<parameter name="dpi_y">
+<parameter_description> dots per inch in the Y direction
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_font_map_substitute_changed">
+<description>
+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.
+
+Deprecated: 1.46: Use [method@PangoFc.FontMap.substitute_changed]
+instead.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="fontmap">
+<parameter_description> a `PangoFT2FontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_get_context">
+<description>
+Retrieves a `PangoContext` for the default PangoFT2 fontmap
+(see pango_ft2_font_map_for_display()) and sets the resolution
+for the default fontmap to @dpi_x by @dpi_y.
+
+Deprecated: 1.22: Use [method@Pango.FontMap.create_context] instead.
+
+</description>
+<parameters>
+<parameter name="dpi_x">
+<parameter_description>  the horizontal DPI of the target device
+</parameter_description>
+</parameter>
+<parameter name="dpi_y">
+<parameter_description>  the vertical DPI of the target device
+</parameter_description>
+</parameter>
+</parameters>
+<return> the new `PangoContext`
+
+</return>
+</function>
+
+<function name="pango_ft2_get_unknown_glyph">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a glyph index into @font, or %PANGO_GLYPH_EMPTY
+</return>
+</function>
+
+<function name="pango_ft2_render">
+<description>
+Renders a `PangoGlyphString` onto a FreeType2 bitmap.
+
+</description>
+<parameters>
+<parameter name="bitmap">
+<parameter_description> the FreeType2 bitmap onto which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> the font in which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> the glyph string to draw
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of the start of the string (in pixels)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of the baseline (in pixels)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_render_layout">
+<description>
+Render a `PangoLayout` onto a FreeType2 bitmap
+
+</description>
+<parameters>
+<parameter name="bitmap">
+<parameter_description> a FT_Bitmap to render the layout onto
+</parameter_description>
+</parameter>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the X position of the left of the layout (in pixels)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the Y position of the top of the layout (in pixels)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_render_layout_line">
+<description>
+Render a `PangoLayoutLine` onto a FreeType2 bitmap
+
+</description>
+<parameters>
+<parameter name="bitmap">
+<parameter_description> a FT_Bitmap to render the line onto
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of start of string (in pixels)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of baseline (in pixels)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_render_layout_line_subpixel">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="bitmap">
+<parameter_description> a FT_Bitmap to render the line onto
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of start of string (in Pango units)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of baseline (in Pango units)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_render_layout_subpixel">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="bitmap">
+<parameter_description> a FT_Bitmap to render the layout onto
+</parameter_description>
+</parameter>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the X position of the left of the layout (in Pango units)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the Y position of the top of the layout (in Pango units)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_render_transformed">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="bitmap">
+<parameter_description> the FreeType2 bitmap onto which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> the font in which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> the glyph string to draw
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of the start of the string (in Pango
+units in user space coordinates)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of the baseline (in Pango units
+in user space coordinates)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ft2_shutdown_display">
+<description>
+Free the global fontmap. (See pango_ft2_font_map_for_display())
+Use of the global PangoFT2 fontmap is deprecated.
+
+</description>
+<parameters>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_get_lib_subdirectory">
+<description>
+Returns the name of the &quot;pango&quot; subdirectory of LIBDIR
+(which is set at compile time).
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+</parameters>
+<return> the Pango lib directory. The returned string should
+not be freed.
+
+</return>
+</function>
+
+<function name="pango_get_log_attrs">
+<description>
+Computes a `PangoLogAttr` for each character in @text.
+
+The @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).
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> text to process. Must be valid UTF-8
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length in bytes of @text
+</parameter_description>
+</parameter>
+<parameter name="level">
+<parameter_description> embedding level, or -1 if unknown
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> language tag
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> array with one `PangoLogAttr`
+per character in @text, plus one extra, to be filled in
+</parameter_description>
+</parameter>
+<parameter name="attrs_len">
+<parameter_description> length of @attrs array
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_get_mirror_char">
+<description>
+Returns the mirrored character of a Unicode character.
+
+Mirror characters are determined by the Unicode mirrored property.
+
+Deprecated: 1.30: Use g_unichar_get_mirror_char() instead; the docs for that function
+provide full details.
+
+</description>
+<parameters>
+<parameter name="ch">
+<parameter_description> a Unicode character
+</parameter_description>
+</parameter>
+<parameter name="mirrored_ch">
+<parameter_description> location to store the mirrored character
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @ch has a mirrored character and @mirrored_ch is
+filled in, %FALSE otherwise
+
+</return>
+</function>
+
+<function name="pango_get_sysconf_subdirectory">
+<description>
+Returns the name of the &quot;pango&quot; subdirectory of SYSCONFDIR
+(which is set at compile time).
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+</parameters>
+<return> the Pango sysconf directory. The returned string should
+not be freed.
+
+</return>
+</function>
+
+<function name="pango_glyph_item_apply_attrs">
+<description>
+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 ([method@Pango.AttrList.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-&gt;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.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="glyph_item">
+<parameter_description> a shaped item
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> text that @list applies to
+</parameter_description>
+</parameter>
+<parameter name="list">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a
+list of glyph items resulting from splitting @glyph_item. Free
+the elements using [method@Pango.GlyphItem.free], the list using
+g_slist_free().
+
+</return>
+</function>
+
+<function name="pango_glyph_item_copy">
+<description>
+Make a deep copy of an existing `PangoGlyphItem` structure.
+
+Since: 1.20
+
+</description>
+<parameters>
+<parameter name="orig">
+<parameter_description> a `PangoGlyphItem`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoGlyphItem`
+
+</return>
+</function>
+
+<function name="pango_glyph_item_free">
+<description>
+Frees a `PangoGlyphItem` and resources to which it points.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="glyph_item">
+<parameter_description> a `PangoGlyphItem`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_item_get_logical_widths">
+<description>
+Given a `PangoGlyphItem` and the corresponding text, determine the
+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 [method@Pango.GlyphString.get_logical_widths].
+
+Since: 1.26
+
+</description>
+<parameters>
+<parameter name="glyph_item">
+<parameter_description> a `PangoGlyphItem`
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> text that @glyph_item corresponds to
+(glyph_item-&gt;item-&gt;offset is an offset from the
+start of @text)
+</parameter_description>
+</parameter>
+<parameter name="logical_widths">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_item_iter_copy">
+<description>
+Make a shallow copy of an existing `PangoGlyphItemIter` structure.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="orig">
+<parameter_description> a `PangoGlyphItem`Iter
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoGlyphItemIter`
+
+</return>
+</function>
+
+<function name="pango_glyph_item_iter_free">
+<description>
+Frees a `PangoGlyphItem`Iter.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoGlyphItemIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_item_iter_init_end">
+<description>
+Initializes a `PangoGlyphItemIter` structure to point to the
+last cluster in a glyph item.
+
+See `PangoGlyphItemIter` for details of cluster orders.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoGlyphItemIter`
+</parameter_description>
+</parameter>
+<parameter name="glyph_item">
+<parameter_description> the glyph item to iterate over
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> text corresponding to the glyph item
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if there are no clusters in the glyph item
+
+</return>
+</function>
+
+<function name="pango_glyph_item_iter_init_start">
+<description>
+Initializes a `PangoGlyphItemIter` structure to point to the
+first cluster in a glyph item.
+
+See `PangoGlyphItemIter` for details of cluster orders.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoGlyphItemIter`
+</parameter_description>
+</parameter>
+<parameter name="glyph_item">
+<parameter_description> the glyph item to iterate over
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> text corresponding to the glyph item
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if there are no clusters in the glyph item
+
+</return>
+</function>
+
+<function name="pango_glyph_item_iter_next_cluster">
+<description>
+Advances the iterator to the next cluster in the glyph item.
+
+See `PangoGlyphItemIter` for details of cluster orders.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoGlyphItemIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the iterator was advanced,
+%FALSE if we were already on the  last cluster.
+
+</return>
+</function>
+
+<function name="pango_glyph_item_iter_prev_cluster">
+<description>
+Moves the iterator to the preceding cluster in the glyph item.
+See `PangoGlyphItemIter` for details of cluster orders.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoGlyphItemIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the iterator was moved,
+%FALSE if we were already on the first cluster.
+
+</return>
+</function>
+
+<function name="pango_glyph_item_letter_space">
+<description>
+Adds spacing between the graphemes of @glyph_item to
+give the effect of typographic letter spacing.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="glyph_item">
+<parameter_description> a `PangoGlyphItem`
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> text that @glyph_item corresponds to
+(glyph_item-&gt;item-&gt;offset is an offset from the
+start of @text)
+</parameter_description>
+</parameter>
+<parameter name="log_attrs">
+<parameter_description> logical attributes for the item
+(the first logical attribute refers to the position
+before the first character in the item)
+</parameter_description>
+</parameter>
+<parameter name="letter_spacing">
+<parameter_description> amount of letter spacing to add
+in Pango units. May be negative, though too large
+negative values will give ugly results.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_item_split">
+<description>
+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.)
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="orig">
+<parameter_description> a `PangoItem`
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> text to which positions in @orig apply
+</parameter_description>
+</parameter>
+<parameter name="split_index">
+<parameter_description> byte index of position to split item, relative to the
+start of the item
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated item representing text before
+@split_index, which should be freed
+with pango_glyph_item_free().
+
+</return>
+</function>
+
+<function name="pango_glyph_string_copy">
+<description>
+Copy a glyph string and associated storage.
+
+
+</description>
+<parameters>
+<parameter name="string">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoGlyphString`
+</return>
+</function>
+
+<function name="pango_glyph_string_extents">
+<description>
+Compute the logical and ink extents of a glyph string.
+
+See the documentation for [method@Pango.Font.get_glyph_extents] for details
+about the interpretation of the rectangles.
+
+Examples of logical (red) and ink (green) rects:
+
+![](rects1.png) ![](rects2.png)
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the glyph string as drawn
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the glyph string
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_string_extents_range">
+<description>
+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).
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+<parameter name="start">
+<parameter_description> start index
+</parameter_description>
+</parameter>
+<parameter name="end">
+<parameter_description> end index (the range is the set of bytes with
+indices such that start &lt;= index &lt; end)
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to
+store the extents of the glyph string range as drawn
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to
+store the logical extents of the glyph string range
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_string_free">
+<description>
+Free a glyph string and associated storage.
+
+</description>
+<parameters>
+<parameter name="string">
+<parameter_description> a `PangoGlyphString`, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_string_get_logical_widths">
+<description>
+Given a `PangoGlyphString` and corresponding text, determine the 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 [method@Pango.GlyphItem.get_logical_widths].
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the text corresponding to the glyphs
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> the length of @text, in bytes
+</parameter_description>
+</parameter>
+<parameter name="embedding_level">
+<parameter_description> the embedding level of the string
+</parameter_description>
+</parameter>
+<parameter name="logical_widths">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_string_get_width">
+<description>
+Computes the logical width of the glyph string.
+
+This can also be computed using [method@Pango.GlyphString.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.
+
+Since: 1.14
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description>  a `PangoGlyphString`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the logical width of the glyph string.
+
+</return>
+</function>
+
+<function name="pango_glyph_string_index_to_x">
+<description>
+Converts from character position to x position.
+
+The X position is measured from the left edge of the run.
+Character positions are obtained using font metrics for ligatures
+where available, and computed by dividing up each cluster
+into equal portions, otherwise.
+
+&lt;picture&gt;
+&lt;source srcset=&quot;glyphstring-positions-dark.png&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;
+&lt;img alt=&quot;Glyph positions&quot; src=&quot;glyphstring-positions-light.png&quot;&gt;
+&lt;/picture&gt;
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description> the glyphs return from [func@shape]
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the text for the run
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> the number of bytes (not characters) in @text.
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description> the analysis information return from [func@itemize]
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> the byte index within @text
+</parameter_description>
+</parameter>
+<parameter name="trailing">
+<parameter_description> whether we should compute the result for the beginning (%FALSE)
+or end (%TRUE) of the character.
+</parameter_description>
+</parameter>
+<parameter name="x_pos">
+<parameter_description> location to store result
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_string_index_to_x_full">
+<description>
+Converts from character position to x position.
+
+This variant of [method@Pango.GlyphString.index_to_x] additionally
+accepts a `PangoLogAttr` array. The grapheme boundary information
+in it can be used to disambiguate positioning inside some complex
+clusters.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description> the glyphs return from [func@shape]
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the text for the run
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> the number of bytes (not characters) in @text.
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description> the analysis information return from [func@itemize]
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> `PangoLogAttr` array for @text
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> the byte index within @text
+</parameter_description>
+</parameter>
+<parameter name="trailing">
+<parameter_description> whether we should compute the result for the beginning (%FALSE)
+or end (%TRUE) of the character.
+</parameter_description>
+</parameter>
+<parameter name="x_pos">
+<parameter_description> location to store result
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_string_new">
+<description>
+Create a new `PangoGlyphString`.
+
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated `PangoGlyphString`, which
+should be freed with [method@Pango.GlyphString.free].
+</return>
+</function>
+
+<function name="pango_glyph_string_set_size">
+<description>
+Resize a glyph string to the given length.
+
+</description>
+<parameters>
+<parameter name="string">
+<parameter_description> a `PangoGlyphString`.
+</parameter_description>
+</parameter>
+<parameter name="new_len">
+<parameter_description> the new length of the string
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_string_x_to_index">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description> the glyphs returned from [func@shape]
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the text for the run
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> the number of bytes (not characters) in text.
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description> the analysis information return from [func@itemize]
+</parameter_description>
+</parameter>
+<parameter name="x_pos">
+<parameter_description> the x offset (in Pango units)
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> location to store calculated byte index within @text
+</parameter_description>
+</parameter>
+<parameter name="trailing">
+<parameter_description> location to store a boolean indicating whether the
+user clicked on the leading or trailing edge of the character
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_gravity_get_for_matrix">
+<description>
+Finds the gravity that best matches the rotation component
+in a `PangoMatrix`.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the gravity of @matrix, which will never be
+%PANGO_GRAVITY_AUTO, or %PANGO_GRAVITY_SOUTH if @matrix is %NULL
+
+</return>
+</function>
+
+<function name="pango_gravity_get_for_script">
+<description>
+Returns the gravity to use in laying out a `PangoItem`.
+
+The gravity is determined based on the script, base gravity, and hint.
+
+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.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="script">
+<parameter_description> `PangoScript` to query
+</parameter_description>
+</parameter>
+<parameter name="base_gravity">
+<parameter_description> base gravity of the paragraph
+</parameter_description>
+</parameter>
+<parameter name="hint">
+<parameter_description> orientation hint
+</parameter_description>
+</parameter>
+</parameters>
+<return> resolved gravity suitable to use for a run of text
+with @script
+
+</return>
+</function>
+
+<function name="pango_gravity_get_for_script_and_width">
+<description>
+Returns the gravity to use in laying out a single character
+or `PangoItem`.
+
+The gravity is determined based on the script, East Asian width,
+base gravity, and hint,
+
+This function is similar to [func@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 *upright*, 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.
+
+Since: 1.26
+
+</description>
+<parameters>
+<parameter name="script">
+<parameter_description> `PangoScript` to query
+</parameter_description>
+</parameter>
+<parameter name="wide">
+<parameter_description> %TRUE for wide characters as returned by g_unichar_iswide()
+</parameter_description>
+</parameter>
+<parameter name="base_gravity">
+<parameter_description> base gravity of the paragraph
+</parameter_description>
+</parameter>
+<parameter name="hint">
+<parameter_description> orientation hint
+</parameter_description>
+</parameter>
+</parameters>
+<return> resolved gravity suitable to use for a run of text
+with @script and @wide.
+
+</return>
+</function>
+
+<function name="pango_gravity_to_rotation">
+<description>
+Converts a `PangoGravity` value to its natural rotation in radians.
+
+Note that [method@Pango.Matrix.rotate] takes angle in degrees, not radians.
+So, to call [method@Pango.Matrix,rotate] with the output of this function
+you should multiply it by (180. / G_PI).
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="gravity">
+<parameter_description> gravity to query, should not be %PANGO_GRAVITY_AUTO
+</parameter_description>
+</parameter>
+</parameters>
+<return> the rotation value corresponding to @gravity.
+
+</return>
+</function>
+
+<function name="pango_is_zero_width">
+<description>
+Checks if a character that should not be normally rendered.
+
+This includes all Unicode characters with &quot;ZERO WIDTH&quot; in their name,
+as well as *bidi* formatting characters, and a few other ones.  This is
+totally different from g_unichar_iszerowidth() and is at best misnamed.
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="ch">
+<parameter_description> a Unicode character
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @ch is a zero-width character, %FALSE otherwise
+
+</return>
+</function>
+
+<function name="pango_item_apply_attrs">
+<description>
+Add attributes to a `PangoItem`.
+
+The idea is that you have attributes that don't affect itemization,
+such as font features, so you filter them out using
+[method@Pango.AttrList.filter], itemize your text, then reapply the
+attributes to the resulting items using this function.
+
+The @iter should be positioned before the range of the item,
+and will be advanced past it. This function is meant to be called
+in a loop over the items resulting from itemization, while passing
+the iter to each call.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="item">
+<parameter_description> a `PangoItem`
+</parameter_description>
+</parameter>
+<parameter name="iter">
+<parameter_description> a `PangoAttrIterator`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_item_copy">
+<description>
+Copy an existing `PangoItem` structure.
+
+
+</description>
+<parameters>
+<parameter name="item">
+<parameter_description> a `PangoItem`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoItem`
+</return>
+</function>
+
+<function name="pango_item_free">
+<description>
+Free a `PangoItem` and all associated memory.
+
+</description>
+<parameters>
+<parameter name="item">
+<parameter_description> a `PangoItem`, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_item_new">
+<description>
+Creates a new `PangoItem` structure initialized to default values.
+
+
+</description>
+<parameters>
+</parameters>
+<return> the newly allocated `PangoItem`, which should
+be freed with [method@Pango.Item.free].
+</return>
+</function>
+
+<function name="pango_item_split">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="orig">
+<parameter_description> a `PangoItem`
+</parameter_description>
+</parameter>
+<parameter name="split_index">
+<parameter_description> byte index of position to split item, relative to the
+start of the item
+</parameter_description>
+</parameter>
+<parameter name="split_offset">
+<parameter_description> number of chars between start of @orig and @split_index
+</parameter_description>
+</parameter>
+</parameters>
+<return> new item representing text before @split_index, which
+should be freed with [method@Pango.Item.free].
+</return>
+</function>
+
+<function name="pango_itemize">
+<description>
+Breaks a piece of text into segments with consistent directional
+level and font.
+
+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).
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a structure holding information that affects
+the itemization process.
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the text to itemize. Must be valid UTF-8
+</parameter_description>
+</parameter>
+<parameter name="start_index">
+<parameter_description> first byte in @text to process
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> the number of bytes (not characters) to process
+after @start_index. This must be &gt;= 0.
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> the set of attributes that apply to @text.
+</parameter_description>
+</parameter>
+<parameter name="cached_iter">
+<parameter_description> Cached attribute iterator
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `GList` of
+[struct@Pango.Item] structures. The items should be freed using
+[method@Pango.Item.free] probably in combination with g_list_free_full().
+</return>
+</function>
+
+<function name="pango_itemize_with_base_dir">
+<description>
+Like `pango_itemize()`, but with an explicitly specified base direction.
+
+The base direction is used when computing bidirectional levels.
+(see [method@Pango.Context.set_base_dir]). [func@itemize] gets the
+base direction from the `PangoContext`.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a structure holding information that affects
+the itemization process.
+</parameter_description>
+</parameter>
+<parameter name="base_dir">
+<parameter_description> base direction to use for bidirectional processing
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the text to itemize.
+</parameter_description>
+</parameter>
+<parameter name="start_index">
+<parameter_description> first byte in @text to process
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> the number of bytes (not characters) to process
+after @start_index. This must be &gt;= 0.
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> the set of attributes that apply to @text.
+</parameter_description>
+</parameter>
+<parameter name="cached_iter">
+<parameter_description> Cached attribute iterator
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `GList` of
+[struct@Pango.Item] structures. The items should be freed using
+[method@Pango.Item.free] probably in combination with g_list_free_full().
+
+</return>
+</function>
+
+<function name="pango_language_from_string">
+<description>
+Convert a language tag to a `PangoLanguage`.
+
+The language tag must be in a RFC-3066 format. `PangoLanguage` pointers
+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 [func@Pango.Language.get_default] if you want to get the
+`PangoLanguage` for the current locale of the process.
+
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> a string representing a language tag
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoLanguage`
+</return>
+</function>
+
+<function name="pango_language_get_default">
+<description>
+Returns the `PangoLanguage` for the current locale of the process.
+
+On Unix systems, this is the return value is derived from
+`setlocale (LC_CTYPE, NULL)`, 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 `setlocale(LC_ALL, &quot;&quot;)` for the user
+settings to take effect. GTK does this in its initialization
+functions automatically (by calling gtk_set_locale()).
+See the setlocale() manpage for more details.
+
+Note that the default language can change over the life of an application.
+
+Also note that this function will not do the right thing if you
+use per-thread locales with uselocale(). In that case, you should
+just call pango_language_from_string() yourself.
+
+Since: 1.16
+
+</description>
+<parameters>
+</parameters>
+<return> the default language as a `PangoLanguage`
+
+</return>
+</function>
+
+<function name="pango_language_get_preferred">
+<description>
+Returns the list of languages that the user prefers.
+
+The list is specified by the `PANGO_LANGUAGE` or `LANGUAGE`
+environment variables, in order of preference. Note that this
+list does not necessarily include the language returned by
+[func@Pango.Language.get_default].
+
+When choosing language-specific resources, such as the sample
+text returned by [method@Pango.Language.get_sample_string],
+you should first try the default language, followed by the
+languages returned by this function.
+
+Since: 1.48
+
+</description>
+<parameters>
+</parameters>
+<return> a %NULL-terminated array
+of `PangoLanguage`*
+
+</return>
+</function>
+
+<function name="pango_language_get_sample_string">
+<description>
+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
+[func@Pango.Language.get_default] is used.
+
+If Pango does not have a sample string for @language, the classic
+&quot;The quick brown fox...&quot; is returned.  This can be detected by
+comparing the returned pointer value to that returned for (non-existent)
+language code &quot;xx&quot;.  That is, compare to:
+
+```
+pango_language_get_sample_string (pango_language_from_string (&quot;xx&quot;))
+```
+
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> a `PangoLanguage`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the sample string
+</return>
+</function>
+
+<function name="pango_language_get_scripts">
+<description>
+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 [method@Pango.Language.includes_script] function uses this
+function internally.
+
+Note: while the return value is declared as `PangoScript`, the
+returned values are from the `GUnicodeScript` enumeration, which
+may have more values. Callers need to handle unknown values.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> a `PangoLanguage`
+</parameter_description>
+</parameter>
+<parameter name="num_scripts">
+<parameter_description> location to
+return number of scripts
+</parameter_description>
+</parameter>
+</parameters>
+<return>
+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).
+
+</return>
+</function>
+
+<function name="pango_language_includes_script">
+<description>
+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 [method@Pango.Language.get_scripts] internally.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> a `PangoLanguage`
+</parameter_description>
+</parameter>
+<parameter name="script">
+<parameter_description> a `PangoScript`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %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.
+
+</return>
+</function>
+
+<function name="pango_language_matches">
+<description>
+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 '-'.
+
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> a language tag (see [func@Pango.Language.from_string]),
+%NULL is allowed and matches nothing but '*'
+</parameter_description>
+</parameter>
+<parameter name="range_list">
+<parameter_description> a list of language ranges, separated by ';', ':',
+',', or space characters.
+Each element must either be '*', or a RFC 3066 language range
+canonicalized as by [func@Pango.Language.from_string]
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if a match was found
+</return>
+</function>
+
+<function name="pango_language_to_string">
+<description>
+Gets the RFC-3066 format string representing the given language tag.
+
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> a language tag.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a string representing the language tag
+</return>
+</function>
+
+<function name="pango_layout_context_changed">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_copy">
+<description>
+Creates a deep copy-by-value of the layout.
+
+The attribute list, tab array, and text from the original layout
+are all copied by value.
+
+
+</description>
+<parameters>
+<parameter name="src">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoLayout`
+</return>
+</function>
+
+<function name="pango_layout_deserialize">
+<description>
+Loads data previously created via [method@Pango.Layout.serialize].
+
+For a discussion of the supported format, see that function.
+
+Note: to verify that the returned layout is identical to
+the one that was serialized, you can compare @bytes to the
+result of serializing the layout again.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> `PangoLayoutDeserializeFlags`
+</parameter_description>
+</parameter>
+<parameter name="bytes">
+<parameter_description> the bytes containing the data
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> return location for an error
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new `PangoLayout`
+
+</return>
+</function>
+
+<function name="pango_layout_get_alignment">
+<description>
+Gets the alignment for the layout: how partial lines are
+positioned within the horizontal space available.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the alignment
+</return>
+</function>
+
+<function name="pango_layout_get_attributes">
+<description>
+Gets the attribute list for the layout, if any.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoAttrList`
+</return>
+</function>
+
+<function name="pango_layout_get_auto_dir">
+<description>
+Gets whether to calculate the base direction for the layout
+according to its contents.
+
+See [method@Pango.Layout.set_auto_dir].
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the bidirectional base direction
+is computed from the layout's contents, %FALSE otherwise
+
+</return>
+</function>
+
+<function name="pango_layout_get_baseline">
+<description>
+Gets the Y position of baseline of the first line in @layout.
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> baseline of first line, from top of @layout
+
+</return>
+</function>
+
+<function name="pango_layout_get_caret_pos">
+<description>
+Given an index within a layout, determines the positions that of the
+strong and weak cursors if the insertion point is at that index.
+
+This is a variant of [method@Pango.Layout.get_cursor_pos] that applies
+font metric information about caret slope and offset to the positions
+it returns.
+
+&lt;picture&gt;
+&lt;source srcset=&quot;caret-metrics-dark.png&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;
+&lt;img alt=&quot;Caret metrics&quot; src=&quot;caret-metrics-light.png&quot;&gt;
+&lt;/picture&gt;
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> the byte index of the cursor
+</parameter_description>
+</parameter>
+<parameter name="strong_pos">
+<parameter_description> location to store the strong cursor position
+</parameter_description>
+</parameter>
+<parameter name="weak_pos">
+<parameter_description> location to store the weak cursor position
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_character_count">
+<description>
+Returns the number of Unicode characters in the
+the text of @layout.
+
+Since: 1.30
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the number of Unicode characters
+in the text of @layout
+
+</return>
+</function>
+
+<function name="pango_layout_get_context">
+<description>
+Retrieves the `PangoContext` used for this layout.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoContext` for the layout
+</return>
+</function>
+
+<function name="pango_layout_get_cursor_pos">
+<description>
+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
+with the height of the run extents.
+
+&lt;picture&gt;
+&lt;source srcset=&quot;cursor-positions-dark.png&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;
+&lt;img alt=&quot;Cursor positions&quot; src=&quot;cursor-positions-light.png&quot;&gt;
+&lt;/picture&gt;
+
+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.
+
+The following example shows text with both a strong and a weak cursor.
+
+&lt;picture&gt;
+&lt;source srcset=&quot;split-cursor-dark.png&quot; media=&quot;(prefers-color-scheme: dark)&quot;&gt;
+&lt;img alt=&quot;Strong and weak cursors&quot; src=&quot;split-cursor-light.png&quot;&gt;
+&lt;/picture&gt;
+
+The strong cursor has a little arrow pointing to the right, the weak
+cursor to the left. Typing a 'c' in this situation will insert the
+character after the 'b', and typing another Hebrew character, like '×’',
+will insert it at the end.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> the byte index of the cursor
+</parameter_description>
+</parameter>
+<parameter name="strong_pos">
+<parameter_description> location to store the strong cursor position
+</parameter_description>
+</parameter>
+<parameter name="weak_pos">
+<parameter_description> location to store the weak cursor position
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_direction">
+<description>
+Gets the text direction at the given character position in @layout.
+
+Since: 1.46
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="index">
+<parameter_description> the byte index of the char
+</parameter_description>
+</parameter>
+</parameters>
+<return> the text direction at @index
+
+</return>
+</function>
+
+<function name="pango_layout_get_ellipsize">
+<description>
+Gets the type of ellipsization being performed for @layout.
+
+See [method@Pango.Layout.set_ellipsize].
+
+Use [method@Pango.Layout.is_ellipsized] to query whether any
+paragraphs were actually ellipsized.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the current ellipsization mode for @layout
+
+</return>
+</function>
+
+<function name="pango_layout_get_extents">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the
+layout as drawn
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description>rectangle used to store the logical
+extents of the layout
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_font_description">
+<description>
+Gets the font description for the layout, if any.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a pointer to the
+layout's font description, or %NULL if the font description
+from the layout's context is inherited.
+
+</return>
+</function>
+
+<function name="pango_layout_get_height">
+<description>
+Gets the height of layout used for ellipsization.
+
+See [method@Pango.Layout.set_height] for details.
+
+Since: 1.20
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the height, in Pango units if positive,
+or number of lines if negative.
+
+</return>
+</function>
+
+<function name="pango_layout_get_indent">
+<description>
+Gets the paragraph indent width in Pango units.
+
+A negative value indicates a hanging indentation.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the indent in Pango units
+</return>
+</function>
+
+<function name="pango_layout_get_iter">
+<description>
+Returns an iterator to iterate over the visual extents of the layout.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the new `PangoLayoutIter`
+</return>
+</function>
+
+<function name="pango_layout_get_justify">
+<description>
+Gets whether each complete line should be stretched to fill the entire
+width of the layout.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the justify value
+</return>
+</function>
+
+<function name="pango_layout_get_justify_last_line">
+<description>
+Gets whether the last line should be stretched
+to fill the entire width of the layout.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the justify value
+
+</return>
+</function>
+
+<function name="pango_layout_get_line">
+<description>
+Retrieves a particular line from a `PangoLayout`.
+
+Use the faster [method@Pango.Layout.get_line_readonly] if you do not
+plan to modify the contents of the line (glyphs, glyph widths, etc.).
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> the index of a line, which must be between 0 and
+`pango_layout_get_line_count(layout) - 1`, inclusive.
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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`.
+</return>
+</function>
+
+<function name="pango_layout_get_line_count">
+<description>
+Retrieves the count of lines for the @layout.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the line count
+</return>
+</function>
+
+<function name="pango_layout_get_line_readonly">
+<description>
+Retrieves a particular line from a `PangoLayout`.
+
+This is a faster alternative to [method@Pango.Layout.get_line],
+but the user is not expected to modify the contents of the line
+(glyphs, glyph widths, etc.).
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> the index of a line, which must be between 0 and
+`pango_layout_get_line_count(layout) - 1`, inclusive.
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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.
+
+</return>
+</function>
+
+<function name="pango_layout_get_line_spacing">
+<description>
+Gets the line spacing factor of @layout.
+
+See [method@Pango.Layout.set_line_spacing].
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_lines">
+<description>
+Returns the lines of the @layout as a list.
+
+Use the faster [method@Pango.Layout.get_lines_readonly] if you do not
+plan to modify the contents of the lines (glyphs, glyph widths, etc.).
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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.
+</return>
+</function>
+
+<function name="pango_layout_get_lines_readonly">
+<description>
+Returns the lines of the @layout as a list.
+
+This is a faster alternative to [method@Pango.Layout.get_lines],
+but the user is not expected to modify the contents of the lines
+(glyphs, glyph widths, etc.).
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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.
+
+</return>
+</function>
+
+<function name="pango_layout_get_log_attrs">
+<description>
+Retrieves an array of logical attributes for each character in
+the @layout.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description>
+location to store a pointer to an array of logical attributes.
+This value must be freed with g_free().
+</parameter_description>
+</parameter>
+<parameter name="n_attrs">
+<parameter_description> 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.)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_log_attrs_readonly">
+<description>
+Retrieves an array of logical attributes for each character in
+the @layout.
+
+This is a faster alternative to [method@Pango.Layout.get_log_attrs].
+The returned array is part of @layout and must not be modified.
+Modifying the layout will invalidate the returned array.
+
+The number of attributes returned in @n_attrs 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.
+
+Since: 1.30
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="n_attrs">
+<parameter_description> location to store the number of the attributes in
+the array
+</parameter_description>
+</parameter>
+</parameters>
+<return> an array of logical attributes
+
+</return>
+</function>
+
+<function name="pango_layout_get_pixel_extents">
+<description>
+Computes the logical and ink extents of @layout in device units.
+
+This function just calls [method@Pango.Layout.get_extents] followed by
+two [func@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 [func@Pango.extents_to_pixels]).
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the
+layout as drawn
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical
+extents of the layout
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_pixel_size">
+<description>
+Determines the logical width and height of a `PangoLayout` in device
+units.
+
+[method@Pango.Layout.get_size] returns the width and height
+scaled by %PANGO_SCALE. This is simply a convenience function
+around [method@Pango.Layout.get_pixel_extents].
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> location to store the logical width
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> location to store the logical height
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_serial">
+<description>
+Returns the current serial number of @layout.
+
+The serial number is initialized to an small number larger than zero
+when a new layout is created and is increased whenever the layout is
+changed using any of the setter functions, or the `PangoContext` it
+uses has changed. The serial may wrap, but will never have the value 0.
+Since it can wrap, never compare it with &quot;less than&quot;, always use &quot;not equals&quot;.
+
+This can be used to automatically detect changes to a `PangoLayout`,
+and is useful for example to decide whether a layout needs redrawing.
+To force the serial to be increased, use
+[method@Pango.Layout.context_changed].
+
+Since: 1.32.4
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> The current serial number of @layout.
+
+</return>
+</function>
+
+<function name="pango_layout_get_single_paragraph_mode">
+<description>
+Obtains whether @layout is in single paragraph mode.
+
+See [method@Pango.Layout.set_single_paragraph_mode].
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the layout does not break paragraphs
+at paragraph separator characters, %FALSE otherwise
+</return>
+</function>
+
+<function name="pango_layout_get_size">
+<description>
+Determines the logical width and height of a `PangoLayout` in Pango
+units.
+
+This is simply a convenience function around [method@Pango.Layout.get_extents].
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> location to store the logical width
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> location to store the logical height
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_spacing">
+<description>
+Gets the amount of spacing between the lines of the layout.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the spacing in Pango units
+</return>
+</function>
+
+<function name="pango_layout_get_tabs">
+<description>
+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 [method@Pango.TabArray.free].
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a copy of the tabs for this layout
+</return>
+</function>
+
+<function name="pango_layout_get_text">
+<description>
+Gets the text in the layout.
+
+The returned text should not be freed or modified.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the text in the @layout
+</return>
+</function>
+
+<function name="pango_layout_get_unknown_glyphs_count">
+<description>
+Counts the number of unknown glyphs in @layout.
+
+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.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> The number of unknown glyphs in @layout
+
+</return>
+</function>
+
+<function name="pango_layout_get_width">
+<description>
+Gets the width to which the lines of the `PangoLayout` should wrap.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the width in Pango units, or -1 if no width set.
+</return>
+</function>
+
+<function name="pango_layout_get_wrap">
+<description>
+Gets the wrap mode for the layout.
+
+Use [method@Pango.Layout.is_wrapped] to query whether
+any paragraphs were actually wrapped.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> active wrap mode.
+</return>
+</function>
+
+<function name="pango_layout_index_to_line_x">
+<description>
+Converts from byte @index_ within the @layout to line and X position.
+
+The X position is measured from the left edge of the line.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> the byte index of a grapheme within the layout
+</parameter_description>
+</parameter>
+<parameter name="trailing">
+<parameter_description> 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
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> location to store resulting line index. (which will
+between 0 and pango_layout_get_line_count(layout) - 1)
+</parameter_description>
+</parameter>
+<parameter name="x_pos">
+<parameter_description> location to store resulting position within line
+(%PANGO_SCALE units per device unit)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_index_to_pos">
+<description>
+Converts from an index within a `PangoLayout` to the onscreen position
+corresponding to the grapheme at that index.
+
+The return value is represented as rectangle. Note that `pos-&gt;x` is
+always the leading edge of the grapheme and `pos-&gt;x + pos-&gt;width` the
+trailing edge of the grapheme. If the directionality of the grapheme
+is right-to-left, then `pos-&gt;width` will be negative.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> byte index within @layout
+</parameter_description>
+</parameter>
+<parameter name="pos">
+<parameter_description> rectangle in which to store the position of the grapheme
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_is_ellipsized">
+<description>
+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.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if any paragraphs had to be ellipsized,
+%FALSE otherwise
+
+</return>
+</function>
+
+<function name="pango_layout_is_wrapped">
+<description>
+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.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if any paragraphs had to be wrapped, %FALSE
+otherwise
+
+</return>
+</function>
+
+<function name="pango_layout_iter_at_last_line">
+<description>
+Determines whether @iter is on the last line of the layout.
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @iter is on the last line
+</return>
+</function>
+
+<function name="pango_layout_iter_copy">
+<description>
+Copies a `PangoLayoutIter`.
+
+Since: 1.20
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoLayoutIter`
+
+</return>
+</function>
+
+<function name="pango_layout_iter_free">
+<description>
+Frees an iterator that's no longer in use.
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_iter_get_baseline">
+<description>
+Gets the Y position of the current line's baseline, in layout
+coordinates.
+
+Layout coordinates have the origin at the top left of the entire layout.
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> baseline of current line
+</return>
+</function>
+
+<function name="pango_layout_iter_get_char_extents">
+<description>
+Gets the extents of the current character, in layout coordinates.
+
+Layout coordinates have the origin at 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.
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle to fill with
+logical extents
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_iter_get_cluster_extents">
+<description>
+Gets the extents of the current cluster, in layout coordinates.
+
+Layout coordinates have the origin at the top left of the entire layout.
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle to fill with ink extents
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle to fill with logical extents
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_iter_get_index">
+<description>
+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 [method@Pango.LayoutIter.get_run]).
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> current byte index
+</return>
+</function>
+
+<function name="pango_layout_iter_get_layout">
+<description>
+Gets the layout associated with a `PangoLayoutIter`.
+
+Since: 1.20
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the layout associated with @iter
+
+</return>
+</function>
+
+<function name="pango_layout_iter_get_layout_extents">
+<description>
+Obtains the extents of the `PangoLayout` being iterated over.
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle to fill with ink extents
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle to fill with logical extents
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_iter_get_line">
+<description>
+Gets the current line.
+
+Use the faster [method@Pango.LayoutIter.get_line_readonly] if
+you do not plan to modify the contents of the line (glyphs,
+glyph widths, etc.).
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the current line
+</return>
+</function>
+
+<function name="pango_layout_iter_get_line_extents">
+<description>
+Obtains the extents of the current line.
+
+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 [method@Pango.LayoutLine.get_extents].
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle to fill with ink extents
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle to fill with logical extents
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_iter_get_line_readonly">
+<description>
+Gets the current line for read-only access.
+
+This is a faster alternative to [method@Pango.LayoutIter.get_line],
+but the user is not expected to modify the contents of the line
+(glyphs, glyph widths, etc.).
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the current line, that should not be
+modified
+
+</return>
+</function>
+
+<function name="pango_layout_iter_get_line_yrange">
+<description>
+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 [method@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).
+
+Note: Since 1.44, Pango uses line heights for placing lines, and there
+may be gaps between the ranges returned by this function.
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+<parameter name="y0_">
+<parameter_description> start of line
+</parameter_description>
+</parameter>
+<parameter name="y1_">
+<parameter_description> end of line
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_iter_get_run">
+<description>
+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 [method@Pango.LayoutIter.get_run_readonly] if you do not
+plan to modify the contents of the run (glyphs, glyph widths, etc.).
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the current run
+</return>
+</function>
+
+<function name="pango_layout_iter_get_run_baseline">
+<description>
+Gets the Y position of the current run's baseline, in layout
+coordinates.
+
+Layout coordinates have the origin at the top left of the entire layout.
+
+The run baseline can be different from the line baseline, for
+example due to superscript or subscript positioning.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_iter_get_run_extents">
+<description>
+Gets the extents of the current run in layout coordinates.
+
+Layout coordinates have the origin at the top left of the entire layout.
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle to fill with ink extents
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle to fill with logical extents
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_iter_get_run_readonly">
+<description>
+Gets the current run for read-only access.
+
+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 [method@Pango.LayoutIter.get_run],
+but the user is not expected to modify the contents of the run (glyphs,
+glyph widths, etc.).
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the current run, that
+should not be modified
+
+</return>
+</function>
+
+<function name="pango_layout_iter_next_char">
+<description>
+Moves @iter forward to the next character in visual order.
+
+If @iter was already at the end of the layout, returns %FALSE.
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> whether motion was possible
+</return>
+</function>
+
+<function name="pango_layout_iter_next_cluster">
+<description>
+Moves @iter forward to the next cluster in visual order.
+
+If @iter was already at the end of the layout, returns %FALSE.
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> whether motion was possible
+</return>
+</function>
+
+<function name="pango_layout_iter_next_line">
+<description>
+Moves @iter forward to the start of the next line.
+
+If @iter is already on the last line, returns %FALSE.
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> whether motion was possible
+</return>
+</function>
+
+<function name="pango_layout_iter_next_run">
+<description>
+Moves @iter forward to the next run in visual order.
+
+If @iter was already at the end of the layout, returns %FALSE.
+
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoLayoutIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> whether motion was possible
+</return>
+</function>
+
+<function name="pango_layout_line_get_extents">
+<description>
+Computes the logical and ink extents of a layout line.
+
+See [method@Pango.Font.get_glyph_extents] for details
+about the interpretation of the rectangles.
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of
+the glyph string as drawn
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical
+extents of the glyph string
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_line_get_height">
+<description>
+Computes the height of the line, as the maximum of the heights
+of fonts used in this line.
+
+Note that the actual baseline-to-baseline distance between lines
+of text is influenced by other factors, such as
+[method@Pango.Layout.set_spacing] and
+[method@Pango.Layout.set_line_spacing].
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> return location for the line height
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_line_get_length">
+<description>
+Returns the length of the line, in bytes.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the length of the line
+
+</return>
+</function>
+
+<function name="pango_layout_line_get_pixel_extents">
+<description>
+Computes the logical and ink extents of @layout_line in device units.
+
+This function just calls [method@Pango.LayoutLine.get_extents] followed by
+two [func@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 [func@extents_to_pixels]).
+
+</description>
+<parameters>
+<parameter name="layout_line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of
+the glyph string as drawn
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical
+extents of the glyph string
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_line_get_resolved_direction">
+<description>
+Returns the resolved direction of the line.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the resolved direction of the line
+
+</return>
+</function>
+
+<function name="pango_layout_line_get_start_index">
+<description>
+Returns the start index of the line, as byte index
+into the text of the layout.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the start index of the line
+
+</return>
+</function>
+
+<function name="pango_layout_line_get_x_ranges">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="start_index">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+<parameter name="end_index">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+<parameter name="ranges">
+<parameter_description> location to
+store a pointer to an array of ranges. The array will be of length
+`2*n_ranges`, with each range starting at `(*ranges)[2*n]` and of
+width `(*ranges)[2*n + 1] - (*ranges)[2*n]`. This array must be freed
+with g_free(). The coordinates are relative to the layout and are in
+Pango units.
+</parameter_description>
+</parameter>
+<parameter name="n_ranges">
+<parameter_description> The number of ranges stored in @ranges
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_line_index_to_x">
+<description>
+Converts an index within a line to a X position.
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> byte offset of a grapheme within the layout
+</parameter_description>
+</parameter>
+<parameter name="trailing">
+<parameter_description> 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
+</parameter_description>
+</parameter>
+<parameter name="x_pos">
+<parameter_description> location to store the x_offset (in Pango units)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_line_is_paragraph_start">
+<description>
+Returns whether this is the first line of the paragraph.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if this is the first line
+
+</return>
+</function>
+
+<function name="pango_layout_line_ref">
+<description>
+Increase the reference count of a `PangoLayoutLine` by one.
+
+Since: 1.10
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the line passed in.
+
+</return>
+</function>
+
+<function name="pango_layout_line_unref">
+<description>
+Decrease the reference count of a `PangoLayoutLine` by one.
+
+If the result is zero, the line and all associated memory
+will be freed.
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_line_x_to_index">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="x_pos">
+<parameter_description> the X offset (in Pango units) from the left edge of the line.
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> location to store calculated byte index for the grapheme
+in which the user clicked
+</parameter_description>
+</parameter>
+<parameter name="trailing">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if @x_pos was outside the line, %TRUE if inside
+</return>
+</function>
+
+<function name="pango_layout_move_cursor_visually">
+<description>
+Computes a new cursor position from an old position and a direction.
+
+If @direction is positive, then the new position will cause the strong
+or weak cursor to be displayed one position to right of where it was
+with the old cursor position. If @direction is negative, it will be
+moved to the left.
+
+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 this function may move the cursor over multiple characters
+when multiple characters combine to form a single grapheme.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="strong">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+<parameter name="old_index">
+<parameter_description> the byte index of the current cursor position
+</parameter_description>
+</parameter>
+<parameter name="old_trailing">
+<parameter_description> if 0, the cursor was at the leading edge of the
+grapheme indicated by @old_index, if &gt; 0, the cursor
+was at the trailing edge.
+</parameter_description>
+</parameter>
+<parameter name="direction">
+<parameter_description> direction to move cursor. A negative
+value indicates motion to the left
+</parameter_description>
+</parameter>
+<parameter name="new_index">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+<parameter name="new_trailing">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_new">
+<description>
+Create a new `PangoLayout` object with attributes initialized to
+default values for a particular `PangoContext`.
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a `PangoContext`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoLayout`
+</return>
+</function>
+
+<function name="pango_layout_serialize">
+<description>
+Serializes the @layout for later deserialization via [func@Pango.Layout.deserialize].
+
+There are no guarantees about the format of the output across different
+versions of Pango and [func@Pango.Layout.deserialize] will reject data
+that it cannot parse.
+
+The intended use of this function is testing, benchmarking and debugging.
+The format is not meant as a permanent storage format.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> `PangoLayoutSerializeFlags`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `GBytes` containing the serialized form of @layout
+
+</return>
+</function>
+
+<function name="pango_layout_set_alignment">
+<description>
+Sets the alignment for the layout: how partial lines are
+positioned within the horizontal space available.
+
+The default alignment is %PANGO_ALIGN_LEFT.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="alignment">
+<parameter_description> the alignment
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_attributes">
+<description>
+Sets the text attributes for a layout object.
+
+References @attrs, so the caller can unref its reference.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> a `PangoAttrList`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_auto_dir">
+<description>
+Sets whether to calculate the base direction
+for the layout according to its contents.
+
+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 [method@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
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="auto_dir">
+<parameter_description> if %TRUE, compute the bidirectional base direction
+from the layout's contents
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_ellipsize">
+<description>
+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
+[method@Pango.Layout.set_width] and [method@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.
+
+The default value is %PANGO_ELLIPSIZE_NONE.
+
+See [method@Pango.Layout.set_height] for details.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="ellipsize">
+<parameter_description> the new ellipsization mode for @layout
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_font_description">
+<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.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> the new `PangoFontDescription`
+to unset the current font description
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_height">
+<description>
+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 the first line of each paragraph is ellipsized.
+This behavior may be changed in the future to act per layout instead of per
+paragraph. File a bug against pango at
+[https://gitlab.gnome.org/gnome/pango](https://gitlab.gnome.org/gnome/pango)
+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
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`.
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> the desired height of the layout in Pango units if positive,
+or desired number of lines if negative.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_indent">
+<description>
+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.
+
+The default value is 0.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="indent">
+<parameter_description> the amount by which to indent
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_justify">
+<description>
+Sets whether each complete line should be stretched to fill the
+entire width of the layout.
+
+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.
+
+Note that tabs and justification conflict with each other:
+Justification will move content away from its tab-aligned
+positions.
+
+The default value is %FALSE.
+
+Also see [method@Pango.Layout.set_justify_last_line].
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="justify">
+<parameter_description> whether the lines in the layout should be justified
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_justify_last_line">
+<description>
+Sets whether the last line should be stretched to fill the
+entire width of the layout.
+
+This only has an effect if [method@Pango.Layout.set_justify] has
+been called as well.
+
+The default value is %FALSE.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="justify">
+<parameter_description> whether the last line in the layout should be justified
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_line_spacing">
+<description>
+Sets a factor for line spacing.
+
+Typical values are: 0, 1, 1.5, 2. The default values is 0.
+
+If @factor is non-zero, lines are placed so that
+
+baseline2 = baseline1 + factor * height2
+
+where height2 is the line height of the second line
+(as determined by the font(s)). In this case, the spacing
+set with [method@Pango.Layout.set_spacing] is ignored.
+
+If @factor is zero (the default), spacing is applied as before.
+
+Note: for semantics that are closer to the CSS line-height
+property, see [func@Pango.attr_line_height_new].
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="factor">
+<parameter_description> the new line spacing factor
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_markup">
+<description>
+Sets the layout text and attribute list from marked-up text.
+
+See [Pango Markup](pango_markup.html)).
+
+Replaces the current text and attribute list.
+
+This is the same as [method@Pango.Layout.set_markup_with_accel],
+but the markup text isn't scanned for accelerators.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="markup">
+<parameter_description> marked-up text
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of marked-up text in bytes, or -1 if @markup is
+`NUL`-terminated
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_markup_with_accel">
+<description>
+Sets the layout text and attribute list from marked-up text.
+
+See [Pango Markup](pango_markup.html)).
+
+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.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="markup">
+<parameter_description> marked-up text (see [Pango Markup](pango_markup.html))
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of marked-up text in bytes, or -1 if @markup is
+`NUL`-terminated
+</parameter_description>
+</parameter>
+<parameter name="accel_marker">
+<parameter_description> marker for accelerators in the text
+</parameter_description>
+</parameter>
+<parameter name="accel_char">
+<parameter_description> return location
+for first located accelerator
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_single_paragraph_mode">
+<description>
+Sets the single paragraph mode of @layout.
+
+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.
+
+The default value is %FALSE.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="setting">
+<parameter_description> new setting
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_spacing">
+<description>
+Sets the amount of spacing in Pango units between
+the lines of the layout.
+
+When placing lines with spacing, Pango arranges things so that
+
+line2.top = line1.bottom + spacing
+
+The default value is 0.
+
+Note: Since 1.44, Pango is using the line height (as determined
+by the font) for placing lines when the line spacing factor is set
+to a non-zero value with [method@Pango.Layout.set_line_spacing].
+In that case, the @spacing set with this function is ignored.
+
+Note: for semantics that are closer to the CSS line-height
+property, see [func@Pango.attr_line_height_new].
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="spacing">
+<parameter_description> the amount of spacing
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_tabs">
+<description>
+Sets the tabs to use for @layout, overriding the default tabs.
+
+`PangoLayout` will place content at the next tab position
+whenever it meets a Tab character (U+0009).
+
+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.
+
+Note that tabs and justification conflict with each other:
+Justification will move content away from its tab-aligned
+positions. The same is true for alignments other than
+%PANGO_ALIGN_LEFT.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="tabs">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_text">
+<description>
+Sets the text of the layout.
+
+This function validates @text and renders invalid UTF-8
+with a placeholder glyph.
+
+Note that if you have used [method@Pango.Layout.set_markup] or
+[method@Pango.Layout.set_markup_with_accel] on @layout before, you
+may want to call [method@Pango.Layout.set_attributes] to clear the
+attributes set on the layout from the markup as this function does
+not clear attributes.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the text
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_width">
+<description>
+Sets the width to which the lines of the `PangoLayout` should wrap or
+ellipsized.
+
+The default value is -1: no width set.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`.
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> the desired width in Pango units, or -1 to indicate that no
+wrapping or ellipsization should be performed.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_wrap">
+<description>
+Sets the wrap mode.
+
+The wrap mode only has effect if a width is set on the layout
+with [method@Pango.Layout.set_width]. To turn off wrapping,
+set the width to -1.
+
+The default value is %PANGO_WRAP_WORD.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="wrap">
+<parameter_description> the wrap mode
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_write_to_file">
+<description>
+This function is equivalent to calling [method@Pango.Layout.serialize]
+followed by g_file_set_contents().
+
+See those two functions for details on the arguments.
+
+It is mostly intended for use inside a debugger to quickly dump
+a layout to a file for later inspection.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> `PangoLayoutSerializeFlags`
+</parameter_description>
+</parameter>
+<parameter name="filename">
+<parameter_description> the file to save it to
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> Return location for a potential error
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if saving was successful
+
+</return>
+</function>
+
+<function name="pango_layout_xy_to_index">
+<description>
+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 [method@Pango.LayoutLine.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.
+
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the X offset (in Pango units) from the left edge of the layout
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the Y offset (in Pango units) from the top edge of the layout
+</parameter_description>
+</parameter>
+<parameter name="index_">
+<parameter_description> location to store calculated byte index
+</parameter_description>
+</parameter>
+<parameter name="trailing">
+<parameter_description> 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 leading edge
+of the grapheme.
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the coordinates were inside text, %FALSE otherwise
+</return>
+</function>
+
+<function name="pango_log2vis_get_embedding_levels">
+<description>
+Return the bidirectional embedding levels of the input paragraph.
+
+The bidirectional embedding levels are 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.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> the text to itemize.
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> the number of bytes (not characters) to process, or -1
+if @text is nul-terminated and the length should be calculated.
+</parameter_description>
+</parameter>
+<parameter name="pbase_dir">
+<parameter_description> input base direction, and output resolved direction.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly allocated array of embedding levels, one item per
+character (not byte), that should be freed using g_free().
+
+</return>
+</function>
+
+<function name="pango_lookup_aliases">
+<description>
+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.
+
+Deprecated: 1.32: This function is not thread-safe.
+
+</description>
+<parameters>
+<parameter name="fontname">
+<parameter_description> an ASCII string
+</parameter_description>
+</parameter>
+<parameter name="families">
+<parameter_description> will be set to an array of
+font family names. This array is owned by Pango and should not be freed
+</parameter_description>
+</parameter>
+<parameter name="n_families">
+<parameter_description> will be set to the length of the @families array
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_map_get_engine">
+<description>
+Do not use.  Does not do anything.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="map">
+<parameter_description> a `PangoMap`
+</parameter_description>
+</parameter>
+<parameter name="script">
+<parameter_description> a `PangoScript`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %NULL.
+
+</return>
+</function>
+
+<function name="pango_map_get_engines">
+<description>
+Do not use.  Does not do anything.
+
+Since: 1.4
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="map">
+<parameter_description> a `PangoMap`
+</parameter_description>
+</parameter>
+<parameter name="script">
+<parameter_description> a `PangoScript`
+</parameter_description>
+</parameter>
+<parameter name="exact_engines">
+<parameter_description> location to store list of engines that exactly
+handle this script.
+</parameter_description>
+</parameter>
+<parameter name="fallback_engines">
+<parameter_description> location to store list of engines that
+approximately handle this script.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_markup_parser_finish">
+<description>
+Finishes parsing markup.
+
+After feeding a Pango markup parser some data with g_markup_parse_context_parse(),
+use this function to get the list of attributes and text out of the
+markup. This function will not free @context, use g_markup_parse_context_free()
+to do so.
+
+Since: 1.31.0
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> A valid parse context that was returned from [func@markup_parser_new]
+</parameter_description>
+</parameter>
+<parameter name="attr_list">
+<parameter_description> address of return location for a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> address of return location for text with tags stripped
+</parameter_description>
+</parameter>
+<parameter name="accel_char">
+<parameter_description> address of return location for accelerator char
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> address of return location for errors
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if @error is set, otherwise %TRUE
+
+</return>
+</function>
+
+<function name="pango_markup_parser_new">
+<description>
+Incrementally parses marked-up text to create a plain-text string
+and an attribute list.
+
+See the [Pango Markup](pango_markup.html) docs for details about the
+supported markup.
+
+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,
+when calling [func@markup_parser_finish]. Two @accel_marker characters
+following each other produce a single literal @accel_marker character.
+
+To feed markup to the parser, use g_markup_parse_context_parse()
+on the returned `GMarkupParseContext`. When done with feeding markup
+to the parser, use [func@markup_parser_finish] to get the data out
+of it, and then use g_markup_parse_context_free() to free it.
+
+This function is designed for applications that read Pango markup
+from streams. To simply parse a string containing Pango markup,
+the [func@parse_markup] API is recommended instead.
+
+Since: 1.31.0
+
+</description>
+<parameters>
+<parameter name="accel_marker">
+<parameter_description> character that precedes an accelerator, or 0 for none
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `GMarkupParseContext` that should be
+destroyed with g_markup_parse_context_free().
+
+</return>
+</function>
+
+<function name="pango_matrix_concat">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="new_matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_copy">
+<description>
+Copies a `PangoMatrix`.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoMatrix`
+
+</return>
+</function>
+
+<function name="pango_matrix_free">
+<description>
+Free a `PangoMatrix`.
+
+Since: 1.6
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_get_font_scale_factor">
+<description>
+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.  If the scale in the X
+coordinate is needed as well, use [method@Pango.Matrix.get_font_scale_factors].
+
+Since: 1.12
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`, may be %NULL
+</parameter_description>
+</parameter>
+</parameters>
+<return> the scale factor of @matrix on the height of the font,
+or 1.0 if @matrix is %NULL.
+
+</return>
+</function>
+
+<function name="pango_matrix_get_font_scale_factors">
+<description>
+Calculates the scale factor of a matrix on the width and height of the font.
+
+That is, @xscale is the scale factor in the direction of the X coordinate,
+and @yscale is the scale factor in the direction perpendicular to the
+vector that the X coordinate is mapped to.
+
+Note that output numbers will always be non-negative.
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="xscale">
+<parameter_description> output scale factor in the x direction
+</parameter_description>
+</parameter>
+<parameter name="yscale">
+<parameter_description> output scale factor perpendicular to the x direction
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_rotate">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="degrees">
+<parameter_description> degrees to rotate counter-clockwise
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_scale">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="scale_x">
+<parameter_description> amount to scale by in X direction
+</parameter_description>
+</parameter>
+<parameter name="scale_y">
+<parameter_description> amount to scale by in Y direction
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_transform_distance">
+<description>
+Transforms the distance vector (@dx,@dy) by @matrix.
+
+This is similar to [method@Pango.Matrix.transform_point],
+except that the translation components of the transformation
+are ignored. The calculation of the returned vector is as follows:
+
+```
+dx2 = dx1 * xx + dy1 * xy;
+dy2 = dx1 * yx + dy1 * yy;
+```
+
+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
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="dx">
+<parameter_description> in/out X component of a distance vector
+</parameter_description>
+</parameter>
+<parameter name="dy">
+<parameter_description> in/out Y component of a distance vector
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_transform_pixel_rectangle">
+<description>
+First transforms the @rect using @matrix, then calculates the bounding box
+of the transformed rectangle.
+
+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 [method@Pango.Matrix.transform_rectangle]
+on original rectangle in Pango units and convert to pixels afterward
+using [func@extents_to_pixels]'s first argument.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="rect">
+<parameter_description> in/out bounding box in device units
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_transform_point">
+<description>
+Transforms the point (@x, @y) by @matrix.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> in/out X position
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> in/out Y position
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_transform_rectangle">
+<description>
+First transforms @rect using @matrix, then calculates the bounding box
+of the transformed rectangle.
+
+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
+[method@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
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="rect">
+<parameter_description> in/out bounding box in Pango units
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_matrix_translate">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="tx">
+<parameter_description> amount to translate in the X direction
+</parameter_description>
+</parameter>
+<parameter name="ty">
+<parameter_description> amount to translate in the Y direction
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_module_register">
+<description>
+Do not use.  Does not do anything.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="module">
+<parameter_description> a `PangoIncludedModule`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_buffer_add_glyph">
+<description>
+Appends a glyph to a `PangoOTBuffer`, with @properties identifying which
+features should be applied on this glyph.
+
+See [method@PangoOT.Ruleset.add_feature].
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+<parameter name="glyph">
+<parameter_description> the glyph index to add, like a `PangoGlyph`
+</parameter_description>
+</parameter>
+<parameter name="properties">
+<parameter_description> the glyph properties
+</parameter_description>
+</parameter>
+<parameter name="cluster">
+<parameter_description> the cluster that this glyph belongs to
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_buffer_clear">
+<description>
+Empties a `PangoOTBuffer`, make it ready to add glyphs to.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_buffer_destroy">
+<description>
+Destroys a `PangoOTBuffer` and free all associated memory.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_buffer_get_glyphs">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> location to
+store the array of glyphs
+</parameter_description>
+</parameter>
+<parameter name="n_glyphs">
+<parameter_description> location to store the number of glyphs
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_buffer_new">
+<description>
+Creates a new `PangoOTBuffer` for the given OpenType font.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFcFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoOTBuffer`, which should
+be freed with [method@PangoOT.Buffer.destroy].
+
+</return>
+</function>
+
+<function name="pango_ot_buffer_output">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_buffer_set_rtl">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+<parameter name="rtl">
+<parameter_description> %TRUE for right-to-left text
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_buffer_set_zero_width_marks">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+<parameter name="zero_width_marks">
+<parameter_description> %TRUE if characters with a mark class should
+be forced to zero width
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_info_find_feature">
+<description>
+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 [method@PangoOT.Ruleset.add_feature] and similar
+functions.
+
+In the future, this may set @feature_index to an special value that if
+used in [method@PangoOT.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.
+
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to obtain information about
+</parameter_description>
+</parameter>
+<parameter name="feature_tag">
+<parameter_description> the tag of the feature to find
+</parameter_description>
+</parameter>
+<parameter name="script_index">
+<parameter_description> the index of the script
+</parameter_description>
+</parameter>
+<parameter name="language_index">
+<parameter_description> the index of the language whose features are searched,
+or %PANGO_OT_DEFAULT_LANGUAGE to use the default language of the script
+</parameter_description>
+</parameter>
+<parameter name="feature_index">
+<parameter_description> location to store the index of
+the feature
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the feature was found
+</return>
+</function>
+
+<function name="pango_ot_info_find_language">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to obtain information about
+</parameter_description>
+</parameter>
+<parameter name="script_index">
+<parameter_description> the index of the script whose languages are searched
+</parameter_description>
+</parameter>
+<parameter name="language_tag">
+<parameter_description> the tag of the language to find
+</parameter_description>
+</parameter>
+<parameter name="language_index">
+<parameter_description> location to store the index of the language
+</parameter_description>
+</parameter>
+<parameter name="required_feature_index">
+<parameter_description> location to store the
+required feature index of the language
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the language was found
+</return>
+</function>
+
+<function name="pango_ot_info_find_script">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to obtain information about
+</parameter_description>
+</parameter>
+<parameter name="script_tag">
+<parameter_description> the tag of the script to find
+</parameter_description>
+</parameter>
+<parameter name="script_index">
+<parameter_description> location to store the index of the script
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the script was found
+</return>
+</function>
+
+<function name="pango_ot_info_get">
+<description>
+Returns the `PangoOTInfo` structure for the given FreeType font face.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="face">
+<parameter_description> a `FT_Face`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoOTInfo` for @face.
+This object will have the same lifetime as @face.
+
+</return>
+</function>
+
+<function name="pango_ot_info_list_features">
+<description>
+Obtains the list of features for the given language of the given script.
+
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to obtain information about
+</parameter_description>
+</parameter>
+<parameter name="tag">
+<parameter_description> unused parameter
+</parameter_description>
+</parameter>
+<parameter name="script_index">
+<parameter_description> the index of the script to obtain information about
+</parameter_description>
+</parameter>
+<parameter name="language_index">
+<parameter_description> the index of the language to list features for, or
+%PANGO_OT_DEFAULT_LANGUAGE, to list features for the default
+language of the script
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly-allocated zero-terminated
+array containing the tags of the available features
+</return>
+</function>
+
+<function name="pango_ot_info_list_languages">
+<description>
+Obtains the list of available languages for a given script.
+
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to obtain information about
+</parameter_description>
+</parameter>
+<parameter name="script_index">
+<parameter_description> the index of the script to list languages for
+</parameter_description>
+</parameter>
+<parameter name="language_tag">
+<parameter_description> unused parameter
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly-allocated zero-terminated
+array containing the tags of the available languages
+</return>
+</function>
+
+<function name="pango_ot_info_list_scripts">
+<description>
+Obtains the list of available scripts.
+
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to obtain information about
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly-allocated zero-terminated
+array containing the tags of the available scripts
+</return>
+</function>
+
+<function name="pango_ot_ruleset_add_feature">
+<description>
+Adds a feature to the ruleset.
+
+</description>
+<parameters>
+<parameter name="ruleset">
+<parameter_description> a `PangoOTRuleset`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to add a feature to
+</parameter_description>
+</parameter>
+<parameter name="feature_index">
+<parameter_description> the index of the feature to add
+</parameter_description>
+</parameter>
+<parameter name="property_bit">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_ruleset_description_copy">
+<description>
+Creates a copy of @desc, which should be freed with
+[method@PangoOT.RulesetDescription.free].
+
+Primarily used internally by [func@PangoOT.Ruleset.get_for_description]
+to cache rulesets for ruleset descriptions.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> ruleset description to copy
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoOTRulesetDescription`
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_description_equal">
+<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.)
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="desc1">
+<parameter_description> a ruleset description
+</parameter_description>
+</parameter>
+<parameter name="desc2">
+<parameter_description> a ruleset description
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if two ruleset descriptions are identical,
+%FALSE otherwise
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_description_free">
+<description>
+Frees a ruleset description allocated by
+pango_ot_ruleset_description_copy().
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> an allocated `PangoOTRulesetDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_ruleset_description_hash">
+<description>
+Computes a hash of a `PangoOTRulesetDescription` structure suitable
+to be used, for example, as an argument to g_hash_table_new().
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a ruleset description
+</parameter_description>
+</parameter>
+</parameters>
+<return> the hash value
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_get_feature_count">
+<description>
+Gets the number of GSUB and GPOS features in the ruleset.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="ruleset">
+<parameter_description> a `PangoOTRuleset`
+</parameter_description>
+</parameter>
+<parameter name="n_gsub_features">
+<parameter_description> location to store number of GSUB features
+</parameter_description>
+</parameter>
+<parameter name="n_gpos_features">
+<parameter_description> location to store number of GPOS features
+</parameter_description>
+</parameter>
+</parameters>
+<return> Total number of features in the @ruleset
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_get_for_description">
+<description>
+Returns a ruleset for the given OpenType info and ruleset
+description.
+
+Rulesets are created on demand using
+[ctor@PangoOT.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.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a `PangoOTRulesetDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoOTRuleset` for @desc. This object will have
+the same lifetime as @info.
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_maybe_add_feature">
+<description>
+This is a convenience function that first tries to find the feature
+using [method@PangoOT.Info.find_feature] and the ruleset script and
+language passed to [ctor@PangoOT.Ruleset.new_for] and if the feature
+is found, adds it to the ruleset.
+
+If @ruleset was not created using [ctor@PangoOT.Ruleset.new_for],
+this function does nothing.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="ruleset">
+<parameter_description> a `PangoOTRuleset`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to add a feature to
+</parameter_description>
+</parameter>
+<parameter name="feature_tag">
+<parameter_description> the tag of the feature to add
+</parameter_description>
+</parameter>
+<parameter name="property_bit">
+<parameter_description> 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.
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the feature was found and added to ruleset,
+%FALSE otherwise
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_maybe_add_features">
+<description>
+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 [method@PangoOT.Ruleset.maybe_add_feature]
+on it.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="ruleset">
+<parameter_description> a `PangoOTRuleset`
+</parameter_description>
+</parameter>
+<parameter name="table_type">
+<parameter_description> the table type to add features to
+</parameter_description>
+</parameter>
+<parameter name="features">
+<parameter_description> array of feature name and property bits to add
+</parameter_description>
+</parameter>
+<parameter name="n_features">
+<parameter_description> number of feature records in @features array
+</parameter_description>
+</parameter>
+</parameters>
+<return> The number of features in @features that were found
+and added to @ruleset
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_new">
+<description>
+Creates a new `PangoOTRuleset` for the given OpenType info.
+
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoOTRuleset`
+</return>
+</function>
+
+<function name="pango_ot_ruleset_new_for">
+<description>
+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 addition to what [ctor@PangoOT.Ruleset.new] does, this function will:
+
+* Find the `PangoOTTag` script and language tags associated with
+@script and @language using [func@PangoOT.tag_from_script] and
+[func@PangoOT.tag_from_language],
+
+* 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
+[method@PangoOT.Info.find_script] and [method@PangoOT.Info.find_language],
+
+* For found language-systems, if they have required feature index,
+add that feature to the ruleset using [method@PangoOT.Ruleset.add_feature],
+
+* Remember found script and language indices for both table types,
+and use them in future [method@PangoOT.Ruleset.maybe_add_feature] and
+[method@PangoOT.Ruleset.maybe_add_features].
+
+Because of the way return values of [method@PangoOT.Info.find_script] and
+[method@PangoOT.Info.find_language] are ignored, this function automatically
+finds and uses the 'DFLT' script and the default language-system.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="script">
+<parameter_description> a `PangoScript`
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> a `PangoLanguage`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoOTRuleset`
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_new_from_description">
+<description>
+Creates a new `PangoOTRuleset` for the given OpenType info and
+matching the given ruleset description.
+
+This is a convenience function that calls [ctor@PangoOT.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.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="info">
+<parameter_description> a `PangoOTInfo`
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a `PangoOTRulesetDescription`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoOTRuleset`
+
+</return>
+</function>
+
+<function name="pango_ot_ruleset_position">
+<description>
+Performs the OpenType GPOS positioning on @buffer using
+the features in @ruleset.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="ruleset">
+<parameter_description> a `PangoOTRuleset`
+</parameter_description>
+</parameter>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_ruleset_substitute">
+<description>
+Performs the OpenType GSUB substitution on @buffer using
+the features in @ruleset.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="ruleset">
+<parameter_description> a `PangoOTRuleset`
+</parameter_description>
+</parameter>
+<parameter name="buffer">
+<parameter_description> a `PangoOTBuffer`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_ot_tag_from_language">
+<description>
+Finds the OpenType language-system tag best describing @language.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="language">
+<parameter_description> A `PangoLanguage`
+</parameter_description>
+</parameter>
+</parameters>
+<return> `PangoOTTag` best matching @language or
+%PANGO_OT_TAG_DEFAULT_LANGUAGE if none found or if @language
+is %NULL.
+
+</return>
+</function>
+
+<function name="pango_ot_tag_from_script">
+<description>
+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'.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="script">
+<parameter_description> A `PangoScript`
+</parameter_description>
+</parameter>
+</parameters>
+<return> `PangoOTTag` corresponding to @script or
+%PANGO_OT_TAG_DEFAULT_SCRIPT if none found.
+
+</return>
+</function>
+
+<function name="pango_ot_tag_to_language">
+<description>
+Finds a `PangoLanguage` corresponding to @language_tag.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="language_tag">
+<parameter_description> A `PangoOTTag` OpenType language-system tag
+</parameter_description>
+</parameter>
+</parameters>
+<return> `PangoLanguage` best matching @language_tag or
+`PangoLanguage` corresponding to the string &quot;xx&quot; if none found.
+
+</return>
+</function>
+
+<function name="pango_ot_tag_to_script">
+<description>
+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'.
+
+Since: 1.18
+
+</description>
+<parameters>
+<parameter name="script_tag">
+<parameter_description> A `PangoOTTag` OpenType script tag
+</parameter_description>
+</parameter>
+</parameters>
+<return> `PangoScript` corresponding to @script_tag or
+%PANGO_SCRIPT_UNKNOWN if none found.
+
+</return>
+</function>
+
+<function name="pango_parse_enum">
+<description>
+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. &quot;none/start/middle/end&quot;.
+
+If failed and @possible_values is not %NULL, returned string should
+be freed using g_free().
+
+Deprecated: 1.38
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="type">
+<parameter_description> enum type to parse, eg. %PANGO_TYPE_ELLIPSIZE_MODE
+</parameter_description>
+</parameter>
+<parameter name="str">
+<parameter_description> string to parse
+</parameter_description>
+</parameter>
+<parameter name="value">
+<parameter_description> integer to store the result in
+</parameter_description>
+</parameter>
+<parameter name="warn">
+<parameter_description> if %TRUE, issue a g_warning() on bad input
+</parameter_description>
+</parameter>
+<parameter name="possible_values">
+<parameter_description> place to store list of possible
+values on failure
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @str was successfully parsed
+
+</return>
+</function>
+
+<function name="pango_parse_markup">
+<description>
+Parses marked-up text to create a plain-text string and an attribute list.
+
+See the [Pango Markup](pango_markup.html) docs for details about the
+supported markup.
+
+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.
+
+To parse a stream of pango markup incrementally, use [func@markup_parser_new].
+
+If any error happens, none of the output arguments are touched except
+for @error.
+
+
+</description>
+<parameters>
+<parameter name="markup_text">
+<parameter_description> markup to parse (see the Pango Markup docs)
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of @markup_text, or -1 if nul-terminated
+</parameter_description>
+</parameter>
+<parameter name="accel_marker">
+<parameter_description> character that precedes an accelerator, or 0 for none
+</parameter_description>
+</parameter>
+<parameter name="attr_list">
+<parameter_description> address of return location for a `PangoAttrList`
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> address of return location for text with tags stripped
+</parameter_description>
+</parameter>
+<parameter name="accel_char">
+<parameter_description> address of return location for accelerator char
+</parameter_description>
+</parameter>
+<parameter name="error">
+<parameter_description> address of return location for errors
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if @error is set, otherwise %TRUE
+</return>
+</function>
+
+<function name="pango_parse_stretch">
+<description>
+Parses a font stretch.
+
+The allowed values are
+&quot;ultra_condensed&quot;, &quot;extra_condensed&quot;, &quot;condensed&quot;,
+&quot;semi_condensed&quot;, &quot;normal&quot;, &quot;semi_expanded&quot;, &quot;expanded&quot;,
+&quot;extra_expanded&quot; and &quot;ultra_expanded&quot;. Case variations are
+ignored and the '_' characters may be omitted.
+
+
+</description>
+<parameters>
+<parameter name="str">
+<parameter_description> a string to parse.
+</parameter_description>
+</parameter>
+<parameter name="stretch">
+<parameter_description> a `PangoStretch` to store the result in.
+</parameter_description>
+</parameter>
+<parameter name="warn">
+<parameter_description> if %TRUE, issue a g_warning() on bad input.
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @str was successfully parsed.
+</return>
+</function>
+
+<function name="pango_parse_style">
+<description>
+Parses a font style.
+
+The allowed values are &quot;normal&quot;, &quot;italic&quot; and &quot;oblique&quot;, case
+variations being
+ignored.
+
+
+</description>
+<parameters>
+<parameter name="str">
+<parameter_description> a string to parse.
+</parameter_description>
+</parameter>
+<parameter name="style">
+<parameter_description> a `PangoStyle` to store the result in.
+</parameter_description>
+</parameter>
+<parameter name="warn">
+<parameter_description> if %TRUE, issue a g_warning() on bad input.
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @str was successfully parsed.
+</return>
+</function>
+
+<function name="pango_parse_variant">
+<description>
+Parses a font variant.
+
+The allowed values are &quot;normal&quot; and &quot;smallcaps&quot; or &quot;small_caps&quot;,
+case variations being ignored.
+
+
+</description>
+<parameters>
+<parameter name="str">
+<parameter_description> a string to parse.
+</parameter_description>
+</parameter>
+<parameter name="variant">
+<parameter_description> a `PangoVariant` to store the result in.
+</parameter_description>
+</parameter>
+<parameter name="warn">
+<parameter_description> if %TRUE, issue a g_warning() on bad input.
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @str was successfully parsed.
+</return>
+</function>
+
+<function name="pango_parse_weight">
+<description>
+Parses a font weight.
+
+The allowed values are &quot;heavy&quot;,
+&quot;ultrabold&quot;, &quot;bold&quot;, &quot;normal&quot;, &quot;light&quot;, &quot;ultraleight&quot;
+and integers. Case variations are ignored.
+
+
+</description>
+<parameters>
+<parameter name="str">
+<parameter_description> a string to parse.
+</parameter_description>
+</parameter>
+<parameter name="weight">
+<parameter_description> a `PangoWeight` to store the result in.
+</parameter_description>
+</parameter>
+<parameter name="warn">
+<parameter_description> if %TRUE, issue a g_warning() on bad input.
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @str was successfully parsed.
+</return>
+</function>
+
+<function name="pango_quantize_line_geometry">
+<description>
+Quantizes the thickness and position of a line to whole device pixels.
+
+This is typically used for underline or strikethrough. 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
+
+</description>
+<parameters>
+<parameter name="thickness">
+<parameter_description> pointer to the thickness of a line, in Pango units
+</parameter_description>
+</parameter>
+<parameter name="position">
+<parameter_description> corresponding position
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_read_line">
+<description>
+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.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="stream">
+<parameter_description> a stdio stream
+</parameter_description>
+</parameter>
+<parameter name="str">
+<parameter_description> `GString` buffer into which to write the result
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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 '\')
+
+</return>
+</function>
+
+<function name="pango_renderer_activate">
+<description>
+Does initial setup before rendering operations on @renderer.
+
+[method@Pango.Renderer.deactivate] should be called when done drawing.
+Calls such as [method@Pango.Renderer.draw_layout] automatically
+activate the layout before drawing on it.
+
+Calls to [method@Pango.Renderer.activate] and
+[method@Pango.Renderer.deactivate] can be nested and the
+renderer will only be initialized and deinitialized once.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_deactivate">
+<description>
+Cleans up after rendering operations on @renderer.
+
+See docs for [method@Pango.Renderer.activate].
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_draw_error_underline">
+<description>
+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 [method@Pango.Renderer.activate] to activate a renderer.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> X coordinate of underline, in Pango units in user coordinate system
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> Y coordinate of underline, in Pango units in user coordinate system
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> width of underline, in Pango units in user coordinate system
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> height of underline, in Pango units in user coordinate system
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_draw_glyph">
+<description>
+Draws a single glyph with coordinates in device space.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="glyph">
+<parameter_description> the glyph index of a single glyph
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> X coordinate of left edge of baseline of glyph
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> Y coordinate of left edge of baseline of glyph
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_draw_glyph_item">
+<description>
+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.
+
+This is useful for rendering text in PDF.
+
+Note that this method does not handle attributes in @glyph_item.
+If you want colors, shapes and lines handled automatically according
+to those attributes, you need to use pango_renderer_draw_layout_line()
+or pango_renderer_draw_layout().
+
+Note that @text is the start of the text for layout, which is then
+indexed by `glyph_item-&gt;item-&gt;offset`.
+
+If @text is %NULL, this simply calls [method@Pango.Renderer.draw_glyphs].
+
+The default implementation of this method simply falls back to
+[method@Pango.Renderer.draw_glyphs].
+
+Since: 1.22
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="text">
+<parameter_description> the UTF-8 text that @glyph_item refers to
+</parameter_description>
+</parameter>
+<parameter name="glyph_item">
+<parameter_description> a `PangoGlyphItem`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> X position of left edge of baseline, in user space coordinates
+in Pango units
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> Y position of left edge of baseline, in user space coordinates
+in Pango units
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_draw_glyphs">
+<description>
+Draws the glyphs in @glyphs with the specified `PangoRenderer`.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> a `PangoGlyphString`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> X position of left edge of baseline, in user space coordinates
+in Pango units.
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> Y position of left edge of baseline, in user space coordinates
+in Pango units.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_draw_layout">
+<description>
+Draws @layout with the specified `PangoRenderer`.
+
+This is equivalent to drawing the lines of the layout, at their
+respective positions relative to @x, @y.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> X position of left edge of baseline, in user space coordinates
+in Pango units.
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> Y position of left edge of baseline, in user space coordinates
+in Pango units.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_draw_layout_line">
+<description>
+Draws @line with the specified `PangoRenderer`.
+
+This draws the glyph items that make up the line, as well as
+shapes, backgrounds and lines that are specified by the attributes
+of those items.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> X position of left edge of baseline, in user space coordinates
+in Pango units.
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> Y position of left edge of baseline, in user space coordinates
+in Pango units.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_draw_rectangle">
+<description>
+Draws an axis-aligned rectangle in user space coordinates with the
+specified `PangoRenderer`.
+
+This should be called while @renderer is already active.
+Use [method@Pango.Renderer.activate] to activate a renderer.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="part">
+<parameter_description> type of object this rectangle is part of
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> X position at which to draw rectangle, in user space coordinates
+in Pango units
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> Y position at which to draw rectangle, in user space coordinates
+in Pango units
+</parameter_description>
+</parameter>
+<parameter name="width">
+<parameter_description> width of rectangle in Pango units
+</parameter_description>
+</parameter>
+<parameter name="height">
+<parameter_description> height of rectangle in Pango units
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_draw_trapezoid">
+<description>
+Draws a trapezoid with the parallel sides aligned with the X axis
+using the given `PangoRenderer`; coordinates are in device space.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="part">
+<parameter_description> type of object this trapezoid is part of
+</parameter_description>
+</parameter>
+<parameter name="y1_">
+<parameter_description> Y coordinate of top of trapezoid
+</parameter_description>
+</parameter>
+<parameter name="x11">
+<parameter_description> X coordinate of left end of top of trapezoid
+</parameter_description>
+</parameter>
+<parameter name="x21">
+<parameter_description> X coordinate of right end of top of trapezoid
+</parameter_description>
+</parameter>
+<parameter name="y2">
+<parameter_description> Y coordinate of bottom of trapezoid
+</parameter_description>
+</parameter>
+<parameter name="x12">
+<parameter_description> X coordinate of left end of bottom of trapezoid
+</parameter_description>
+</parameter>
+<parameter name="x22">
+<parameter_description> X coordinate of right end of bottom of trapezoid
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_get_alpha">
+<description>
+Gets the current alpha for the specified part.
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="part">
+<parameter_description> the part to get the alpha for
+</parameter_description>
+</parameter>
+</parameters>
+<return> the alpha for the specified part,
+or 0 if it hasn't been set and should be
+inherited from the environment.
+
+</return>
+</function>
+
+<function name="pango_renderer_get_color">
+<description>
+Gets the current rendering color for the specified part.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="part">
+<parameter_description> the part to get the color for
+</parameter_description>
+</parameter>
+</parameters>
+<return> the color for the
+specified part, or %NULL if it hasn't been set and should be
+inherited from the environment.
+
+</return>
+</function>
+
+<function name="pango_renderer_get_layout">
+<description>
+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 vfunc, for example.
+
+The returned layout should not be modified while still being
+rendered.
+
+Since: 1.20
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the layout, or %NULL if
+no layout is being rendered using @renderer at this time.
+
+</return>
+</function>
+
+<function name="pango_renderer_get_layout_line">
+<description>
+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 vfunc, for example.
+
+The returned layout line should not be modified while still being
+rendered.
+
+Since: 1.20
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the layout line, or %NULL
+if no layout line is being rendered using @renderer at this time.
+
+</return>
+</function>
+
+<function name="pango_renderer_get_matrix">
+<description>
+Gets the transformation matrix that will be applied when
+rendering.
+
+See [method@Pango.Renderer.set_matrix].
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+</parameters>
+<return> 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.
+
+</return>
+</function>
+
+<function name="pango_renderer_part_changed">
+<description>
+Informs Pango that the way that the rendering is done
+for @part has changed.
+
+This should be called if the rendering changes 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
+
+```
+pango_renderer_part_changed (render, PANGO_RENDER_PART_UNDERLINE);
+```
+
+When the stipple changes or underlines with different stipples
+might be joined together. Pango automatically calls this for
+changes to colors. (See [method@Pango.Renderer.set_color])
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="part">
+<parameter_description> the part for which rendering has changed.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_prepare_run">
+<description>
+Set up the state of the `PangoRenderer` for rendering @run.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="run">
+<parameter_description> a `PangoLayoutRun`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_set_alpha">
+<description>
+Sets the alpha for part of the rendering.
+
+Note that the alpha may only be used if a color is
+specified for @part as well.
+
+Since: 1.38
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="part">
+<parameter_description> the part to set the alpha for
+</parameter_description>
+</parameter>
+<parameter name="alpha">
+<parameter_description> an alpha value between 1 and 65536, or 0 to unset the alpha
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_set_color">
+<description>
+Sets the color for part of the rendering.
+
+Also see [method@Pango.Renderer.set_alpha].
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="part">
+<parameter_description> the part to change the color of
+</parameter_description>
+</parameter>
+<parameter name="color">
+<parameter_description> the new color or %NULL to unset the current color
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_renderer_set_matrix">
+<description>
+Sets the transformation matrix that will be applied when rendering.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="renderer">
+<parameter_description> a `PangoRenderer`
+</parameter_description>
+</parameter>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`, or %NULL to unset any existing matrix
+(No matrix set is the same as setting the identity matrix.)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_reorder_items">
+<description>
+Reorder items from logical order to visual order.
+
+The visual order is determined from the associated directional
+levels of the items. The original list is unmodified.
+
+(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.)
+
+
+</description>
+<parameters>
+<parameter name="items">
+<parameter_description> a `GList` of `PangoItem`
+in logical order.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `GList`
+of `PangoItem` structures in visual order.
+</return>
+</function>
+
+<function name="pango_scan_int">
+<description>
+Scans an integer.
+
+Leading white space is skipped.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="pos">
+<parameter_description> in/out string position
+</parameter_description>
+</parameter>
+<parameter name="out">
+<parameter_description> an int into which to write the result
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if a parse error occurred
+
+</return>
+</function>
+
+<function name="pango_scan_string">
+<description>
+Scans a string into a `GString` buffer.
+
+The string may either be a sequence of non-white-space characters,
+or a quoted string with '&quot;'. Instead a quoted string, '\&quot;' represents
+a literal quote. Leading white space outside of quotes is skipped.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="pos">
+<parameter_description> in/out string position
+</parameter_description>
+</parameter>
+<parameter name="out">
+<parameter_description> a `GString` into which to write the result
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if a parse error occurred
+
+</return>
+</function>
+
+<function name="pango_scan_word">
+<description>
+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.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="pos">
+<parameter_description> in/out string position
+</parameter_description>
+</parameter>
+<parameter name="out">
+<parameter_description> a `GString` into which to write the result
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if a parse error occurred
+
+</return>
+</function>
+
+<function name="pango_script_for_unichar">
+<description>
+Looks up the script for a particular character.
+
+The script of a character is 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.
+
+Note that while the return type of this function is declared
+as `PangoScript`, as of Pango 1.18, this function simply returns
+the return value of g_unichar_get_script(). Callers must be
+prepared to handle unknown values.
+
+Since: 1.4
+Deprecated: 1.44. Use g_unichar_get_script()
+
+</description>
+<parameters>
+<parameter name="ch">
+<parameter_description> a Unicode character
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoScript` for the character.
+
+</return>
+</function>
+
+<function name="pango_script_get_sample_language">
+<description>
+Finds a language tag that is reasonably representative of @script.
+
+The language will usually be the most widely spoken or used language
+written in that script: for instance, the sample language for
+%PANGO_SCRIPT_CYRILLIC is ru (Russian), the sample language for
+%PANGO_SCRIPT_ARABIC is ar.
+
+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 [method@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 &quot;en:fa&quot; 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.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="script">
+<parameter_description> a `PangoScript`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoLanguage` that is representative
+of the script
+
+</return>
+</function>
+
+<function name="pango_script_iter_free">
+<description>
+Frees a `PangoScriptIter`.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoScriptIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_script_iter_get_range">
+<description>
+Gets information about the range to which @iter 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)
+
+Note that while the type of the @script argument is declared
+as `PangoScript`, as of Pango 1.18, this function simply returns
+GUnicodeScript values. Callers must be prepared to handle unknown
+values.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoScriptIter`
+</parameter_description>
+</parameter>
+<parameter name="start">
+<parameter_description> location to store start position of the range
+</parameter_description>
+</parameter>
+<parameter name="end">
+<parameter_description> location to store end position of the range
+</parameter_description>
+</parameter>
+<parameter name="script">
+<parameter_description> location to store script for range
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_script_iter_new">
+<description>
+Create a new `PangoScriptIter`, used to break a string of
+Unicode text into runs by Unicode script.
+
+No copy is made of @text, so the caller needs to make
+sure it remains valid until the iterator is freed with
+[method@Pango.ScriptIter.free].
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> a UTF-8 string
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length of @text, or -1 if @text is nul-terminated.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the new script iterator, initialized
+to point at the first range in the text, which should be
+freed with [method@Pango.ScriptIter.free]. If the string is
+empty, it will point at an empty range.
+
+</return>
+</function>
+
+<function name="pango_script_iter_next">
+<description>
+Advances a `PangoScriptIter` to the next range.
+
+If @iter is already at the end, it is left unchanged
+and %FALSE is returned.
+
+Since: 1.4
+
+</description>
+<parameters>
+<parameter name="iter">
+<parameter_description> a `PangoScriptIter`
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @iter was successfully advanced
+
+</return>
+</function>
+
+<function name="pango_shape">
+<description>
+Convert the characters in @text into glyphs.
+
+Given a segment of text and the corresponding `PangoAnalysis` structure
+returned from [func@Pango.itemize], convert the characters into glyphs. You
+may also pass in only a substring of the item from [func@Pango.itemize].
+
+It is recommended that you use [func@Pango.shape_full] instead, since
+that API allows for shaping interaction happening across text item
+boundaries.
+
+Note that the extra attributes in the @analyis that is returned from
+[func@Pango.itemize] have indices that are relative to the entire paragraph,
+so you need to subtract the item offset from their indices before
+calling [func@Pango.shape].
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> the text to process
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> the length (in bytes) of @text
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description> `PangoAnalysis` structure from [func@Pango.itemize]
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> glyph string in which to store results
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_shape_full">
+<description>
+Convert the characters in @text into glyphs.
+
+Given a segment of text and the corresponding `PangoAnalysis` structure
+returned from [func@Pango.itemize], convert the characters into glyphs.
+You may also pass in only a substring of the item from [func@Pango.itemize].
+
+This is similar to [func@Pango.shape], except it also can optionally take
+the full paragraph text as input, which will then be used to perform
+certain cross-item shaping interactions. If you have access to the broader
+text of which @item_text is part of, provide the broader text as
+@paragraph_text. If @paragraph_text is %NULL, item text is used instead.
+
+Note that the extra attributes in the @analyis that is returned from
+[func@Pango.itemize] have indices that are relative to the entire paragraph,
+so you do not pass the full paragraph text as @paragraph_text, you need
+to subtract the item offset from their indices before calling
+[func@Pango.shape_full].
+
+Since: 1.32
+
+</description>
+<parameters>
+<parameter name="item_text">
+<parameter_description> valid UTF-8 text to shape.
+</parameter_description>
+</parameter>
+<parameter name="item_length">
+<parameter_description> the length (in bytes) of @item_text. -1 means nul-terminated text.
+</parameter_description>
+</parameter>
+<parameter name="paragraph_text">
+<parameter_description> text of the paragraph (see details).
+</parameter_description>
+</parameter>
+<parameter name="paragraph_length">
+<parameter_description> the length (in bytes) of @paragraph_text. -1 means nul-terminated text.
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description> `PangoAnalysis` structure from [func@Pango.itemize].
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> glyph string in which to store results.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_shape_item">
+<description>
+Convert the characters in @item into glyphs.
+
+This is similar to [func@Pango.shape_with_flags], except it takes a
+`PangoItem` instead of separate @item_text and @analysis arguments.
+It also takes @log_attrs, which may be used in implementing text
+transforms.
+
+Note that the extra attributes in the @analyis that is returned from
+[func@Pango.itemize] have indices that are relative to the entire paragraph,
+so you do not pass the full paragraph text as @paragraph_text, you need
+to subtract the item offset from their indices before calling
+[func@Pango.shape_with_flags].
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="item">
+<parameter_description> `PangoItem` to shape
+</parameter_description>
+</parameter>
+<parameter name="paragraph_text">
+<parameter_description> text of the paragraph (see details).
+</parameter_description>
+</parameter>
+<parameter name="paragraph_length">
+<parameter_description> the length (in bytes) of @paragraph_text.
+-1 means nul-terminated text.
+</parameter_description>
+</parameter>
+<parameter name="log_attrs">
+<parameter_description> array of `PangoLogAttr` for @item
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> glyph string in which to store results
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> flags influencing the shaping process
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_shape_with_flags">
+<description>
+Convert the characters in @text into glyphs.
+
+Given a segment of text and the corresponding `PangoAnalysis` structure
+returned from [func@Pango.itemize], convert the characters into glyphs.
+You may also pass in only a substring of the item from [func@Pango.itemize].
+
+This is similar to [func@Pango.shape_full], except it also takes flags
+that can influence the shaping process.
+
+Note that the extra attributes in the @analyis that is returned from
+[func@Pango.itemize] have indices that are relative to the entire paragraph,
+so you do not pass the full paragraph text as @paragraph_text, you need
+to subtract the item offset from their indices before calling
+[func@Pango.shape_with_flags].
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="item_text">
+<parameter_description> valid UTF-8 text to shape
+</parameter_description>
+</parameter>
+<parameter name="item_length">
+<parameter_description> the length (in bytes) of @item_text.
+-1 means nul-terminated text.
+</parameter_description>
+</parameter>
+<parameter name="paragraph_text">
+<parameter_description> text of the paragraph (see details).
+</parameter_description>
+</parameter>
+<parameter name="paragraph_length">
+<parameter_description> the length (in bytes) of @paragraph_text.
+-1 means nul-terminated text.
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description>  `PangoAnalysis` structure from [func@Pango.itemize]
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> glyph string in which to store results
+</parameter_description>
+</parameter>
+<parameter name="flags">
+<parameter_description> flags influencing the shaping process
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_skip_space">
+<description>
+Skips 0 or more characters of white space.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="pos">
+<parameter_description> in/out string position
+</parameter_description>
+</parameter>
+</parameters>
+<return> %FALSE if skipping the white space leaves
+the position at a '\0' character.
+
+</return>
+</function>
+
+<function name="pango_split_file_list">
+<description>
+Splits a %G_SEARCHPATH_SEPARATOR-separated list of files, stripping
+white space and substituting ~/ with $HOME/.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="str">
+<parameter_description> a %G_SEARCHPATH_SEPARATOR separated list of filenames
+</parameter_description>
+</parameter>
+</parameters>
+<return> a list of
+strings to be freed with g_strfreev()
+
+</return>
+</function>
+
+<function name="pango_tab_array_copy">
+<description>
+Copies a `PangoTabArray`.
+
+
+</description>
+<parameters>
+<parameter name="src">
+<parameter_description> `PangoTabArray` to copy
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoTabArray`, which should
+be freed with [method@Pango.TabArray.free].
+</return>
+</function>
+
+<function name="pango_tab_array_free">
+<description>
+Frees a tab array and associated resources.
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_from_string">
+<description>
+Deserializes a `PangoTabArray` from a string.
+
+This is the counterpart to [method@Pango.TabArray.to_string].
+See that functions for details about the format.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> a string
+</parameter_description>
+</parameter>
+</parameters>
+<return> a new `PangoTabArray`
+</return>
+</function>
+
+<function name="pango_tab_array_get_decimal_point">
+<description>
+Gets the decimal point to use.
+
+This is only relevant for %PANGO_TAB_DECIMAL.
+
+The default value of 0 means that Pango will use the
+decimal point according to the current locale.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+<parameter name="tab_index">
+<parameter_description> the index of a tab stop
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_get_positions_in_pixels">
+<description>
+Returns %TRUE if the tab positions are in pixels,
+%FALSE if they are in Pango units.
+
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+</parameters>
+<return> whether positions are in pixels.
+</return>
+</function>
+
+<function name="pango_tab_array_get_size">
+<description>
+Gets the number of tab stops in @tab_array.
+
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the number of tab stops in the array.
+</return>
+</function>
+
+<function name="pango_tab_array_get_tab">
+<description>
+Gets the alignment and position of a tab stop.
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+<parameter name="tab_index">
+<parameter_description> tab stop index
+</parameter_description>
+</parameter>
+<parameter name="alignment">
+<parameter_description> location to store alignment
+</parameter_description>
+</parameter>
+<parameter name="location">
+<parameter_description> location to store tab position
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_get_tabs">
+<description>
+If non-%NULL, @alignments and @locations are filled with allocated
+arrays.
+
+The arrays are of length [method@Pango.TabArray.get_size].
+You must free the returned array.
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+<parameter name="alignments">
+<parameter_description> location to store an array of tab
+stop alignments
+</parameter_description>
+</parameter>
+<parameter name="locations">
+<parameter_description> location to store an array
+of tab positions
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_new">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="initial_size">
+<parameter_description> Initial number of tab stops to allocate, can be 0
+</parameter_description>
+</parameter>
+<parameter name="positions_in_pixels">
+<parameter_description> whether positions are in pixel units
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoTabArray`, which should
+be freed with [method@Pango.TabArray.free].
+</return>
+</function>
+
+<function name="pango_tab_array_new_with_positions">
+<description>
+Creates a `PangoTabArray` and allows you to specify the alignment
+and position of each tab stop.
+
+You **must** provide an alignment and position for @size tab stops.
+
+
+</description>
+<parameters>
+<parameter name="size">
+<parameter_description> number of tab stops in the array
+</parameter_description>
+</parameter>
+<parameter name="positions_in_pixels">
+<parameter_description> whether positions are in pixel units
+</parameter_description>
+</parameter>
+<parameter name="first_alignment">
+<parameter_description> alignment of first tab stop
+</parameter_description>
+</parameter>
+<parameter name="first_position">
+<parameter_description> position of first tab stop
+</parameter_description>
+</parameter>
+<parameter name="Varargs">
+<parameter_description> additional alignment/position pairs
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoTabArray`, which should
+be freed with [method@Pango.TabArray.free].
+</return>
+</function>
+
+<function name="pango_tab_array_resize">
+<description>
+Resizes a tab array.
+
+You must subsequently initialize any tabs
+that were added as a result of growing the array.
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+<parameter name="new_size">
+<parameter_description> new size of the array
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_set_decimal_point">
+<description>
+Sets the decimal point to use.
+
+This is only relevant for %PANGO_TAB_DECIMAL.
+
+By default, Pango uses the decimal point according
+to the current locale.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+<parameter name="tab_index">
+<parameter_description> the index of a tab stop
+</parameter_description>
+</parameter>
+<parameter name="decimal_point">
+<parameter_description> the decimal point to use
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_set_positions_in_pixels">
+<description>
+Sets whether positions in this array are specified in
+pixels.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+<parameter name="positions_in_pixels">
+<parameter_description> whether positions are in pixels
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_set_tab">
+<description>
+Sets the alignment and location of a tab stop.
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+<parameter name="tab_index">
+<parameter_description> the index of a tab stop
+</parameter_description>
+</parameter>
+<parameter name="alignment">
+<parameter_description> tab alignment
+</parameter_description>
+</parameter>
+<parameter name="location">
+<parameter_description> tab location in Pango units
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_sort">
+<description>
+Utility function to ensure that the tab stops are in increasing order.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_tab_array_to_string">
+<description>
+Serializes a `PangoTabArray` to a string.
+
+No guarantees are made about the format of the string,
+it may change between Pango versions.
+
+The intended use of this function is testing and
+debugging. The format is not meant as a permanent
+storage format.
+
+Since: 1.50
+
+</description>
+<parameters>
+<parameter name="tab_array">
+<parameter_description> a `PangoTabArray`
+</parameter_description>
+</parameter>
+</parameters>
+<return> a newly allocated string
+</return>
+</function>
+
+<function name="pango_tailor_break">
+<description>
+Apply language-specific tailoring to the breaks in @attrs.
+
+The line breaks are assumed to have been produced
+by [func@Pango.default_break].
+
+If @offset is not -1, it is used to apply attributes
+from @analysis that are relevant to line breaking.
+
+Note that it is better to pass -1 for @offset and
+use [func@Pango.attr_break] to apply attributes to
+the whole paragraph.
+
+Since: 1.44
+
+</description>
+<parameters>
+<parameter name="text">
+<parameter_description> text to process. Must be valid UTF-8
+</parameter_description>
+</parameter>
+<parameter name="length">
+<parameter_description> length in bytes of @text
+</parameter_description>
+</parameter>
+<parameter name="analysis">
+<parameter_description> `PangoAnalysis` for @text
+</parameter_description>
+</parameter>
+<parameter name="offset">
+<parameter_description> Byte offset of @text from the beginning of the
+paragraph, or -1 to ignore attributes from @analysis
+</parameter_description>
+</parameter>
+<parameter name="attrs">
+<parameter_description> array with one `PangoLogAttr`
+per character in @text, plus one extra, to be filled in
+</parameter_description>
+</parameter>
+<parameter name="attrs_len">
+<parameter_description> length of @attrs array
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_trim_string">
+<description>
+Trims leading and trailing whitespace from a string.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="str">
+<parameter_description> a string
+</parameter_description>
+</parameter>
+</parameters>
+<return> A newly-allocated string that must be freed with g_free()
+
+</return>
+</function>
+
+<function name="pango_unichar_direction">
+<description>
+Determines the inherent direction of a character.
+
+The inherent direction is 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,
+[func@Pango.BidiType.for_unichar] can be used instead.
+
+
+</description>
+<parameters>
+<parameter name="ch">
+<parameter_description> a Unicode character
+</parameter_description>
+</parameter>
+</parameters>
+<return> the direction of the character.
+</return>
+</function>
+
+<function name="pango_units_from_double">
+<description>
+Converts a floating-point number to Pango units.
+
+The conversion is done by multiplying @d by %PANGO_SCALE and
+rounding the result to nearest integer.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="d">
+<parameter_description> double floating-point value
+</parameter_description>
+</parameter>
+</parameters>
+<return> the value in Pango units.
+
+</return>
+</function>
+
+<function name="pango_units_to_double">
+<description>
+Converts a number in Pango units to floating-point.
+
+The conversion is done by dividing @i by %PANGO_SCALE.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="i">
+<parameter_description> value in Pango units
+</parameter_description>
+</parameter>
+</parameters>
+<return> the double value.
+
+</return>
+</function>
+
+<function name="pango_version">
+<description>
+Returns the encoded version of Pango available at run-time.
+
+This is similar to the macro %PANGO_VERSION except that the macro
+returns the encoded version available at compile-time. A version
+number can be encoded into an integer using PANGO_VERSION_ENCODE().
+
+Since: 1.16
+
+</description>
+<parameters>
+</parameters>
+<return> The encoded version of Pango library available at run time.
+
+</return>
+</function>
+
+<function name="pango_version_check">
+<description>
+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().
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="required_major">
+<parameter_description> the required major version
+</parameter_description>
+</parameter>
+<parameter name="required_minor">
+<parameter_description> the required minor version
+</parameter_description>
+</parameter>
+<parameter name="required_micro">
+<parameter_description> the required major version
+</parameter_description>
+</parameter>
+</parameters>
+<return> %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.
+
+</return>
+</function>
+
+<function name="pango_version_string">
+<description>
+Returns the version of Pango available at run-time.
+
+This is similar to the macro %PANGO_VERSION_STRING except that the
+macro returns the version available at compile-time.
+
+Since: 1.16
+
+</description>
+<parameters>
+</parameters>
+<return> 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.
+
+</return>
+</function>
+
+<function name="pango_win32_font_cache_free">
+<description>
+Frees a `PangoWin32FontCache` and all associated memory.
+
+All fonts loaded through this font cache will be freed
+along with the cache.
+
+</description>
+<parameters>
+<parameter name="cache">
+<parameter_description> a `PangoWin32FontCache`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_win32_font_cache_load">
+<description>
+Creates a HFONT from a LOGFONTA. The
+result may be newly loaded, or it may have been previously
+stored
+
+
+</description>
+<parameters>
+<parameter name="cache">
+<parameter_description> a `PangoWin32FontCache`
+</parameter_description>
+</parameter>
+<parameter name="logfont">
+<parameter_description> a pointer to a LOGFONTA structure describing the font to load.
+</parameter_description>
+</parameter>
+</parameters>
+<return> The font structure, or %NULL if the font
+could not be loaded. In order to free this structure, you must call
+[method@Pango.Win32FontCache.unload].
+</return>
+</function>
+
+<function name="pango_win32_font_cache_loadw">
+<description>
+Creates a HFONT from a LOGFONTW. The
+result may be newly loaded, or it may have been previously
+stored
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="cache">
+<parameter_description> a `PangoWin32FontCache`
+</parameter_description>
+</parameter>
+<parameter name="logfont">
+<parameter_description> a pointer to a LOGFONTW structure describing the font to load.
+</parameter_description>
+</parameter>
+</parameters>
+<return> The font structure, or %NULL if the font
+could not be loaded. In order to free this structure, you must call
+[method@Pango.Win32FontCache.unload].
+
+</return>
+</function>
+
+<function name="pango_win32_font_cache_new">
+<description>
+Creates a font cache.
+
+
+</description>
+<parameters>
+</parameters>
+<return> The new font cache. This must be freed with
+pango_win32_font_cache_free().
+</return>
+</function>
+
+<function name="pango_win32_font_cache_unload">
+<description>
+Frees a font structure previously loaded with
+[method@Pango.Win32FontCache.load].
+
+</description>
+<parameters>
+<parameter name="cache">
+<parameter_description> a `PangoWin32FontCache`
+</parameter_description>
+</parameter>
+<parameter name="hfont">
+<parameter_description> the HFONT to unload
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_win32_font_description_from_logfont">
+<description>
+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.
+
+Since: 1.12
+
+</description>
+<parameters>
+<parameter name="lfp">
+<parameter_description> a LOGFONTA
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoFontDescription`, which
+should be freed using [method@Pango.FontDescription.free]
+
+</return>
+</function>
+
+<function name="pango_win32_font_description_from_logfontw">
+<description>
+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.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="lfp">
+<parameter_description> a LOGFONTW
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly allocated `PangoFontDescription`, which
+should be freed using [method@Pango.FontDescription.free]
+
+</return>
+</function>
+
+<function name="pango_win32_font_done_font">
+<description>
+Releases any resources allocated by [method@Pango.Win32Font.select_font].
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont` from the win32 backend
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_win32_font_get_glyph_index">
+<description>
+Obtains the index of the glyph for @wc in @font, or 0, if not
+covered.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> a Unicode character
+</parameter_description>
+</parameter>
+</parameters>
+<return> the glyph index for @wc.
+</return>
+</function>
+
+<function name="pango_win32_font_get_metrics_factor">
+<description>
+Returns the scale factor from logical units in the coordinate
+space used by [method@Pango.Win32Font.select_font] to Pango
+units in user space.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont` from the win32 backend
+</parameter_description>
+</parameter>
+</parameters>
+<return> factor to multiply logical units by to get Pango
+units.
+</return>
+</function>
+
+<function name="pango_win32_font_logfont">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont` which must be from the Win32 backend
+</parameter_description>
+</parameter>
+</parameters>
+<return> A newly allocated LOGFONTA struct. It must be
+freed with g_free().
+</return>
+</function>
+
+<function name="pango_win32_font_logfontw">
+<description>
+Determine the LOGFONTW struct for the specified font.
+
+Since: 1.16
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont` which must be from the Win32 backend
+</parameter_description>
+</parameter>
+</parameters>
+<return> A newly allocated LOGFONTW struct. It must be
+freed with g_free().
+
+</return>
+</function>
+
+<function name="pango_win32_font_map_for_display">
+<description>
+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 [func@Pango.win32_shutdown_display].
+
+
+</description>
+<parameters>
+</parameters>
+<return> a `PangoFontMap`
+</return>
+</function>
+
+<function name="pango_win32_font_map_get_font_cache">
+<description>
+Obtains the font cache associated with the given font map.
+
+
+</description>
+<parameters>
+<parameter name="font_map">
+<parameter_description> a `PangoWin32FontMap`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `PangoWin32FontCache` of @font_map.
+</return>
+</function>
+
+<function name="pango_win32_font_select_font">
+<description>
+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 [method@Pango.Win32Font.done_font[ when
+you are done using the DC to release allocated resources.
+
+See [method@Pango.Win32Font.get_metrics_factor] for information about
+converting from the coordinate space used by this function
+into Pango units.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont` from the Win32 backend
+</parameter_description>
+</parameter>
+<parameter name="hdc">
+<parameter_description> a windows device context
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if the operation succeeded.
+</return>
+</function>
+
+<function name="pango_win32_get_context">
+<description>
+Retrieves a `PangoContext` appropriate for rendering with Windows fonts.
+
+Deprecated: 1.22: Use [func@Pango.Win32FontMap.for_display] followed by
+[method@Pango.FontMap.create_context] instead.
+
+</description>
+<parameters>
+</parameters>
+<return> the new `PangoContext`
+
+</return>
+</function>
+
+<function name="pango_win32_get_dc">
+<description>
+Obtains a handle to the Windows device context that is used by Pango.
+
+
+</description>
+<parameters>
+</parameters>
+<return> A handle to the Windows device context that is used by Pango.
+</return>
+</function>
+
+<function name="pango_win32_get_debug_flag">
+<description>
+Returns whether debugging is turned on.
+
+Since: 1.2
+
+</description>
+<parameters>
+</parameters>
+<return> %TRUE if debugging is turned on.
+
+</return>
+</function>
+
+<function name="pango_win32_get_unknown_glyph">
+<description>
+Returns the index of a glyph suitable for drawing @wc as an
+unknown character.
+
+Use PANGO_GET_UNKNOWN_GLYPH() instead.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> the Unicode character for which a glyph is needed
+</parameter_description>
+</parameter>
+</parameters>
+<return> a glyph index into @font
+</return>
+</function>
+
+<function name="pango_win32_render">
+<description>
+Render a `PangoGlyphString` onto a Windows DC
+
+</description>
+<parameters>
+<parameter name="hdc">
+<parameter_description>     the device context
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description>    the font in which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description>  the glyph string to draw
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description>       the x position of start of string (in pixels)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description>       the y position of baseline (in pixels)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_win32_render_layout">
+<description>
+Render a `PangoLayoutLine` onto an HDC.
+
+</description>
+<parameters>
+<parameter name="hdc">
+<parameter_description> HDC to use for drawing
+</parameter_description>
+</parameter>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the X position of the left of the layout (in pixels)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the Y position of the top of the layout (in pixels)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_win32_render_layout_line">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="hdc">
+<parameter_description> DC to use for drawing
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of start of string (in pixels)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of baseline (in pixels)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_win32_render_transformed">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="hdc">
+<parameter_description> a windows device context
+</parameter_description>
+</parameter>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> the font in which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> the glyph string to draw
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of the start of the string (in Pango
+units in user space coordinates)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of the baseline (in Pango units
+in user space coordinates)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_win32_shutdown_display">
+<description>
+Free cached resources.
+
+</description>
+<parameters>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_font_get_display">
+<description>
+Returns the X display of the `XftFont` of a font.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the X display of the XftFont associated to @font.
+</return>
+</function>
+
+<function name="pango_xft_font_get_font">
+<description>
+Returns the `XftFont` of a font.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the `XftFont` associated to @font
+</return>
+</function>
+
+<function name="pango_xft_font_get_glyph">
+<description>
+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.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont` for the Xft backend
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> Unicode codepoint to look up
+</parameter_description>
+</parameter>
+</parameters>
+<return> the glyph index, or 0, if the Unicode
+character does not exist in the font.
+
+</return>
+</function>
+
+<function name="pango_xft_font_get_unknown_glyph">
+<description>
+Returns the index of a glyph suitable for drawing @wc as an
+unknown character.
+
+Use PANGO_GET_UNKNOWN_GLYPH() instead.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> the Unicode character for which a glyph is needed.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a glyph index into @font.
+</return>
+</function>
+
+<function name="pango_xft_font_has_char">
+<description>
+Determines whether @font has a glyph for the codepoint @wc.
+
+Use pango_fc_font_has_char() instead.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont` for the Xft backend
+</parameter_description>
+</parameter>
+<parameter name="wc">
+<parameter_description> Unicode codepoint to look up
+</parameter_description>
+</parameter>
+</parameters>
+<return> %TRUE if @font has the requested codepoint.
+
+</return>
+</function>
+
+<function name="pango_xft_font_lock_face">
+<description>
+Gets the FreeType `FT_Face` 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.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return> the FreeType `FT_Face` associated with @font.
+
+</return>
+</function>
+
+<function name="pango_xft_font_unlock_face">
+<description>
+Releases a font previously obtained with
+pango_xft_font_lock_face().
+
+Use pango_fc_font_unlock_face() instead.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a `PangoFont`
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_get_context">
+<description>
+Retrieves a `PangoContext` appropriate for rendering with
+Xft fonts on the given screen of the given display.
+
+Deprecated: 1.22: Use pango_xft_get_font_map() followed by
+pango_font_map_create_context() instead.
+
+</description>
+<parameters>
+<parameter name="display">
+<parameter_description> an X display.
+</parameter_description>
+</parameter>
+<parameter name="screen">
+<parameter_description> an X screen.
+</parameter_description>
+</parameter>
+</parameters>
+<return> the new `PangoContext`.
+
+</return>
+</function>
+
+<function name="pango_xft_get_font_map">
+<description>
+Returns the `PangoXftFontMap` for the given display and screen.
+The fontmap is owned by Pango and will be valid until
+the display is closed.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="display">
+<parameter_description> an X display
+</parameter_description>
+</parameter>
+<parameter name="screen">
+<parameter_description> the screen number of a screen within @display
+</parameter_description>
+</parameter>
+</parameters>
+<return> a `PangoFontMap` object, owned by Pango.
+
+</return>
+</function>
+
+<function name="pango_xft_picture_render">
+<description>
+Renders a `PangoGlyphString` onto an Xrender Picture object.
+
+</description>
+<parameters>
+<parameter name="display">
+<parameter_description> an X display
+</parameter_description>
+</parameter>
+<parameter name="src_picture">
+<parameter_description> the source picture to draw the string with
+</parameter_description>
+</parameter>
+<parameter name="dest_picture">
+<parameter_description> the destination picture to draw the string onto
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> the font in which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> the glyph string to draw
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of start of string (in pixels)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of baseline (in pixels)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_render">
+<description>
+Renders a `PangoGlyphString` onto an XftDraw object wrapping an X drawable.
+
+</description>
+<parameters>
+<parameter name="draw">
+<parameter_description> the XftDraw object.
+</parameter_description>
+</parameter>
+<parameter name="color">
+<parameter_description> the color in which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> the font in which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> the glyph string to draw
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of start of string (in pixels)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of baseline (in pixels)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_render_layout">
+<description>
+Render a `PangoLayout` onto a XftDraw
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="draw">
+<parameter_description> an XftDraw
+</parameter_description>
+</parameter>
+<parameter name="color">
+<parameter_description> the foreground color in which to draw the layout
+(may be overridden by color attributes)
+</parameter_description>
+</parameter>
+<parameter name="layout">
+<parameter_description> a `PangoLayout`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the X position of the left of the layout (in Pango units)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the Y position of the top of the layout (in Pango units)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_render_layout_line">
+<description>
+Render a `PangoLayoutLine` onto a XftDraw
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="draw">
+<parameter_description> an XftDraw
+</parameter_description>
+</parameter>
+<parameter name="color">
+<parameter_description> the foreground color in which to draw the layout line
+(may be overridden by color attributes)
+</parameter_description>
+</parameter>
+<parameter name="line">
+<parameter_description> a `PangoLayoutLine`
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of start of string (in Pango units)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of baseline (in Pango units)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_render_transformed">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="draw">
+<parameter_description> an XftDraw
+</parameter_description>
+</parameter>
+<parameter name="color">
+<parameter_description> the color in which to draw the glyphs
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description> the font in which to draw the string
+</parameter_description>
+</parameter>
+<parameter name="matrix">
+<parameter_description> a `PangoMatrix`
+</parameter_description>
+</parameter>
+<parameter name="glyphs">
+<parameter_description> the glyph string to draw
+</parameter_description>
+</parameter>
+<parameter name="x">
+<parameter_description> the x position of the start of the string (in Pango
+units in user space coordinates)
+</parameter_description>
+</parameter>
+<parameter name="y">
+<parameter_description> the y position of the baseline (in Pango units
+in user space coordinates)
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_renderer_new">
+<description>
+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.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="display">
+<parameter_description> an X display
+</parameter_description>
+</parameter>
+<parameter name="screen">
+<parameter_description> the index of the screen for @display to which rendering will be done
+</parameter_description>
+</parameter>
+</parameters>
+<return> the newly created `PangoXftRenderer`
+
+</return>
+</function>
+
+<function name="pango_xft_renderer_set_default_color">
+<description>
+Sets the default foreground color for a XftRenderer.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="xftrenderer">
+<parameter_description> a XftRenderer
+</parameter_description>
+</parameter>
+<parameter name="default_color">
+<parameter_description> the default foreground color
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_renderer_set_draw">
+<description>
+Sets the XftDraw object that the renderer is drawing to.
+The renderer must not be currently active.
+
+Since: 1.8
+
+</description>
+<parameters>
+<parameter name="xftrenderer">
+<parameter_description> a `PangoXftRenderer`
+</parameter_description>
+</parameter>
+<parameter name="draw">
+<parameter_description> a XftDraw
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_set_default_substitute">
+<description>
+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.
+
+Deprecated: 1.46: Use pango_fc_font_map_set_default_substitute()
+instead.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="display">
+<parameter_description> an X Display
+</parameter_description>
+</parameter>
+<parameter name="screen">
+<parameter_description> the screen number of a screen within @display
+</parameter_description>
+</parameter>
+<parameter name="func">
+<parameter_description> function to call to to do final config tweaking
+on #FcPattern objects.
+</parameter_description>
+</parameter>
+<parameter name="data">
+<parameter_description> data to pass to @func
+</parameter_description>
+</parameter>
+<parameter name="notify">
+<parameter_description> function to call when @data is no longer used.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_shutdown_display">
+<description>
+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
+
+</description>
+<parameters>
+<parameter name="display">
+<parameter_description> an X display
+</parameter_description>
+</parameter>
+<parameter name="screen">
+<parameter_description> the screen number of a screen within @display
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_xft_substitute_changed">
+<description>
+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.
+
+Deprecated: 1.46: Use pango_fc_font_map_substitute_changed()
+instead.
+
+Since: 1.2
+
+</description>
+<parameters>
+<parameter name="display">
+<parameter_description> an X Display
+</parameter_description>
+</parameter>
+<parameter name="screen">
+<parameter_description> the screen number of a screen within @display
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="script_engine_create">
+<description>
+Do not use.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="id">
+<parameter_description> the ID of an engine as reported by script_engine_list.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="script_engine_exit">
+<description>
+Do not use.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+</parameters>
+<return></return>
+</function>
+
+<function name="script_engine_init">
+<description>
+Do not use.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="module">
+<parameter_description> a `GTypeModule` structure used to associate any
+GObject types created in this module with the module.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="script_engine_list">
+<description>
+Do not use.
+
+Deprecated: 1.38
+
+</description>
+<parameters>
+<parameter name="engines">
+<parameter_description> location to store a pointer to an array of engines.
+</parameter_description>
+</parameter>
+<parameter name="n_engines">
+<parameter_description> location to store the number of elements in @engines.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+</root>
diff --git a/pango/src/pango_docs_override.xml b/pango/src/pango_docs_override.xml
new file mode 100644 (file)
index 0000000..2b0e006
--- /dev/null
@@ -0,0 +1,388 @@
+<root>
+<substitute_enumerator_name from_prefix="PANGO_UNDERLINE_" to_prefix="Pango::Underline::" />
+<substitute_enumerator_name from_prefix="PANGO_DIRECTION_" to_prefix="Pango::Direction::" />
+<substitute_enumerator_name from_prefix="PANGO_GRAVITY_" to_prefix="Pango::Gravity::" />
+<substitute_enumerator_name from_prefix="PANGO_GRAVITY_HINT_" to_prefix="Pango::GravityHint::" />
+<substitute_enumerator_name from_prefix="PANGO_STYLE_" to_prefix="Pango::Style::" />
+<substitute_enumerator_name from_prefix="PANGO_VARIANT_" to_prefix="Pango::Variant::" />
+<substitute_enumerator_name from_prefix="PANGO_ELLIPSIZE_" to_prefix="Pango::EllipsizeMode::" />
+<substitute_enumerator_name from_prefix="PANGO_ALIGN_" to_prefix="Pango::Alignment::" />
+<substitute_enumerator_name from_prefix="PANGO_ATTR_" to_prefix="Pango::AttrType::" />
+<substitute_enumerator_name from_prefix="PANGO_TAB_" to_prefix="Pango::TabAlign::" />
+<substitute_enumerator_name from_prefix="PANGO_COVERAGE_" to_prefix="Pango::Coverage::Level::" />
+<substitute_enumerator_name from_prefix="PANGO_WRAP_" to_prefix="Pango::WrapMode::" />
+<!-- These are preprocessor defines. Don't substitute. -->
+<substitute_enumerator_name from="G_MAXINT" to="G_MAXINT" />
+<!-- This is the default substitution. Included here to avoid warnings from DocsParser.pm. -->
+<substitute_enumerator_name from="PANGO_SCALE" to="Pango::SCALE" />
+
+
+<function name="pango_font_face_describe">
+<description>
+Returns the family, style, variant, weight and stretch of
+a #PangoFontFace. The size field of the resulting font description
+will be unset.
+
+
+</description>
+<parameters>
+<parameter name="face">
+<parameter_description> a #PangoFontFace
+</parameter_description>
+</parameter>
+</parameters>
+<return> a  #PangoFontDescription 
+holding the description of the face.
+</return>
+</function>
+
+
+<function name="pango_layout_get_tabs">
+<description>
+Get the current #PangoTabArray used by this layout. If no
+#PangoTabArray has been set, then the default tabs are in use
+and an invalid instance is returned. Default tabs are every 8 spaces.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a #PangoLayout
+</parameter_description>
+</parameter>
+</parameters>
+<return> a copy of the tabs for this layout.
+</return>
+</function>
+
+<function name="pango_context_get_metrics">
+<description>
+Get overall metric information for a font 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.
+
+
+</description>
+<parameters>
+<parameter name="context">
+<parameter_description> a #PangoContext
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> a #PangoFontDescription structure
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> language tag used to determine which script to get the metrics
+for.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a #PangoMetrics object.
+</return>
+</function>
+
+<function name="pango_font_get_glyph_extents">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a #PangoFont
+</parameter_description>
+</parameter>
+<parameter name="glyph">
+<parameter_description> the glyph index
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the glyph as drawn.
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the glyph.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_glyph_string_extents_range">
+<description>
+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).
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description>   a #PangoGlyphString
+</parameter_description>
+</parameter>
+<parameter name="start">
+<parameter_description>    start index
+</parameter_description>
+</parameter>
+<parameter name="end">
+<parameter_description>      end index (the range is the set of bytes with
+              indices such that start &amp;lt;= index &amp;lt; end)
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description>     a #PangoFont
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the glyph string range as drawn.
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the glyph string range.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_extents">
+<description>
+Compute the logical and ink extents of @layout. Logical extents
+are usually what you want for positioning things. The extents
+are given in layout coordinates; layout coordinates begin at the
+top left corner of the layout.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description>   a #PangoLayout
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the layout as drawn.
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the layout.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_get_pixel_extents">
+<description>
+Compute the logical and ink extents of @layout in device units.
+See pango_layout_get_extents(); this function just calls
+pango_layout_get_extents() and then converts the extents to
+pixels using the #PANGO_SCALE factor.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description>   a #PangoLayout
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the layout as drawn.
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the
+layout.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_set_font_description">
+<description>
+Set the default font description for the layout. If no font
+description is set on the layout, the font description from
+the layout&apos;s context is used.
+
+</description>
+<parameters>
+<parameter name="layout">
+<parameter_description> a #PangoLayout
+</parameter_description>
+</parameter>
+<parameter name="desc">
+<parameter_description> the new pango font description.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_line_get_extents">
+<description>
+Compute the logical and ink extents of a layout line. See the documentation
+for pango_font_get_glyph_extents() for details about the interpretation
+of the rectangles.
+
+</description>
+<parameters>
+<parameter name="line">
+<parameter_description>     a #PangoLayoutLine
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the glyph string as drawn.
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the glyph string.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_layout_line_get_pixel_extents">
+<description>
+Compute the logical and ink extents of a layout line. See the documentation
+for pango_font_get_glyph_extents() for details about the interpretation
+of the rectangles. The returned rectangles are in device units, as
+opposed to pango_layout_line_get_extents(), which returns the extents in
+units of device unit / PANGO_SCALE.
+
+</description>
+<parameters>
+<parameter name="layout_line">
+<parameter_description> a #PangoLayoutLine
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description>    rectangle used to store the extents of the glyph string as drawn.
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the glyph string.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_get_metrics">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="font">
+<parameter_description> a #PangoFont
+</parameter_description>
+</parameter>
+<parameter name="language">
+<parameter_description> language tag used to determine which script to get the metrics
+for.
+</parameter_description>
+</parameter>
+</parameters>
+<return> a #PangoMetrics object.
+</return>
+</function>
+
+<function name="pango_glyph_string_extents">
+<description>
+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.
+
+</description>
+<parameters>
+<parameter name="glyphs">
+<parameter_description>   a #PangoGlyphString
+</parameter_description>
+</parameter>
+<parameter name="font">
+<parameter_description>     a #PangoFont
+</parameter_description>
+</parameter>
+<parameter name="ink_rect">
+<parameter_description> rectangle used to store the extents of the glyph string as drawn.
+</parameter_description>
+</parameter>
+<parameter name="logical_rect">
+<parameter_description> rectangle used to store the logical extents of the glyph string.
+</parameter_description>
+</parameter>
+</parameters>
+<return></return>
+</function>
+
+<function name="pango_font_description_to_string">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a #PangoFontDescription
+</parameter_description>
+</parameter>
+</parameters>
+<return> The string.
+</return>
+</function>
+
+<function name="pango_font_description_to_filename">
+<description>
+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.
+
+
+</description>
+<parameters>
+<parameter name="desc">
+<parameter_description> a #PangoFontDescription
+</parameter_description>
+</parameter>
+</parameters>
+<return> The filename.
+</return>
+</function>
+
+<function name="pango_color_parse">
+<description>
+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 &amp;lt;filename&amp;gt;rgb.txt&amp;lt;/filename&amp;gt; file), or it can be a hex value in the
+form &apos;#rgb&apos; &apos;#rrggbb&apos; &apos;#rrrgggbbb&apos; or &apos;#rrrrggggbbbb&apos; where
+&apos;r&apos;, &apos;g&apos; and &apos;b&apos; are hex digits of the red, green, and blue
+components of the color, respectively. (White in the four
+forms is &apos;#fff&apos; &apos;#ffffff&apos; &apos;#fffffffff&apos; and &apos;#ffffffffffff&apos;)
+</description>
+</function>
+
+</root>
+
diff --git a/pango/src/pango_enums.defs b/pango/src/pango_enums.defs
new file mode 100644 (file)
index 0000000..4a5cd58
--- /dev/null
@@ -0,0 +1,945 @@
+;; From pango-attributes.h
+
+;; Original typedef:
+;; 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 */
+;;   PANGO_ATTR_FONT_FEATURES,     /* PangoAttrFontFeatures */
+;;   PANGO_ATTR_FOREGROUND_ALPHA,  /* PangoAttrInt */
+;;   PANGO_ATTR_BACKGROUND_ALPHA,  /* PangoAttrInt */
+;;   PANGO_ATTR_ALLOW_BREAKS,      /* PangoAttrInt */
+;;   PANGO_ATTR_SHOW,              /* PangoAttrInt */
+;;   PANGO_ATTR_INSERT_HYPHENS,    /* PangoAttrInt */
+;;   PANGO_ATTR_OVERLINE,          /* PangoAttrInt */
+;;   PANGO_ATTR_OVERLINE_COLOR,    /* PangoAttrColor */
+;;   PANGO_ATTR_LINE_HEIGHT,       /* PangoAttrFloat */
+;;   PANGO_ATTR_ABSOLUTE_LINE_HEIGHT, /* PangoAttrInt */
+;;   PANGO_ATTR_TEXT_TRANSFORM,    /* PangoAttrInt */
+;;   PANGO_ATTR_WORD,              /* PangoAttrInt */
+;;   PANGO_ATTR_SENTENCE,          /* PangoAttrInt */
+;;   PANGO_ATTR_BASELINE_SHIFT,    /* PangoAttrSize */
+;;   PANGO_ATTR_FONT_SCALE,        /* PangoAttrInt */
+;; } PangoAttrType;
+
+(define-enum-extended AttrType
+  (in-module "Pango")
+  (c-name "PangoAttrType")
+  (values
+    '("invalid" "PANGO_ATTR_INVALID" "0")
+    '("language" "PANGO_ATTR_LANGUAGE" "1")
+    '("family" "PANGO_ATTR_FAMILY" "2")
+    '("style" "PANGO_ATTR_STYLE" "3")
+    '("weight" "PANGO_ATTR_WEIGHT" "4")
+    '("variant" "PANGO_ATTR_VARIANT" "5")
+    '("stretch" "PANGO_ATTR_STRETCH" "6")
+    '("size" "PANGO_ATTR_SIZE" "7")
+    '("font-desc" "PANGO_ATTR_FONT_DESC" "8")
+    '("foreground" "PANGO_ATTR_FOREGROUND" "9")
+    '("background" "PANGO_ATTR_BACKGROUND" "10")
+    '("underline" "PANGO_ATTR_UNDERLINE" "11")
+    '("strikethrough" "PANGO_ATTR_STRIKETHROUGH" "12")
+    '("rise" "PANGO_ATTR_RISE" "13")
+    '("shape" "PANGO_ATTR_SHAPE" "14")
+    '("scale" "PANGO_ATTR_SCALE" "15")
+    '("fallback" "PANGO_ATTR_FALLBACK" "16")
+    '("letter-spacing" "PANGO_ATTR_LETTER_SPACING" "17")
+    '("underline-color" "PANGO_ATTR_UNDERLINE_COLOR" "18")
+    '("strikethrough-color" "PANGO_ATTR_STRIKETHROUGH_COLOR" "19")
+    '("absolute-size" "PANGO_ATTR_ABSOLUTE_SIZE" "20")
+    '("gravity" "PANGO_ATTR_GRAVITY" "21")
+    '("gravity-hint" "PANGO_ATTR_GRAVITY_HINT" "22")
+    '("font-features" "PANGO_ATTR_FONT_FEATURES" "23")
+    '("foreground-alpha" "PANGO_ATTR_FOREGROUND_ALPHA" "24")
+    '("background-alpha" "PANGO_ATTR_BACKGROUND_ALPHA" "25")
+    '("allow-breaks" "PANGO_ATTR_ALLOW_BREAKS" "26")
+    '("show" "PANGO_ATTR_SHOW" "27")
+    '("insert-hyphens" "PANGO_ATTR_INSERT_HYPHENS" "28")
+    '("overline" "PANGO_ATTR_OVERLINE" "29")
+    '("overline-color" "PANGO_ATTR_OVERLINE_COLOR" "30")
+    '("line-height" "PANGO_ATTR_LINE_HEIGHT" "31")
+    '("absolute-line-height" "PANGO_ATTR_ABSOLUTE_LINE_HEIGHT" "32")
+    '("text-transform" "PANGO_ATTR_TEXT_TRANSFORM" "33")
+    '("word" "PANGO_ATTR_WORD" "34")
+    '("sentence" "PANGO_ATTR_SENTENCE" "35")
+    '("baseline-shift" "PANGO_ATTR_BASELINE_SHIFT" "36")
+    '("font-scale" "PANGO_ATTR_FONT_SCALE" "37")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_UNDERLINE_NONE,
+;;   PANGO_UNDERLINE_SINGLE,
+;;   PANGO_UNDERLINE_DOUBLE,
+;;   PANGO_UNDERLINE_LOW,
+;;   PANGO_UNDERLINE_ERROR,
+;;   PANGO_UNDERLINE_SINGLE_LINE,
+;;   PANGO_UNDERLINE_DOUBLE_LINE,
+;;   PANGO_UNDERLINE_ERROR_LINE
+;; } PangoUnderline;
+
+(define-enum-extended Underline
+  (in-module "Pango")
+  (c-name "PangoUnderline")
+  (values
+    '("none" "PANGO_UNDERLINE_NONE" "0")
+    '("single" "PANGO_UNDERLINE_SINGLE" "1")
+    '("double" "PANGO_UNDERLINE_DOUBLE" "2")
+    '("low" "PANGO_UNDERLINE_LOW" "3")
+    '("error" "PANGO_UNDERLINE_ERROR" "4")
+    '("single-line" "PANGO_UNDERLINE_SINGLE_LINE" "5")
+    '("double-line" "PANGO_UNDERLINE_DOUBLE_LINE" "6")
+    '("error-line" "PANGO_UNDERLINE_ERROR_LINE" "7")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_OVERLINE_NONE,
+;;   PANGO_OVERLINE_SINGLE
+;; } PangoOverline;
+
+(define-enum-extended Overline
+  (in-module "Pango")
+  (c-name "PangoOverline")
+  (values
+    '("none" "PANGO_OVERLINE_NONE" "0")
+    '("single" "PANGO_OVERLINE_SINGLE" "1")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_SHOW_NONE        = 0,
+;;   PANGO_SHOW_SPACES      = 1 << 0,
+;;   PANGO_SHOW_LINE_BREAKS = 1 << 1,
+;;   PANGO_SHOW_IGNORABLES  = 1 << 2
+;; } PangoShowFlags;
+
+(define-flags-extended ShowFlags
+  (in-module "Pango")
+  (c-name "PangoShowFlags")
+  (values
+    '("none" "PANGO_SHOW_NONE" "0x0")
+    '("spaces" "PANGO_SHOW_SPACES" "1 << 0")
+    '("line-breaks" "PANGO_SHOW_LINE_BREAKS" "1 << 1")
+    '("ignorables" "PANGO_SHOW_IGNORABLES" "1 << 2")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_TEXT_TRANSFORM_NONE,
+;;   PANGO_TEXT_TRANSFORM_LOWERCASE,
+;;   PANGO_TEXT_TRANSFORM_UPPERCASE,
+;;   PANGO_TEXT_TRANSFORM_CAPITALIZE,
+;; } PangoTextTransform;
+
+(define-enum-extended TextTransform
+  (in-module "Pango")
+  (c-name "PangoTextTransform")
+  (values
+    '("none" "PANGO_TEXT_TRANSFORM_NONE" "0")
+    '("lowercase" "PANGO_TEXT_TRANSFORM_LOWERCASE" "1")
+    '("uppercase" "PANGO_TEXT_TRANSFORM_UPPERCASE" "2")
+    '("capitalize" "PANGO_TEXT_TRANSFORM_CAPITALIZE" "3")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_BASELINE_SHIFT_NONE,
+;;   PANGO_BASELINE_SHIFT_SUPERSCRIPT,
+;;   PANGO_BASELINE_SHIFT_SUBSCRIPT,
+;; } PangoBaselineShift;
+
+(define-enum-extended BaselineShift
+  (in-module "Pango")
+  (c-name "PangoBaselineShift")
+  (values
+    '("none" "PANGO_BASELINE_SHIFT_NONE" "0")
+    '("superscript" "PANGO_BASELINE_SHIFT_SUPERSCRIPT" "1")
+    '("subscript" "PANGO_BASELINE_SHIFT_SUBSCRIPT" "2")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_FONT_SCALE_NONE,
+;;   PANGO_FONT_SCALE_SUPERSCRIPT,
+;;   PANGO_FONT_SCALE_SUBSCRIPT,
+;;   PANGO_FONT_SCALE_SMALL_CAPS,
+;; } PangoFontScale;
+
+(define-enum-extended FontScale
+  (in-module "Pango")
+  (c-name "PangoFontScale")
+  (values
+    '("none" "PANGO_FONT_SCALE_NONE" "0")
+    '("superscript" "PANGO_FONT_SCALE_SUPERSCRIPT" "1")
+    '("subscript" "PANGO_FONT_SCALE_SUBSCRIPT" "2")
+    '("small-caps" "PANGO_FONT_SCALE_SMALL_CAPS" "3")
+  )
+)
+
+;; From pango-bidi-type.h
+
+;; Original typedef:
+;; 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,
+;; 
+;;   /* Explicit formatting */
+;;   PANGO_BIDI_TYPE_LRI,
+;;   PANGO_BIDI_TYPE_RLI,
+;;   PANGO_BIDI_TYPE_FSI,
+;;   PANGO_BIDI_TYPE_PDI
+;; } PangoBidiType;
+
+(define-enum-extended BidiType
+  (in-module "Pango")
+  (c-name "PangoBidiType")
+  (values
+    '("l" "PANGO_BIDI_TYPE_L" "0")
+    '("lre" "PANGO_BIDI_TYPE_LRE" "1")
+    '("lro" "PANGO_BIDI_TYPE_LRO" "2")
+    '("r" "PANGO_BIDI_TYPE_R" "3")
+    '("al" "PANGO_BIDI_TYPE_AL" "4")
+    '("rle" "PANGO_BIDI_TYPE_RLE" "5")
+    '("rlo" "PANGO_BIDI_TYPE_RLO" "6")
+    '("pdf" "PANGO_BIDI_TYPE_PDF" "7")
+    '("en" "PANGO_BIDI_TYPE_EN" "8")
+    '("es" "PANGO_BIDI_TYPE_ES" "9")
+    '("et" "PANGO_BIDI_TYPE_ET" "10")
+    '("an" "PANGO_BIDI_TYPE_AN" "11")
+    '("cs" "PANGO_BIDI_TYPE_CS" "12")
+    '("nsm" "PANGO_BIDI_TYPE_NSM" "13")
+    '("bn" "PANGO_BIDI_TYPE_BN" "14")
+    '("b" "PANGO_BIDI_TYPE_B" "15")
+    '("s" "PANGO_BIDI_TYPE_S" "16")
+    '("ws" "PANGO_BIDI_TYPE_WS" "17")
+    '("on" "PANGO_BIDI_TYPE_ON" "18")
+    '("lri" "PANGO_BIDI_TYPE_LRI" "19")
+    '("rli" "PANGO_BIDI_TYPE_RLI" "20")
+    '("fsi" "PANGO_BIDI_TYPE_FSI" "21")
+    '("pdi" "PANGO_BIDI_TYPE_PDI" "22")
+  )
+)
+
+;; From pango-coverage.h
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_COVERAGE_NONE,
+;;   PANGO_COVERAGE_FALLBACK,
+;;   PANGO_COVERAGE_APPROXIMATE,
+;;   PANGO_COVERAGE_EXACT
+;; } PangoCoverageLevel;
+
+(define-enum-extended CoverageLevel
+  (in-module "Pango")
+  (c-name "PangoCoverageLevel")
+  (values
+    '("none" "PANGO_COVERAGE_NONE" "0")
+    '("fallback" "PANGO_COVERAGE_FALLBACK" "1")
+    '("approximate" "PANGO_COVERAGE_APPROXIMATE" "2")
+    '("exact" "PANGO_COVERAGE_EXACT" "3")
+  )
+)
+
+;; From pango-direction.h
+
+;; Original typedef:
+;; 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;
+
+(define-enum-extended Direction
+  (in-module "Pango")
+  (c-name "PangoDirection")
+  (values
+    '("ltr" "PANGO_DIRECTION_LTR" "0")
+    '("rtl" "PANGO_DIRECTION_RTL" "1")
+    '("ttb-ltr" "PANGO_DIRECTION_TTB_LTR" "2")
+    '("ttb-rtl" "PANGO_DIRECTION_TTB_RTL" "3")
+    '("weak-ltr" "PANGO_DIRECTION_WEAK_LTR" "4")
+    '("weak-rtl" "PANGO_DIRECTION_WEAK_RTL" "5")
+    '("neutral" "PANGO_DIRECTION_NEUTRAL" "6")
+  )
+)
+
+;; From pango-font.h
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_STYLE_NORMAL,
+;;   PANGO_STYLE_OBLIQUE,
+;;   PANGO_STYLE_ITALIC
+;; } PangoStyle;
+
+(define-enum-extended Style
+  (in-module "Pango")
+  (c-name "PangoStyle")
+  (values
+    '("normal" "PANGO_STYLE_NORMAL" "0")
+    '("oblique" "PANGO_STYLE_OBLIQUE" "1")
+    '("italic" "PANGO_STYLE_ITALIC" "2")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_VARIANT_NORMAL,
+;;   PANGO_VARIANT_SMALL_CAPS,
+;;   PANGO_VARIANT_ALL_SMALL_CAPS,
+;;   PANGO_VARIANT_PETITE_CAPS,
+;;   PANGO_VARIANT_ALL_PETITE_CAPS,
+;;   PANGO_VARIANT_UNICASE,
+;;   PANGO_VARIANT_TITLE_CAPS
+;; } PangoVariant;
+
+(define-enum-extended Variant
+  (in-module "Pango")
+  (c-name "PangoVariant")
+  (values
+    '("normal" "PANGO_VARIANT_NORMAL" "0")
+    '("small-caps" "PANGO_VARIANT_SMALL_CAPS" "1")
+    '("all-small-caps" "PANGO_VARIANT_ALL_SMALL_CAPS" "2")
+    '("petite-caps" "PANGO_VARIANT_PETITE_CAPS" "3")
+    '("all-petite-caps" "PANGO_VARIANT_ALL_PETITE_CAPS" "4")
+    '("unicase" "PANGO_VARIANT_UNICASE" "5")
+    '("title-caps" "PANGO_VARIANT_TITLE_CAPS" "6")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_WEIGHT_THIN = 100,
+;;   PANGO_WEIGHT_ULTRALIGHT = 200,
+;;   PANGO_WEIGHT_LIGHT = 300,
+;;   PANGO_WEIGHT_SEMILIGHT = 350,
+;;   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;
+
+(define-enum-extended Weight
+  (in-module "Pango")
+  (c-name "PangoWeight")
+  (values
+    '("thin" "PANGO_WEIGHT_THIN" "100")
+    '("ultralight" "PANGO_WEIGHT_ULTRALIGHT" "200")
+    '("light" "PANGO_WEIGHT_LIGHT" "300")
+    '("semilight" "PANGO_WEIGHT_SEMILIGHT" "350")
+    '("book" "PANGO_WEIGHT_BOOK" "380")
+    '("normal" "PANGO_WEIGHT_NORMAL" "400")
+    '("medium" "PANGO_WEIGHT_MEDIUM" "500")
+    '("semibold" "PANGO_WEIGHT_SEMIBOLD" "600")
+    '("bold" "PANGO_WEIGHT_BOLD" "700")
+    '("ultrabold" "PANGO_WEIGHT_ULTRABOLD" "800")
+    '("heavy" "PANGO_WEIGHT_HEAVY" "900")
+    '("ultraheavy" "PANGO_WEIGHT_ULTRAHEAVY" "1000")
+  )
+)
+
+;; Original typedef:
+;; 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;
+
+(define-enum-extended Stretch
+  (in-module "Pango")
+  (c-name "PangoStretch")
+  (values
+    '("ultra-condensed" "PANGO_STRETCH_ULTRA_CONDENSED" "0")
+    '("extra-condensed" "PANGO_STRETCH_EXTRA_CONDENSED" "1")
+    '("condensed" "PANGO_STRETCH_CONDENSED" "2")
+    '("semi-condensed" "PANGO_STRETCH_SEMI_CONDENSED" "3")
+    '("normal" "PANGO_STRETCH_NORMAL" "4")
+    '("semi-expanded" "PANGO_STRETCH_SEMI_EXPANDED" "5")
+    '("expanded" "PANGO_STRETCH_EXPANDED" "6")
+    '("extra-expanded" "PANGO_STRETCH_EXTRA_EXPANDED" "7")
+    '("ultra-expanded" "PANGO_STRETCH_ULTRA_EXPANDED" "8")
+  )
+)
+
+;; Original typedef:
+;; 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,
+;;   PANGO_FONT_MASK_VARIATIONS = 1 << 7,
+;; } PangoFontMask;
+
+(define-flags-extended FontMask
+  (in-module "Pango")
+  (c-name "PangoFontMask")
+  (values
+    '("family" "PANGO_FONT_MASK_FAMILY" "1 << 0")
+    '("style" "PANGO_FONT_MASK_STYLE" "1 << 1")
+    '("variant" "PANGO_FONT_MASK_VARIANT" "1 << 2")
+    '("weight" "PANGO_FONT_MASK_WEIGHT" "1 << 3")
+    '("stretch" "PANGO_FONT_MASK_STRETCH" "1 << 4")
+    '("size" "PANGO_FONT_MASK_SIZE" "1 << 5")
+    '("gravity" "PANGO_FONT_MASK_GRAVITY" "1 << 6")
+    '("variations" "PANGO_FONT_MASK_VARIATIONS" "1 << 7")
+  )
+)
+
+;; From pango-glyph.h
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_SHAPE_NONE            = 0,
+;;   PANGO_SHAPE_ROUND_POSITIONS = 1 << 0,
+;; } PangoShapeFlags;
+
+(define-flags-extended ShapeFlags
+  (in-module "Pango")
+  (c-name "PangoShapeFlags")
+  (values
+    '("none" "PANGO_SHAPE_NONE" "0x0")
+    '("round-positions" "PANGO_SHAPE_ROUND_POSITIONS" "1 << 0")
+  )
+)
+
+;; From pango-gravity.h
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_GRAVITY_SOUTH,
+;;   PANGO_GRAVITY_EAST,
+;;   PANGO_GRAVITY_NORTH,
+;;   PANGO_GRAVITY_WEST,
+;;   PANGO_GRAVITY_AUTO
+;; } PangoGravity;
+
+(define-enum-extended Gravity
+  (in-module "Pango")
+  (c-name "PangoGravity")
+  (values
+    '("south" "PANGO_GRAVITY_SOUTH" "0")
+    '("east" "PANGO_GRAVITY_EAST" "1")
+    '("north" "PANGO_GRAVITY_NORTH" "2")
+    '("west" "PANGO_GRAVITY_WEST" "3")
+    '("auto" "PANGO_GRAVITY_AUTO" "4")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_GRAVITY_HINT_NATURAL,
+;;   PANGO_GRAVITY_HINT_STRONG,
+;;   PANGO_GRAVITY_HINT_LINE
+;; } PangoGravityHint;
+
+(define-enum-extended GravityHint
+  (in-module "Pango")
+  (c-name "PangoGravityHint")
+  (values
+    '("natural" "PANGO_GRAVITY_HINT_NATURAL" "0")
+    '("strong" "PANGO_GRAVITY_HINT_STRONG" "1")
+    '("line" "PANGO_GRAVITY_HINT_LINE" "2")
+  )
+)
+
+;; From pango-layout.h
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_ALIGN_LEFT,
+;;   PANGO_ALIGN_CENTER,
+;;   PANGO_ALIGN_RIGHT
+;; } PangoAlignment;
+
+(define-enum-extended Alignment
+  (in-module "Pango")
+  (c-name "PangoAlignment")
+  (values
+    '("left" "PANGO_ALIGN_LEFT" "0")
+    '("center" "PANGO_ALIGN_CENTER" "1")
+    '("right" "PANGO_ALIGN_RIGHT" "2")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_WRAP_WORD,
+;;   PANGO_WRAP_CHAR,
+;;   PANGO_WRAP_WORD_CHAR
+;; } PangoWrapMode;
+
+(define-enum-extended WrapMode
+  (in-module "Pango")
+  (c-name "PangoWrapMode")
+  (values
+    '("word" "PANGO_WRAP_WORD" "0")
+    '("char" "PANGO_WRAP_CHAR" "1")
+    '("word-char" "PANGO_WRAP_WORD_CHAR" "2")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_ELLIPSIZE_NONE,
+;;   PANGO_ELLIPSIZE_START,
+;;   PANGO_ELLIPSIZE_MIDDLE,
+;;   PANGO_ELLIPSIZE_END
+;; } PangoEllipsizeMode;
+
+(define-enum-extended EllipsizeMode
+  (in-module "Pango")
+  (c-name "PangoEllipsizeMode")
+  (values
+    '("none" "PANGO_ELLIPSIZE_NONE" "0")
+    '("start" "PANGO_ELLIPSIZE_START" "1")
+    '("middle" "PANGO_ELLIPSIZE_MIDDLE" "2")
+    '("end" "PANGO_ELLIPSIZE_END" "3")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_LAYOUT_SERIALIZE_DEFAULT = 0,
+;;   PANGO_LAYOUT_SERIALIZE_CONTEXT = 1 << 0,
+;;   PANGO_LAYOUT_SERIALIZE_OUTPUT = 1 << 1,
+;; } PangoLayoutSerializeFlags;
+
+(define-flags-extended LayoutSerializeFlags
+  (in-module "Pango")
+  (c-name "PangoLayoutSerializeFlags")
+  (values
+    '("default" "PANGO_LAYOUT_SERIALIZE_DEFAULT" "0x0")
+    '("context" "PANGO_LAYOUT_SERIALIZE_CONTEXT" "1 << 0")
+    '("output" "PANGO_LAYOUT_SERIALIZE_OUTPUT" "1 << 1")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_LAYOUT_DESERIALIZE_INVALID,
+;;   PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE,
+;;   PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE,
+;; } PangoLayoutDeserializeError;
+
+(define-enum-extended LayoutDeserializeError
+  (in-module "Pango")
+  (c-name "PangoLayoutDeserializeError")
+  (values
+    '("invalid" "PANGO_LAYOUT_DESERIALIZE_INVALID" "0")
+    '("invalid-value" "PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE" "1")
+    '("missing-value" "PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE" "2")
+  )
+)
+
+;; Original typedef:
+;; typedef enum {
+;;   PANGO_LAYOUT_DESERIALIZE_DEFAULT = 0,
+;;   PANGO_LAYOUT_DESERIALIZE_CONTEXT = 1 << 0,
+;; } PangoLayoutDeserializeFlags;
+
+(define-flags-extended LayoutDeserializeFlags
+  (in-module "Pango")
+  (c-name "PangoLayoutDeserializeFlags")
+  (values
+    '("default" "PANGO_LAYOUT_DESERIALIZE_DEFAULT" "0x0")
+    '("context" "PANGO_LAYOUT_DESERIALIZE_CONTEXT" "1 << 0")
+  )
+)
+
+;; From pango-ot.h
+
+;; Original typedef:
+;; typedef enum
+;; {
+;;   PANGO_OT_TABLE_GSUB,
+;;   PANGO_OT_TABLE_GPOS
+;; } PangoOTTableType;
+
+(define-enum-extended OTTableType
+  (in-module "Pango")
+  (c-name "PangoOTTableType")
+  (values
+    '("gsub" "PANGO_OT_TABLE_GSUB" "0")
+    '("gpos" "PANGO_OT_TABLE_GPOS" "1")
+  )
+)
+
+;; From pango-renderer.h
+
+;; Original typedef:
+;; typedef enum
+;; {
+;;   PANGO_RENDER_PART_FOREGROUND,
+;;   PANGO_RENDER_PART_BACKGROUND,
+;;   PANGO_RENDER_PART_UNDERLINE,
+;;   PANGO_RENDER_PART_STRIKETHROUGH,
+;;   PANGO_RENDER_PART_OVERLINE
+;; } PangoRenderPart;
+
+(define-enum-extended RenderPart
+  (in-module "Pango")
+  (c-name "PangoRenderPart")
+  (values
+    '("foreground" "PANGO_RENDER_PART_FOREGROUND" "0")
+    '("background" "PANGO_RENDER_PART_BACKGROUND" "1")
+    '("underline" "PANGO_RENDER_PART_UNDERLINE" "2")
+    '("strikethrough" "PANGO_RENDER_PART_STRIKETHROUGH" "3")
+    '("overline" "PANGO_RENDER_PART_OVERLINE" "4")
+  )
+)
+
+;; From pango-script.h
+
+;; Original typedef:
+;; 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 */
+;; 
+;;       /* Unicode-6.0 additions */
+;;       PANGO_SCRIPT_BATAK,              /* Batk */
+;;       PANGO_SCRIPT_BRAHMI,             /* Brah */
+;;       PANGO_SCRIPT_MANDAIC,            /* Mand */
+;; 
+;;       /* Unicode-6.1 additions */
+;;       PANGO_SCRIPT_CHAKMA,             /* Cakm */
+;;       PANGO_SCRIPT_MEROITIC_CURSIVE,   /* Merc */
+;;       PANGO_SCRIPT_MEROITIC_HIEROGLYPHS,/* Mero */
+;;       PANGO_SCRIPT_MIAO,               /* Plrd */
+;;       PANGO_SCRIPT_SHARADA,            /* Shrd */
+;;       PANGO_SCRIPT_SORA_SOMPENG,       /* Sora */
+;;       PANGO_SCRIPT_TAKRI,              /* Takr */
+;; 
+;;       /* Unicode 7.0 additions */
+;;       PANGO_SCRIPT_BASSA_VAH,              /* Bass */
+;;       PANGO_SCRIPT_CAUCASIAN_ALBANIAN,     /* Aghb */
+;;       PANGO_SCRIPT_DUPLOYAN,               /* Dupl */
+;;       PANGO_SCRIPT_ELBASAN,                /* Elba */
+;;       PANGO_SCRIPT_GRANTHA,                /* Gran */
+;;       PANGO_SCRIPT_KHOJKI,                 /* Khoj */
+;;       PANGO_SCRIPT_KHUDAWADI,              /* Sind */
+;;       PANGO_SCRIPT_LINEAR_A,               /* Lina */
+;;       PANGO_SCRIPT_MAHAJANI,               /* Mahj */
+;;       PANGO_SCRIPT_MANICHAEAN,             /* Manu */
+;;       PANGO_SCRIPT_MENDE_KIKAKUI,          /* Mend */
+;;       PANGO_SCRIPT_MODI,                   /* Modi */
+;;       PANGO_SCRIPT_MRO,                    /* Mroo */
+;;       PANGO_SCRIPT_NABATAEAN,              /* Nbat */
+;;       PANGO_SCRIPT_OLD_NORTH_ARABIAN,      /* Narb */
+;;       PANGO_SCRIPT_OLD_PERMIC,             /* Perm */
+;;       PANGO_SCRIPT_PAHAWH_HMONG,           /* Hmng */
+;;       PANGO_SCRIPT_PALMYRENE,              /* Palm */
+;;       PANGO_SCRIPT_PAU_CIN_HAU,            /* Pauc */
+;;       PANGO_SCRIPT_PSALTER_PAHLAVI,        /* Phlp */
+;;       PANGO_SCRIPT_SIDDHAM,                /* Sidd */
+;;       PANGO_SCRIPT_TIRHUTA,                /* Tirh */
+;;       PANGO_SCRIPT_WARANG_CITI,            /* Wara */
+;; 
+;;       /* Unicode 8.0 additions */
+;;       PANGO_SCRIPT_AHOM,                   /* Ahom */
+;;       PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS,  /* Hluw */
+;;       PANGO_SCRIPT_HATRAN,                 /* Hatr */
+;;       PANGO_SCRIPT_MULTANI,                /* Mult */
+;;       PANGO_SCRIPT_OLD_HUNGARIAN,          /* Hung */
+;;       PANGO_SCRIPT_SIGNWRITING             /* Sgnw */
+;; } PangoScript;
+
+(define-enum-extended Script
+  (in-module "Pango")
+  (c-name "PangoScript")
+  (values
+    '("invalid-code" "PANGO_SCRIPT_INVALID_CODE" "-1")
+    '("common" "PANGO_SCRIPT_COMMON" "0")
+    '("inherited" "PANGO_SCRIPT_INHERITED" "1")
+    '("arabic" "PANGO_SCRIPT_ARABIC" "2")
+    '("armenian" "PANGO_SCRIPT_ARMENIAN" "3")
+    '("bengali" "PANGO_SCRIPT_BENGALI" "4")
+    '("bopomofo" "PANGO_SCRIPT_BOPOMOFO" "5")
+    '("cherokee" "PANGO_SCRIPT_CHEROKEE" "6")
+    '("coptic" "PANGO_SCRIPT_COPTIC" "7")
+    '("cyrillic" "PANGO_SCRIPT_CYRILLIC" "8")
+    '("deseret" "PANGO_SCRIPT_DESERET" "9")
+    '("devanagari" "PANGO_SCRIPT_DEVANAGARI" "10")
+    '("ethiopic" "PANGO_SCRIPT_ETHIOPIC" "11")
+    '("georgian" "PANGO_SCRIPT_GEORGIAN" "12")
+    '("gothic" "PANGO_SCRIPT_GOTHIC" "13")
+    '("greek" "PANGO_SCRIPT_GREEK" "14")
+    '("gujarati" "PANGO_SCRIPT_GUJARATI" "15")
+    '("gurmukhi" "PANGO_SCRIPT_GURMUKHI" "16")
+    '("han" "PANGO_SCRIPT_HAN" "17")
+    '("hangul" "PANGO_SCRIPT_HANGUL" "18")
+    '("hebrew" "PANGO_SCRIPT_HEBREW" "19")
+    '("hiragana" "PANGO_SCRIPT_HIRAGANA" "20")
+    '("kannada" "PANGO_SCRIPT_KANNADA" "21")
+    '("katakana" "PANGO_SCRIPT_KATAKANA" "22")
+    '("khmer" "PANGO_SCRIPT_KHMER" "23")
+    '("lao" "PANGO_SCRIPT_LAO" "24")
+    '("latin" "PANGO_SCRIPT_LATIN" "25")
+    '("malayalam" "PANGO_SCRIPT_MALAYALAM" "26")
+    '("mongolian" "PANGO_SCRIPT_MONGOLIAN" "27")
+    '("myanmar" "PANGO_SCRIPT_MYANMAR" "28")
+    '("ogham" "PANGO_SCRIPT_OGHAM" "29")
+    '("old-italic" "PANGO_SCRIPT_OLD_ITALIC" "30")
+    '("oriya" "PANGO_SCRIPT_ORIYA" "31")
+    '("runic" "PANGO_SCRIPT_RUNIC" "32")
+    '("sinhala" "PANGO_SCRIPT_SINHALA" "33")
+    '("syriac" "PANGO_SCRIPT_SYRIAC" "34")
+    '("tamil" "PANGO_SCRIPT_TAMIL" "35")
+    '("telugu" "PANGO_SCRIPT_TELUGU" "36")
+    '("thaana" "PANGO_SCRIPT_THAANA" "37")
+    '("thai" "PANGO_SCRIPT_THAI" "38")
+    '("tibetan" "PANGO_SCRIPT_TIBETAN" "39")
+    '("canadian-aboriginal" "PANGO_SCRIPT_CANADIAN_ABORIGINAL" "40")
+    '("yi" "PANGO_SCRIPT_YI" "41")
+    '("tagalog" "PANGO_SCRIPT_TAGALOG" "42")
+    '("hanunoo" "PANGO_SCRIPT_HANUNOO" "43")
+    '("buhid" "PANGO_SCRIPT_BUHID" "44")
+    '("tagbanwa" "PANGO_SCRIPT_TAGBANWA" "45")
+    '("braille" "PANGO_SCRIPT_BRAILLE" "46")
+    '("cypriot" "PANGO_SCRIPT_CYPRIOT" "47")
+    '("limbu" "PANGO_SCRIPT_LIMBU" "48")
+    '("osmanya" "PANGO_SCRIPT_OSMANYA" "49")
+    '("shavian" "PANGO_SCRIPT_SHAVIAN" "50")
+    '("linear-b" "PANGO_SCRIPT_LINEAR_B" "51")
+    '("tai-le" "PANGO_SCRIPT_TAI_LE" "52")
+    '("ugaritic" "PANGO_SCRIPT_UGARITIC" "53")
+    '("new-tai-lue" "PANGO_SCRIPT_NEW_TAI_LUE" "54")
+    '("buginese" "PANGO_SCRIPT_BUGINESE" "55")
+    '("glagolitic" "PANGO_SCRIPT_GLAGOLITIC" "56")
+    '("tifinagh" "PANGO_SCRIPT_TIFINAGH" "57")
+    '("syloti-nagri" "PANGO_SCRIPT_SYLOTI_NAGRI" "58")
+    '("old-persian" "PANGO_SCRIPT_OLD_PERSIAN" "59")
+    '("kharoshthi" "PANGO_SCRIPT_KHAROSHTHI" "60")
+    '("unknown" "PANGO_SCRIPT_UNKNOWN" "61")
+    '("balinese" "PANGO_SCRIPT_BALINESE" "62")
+    '("cuneiform" "PANGO_SCRIPT_CUNEIFORM" "63")
+    '("phoenician" "PANGO_SCRIPT_PHOENICIAN" "64")
+    '("phags-pa" "PANGO_SCRIPT_PHAGS_PA" "65")
+    '("nko" "PANGO_SCRIPT_NKO" "66")
+    '("kayah-li" "PANGO_SCRIPT_KAYAH_LI" "67")
+    '("lepcha" "PANGO_SCRIPT_LEPCHA" "68")
+    '("rejang" "PANGO_SCRIPT_REJANG" "69")
+    '("sundanese" "PANGO_SCRIPT_SUNDANESE" "70")
+    '("saurashtra" "PANGO_SCRIPT_SAURASHTRA" "71")
+    '("cham" "PANGO_SCRIPT_CHAM" "72")
+    '("ol-chiki" "PANGO_SCRIPT_OL_CHIKI" "73")
+    '("vai" "PANGO_SCRIPT_VAI" "74")
+    '("carian" "PANGO_SCRIPT_CARIAN" "75")
+    '("lycian" "PANGO_SCRIPT_LYCIAN" "76")
+    '("lydian" "PANGO_SCRIPT_LYDIAN" "77")
+    '("batak" "PANGO_SCRIPT_BATAK" "78")
+    '("brahmi" "PANGO_SCRIPT_BRAHMI" "79")
+    '("mandaic" "PANGO_SCRIPT_MANDAIC" "80")
+    '("chakma" "PANGO_SCRIPT_CHAKMA" "81")
+    '("meroitic-cursive" "PANGO_SCRIPT_MEROITIC_CURSIVE" "82")
+    '("meroitic-hieroglyphs" "PANGO_SCRIPT_MEROITIC_HIEROGLYPHS" "83")
+    '("miao" "PANGO_SCRIPT_MIAO" "84")
+    '("sharada" "PANGO_SCRIPT_SHARADA" "85")
+    '("sora-sompeng" "PANGO_SCRIPT_SORA_SOMPENG" "86")
+    '("takri" "PANGO_SCRIPT_TAKRI" "87")
+    '("bassa-vah" "PANGO_SCRIPT_BASSA_VAH" "88")
+    '("caucasian-albanian" "PANGO_SCRIPT_CAUCASIAN_ALBANIAN" "89")
+    '("duployan" "PANGO_SCRIPT_DUPLOYAN" "90")
+    '("elbasan" "PANGO_SCRIPT_ELBASAN" "91")
+    '("grantha" "PANGO_SCRIPT_GRANTHA" "92")
+    '("khojki" "PANGO_SCRIPT_KHOJKI" "93")
+    '("khudawadi" "PANGO_SCRIPT_KHUDAWADI" "94")
+    '("linear-a" "PANGO_SCRIPT_LINEAR_A" "95")
+    '("mahajani" "PANGO_SCRIPT_MAHAJANI" "96")
+    '("manichaean" "PANGO_SCRIPT_MANICHAEAN" "97")
+    '("mende-kikakui" "PANGO_SCRIPT_MENDE_KIKAKUI" "98")
+    '("modi" "PANGO_SCRIPT_MODI" "99")
+    '("mro" "PANGO_SCRIPT_MRO" "100")
+    '("nabataean" "PANGO_SCRIPT_NABATAEAN" "101")
+    '("old-north-arabian" "PANGO_SCRIPT_OLD_NORTH_ARABIAN" "102")
+    '("old-permic" "PANGO_SCRIPT_OLD_PERMIC" "103")
+    '("pahawh-hmong" "PANGO_SCRIPT_PAHAWH_HMONG" "104")
+    '("palmyrene" "PANGO_SCRIPT_PALMYRENE" "105")
+    '("pau-cin-hau" "PANGO_SCRIPT_PAU_CIN_HAU" "106")
+    '("psalter-pahlavi" "PANGO_SCRIPT_PSALTER_PAHLAVI" "107")
+    '("siddham" "PANGO_SCRIPT_SIDDHAM" "108")
+    '("tirhuta" "PANGO_SCRIPT_TIRHUTA" "109")
+    '("warang-citi" "PANGO_SCRIPT_WARANG_CITI" "110")
+    '("ahom" "PANGO_SCRIPT_AHOM" "111")
+    '("anatolian-hieroglyphs" "PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS" "112")
+    '("hatran" "PANGO_SCRIPT_HATRAN" "113")
+    '("multani" "PANGO_SCRIPT_MULTANI" "114")
+    '("old-hungarian" "PANGO_SCRIPT_OLD_HUNGARIAN" "115")
+    '("signwriting" "PANGO_SCRIPT_SIGNWRITING" "116")
+  )
+)
+
+;; From pango-tabs.h
+
+;; Original typedef:
+;; typedef enum
+;; {
+;;   PANGO_TAB_LEFT,
+;;   PANGO_TAB_RIGHT,
+;;   PANGO_TAB_CENTER,
+;;   PANGO_TAB_DECIMAL
+;; } PangoTabAlign;
+
+(define-enum-extended TabAlign
+  (in-module "Pango")
+  (c-name "PangoTabAlign")
+  (values
+    '("left" "PANGO_TAB_LEFT" "0")
+    '("right" "PANGO_TAB_RIGHT" "1")
+    '("center" "PANGO_TAB_CENTER" "2")
+    '("decimal" "PANGO_TAB_DECIMAL" "3")
+  )
+)
+
diff --git a/pango/src/pango_extra_objects.defs b/pango/src/pango_extra_objects.defs
new file mode 100644 (file)
index 0000000..950b57e
--- /dev/null
@@ -0,0 +1,97 @@
+; These define-object declarations were not generated by h2defs.py
+; because it looks for the SomethingClass declaration too, but that is often
+; hidden.
+; However, it is needed by the documentation generation, which needs to
+; know what objects exist, so it can guess how to break apart C function names
+; that are mentioned in documentation text.
+; (DocsParser.pm:substitute_function(), which uses GtkDefs.pm:lookup_object().)
+
+(define-object CairoFontMap
+  (in-module "Pango")
+  (c-name "PangoCairoFontMap")
+  (gtype-id "PANGO_TYPE_CAIRO_FONT_MAP")
+)
+
+(define-object AttrList
+  (in-module "Pango")
+  (c-name "PangoAttrList")
+  (gtype-id "PANGO_TYPE_ATTR_LIST")
+)
+
+(define-object AttrIterator
+  (in-module "Pango")
+  (c-name "PangoAttrIterator")
+  (gtype-id "PANGO_TYPE_ATTR_ITERATOR")
+)
+
+(define-object Context
+  (in-module "Pango")
+  (c-name "PangoContext")
+  (gtype-id "PANGO_TYPE_CONTEXT")
+)
+
+(define-object Coverage
+  (in-module "Pango")
+  (c-name "PangoCoverage")
+  (gtype-id "PANGO_TYPE_COVERAGE")
+)
+
+(define-object Font
+  (in-module "Pango")
+  (c-name "PangoFont")
+  (gtype-id "PANGO_TYPE_FONT")
+)
+
+(define-object FontMetrics
+  (in-module "Pango")
+  (c-name "PangoFontMetrics")
+  (gtype-id "PANGO_TYPE_FONT_METRICS")
+)
+
+(define-object FontDescription
+  (in-module "Pango")
+  (c-name "PangoFontDescription")
+  (gtype-id "PANGO_TYPE_FONT_DESCRIPTION")
+)
+
+(define-object GlyphItem
+  (in-module "Pango")
+  (c-name "PangoGlyphItem")
+  (gtype-id "PANGO_TYPE_GLYPH_ITEM")
+)
+
+(define-object GlyphString
+  (in-module "Pango")
+  (c-name "PangoGlyphString")
+  (gtype-id "PANGO_TYPE_GLYPH_STRING")
+)
+
+(define-object Item
+  (in-module "Pango")
+  (c-name "PangoItem")
+  (gtype-id "PANGO_TYPE_ITEM")
+)
+
+(define-object Language
+  (in-module "Pango")
+  (c-name "PangoLanguage")
+  (gtype-id "PANGO_TYPE_LANGUAGE")
+)
+
+(define-object Layout
+  (in-module "Pango")
+  (c-name "PangoLayout")
+  (gtype-id "PANGO_TYPE_LAYOUT")
+)
+
+(define-object LayoutIter
+  (in-module "Pango")
+  (c-name "PangoLayoutIter")
+  (gtype-id "PANGO_TYPE_LAYOUT_ITER")
+)
+
+(define-object LayoutLine
+  (in-module "Pango")
+  (c-name "PangoLayoutLine")
+  (gtype-id "PANGO_TYPE_LAYOUT_LINE")
+)
diff --git a/pango/src/pango_methods.defs b/pango/src/pango_methods.defs
new file mode 100644 (file)
index 0000000..f4a5c47
--- /dev/null
@@ -0,0 +1,6041 @@
+;; -*- scheme -*-
+; object definitions ...
+(define-object Engine
+  (in-module "Pango")
+  (parent "GObject")
+  (c-name "PangoEngine")
+  (gtype-id "PANGO_TYPE_ENGINE")
+)
+
+(define-object EngineLang
+  (in-module "Pango")
+  (parent "PangoEngine")
+  (c-name "PangoEngineLang")
+  (gtype-id "PANGO_TYPE_ENGINE_LANG")
+)
+
+(define-object EngineShape
+  (in-module "Pango")
+  (parent "PangoEngine")
+  (c-name "PangoEngineShape")
+  (gtype-id "PANGO_TYPE_ENGINE_SHAPE")
+)
+
+(define-object FcDecoder
+  (in-module "Pango")
+  (parent "GObject")
+  (c-name "PangoFcDecoder")
+  (gtype-id "PANGO_TYPE_FC_DECODER")
+)
+
+(define-object Font
+  (in-module "Pango")
+  (parent "GObject")
+  (c-name "PangoFont")
+  (gtype-id "PANGO_TYPE_FONT")
+)
+
+(define-object FontFace
+  (in-module "Pango")
+  (parent "GObject")
+  (c-name "PangoFontFace")
+  (gtype-id "PANGO_TYPE_FONT_FACE")
+)
+
+(define-object FontFamily
+  (in-module "Pango")
+  (parent "GObject")
+  (c-name "PangoFontFamily")
+  (gtype-id "PANGO_TYPE_FONT_FAMILY")
+)
+
+(define-object FontMap
+  (in-module "Pango")
+  (parent "GObject")
+  (c-name "PangoFontMap")
+  (gtype-id "PANGO_TYPE_FONT_MAP")
+)
+
+(define-object Fontset
+  (in-module "Pango")
+  (parent "GObject")
+  (c-name "PangoFontset")
+  (gtype-id "PANGO_TYPE_FONTSET")
+)
+
+(define-object Renderer
+  (in-module "Pango")
+  (parent "GObject")
+  (c-name "PangoRenderer")
+  (gtype-id "PANGO_TYPE_RENDERER")
+)
+
+(define-object XftRenderer
+  (in-module "Pango")
+  (parent "PangoRenderer")
+  (c-name "PangoXftRenderer")
+  (gtype-id "PANGO_TYPE_XFT_RENDERER")
+)
+
+;; Enumerations and flags ...
+
+(define-enum AttrType
+  (in-module "Pango")
+  (c-name "PangoAttrType")
+  (gtype-id "PANGO_TYPE_ATTR_TYPE")
+  (values
+    '("invalid" "PANGO_ATTR_INVALID")
+    '("language" "PANGO_ATTR_LANGUAGE")
+    '("family" "PANGO_ATTR_FAMILY")
+    '("style" "PANGO_ATTR_STYLE")
+    '("weight" "PANGO_ATTR_WEIGHT")
+    '("variant" "PANGO_ATTR_VARIANT")
+    '("stretch" "PANGO_ATTR_STRETCH")
+    '("size" "PANGO_ATTR_SIZE")
+    '("font-desc" "PANGO_ATTR_FONT_DESC")
+    '("foreground" "PANGO_ATTR_FOREGROUND")
+    '("background" "PANGO_ATTR_BACKGROUND")
+    '("underline" "PANGO_ATTR_UNDERLINE")
+    '("strikethrough" "PANGO_ATTR_STRIKETHROUGH")
+    '("rise" "PANGO_ATTR_RISE")
+    '("shape" "PANGO_ATTR_SHAPE")
+    '("scale" "PANGO_ATTR_SCALE")
+    '("fallback" "PANGO_ATTR_FALLBACK")
+    '("letter-spacing" "PANGO_ATTR_LETTER_SPACING")
+    '("underline-color" "PANGO_ATTR_UNDERLINE_COLOR")
+    '("strikethrough-color" "PANGO_ATTR_STRIKETHROUGH_COLOR")
+    '("absolute-size" "PANGO_ATTR_ABSOLUTE_SIZE")
+    '("gravity" "PANGO_ATTR_GRAVITY")
+    '("gravity-hint" "PANGO_ATTR_GRAVITY_HINT")
+    '("font-features" "PANGO_ATTR_FONT_FEATURES")
+    '("foreground-alpha" "PANGO_ATTR_FOREGROUND_ALPHA")
+    '("background-alpha" "PANGO_ATTR_BACKGROUND_ALPHA")
+    '("allow-breaks" "PANGO_ATTR_ALLOW_BREAKS")
+    '("show" "PANGO_ATTR_SHOW")
+    '("insert-hyphens" "PANGO_ATTR_INSERT_HYPHENS")
+    '("overline" "PANGO_ATTR_OVERLINE")
+    '("overline-color" "PANGO_ATTR_OVERLINE_COLOR")
+    '("line-height" "PANGO_ATTR_LINE_HEIGHT")
+    '("absolute-line-height" "PANGO_ATTR_ABSOLUTE_LINE_HEIGHT")
+    '("text-transform" "PANGO_ATTR_TEXT_TRANSFORM")
+    '("word" "PANGO_ATTR_WORD")
+    '("sentence" "PANGO_ATTR_SENTENCE")
+    '("baseline-shift" "PANGO_ATTR_BASELINE_SHIFT")
+    '("font-scale" "PANGO_ATTR_FONT_SCALE")
+  )
+)
+
+(define-enum Underline
+  (in-module "Pango")
+  (c-name "PangoUnderline")
+  (gtype-id "PANGO_TYPE_UNDERLINE")
+  (values
+    '("none" "PANGO_UNDERLINE_NONE")
+    '("single" "PANGO_UNDERLINE_SINGLE")
+    '("double" "PANGO_UNDERLINE_DOUBLE")
+    '("low" "PANGO_UNDERLINE_LOW")
+    '("error" "PANGO_UNDERLINE_ERROR")
+    '("single-line" "PANGO_UNDERLINE_SINGLE_LINE")
+    '("double-line" "PANGO_UNDERLINE_DOUBLE_LINE")
+    '("error-line" "PANGO_UNDERLINE_ERROR_LINE")
+  )
+)
+
+(define-enum Overline
+  (in-module "Pango")
+  (c-name "PangoOverline")
+  (gtype-id "PANGO_TYPE_OVERLINE")
+  (values
+    '("none" "PANGO_OVERLINE_NONE")
+    '("single" "PANGO_OVERLINE_SINGLE")
+  )
+)
+
+(define-flags ShowFlags
+  (in-module "Pango")
+  (c-name "PangoShowFlags")
+  (gtype-id "PANGO_TYPE_SHOW_FLAGS")
+  (values
+    '("none" "PANGO_SHOW_NONE")
+    '("spaces" "PANGO_SHOW_SPACES")
+    '("line-breaks" "PANGO_SHOW_LINE_BREAKS")
+    '("ignorables" "PANGO_SHOW_IGNORABLES")
+  )
+)
+
+(define-enum TextTransform
+  (in-module "Pango")
+  (c-name "PangoTextTransform")
+  (gtype-id "PANGO_TYPE_TEXT_TRANSFORM")
+  (values
+    '("none" "PANGO_TEXT_TRANSFORM_NONE")
+    '("lowercase" "PANGO_TEXT_TRANSFORM_LOWERCASE")
+    '("uppercase" "PANGO_TEXT_TRANSFORM_UPPERCASE")
+    '("capitalize" "PANGO_TEXT_TRANSFORM_CAPITALIZE")
+  )
+)
+
+(define-enum BaselineShift
+  (in-module "Pango")
+  (c-name "PangoBaselineShift")
+  (gtype-id "PANGO_TYPE_BASELINE_SHIFT")
+  (values
+    '("none" "PANGO_BASELINE_SHIFT_NONE")
+    '("superscript" "PANGO_BASELINE_SHIFT_SUPERSCRIPT")
+    '("subscript" "PANGO_BASELINE_SHIFT_SUBSCRIPT")
+  )
+)
+
+(define-enum FontScale
+  (in-module "Pango")
+  (c-name "PangoFontScale")
+  (gtype-id "PANGO_TYPE_FONT_SCALE")
+  (values
+    '("none" "PANGO_FONT_SCALE_NONE")
+    '("superscript" "PANGO_FONT_SCALE_SUPERSCRIPT")
+    '("subscript" "PANGO_FONT_SCALE_SUBSCRIPT")
+    '("small-caps" "PANGO_FONT_SCALE_SMALL_CAPS")
+  )
+)
+
+(define-enum BidiType
+  (in-module "Pango")
+  (c-name "PangoBidiType")
+  (gtype-id "PANGO_TYPE_BIDI_TYPE")
+  (values
+    '("l" "PANGO_BIDI_TYPE_L")
+    '("lre" "PANGO_BIDI_TYPE_LRE")
+    '("lro" "PANGO_BIDI_TYPE_LRO")
+    '("r" "PANGO_BIDI_TYPE_R")
+    '("al" "PANGO_BIDI_TYPE_AL")
+    '("rle" "PANGO_BIDI_TYPE_RLE")
+    '("rlo" "PANGO_BIDI_TYPE_RLO")
+    '("pdf" "PANGO_BIDI_TYPE_PDF")
+    '("en" "PANGO_BIDI_TYPE_EN")
+    '("es" "PANGO_BIDI_TYPE_ES")
+    '("et" "PANGO_BIDI_TYPE_ET")
+    '("an" "PANGO_BIDI_TYPE_AN")
+    '("cs" "PANGO_BIDI_TYPE_CS")
+    '("nsm" "PANGO_BIDI_TYPE_NSM")
+    '("bn" "PANGO_BIDI_TYPE_BN")
+    '("b" "PANGO_BIDI_TYPE_B")
+    '("s" "PANGO_BIDI_TYPE_S")
+    '("ws" "PANGO_BIDI_TYPE_WS")
+    '("on" "PANGO_BIDI_TYPE_ON")
+    '("lri" "PANGO_BIDI_TYPE_LRI")
+    '("rli" "PANGO_BIDI_TYPE_RLI")
+    '("fsi" "PANGO_BIDI_TYPE_FSI")
+    '("pdi" "PANGO_BIDI_TYPE_PDI")
+  )
+)
+
+(define-enum CoverageLevel
+  (in-module "Pango")
+  (c-name "PangoCoverageLevel")
+  (gtype-id "PANGO_TYPE_COVERAGE_LEVEL")
+  (values
+    '("none" "PANGO_COVERAGE_NONE")
+    '("fallback" "PANGO_COVERAGE_FALLBACK")
+    '("approximate" "PANGO_COVERAGE_APPROXIMATE")
+    '("exact" "PANGO_COVERAGE_EXACT")
+  )
+)
+
+(define-enum Direction
+  (in-module "Pango")
+  (c-name "PangoDirection")
+  (gtype-id "PANGO_TYPE_DIRECTION")
+  (values
+    '("ltr" "PANGO_DIRECTION_LTR")
+    '("rtl" "PANGO_DIRECTION_RTL")
+    '("ttb-ltr" "PANGO_DIRECTION_TTB_LTR")
+    '("ttb-rtl" "PANGO_DIRECTION_TTB_RTL")
+    '("weak-ltr" "PANGO_DIRECTION_WEAK_LTR")
+    '("weak-rtl" "PANGO_DIRECTION_WEAK_RTL")
+    '("neutral" "PANGO_DIRECTION_NEUTRAL")
+  )
+)
+
+(define-enum Style
+  (in-module "Pango")
+  (c-name "PangoStyle")
+  (gtype-id "PANGO_TYPE_STYLE")
+  (values
+    '("normal" "PANGO_STYLE_NORMAL")
+    '("oblique" "PANGO_STYLE_OBLIQUE")
+    '("italic" "PANGO_STYLE_ITALIC")
+  )
+)
+
+(define-enum Variant
+  (in-module "Pango")
+  (c-name "PangoVariant")
+  (gtype-id "PANGO_TYPE_VARIANT")
+  (values
+    '("normal" "PANGO_VARIANT_NORMAL")
+    '("small-caps" "PANGO_VARIANT_SMALL_CAPS")
+    '("all-small-caps" "PANGO_VARIANT_ALL_SMALL_CAPS")
+    '("petite-caps" "PANGO_VARIANT_PETITE_CAPS")
+    '("all-petite-caps" "PANGO_VARIANT_ALL_PETITE_CAPS")
+    '("unicase" "PANGO_VARIANT_UNICASE")
+    '("title-caps" "PANGO_VARIANT_TITLE_CAPS")
+  )
+)
+
+(define-enum Weight
+  (in-module "Pango")
+  (c-name "PangoWeight")
+  (gtype-id "PANGO_TYPE_WEIGHT")
+  (values
+    '("thin" "PANGO_WEIGHT_THIN")
+    '("ultralight" "PANGO_WEIGHT_ULTRALIGHT")
+    '("light" "PANGO_WEIGHT_LIGHT")
+    '("semilight" "PANGO_WEIGHT_SEMILIGHT")
+    '("book" "PANGO_WEIGHT_BOOK")
+    '("normal" "PANGO_WEIGHT_NORMAL")
+    '("medium" "PANGO_WEIGHT_MEDIUM")
+    '("semibold" "PANGO_WEIGHT_SEMIBOLD")
+    '("bold" "PANGO_WEIGHT_BOLD")
+    '("ultrabold" "PANGO_WEIGHT_ULTRABOLD")
+    '("heavy" "PANGO_WEIGHT_HEAVY")
+    '("ultraheavy" "PANGO_WEIGHT_ULTRAHEAVY")
+  )
+)
+
+(define-enum Stretch
+  (in-module "Pango")
+  (c-name "PangoStretch")
+  (gtype-id "PANGO_TYPE_STRETCH")
+  (values
+    '("ultra-condensed" "PANGO_STRETCH_ULTRA_CONDENSED")
+    '("extra-condensed" "PANGO_STRETCH_EXTRA_CONDENSED")
+    '("condensed" "PANGO_STRETCH_CONDENSED")
+    '("semi-condensed" "PANGO_STRETCH_SEMI_CONDENSED")
+    '("normal" "PANGO_STRETCH_NORMAL")
+    '("semi-expanded" "PANGO_STRETCH_SEMI_EXPANDED")
+    '("expanded" "PANGO_STRETCH_EXPANDED")
+    '("extra-expanded" "PANGO_STRETCH_EXTRA_EXPANDED")
+    '("ultra-expanded" "PANGO_STRETCH_ULTRA_EXPANDED")
+  )
+)
+
+(define-flags FontMask
+  (in-module "Pango")
+  (c-name "PangoFontMask")
+  (gtype-id "PANGO_TYPE_FONT_MASK")
+  (values
+    '("family" "PANGO_FONT_MASK_FAMILY")
+    '("style" "PANGO_FONT_MASK_STYLE")
+    '("variant" "PANGO_FONT_MASK_VARIANT")
+    '("weight" "PANGO_FONT_MASK_WEIGHT")
+    '("stretch" "PANGO_FONT_MASK_STRETCH")
+    '("size" "PANGO_FONT_MASK_SIZE")
+    '("gravity" "PANGO_FONT_MASK_GRAVITY")
+    '("variations" "PANGO_FONT_MASK_VARIATIONS")
+  )
+)
+
+(define-flags ShapeFlags
+  (in-module "Pango")
+  (c-name "PangoShapeFlags")
+  (gtype-id "PANGO_TYPE_SHAPE_FLAGS")
+  (values
+    '("none" "PANGO_SHAPE_NONE")
+    '("round-positions" "PANGO_SHAPE_ROUND_POSITIONS")
+  )
+)
+
+(define-enum Gravity
+  (in-module "Pango")
+  (c-name "PangoGravity")
+  (gtype-id "PANGO_TYPE_GRAVITY")
+  (values
+    '("south" "PANGO_GRAVITY_SOUTH")
+    '("east" "PANGO_GRAVITY_EAST")
+    '("north" "PANGO_GRAVITY_NORTH")
+    '("west" "PANGO_GRAVITY_WEST")
+    '("auto" "PANGO_GRAVITY_AUTO")
+  )
+)
+
+(define-enum GravityHint
+  (in-module "Pango")
+  (c-name "PangoGravityHint")
+  (gtype-id "PANGO_TYPE_GRAVITY_HINT")
+  (values
+    '("natural" "PANGO_GRAVITY_HINT_NATURAL")
+    '("strong" "PANGO_GRAVITY_HINT_STRONG")
+    '("line" "PANGO_GRAVITY_HINT_LINE")
+  )
+)
+
+(define-enum Alignment
+  (in-module "Pango")
+  (c-name "PangoAlignment")
+  (gtype-id "PANGO_TYPE_ALIGNMENT")
+  (values
+    '("left" "PANGO_ALIGN_LEFT")
+    '("center" "PANGO_ALIGN_CENTER")
+    '("right" "PANGO_ALIGN_RIGHT")
+  )
+)
+
+(define-enum WrapMode
+  (in-module "Pango")
+  (c-name "PangoWrapMode")
+  (gtype-id "PANGO_TYPE_WRAP_MODE")
+  (values
+    '("word" "PANGO_WRAP_WORD")
+    '("char" "PANGO_WRAP_CHAR")
+    '("word-char" "PANGO_WRAP_WORD_CHAR")
+  )
+)
+
+(define-enum EllipsizeMode
+  (in-module "Pango")
+  (c-name "PangoEllipsizeMode")
+  (gtype-id "PANGO_TYPE_ELLIPSIZE_MODE")
+  (values
+    '("none" "PANGO_ELLIPSIZE_NONE")
+    '("start" "PANGO_ELLIPSIZE_START")
+    '("middle" "PANGO_ELLIPSIZE_MIDDLE")
+    '("end" "PANGO_ELLIPSIZE_END")
+  )
+)
+
+(define-flags LayoutSerializeFlags
+  (in-module "Pango")
+  (c-name "PangoLayoutSerializeFlags")
+  (gtype-id "PANGO_TYPE_LAYOUT_SERIALIZE_FLAGS")
+  (values
+    '("default" "PANGO_LAYOUT_SERIALIZE_DEFAULT")
+    '("context" "PANGO_LAYOUT_SERIALIZE_CONTEXT")
+    '("output" "PANGO_LAYOUT_SERIALIZE_OUTPUT")
+  )
+)
+
+(define-enum LayoutDeserializeError
+  (in-module "Pango")
+  (c-name "PangoLayoutDeserializeError")
+  (gtype-id "PANGO_TYPE_LAYOUT_DESERIALIZE_ERROR")
+  (values
+    '("invalid" "PANGO_LAYOUT_DESERIALIZE_INVALID")
+    '("invalid-value" "PANGO_LAYOUT_DESERIALIZE_INVALID_VALUE")
+    '("missing-value" "PANGO_LAYOUT_DESERIALIZE_MISSING_VALUE")
+  )
+)
+
+(define-flags LayoutDeserializeFlags
+  (in-module "Pango")
+  (c-name "PangoLayoutDeserializeFlags")
+  (gtype-id "PANGO_TYPE_LAYOUT_DESERIALIZE_FLAGS")
+  (values
+    '("default" "PANGO_LAYOUT_DESERIALIZE_DEFAULT")
+    '("context" "PANGO_LAYOUT_DESERIALIZE_CONTEXT")
+  )
+)
+
+(define-enum OTTableType
+  (in-module "Pango")
+  (c-name "PangoOTTableType")
+  (gtype-id "PANGO_TYPE_OT_TABLE_TYPE")
+  (values
+    '("gsub" "PANGO_OT_TABLE_GSUB")
+    '("gpos" "PANGO_OT_TABLE_GPOS")
+  )
+)
+
+(define-enum RenderPart
+  (in-module "Pango")
+  (c-name "PangoRenderPart")
+  (gtype-id "PANGO_TYPE_RENDER_PART")
+  (values
+    '("foreground" "PANGO_RENDER_PART_FOREGROUND")
+    '("background" "PANGO_RENDER_PART_BACKGROUND")
+    '("underline" "PANGO_RENDER_PART_UNDERLINE")
+    '("strikethrough" "PANGO_RENDER_PART_STRIKETHROUGH")
+    '("overline" "PANGO_RENDER_PART_OVERLINE")
+  )
+)
+
+(define-enum Script
+  (in-module "Pango")
+  (c-name "PangoScript")
+  (gtype-id "PANGO_TYPE_SCRIPT")
+  (values
+    '("invalid-code" "PANGO_SCRIPT_INVALID_CODE")
+    '("common" "PANGO_SCRIPT_COMMON")
+    '("inherited" "PANGO_SCRIPT_INHERITED")
+    '("arabic" "PANGO_SCRIPT_ARABIC")
+    '("armenian" "PANGO_SCRIPT_ARMENIAN")
+    '("bengali" "PANGO_SCRIPT_BENGALI")
+    '("bopomofo" "PANGO_SCRIPT_BOPOMOFO")
+    '("cherokee" "PANGO_SCRIPT_CHEROKEE")
+    '("coptic" "PANGO_SCRIPT_COPTIC")
+    '("cyrillic" "PANGO_SCRIPT_CYRILLIC")
+    '("deseret" "PANGO_SCRIPT_DESERET")
+    '("devanagari" "PANGO_SCRIPT_DEVANAGARI")
+    '("ethiopic" "PANGO_SCRIPT_ETHIOPIC")
+    '("georgian" "PANGO_SCRIPT_GEORGIAN")
+    '("gothic" "PANGO_SCRIPT_GOTHIC")
+    '("greek" "PANGO_SCRIPT_GREEK")
+    '("gujarati" "PANGO_SCRIPT_GUJARATI")
+    '("gurmukhi" "PANGO_SCRIPT_GURMUKHI")
+    '("han" "PANGO_SCRIPT_HAN")
+    '("hangul" "PANGO_SCRIPT_HANGUL")
+    '("hebrew" "PANGO_SCRIPT_HEBREW")
+    '("hiragana" "PANGO_SCRIPT_HIRAGANA")
+    '("kannada" "PANGO_SCRIPT_KANNADA")
+    '("katakana" "PANGO_SCRIPT_KATAKANA")
+    '("khmer" "PANGO_SCRIPT_KHMER")
+    '("lao" "PANGO_SCRIPT_LAO")
+    '("latin" "PANGO_SCRIPT_LATIN")
+    '("malayalam" "PANGO_SCRIPT_MALAYALAM")
+    '("mongolian" "PANGO_SCRIPT_MONGOLIAN")
+    '("myanmar" "PANGO_SCRIPT_MYANMAR")
+    '("ogham" "PANGO_SCRIPT_OGHAM")
+    '("old-italic" "PANGO_SCRIPT_OLD_ITALIC")
+    '("oriya" "PANGO_SCRIPT_ORIYA")
+    '("runic" "PANGO_SCRIPT_RUNIC")
+    '("sinhala" "PANGO_SCRIPT_SINHALA")
+    '("syriac" "PANGO_SCRIPT_SYRIAC")
+    '("tamil" "PANGO_SCRIPT_TAMIL")
+    '("telugu" "PANGO_SCRIPT_TELUGU")
+    '("thaana" "PANGO_SCRIPT_THAANA")
+    '("thai" "PANGO_SCRIPT_THAI")
+    '("tibetan" "PANGO_SCRIPT_TIBETAN")
+    '("canadian-aboriginal" "PANGO_SCRIPT_CANADIAN_ABORIGINAL")
+    '("yi" "PANGO_SCRIPT_YI")
+    '("tagalog" "PANGO_SCRIPT_TAGALOG")
+    '("hanunoo" "PANGO_SCRIPT_HANUNOO")
+    '("buhid" "PANGO_SCRIPT_BUHID")
+    '("tagbanwa" "PANGO_SCRIPT_TAGBANWA")
+    '("braille" "PANGO_SCRIPT_BRAILLE")
+    '("cypriot" "PANGO_SCRIPT_CYPRIOT")
+    '("limbu" "PANGO_SCRIPT_LIMBU")
+    '("osmanya" "PANGO_SCRIPT_OSMANYA")
+    '("shavian" "PANGO_SCRIPT_SHAVIAN")
+    '("linear-b" "PANGO_SCRIPT_LINEAR_B")
+    '("tai-le" "PANGO_SCRIPT_TAI_LE")
+    '("ugaritic" "PANGO_SCRIPT_UGARITIC")
+    '("new-tai-lue" "PANGO_SCRIPT_NEW_TAI_LUE")
+    '("buginese" "PANGO_SCRIPT_BUGINESE")
+    '("glagolitic" "PANGO_SCRIPT_GLAGOLITIC")
+    '("tifinagh" "PANGO_SCRIPT_TIFINAGH")
+    '("syloti-nagri" "PANGO_SCRIPT_SYLOTI_NAGRI")
+    '("old-persian" "PANGO_SCRIPT_OLD_PERSIAN")
+    '("kharoshthi" "PANGO_SCRIPT_KHAROSHTHI")
+    '("unknown" "PANGO_SCRIPT_UNKNOWN")
+    '("balinese" "PANGO_SCRIPT_BALINESE")
+    '("cuneiform" "PANGO_SCRIPT_CUNEIFORM")
+    '("phoenician" "PANGO_SCRIPT_PHOENICIAN")
+    '("phags-pa" "PANGO_SCRIPT_PHAGS_PA")
+    '("nko" "PANGO_SCRIPT_NKO")
+    '("kayah-li" "PANGO_SCRIPT_KAYAH_LI")
+    '("lepcha" "PANGO_SCRIPT_LEPCHA")
+    '("rejang" "PANGO_SCRIPT_REJANG")
+    '("sundanese" "PANGO_SCRIPT_SUNDANESE")
+    '("saurashtra" "PANGO_SCRIPT_SAURASHTRA")
+    '("cham" "PANGO_SCRIPT_CHAM")
+    '("ol-chiki" "PANGO_SCRIPT_OL_CHIKI")
+    '("vai" "PANGO_SCRIPT_VAI")
+    '("carian" "PANGO_SCRIPT_CARIAN")
+    '("lycian" "PANGO_SCRIPT_LYCIAN")
+    '("lydian" "PANGO_SCRIPT_LYDIAN")
+    '("batak" "PANGO_SCRIPT_BATAK")
+    '("brahmi" "PANGO_SCRIPT_BRAHMI")
+    '("mandaic" "PANGO_SCRIPT_MANDAIC")
+    '("chakma" "PANGO_SCRIPT_CHAKMA")
+    '("meroitic-cursive" "PANGO_SCRIPT_MEROITIC_CURSIVE")
+    '("meroitic-hieroglyphs" "PANGO_SCRIPT_MEROITIC_HIEROGLYPHS")
+    '("miao" "PANGO_SCRIPT_MIAO")
+    '("sharada" "PANGO_SCRIPT_SHARADA")
+    '("sora-sompeng" "PANGO_SCRIPT_SORA_SOMPENG")
+    '("takri" "PANGO_SCRIPT_TAKRI")
+    '("bassa-vah" "PANGO_SCRIPT_BASSA_VAH")
+    '("caucasian-albanian" "PANGO_SCRIPT_CAUCASIAN_ALBANIAN")
+    '("duployan" "PANGO_SCRIPT_DUPLOYAN")
+    '("elbasan" "PANGO_SCRIPT_ELBASAN")
+    '("grantha" "PANGO_SCRIPT_GRANTHA")
+    '("khojki" "PANGO_SCRIPT_KHOJKI")
+    '("khudawadi" "PANGO_SCRIPT_KHUDAWADI")
+    '("linear-a" "PANGO_SCRIPT_LINEAR_A")
+    '("mahajani" "PANGO_SCRIPT_MAHAJANI")
+    '("manichaean" "PANGO_SCRIPT_MANICHAEAN")
+    '("mende-kikakui" "PANGO_SCRIPT_MENDE_KIKAKUI")
+    '("modi" "PANGO_SCRIPT_MODI")
+    '("mro" "PANGO_SCRIPT_MRO")
+    '("nabataean" "PANGO_SCRIPT_NABATAEAN")
+    '("old-north-arabian" "PANGO_SCRIPT_OLD_NORTH_ARABIAN")
+    '("old-permic" "PANGO_SCRIPT_OLD_PERMIC")
+    '("pahawh-hmong" "PANGO_SCRIPT_PAHAWH_HMONG")
+    '("palmyrene" "PANGO_SCRIPT_PALMYRENE")
+    '("pau-cin-hau" "PANGO_SCRIPT_PAU_CIN_HAU")
+    '("psalter-pahlavi" "PANGO_SCRIPT_PSALTER_PAHLAVI")
+    '("siddham" "PANGO_SCRIPT_SIDDHAM")
+    '("tirhuta" "PANGO_SCRIPT_TIRHUTA")
+    '("warang-citi" "PANGO_SCRIPT_WARANG_CITI")
+    '("ahom" "PANGO_SCRIPT_AHOM")
+    '("anatolian-hieroglyphs" "PANGO_SCRIPT_ANATOLIAN_HIEROGLYPHS")
+    '("hatran" "PANGO_SCRIPT_HATRAN")
+    '("multani" "PANGO_SCRIPT_MULTANI")
+    '("old-hungarian" "PANGO_SCRIPT_OLD_HUNGARIAN")
+    '("signwriting" "PANGO_SCRIPT_SIGNWRITING")
+  )
+)
+
+(define-enum TabAlign
+  (in-module "Pango")
+  (c-name "PangoTabAlign")
+  (gtype-id "PANGO_TYPE_TAB_ALIGN")
+  (values
+    '("left" "PANGO_TAB_LEFT")
+    '("right" "PANGO_TAB_RIGHT")
+    '("center" "PANGO_TAB_CENTER")
+    '("decimal" "PANGO_TAB_DECIMAL")
+  )
+)
+
+
+;; From pango-attributes.h
+
+(define-function pango_attribute_get_type
+  (c-name "pango_attribute_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_attr_type_register
+  (c-name "pango_attr_type_register")
+  (return-type "PangoAttrType")
+  (parameters
+    '("const-char*" "name")
+  )
+)
+
+(define-method get_name
+  (of-object "PangoAttrType")
+  (c-name "pango_attr_type_get_name")
+  (return-type "const-char*")
+)
+
+(define-method init
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_init")
+  (return-type "none")
+  (parameters
+    '("const-PangoAttrClass*" "klass")
+  )
+)
+
+(define-method copy
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_copy")
+  (return-type "PangoAttribute*")
+)
+
+(define-method destroy
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_destroy")
+  (return-type "none")
+)
+
+(define-method equal
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_equal")
+  (return-type "gboolean")
+  (parameters
+    '("const-PangoAttribute*" "attr2")
+  )
+)
+
+(define-function pango_attr_language_new
+  (c-name "pango_attr_language_new")
+  (is-constructor-of "PangoAttrLanguage")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-function pango_attr_family_new
+  (c-name "pango_attr_family_new")
+  (is-constructor-of "PangoAttrFamily")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("const-char*" "family")
+  )
+)
+
+(define-function pango_attr_foreground_new
+  (c-name "pango_attr_foreground_new")
+  (is-constructor-of "PangoAttrForeground")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("guint16" "red")
+    '("guint16" "green")
+    '("guint16" "blue")
+  )
+)
+
+(define-function pango_attr_background_new
+  (c-name "pango_attr_background_new")
+  (is-constructor-of "PangoAttrBackground")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("guint16" "red")
+    '("guint16" "green")
+    '("guint16" "blue")
+  )
+)
+
+(define-function pango_attr_size_new
+  (c-name "pango_attr_size_new")
+  (is-constructor-of "PangoAttrSize")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("int" "size")
+  )
+)
+
+(define-function pango_attr_size_new_absolute
+  (c-name "pango_attr_size_new_absolute")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("int" "size")
+  )
+)
+
+(define-function pango_attr_style_new
+  (c-name "pango_attr_style_new")
+  (is-constructor-of "PangoAttrStyle")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoStyle" "style")
+  )
+)
+
+(define-function pango_attr_weight_new
+  (c-name "pango_attr_weight_new")
+  (is-constructor-of "PangoAttrWeight")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoWeight" "weight")
+  )
+)
+
+(define-function pango_attr_variant_new
+  (c-name "pango_attr_variant_new")
+  (is-constructor-of "PangoAttrVariant")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoVariant" "variant")
+  )
+)
+
+(define-function pango_attr_stretch_new
+  (c-name "pango_attr_stretch_new")
+  (is-constructor-of "PangoAttrStretch")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoStretch" "stretch")
+  )
+)
+
+(define-function pango_attr_font_desc_new
+  (c-name "pango_attr_font_desc_new")
+  (is-constructor-of "PangoAttrFontDesc")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("const-PangoFontDescription*" "desc")
+  )
+)
+
+(define-function pango_attr_underline_new
+  (c-name "pango_attr_underline_new")
+  (is-constructor-of "PangoAttrUnderline")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoUnderline" "underline")
+  )
+)
+
+(define-function pango_attr_underline_color_new
+  (c-name "pango_attr_underline_color_new")
+  (is-constructor-of "PangoAttrUnderlineColor")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("guint16" "red")
+    '("guint16" "green")
+    '("guint16" "blue")
+  )
+)
+
+(define-function pango_attr_strikethrough_new
+  (c-name "pango_attr_strikethrough_new")
+  (is-constructor-of "PangoAttrStrikethrough")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("gboolean" "strikethrough")
+  )
+)
+
+(define-function pango_attr_strikethrough_color_new
+  (c-name "pango_attr_strikethrough_color_new")
+  (is-constructor-of "PangoAttrStrikethroughColor")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("guint16" "red")
+    '("guint16" "green")
+    '("guint16" "blue")
+  )
+)
+
+(define-function pango_attr_rise_new
+  (c-name "pango_attr_rise_new")
+  (is-constructor-of "PangoAttrRise")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("int" "rise")
+  )
+)
+
+(define-function pango_attr_baseline_shift_new
+  (c-name "pango_attr_baseline_shift_new")
+  (is-constructor-of "PangoAttrBaselineShift")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("int" "shift")
+  )
+)
+
+(define-function pango_attr_font_scale_new
+  (c-name "pango_attr_font_scale_new")
+  (is-constructor-of "PangoAttrFontScale")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoFontScale" "scale")
+  )
+)
+
+(define-function pango_attr_scale_new
+  (c-name "pango_attr_scale_new")
+  (is-constructor-of "PangoAttrScale")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("double" "scale_factor")
+  )
+)
+
+(define-function pango_attr_fallback_new
+  (c-name "pango_attr_fallback_new")
+  (is-constructor-of "PangoAttrFallback")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("gboolean" "enable_fallback")
+  )
+)
+
+(define-function pango_attr_letter_spacing_new
+  (c-name "pango_attr_letter_spacing_new")
+  (is-constructor-of "PangoAttrLetterSpacing")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("int" "letter_spacing")
+  )
+)
+
+(define-function pango_attr_shape_new
+  (c-name "pango_attr_shape_new")
+  (is-constructor-of "PangoAttrShape")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("const-PangoRectangle*" "ink_rect")
+    '("const-PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-function pango_attr_shape_new_with_data
+  (c-name "pango_attr_shape_new_with_data")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("const-PangoRectangle*" "ink_rect")
+    '("const-PangoRectangle*" "logical_rect")
+    '("gpointer" "data")
+    '("PangoAttrDataCopyFunc" "copy_func")
+    '("GDestroyNotify" "destroy_func")
+  )
+)
+
+(define-function pango_attr_gravity_new
+  (c-name "pango_attr_gravity_new")
+  (is-constructor-of "PangoAttrGravity")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoGravity" "gravity")
+  )
+)
+
+(define-function pango_attr_gravity_hint_new
+  (c-name "pango_attr_gravity_hint_new")
+  (is-constructor-of "PangoAttrGravityHint")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoGravityHint" "hint")
+  )
+)
+
+(define-function pango_attr_font_features_new
+  (c-name "pango_attr_font_features_new")
+  (is-constructor-of "PangoAttrFontFeatures")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("const-char*" "features")
+  )
+)
+
+(define-function pango_attr_foreground_alpha_new
+  (c-name "pango_attr_foreground_alpha_new")
+  (is-constructor-of "PangoAttrForegroundAlpha")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("guint16" "alpha")
+  )
+)
+
+(define-function pango_attr_background_alpha_new
+  (c-name "pango_attr_background_alpha_new")
+  (is-constructor-of "PangoAttrBackgroundAlpha")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("guint16" "alpha")
+  )
+)
+
+(define-function pango_attr_allow_breaks_new
+  (c-name "pango_attr_allow_breaks_new")
+  (is-constructor-of "PangoAttrAllowBreaks")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("gboolean" "allow_breaks")
+  )
+)
+
+(define-function pango_attr_word_new
+  (c-name "pango_attr_word_new")
+  (is-constructor-of "PangoAttrWord")
+  (return-type "PangoAttribute*")
+)
+
+(define-function pango_attr_sentence_new
+  (c-name "pango_attr_sentence_new")
+  (is-constructor-of "PangoAttrSentence")
+  (return-type "PangoAttribute*")
+)
+
+(define-function pango_attr_insert_hyphens_new
+  (c-name "pango_attr_insert_hyphens_new")
+  (is-constructor-of "PangoAttrInsertHyphens")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("gboolean" "insert_hyphens")
+  )
+)
+
+(define-function pango_attr_overline_new
+  (c-name "pango_attr_overline_new")
+  (is-constructor-of "PangoAttrOverline")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoOverline" "overline")
+  )
+)
+
+(define-function pango_attr_overline_color_new
+  (c-name "pango_attr_overline_color_new")
+  (is-constructor-of "PangoAttrOverlineColor")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("guint16" "red")
+    '("guint16" "green")
+    '("guint16" "blue")
+  )
+)
+
+(define-function pango_attr_show_new
+  (c-name "pango_attr_show_new")
+  (is-constructor-of "PangoAttrShow")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoShowFlags" "flags")
+  )
+)
+
+(define-function pango_attr_line_height_new
+  (c-name "pango_attr_line_height_new")
+  (is-constructor-of "PangoAttrLineHeight")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("double" "factor")
+  )
+)
+
+(define-function pango_attr_line_height_new_absolute
+  (c-name "pango_attr_line_height_new_absolute")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("int" "height")
+  )
+)
+
+(define-function pango_attr_text_transform_new
+  (c-name "pango_attr_text_transform_new")
+  (is-constructor-of "PangoAttrTextTransform")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoTextTransform" "transform")
+  )
+)
+
+(define-method as_string
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_string")
+  (return-type "PangoAttrString*")
+)
+
+(define-method as_language
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_language")
+  (return-type "PangoAttrLanguage*")
+)
+
+(define-method as_int
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_int")
+  (return-type "PangoAttrInt*")
+)
+
+(define-method as_size
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_size")
+  (return-type "PangoAttrSize*")
+)
+
+(define-method as_float
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_float")
+  (return-type "PangoAttrFloat*")
+)
+
+(define-method as_color
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_color")
+  (return-type "PangoAttrColor*")
+)
+
+(define-method as_font_desc
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_font_desc")
+  (return-type "PangoAttrFontDesc*")
+)
+
+(define-method as_shape
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_shape")
+  (return-type "PangoAttrShape*")
+)
+
+(define-method as_font_features
+  (of-object "PangoAttribute")
+  (c-name "pango_attribute_as_font_features")
+  (return-type "PangoAttrFontFeatures*")
+)
+
+(define-function pango_attr_list_get_type
+  (c-name "pango_attr_list_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_attr_list_new
+  (c-name "pango_attr_list_new")
+  (is-constructor-of "PangoAttrList")
+  (return-type "PangoAttrList*")
+)
+
+(define-method ref
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_ref")
+  (return-type "PangoAttrList*")
+)
+
+(define-method unref
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_unref")
+  (return-type "none")
+)
+
+(define-method copy
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_copy")
+  (return-type "PangoAttrList*")
+)
+
+(define-method insert
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_insert")
+  (return-type "none")
+  (parameters
+    '("PangoAttribute*" "attr")
+  )
+)
+
+(define-method insert_before
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_insert_before")
+  (return-type "none")
+  (parameters
+    '("PangoAttribute*" "attr")
+  )
+)
+
+(define-method change
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_change")
+  (return-type "none")
+  (parameters
+    '("PangoAttribute*" "attr")
+  )
+)
+
+(define-method splice
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_splice")
+  (return-type "none")
+  (parameters
+    '("PangoAttrList*" "other")
+    '("int" "pos")
+    '("int" "len")
+  )
+)
+
+(define-method update
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_update")
+  (return-type "none")
+  (parameters
+    '("int" "pos")
+    '("int" "remove")
+    '("int" "add")
+  )
+)
+
+(define-method filter
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_filter")
+  (return-type "PangoAttrList*")
+  (parameters
+    '("PangoAttrFilterFunc" "func")
+    '("gpointer" "data")
+  )
+)
+
+(define-method get_attributes
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_get_attributes")
+  (return-type "GSList*")
+)
+
+(define-method equal
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_equal")
+  (return-type "gboolean")
+  (parameters
+    '("PangoAttrList*" "other_list")
+  )
+)
+
+(define-method to_string
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_to_string")
+  (return-type "char*")
+)
+
+(define-function pango_attr_list_from_string
+  (c-name "pango_attr_list_from_string")
+  (return-type "PangoAttrList*")
+  (parameters
+    '("const-char*" "text")
+  )
+)
+
+(define-function pango_attr_iterator_get_type
+  (c-name "pango_attr_iterator_get_type")
+  (return-type "GType")
+)
+
+(define-method get_iterator
+  (of-object "PangoAttrList")
+  (c-name "pango_attr_list_get_iterator")
+  (return-type "PangoAttrIterator*")
+)
+
+(define-method range
+  (of-object "PangoAttrIterator")
+  (c-name "pango_attr_iterator_range")
+  (return-type "none")
+  (parameters
+    '("int*" "start")
+    '("int*" "end")
+  )
+)
+
+(define-method next
+  (of-object "PangoAttrIterator")
+  (c-name "pango_attr_iterator_next")
+  (return-type "gboolean")
+)
+
+(define-method copy
+  (of-object "PangoAttrIterator")
+  (c-name "pango_attr_iterator_copy")
+  (return-type "PangoAttrIterator*")
+)
+
+(define-method destroy
+  (of-object "PangoAttrIterator")
+  (c-name "pango_attr_iterator_destroy")
+  (return-type "none")
+)
+
+(define-method get
+  (of-object "PangoAttrIterator")
+  (c-name "pango_attr_iterator_get")
+  (return-type "PangoAttribute*")
+  (parameters
+    '("PangoAttrType" "type")
+  )
+)
+
+(define-method get_font
+  (of-object "PangoAttrIterator")
+  (c-name "pango_attr_iterator_get_font")
+  (return-type "none")
+  (parameters
+    '("PangoFontDescription*" "desc")
+    '("PangoLanguage**" "language")
+    '("GSList**" "extra_attrs")
+  )
+)
+
+(define-method get_attrs
+  (of-object "PangoAttrIterator")
+  (c-name "pango_attr_iterator_get_attrs")
+  (return-type "GSList*")
+)
+
+
+
+;; From pango-bidi-type.h
+
+(define-function pango_bidi_type_for_unichar
+  (c-name "pango_bidi_type_for_unichar")
+  (return-type "PangoBidiType")
+  (parameters
+    '("gunichar" "ch")
+  )
+)
+
+(define-function pango_unichar_direction
+  (c-name "pango_unichar_direction")
+  (return-type "PangoDirection")
+  (parameters
+    '("gunichar" "ch")
+  )
+)
+
+(define-function pango_find_base_dir
+  (c-name "pango_find_base_dir")
+  (return-type "PangoDirection")
+  (parameters
+    '("const-gchar*" "text")
+    '("gint" "length")
+  )
+)
+
+(define-function pango_get_mirror_char
+  (c-name "pango_get_mirror_char")
+  (return-type "gboolean")
+  (parameters
+    '("gunichar" "ch")
+    '("gunichar*" "mirrored_ch")
+  )
+)
+
+
+
+;; From pango-break.h
+
+(define-function pango_break
+  (c-name "pango_break")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("PangoAnalysis*" "analysis")
+    '("PangoLogAttr*" "attrs")
+    '("int" "attrs_len")
+  )
+)
+
+(define-function pango_get_log_attrs
+  (c-name "pango_get_log_attrs")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("int" "level")
+    '("PangoLanguage*" "language")
+    '("PangoLogAttr*" "attrs")
+    '("int" "attrs_len")
+  )
+)
+
+(define-function pango_default_break
+  (c-name "pango_default_break")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("PangoAnalysis*" "analysis")
+    '("PangoLogAttr*" "attrs")
+    '("int" "attrs_len")
+  )
+)
+
+(define-function pango_tailor_break
+  (c-name "pango_tailor_break")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("PangoAnalysis*" "analysis")
+    '("int" "offset")
+    '("PangoLogAttr*" "attrs")
+    '("int" "attrs_len")
+  )
+)
+
+(define-function pango_attr_break
+  (c-name "pango_attr_break")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("PangoAttrList*" "attr_list")
+    '("int" "offset")
+    '("PangoLogAttr*" "attrs")
+    '("int" "attrs_len")
+  )
+)
+
+
+
+;; From pango-break-table.h
+
+
+
+;; From pangocairo-coretextfont.h
+
+
+
+;; From pangocairo-coretext.h
+
+
+
+;; From pangocairo-fc.h
+
+(define-function pango_cairo_fc_font_map_get_type
+  (c-name "pango_cairo_fc_font_map_get_type")
+  (return-type "GType")
+)
+
+
+
+;; From pangocairo.h
+
+(define-function pango_cairo_font_map_get_type
+  (c-name "pango_cairo_font_map_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_cairo_font_map_new
+  (c-name "pango_cairo_font_map_new")
+  (is-constructor-of "PangoCairoFontMap")
+  (return-type "PangoFontMap*")
+)
+
+(define-function pango_cairo_font_map_new_for_font_type
+  (c-name "pango_cairo_font_map_new_for_font_type")
+  (return-type "PangoFontMap*")
+  (parameters
+    '("cairo_font_type_t" "fonttype")
+  )
+)
+
+(define-function pango_cairo_font_map_get_default
+  (c-name "pango_cairo_font_map_get_default")
+  (return-type "PangoFontMap*")
+)
+
+(define-method set_default
+  (of-object "PangoCairoFontMap")
+  (c-name "pango_cairo_font_map_set_default")
+  (return-type "none")
+)
+
+(define-method get_font_type
+  (of-object "PangoCairoFontMap")
+  (c-name "pango_cairo_font_map_get_font_type")
+  (return-type "cairo_font_type_t")
+)
+
+(define-method set_resolution
+  (of-object "PangoCairoFontMap")
+  (c-name "pango_cairo_font_map_set_resolution")
+  (return-type "none")
+  (parameters
+    '("double" "dpi")
+  )
+)
+
+(define-method get_resolution
+  (of-object "PangoCairoFontMap")
+  (c-name "pango_cairo_font_map_get_resolution")
+  (return-type "double")
+)
+
+(define-method create_context
+  (of-object "PangoCairoFontMap")
+  (c-name "pango_cairo_font_map_create_context")
+  (return-type "PangoContext*")
+)
+
+(define-function pango_cairo_font_get_type
+  (c-name "pango_cairo_font_get_type")
+  (return-type "GType")
+)
+
+(define-method get_scaled_font
+  (of-object "PangoCairoFont")
+  (c-name "pango_cairo_font_get_scaled_font")
+  (return-type "cairo_scaled_font_t*")
+)
+
+(define-function pango_cairo_update_context
+  (c-name "pango_cairo_update_context")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("PangoContext*" "context")
+  )
+)
+
+(define-function pango_cairo_context_set_font_options
+  (c-name "pango_cairo_context_set_font_options")
+  (return-type "none")
+  (parameters
+    '("PangoContext*" "context")
+    '("const-cairo_font_options_t*" "options")
+  )
+)
+
+(define-function pango_cairo_context_get_font_options
+  (c-name "pango_cairo_context_get_font_options")
+  (return-type "const-cairo_font_options_t*")
+  (parameters
+    '("PangoContext*" "context")
+  )
+)
+
+(define-function pango_cairo_context_set_resolution
+  (c-name "pango_cairo_context_set_resolution")
+  (return-type "none")
+  (parameters
+    '("PangoContext*" "context")
+    '("double" "dpi")
+  )
+)
+
+(define-function pango_cairo_context_get_resolution
+  (c-name "pango_cairo_context_get_resolution")
+  (return-type "double")
+  (parameters
+    '("PangoContext*" "context")
+  )
+)
+
+(define-function pango_cairo_context_set_shape_renderer
+  (c-name "pango_cairo_context_set_shape_renderer")
+  (return-type "none")
+  (parameters
+    '("PangoContext*" "context")
+    '("PangoCairoShapeRendererFunc" "func")
+    '("gpointer" "data")
+    '("GDestroyNotify" "dnotify")
+  )
+)
+
+(define-function pango_cairo_context_get_shape_renderer
+  (c-name "pango_cairo_context_get_shape_renderer")
+  (return-type "PangoCairoShapeRendererFunc")
+  (parameters
+    '("PangoContext*" "context")
+    '("gpointer*" "data")
+  )
+)
+
+(define-function pango_cairo_create_context
+  (c-name "pango_cairo_create_context")
+  (return-type "PangoContext*")
+  (parameters
+    '("cairo_t*" "cr")
+  )
+)
+
+(define-function pango_cairo_create_layout
+  (c-name "pango_cairo_create_layout")
+  (return-type "PangoLayout*")
+  (parameters
+    '("cairo_t*" "cr")
+  )
+)
+
+(define-function pango_cairo_update_layout
+  (c-name "pango_cairo_update_layout")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("PangoLayout*" "layout")
+  )
+)
+
+(define-function pango_cairo_show_glyph_string
+  (c-name "pango_cairo_show_glyph_string")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+  )
+)
+
+(define-function pango_cairo_show_glyph_item
+  (c-name "pango_cairo_show_glyph_item")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("const-char*" "text")
+    '("PangoGlyphItem*" "glyph_item")
+  )
+)
+
+(define-function pango_cairo_show_layout_line
+  (c-name "pango_cairo_show_layout_line")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("PangoLayoutLine*" "line")
+  )
+)
+
+(define-function pango_cairo_show_layout
+  (c-name "pango_cairo_show_layout")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("PangoLayout*" "layout")
+  )
+)
+
+(define-function pango_cairo_show_error_underline
+  (c-name "pango_cairo_show_error_underline")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("double" "x")
+    '("double" "y")
+    '("double" "width")
+    '("double" "height")
+  )
+)
+
+(define-function pango_cairo_glyph_string_path
+  (c-name "pango_cairo_glyph_string_path")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+  )
+)
+
+(define-function pango_cairo_layout_line_path
+  (c-name "pango_cairo_layout_line_path")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("PangoLayoutLine*" "line")
+  )
+)
+
+(define-function pango_cairo_layout_path
+  (c-name "pango_cairo_layout_path")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("PangoLayout*" "layout")
+  )
+)
+
+(define-function pango_cairo_error_underline_path
+  (c-name "pango_cairo_error_underline_path")
+  (return-type "none")
+  (parameters
+    '("cairo_t*" "cr")
+    '("double" "x")
+    '("double" "y")
+    '("double" "width")
+    '("double" "height")
+  )
+)
+
+
+
+;; From pangocairo-win32.h
+
+(define-function pango_cairo_win32_font_map_get_type
+  (c-name "pango_cairo_win32_font_map_get_type")
+  (return-type "GType")
+)
+
+
+
+;; From pango-color.h
+
+(define-function pango_color_get_type
+  (c-name "pango_color_get_type")
+  (return-type "GType")
+)
+
+(define-method copy
+  (of-object "PangoColor")
+  (c-name "pango_color_copy")
+  (return-type "PangoColor*")
+)
+
+(define-method free
+  (of-object "PangoColor")
+  (c-name "pango_color_free")
+  (return-type "none")
+)
+
+(define-method parse
+  (of-object "PangoColor")
+  (c-name "pango_color_parse")
+  (return-type "gboolean")
+  (parameters
+    '("const-char*" "spec")
+  )
+)
+
+(define-method parse_with_alpha
+  (of-object "PangoColor")
+  (c-name "pango_color_parse_with_alpha")
+  (return-type "gboolean")
+  (parameters
+    '("guint16*" "alpha")
+    '("const-char*" "spec")
+  )
+)
+
+(define-method to_string
+  (of-object "PangoColor")
+  (c-name "pango_color_to_string")
+  (return-type "char*")
+)
+
+
+
+;; From pango-color-table.h
+
+
+
+;; From pango-context.h
+
+(define-function pango_context_get_type
+  (c-name "pango_context_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_context_new
+  (c-name "pango_context_new")
+  (is-constructor-of "PangoContext")
+  (return-type "PangoContext*")
+)
+
+(define-method changed
+  (of-object "PangoContext")
+  (c-name "pango_context_changed")
+  (return-type "none")
+)
+
+(define-method set_font_map
+  (of-object "PangoContext")
+  (c-name "pango_context_set_font_map")
+  (return-type "none")
+  (parameters
+    '("PangoFontMap*" "font_map")
+  )
+)
+
+(define-method get_font_map
+  (of-object "PangoContext")
+  (c-name "pango_context_get_font_map")
+  (return-type "PangoFontMap*")
+)
+
+(define-method get_serial
+  (of-object "PangoContext")
+  (c-name "pango_context_get_serial")
+  (return-type "guint")
+)
+
+(define-method list_families
+  (of-object "PangoContext")
+  (c-name "pango_context_list_families")
+  (return-type "none")
+  (parameters
+    '("PangoFontFamily***" "families")
+    '("int*" "n_families")
+  )
+)
+
+(define-method load_font
+  (of-object "PangoContext")
+  (c-name "pango_context_load_font")
+  (return-type "PangoFont*")
+  (parameters
+    '("const-PangoFontDescription*" "desc")
+  )
+)
+
+(define-method load_fontset
+  (of-object "PangoContext")
+  (c-name "pango_context_load_fontset")
+  (return-type "PangoFontset*")
+  (parameters
+    '("const-PangoFontDescription*" "desc")
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-method get_metrics
+  (of-object "PangoContext")
+  (c-name "pango_context_get_metrics")
+  (return-type "PangoFontMetrics*")
+  (parameters
+    '("const-PangoFontDescription*" "desc")
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-method set_font_description
+  (of-object "PangoContext")
+  (c-name "pango_context_set_font_description")
+  (return-type "none")
+  (parameters
+    '("const-PangoFontDescription*" "desc")
+  )
+)
+
+(define-method get_font_description
+  (of-object "PangoContext")
+  (c-name "pango_context_get_font_description")
+  (return-type "PangoFontDescription*")
+)
+
+(define-method get_language
+  (of-object "PangoContext")
+  (c-name "pango_context_get_language")
+  (return-type "PangoLanguage*")
+)
+
+(define-method set_language
+  (of-object "PangoContext")
+  (c-name "pango_context_set_language")
+  (return-type "none")
+  (parameters
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-method set_base_dir
+  (of-object "PangoContext")
+  (c-name "pango_context_set_base_dir")
+  (return-type "none")
+  (parameters
+    '("PangoDirection" "direction")
+  )
+)
+
+(define-method get_base_dir
+  (of-object "PangoContext")
+  (c-name "pango_context_get_base_dir")
+  (return-type "PangoDirection")
+)
+
+(define-method set_base_gravity
+  (of-object "PangoContext")
+  (c-name "pango_context_set_base_gravity")
+  (return-type "none")
+  (parameters
+    '("PangoGravity" "gravity")
+  )
+)
+
+(define-method get_base_gravity
+  (of-object "PangoContext")
+  (c-name "pango_context_get_base_gravity")
+  (return-type "PangoGravity")
+)
+
+(define-method get_gravity
+  (of-object "PangoContext")
+  (c-name "pango_context_get_gravity")
+  (return-type "PangoGravity")
+)
+
+(define-method set_gravity_hint
+  (of-object "PangoContext")
+  (c-name "pango_context_set_gravity_hint")
+  (return-type "none")
+  (parameters
+    '("PangoGravityHint" "hint")
+  )
+)
+
+(define-method get_gravity_hint
+  (of-object "PangoContext")
+  (c-name "pango_context_get_gravity_hint")
+  (return-type "PangoGravityHint")
+)
+
+(define-method set_matrix
+  (of-object "PangoContext")
+  (c-name "pango_context_set_matrix")
+  (return-type "none")
+  (parameters
+    '("const-PangoMatrix*" "matrix")
+  )
+)
+
+(define-method get_matrix
+  (of-object "PangoContext")
+  (c-name "pango_context_get_matrix")
+  (return-type "const-PangoMatrix*")
+)
+
+(define-method set_round_glyph_positions
+  (of-object "PangoContext")
+  (c-name "pango_context_set_round_glyph_positions")
+  (return-type "none")
+  (parameters
+    '("gboolean" "round_positions")
+  )
+)
+
+(define-method get_round_glyph_positions
+  (of-object "PangoContext")
+  (c-name "pango_context_get_round_glyph_positions")
+  (return-type "gboolean")
+)
+
+
+
+;; From pangocoretext.h
+
+(define-function pango_core_text_font_get_type
+  (c-name "pango_core_text_font_get_type")
+  (return-type "GType")
+)
+
+(define-method get_ctfont
+  (of-object "PangoCoreTextFont")
+  (c-name "pango_core_text_font_get_ctfont")
+  (return-type "CTFontRef")
+)
+
+
+
+;; From pango-coverage.h
+
+(define-function pango_coverage_get_type
+  (c-name "pango_coverage_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_coverage_new
+  (c-name "pango_coverage_new")
+  (is-constructor-of "PangoCoverage")
+  (return-type "PangoCoverage*")
+)
+
+(define-method ref
+  (of-object "PangoCoverage")
+  (c-name "pango_coverage_ref")
+  (return-type "PangoCoverage*")
+)
+
+(define-method unref
+  (of-object "PangoCoverage")
+  (c-name "pango_coverage_unref")
+  (return-type "none")
+)
+
+(define-method copy
+  (of-object "PangoCoverage")
+  (c-name "pango_coverage_copy")
+  (return-type "PangoCoverage*")
+)
+
+(define-method get
+  (of-object "PangoCoverage")
+  (c-name "pango_coverage_get")
+  (return-type "PangoCoverageLevel")
+  (parameters
+    '("int" "index_")
+  )
+)
+
+(define-method set
+  (of-object "PangoCoverage")
+  (c-name "pango_coverage_set")
+  (return-type "none")
+  (parameters
+    '("int" "index_")
+    '("PangoCoverageLevel" "level")
+  )
+)
+
+(define-method max
+  (of-object "PangoCoverage")
+  (c-name "pango_coverage_max")
+  (return-type "none")
+  (parameters
+    '("PangoCoverage*" "other")
+  )
+)
+
+(define-method to_bytes
+  (of-object "PangoCoverage")
+  (c-name "pango_coverage_to_bytes")
+  (return-type "none")
+  (parameters
+    '("guchar**" "bytes")
+    '("int*" "n_bytes")
+  )
+)
+
+(define-function pango_coverage_from_bytes
+  (c-name "pango_coverage_from_bytes")
+  (return-type "PangoCoverage*")
+  (parameters
+    '("guchar*" "bytes")
+    '("int" "n_bytes")
+  )
+)
+
+
+
+;; From pango-direction.h
+
+
+
+;; From pango-emoji-table.h
+
+
+
+;; From pango-engine.h
+
+(define-function pango_engine_get_type
+  (c-name "pango_engine_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_engine_lang_get_type
+  (c-name "pango_engine_lang_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_engine_shape_get_type
+  (c-name "pango_engine_shape_get_type")
+  (return-type "GType")
+)
+
+(define-function script_engine_list
+  (c-name "script_engine_list")
+  (return-type "none")
+  (parameters
+    '("PangoEngineInfo**" "engines")
+    '("int*" "n_engines")
+  )
+)
+
+(define-function script_engine_init
+  (c-name "script_engine_init")
+  (return-type "none")
+  (parameters
+    '("GTypeModule*" "module")
+  )
+)
+
+(define-function script_engine_exit
+  (c-name "script_engine_exit")
+  (return-type "none")
+)
+
+(define-function script_engine_create
+  (c-name "script_engine_create")
+  (return-type "PangoEngine*")
+  (parameters
+    '("const-char*" "id")
+  )
+)
+
+
+
+;; From pangofc-decoder.h
+
+(define-function pango_fc_decoder_get_type
+  (c-name "pango_fc_decoder_get_type")
+  (return-type "GType")
+)
+
+(define-method get_charset
+  (of-object "PangoFcDecoder")
+  (c-name "pango_fc_decoder_get_charset")
+  (return-type "FcCharSet*")
+  (parameters
+    '("PangoFcFont*" "fcfont")
+  )
+)
+
+(define-method get_glyph
+  (of-object "PangoFcDecoder")
+  (c-name "pango_fc_decoder_get_glyph")
+  (return-type "PangoGlyph")
+  (parameters
+    '("PangoFcFont*" "fcfont")
+    '("guint32" "wc")
+  )
+)
+
+
+
+;; From pangofc-font.h
+
+(define-function pango_fc_font_get_type
+  (c-name "pango_fc_font_get_type")
+  (return-type "GType")
+)
+
+(define-method has_char
+  (of-object "PangoFcFont")
+  (c-name "pango_fc_font_has_char")
+  (return-type "gboolean")
+  (parameters
+    '("gunichar" "wc")
+  )
+)
+
+(define-method get_glyph
+  (of-object "PangoFcFont")
+  (c-name "pango_fc_font_get_glyph")
+  (return-type "guint")
+  (parameters
+    '("gunichar" "wc")
+  )
+)
+
+(define-method get_languages
+  (of-object "PangoFcFont")
+  (c-name "pango_fc_font_get_languages")
+  (return-type "PangoLanguage**")
+)
+
+(define-method get_pattern
+  (of-object "PangoFcFont")
+  (c-name "pango_fc_font_get_pattern")
+  (return-type "FcPattern*")
+)
+
+(define-method get_unknown_glyph
+  (of-object "PangoFcFont")
+  (c-name "pango_fc_font_get_unknown_glyph")
+  (return-type "PangoGlyph")
+  (parameters
+    '("gunichar" "wc")
+  )
+)
+
+(define-method kern_glyphs
+  (of-object "PangoFcFont")
+  (c-name "pango_fc_font_kern_glyphs")
+  (return-type "none")
+  (parameters
+    '("PangoGlyphString*" "glyphs")
+  )
+)
+
+(define-method lock_face
+  (of-object "PangoFcFont")
+  (c-name "pango_fc_font_lock_face")
+  (return-type "FT_Face")
+)
+
+(define-method unlock_face
+  (of-object "PangoFcFont")
+  (c-name "pango_fc_font_unlock_face")
+  (return-type "none")
+)
+
+
+
+;; From pangofc-fontmap.h
+
+(define-function pango_fc_font_map_get_type
+  (c-name "pango_fc_font_map_get_type")
+  (return-type "GType")
+)
+
+(define-method cache_clear
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_cache_clear")
+  (return-type "none")
+)
+
+(define-method config_changed
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_config_changed")
+  (return-type "none")
+)
+
+(define-method set_config
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_set_config")
+  (return-type "none")
+  (parameters
+    '("FcConfig*" "fcconfig")
+  )
+)
+
+(define-method get_config
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_get_config")
+  (return-type "FcConfig*")
+)
+
+(define-method add_decoder_find_func
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_add_decoder_find_func")
+  (return-type "none")
+  (parameters
+    '("PangoFcDecoderFindFunc" "findfunc")
+    '("gpointer" "user_data")
+    '("GDestroyNotify" "dnotify")
+  )
+)
+
+(define-method find_decoder
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_find_decoder")
+  (return-type "PangoFcDecoder*")
+  (parameters
+    '("FcPattern*" "pattern")
+  )
+)
+
+(define-function pango_fc_font_description_from_pattern
+  (c-name "pango_fc_font_description_from_pattern")
+  (return-type "PangoFontDescription*")
+  (parameters
+    '("FcPattern*" "pattern")
+    '("gboolean" "include_size")
+  )
+)
+
+(define-method create_context
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_create_context")
+  (return-type "PangoContext*")
+)
+
+(define-method shutdown
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_shutdown")
+  (return-type "none")
+)
+
+(define-method get_hb_face
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_get_hb_face")
+  (return-type "hb_face_t*")
+  (parameters
+    '("PangoFcFont*" "fcfont")
+  )
+)
+
+(define-method set_default_substitute
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_set_default_substitute")
+  (return-type "none")
+  (parameters
+    '("PangoFcSubstituteFunc" "func")
+    '("gpointer" "data")
+    '("GDestroyNotify" "notify")
+  )
+)
+
+(define-method substitute_changed
+  (of-object "PangoFcFontMap")
+  (c-name "pango_fc_font_map_substitute_changed")
+  (return-type "none")
+)
+
+
+
+;; From pango-font.h
+
+(define-function pango_font_description_get_type
+  (c-name "pango_font_description_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_font_description_new
+  (c-name "pango_font_description_new")
+  (is-constructor-of "PangoFontDescription")
+  (return-type "PangoFontDescription*")
+)
+
+(define-method copy
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_copy")
+  (return-type "PangoFontDescription*")
+)
+
+(define-method copy_static
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_copy_static")
+  (return-type "PangoFontDescription*")
+)
+
+(define-method hash
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_hash")
+  (return-type "guint")
+)
+
+(define-method equal
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_equal")
+  (return-type "gboolean")
+  (parameters
+    '("const-PangoFontDescription*" "desc2")
+  )
+)
+
+(define-method free
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_free")
+  (return-type "none")
+)
+
+(define-function pango_font_descriptions_free
+  (c-name "pango_font_descriptions_free")
+  (return-type "none")
+  (parameters
+    '("PangoFontDescription**" "descs")
+    '("int" "n_descs")
+  )
+)
+
+(define-method set_family
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_family")
+  (return-type "none")
+  (parameters
+    '("const-char*" "family")
+  )
+)
+
+(define-method set_family_static
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_family_static")
+  (return-type "none")
+  (parameters
+    '("const-char*" "family")
+  )
+)
+
+(define-method get_family
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_family")
+  (return-type "const-char*")
+)
+
+(define-method set_style
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_style")
+  (return-type "none")
+  (parameters
+    '("PangoStyle" "style")
+  )
+)
+
+(define-method get_style
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_style")
+  (return-type "PangoStyle")
+)
+
+(define-method set_variant
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_variant")
+  (return-type "none")
+  (parameters
+    '("PangoVariant" "variant")
+  )
+)
+
+(define-method get_variant
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_variant")
+  (return-type "PangoVariant")
+)
+
+(define-method set_weight
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_weight")
+  (return-type "none")
+  (parameters
+    '("PangoWeight" "weight")
+  )
+)
+
+(define-method get_weight
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_weight")
+  (return-type "PangoWeight")
+)
+
+(define-method set_stretch
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_stretch")
+  (return-type "none")
+  (parameters
+    '("PangoStretch" "stretch")
+  )
+)
+
+(define-method get_stretch
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_stretch")
+  (return-type "PangoStretch")
+)
+
+(define-method set_size
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_size")
+  (return-type "none")
+  (parameters
+    '("gint" "size")
+  )
+)
+
+(define-method get_size
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_size")
+  (return-type "gint")
+)
+
+(define-method set_absolute_size
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_absolute_size")
+  (return-type "none")
+  (parameters
+    '("double" "size")
+  )
+)
+
+(define-method get_size_is_absolute
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_size_is_absolute")
+  (return-type "gboolean")
+)
+
+(define-method set_gravity
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_gravity")
+  (return-type "none")
+  (parameters
+    '("PangoGravity" "gravity")
+  )
+)
+
+(define-method get_gravity
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_gravity")
+  (return-type "PangoGravity")
+)
+
+(define-method set_variations_static
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_variations_static")
+  (return-type "none")
+  (parameters
+    '("const-char*" "variations")
+  )
+)
+
+(define-method set_variations
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_set_variations")
+  (return-type "none")
+  (parameters
+    '("const-char*" "variations")
+  )
+)
+
+(define-method get_variations
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_variations")
+  (return-type "const-char*")
+)
+
+(define-method get_set_fields
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_get_set_fields")
+  (return-type "PangoFontMask")
+)
+
+(define-method unset_fields
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_unset_fields")
+  (return-type "none")
+  (parameters
+    '("PangoFontMask" "to_unset")
+  )
+)
+
+(define-method merge
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_merge")
+  (return-type "none")
+  (parameters
+    '("const-PangoFontDescription*" "desc_to_merge")
+    '("gboolean" "replace_existing")
+  )
+)
+
+(define-method merge_static
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_merge_static")
+  (return-type "none")
+  (parameters
+    '("const-PangoFontDescription*" "desc_to_merge")
+    '("gboolean" "replace_existing")
+  )
+)
+
+(define-method better_match
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_better_match")
+  (return-type "gboolean")
+  (parameters
+    '("const-PangoFontDescription*" "old_match")
+    '("const-PangoFontDescription*" "new_match")
+  )
+)
+
+(define-function pango_font_description_from_string
+  (c-name "pango_font_description_from_string")
+  (return-type "PangoFontDescription*")
+  (parameters
+    '("const-char*" "str")
+  )
+)
+
+(define-method to_string
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_to_string")
+  (return-type "char*")
+)
+
+(define-method to_filename
+  (of-object "PangoFontDescription")
+  (c-name "pango_font_description_to_filename")
+  (return-type "char*")
+)
+
+(define-function pango_font_metrics_get_type
+  (c-name "pango_font_metrics_get_type")
+  (return-type "GType")
+)
+
+(define-method ref
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_ref")
+  (return-type "PangoFontMetrics*")
+)
+
+(define-method unref
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_unref")
+  (return-type "none")
+)
+
+(define-method get_ascent
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_ascent")
+  (return-type "int")
+)
+
+(define-method get_descent
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_descent")
+  (return-type "int")
+)
+
+(define-method get_height
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_height")
+  (return-type "int")
+)
+
+(define-method get_approximate_char_width
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_approximate_char_width")
+  (return-type "int")
+)
+
+(define-method get_approximate_digit_width
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_approximate_digit_width")
+  (return-type "int")
+)
+
+(define-method get_underline_position
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_underline_position")
+  (return-type "int")
+)
+
+(define-method get_underline_thickness
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_underline_thickness")
+  (return-type "int")
+)
+
+(define-method get_strikethrough_position
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_strikethrough_position")
+  (return-type "int")
+)
+
+(define-method get_strikethrough_thickness
+  (of-object "PangoFontMetrics")
+  (c-name "pango_font_metrics_get_strikethrough_thickness")
+  (return-type "int")
+)
+
+(define-function pango_font_family_get_type
+  (c-name "pango_font_family_get_type")
+  (return-type "GType")
+)
+
+(define-method list_faces
+  (of-object "PangoFontFamily")
+  (c-name "pango_font_family_list_faces")
+  (return-type "none")
+  (parameters
+    '("PangoFontFace***" "faces")
+    '("int*" "n_faces")
+  )
+)
+
+(define-method get_name
+  (of-object "PangoFontFamily")
+  (c-name "pango_font_family_get_name")
+  (return-type "const-char*")
+)
+
+(define-method is_monospace
+  (of-object "PangoFontFamily")
+  (c-name "pango_font_family_is_monospace")
+  (return-type "gboolean")
+)
+
+(define-method is_variable
+  (of-object "PangoFontFamily")
+  (c-name "pango_font_family_is_variable")
+  (return-type "gboolean")
+)
+
+(define-method get_face
+  (of-object "PangoFontFamily")
+  (c-name "pango_font_family_get_face")
+  (return-type "PangoFontFace*")
+  (parameters
+    '("const-char*" "name")
+  )
+)
+
+(define-function pango_font_face_get_type
+  (c-name "pango_font_face_get_type")
+  (return-type "GType")
+)
+
+(define-method describe
+  (of-object "PangoFontFace")
+  (c-name "pango_font_face_describe")
+  (return-type "PangoFontDescription*")
+)
+
+(define-method get_face_name
+  (of-object "PangoFontFace")
+  (c-name "pango_font_face_get_face_name")
+  (return-type "const-char*")
+)
+
+(define-method list_sizes
+  (of-object "PangoFontFace")
+  (c-name "pango_font_face_list_sizes")
+  (return-type "none")
+  (parameters
+    '("int**" "sizes")
+    '("int*" "n_sizes")
+  )
+)
+
+(define-method is_synthesized
+  (of-object "PangoFontFace")
+  (c-name "pango_font_face_is_synthesized")
+  (return-type "gboolean")
+)
+
+(define-method get_family
+  (of-object "PangoFontFace")
+  (c-name "pango_font_face_get_family")
+  (return-type "PangoFontFamily*")
+)
+
+(define-function pango_font_get_type
+  (c-name "pango_font_get_type")
+  (return-type "GType")
+)
+
+(define-method describe
+  (of-object "PangoFont")
+  (c-name "pango_font_describe")
+  (return-type "PangoFontDescription*")
+)
+
+(define-method describe_with_absolute_size
+  (of-object "PangoFont")
+  (c-name "pango_font_describe_with_absolute_size")
+  (return-type "PangoFontDescription*")
+)
+
+(define-method get_coverage
+  (of-object "PangoFont")
+  (c-name "pango_font_get_coverage")
+  (return-type "PangoCoverage*")
+  (parameters
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-method find_shaper
+  (of-object "PangoFont")
+  (c-name "pango_font_find_shaper")
+  (return-type "PangoEngineShape*")
+  (parameters
+    '("PangoLanguage*" "language")
+    '("guint32" "ch")
+  )
+)
+
+(define-method get_metrics
+  (of-object "PangoFont")
+  (c-name "pango_font_get_metrics")
+  (return-type "PangoFontMetrics*")
+  (parameters
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-method get_glyph_extents
+  (of-object "PangoFont")
+  (c-name "pango_font_get_glyph_extents")
+  (return-type "none")
+  (parameters
+    '("PangoGlyph" "glyph")
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_font_map
+  (of-object "PangoFont")
+  (c-name "pango_font_get_font_map")
+  (return-type "PangoFontMap*")
+)
+
+(define-method get_face
+  (of-object "PangoFont")
+  (c-name "pango_font_get_face")
+  (return-type "PangoFontFace*")
+)
+
+(define-method has_char
+  (of-object "PangoFont")
+  (c-name "pango_font_has_char")
+  (return-type "gboolean")
+  (parameters
+    '("gunichar" "wc")
+  )
+)
+
+(define-method get_features
+  (of-object "PangoFont")
+  (c-name "pango_font_get_features")
+  (return-type "none")
+  (parameters
+    '("hb_feature_t*" "features")
+    '("guint" "len")
+    '("guint*" "num_features")
+  )
+)
+
+(define-method get_hb_font
+  (of-object "PangoFont")
+  (c-name "pango_font_get_hb_font")
+  (return-type "hb_font_t*")
+)
+
+(define-method get_languages
+  (of-object "PangoFont")
+  (c-name "pango_font_get_languages")
+  (return-type "PangoLanguage**")
+)
+
+(define-method serialize
+  (of-object "PangoFont")
+  (c-name "pango_font_serialize")
+  (return-type "GBytes*")
+)
+
+(define-function pango_font_deserialize
+  (c-name "pango_font_deserialize")
+  (return-type "PangoFont*")
+  (parameters
+    '("PangoContext*" "context")
+    '("GBytes*" "bytes")
+    '("GError**" "error")
+  )
+)
+
+
+
+;; From pango-fontmap.h
+
+(define-function pango_font_map_get_type
+  (c-name "pango_font_map_get_type")
+  (return-type "GType")
+)
+
+(define-method create_context
+  (of-object "PangoFontMap")
+  (c-name "pango_font_map_create_context")
+  (return-type "PangoContext*")
+)
+
+(define-method load_font
+  (of-object "PangoFontMap")
+  (c-name "pango_font_map_load_font")
+  (return-type "PangoFont*")
+  (parameters
+    '("PangoContext*" "context")
+    '("const-PangoFontDescription*" "desc")
+  )
+)
+
+(define-method load_fontset
+  (of-object "PangoFontMap")
+  (c-name "pango_font_map_load_fontset")
+  (return-type "PangoFontset*")
+  (parameters
+    '("PangoContext*" "context")
+    '("const-PangoFontDescription*" "desc")
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-method list_families
+  (of-object "PangoFontMap")
+  (c-name "pango_font_map_list_families")
+  (return-type "none")
+  (parameters
+    '("PangoFontFamily***" "families")
+    '("int*" "n_families")
+  )
+)
+
+(define-method get_serial
+  (of-object "PangoFontMap")
+  (c-name "pango_font_map_get_serial")
+  (return-type "guint")
+)
+
+(define-method changed
+  (of-object "PangoFontMap")
+  (c-name "pango_font_map_changed")
+  (return-type "none")
+)
+
+(define-method get_family
+  (of-object "PangoFontMap")
+  (c-name "pango_font_map_get_family")
+  (return-type "PangoFontFamily*")
+  (parameters
+    '("const-char*" "name")
+  )
+)
+
+
+
+;; From pango-fontset.h
+
+(define-function pango_fontset_get_type
+  (c-name "pango_fontset_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_fontset_simple_get_type
+  (c-name "pango_fontset_simple_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_fontset_simple_new
+  (c-name "pango_fontset_simple_new")
+  (is-constructor-of "PangoFontsetSimple")
+  (return-type "PangoFontsetSimple*")
+  (parameters
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-method append
+  (of-object "PangoFontsetSimple")
+  (c-name "pango_fontset_simple_append")
+  (return-type "none")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-method size
+  (of-object "PangoFontsetSimple")
+  (c-name "pango_fontset_simple_size")
+  (return-type "int")
+)
+
+(define-method get_font
+  (of-object "PangoFontset")
+  (c-name "pango_fontset_get_font")
+  (return-type "PangoFont*")
+  (parameters
+    '("guint" "wc")
+  )
+)
+
+(define-method get_metrics
+  (of-object "PangoFontset")
+  (c-name "pango_fontset_get_metrics")
+  (return-type "PangoFontMetrics*")
+)
+
+(define-method foreach
+  (of-object "PangoFontset")
+  (c-name "pango_fontset_foreach")
+  (return-type "none")
+  (parameters
+    '("PangoFontsetForeachFunc" "func")
+    '("gpointer" "data")
+  )
+)
+
+
+
+;; From pangoft2.h
+
+(define-function pango_ft2_render
+  (c-name "pango_ft2_render")
+  (return-type "none")
+  (parameters
+    '("FT_Bitmap*" "bitmap")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("gint" "x")
+    '("gint" "y")
+  )
+)
+
+(define-function pango_ft2_render_transformed
+  (c-name "pango_ft2_render_transformed")
+  (return-type "none")
+  (parameters
+    '("FT_Bitmap*" "bitmap")
+    '("const-PangoMatrix*" "matrix")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_ft2_render_layout_line
+  (c-name "pango_ft2_render_layout_line")
+  (return-type "none")
+  (parameters
+    '("FT_Bitmap*" "bitmap")
+    '("PangoLayoutLine*" "line")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_ft2_render_layout_line_subpixel
+  (c-name "pango_ft2_render_layout_line_subpixel")
+  (return-type "none")
+  (parameters
+    '("FT_Bitmap*" "bitmap")
+    '("PangoLayoutLine*" "line")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_ft2_render_layout
+  (c-name "pango_ft2_render_layout")
+  (return-type "none")
+  (parameters
+    '("FT_Bitmap*" "bitmap")
+    '("PangoLayout*" "layout")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_ft2_render_layout_subpixel
+  (c-name "pango_ft2_render_layout_subpixel")
+  (return-type "none")
+  (parameters
+    '("FT_Bitmap*" "bitmap")
+    '("PangoLayout*" "layout")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_ft2_font_map_get_type
+  (c-name "pango_ft2_font_map_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_ft2_font_map_new
+  (c-name "pango_ft2_font_map_new")
+  (is-constructor-of "PangoFt2FontMap")
+  (return-type "PangoFontMap*")
+)
+
+(define-method set_resolution
+  (of-object "PangoFT2FontMap")
+  (c-name "pango_ft2_font_map_set_resolution")
+  (return-type "none")
+  (parameters
+    '("double" "dpi_x")
+    '("double" "dpi_y")
+  )
+)
+
+(define-method set_default_substitute
+  (of-object "PangoFT2FontMap")
+  (c-name "pango_ft2_font_map_set_default_substitute")
+  (return-type "none")
+  (parameters
+    '("PangoFT2SubstituteFunc" "func")
+    '("gpointer" "data")
+    '("GDestroyNotify" "notify")
+  )
+)
+
+(define-method substitute_changed
+  (of-object "PangoFT2FontMap")
+  (c-name "pango_ft2_font_map_substitute_changed")
+  (return-type "none")
+)
+
+(define-method create_context
+  (of-object "PangoFT2FontMap")
+  (c-name "pango_ft2_font_map_create_context")
+  (return-type "PangoContext*")
+)
+
+(define-function pango_ft2_get_context
+  (c-name "pango_ft2_get_context")
+  (return-type "PangoContext*")
+  (parameters
+    '("double" "dpi_x")
+    '("double" "dpi_y")
+  )
+)
+
+(define-function pango_ft2_font_map_for_display
+  (c-name "pango_ft2_font_map_for_display")
+  (return-type "PangoFontMap*")
+)
+
+(define-function pango_ft2_shutdown_display
+  (c-name "pango_ft2_shutdown_display")
+  (return-type "none")
+)
+
+(define-function pango_ft2_get_unknown_glyph
+  (c-name "pango_ft2_get_unknown_glyph")
+  (return-type "PangoGlyph")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_ft2_font_get_kerning
+  (c-name "pango_ft2_font_get_kerning")
+  (return-type "int")
+  (parameters
+    '("PangoFont*" "font")
+    '("PangoGlyph" "left")
+    '("PangoGlyph" "right")
+  )
+)
+
+(define-function pango_ft2_font_get_face
+  (c-name "pango_ft2_font_get_face")
+  (return-type "FT_Face")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_ft2_font_get_coverage
+  (c-name "pango_ft2_font_get_coverage")
+  (return-type "PangoCoverage*")
+  (parameters
+    '("PangoFont*" "font")
+    '("PangoLanguage*" "language")
+  )
+)
+
+
+
+;; From pango-glyph.h
+
+(define-function pango_glyph_string_get_type
+  (c-name "pango_glyph_string_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_glyph_string_new
+  (c-name "pango_glyph_string_new")
+  (is-constructor-of "PangoGlyphString")
+  (return-type "PangoGlyphString*")
+)
+
+(define-method set_size
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_set_size")
+  (return-type "none")
+  (parameters
+    '("int" "new_len")
+  )
+)
+
+(define-method copy
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_copy")
+  (return-type "PangoGlyphString*")
+)
+
+(define-method free
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_free")
+  (return-type "none")
+)
+
+(define-method extents
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_extents")
+  (return-type "none")
+  (parameters
+    '("PangoFont*" "font")
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_width
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_get_width")
+  (return-type "int")
+)
+
+(define-method extents_range
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_extents_range")
+  (return-type "none")
+  (parameters
+    '("int" "start")
+    '("int" "end")
+    '("PangoFont*" "font")
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_logical_widths
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_get_logical_widths")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("int" "embedding_level")
+    '("int*" "logical_widths")
+  )
+)
+
+(define-method index_to_x
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_index_to_x")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("PangoAnalysis*" "analysis")
+    '("int" "index_")
+    '("gboolean" "trailing")
+    '("int*" "x_pos")
+  )
+)
+
+(define-method x_to_index
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_x_to_index")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("PangoAnalysis*" "analysis")
+    '("int" "x_pos")
+    '("int*" "index_")
+    '("int*" "trailing")
+  )
+)
+
+(define-method index_to_x_full
+  (of-object "PangoGlyphString")
+  (c-name "pango_glyph_string_index_to_x_full")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("PangoAnalysis*" "analysis")
+    '("PangoLogAttr*" "attrs")
+    '("int" "index_")
+    '("gboolean" "trailing")
+    '("int*" "x_pos")
+  )
+)
+
+(define-function pango_shape
+  (c-name "pango_shape")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("const-PangoAnalysis*" "analysis")
+    '("PangoGlyphString*" "glyphs")
+  )
+)
+
+(define-function pango_shape_full
+  (c-name "pango_shape_full")
+  (return-type "none")
+  (parameters
+    '("const-char*" "item_text")
+    '("int" "item_length")
+    '("const-char*" "paragraph_text")
+    '("int" "paragraph_length")
+    '("const-PangoAnalysis*" "analysis")
+    '("PangoGlyphString*" "glyphs")
+  )
+)
+
+(define-function pango_shape_with_flags
+  (c-name "pango_shape_with_flags")
+  (return-type "none")
+  (parameters
+    '("const-char*" "item_text")
+    '("int" "item_length")
+    '("const-char*" "paragraph_text")
+    '("int" "paragraph_length")
+    '("const-PangoAnalysis*" "analysis")
+    '("PangoGlyphString*" "glyphs")
+    '("PangoShapeFlags" "flags")
+  )
+)
+
+(define-function pango_shape_item
+  (c-name "pango_shape_item")
+  (return-type "none")
+  (parameters
+    '("PangoItem*" "item")
+    '("const-char*" "paragraph_text")
+    '("int" "paragraph_length")
+    '("PangoLogAttr*" "log_attrs")
+    '("PangoGlyphString*" "glyphs")
+    '("PangoShapeFlags" "flags")
+  )
+)
+
+
+
+;; From pango-glyph-item.h
+
+(define-function pango_glyph_item_get_type
+  (c-name "pango_glyph_item_get_type")
+  (return-type "GType")
+)
+
+(define-method split
+  (of-object "PangoGlyphItem")
+  (c-name "pango_glyph_item_split")
+  (return-type "PangoGlyphItem*")
+  (parameters
+    '("const-char*" "text")
+    '("int" "split_index")
+  )
+)
+
+(define-method copy
+  (of-object "PangoGlyphItem")
+  (c-name "pango_glyph_item_copy")
+  (return-type "PangoGlyphItem*")
+)
+
+(define-method free
+  (of-object "PangoGlyphItem")
+  (c-name "pango_glyph_item_free")
+  (return-type "none")
+)
+
+(define-method apply_attrs
+  (of-object "PangoGlyphItem")
+  (c-name "pango_glyph_item_apply_attrs")
+  (return-type "GSList*")
+  (parameters
+    '("const-char*" "text")
+    '("PangoAttrList*" "list")
+  )
+)
+
+(define-method letter_space
+  (of-object "PangoGlyphItem")
+  (c-name "pango_glyph_item_letter_space")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("PangoLogAttr*" "log_attrs")
+    '("int" "letter_spacing")
+  )
+)
+
+(define-method get_logical_widths
+  (of-object "PangoGlyphItem")
+  (c-name "pango_glyph_item_get_logical_widths")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int*" "logical_widths")
+  )
+)
+
+(define-function pango_glyph_item_iter_get_type
+  (c-name "pango_glyph_item_iter_get_type")
+  (return-type "GType")
+)
+
+(define-method copy
+  (of-object "PangoGlyphItemIter")
+  (c-name "pango_glyph_item_iter_copy")
+  (return-type "PangoGlyphItemIter*")
+)
+
+(define-method free
+  (of-object "PangoGlyphItemIter")
+  (c-name "pango_glyph_item_iter_free")
+  (return-type "none")
+)
+
+(define-method init_start
+  (of-object "PangoGlyphItemIter")
+  (c-name "pango_glyph_item_iter_init_start")
+  (return-type "gboolean")
+  (parameters
+    '("PangoGlyphItem*" "glyph_item")
+    '("const-char*" "text")
+  )
+)
+
+(define-method init_end
+  (of-object "PangoGlyphItemIter")
+  (c-name "pango_glyph_item_iter_init_end")
+  (return-type "gboolean")
+  (parameters
+    '("PangoGlyphItem*" "glyph_item")
+    '("const-char*" "text")
+  )
+)
+
+(define-method next_cluster
+  (of-object "PangoGlyphItemIter")
+  (c-name "pango_glyph_item_iter_next_cluster")
+  (return-type "gboolean")
+)
+
+(define-method prev_cluster
+  (of-object "PangoGlyphItemIter")
+  (c-name "pango_glyph_item_iter_prev_cluster")
+  (return-type "gboolean")
+)
+
+
+
+;; From pango-gravity.h
+
+(define-method to_rotation
+  (of-object "PangoGravity")
+  (c-name "pango_gravity_to_rotation")
+  (return-type "double")
+)
+
+(define-function pango_gravity_get_for_matrix
+  (c-name "pango_gravity_get_for_matrix")
+  (return-type "PangoGravity")
+  (parameters
+    '("const-PangoMatrix*" "matrix")
+  )
+)
+
+(define-function pango_gravity_get_for_script
+  (c-name "pango_gravity_get_for_script")
+  (return-type "PangoGravity")
+  (parameters
+    '("PangoScript" "script")
+    '("PangoGravity" "base_gravity")
+    '("PangoGravityHint" "hint")
+  )
+)
+
+(define-function pango_gravity_get_for_script_and_width
+  (c-name "pango_gravity_get_for_script_and_width")
+  (return-type "PangoGravity")
+  (parameters
+    '("PangoScript" "script")
+    '("gboolean" "wide")
+    '("PangoGravity" "base_gravity")
+    '("PangoGravityHint" "hint")
+  )
+)
+
+
+
+;; From pango.h
+
+
+
+;; From pango-impl-utils.h
+
+(define-function pango_is_default_ignorable
+  (c-name "pango_is_default_ignorable")
+  (return-type "gboolean")
+  (parameters
+    '("gunichar" "ch")
+  )
+)
+
+
+
+;; From pango-item.h
+
+(define-function pango_item_get_type
+  (c-name "pango_item_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_item_new
+  (c-name "pango_item_new")
+  (is-constructor-of "PangoItem")
+  (return-type "PangoItem*")
+)
+
+(define-method copy
+  (of-object "PangoItem")
+  (c-name "pango_item_copy")
+  (return-type "PangoItem*")
+)
+
+(define-method free
+  (of-object "PangoItem")
+  (c-name "pango_item_free")
+  (return-type "none")
+)
+
+(define-method split
+  (of-object "PangoItem")
+  (c-name "pango_item_split")
+  (return-type "PangoItem*")
+  (parameters
+    '("int" "split_index")
+    '("int" "split_offset")
+  )
+)
+
+(define-method apply_attrs
+  (of-object "PangoItem")
+  (c-name "pango_item_apply_attrs")
+  (return-type "none")
+  (parameters
+    '("PangoAttrIterator*" "iter")
+  )
+)
+
+(define-function pango_reorder_items
+  (c-name "pango_reorder_items")
+  (return-type "GList*")
+  (parameters
+    '("GList*" "items")
+  )
+)
+
+(define-function pango_itemize
+  (c-name "pango_itemize")
+  (return-type "GList*")
+  (parameters
+    '("PangoContext*" "context")
+    '("const-char*" "text")
+    '("int" "start_index")
+    '("int" "length")
+    '("PangoAttrList*" "attrs")
+    '("PangoAttrIterator*" "cached_iter")
+  )
+)
+
+(define-function pango_itemize_with_base_dir
+  (c-name "pango_itemize_with_base_dir")
+  (return-type "GList*")
+  (parameters
+    '("PangoContext*" "context")
+    '("PangoDirection" "base_dir")
+    '("const-char*" "text")
+    '("int" "start_index")
+    '("int" "length")
+    '("PangoAttrList*" "attrs")
+    '("PangoAttrIterator*" "cached_iter")
+  )
+)
+
+
+
+;; From pango-language.h
+
+(define-function pango_language_get_type
+  (c-name "pango_language_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_language_get_default
+  (c-name "pango_language_get_default")
+  (return-type "PangoLanguage*")
+)
+
+(define-function pango_language_get_preferred
+  (c-name "pango_language_get_preferred")
+  (return-type "PangoLanguage**")
+)
+
+(define-function pango_language_from_string
+  (c-name "pango_language_from_string")
+  (return-type "PangoLanguage*")
+  (parameters
+    '("const-char*" "language")
+  )
+)
+
+(define-method to_string
+  (of-object "PangoLanguage")
+  (c-name "pango_language_to_string")
+  (return-type "const-char*")
+)
+
+(define-method get_sample_string
+  (of-object "PangoLanguage")
+  (c-name "pango_language_get_sample_string")
+  (return-type "const-char*")
+)
+
+(define-method matches
+  (of-object "PangoLanguage")
+  (c-name "pango_language_matches")
+  (return-type "gboolean")
+  (parameters
+    '("const-char*" "range_list")
+  )
+)
+
+(define-method includes_script
+  (of-object "PangoLanguage")
+  (c-name "pango_language_includes_script")
+  (return-type "gboolean")
+  (parameters
+    '("PangoScript" "script")
+  )
+)
+
+(define-method get_scripts
+  (of-object "PangoLanguage")
+  (c-name "pango_language_get_scripts")
+  (return-type "const-PangoScript*")
+  (parameters
+    '("int*" "num_scripts")
+  )
+)
+
+
+
+;; From pango-language-sample-table.h
+
+
+
+;; From pango-layout.h
+
+(define-function pango_layout_get_type
+  (c-name "pango_layout_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_layout_new
+  (c-name "pango_layout_new")
+  (is-constructor-of "PangoLayout")
+  (return-type "PangoLayout*")
+  (parameters
+    '("PangoContext*" "context")
+  )
+)
+
+(define-method copy
+  (of-object "PangoLayout")
+  (c-name "pango_layout_copy")
+  (return-type "PangoLayout*")
+)
+
+(define-method get_context
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_context")
+  (return-type "PangoContext*")
+)
+
+(define-method set_attributes
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_attributes")
+  (return-type "none")
+  (parameters
+    '("PangoAttrList*" "attrs")
+  )
+)
+
+(define-method get_attributes
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_attributes")
+  (return-type "PangoAttrList*")
+)
+
+(define-method set_text
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_text")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+  )
+)
+
+(define-method get_text
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_text")
+  (return-type "const-char*")
+)
+
+(define-method get_character_count
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_character_count")
+  (return-type "gint")
+)
+
+(define-method set_markup
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_markup")
+  (return-type "none")
+  (parameters
+    '("const-char*" "markup")
+    '("int" "length")
+  )
+)
+
+(define-method set_markup_with_accel
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_markup_with_accel")
+  (return-type "none")
+  (parameters
+    '("const-char*" "markup")
+    '("int" "length")
+    '("gunichar" "accel_marker")
+    '("gunichar*" "accel_char")
+  )
+)
+
+(define-method set_font_description
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_font_description")
+  (return-type "none")
+  (parameters
+    '("const-PangoFontDescription*" "desc")
+  )
+)
+
+(define-method get_font_description
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_font_description")
+  (return-type "const-PangoFontDescription*")
+)
+
+(define-method set_width
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_width")
+  (return-type "none")
+  (parameters
+    '("int" "width")
+  )
+)
+
+(define-method get_width
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_width")
+  (return-type "int")
+)
+
+(define-method set_height
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_height")
+  (return-type "none")
+  (parameters
+    '("int" "height")
+  )
+)
+
+(define-method get_height
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_height")
+  (return-type "int")
+)
+
+(define-method set_wrap
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_wrap")
+  (return-type "none")
+  (parameters
+    '("PangoWrapMode" "wrap")
+  )
+)
+
+(define-method get_wrap
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_wrap")
+  (return-type "PangoWrapMode")
+)
+
+(define-method is_wrapped
+  (of-object "PangoLayout")
+  (c-name "pango_layout_is_wrapped")
+  (return-type "gboolean")
+)
+
+(define-method set_indent
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_indent")
+  (return-type "none")
+  (parameters
+    '("int" "indent")
+  )
+)
+
+(define-method get_indent
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_indent")
+  (return-type "int")
+)
+
+(define-method set_spacing
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_spacing")
+  (return-type "none")
+  (parameters
+    '("int" "spacing")
+  )
+)
+
+(define-method get_spacing
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_spacing")
+  (return-type "int")
+)
+
+(define-method set_line_spacing
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_line_spacing")
+  (return-type "none")
+  (parameters
+    '("float" "factor")
+  )
+)
+
+(define-method get_line_spacing
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_line_spacing")
+  (return-type "float")
+)
+
+(define-method set_justify
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_justify")
+  (return-type "none")
+  (parameters
+    '("gboolean" "justify")
+  )
+)
+
+(define-method get_justify
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_justify")
+  (return-type "gboolean")
+)
+
+(define-method set_justify_last_line
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_justify_last_line")
+  (return-type "none")
+  (parameters
+    '("gboolean" "justify")
+  )
+)
+
+(define-method get_justify_last_line
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_justify_last_line")
+  (return-type "gboolean")
+)
+
+(define-method set_auto_dir
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_auto_dir")
+  (return-type "none")
+  (parameters
+    '("gboolean" "auto_dir")
+  )
+)
+
+(define-method get_auto_dir
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_auto_dir")
+  (return-type "gboolean")
+)
+
+(define-method set_alignment
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_alignment")
+  (return-type "none")
+  (parameters
+    '("PangoAlignment" "alignment")
+  )
+)
+
+(define-method get_alignment
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_alignment")
+  (return-type "PangoAlignment")
+)
+
+(define-method set_tabs
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_tabs")
+  (return-type "none")
+  (parameters
+    '("PangoTabArray*" "tabs")
+  )
+)
+
+(define-method get_tabs
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_tabs")
+  (return-type "PangoTabArray*")
+)
+
+(define-method set_single_paragraph_mode
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_single_paragraph_mode")
+  (return-type "none")
+  (parameters
+    '("gboolean" "setting")
+  )
+)
+
+(define-method get_single_paragraph_mode
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_single_paragraph_mode")
+  (return-type "gboolean")
+)
+
+(define-method set_ellipsize
+  (of-object "PangoLayout")
+  (c-name "pango_layout_set_ellipsize")
+  (return-type "none")
+  (parameters
+    '("PangoEllipsizeMode" "ellipsize")
+  )
+)
+
+(define-method get_ellipsize
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_ellipsize")
+  (return-type "PangoEllipsizeMode")
+)
+
+(define-method is_ellipsized
+  (of-object "PangoLayout")
+  (c-name "pango_layout_is_ellipsized")
+  (return-type "gboolean")
+)
+
+(define-method get_unknown_glyphs_count
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_unknown_glyphs_count")
+  (return-type "int")
+)
+
+(define-method get_direction
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_direction")
+  (return-type "PangoDirection")
+  (parameters
+    '("int" "index")
+  )
+)
+
+(define-method context_changed
+  (of-object "PangoLayout")
+  (c-name "pango_layout_context_changed")
+  (return-type "none")
+)
+
+(define-method get_serial
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_serial")
+  (return-type "guint")
+)
+
+(define-method get_log_attrs
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_log_attrs")
+  (return-type "none")
+  (parameters
+    '("PangoLogAttr**" "attrs")
+    '("gint*" "n_attrs")
+  )
+)
+
+(define-method get_log_attrs_readonly
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_log_attrs_readonly")
+  (return-type "const-PangoLogAttr*")
+  (parameters
+    '("gint*" "n_attrs")
+  )
+)
+
+(define-method index_to_pos
+  (of-object "PangoLayout")
+  (c-name "pango_layout_index_to_pos")
+  (return-type "none")
+  (parameters
+    '("int" "index_")
+    '("PangoRectangle*" "pos")
+  )
+)
+
+(define-method index_to_line_x
+  (of-object "PangoLayout")
+  (c-name "pango_layout_index_to_line_x")
+  (return-type "none")
+  (parameters
+    '("int" "index_")
+    '("gboolean" "trailing")
+    '("int*" "line")
+    '("int*" "x_pos")
+  )
+)
+
+(define-method get_cursor_pos
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_cursor_pos")
+  (return-type "none")
+  (parameters
+    '("int" "index_")
+    '("PangoRectangle*" "strong_pos")
+    '("PangoRectangle*" "weak_pos")
+  )
+)
+
+(define-method get_caret_pos
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_caret_pos")
+  (return-type "none")
+  (parameters
+    '("int" "index_")
+    '("PangoRectangle*" "strong_pos")
+    '("PangoRectangle*" "weak_pos")
+  )
+)
+
+(define-method move_cursor_visually
+  (of-object "PangoLayout")
+  (c-name "pango_layout_move_cursor_visually")
+  (return-type "none")
+  (parameters
+    '("gboolean" "strong")
+    '("int" "old_index")
+    '("int" "old_trailing")
+    '("int" "direction")
+    '("int*" "new_index")
+    '("int*" "new_trailing")
+  )
+)
+
+(define-method xy_to_index
+  (of-object "PangoLayout")
+  (c-name "pango_layout_xy_to_index")
+  (return-type "gboolean")
+  (parameters
+    '("int" "x")
+    '("int" "y")
+    '("int*" "index_")
+    '("int*" "trailing")
+  )
+)
+
+(define-method get_extents
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_pixel_extents
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_pixel_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_size
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_size")
+  (return-type "none")
+  (parameters
+    '("int*" "width")
+    '("int*" "height")
+  )
+)
+
+(define-method get_pixel_size
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_pixel_size")
+  (return-type "none")
+  (parameters
+    '("int*" "width")
+    '("int*" "height")
+  )
+)
+
+(define-method get_baseline
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_baseline")
+  (return-type "int")
+)
+
+(define-method get_line_count
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_line_count")
+  (return-type "int")
+)
+
+(define-method get_line
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_line")
+  (return-type "PangoLayoutLine*")
+  (parameters
+    '("int" "line")
+  )
+)
+
+(define-method get_line_readonly
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_line_readonly")
+  (return-type "PangoLayoutLine*")
+  (parameters
+    '("int" "line")
+  )
+)
+
+(define-method get_lines
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_lines")
+  (return-type "GSList*")
+)
+
+(define-method get_lines_readonly
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_lines_readonly")
+  (return-type "GSList*")
+)
+
+(define-method serialize
+  (of-object "PangoLayout")
+  (c-name "pango_layout_serialize")
+  (return-type "GBytes*")
+  (parameters
+    '("PangoLayoutSerializeFlags" "flags")
+  )
+)
+
+(define-method write_to_file
+  (of-object "PangoLayout")
+  (c-name "pango_layout_write_to_file")
+  (return-type "gboolean")
+  (parameters
+    '("PangoLayoutSerializeFlags" "flags")
+    '("const-char*" "filename")
+    '("GError**" "error")
+  )
+)
+
+(define-function pango_layout_deserialize_error_quark
+  (c-name "pango_layout_deserialize_error_quark")
+  (return-type "GQuark")
+)
+
+(define-function pango_layout_deserialize
+  (c-name "pango_layout_deserialize")
+  (return-type "PangoLayout*")
+  (parameters
+    '("PangoContext*" "context")
+    '("GBytes*" "bytes")
+    '("PangoLayoutDeserializeFlags" "flags")
+    '("GError**" "error")
+  )
+)
+
+(define-function pango_layout_line_get_type
+  (c-name "pango_layout_line_get_type")
+  (return-type "GType")
+)
+
+(define-method ref
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_ref")
+  (return-type "PangoLayoutLine*")
+)
+
+(define-method unref
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_unref")
+  (return-type "none")
+)
+
+(define-method get_start_index
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_get_start_index")
+  (return-type "int")
+)
+
+(define-method get_length
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_get_length")
+  (return-type "int")
+)
+
+(define-method is_paragraph_start
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_is_paragraph_start")
+  (return-type "gboolean")
+)
+
+(define-method get_resolved_direction
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_get_resolved_direction")
+  (return-type "PangoDirection")
+)
+
+(define-method x_to_index
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_x_to_index")
+  (return-type "gboolean")
+  (parameters
+    '("int" "x_pos")
+    '("int*" "index_")
+    '("int*" "trailing")
+  )
+)
+
+(define-method index_to_x
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_index_to_x")
+  (return-type "none")
+  (parameters
+    '("int" "index_")
+    '("gboolean" "trailing")
+    '("int*" "x_pos")
+  )
+)
+
+(define-method get_x_ranges
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_get_x_ranges")
+  (return-type "none")
+  (parameters
+    '("int" "start_index")
+    '("int" "end_index")
+    '("int**" "ranges")
+    '("int*" "n_ranges")
+  )
+)
+
+(define-method get_extents
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_get_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_height
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_get_height")
+  (return-type "none")
+  (parameters
+    '("int*" "height")
+  )
+)
+
+(define-method get_pixel_extents
+  (of-object "PangoLayoutLine")
+  (c-name "pango_layout_line_get_pixel_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-function pango_layout_iter_get_type
+  (c-name "pango_layout_iter_get_type")
+  (return-type "GType")
+)
+
+(define-method get_iter
+  (of-object "PangoLayout")
+  (c-name "pango_layout_get_iter")
+  (return-type "PangoLayoutIter*")
+)
+
+(define-method copy
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_copy")
+  (return-type "PangoLayoutIter*")
+)
+
+(define-method free
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_free")
+  (return-type "none")
+)
+
+(define-method get_index
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_index")
+  (return-type "int")
+)
+
+(define-method get_run
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_run")
+  (return-type "PangoLayoutRun*")
+)
+
+(define-method get_run_readonly
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_run_readonly")
+  (return-type "PangoLayoutRun*")
+)
+
+(define-method get_line
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_line")
+  (return-type "PangoLayoutLine*")
+)
+
+(define-method get_line_readonly
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_line_readonly")
+  (return-type "PangoLayoutLine*")
+)
+
+(define-method at_last_line
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_at_last_line")
+  (return-type "gboolean")
+)
+
+(define-method get_layout
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_layout")
+  (return-type "PangoLayout*")
+)
+
+(define-method next_char
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_next_char")
+  (return-type "gboolean")
+)
+
+(define-method next_cluster
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_next_cluster")
+  (return-type "gboolean")
+)
+
+(define-method next_run
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_next_run")
+  (return-type "gboolean")
+)
+
+(define-method next_line
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_next_line")
+  (return-type "gboolean")
+)
+
+(define-method get_char_extents
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_char_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_cluster_extents
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_cluster_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_run_extents
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_run_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_line_extents
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_line_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_line_yrange
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_line_yrange")
+  (return-type "none")
+  (parameters
+    '("int*" "y0_")
+    '("int*" "y1_")
+  )
+)
+
+(define-method get_layout_extents
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_layout_extents")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "ink_rect")
+    '("PangoRectangle*" "logical_rect")
+  )
+)
+
+(define-method get_baseline
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_baseline")
+  (return-type "int")
+)
+
+(define-method get_run_baseline
+  (of-object "PangoLayoutIter")
+  (c-name "pango_layout_iter_get_run_baseline")
+  (return-type "int")
+)
+
+
+
+;; From pango-markup.h
+
+(define-function pango_markup_parser_new
+  (c-name "pango_markup_parser_new")
+  (is-constructor-of "PangoMarkupParser")
+  (return-type "GMarkupParseContext*")
+  (parameters
+    '("gunichar" "accel_marker")
+  )
+)
+
+(define-function pango_markup_parser_finish
+  (c-name "pango_markup_parser_finish")
+  (return-type "gboolean")
+  (parameters
+    '("GMarkupParseContext*" "context")
+    '("PangoAttrList**" "attr_list")
+    '("char**" "text")
+    '("gunichar*" "accel_char")
+    '("GError**" "error")
+  )
+)
+
+(define-function pango_parse_markup
+  (c-name "pango_parse_markup")
+  (return-type "gboolean")
+  (parameters
+    '("const-char*" "markup_text")
+    '("int" "length")
+    '("gunichar" "accel_marker")
+    '("PangoAttrList**" "attr_list")
+    '("char**" "text")
+    '("gunichar*" "accel_char")
+    '("GError**" "error")
+  )
+)
+
+
+
+;; From pango-matrix.h
+
+(define-function pango_matrix_get_type
+  (c-name "pango_matrix_get_type")
+  (return-type "GType")
+)
+
+(define-method copy
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_copy")
+  (return-type "PangoMatrix*")
+)
+
+(define-method free
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_free")
+  (return-type "none")
+)
+
+(define-method translate
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_translate")
+  (return-type "none")
+  (parameters
+    '("double" "tx")
+    '("double" "ty")
+  )
+)
+
+(define-method scale
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_scale")
+  (return-type "none")
+  (parameters
+    '("double" "scale_x")
+    '("double" "scale_y")
+  )
+)
+
+(define-method rotate
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_rotate")
+  (return-type "none")
+  (parameters
+    '("double" "degrees")
+  )
+)
+
+(define-method concat
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_concat")
+  (return-type "none")
+  (parameters
+    '("const-PangoMatrix*" "new_matrix")
+  )
+)
+
+(define-method transform_point
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_transform_point")
+  (return-type "none")
+  (parameters
+    '("double*" "x")
+    '("double*" "y")
+  )
+)
+
+(define-method transform_distance
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_transform_distance")
+  (return-type "none")
+  (parameters
+    '("double*" "dx")
+    '("double*" "dy")
+  )
+)
+
+(define-method transform_rectangle
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_transform_rectangle")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "rect")
+  )
+)
+
+(define-method transform_pixel_rectangle
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_transform_pixel_rectangle")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "rect")
+  )
+)
+
+(define-method get_font_scale_factor
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_get_font_scale_factor")
+  (return-type "double")
+)
+
+(define-method get_font_scale_factors
+  (of-object "PangoMatrix")
+  (c-name "pango_matrix_get_font_scale_factors")
+  (return-type "none")
+  (parameters
+    '("double*" "xscale")
+    '("double*" "yscale")
+  )
+)
+
+
+
+;; From pango-modules.h
+
+(define-function pango_find_map
+  (c-name "pango_find_map")
+  (return-type "PangoMap*")
+  (parameters
+    '("PangoLanguage*" "language")
+    '("guint" "engine_type_id")
+    '("guint" "render_type_id")
+  )
+)
+
+(define-method get_engine
+  (of-object "PangoMap")
+  (c-name "pango_map_get_engine")
+  (return-type "PangoEngine*")
+  (parameters
+    '("PangoScript" "script")
+  )
+)
+
+(define-method get_engines
+  (of-object "PangoMap")
+  (c-name "pango_map_get_engines")
+  (return-type "none")
+  (parameters
+    '("PangoScript" "script")
+    '("GSList**" "exact_engines")
+    '("GSList**" "fallback_engines")
+  )
+)
+
+(define-function pango_module_register
+  (c-name "pango_module_register")
+  (return-type "none")
+  (parameters
+    '("PangoIncludedModule*" "module")
+  )
+)
+
+
+
+;; From pango-ot.h
+
+(define-function pango_ot_info_get_type
+  (c-name "pango_ot_info_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_ot_ruleset_get_type
+  (c-name "pango_ot_ruleset_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_ot_info_get
+  (c-name "pango_ot_info_get")
+  (return-type "PangoOTInfo*")
+  (parameters
+    '("FT_Face" "face")
+  )
+)
+
+(define-method find_script
+  (of-object "PangoOTInfo")
+  (c-name "pango_ot_info_find_script")
+  (return-type "gboolean")
+  (parameters
+    '("PangoOTTableType" "table_type")
+    '("PangoOTTag" "script_tag")
+    '("guint*" "script_index")
+  )
+)
+
+(define-method find_language
+  (of-object "PangoOTInfo")
+  (c-name "pango_ot_info_find_language")
+  (return-type "gboolean")
+  (parameters
+    '("PangoOTTableType" "table_type")
+    '("guint" "script_index")
+    '("PangoOTTag" "language_tag")
+    '("guint*" "language_index")
+    '("guint*" "required_feature_index")
+  )
+)
+
+(define-method find_feature
+  (of-object "PangoOTInfo")
+  (c-name "pango_ot_info_find_feature")
+  (return-type "gboolean")
+  (parameters
+    '("PangoOTTableType" "table_type")
+    '("PangoOTTag" "feature_tag")
+    '("guint" "script_index")
+    '("guint" "language_index")
+    '("guint*" "feature_index")
+  )
+)
+
+(define-method list_scripts
+  (of-object "PangoOTInfo")
+  (c-name "pango_ot_info_list_scripts")
+  (return-type "PangoOTTag*")
+  (parameters
+    '("PangoOTTableType" "table_type")
+  )
+)
+
+(define-method list_languages
+  (of-object "PangoOTInfo")
+  (c-name "pango_ot_info_list_languages")
+  (return-type "PangoOTTag*")
+  (parameters
+    '("PangoOTTableType" "table_type")
+    '("guint" "script_index")
+    '("PangoOTTag" "language_tag")
+  )
+)
+
+(define-method list_features
+  (of-object "PangoOTInfo")
+  (c-name "pango_ot_info_list_features")
+  (return-type "PangoOTTag*")
+  (parameters
+    '("PangoOTTableType" "table_type")
+    '("PangoOTTag" "tag")
+    '("guint" "script_index")
+    '("guint" "language_index")
+  )
+)
+
+(define-function pango_ot_buffer_get_type
+  (c-name "pango_ot_buffer_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_ot_buffer_new
+  (c-name "pango_ot_buffer_new")
+  (is-constructor-of "PangoOtBuffer")
+  (return-type "PangoOTBuffer*")
+  (parameters
+    '("PangoFcFont*" "font")
+  )
+)
+
+(define-method destroy
+  (of-object "PangoOTBuffer")
+  (c-name "pango_ot_buffer_destroy")
+  (return-type "none")
+)
+
+(define-method clear
+  (of-object "PangoOTBuffer")
+  (c-name "pango_ot_buffer_clear")
+  (return-type "none")
+)
+
+(define-method set_rtl
+  (of-object "PangoOTBuffer")
+  (c-name "pango_ot_buffer_set_rtl")
+  (return-type "none")
+  (parameters
+    '("gboolean" "rtl")
+  )
+)
+
+(define-method add_glyph
+  (of-object "PangoOTBuffer")
+  (c-name "pango_ot_buffer_add_glyph")
+  (return-type "none")
+  (parameters
+    '("guint" "glyph")
+    '("guint" "properties")
+    '("guint" "cluster")
+  )
+)
+
+(define-method get_glyphs
+  (of-object "PangoOTBuffer")
+  (c-name "pango_ot_buffer_get_glyphs")
+  (return-type "none")
+  (parameters
+    '("PangoOTGlyph**" "glyphs")
+    '("int*" "n_glyphs")
+  )
+)
+
+(define-method output
+  (of-object "PangoOTBuffer")
+  (c-name "pango_ot_buffer_output")
+  (return-type "none")
+  (parameters
+    '("PangoGlyphString*" "glyphs")
+  )
+)
+
+(define-method set_zero_width_marks
+  (of-object "PangoOTBuffer")
+  (c-name "pango_ot_buffer_set_zero_width_marks")
+  (return-type "none")
+  (parameters
+    '("gboolean" "zero_width_marks")
+  )
+)
+
+(define-function pango_ot_ruleset_get_for_description
+  (c-name "pango_ot_ruleset_get_for_description")
+  (return-type "const-PangoOTRuleset*")
+  (parameters
+    '("PangoOTInfo*" "info")
+    '("const-PangoOTRulesetDescription*" "desc")
+  )
+)
+
+(define-function pango_ot_ruleset_new
+  (c-name "pango_ot_ruleset_new")
+  (is-constructor-of "PangoOtRuleset")
+  (return-type "PangoOTRuleset*")
+  (parameters
+    '("PangoOTInfo*" "info")
+  )
+)
+
+(define-function pango_ot_ruleset_new_for
+  (c-name "pango_ot_ruleset_new_for")
+  (return-type "PangoOTRuleset*")
+  (parameters
+    '("PangoOTInfo*" "info")
+    '("PangoScript" "script")
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-function pango_ot_ruleset_new_from_description
+  (c-name "pango_ot_ruleset_new_from_description")
+  (return-type "PangoOTRuleset*")
+  (parameters
+    '("PangoOTInfo*" "info")
+    '("const-PangoOTRulesetDescription*" "desc")
+  )
+)
+
+(define-method add_feature
+  (of-object "PangoOTRuleset")
+  (c-name "pango_ot_ruleset_add_feature")
+  (return-type "none")
+  (parameters
+    '("PangoOTTableType" "table_type")
+    '("guint" "feature_index")
+    '("gulong" "property_bit")
+  )
+)
+
+(define-method maybe_add_feature
+  (of-object "PangoOTRuleset")
+  (c-name "pango_ot_ruleset_maybe_add_feature")
+  (return-type "gboolean")
+  (parameters
+    '("PangoOTTableType" "table_type")
+    '("PangoOTTag" "feature_tag")
+    '("gulong" "property_bit")
+  )
+)
+
+(define-method maybe_add_features
+  (of-object "PangoOTRuleset")
+  (c-name "pango_ot_ruleset_maybe_add_features")
+  (return-type "guint")
+  (parameters
+    '("PangoOTTableType" "table_type")
+    '("const-PangoOTFeatureMap*" "features")
+    '("guint" "n_features")
+  )
+)
+
+(define-method get_feature_count
+  (of-object "PangoOTRuleset")
+  (c-name "pango_ot_ruleset_get_feature_count")
+  (return-type "guint")
+  (parameters
+    '("guint*" "n_gsub_features")
+    '("guint*" "n_gpos_features")
+  )
+)
+
+(define-method substitute
+  (of-object "PangoOTRuleset")
+  (c-name "pango_ot_ruleset_substitute")
+  (return-type "none")
+  (parameters
+    '("PangoOTBuffer*" "buffer")
+  )
+)
+
+(define-method position
+  (of-object "PangoOTRuleset")
+  (c-name "pango_ot_ruleset_position")
+  (return-type "none")
+  (parameters
+    '("PangoOTBuffer*" "buffer")
+  )
+)
+
+(define-method to_script
+  (of-object "PangoOTTag")
+  (c-name "pango_ot_tag_to_script")
+  (return-type "PangoScript")
+)
+
+(define-function pango_ot_tag_from_script
+  (c-name "pango_ot_tag_from_script")
+  (return-type "PangoOTTag")
+  (parameters
+    '("PangoScript" "script")
+  )
+)
+
+(define-method to_language
+  (of-object "PangoOTTag")
+  (c-name "pango_ot_tag_to_language")
+  (return-type "PangoLanguage*")
+)
+
+(define-function pango_ot_tag_from_language
+  (c-name "pango_ot_tag_from_language")
+  (return-type "PangoOTTag")
+  (parameters
+    '("PangoLanguage*" "language")
+  )
+)
+
+(define-function pango_ot_ruleset_description_get_type
+  (c-name "pango_ot_ruleset_description_get_type")
+  (return-type "GType")
+)
+
+(define-method hash
+  (of-object "PangoOTRulesetDescription")
+  (c-name "pango_ot_ruleset_description_hash")
+  (return-type "guint")
+)
+
+(define-method equal
+  (of-object "PangoOTRulesetDescription")
+  (c-name "pango_ot_ruleset_description_equal")
+  (return-type "gboolean")
+  (parameters
+    '("const-PangoOTRulesetDescription*" "desc2")
+  )
+)
+
+(define-method copy
+  (of-object "PangoOTRulesetDescription")
+  (c-name "pango_ot_ruleset_description_copy")
+  (return-type "PangoOTRulesetDescription*")
+)
+
+(define-method free
+  (of-object "PangoOTRulesetDescription")
+  (c-name "pango_ot_ruleset_description_free")
+  (return-type "none")
+)
+
+
+
+;; From pango-renderer.h
+
+(define-function pango_renderer_get_type
+  (c-name "pango_renderer_get_type")
+  (return-type "GType")
+)
+
+(define-method draw_layout
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_draw_layout")
+  (return-type "none")
+  (parameters
+    '("PangoLayout*" "layout")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-method draw_layout_line
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_draw_layout_line")
+  (return-type "none")
+  (parameters
+    '("PangoLayoutLine*" "line")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-method draw_glyphs
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_draw_glyphs")
+  (return-type "none")
+  (parameters
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-method draw_glyph_item
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_draw_glyph_item")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("PangoGlyphItem*" "glyph_item")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-method draw_rectangle
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_draw_rectangle")
+  (return-type "none")
+  (parameters
+    '("PangoRenderPart" "part")
+    '("int" "x")
+    '("int" "y")
+    '("int" "width")
+    '("int" "height")
+  )
+)
+
+(define-method draw_error_underline
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_draw_error_underline")
+  (return-type "none")
+  (parameters
+    '("int" "x")
+    '("int" "y")
+    '("int" "width")
+    '("int" "height")
+  )
+)
+
+(define-method draw_trapezoid
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_draw_trapezoid")
+  (return-type "none")
+  (parameters
+    '("PangoRenderPart" "part")
+    '("double" "y1_")
+    '("double" "x11")
+    '("double" "x21")
+    '("double" "y2")
+    '("double" "x12")
+    '("double" "x22")
+  )
+)
+
+(define-method draw_glyph
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_draw_glyph")
+  (return-type "none")
+  (parameters
+    '("PangoFont*" "font")
+    '("PangoGlyph" "glyph")
+    '("double" "x")
+    '("double" "y")
+  )
+)
+
+(define-method activate
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_activate")
+  (return-type "none")
+)
+
+(define-method deactivate
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_deactivate")
+  (return-type "none")
+)
+
+(define-method part_changed
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_part_changed")
+  (return-type "none")
+  (parameters
+    '("PangoRenderPart" "part")
+  )
+)
+
+(define-method set_color
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_set_color")
+  (return-type "none")
+  (parameters
+    '("PangoRenderPart" "part")
+    '("const-PangoColor*" "color")
+  )
+)
+
+(define-method get_color
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_get_color")
+  (return-type "PangoColor*")
+  (parameters
+    '("PangoRenderPart" "part")
+  )
+)
+
+(define-method set_alpha
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_set_alpha")
+  (return-type "none")
+  (parameters
+    '("PangoRenderPart" "part")
+    '("guint16" "alpha")
+  )
+)
+
+(define-method get_alpha
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_get_alpha")
+  (return-type "guint16")
+  (parameters
+    '("PangoRenderPart" "part")
+  )
+)
+
+(define-method set_matrix
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_set_matrix")
+  (return-type "none")
+  (parameters
+    '("const-PangoMatrix*" "matrix")
+  )
+)
+
+(define-method get_matrix
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_get_matrix")
+  (return-type "const-PangoMatrix*")
+)
+
+(define-method get_layout
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_get_layout")
+  (return-type "PangoLayout*")
+)
+
+(define-method get_layout_line
+  (of-object "PangoRenderer")
+  (c-name "pango_renderer_get_layout_line")
+  (return-type "PangoLayoutLine*")
+)
+
+
+
+;; From pango-script.h
+
+(define-function pango_script_for_unichar
+  (c-name "pango_script_for_unichar")
+  (return-type "PangoScript")
+  (parameters
+    '("gunichar" "ch")
+  )
+)
+
+(define-function pango_script_iter_get_type
+  (c-name "pango_script_iter_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_script_iter_new
+  (c-name "pango_script_iter_new")
+  (is-constructor-of "PangoScriptIter")
+  (return-type "PangoScriptIter*")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+  )
+)
+
+(define-method get_range
+  (of-object "PangoScriptIter")
+  (c-name "pango_script_iter_get_range")
+  (return-type "none")
+  (parameters
+    '("const-char**" "start")
+    '("const-char**" "end")
+    '("PangoScript*" "script")
+  )
+)
+
+(define-method next
+  (of-object "PangoScriptIter")
+  (c-name "pango_script_iter_next")
+  (return-type "gboolean")
+)
+
+(define-method free
+  (of-object "PangoScriptIter")
+  (c-name "pango_script_iter_free")
+  (return-type "none")
+)
+
+(define-method get_sample_language
+  (of-object "PangoScript")
+  (c-name "pango_script_get_sample_language")
+  (return-type "PangoLanguage*")
+)
+
+
+
+;; From pango-script-lang-table.h
+
+
+
+;; From pango-tabs.h
+
+(define-function pango_tab_array_new
+  (c-name "pango_tab_array_new")
+  (is-constructor-of "PangoTabArray")
+  (return-type "PangoTabArray*")
+  (parameters
+    '("gint" "initial_size")
+    '("gboolean" "positions_in_pixels")
+  )
+)
+
+(define-function pango_tab_array_new_with_positions
+  (c-name "pango_tab_array_new_with_positions")
+  (return-type "PangoTabArray*")
+  (parameters
+    '("gint" "size")
+    '("gboolean" "positions_in_pixels")
+    '("PangoTabAlign" "first_alignment")
+    '("gint" "first_position")
+  )
+  (varargs #t)
+)
+
+(define-function pango_tab_array_get_type
+  (c-name "pango_tab_array_get_type")
+  (return-type "GType")
+)
+
+(define-method copy
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_copy")
+  (return-type "PangoTabArray*")
+)
+
+(define-method free
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_free")
+  (return-type "none")
+)
+
+(define-method get_size
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_get_size")
+  (return-type "gint")
+)
+
+(define-method resize
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_resize")
+  (return-type "none")
+  (parameters
+    '("gint" "new_size")
+  )
+)
+
+(define-method set_tab
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_set_tab")
+  (return-type "none")
+  (parameters
+    '("gint" "tab_index")
+    '("PangoTabAlign" "alignment")
+    '("gint" "location")
+  )
+)
+
+(define-method get_tab
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_get_tab")
+  (return-type "none")
+  (parameters
+    '("gint" "tab_index")
+    '("PangoTabAlign*" "alignment")
+    '("gint*" "location")
+  )
+)
+
+(define-method get_tabs
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_get_tabs")
+  (return-type "none")
+  (parameters
+    '("PangoTabAlign**" "alignments")
+    '("gint**" "locations")
+  )
+)
+
+(define-method get_positions_in_pixels
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_get_positions_in_pixels")
+  (return-type "gboolean")
+)
+
+(define-method set_positions_in_pixels
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_set_positions_in_pixels")
+  (return-type "none")
+  (parameters
+    '("gboolean" "positions_in_pixels")
+  )
+)
+
+(define-method to_string
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_to_string")
+  (return-type "char*")
+)
+
+(define-function pango_tab_array_from_string
+  (c-name "pango_tab_array_from_string")
+  (return-type "PangoTabArray*")
+  (parameters
+    '("const-char*" "text")
+  )
+)
+
+(define-method set_decimal_point
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_set_decimal_point")
+  (return-type "none")
+  (parameters
+    '("int" "tab_index")
+    '("gunichar" "decimal_point")
+  )
+)
+
+(define-method get_decimal_point
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_get_decimal_point")
+  (return-type "gunichar")
+  (parameters
+    '("int" "tab_index")
+  )
+)
+
+(define-method sort
+  (of-object "PangoTabArray")
+  (c-name "pango_tab_array_sort")
+  (return-type "none")
+)
+
+
+
+;; From pango-types.h
+
+(define-function pango_units_from_double
+  (c-name "pango_units_from_double")
+  (return-type "int")
+  (parameters
+    '("double" "d")
+  )
+)
+
+(define-function pango_units_to_double
+  (c-name "pango_units_to_double")
+  (return-type "double")
+  (parameters
+    '("int" "i")
+  )
+)
+
+(define-function pango_extents_to_pixels
+  (c-name "pango_extents_to_pixels")
+  (return-type "none")
+  (parameters
+    '("PangoRectangle*" "inclusive")
+    '("PangoRectangle*" "nearest")
+  )
+)
+
+
+
+;; From pango-utils.h
+
+(define-function pango_split_file_list
+  (c-name "pango_split_file_list")
+  (return-type "char**")
+  (parameters
+    '("const-char*" "str")
+  )
+)
+
+(define-function pango_trim_string
+  (c-name "pango_trim_string")
+  (return-type "char*")
+  (parameters
+    '("const-char*" "str")
+  )
+)
+
+(define-function pango_read_line
+  (c-name "pango_read_line")
+  (return-type "gint")
+  (parameters
+    '("FILE*" "stream")
+    '("GString*" "str")
+  )
+)
+
+(define-function pango_skip_space
+  (c-name "pango_skip_space")
+  (return-type "gboolean")
+  (parameters
+    '("const-char**" "pos")
+  )
+)
+
+(define-function pango_scan_word
+  (c-name "pango_scan_word")
+  (return-type "gboolean")
+  (parameters
+    '("const-char**" "pos")
+    '("GString*" "out")
+  )
+)
+
+(define-function pango_scan_string
+  (c-name "pango_scan_string")
+  (return-type "gboolean")
+  (parameters
+    '("const-char**" "pos")
+    '("GString*" "out")
+  )
+)
+
+(define-function pango_scan_int
+  (c-name "pango_scan_int")
+  (return-type "gboolean")
+  (parameters
+    '("const-char**" "pos")
+    '("int*" "out")
+  )
+)
+
+(define-function pango_parse_enum
+  (c-name "pango_parse_enum")
+  (return-type "gboolean")
+  (parameters
+    '("GType" "type")
+    '("const-char*" "str")
+    '("int*" "value")
+    '("gboolean" "warn")
+    '("char**" "possible_values")
+  )
+)
+
+(define-function pango_parse_style
+  (c-name "pango_parse_style")
+  (return-type "gboolean")
+  (parameters
+    '("const-char*" "str")
+    '("PangoStyle*" "style")
+    '("gboolean" "warn")
+  )
+)
+
+(define-function pango_parse_variant
+  (c-name "pango_parse_variant")
+  (return-type "gboolean")
+  (parameters
+    '("const-char*" "str")
+    '("PangoVariant*" "variant")
+    '("gboolean" "warn")
+  )
+)
+
+(define-function pango_parse_weight
+  (c-name "pango_parse_weight")
+  (return-type "gboolean")
+  (parameters
+    '("const-char*" "str")
+    '("PangoWeight*" "weight")
+    '("gboolean" "warn")
+  )
+)
+
+(define-function pango_parse_stretch
+  (c-name "pango_parse_stretch")
+  (return-type "gboolean")
+  (parameters
+    '("const-char*" "str")
+    '("PangoStretch*" "stretch")
+    '("gboolean" "warn")
+  )
+)
+
+(define-function pango_quantize_line_geometry
+  (c-name "pango_quantize_line_geometry")
+  (return-type "none")
+  (parameters
+    '("int*" "thickness")
+    '("int*" "position")
+  )
+)
+
+(define-function pango_log2vis_get_embedding_levels
+  (c-name "pango_log2vis_get_embedding_levels")
+  (return-type "guint8*")
+  (parameters
+    '("const-gchar*" "text")
+    '("int" "length")
+    '("PangoDirection*" "pbase_dir")
+  )
+)
+
+(define-function pango_is_zero_width
+  (c-name "pango_is_zero_width")
+  (return-type "gboolean")
+  (parameters
+    '("gunichar" "ch")
+  )
+)
+
+(define-function pango_find_paragraph_boundary
+  (c-name "pango_find_paragraph_boundary")
+  (return-type "none")
+  (parameters
+    '("const-char*" "text")
+    '("int" "length")
+    '("int*" "paragraph_delimiter_index")
+    '("int*" "next_paragraph_start")
+  )
+)
+
+(define-function pango_version
+  (c-name "pango_version")
+  (return-type "int")
+)
+
+(define-function pango_version_string
+  (c-name "pango_version_string")
+  (return-type "const-char*")
+)
+
+(define-function pango_version_check
+  (c-name "pango_version_check")
+  (return-type "const-char*")
+  (parameters
+    '("int" "required_major")
+    '("int" "required_minor")
+    '("int" "required_micro")
+  )
+)
+
+
+
+;; From pango-version-macros.h
+
+
+
+;; From pangowin32.h
+
+(define-function pango_win32_get_context
+  (c-name "pango_win32_get_context")
+  (return-type "PangoContext*")
+)
+
+(define-function pango_win32_render
+  (c-name "pango_win32_render")
+  (return-type "none")
+  (parameters
+    '("HDC" "hdc")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("gint" "x")
+    '("gint" "y")
+  )
+)
+
+(define-function pango_win32_render_layout_line
+  (c-name "pango_win32_render_layout_line")
+  (return-type "none")
+  (parameters
+    '("HDC" "hdc")
+    '("PangoLayoutLine*" "line")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_win32_render_layout
+  (c-name "pango_win32_render_layout")
+  (return-type "none")
+  (parameters
+    '("HDC" "hdc")
+    '("PangoLayout*" "layout")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_win32_render_transformed
+  (c-name "pango_win32_render_transformed")
+  (return-type "none")
+  (parameters
+    '("HDC" "hdc")
+    '("const-PangoMatrix*" "matrix")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_win32_get_unknown_glyph
+  (c-name "pango_win32_get_unknown_glyph")
+  (return-type "PangoGlyph")
+  (parameters
+    '("PangoFont*" "font")
+    '("gunichar" "wc")
+  )
+)
+
+(define-function pango_win32_font_get_glyph_index
+  (c-name "pango_win32_font_get_glyph_index")
+  (return-type "gint")
+  (parameters
+    '("PangoFont*" "font")
+    '("gunichar" "wc")
+  )
+)
+
+(define-function pango_win32_get_dc
+  (c-name "pango_win32_get_dc")
+  (return-type "HDC")
+)
+
+(define-function pango_win32_get_debug_flag
+  (c-name "pango_win32_get_debug_flag")
+  (return-type "gboolean")
+)
+
+(define-function pango_win32_font_select_font
+  (c-name "pango_win32_font_select_font")
+  (return-type "gboolean")
+  (parameters
+    '("PangoFont*" "font")
+    '("HDC" "hdc")
+  )
+)
+
+(define-function pango_win32_font_done_font
+  (c-name "pango_win32_font_done_font")
+  (return-type "none")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_win32_font_get_metrics_factor
+  (c-name "pango_win32_font_get_metrics_factor")
+  (return-type "double")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_win32_font_cache_new
+  (c-name "pango_win32_font_cache_new")
+  (is-constructor-of "PangoWin32FontCache")
+  (return-type "PangoWin32FontCache*")
+)
+
+(define-method free
+  (of-object "PangoWin32FontCache")
+  (c-name "pango_win32_font_cache_free")
+  (return-type "none")
+)
+
+(define-method load
+  (of-object "PangoWin32FontCache")
+  (c-name "pango_win32_font_cache_load")
+  (return-type "HFONT")
+  (parameters
+    '("const-LOGFONTA*" "logfont")
+  )
+)
+
+(define-method loadw
+  (of-object "PangoWin32FontCache")
+  (c-name "pango_win32_font_cache_loadw")
+  (return-type "HFONT")
+  (parameters
+    '("const-LOGFONTW*" "logfont")
+  )
+)
+
+(define-method unload
+  (of-object "PangoWin32FontCache")
+  (c-name "pango_win32_font_cache_unload")
+  (return-type "none")
+  (parameters
+    '("HFONT" "hfont")
+  )
+)
+
+(define-function pango_win32_font_map_for_display
+  (c-name "pango_win32_font_map_for_display")
+  (return-type "PangoFontMap*")
+)
+
+(define-function pango_win32_shutdown_display
+  (c-name "pango_win32_shutdown_display")
+  (return-type "none")
+)
+
+(define-function pango_win32_font_map_get_font_cache
+  (c-name "pango_win32_font_map_get_font_cache")
+  (return-type "PangoWin32FontCache*")
+  (parameters
+    '("PangoFontMap*" "font_map")
+  )
+)
+
+(define-function pango_win32_font_logfont
+  (c-name "pango_win32_font_logfont")
+  (return-type "LOGFONTA*")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_win32_font_logfontw
+  (c-name "pango_win32_font_logfontw")
+  (return-type "LOGFONTW*")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_win32_font_description_from_logfont
+  (c-name "pango_win32_font_description_from_logfont")
+  (return-type "PangoFontDescription*")
+  (parameters
+    '("const-LOGFONTA*" "lfp")
+  )
+)
+
+(define-function pango_win32_font_description_from_logfontw
+  (c-name "pango_win32_font_description_from_logfontw")
+  (return-type "PangoFontDescription*")
+  (parameters
+    '("const-LOGFONTW*" "lfp")
+  )
+)
+
+
+
+;; From pangoxft.h
+
+(define-function pango_xft_get_font_map
+  (c-name "pango_xft_get_font_map")
+  (return-type "PangoFontMap*")
+  (parameters
+    '("Display*" "display")
+    '("int" "screen")
+  )
+)
+
+(define-function pango_xft_get_context
+  (c-name "pango_xft_get_context")
+  (return-type "PangoContext*")
+  (parameters
+    '("Display*" "display")
+    '("int" "screen")
+  )
+)
+
+(define-function pango_xft_shutdown_display
+  (c-name "pango_xft_shutdown_display")
+  (return-type "none")
+  (parameters
+    '("Display*" "display")
+    '("int" "screen")
+  )
+)
+
+(define-function pango_xft_set_default_substitute
+  (c-name "pango_xft_set_default_substitute")
+  (return-type "none")
+  (parameters
+    '("Display*" "display")
+    '("int" "screen")
+    '("PangoXftSubstituteFunc" "func")
+    '("gpointer" "data")
+    '("GDestroyNotify" "notify")
+  )
+)
+
+(define-function pango_xft_substitute_changed
+  (c-name "pango_xft_substitute_changed")
+  (return-type "none")
+  (parameters
+    '("Display*" "display")
+    '("int" "screen")
+  )
+)
+
+(define-function pango_xft_font_map_get_type
+  (c-name "pango_xft_font_map_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_xft_font_get_type
+  (c-name "pango_xft_font_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_xft_font_get_font
+  (c-name "pango_xft_font_get_font")
+  (return-type "XftFont*")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_xft_font_get_display
+  (c-name "pango_xft_font_get_display")
+  (return-type "Display*")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_xft_font_lock_face
+  (c-name "pango_xft_font_lock_face")
+  (return-type "FT_Face")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_xft_font_unlock_face
+  (c-name "pango_xft_font_unlock_face")
+  (return-type "none")
+  (parameters
+    '("PangoFont*" "font")
+  )
+)
+
+(define-function pango_xft_font_get_glyph
+  (c-name "pango_xft_font_get_glyph")
+  (return-type "guint")
+  (parameters
+    '("PangoFont*" "font")
+    '("gunichar" "wc")
+  )
+)
+
+(define-function pango_xft_font_has_char
+  (c-name "pango_xft_font_has_char")
+  (return-type "gboolean")
+  (parameters
+    '("PangoFont*" "font")
+    '("gunichar" "wc")
+  )
+)
+
+(define-function pango_xft_font_get_unknown_glyph
+  (c-name "pango_xft_font_get_unknown_glyph")
+  (return-type "PangoGlyph")
+  (parameters
+    '("PangoFont*" "font")
+    '("gunichar" "wc")
+  )
+)
+
+
+
+;; From pangoxft-render.h
+
+(define-function pango_xft_renderer_get_type
+  (c-name "pango_xft_renderer_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_xft_renderer_new
+  (c-name "pango_xft_renderer_new")
+  (is-constructor-of "PangoXftRenderer")
+  (return-type "PangoRenderer*")
+  (parameters
+    '("Display*" "display")
+    '("int" "screen")
+  )
+)
+
+(define-method set_draw
+  (of-object "PangoXftRenderer")
+  (c-name "pango_xft_renderer_set_draw")
+  (return-type "none")
+  (parameters
+    '("XftDraw*" "draw")
+  )
+)
+
+(define-method set_default_color
+  (of-object "PangoXftRenderer")
+  (c-name "pango_xft_renderer_set_default_color")
+  (return-type "none")
+  (parameters
+    '("PangoColor*" "default_color")
+  )
+)
+
+(define-function pango_xft_render
+  (c-name "pango_xft_render")
+  (return-type "none")
+  (parameters
+    '("XftDraw*" "draw")
+    '("XftColor*" "color")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("gint" "x")
+    '("gint" "y")
+  )
+)
+
+(define-function pango_xft_picture_render
+  (c-name "pango_xft_picture_render")
+  (return-type "none")
+  (parameters
+    '("Display*" "display")
+    '("Picture" "src_picture")
+    '("Picture" "dest_picture")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("gint" "x")
+    '("gint" "y")
+  )
+)
+
+(define-function pango_xft_render_transformed
+  (c-name "pango_xft_render_transformed")
+  (return-type "none")
+  (parameters
+    '("XftDraw*" "draw")
+    '("XftColor*" "color")
+    '("PangoMatrix*" "matrix")
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_xft_render_layout_line
+  (c-name "pango_xft_render_layout_line")
+  (return-type "none")
+  (parameters
+    '("XftDraw*" "draw")
+    '("XftColor*" "color")
+    '("PangoLayoutLine*" "line")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-function pango_xft_render_layout
+  (c-name "pango_xft_render_layout")
+  (return-type "none")
+  (parameters
+    '("XftDraw*" "draw")
+    '("XftColor*" "color")
+    '("PangoLayout*" "layout")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+
+
+;; From pango-enum-types.h
+
+(define-function pango_attr_type_get_type
+  (c-name "pango_attr_type_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_underline_get_type
+  (c-name "pango_underline_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_overline_get_type
+  (c-name "pango_overline_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_show_flags_get_type
+  (c-name "pango_show_flags_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_text_transform_get_type
+  (c-name "pango_text_transform_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_baseline_shift_get_type
+  (c-name "pango_baseline_shift_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_font_scale_get_type
+  (c-name "pango_font_scale_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_bidi_type_get_type
+  (c-name "pango_bidi_type_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_coverage_level_get_type
+  (c-name "pango_coverage_level_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_direction_get_type
+  (c-name "pango_direction_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_style_get_type
+  (c-name "pango_style_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_variant_get_type
+  (c-name "pango_variant_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_weight_get_type
+  (c-name "pango_weight_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_stretch_get_type
+  (c-name "pango_stretch_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_font_mask_get_type
+  (c-name "pango_font_mask_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_shape_flags_get_type
+  (c-name "pango_shape_flags_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_gravity_get_type
+  (c-name "pango_gravity_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_gravity_hint_get_type
+  (c-name "pango_gravity_hint_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_alignment_get_type
+  (c-name "pango_alignment_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_wrap_mode_get_type
+  (c-name "pango_wrap_mode_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_ellipsize_mode_get_type
+  (c-name "pango_ellipsize_mode_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_layout_serialize_flags_get_type
+  (c-name "pango_layout_serialize_flags_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_layout_deserialize_error_get_type
+  (c-name "pango_layout_deserialize_error_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_layout_deserialize_flags_get_type
+  (c-name "pango_layout_deserialize_flags_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_render_part_get_type
+  (c-name "pango_render_part_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_script_get_type
+  (c-name "pango_script_get_type")
+  (return-type "GType")
+)
+
+(define-function pango_tab_align_get_type
+  (c-name "pango_tab_align_get_type")
+  (return-type "GType")
+)
+
+
+
+;; From pango-features.h
+
+
diff --git a/pango/src/pango_vfuncs.defs b/pango/src/pango_vfuncs.defs
new file mode 100644 (file)
index 0000000..e74214f
--- /dev/null
@@ -0,0 +1,113 @@
+;; -*- scheme -*-
+; virtual function definitions
+; define-vfunc is gtkmm-specific
+
+; PangoRenderer
+
+(define-vfunc draw_glyphs
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("PangoFont*" "font")
+    '("PangoGlyphString*" "glyphs")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-vfunc draw_rectangle
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("PangoRenderPart" "part")
+    '("int" "x")
+    '("int" "y")
+    '("int" "width")
+    '("int" "height")
+  )
+)
+
+(define-vfunc draw_error_underline
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("int" "x")
+    '("int" "y")
+    '("int" "width")
+    '("int" "height")
+  )
+)
+
+(define-vfunc draw_shape
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("PangoAttrShape*" "attr")
+    '("int" "x")
+    '("int" "y")
+  )
+)
+
+(define-vfunc draw_trapezoid
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("PangoRenderPart" "part")
+    '("double" "y1")
+    '("double" "x11")
+    '("double" "x21")
+    '("double" "y2")
+    '("double" "x12")
+    '("double" "x22")
+  )
+)
+
+(define-vfunc draw_glyph
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("PangoFont*" "font")
+    '("PangoGlyph" "glyph")
+    '("double" "x")
+    '("double" "y")
+  )
+)
+
+(define-vfunc part_changed
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("PangoRenderPart" "part")
+  )
+)
+
+(define-vfunc begin
+  (of-object "PangoRenderer")
+  (return-type "void")
+)
+
+(define-vfunc end
+  (of-object "PangoRenderer")
+  (return-type "void")
+)
+
+; pango-renderer.h has PangoLayoutRun instead of PangoGlyphItem.
+; PangoLayoutRun is an alias for PangoGlyphItem.
+(define-vfunc prepare_run
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("PangoGlyphItem*" "run")
+  )
+)
+
+(define-vfunc draw_glyph_item
+  (of-object "PangoRenderer")
+  (return-type "void")
+  (parameters
+    '("const-char*" "text")
+    '("PangoGlyphItem*" "glyph_item")
+    '("int" "x")
+    '("int" "y")
+  )
+)
diff --git a/pango/src/rectangle.ccg b/pango/src/rectangle.ccg
new file mode 100644 (file)
index 0000000..e8dbd2f
--- /dev/null
@@ -0,0 +1,65 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Pango
+{
+
+Rectangle::Rectangle()
+{
+  gobject_.x = gobject_.y = 0;
+  gobject_.width = gobject_.height = 0;
+}
+
+Rectangle::Rectangle(int x, int y, int width, int height)
+{
+  gobject_.x = x;
+  gobject_.y = y;
+  gobject_.width = width;
+  gobject_.height = height;
+}
+
+Rectangle::Rectangle(const PangoRectangle* src)
+{
+  gobject_.x = src->x;
+  gobject_.y = src->y;
+  gobject_.width = src->width;
+  gobject_.height = src->height;
+}
+
+bool Rectangle::equal(const Rectangle& rhs) const
+{
+  return (get_x() == rhs.get_x() && get_y() == rhs.get_y() &&
+          get_width() == rhs.get_width() && get_height() == rhs.get_height());
+}
+
+} /* namespace Pango */
+
+
+namespace Glib
+{
+
+Pango::Rectangle& wrap(PangoRectangle* object)
+{
+  return *reinterpret_cast<Pango::Rectangle*>(object);
+}
+
+const Pango::Rectangle& wrap(const PangoRectangle* object)
+{
+  return *reinterpret_cast<const Pango::Rectangle*>(object);
+}
+
+} /* namespace Glib */
diff --git a/pango/src/rectangle.hg b/pango/src/rectangle.hg
new file mode 100644 (file)
index 0000000..cbb9e9e
--- /dev/null
@@ -0,0 +1,149 @@
+/* Copyright (C) 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+_CONFIGINCLUDE(pangommconfig.h)
+
+#include <pango/pango.h>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+/** A Pango::Rectangle represents a rectangle.
+ * It is frequently used to represent the logical or ink extents of a single glyph or section of text.
+ * The coordinate system for each rectangle has its origin at the base line and the horizontal
+ * origin of the character with increasing coordinates extending to the right and down.
+ * get_ascent(), get_descent(), get_lbearing(), and get_rbearing() can be used to convert
+ * from the extents rectangle to more traditional font metrics.
+ * The units of rectangles usually are in 1/Pango::SCALE of a device unit.
+ */
+class PANGOMM_API Rectangle
+{
+  _CLASS_GENERIC(Rectangle, PangoRectangle)
+
+public:
+  Rectangle();
+  Rectangle(int x, int y, int width, int height);
+  explicit Rectangle(const PangoRectangle* src);
+
+  /** Sets the X coordinate of the left side of the rectangle.
+   * @param x The new X coordinate.
+   */
+  void set_x(int x)        { gobject_.x = x; }
+
+  /** Sets the Y coordinate of the top side of the rectangle.
+   * @param y The new Y coordinate.
+   */
+  void set_y(int y)        { gobject_.y = y; }
+
+  /** Sets the width of the rectangle.
+   * @param w The new width.
+   */
+  void set_width(int w)    { gobject_.width = w; }
+
+  /** Sets the height of the rectangle.
+   * @param h The new height.
+   */
+  void set_height(int h)   { gobject_.height = h; }
+
+  /** Gets the X coordinate of the left side of the rectangle.
+   * @return The X coordinate.
+   */
+  int get_x() const        { return gobject_.x; }
+
+  /** Gets the Y coordinate of the top side of the rectangle.
+   * @return The Y coordinate.
+   */
+  int get_y() const        { return gobject_.y; }
+
+  /** Gets the width of the rectangle.
+   * @return The width.
+   */
+  int get_width() const    { return gobject_.width; }
+
+  /** Gets the height of the rectangle.
+   * @return The height.
+   */
+  int get_height() const   { return gobject_.height; }
+
+  /** Extracts the ascent from a Pango::Rectangle 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.
+   * @return The ascent of the character.
+   */
+  int get_ascent() const   { return PANGO_ASCENT(*gobj()); }
+
+  /** Extracts the descent from a Pango::Rectangle 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.
+   * @return The descent of the character.
+   */
+  int get_descent() const  { return PANGO_DESCENT(*gobj()); }
+
+  /** Extracts the left bearing from a Pango::Rectangle 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.
+   * @return The left bearing of the character.
+   */
+  int get_lbearing() const { return PANGO_LBEARING(*gobj()); }
+
+  /** Extracts the right bearing from a Pango::Rectangle 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.
+   * @return The right bearing of the character.
+   */
+  int get_rbearing() const { return PANGO_RBEARING(*gobj()); }
+
+  /** Checks for equality of two Pango::Rectangles.
+   * @param rhs The Pango::Rectangle to compare with.
+   * @return true if @a rhs is equal with the rectangle.
+   */
+  bool equal(const Rectangle& rhs) const;
+
+  /// Provides access to the underlying C GObject.  
+  PangoRectangle*       gobj()       { return &gobject_; }
+  /// Provides access to the underlying C GObject.
+  const PangoRectangle* gobj() const { return &gobject_; }
+
+protected:
+  PangoRectangle gobject_;
+};
+
+/** @relates Pango::Rectangle */
+inline bool operator==(const Rectangle& lhs, const Rectangle& rhs)
+  { return lhs.equal(rhs); }
+
+/** @relates Pango::Rectangle */
+inline bool operator!=(const Rectangle& lhs, const Rectangle& rhs)
+  { return !lhs.equal(rhs); }
+
+} /* namespace Pango */
+
+
+namespace Glib
+{
+
+/** @relates Pango::Rectangle */
+PANGOMM_API
+Pango::Rectangle& wrap(PangoRectangle* object);
+
+/** @relates Pango::Rectangle */
+PANGOMM_API
+const Pango::Rectangle& wrap(const PangoRectangle* object);
+
+} /* namespace Glib */
diff --git a/pango/src/renderer.ccg b/pango/src/renderer.ccg
new file mode 100644 (file)
index 0000000..c2c8793
--- /dev/null
@@ -0,0 +1,38 @@
+/* 
+ * Copyright 2004 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pango/pango.h>
+
+using Part = Pango::Renderer::Part;
+
+namespace Pango
+{
+
+Matrix Renderer::get_matrix() const
+{
+  const auto* matrix = pango_renderer_get_matrix(const_cast<PangoRenderer*>(gobj()));
+  if(matrix)
+    return *matrix;
+  else
+  {
+    PangoMatrix identity_transform = PANGO_MATRIX_INIT;
+    return identity_transform;
+  }
+}
+
+} /* namespace Pango */
diff --git a/pango/src/renderer.hg b/pango/src/renderer.hg
new file mode 100644 (file)
index 0000000..a8c78e0
--- /dev/null
@@ -0,0 +1,106 @@
+/* renderer.h
+ *
+ * Copyright(C) 2004 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+
+#include <glibmm/object.h>
+#include <pangomm/context.h>
+#include <pangomm/glyphitem.h>
+#include <pangomm/glyphstring.h>
+#include <pangomm/layout.h>
+#include <pangomm/layoutline.h>
+
+_DEFS(pangomm,pango)
+_PINCLUDE(glibmm/private/object_p.h)
+_PINCLUDE(pango/pango.h)
+
+namespace Pango
+{
+
+/** Pango::Renderer is a base class that contains the necessary logic for rendering a Pango::Layout or Pango::LayoutLine. 
+ * By subclassing Pango::Renderer and overriding operations such as draw_glyphs and draw_rectangle, 
+ * renderers for particular font backends and destinations can be created.
+ */
+class PANGOMM_API Renderer : public Glib::Object
+{
+  _CLASS_GOBJECT(Renderer, PangoRenderer, PANGO_RENDERER, Glib::Object, GObject, , , PANGOMM_API)
+
+public:
+  _WRAP_ENUM(Part, PangoRenderPart, decl_prefix PANGOMM_API)
+
+  _WRAP_METHOD(void draw_layout(const Glib::RefPtr<Layout>& layout, int x, int y), pango_renderer_draw_layout)
+  _WRAP_METHOD(void draw_layout_line(const Glib::RefPtr<LayoutLine>& line, int x, int y), pango_renderer_draw_layout_line)
+  _WRAP_METHOD(void draw_glyphs(const Glib::RefPtr<Font>& font, const GlyphString& glyphs, int x, int y), pango_renderer_draw_glyphs)
+  _WRAP_METHOD(void draw_glyph_item(const Glib::ustring& text, const GlyphItem& glyph_item, int x, int y), pango_renderer_draw_glyph_item)
+  _WRAP_METHOD(void draw_rectangle(Part part, int x, int y, int width, int height), pango_renderer_draw_rectangle)
+  _WRAP_METHOD(void draw_error_underline(int x, int y, int width, int height), pango_renderer_draw_error_underline)
+  _WRAP_METHOD(void draw_trapezoid(Part part, double y1, double x11, double x21, double y2, double x12, double x22), pango_renderer_draw_trapezoid)
+  _WRAP_METHOD(void draw_glyph(const Glib::RefPtr<Font>& font, Glyph glyph, double x, double y), pango_renderer_draw_glyph)
+
+  _WRAP_METHOD(void activate(), pango_renderer_activate)
+  _WRAP_METHOD(void deactivate(), pango_renderer_deactivate)
+
+  _WRAP_METHOD(void part_changed(Part part), pango_renderer_part_changed)
+
+  _WRAP_METHOD(void set_color(Part part, const Color& color), pango_renderer_set_color)
+
+#m4 _CONVERSION(`PangoColor*',`Color',`Color($3)')
+  _WRAP_METHOD(Color get_color(Part part) const, pango_renderer_get_color)
+
+  _WRAP_METHOD(void set_alpha(Part part, guint16 alpha), pango_renderer_set_alpha)
+  _WRAP_METHOD(guint16 get_alpha(Part part) const, pango_renderer_get_alpha)
+
+  _WRAP_METHOD(void set_matrix(const Matrix& matrix), pango_renderer_set_matrix)
+
+  /** Gets the transformation matrix that will be applied when rendering.
+   * See set_matrix().
+   *
+   * @return The matrix. If no matrix has been set, an identity matrix is returned.
+   */
+  Matrix get_matrix() const;
+  _IGNORE(pango_renderer_get_matrix)
+
+  _WRAP_METHOD(Glib::RefPtr<Layout> get_layout(), pango_renderer_get_layout, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const Layout> get_layout() const, pango_renderer_get_layout, refreturn, constversion)
+
+  _WRAP_METHOD(Glib::RefPtr<LayoutLine> get_layout_line(), pango_renderer_get_layout_line, refreturn)
+  _WRAP_METHOD(Glib::RefPtr<const LayoutLine> get_layout_line() const, pango_renderer_get_layout_line, refreturn, constversion)
+
+protected:
+#m4begin
+_CONVERSION(`PangoFont*',`const Glib::RefPtr<Font>&',`Glib::wrap($3, true)')
+_CONVERSION(`PangoGlyphString*',`const GlyphString&',`Glib::wrap($3, true)')
+_CONVERSION(`const AttrShape&',`PangoAttrShape*',`const_cast<PangoAttrShape*>(($3).gobj())')
+_CONVERSION(`PangoAttrShape*',`const AttrShape&',`Glib::wrap($3, true)')
+_CONVERSION(`const GlyphItem&',`PangoGlyphItem*',`const_cast<PangoGlyphItem*>(($3).gobj())')
+_CONVERSION(`PangoGlyphItem*',`const GlyphItem&',`Glib::wrap($3, true)')
+#m4end
+  _WRAP_VFUNC(void draw_glyphs(const Glib::RefPtr<Font>& font, const GlyphString& glyphs, int x, int y), draw_glyphs)
+  _WRAP_VFUNC(void draw_rectangle(Part part, int x, int y, int width, int height), draw_rectangle)
+  _WRAP_VFUNC(void draw_error_underline(int x, int y, int width, int height), draw_error_underline)
+  _WRAP_VFUNC(void draw_shape(const AttrShape& attr, int x, int y), draw_shape)
+  _WRAP_VFUNC(void draw_trapezoid(Part part, double y1, double x11, double x21, double y2, double x12, double x22), draw_trapezoid)
+  _WRAP_VFUNC(void draw_glyph(const Glib::RefPtr<Font>& font, Glyph glyph, double x, double y), draw_glyph)
+  _WRAP_VFUNC(void part_changed(Part part), part_changed)
+  _WRAP_VFUNC(void begin(), begin)
+  _WRAP_VFUNC(void end(), end)
+  _WRAP_VFUNC(void prepare_run(const GlyphItem& run), prepare_run)
+  _WRAP_VFUNC(void draw_glyph_item(const Glib::ustring& text, const GlyphItem& glyph_item, int x, int y), draw_glyph_item)
+};
+
+} /* namespace Pango */
diff --git a/pango/src/tabarray.ccg b/pango/src/tabarray.ccg
new file mode 100644 (file)
index 0000000..3dc0f1e
--- /dev/null
@@ -0,0 +1,76 @@
+// -*- c++ -*-
+/* $Id: tabarray.ccg,v 1.2 2006/07/05 18:46:36 markoa Exp $ */
+
+/*
+ *
+ * Copyright 2002 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+namespace Pango
+{
+
+TabArray::TabArray(int initial_size, bool positions_in_pixels)
+{
+  gobject_ = pango_tab_array_new(initial_size, (gboolean)positions_in_pixels);
+}
+
+std::pair<TabAlign,int> TabArray::get_tab(int tab_index) const
+{
+  PangoTabAlign p_alignment;
+  TabAlign alignment;
+  int location;
+  pango_tab_array_get_tab(const_cast<PangoTabArray*>(gobj()), tab_index, &p_alignment, &location);
+  alignment = static_cast<TabAlign>(p_alignment);
+  return std::pair<TabAlign,int>(alignment, location);
+}
+
+std::vector<std::pair<TabAlign,int>> TabArray::get_tabs() const
+{
+  typedef std::pair<TabAlign,int> PairType;
+
+  PairType* pair_buffer = nullptr;
+  const int size = pango_tab_array_get_size(const_cast<PangoTabArray*>(gobj()));
+
+  if(size > 0)
+  {
+    // Get arrays
+    PangoTabAlign* pAlignments = nullptr;
+    int*           pLocations  = nullptr;
+    pango_tab_array_get_tabs(const_cast<PangoTabArray*>(gobj()), &pAlignments, &pLocations);
+
+    if(pAlignments && pLocations)
+    {
+      // Create temporary C array.  Fortunately, the C++ type is POD,
+      // so we can safely store it in the array.
+      pair_buffer = g_new(PairType, size);
+
+      for(int i = 0; i < size; ++i)
+      {
+        pair_buffer[i].first  = (TabAlign)(pAlignments[i]);
+        pair_buffer[i].second = pLocations[i];
+      }
+    }
+
+    g_free(pAlignments);
+    g_free(pLocations);
+  }
+
+  return Glib::ArrayHandler<PairType>::array_to_vector(pair_buffer, size, Glib::OWNERSHIP_SHALLOW);
+}
+
+} /* namespace Pango */
+
diff --git a/pango/src/tabarray.hg b/pango/src/tabarray.hg
new file mode 100644 (file)
index 0000000..a5f7048
--- /dev/null
@@ -0,0 +1,58 @@
+/* tabarray.h
+ *
+ * Copyright (C) 1998-1999 The gtkmm Development Team
+ *
+ * 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; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <pangomm/attrlist.h>
+#include <pango/pango.h>
+#include <utility>
+
+_DEFS(pangomm,pango)
+
+namespace Pango
+{
+
+_WRAP_ENUM(TabAlign, PangoTabAlign, decl_prefix PANGOMM_API)
+
+/** A Pango::TabArray contains an array of tab stops.
+ * Each tab stop has an alignment and a position.
+ */
+class PANGOMM_API TabArray
+{
+  _CLASS_BOXEDTYPE(TabArray, PangoTabArray, NONE, pango_tab_array_copy, pango_tab_array_free, PANGOMM_API)
+  _IGNORE(pango_tab_array_free, pango_tab_array_copy, pango_tab_array_get_tab, pango_tab_array_get_tabs, pango_tab_array_new_with_positions)
+public:
+  explicit TabArray(int initial_size, bool positions_in_pixels = true);
+
+  _WRAP_METHOD(int get_size() const, pango_tab_array_get_size)
+  _WRAP_METHOD(void resize(int new_size), pango_tab_array_resize)
+  _WRAP_METHOD(void set_tab(int tab_index, TabAlign alignment, int location), pango_tab_array_set_tab)
+
+  /** Gets the alignment and position of a tab stop.
+   * @return An std::pair<TabAlign, int>. The first element represents the tab stop alignment, the second one is the tab position.
+   */
+  std::pair<TabAlign, int> get_tab(int tab_index) const;
+
+  /** Gets an array of std::pairs containing the tab stop alignments and tab positions.
+   * @return An array of std::pair<TabAlign, int>. The first element in each pair represents the tab stop alignment, the second one is the tab position.
+   */
+  std::vector<std::pair<TabAlign, int>> get_tabs() const;
+
+  _WRAP_METHOD(bool get_positions_in_pixels() const, pango_tab_array_get_positions_in_pixels)
+};
+
+} //namespace Pango
diff --git a/pangomm.doap b/pangomm.doap
new file mode 100644 (file)
index 0000000..e6f0a56
--- /dev/null
@@ -0,0 +1,28 @@
+<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">pangomm</name>
+  <shortdesc xml:lang="en">C++ bindings for Pango</shortdesc>
+  <homepage rdf:resource="http://www.gtkmm.org/" />
+  <mailing-list rdf:resource="mailto:gtkmm-list@gnome.org" />
+  <category rdf:resource="http://api.gnome.org/doap-extensions#core" />
+  <programming-language>C++</programming-language>
+
+  <maintainer>
+    <foaf:Person>
+      <foaf:name>Murray Cumming</foaf:name>
+      <foaf:mbox rdf:resource="mailto:murrayc@murrayc.com" />
+      <gnome:userid>murrayc</gnome:userid>
+    </foaf:Person>
+  </maintainer>
+  <maintainer>
+    <foaf:Person>
+      <foaf:name>Daniel Elstner</foaf:name>
+      <foaf:mbox rdf:resource="mailto:daniel.kitta@gmail.com" />
+      <gnome:userid>daniel</gnome:userid>
+    </foaf:Person>
+  </maintainer>
+</Project>
diff --git a/subprojects/cairomm-1.16.wrap b/subprojects/cairomm-1.16.wrap
new file mode 100644 (file)
index 0000000..12f8821
--- /dev/null
@@ -0,0 +1,8 @@
+[wrap-git]
+directory=cairomm
+url=https://gitlab.freedesktop.org/cairo/cairomm.git
+revision=master
+depth=1
+
+[provide]
+dependency_names = cairomm-1.16
diff --git a/subprojects/glibmm-2.68.wrap b/subprojects/glibmm-2.68.wrap
new file mode 100644 (file)
index 0000000..a0fef48
--- /dev/null
@@ -0,0 +1,8 @@
+[wrap-git]
+directory=glibmm
+url=https://gitlab.gnome.org/GNOME/glibmm.git
+revision=master
+depth=1
+
+[provide]
+dependency_names = glibmm-2.68, giomm-2.68
diff --git a/subprojects/pango.wrap b/subprojects/pango.wrap
new file mode 100644 (file)
index 0000000..e3ce8dc
--- /dev/null
@@ -0,0 +1,8 @@
+[wrap-git]
+directory=pango
+url=https://gitlab.gnome.org/GNOME/pango.git
+revision=main
+depth=1
+
+[provide]
+dependency_names = pango, pangocairo
diff --git a/tests/Makefile.am b/tests/Makefile.am
new file mode 100644 (file)
index 0000000..8c1ce52
--- /dev/null
@@ -0,0 +1,2 @@
+SUBDIRS =
+
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644 (file)
index 0000000..09741de
--- /dev/null
@@ -0,0 +1,40 @@
+## Copyright (c) 2009  Openismus GmbH  <http://www.openismus.com/>
+##
+## This file is part of pangomm.
+##
+## pangomm 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.
+##
+## pangomm 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.  If not, see <http://www.gnu.org/licenses/>.
+
+AUTOMAKE_OPTIONS = subdir-objects
+
+include $(srcdir)/m4/filelist.am
+
+# Install m4 files for reuse by other *mm projects, when building from git:
+# TODO: All these Perl scripts and M4 files are architecture-independent
+# and should probably go somewhere below $(pkgdatadir) instead.
+gmmproc_bindir = $(libdir)/$(PANGOMM_MODULE_NAME)/proc
+gmmproc_m4dir  = $(gmmproc_bindir)/m4
+dist_gmmproc_m4_DATA = $(files_codegen_m4:%=m4/%)
+
+noinst_PROGRAMS  = extra_defs_gen/generate_extra_defs
+
+extra_defs_gen_generate_extra_defs_SOURCES = extra_defs_gen/generate_defs_pango.cc
+extra_defs_gen_generate_extra_defs_LDADD   = $(PANGOMM_LIBS) -lglibmm_generate_extra_defs-2.68
+extra_defs_gen_generate_extra_defs_LDFLAGS = -no-undefined -avoid-version
+
+AM_CPPFLAGS = -I$(top_builddir) $(GTHREAD_CFLAGS) $(PANGOMM_CFLAGS)
+AM_CXXFLAGS = $(PANGOMM_WXXFLAGS)
+
+# Instruct GNU make to delete the targets of a rule after it failed, in
+# order to avoid the complication of handling that situation manually.
+.DELETE_ON_ERROR:
diff --git a/tools/dummy-header.py b/tools/dummy-header.py
new file mode 100755 (executable)
index 0000000..8c61464
--- /dev/null
@@ -0,0 +1,15 @@
+#!/usr/bin/env python3
+
+# External command, intended to be called with custom_target() in meson.build.
+
+# dummy-header.py <output_file>
+
+import os
+import sys
+
+output_file = sys.argv[1]
+
+# A dummy header file is created if it does not exist, but it's never updated.
+if not os.path.isfile(output_file):
+  with open(output_file, 'w') as f:
+    f.write('// Dummy header file. Created and used by meson.build\n')
diff --git a/tools/extra_defs_gen/generate_defs_pango.cc b/tools/extra_defs_gen/generate_defs_pango.cc
new file mode 100644 (file)
index 0000000..0473b94
--- /dev/null
@@ -0,0 +1,42 @@
+/* $Id: generate_defs_gtk.cc 934 2007-11-05 16:13:35Z murrayc $ */
+
+/* generate_defs_gtk.cc
+ *
+ * Copyright (C) 2001 The Free Software Foundation
+ *
+ * This library 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 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public
+ * License along with this library; if not, write to the Free
+ * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <glibmm_generate_extra_defs/generate_extra_defs.h>
+#include <pango/pango.h>
+#include <pango/pangocairo.h>
+
+int main(int, char**)
+{
+  // g_type_init() is deprecated as of glib-2.36.
+  // g_type_init();
+
+  std::cout << get_defs(PANGO_TYPE_CONTEXT)        << std::endl
+            << get_defs(PANGO_TYPE_FONT)           << std::endl
+            << get_defs(PANGO_TYPE_FONT_FACE)      << std::endl
+            << get_defs(PANGO_TYPE_FONT_FAMILY)    << std::endl
+            << get_defs(PANGO_TYPE_FONT_MAP)       << std::endl
+            << get_defs(PANGO_TYPE_CAIRO_FONT)     << std::endl
+            << get_defs(PANGO_TYPE_CAIRO_FONT_MAP) << std::endl
+            << get_defs(PANGO_TYPE_FONTSET)        << std::endl
+            << get_defs(PANGO_TYPE_LAYOUT)         << std::endl
+            << get_defs(PANGO_TYPE_RENDERER)       << std::endl;
+  return 0;
+}
diff --git a/tools/extra_defs_gen/meson.build b/tools/extra_defs_gen/meson.build
new file mode 100644 (file)
index 0000000..6548d05
--- /dev/null
@@ -0,0 +1,35 @@
+# tools/extra_defs_gen
+
+# Input: cpp_compiler, pangomm_build_dep, install_libdir, pangomm_pcname,
+#        msvc14x_toolset_ver, glibmm_dep
+# Output: m4_files, install_m4dir
+
+glibmm_generate_extra_defs_dep = cpp_compiler.find_library(
+  'glibmm_generate_extra_defs@0@-2.68'.format(msvc14x_toolset_ver),
+  required: glibmm_dep.type_name() != 'internal',
+)
+if not glibmm_generate_extra_defs_dep.found()
+  glibmm_generate_extra_defs_dep = dependency(
+    '', fallback: ['glibmm-2.68', 'glibmm_generate_extra_defs_dep'],
+  )
+endif
+
+executable('generate_extra_defs', 'generate_defs_pango.cc',
+  dependencies: [pangomm_build_dep, glibmm_generate_extra_defs_dep],
+  implicit_include_directories: false,
+  install: false,
+)
+
+# Install m4 files for reuse by other *mm projects, when building from git.
+m4_basefiles = [
+  'convert.m4',
+  'convert_pango.m4',
+  'convert_pangomm.m4',
+]
+m4_files = []
+foreach file : m4_basefiles
+  m4_files += '..' / 'm4' / file
+endforeach
+m4_files = files(m4_files)
+install_m4dir = install_libdir / pangomm_pcname / 'proc' / 'm4'
+install_data(m4_files, install_dir: install_m4dir)
diff --git a/tools/gen_scripts/generate_all.sh b/tools/gen_scripts/generate_all.sh
new file mode 100755 (executable)
index 0000000..4fa3be6
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/bash
+
+# Regenerate all pangomm's docs.xml and .defs files
+
+cd "$(dirname "$0")"
+
+echo === pango_generate_docs.sh ===
+./pango_generate_docs.sh
+echo === pango_generate_enums.sh ===
+./pango_generate_enums.sh
+echo === pango_generate_extra_defs.sh ===
+./pango_generate_extra_defs.sh
+echo === pango_generate_methods.sh ===
+./pango_generate_methods.sh
diff --git a/tools/gen_scripts/init_generate.sh b/tools/gen_scripts/init_generate.sh
new file mode 100755 (executable)
index 0000000..7278838
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+# This file is part of pangomm.
+# Initializes some variables for the scripts that generate docs and defs files.
+# Not intented to be called directly from the command line.
+
+# Global environment variables:
+# GMMPROC_GEN_SOURCE_DIR  Top directory where source files are searched for.
+#                         Default value: $(dirname "$0")/../../..
+#                         i.e. 3 levels above this file.
+# GMMPROC_GEN_BUILD_DIR   Top directory where built files are searched for.
+#                         Default value: $GMMPROC_GEN_SOURCE_DIR
+#
+# If you use jhbuild, you can set these environment variables equal to jhbuild's
+# configuration variables checkoutroot and buildroot, respectively.
+# Usually you can leave GMMPROC_GEN_SOURCE_DIR undefined.
+# If you have set buildroot=None, GMMPROC_GEN_BUILD_DIR can also be undefined.
+
+# Root directory of pangomm source files.
+root_dir="$(dirname "$0")/../.."
+
+# Where to search for source files.
+if [ -z "$GMMPROC_GEN_SOURCE_DIR" ]; then
+  GMMPROC_GEN_SOURCE_DIR="$root_dir/.."
+fi
+
+# Where to search for built files.
+if [ -z "$GMMPROC_GEN_BUILD_DIR" ]; then
+  GMMPROC_GEN_BUILD_DIR="$GMMPROC_GEN_SOURCE_DIR"
+fi
+
+# Scripts in glibmm. These are source files.
+gen_docs="$GMMPROC_GEN_SOURCE_DIR/glibmm/tools/defs_gen/docextract_to_xml.py"
+gen_methods="$GMMPROC_GEN_SOURCE_DIR/glibmm/tools/defs_gen/h2def.py"
+gen_enums="$GMMPROC_GEN_SOURCE_DIR/glibmm/tools/enum.pl"
+
+# Where to find executables that generate extra defs (signals and properties).
+# pangomm is built with autotools.
+# autotools support, but don't require, non-source-dir builds.
+extra_defs_gen_dir="$GMMPROC_GEN_BUILD_DIR/pangomm/tools/extra_defs_gen"
+
+source_prefix="$GMMPROC_GEN_SOURCE_DIR/pango"
+build_prefix="$GMMPROC_GEN_BUILD_DIR/pango"
+if [ "$source_prefix" == "$build_prefix" ]; then
+  # pango is built with meson, which requires non-source-dir builds.
+  # This is what jhbuild does, if neccesary, to force non-source-dir builds.
+  build_prefix="$build_prefix/build"
+fi
diff --git a/tools/gen_scripts/pango_generate_docs.sh b/tools/gen_scripts/pango_generate_docs.sh
new file mode 100755 (executable)
index 0000000..f43ea1e
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/bash
+
+# The script assumes that it resides in the tools/gen_scripts/ directory and
+# the XML file will be placed in pango/src.
+
+source "$(dirname "$0")/init_generate.sh"
+
+out_dir="$root_dir/pango/src"
+
+params="--with-properties --no-recursion"
+for dir in "$source_prefix"/pango "$build_prefix"/pango; do
+  if [ -d "$dir" ]; then
+    params="$params -s $dir"
+  fi
+done
+
+"$gen_docs" $params > "$out_dir/pango_docs.xml"
diff --git a/tools/gen_scripts/pango_generate_enums.sh b/tools/gen_scripts/pango_generate_enums.sh
new file mode 100755 (executable)
index 0000000..6f6899a
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# The script assumes that it resides in the tools/gen_scripts/ directory and
+# the defs file will be placed in pango/src.
+
+source "$(dirname "$0")/init_generate.sh"
+
+out_dir="$root_dir/pango/src"
+
+shopt -s extglob # Enable extended pattern matching
+shopt -s nullglob # Skip a filename pattern that matches no file
+# Process files whose names end with .h, but not with private.h or internal.h.
+"$gen_enums" "$source_prefix"/pango/!(*private|*internal).h "$build_prefix"/pango/!(*private).h > "$out_dir"/pango_enums.defs
diff --git a/tools/gen_scripts/pango_generate_extra_defs.sh b/tools/gen_scripts/pango_generate_extra_defs.sh
new file mode 100755 (executable)
index 0000000..efd6749
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+# The script assumes that it resides in the tools/gen_scripts directory
+# and the defs files will be placed in pango/src.
+
+source "$(dirname "$0")/init_generate.sh"
+
+out_dir="$root_dir/pango/src"
+
+# Without LC_ALL=C documentation (docs "xxx") may be translated in the .defs file.
+LC_ALL=C "$extra_defs_gen_dir"/generate_extra_defs > "$out_dir"/pango_signals.defs
diff --git a/tools/gen_scripts/pango_generate_methods.sh b/tools/gen_scripts/pango_generate_methods.sh
new file mode 100755 (executable)
index 0000000..ca1b8d6
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/bash
+
+# The script assumes that it resides in the tools/gen_scripts/ directory
+# and the defs file will be placed in pango/src.
+
+source "$(dirname "$0")/init_generate.sh"
+
+out_dir="$root_dir/pango/src"
+
+shopt -s extglob # Enable extended pattern matching
+shopt -s nullglob # Skip a filename pattern that matches no file
+# Process files whose names end with .h, but not with private.h or internal.h.
+"$gen_methods" "$source_prefix"/pango/!(*private|*internal).h "$build_prefix"/pango/!(*private).h > "$out_dir"/pango_methods.defs
diff --git a/tools/m4/convert.m4 b/tools/m4/convert.m4
new file mode 100644 (file)
index 0000000..e6ef4b1
--- /dev/null
@@ -0,0 +1,7 @@
+dnl $Id: convert.m4 2 2003-01-21 13:41:59Z murrayc $
+
+# Other libraries, such as libgnomeuimm, can provide their own convert.m4 files,
+# Maybe choosing to include the same files as this one.
+
+include(convert_glibmm.m4)
+include(convert_pangomm.m4)
diff --git a/tools/m4/convert_pango.m4 b/tools/m4/convert_pango.m4
new file mode 100644 (file)
index 0000000..1825792
--- /dev/null
@@ -0,0 +1,179 @@
+
+# Enums:
+_CONV_ENUM(Pango,AttrType)
+_CONV_ENUM(Pango,Underline)
+_CONV_ENUM(Pango,Overline)
+_CONV_ENUM(Pango,ShowFlags)
+_CONV_ENUM(Pango,TextTransform)
+_CONV_ENUM(Pango,BaselineShift)
+_CONV_ENUM(Pango,FontScale)
+_CONV_ENUM(Pango,Direction)
+_CONV_INCLASS_ENUM(Pango,Coverage,Level)
+_CONV_ENUM(Pango,Style)
+_CONV_ENUM(Pango,Variant)
+_CONV_ENUM(Pango,Stretch)
+_CONV_ENUM(Pango,Weight)
+_CONV_ENUM(Pango,FontMask)
+_CONV_ENUM(Pango,Alignment)
+_CONV_ENUM(Pango,WrapMode)
+_CONV_ENUM(Pango,TabAlign)
+_CONV_ENUM(Pango,Script)
+_CONV_ENUM(Pango,EllipsizeMode)
+_CONV_INCLASS_ENUM(Pango,Renderer,Part,PangoRenderPart)
+_CONV_ENUM(Pango,Gravity)
+_CONV_ENUM(Pango,GravityHint)
+_CONV_ENUM(Pango,ShapeFlags)
+
+# General conversions:
+_CONVERSION(`gchar*',`const char*',`($3)')
+_CONVERSION(`guchar*&',`guchar**',`&($3)')
+_CONVERSION(`int*&',`int**',`&($3)')
+
+
+# Wrapper type conversions:
+_CONVERSION(`PangoLanguage*',`Language',`Language($3)')
+_CONVERSION(`PangoLanguage*',`Pango::Language',`Pango::Language($3)')
+_CONVERSION(`const Language&',`const PangoLanguage*',`($3).gobj()')
+_CONVERSION(`const Language&',`PangoLanguage*',`const_cast<PangoLanguage*>(`($3).gobj()')')
+
+_CONVERSION(`Rectangle&',`PangoRectangle*',`($3).gobj()')
+_CONVERSION(`Rectangle',`PangoRectangle',`*($3).gobj()')
+_CONVERSION(`PangoRectangle',`Rectangle',`Rectangle(&($3))')
+
+_CONVERSION(`Color&',`PangoColor*',`($3).gobj()')
+_CONVERSION(`const Color&',`const PangoColor*',`($3).gobj()')
+_CONVERSION(`Color',`PangoColor',`*($3).gobj()')
+_CONVERSION(`PangoColor',`Color',`Color(&($3))')
+
+_CONVERSION(`PangoFontDescription*',`FontDescription',`FontDescription(($3))')
+_CONVERSION(`const PangoFontDescription*',`FontDescription',`FontDescription(const_cast<PangoFontDescription*>($3))')
+_CONVERSION(`Pango::FontDescription&',`PangoFontDescription*',`($3).gobj()')
+_CONVERSION(`FontDescription&',`PangoFontDescription*',`($3).gobj()')
+_CONVERSION(`const FontDescription&',`const PangoFontDescription*',`($3).gobj()')
+_CONVERSION(`const Pango::FontDescription&',`const PangoFontDescription*',`($3).gobj()')
+_CONVERSION(`const Pango::FontDescription&',`PangoFontDescription*',`const_cast<PangoFontDescription*>(`($3).gobj()')')
+_CONVERSION(`const FontDescription&',`PangoFontDescription*',`const_cast<PangoFontDescription*>(`($3).gobj()')')
+
+_CONVERSION(`PangoFontMetrics*',`FontMetrics',`FontMetrics(($3))')
+
+_CONVERSION(`PangoAttribute*',`Attribute',`Attribute(($3))')
+_CONVERSION(`Attribute&',`PangoAttribute*',`($3).gobj()')
+_CONVERSION(`const Attribute&',`const PangoAttribute*',`($3).gobj()')
+
+_CONVERSION(`PangoAttrList*',`AttrList',`AttrList(($3))')
+_CONVERSION(`PangoAttrList*',`Pango::AttrList',`Pango::AttrList(($3))')
+_CONVERSION(`AttrList&',`PangoAttrList*',`($3).gobj()')
+_CONVERSION(`Pango::AttrList&',`PangoAttrList*',`($3).gobj()')
+_CONVERSION(`const AttrList&',`PangoAttrList*',`const_cast<PangoAttrList*>(($3).gobj())')
+
+_CONVERSION(`PangoAttrIterator*',`AttrIter',`Glib::wrap(($3))')
+
+_CONVERSION(`PangoAnalysis',`Analysis',`Analysis(&($3))')
+_CONVERSION(`PangoAnalysis',`const Analysis',`Analysis(&($3))')
+_CONVERSION(`Analysis&',`PangoAnalysis*',`($3).gobj()')
+_CONVERSION(`const Analysis&',`const PangoAnalysis*',`($3).gobj()')
+_CONVERSION(`const Analysis&',`PangoAnalysis*',`const_cast<PangoAnalysis*>(($3).gobj())')
+
+_CONVERSION(`PangoItem*',`Item',`Item(($3))')
+_CONVERSION(`PangoItem*',`const Item',`Item(($3))')
+_CONVERSION(`Item&',`PangoItem*',`($3).gobj()')
+_CONVERSION(`const Item&',`const PangoItem*',`($3).gobj()')
+
+_EQUAL(`PangoGlyph',`Glyph')
+_EQUAL(`PangoGlyphUnit',`GlyphUnit')
+_EQUAL(`PangoGlyphVisAttr',`GlyphVisAttr')
+#_CONVERSION(`PangoGlyphVisAttr',`GlyphVisAttr',`GlyphVisAttr(&($3))')
+#_CONVERSION(`GlyphVisAttr',`PangoGlyphVisAttr',`*($3).gobj()')
+_CONVERSION(`PangoGlyphGeometry',`GlyphGeometry',`GlyphGeometry(&($3))')
+_CONVERSION(`GlyphGeometry',`PangoGlyphGeometry',`*($3).gobj()')
+
+_CONVERSION(`PangoGlyphString*',`GlyphString',`GlyphString(($3))')
+_CONVERSION(`PangoGlyphString*',`const GlyphString',`GlyphString(($3))')
+_CONVERSION(`const Pango::GlyphString&',`PangoGlyphString*',const_cast<PangoGlyphString*>($3.gobj()))
+_CONVERSION(`const GlyphString&',`PangoGlyphString*',const_cast<PangoGlyphString*>($3.gobj()))
+
+_CONVERSION(`PangoLayoutRun*',`GlyphItem',`GlyphItem(($3))')
+_CONVERSION(`PangoGlyphItem*',`GlyphItem',`GlyphItem(($3))')
+_CONVERSION(`const GlyphItem&',`PangoGlyphItem*',const_cast<PangoGlyphItem*>($3.gobj()))
+
+_CONVERSION(`PangoFont*',`Glib::RefPtr<Font>',Glib::wrap($3))
+_CONVERSION(`PangoFont*',`Glib::RefPtr<Pango::Font>',Glib::wrap($3))
+_CONVERSION(`PangoFont*',`Glib::RefPtr<const Font>',Glib::wrap($3))
+_CONVERSION(`PangoFont*',`Glib::RefPtr<const Pango::Font>',Glib::wrap($3))
+_CONVERSION(`const Glib::RefPtr<Font>&',`PangoFont*',__CONVERT_REFPTR_TO_P)
+_CONVERSION(`const Glib::RefPtr<Pango::Font>&',`PangoFont*',__CONVERT_REFPTR_TO_P)
+# Special treatment for the Sun Forte compiler
+#_CONVERSION(const Glib::RefPtr<const Font>&,`PangoFont*',__CONVERT_CONST_REFPTR_TO_P)
+_CONVERSION(`const Glib::RefPtr<const Font>&',`PangoFont*',__CONVERT_CONST_REFPTR_TO_P_SUN(Font))
+#_CONVERSION(`const Glib::RefPtr<const Font>&',`PangoFont*',__CONVERT_CONST_REFPTR_TO_P)
+_CONVERSION(`const Glib::RefPtr<const Pango::Font>&',`PangoFont*',__CONVERT_CONST_REFPTR_TO_P_SUN(Pango::Font))
+
+_CONVERSION(`PangoFontFace*',`Glib::RefPtr<FontFace>',Glib::wrap($3))
+_CONVERSION(`PangoFontFace*',`Glib::RefPtr<const FontFace>',Glib::wrap($3))
+_CONVERSION(`PangoFontFace*',`Glib::RefPtr<Pango::FontFace>',Glib::wrap($3))
+_CONVERSION(`PangoFontFace*',`Glib::RefPtr<const Pango::FontFace>',Glib::wrap($3))
+_CONVERSION(`PangoFontFamily*',`Glib::RefPtr<FontFamily>',Glib::wrap($3))
+_CONVERSION(`PangoFontFamily*',`Glib::RefPtr<const FontFamily>',Glib::wrap($3))
+_CONVERSION(`PangoFontFamily*',`Glib::RefPtr<Pango::FontFamily>',Glib::wrap($3))
+_CONVERSION(`PangoFontFamily*',`Glib::RefPtr<const Pango::FontFamily>',Glib::wrap($3))
+
+_CONVERSION(`PangoFontMap*',`Glib::RefPtr<Pango::FontMap>',`Glib::wrap($3)')
+_CONVERSION(`PangoFontMap*',`Glib::RefPtr<FontMap>',Glib::wrap($3))
+_CONVERSION(`PangoFontMap*',`Glib::RefPtr<const FontMap>',Glib::wrap($3))
+_CONVERSION(`const Glib::RefPtr<FontMap>&',`PangoFontMap*',__CONVERT_REFPTR_TO_P)
+
+_CONVERSION(`PangoCairoFontMap*',`Glib::RefPtr<CairoFontMap>',Glib::wrap($3))
+
+_CONVERSION(`PangoFontSet*',`Glib::RefPtr<FontSet>',Glib::wrap($3))
+_CONVERSION(`const Glib::RefPtr<FontSet>&',`PangoFontSet*',__CONVERT_REFPTR_TO_P)
+
+_CONVERSION(`PangoContext*',`Glib::RefPtr<Pango::Context>',Glib::wrap($3))
+_CONVERSION(`PangoContext*',`Glib::RefPtr<Context>',Glib::wrap($3))
+_CONVERSION(`const Glib::RefPtr<Context>&',`PangoContext*',__CONVERT_REFPTR_TO_P)
+
+_CONVERSION(`PangoLayout*',`Glib::RefPtr<Pango::Layout>',Glib::wrap($3))
+_CONVERSION(`PangoLayout*',`Glib::RefPtr<const Pango::Layout>',Glib::wrap($3))
+_CONVERSION(`PangoLayout*',`Glib::RefPtr<Layout>',Glib::wrap($3))
+_CONVERSION(`PangoLayout*',`const Glib::RefPtr<Pango::Layout>&',Glib::wrap($3))
+_CONVERSION(`const Glib::RefPtr<Layout>&',`PangoLayout*',__CONVERT_REFPTR_TO_P)
+_CONVERSION(`const Glib::RefPtr<Pango::Layout>&',`PangoLayout*',__CONVERT_REFPTR_TO_P)
+# Special treatment for the Sun Forte compiler
+_CONVERSION(`const Glib::RefPtr<const Pango::Layout>&',`PangoLayout*',__CONVERT_CONST_REFPTR_TO_P_SUN(Pango::Layout))
+_CONVERSION(`const Glib::RefPtr<const Layout>&',`PangoLayout*',__CONVERT_CONST_REFPTR_TO_P_SUN(Layout))
+
+_CONVERSION(`PangoLayoutLine*',`Glib::RefPtr<Pango::LayoutLine>',`Glib::wrap($3)')
+_CONVERSION(`PangoLayoutLine*',`Glib::RefPtr<LayoutLine>',`Glib::wrap($3)')
+_CONVERSION(`PangoLayoutLine*',`Glib::RefPtr<const LayoutLine>',`Glib::wrap($3)')
+_CONVERSION(`const Glib::RefPtr<Pango::LayoutLine>&',`PangoLayoutLine*',__CONVERT_REFPTR_TO_P)
+_CONVERSION(`const Glib::RefPtr<LayoutLine>&',`PangoLayoutLine*',__CONVERT_REFPTR_TO_P)
+# Special treatment for the Sun Forte compiler
+_CONVERSION(`const Glib::RefPtr<const Pango::LayoutLine>&',`PangoLayoutLine*',__CONVERT_CONST_REFPTR_TO_P_SUN(Pango::LayoutLine))
+_CONVERSION(`const Glib::RefPtr<const LayoutLine>&',`PangoLayoutLine*',__CONVERT_CONST_REFPTR_TO_P_SUN(LayoutLine))
+
+_CONVERSION(`PangoLayoutIter*',`LayoutIter',`LayoutIter($3)')
+
+_CONVERSION(`PangoCoverage*',`Glib::RefPtr<Coverage>',`Glib::wrap($3)')
+_CONVERSION(`const Glib::RefPtr<Coverage>&',`PangoCoverage*',`Glib::unwrap($3)')
+
+_CONVERSION(`PangoTabArray*',`Pango::TabArray',`Pango::TabArray(($3))')
+_CONVERSION(`PangoTabArray*',`TabArray',`TabArray(($3))')
+_CONVERSION(`Pango::TabArray&',`PangoTabArray*',($3).gobj())
+_CONVERSION(`TabArray&',`PangoTabArray*',($3).gobj())
+
+_CONVERSION(`PangoTabAlign&',`PangoTabAlign*',`&$3',`*$3')
+_CONVERSION(`Pango::TabAlign&',`PangoTabAlign*',`((PangoTabAlign*) &($3))')
+_CONVERSION(`TabAlign&',`PangoTabAlign*',`((PangoTabAlign*) &($3))')
+
+_CONVERSION(`const Matrix&',`const PangoMatrix*',`&($3)')
+
+#The documentation for pango_context_get_matrix() suggests that it's generally OK 
+#to consider PANGO_MATRIX_INIT and a NULL PangoMatrix* as being equivalent:
+#But this would cause 2 function calls.
+#_CONVERSION(`const PangoMatrix*',`Matrix',`($3) ? *($3) : PANGO_MATRIX_INIT')
+#_CONVERSION(`const Matrix&',`PangoMatrix*',`const_cast<PangoMatrix*>(&($3))')
+
+_CONVERSION(`const Cairo::FontOptions&',`const cairo_font_options_t*',`($3).cobj()')
+
+_CONVERSION(`const LogAttr&',`PangoLogAttr*',&(const_cast<LogAttr&>($3)))
+
+
diff --git a/tools/m4/convert_pangomm.m4 b/tools/m4/convert_pangomm.m4
new file mode 100644 (file)
index 0000000..20f73c7
--- /dev/null
@@ -0,0 +1,5 @@
+dnl $Id: convert_gtkmm.m4 2 2003-01-21 13:41:59Z murrayc $
+
+include(convert_base.m4)
+include(convert_pango.m4)
+include(convert_glib.m4)
diff --git a/tools/m4/filelist.am b/tools/m4/filelist.am
new file mode 100644 (file)
index 0000000..72cb953
--- /dev/null
@@ -0,0 +1,3 @@
+## This file is part of pangomm.
+
+files_codegen_m4 = convert.m4 convert_pango.m4 convert_pangomm.m4