diff options
Diffstat (limited to 'fontconfig')
268 files changed, 74151 insertions, 74151 deletions
diff --git a/fontconfig/COPYING b/fontconfig/COPYING index 7f52aa710..2a5d777ff 100644 --- a/fontconfig/COPYING +++ b/fontconfig/COPYING @@ -1,27 +1,27 @@ -fontconfig/COPYING
-
-Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard
-Copyright © 2005 Patrick Lam
-Copyright © 2009 Roozbeh Pournader
-Copyright © 2008,2009 Red Hat, Inc.
-Copyright © 2008 Danilo Šegan
-
-
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of the author(s) not be used in
-advertising or publicity pertaining to distribution of the software without
-specific, written prior permission. The authors make no
-representations about the suitability of this software for any purpose. It
-is provided "as is" without express or implied warranty.
-
-THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-
+fontconfig/COPYING + +Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard +Copyright © 2005 Patrick Lam +Copyright © 2009 Roozbeh Pournader +Copyright © 2008,2009 Red Hat, Inc. +Copyright © 2008 Danilo Šegan + + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of the author(s) not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. The authors make no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + diff --git a/fontconfig/INSTALL b/fontconfig/INSTALL index 29537df99..754a32b93 100644 --- a/fontconfig/INSTALL +++ b/fontconfig/INSTALL @@ -1,42 +1,42 @@ -Fontconfig is built with the traditional configure script:
-
- $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
-
-If you checked out from the git repository (as opposed to downloading a
-tarball), you need to run autogen.sh instead of configure:
-
- $ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man
-
-Either way, that should generate valid Makefiles, then:
-
- $ make
- $ make install
-
-If you're going to package fontconfig for release, there are several
-important steps:
-
- 1. Create new version
- sh new-version.sh 2.xx.xx
-
- 2. rebuild the configuration files with autogen.sh
- ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var
-
- 3. make distcheck
-
- 4. Copy ChangeLog-2.x.y and fontconfig-2.x.y.tar.gz to
-
- freedesktop.org:/srv/fontconfig.freedesktop.org/www/release
-
- 5. Update the Fontconfig Devel wiki page
- http://fontconfig.org/wiki/Devel
-
- 6. Update the fontconfig documentation
-
- scp -rp doc/fontconfig-user.html doc/fontconfig-devel fontconfig.org:/srv/fontconfig.freedesktop.org/www
-
- 7. Compute md5sums for release files:
- md5sum fontconfig-2.4.x.tar.gz ChangeLog-2.4.x
-
- 8. Post a note to fontconfig@fontconfig.org. Include the md5sums.
- gpg sign the message.
-
+Fontconfig is built with the traditional configure script: + + $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man + +If you checked out from the git repository (as opposed to downloading a +tarball), you need to run autogen.sh instead of configure: + + $ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man + +Either way, that should generate valid Makefiles, then: + + $ make + $ make install + +If you're going to package fontconfig for release, there are several +important steps: + + 1. Create new version + sh new-version.sh 2.xx.xx + + 2. rebuild the configuration files with autogen.sh + ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var + + 3. make distcheck + + 4. Copy ChangeLog-2.x.y and fontconfig-2.x.y.tar.gz to + + freedesktop.org:/srv/fontconfig.freedesktop.org/www/release + + 5. Update the Fontconfig Devel wiki page + http://fontconfig.org/wiki/Devel + + 6. Update the fontconfig documentation + + scp -rp doc/fontconfig-user.html doc/fontconfig-devel fontconfig.org:/srv/fontconfig.freedesktop.org/www + + 7. Compute md5sums for release files: + md5sum fontconfig-2.4.x.tar.gz ChangeLog-2.4.x + + 8. Post a note to fontconfig@fontconfig.org. Include the md5sums. + gpg sign the message. + diff --git a/fontconfig/Makefile.am b/fontconfig/Makefile.am index c14211a4e..7931717a2 100644 --- a/fontconfig/Makefile.am +++ b/fontconfig/Makefile.am @@ -1,142 +1,142 @@ -#
-# fontconfig/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOCSRC=@DOCSRC@
-SUBDIRS=fontconfig fc-case fc-lang fc-glyphname src \
- fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan \
- conf.d $(DOCSRC) test
-
-EXTRA_DIST = \
- fontconfig.pc.in \
- fonts.conf.in \
- fonts.dtd \
- fontconfig.spec.in \
- fontconfig.spec \
- fontconfig-zip.in
-CLEANFILES = fonts.conf
-DISTCLEANFILES = config.cache doltcompile
-MAINTAINERCLEANFILES = \
- $(srcdir)/aclocal.m4 \
- $(srcdir)/autoscan.log \
- $(srcdir)/compile \
- $(srcdir)/config.guess \
- $(srcdir)/config.h.in \
- $(srcdir)/config.sub \
- $(srcdir)/configure.scan \
- $(srcdir)/depcomp \
- $(srcdir)/install-sh \
- $(srcdir)/ltmain.sh \
- $(srcdir)/missing \
- $(srcdir)/mkinstalldirs \
- `find "$(srcdir)" -type f -name Makefile.in -print`
-
-pkgconfigdir=$(libdir)/pkgconfig
-pkgconfig_DATA = fontconfig.pc
-
-configdir=$(CONFDIR)
-config_DATA=fonts.dtd
-
-if CROSS_COMPILING
- RUN_FC_CACHE_TEST=false
-else
- RUN_FC_CACHE_TEST=test -z "$(DESTDIR)"
-endif
-
-# Creating ChangeLog from git log:
-
-MAINTAINERCLEANFILES += $(srcdir)/ChangeLog
-EXTRA_DIST += ChangeLog
-ChangeLog: $(srcdir)/ChangeLog
-$(srcdir)/ChangeLog:
- if test -d "$(srcdir)/.git"; then \
- (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \
- && mv -f $@.tmp $@ \
- || ($(RM) $@.tmp; \
- echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \
- (test -f $@ || echo git-log is required to generate this file >> $@)); \
- else \
- test -f $@ || \
- (echo A git checkout and git-log is required to generate ChangeLog >&2 && \
- echo A git checkout and git-log is required to generate this file >> $@); \
- fi
-
-.PHONY: ChangeLog
-
-fonts.conf: fonts.conf.in Makefile
- sed \
- -e 's,@FC_CACHEDIR\@,$(FC_CACHEDIR),g' \
- -e 's,@FC_DEFAULT_FONTS\@,$(FC_DEFAULT_FONTS),g' \
- -e 's,@FC_FONTPATH\@,$(FC_FONTPATH),g' \
- -e 's,@PACKAGE\@,$(PACKAGE),g' \
- -e 's,@VERSION\@,$(VERSION),g' \
- $< > $@.tmp && \
- mv $@.tmp $@
-
-install-data-local: fonts.conf
- $(mkinstalldirs) $(DESTDIR)$(configdir) $(DESTDIR)$(fc_cachedir)
- if [ -f $(DESTDIR)$(configdir)/fonts.conf ]; then \
- echo "backing up existing $(DESTDIR)$(configdir)/fonts.conf"; \
- mv $(DESTDIR)$(configdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf.bak; \
- fi
- if [ -f $(srcdir)/fonts.conf ]; then \
- echo " $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \
- $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \
- else if [ -f fonts.conf ]; then \
- echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \
- $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \
- fi; fi
- @(if $(RUN_FC_CACHE_TEST); then \
- echo "fc-cache$(EXEEXT) -s -f -v"; \
- fc-cache/fc-cache$(EXEEXT) -s -f -v; \
- else \
- echo "***"; \
- echo "*** Warning: fonts.cache not built"; \
- echo "***"; \
- echo "*** Generate this file manually on host system using fc-cache"; \
- echo "***"; \
- fi)
-
-uninstall-local:
- if [ -f $(srcdir)/fonts.conf ]; then \
- if cmp -s $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \
- echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \
- rm -f $(DESTDIR)$(configdir)/fonts.conf; \
- fi; \
- else if [ -f fonts.conf ]; then \
- if cmp -s fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \
- echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \
- rm -f $(DESTDIR)$(configdir)/fonts.conf; \
- fi; \
- fi; fi
-
-debuild debuild-signed: debuild-dirs
- (cd $(distdir)/debian && debuild)
-
-debuild-unsigned: debuild-dirs
- (cd $(distdir)/debian && debuild -us -uc)
-
-debuild-dirs: distdir
- rm -f $(PACKAGE)_$(VERSION).orig.tar.gz
- rm -rf $(distdir).orig
- cp -a $(distdir) $(distdir).orig
- rm -rf $(distdir).orig/debian
+# +# fontconfig/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOCSRC=@DOCSRC@ +SUBDIRS=fontconfig fc-case fc-lang fc-glyphname src \ + fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan \ + conf.d $(DOCSRC) test + +EXTRA_DIST = \ + fontconfig.pc.in \ + fonts.conf.in \ + fonts.dtd \ + fontconfig.spec.in \ + fontconfig.spec \ + fontconfig-zip.in +CLEANFILES = fonts.conf +DISTCLEANFILES = config.cache doltcompile +MAINTAINERCLEANFILES = \ + $(srcdir)/aclocal.m4 \ + $(srcdir)/autoscan.log \ + $(srcdir)/compile \ + $(srcdir)/config.guess \ + $(srcdir)/config.h.in \ + $(srcdir)/config.sub \ + $(srcdir)/configure.scan \ + $(srcdir)/depcomp \ + $(srcdir)/install-sh \ + $(srcdir)/ltmain.sh \ + $(srcdir)/missing \ + $(srcdir)/mkinstalldirs \ + `find "$(srcdir)" -type f -name Makefile.in -print` + +pkgconfigdir=$(libdir)/pkgconfig +pkgconfig_DATA = fontconfig.pc + +configdir=$(CONFDIR) +config_DATA=fonts.dtd + +if CROSS_COMPILING + RUN_FC_CACHE_TEST=false +else + RUN_FC_CACHE_TEST=test -z "$(DESTDIR)" +endif + +# Creating ChangeLog from git log: + +MAINTAINERCLEANFILES += $(srcdir)/ChangeLog +EXTRA_DIST += ChangeLog +ChangeLog: $(srcdir)/ChangeLog +$(srcdir)/ChangeLog: + if test -d "$(srcdir)/.git"; then \ + (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \ + && mv -f $@.tmp $@ \ + || ($(RM) $@.tmp; \ + echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ + (test -f $@ || echo git-log is required to generate this file >> $@)); \ + else \ + test -f $@ || \ + (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ + echo A git checkout and git-log is required to generate this file >> $@); \ + fi + +.PHONY: ChangeLog + +fonts.conf: fonts.conf.in Makefile + sed \ + -e 's,@FC_CACHEDIR\@,$(FC_CACHEDIR),g' \ + -e 's,@FC_DEFAULT_FONTS\@,$(FC_DEFAULT_FONTS),g' \ + -e 's,@FC_FONTPATH\@,$(FC_FONTPATH),g' \ + -e 's,@PACKAGE\@,$(PACKAGE),g' \ + -e 's,@VERSION\@,$(VERSION),g' \ + $< > $@.tmp && \ + mv $@.tmp $@ + +install-data-local: fonts.conf + $(mkinstalldirs) $(DESTDIR)$(configdir) $(DESTDIR)$(fc_cachedir) + if [ -f $(DESTDIR)$(configdir)/fonts.conf ]; then \ + echo "backing up existing $(DESTDIR)$(configdir)/fonts.conf"; \ + mv $(DESTDIR)$(configdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf.bak; \ + fi + if [ -f $(srcdir)/fonts.conf ]; then \ + echo " $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \ + $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \ + else if [ -f fonts.conf ]; then \ + echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \ + $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \ + fi; fi + @(if $(RUN_FC_CACHE_TEST); then \ + echo "fc-cache$(EXEEXT) -s -f -v"; \ + fc-cache/fc-cache$(EXEEXT) -s -f -v; \ + else \ + echo "***"; \ + echo "*** Warning: fonts.cache not built"; \ + echo "***"; \ + echo "*** Generate this file manually on host system using fc-cache"; \ + echo "***"; \ + fi) + +uninstall-local: + if [ -f $(srcdir)/fonts.conf ]; then \ + if cmp -s $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \ + echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \ + rm -f $(DESTDIR)$(configdir)/fonts.conf; \ + fi; \ + else if [ -f fonts.conf ]; then \ + if cmp -s fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \ + echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \ + rm -f $(DESTDIR)$(configdir)/fonts.conf; \ + fi; \ + fi; fi + +debuild debuild-signed: debuild-dirs + (cd $(distdir)/debian && debuild) + +debuild-unsigned: debuild-dirs + (cd $(distdir)/debian && debuild -us -uc) + +debuild-dirs: distdir + rm -f $(PACKAGE)_$(VERSION).orig.tar.gz + rm -rf $(distdir).orig + cp -a $(distdir) $(distdir).orig + rm -rf $(distdir).orig/debian diff --git a/fontconfig/autogen.sh b/fontconfig/autogen.sh index f9927fd29..df4cd4142 100644 --- a/fontconfig/autogen.sh +++ b/fontconfig/autogen.sh @@ -1,123 +1,123 @@ -#!/bin/sh
-# Run this to generate all the initial makefiles, etc.
-
-set -e
-
-srcdir=`dirname $0`
-test -z "$srcdir" && srcdir=.
-
-case "$1" in
---noconf*)
- AUTOGEN_SUBDIR_MODE="true"
- shift
- ;;
-esac
-
-ORIGDIR=`pwd`
-cd $srcdir
-PROJECT=Fontconfig
-TEST_TYPE=-f
-FILE=fontconfig/fontconfig.h
-ACLOCAL=${ACLOCAL-aclocal}
-LIBTOOLIZE=${LIBTOOLIZE-libtoolize}
-AUTOMAKE=${AUTOMAKE-automake}
-AUTOHEADER=${AUTOHEADER-autoheader}
-AUTOCONF=${AUTOCONF-autoconf}
-LIBTOOLIZE_FLAGS="--copy --force"
-
-DIE=0
-
-have_libtool=false
-if $LIBTOOLIZE --version < /dev/null > /dev/null 2>&1 ; then
- libtool_version=`$LIBTOOLIZE --version | sed 's/^.* \([0-9][.][0-9.]*\)[^ ]*$/\1/'`
- case $libtool_version in
- 1.4*|1.5*|1.6*|1.7*|2*)
- have_libtool=true
- ;;
- esac
-fi
-if $have_libtool ; then : ; else
- echo
- echo "You must have libtool 1.4 installed to compile $PROJECT."
- echo "Install the appropriate package for your distribution,"
- echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
- DIE=1
-fi
-
-($AUTOCONF --version) < /dev/null > /dev/null 2>&1 || {
- echo
- echo "You must have autoconf installed to compile $PROJECT."
- echo "libtool the appropriate package for your distribution,"
- echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/"
- DIE=1
-}
-
-have_automake=false
-need_libtoolize=true
-if $AUTOMAKE --version < /dev/null > /dev/null 2>&1 ; then
- automake_version=`$AUTOMAKE --version | grep 'automake (GNU automake)' | sed 's/^[^0-9]*\(.*\)/\1/'`
- case $automake_version in
- 1.2*|1.3*|1.4)
- ;;
- 1.4*)
- have_automake=true
- need_libtoolize=false
- ;;
- *)
- have_automake=true
- ;;
- esac
-fi
-if $have_automake ; then : ; else
- echo
- echo "You must have automake 1.4-p1 installed to compile $PROJECT."
- echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.4-p1.tar.gz"
- echo "(or a newer version if it is available)"
- DIE=1
-fi
-
-if test "$DIE" -eq 1; then
- exit 1
-fi
-
-test $TEST_TYPE $FILE || {
- echo "You must run this script in the top-level $PROJECT directory"
- exit 1
-}
-
-if test -z "$AUTOGEN_SUBDIR_MODE"; then
- if test -z "$*"; then
- echo "I am going to run ./configure with no arguments - if you wish "
- echo "to pass any to it, please specify them on the $0 command line."
- fi
-fi
-
-echo Running $ACLOCAL $ACLOCAL_FLAGS
-$ACLOCAL $ACLOCAL_FLAGS
-
-# optionally run autoheader
-if $AUTOHEADER --version < /dev/null > /dev/null 2>&1; then
- echo Running $AUTOHEADER
- $AUTOHEADER
-fi
-
-case $need_libtoolize in
- true)
- echo Running $LIBTOOLIZE $LIBTOOLIZE_FLAGS
- $LIBTOOLIZE $LIBTOOLIZE_FLAGS
- ;;
-esac
-
-echo Running $AUTOMAKE -a $am_opt
-$AUTOMAKE -a $am_opt
-echo Running $AUTOCONF
-$AUTOCONF
-cd $ORIGDIR
-
-if test -z "$AUTOGEN_SUBDIR_MODE"; then
- echo Running $srcdir/configure "$@"
- $srcdir/configure "$@"
-
- echo
- echo "Now type 'make' to compile $PROJECT."
-fi
+#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +set -e + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +case "$1" in +--noconf*) + AUTOGEN_SUBDIR_MODE="true" + shift + ;; +esac + +ORIGDIR=`pwd` +cd $srcdir +PROJECT=Fontconfig +TEST_TYPE=-f +FILE=fontconfig/fontconfig.h +ACLOCAL=${ACLOCAL-aclocal} +LIBTOOLIZE=${LIBTOOLIZE-libtoolize} +AUTOMAKE=${AUTOMAKE-automake} +AUTOHEADER=${AUTOHEADER-autoheader} +AUTOCONF=${AUTOCONF-autoconf} +LIBTOOLIZE_FLAGS="--copy --force" + +DIE=0 + +have_libtool=false +if $LIBTOOLIZE --version < /dev/null > /dev/null 2>&1 ; then + libtool_version=`$LIBTOOLIZE --version | sed 's/^.* \([0-9][.][0-9.]*\)[^ ]*$/\1/'` + case $libtool_version in + 1.4*|1.5*|1.6*|1.7*|2*) + have_libtool=true + ;; + esac +fi +if $have_libtool ; then : ; else + echo + echo "You must have libtool 1.4 installed to compile $PROJECT." + echo "Install the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +fi + +($AUTOCONF --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf installed to compile $PROJECT." + echo "libtool the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +have_automake=false +need_libtoolize=true +if $AUTOMAKE --version < /dev/null > /dev/null 2>&1 ; then + automake_version=`$AUTOMAKE --version | grep 'automake (GNU automake)' | sed 's/^[^0-9]*\(.*\)/\1/'` + case $automake_version in + 1.2*|1.3*|1.4) + ;; + 1.4*) + have_automake=true + need_libtoolize=false + ;; + *) + have_automake=true + ;; + esac +fi +if $have_automake ; then : ; else + echo + echo "You must have automake 1.4-p1 installed to compile $PROJECT." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.4-p1.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +fi + +if test "$DIE" -eq 1; then + exit 1 +fi + +test $TEST_TYPE $FILE || { + echo "You must run this script in the top-level $PROJECT directory" + exit 1 +} + +if test -z "$AUTOGEN_SUBDIR_MODE"; then + if test -z "$*"; then + echo "I am going to run ./configure with no arguments - if you wish " + echo "to pass any to it, please specify them on the $0 command line." + fi +fi + +echo Running $ACLOCAL $ACLOCAL_FLAGS +$ACLOCAL $ACLOCAL_FLAGS + +# optionally run autoheader +if $AUTOHEADER --version < /dev/null > /dev/null 2>&1; then + echo Running $AUTOHEADER + $AUTOHEADER +fi + +case $need_libtoolize in + true) + echo Running $LIBTOOLIZE $LIBTOOLIZE_FLAGS + $LIBTOOLIZE $LIBTOOLIZE_FLAGS + ;; +esac + +echo Running $AUTOMAKE -a $am_opt +$AUTOMAKE -a $am_opt +echo Running $AUTOCONF +$AUTOCONF +cd $ORIGDIR + +if test -z "$AUTOGEN_SUBDIR_MODE"; then + echo Running $srcdir/configure "$@" + $srcdir/configure "$@" + + echo + echo "Now type 'make' to compile $PROJECT." +fi diff --git a/fontconfig/conf.d/Makefile.am b/fontconfig/conf.d/Makefile.am index c8ef98962..3f5255fad 100644 --- a/fontconfig/conf.d/Makefile.am +++ b/fontconfig/conf.d/Makefile.am @@ -1,96 +1,96 @@ -#
-# fontconfig/conf.d/Makefile.am
-#
-# Copyright © 2005 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC_FILES= \
- README
-
-CONF_FILES = \
- 10-autohint.conf \
- 10-no-sub-pixel.conf \
- 10-sub-pixel-bgr.conf \
- 10-sub-pixel-rgb.conf \
- 10-sub-pixel-vbgr.conf \
- 10-sub-pixel-vrgb.conf \
- 10-unhinted.conf \
- 20-fix-globaladvance.conf \
- 20-unhint-small-vera.conf \
- 25-unhint-nonlatin.conf \
- 30-urw-aliases.conf \
- 30-metric-aliases.conf \
- 40-nonlatin.conf \
- 45-latin.conf \
- 49-sansserif.conf \
- 50-user.conf \
- 51-local.conf \
- 60-latin.conf \
- 65-fonts-persian.conf \
- 65-khmer.conf \
- 65-nonlatin.conf \
- 69-unifont.conf \
- 70-no-bitmaps.conf \
- 70-yes-bitmaps.conf \
- 80-delicious.conf \
- 90-synthetic.conf
-
-CONF_LINKS = \
- 20-fix-globaladvance.conf \
- 20-unhint-small-vera.conf \
- 30-urw-aliases.conf \
- 30-metric-aliases.conf \
- 40-nonlatin.conf \
- 45-latin.conf \
- 49-sansserif.conf \
- 50-user.conf \
- 51-local.conf \
- 60-latin.conf \
- 65-fonts-persian.conf \
- 65-nonlatin.conf \
- 69-unifont.conf \
- 80-delicious.conf \
- 90-synthetic.conf
-
-EXTRA_DIST = $(CONF_FILES) $(DOC_FILES)
-
-configdir=$(CONFDIR)
-confavaildir=$(configdir)/conf.avail
-confddir=$(configdir)/conf.d
-
-confavail_DATA=$(CONF_FILES)
-confd_DATA=$(DOC_FILES)
-
-install-data-local:
- mkdir -p ${DESTDIR}${confddir}
- @(echo cd ${DESTDIR}${confddir}; \
- cd ${DESTDIR}${confddir}; \
- for i in ${CONF_LINKS}; do \
- rm -f $$i; \
- echo rm -f $$i";" ln -s ../conf.avail/$$i .; \
- ln -s ../conf.avail/$$i .; \
- done)
-uninstall-local:
- @(echo cd ${DESTDIR}${confddir}; \
- cd ${DESTDIR}${confddir}; \
- for i in ${CONF_LINKS}; do \
- echo rm -f $$i; \
- rm -f $$i; \
- done)
+# +# fontconfig/conf.d/Makefile.am +# +# Copyright © 2005 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC_FILES= \ + README + +CONF_FILES = \ + 10-autohint.conf \ + 10-no-sub-pixel.conf \ + 10-sub-pixel-bgr.conf \ + 10-sub-pixel-rgb.conf \ + 10-sub-pixel-vbgr.conf \ + 10-sub-pixel-vrgb.conf \ + 10-unhinted.conf \ + 20-fix-globaladvance.conf \ + 20-unhint-small-vera.conf \ + 25-unhint-nonlatin.conf \ + 30-urw-aliases.conf \ + 30-metric-aliases.conf \ + 40-nonlatin.conf \ + 45-latin.conf \ + 49-sansserif.conf \ + 50-user.conf \ + 51-local.conf \ + 60-latin.conf \ + 65-fonts-persian.conf \ + 65-khmer.conf \ + 65-nonlatin.conf \ + 69-unifont.conf \ + 70-no-bitmaps.conf \ + 70-yes-bitmaps.conf \ + 80-delicious.conf \ + 90-synthetic.conf + +CONF_LINKS = \ + 20-fix-globaladvance.conf \ + 20-unhint-small-vera.conf \ + 30-urw-aliases.conf \ + 30-metric-aliases.conf \ + 40-nonlatin.conf \ + 45-latin.conf \ + 49-sansserif.conf \ + 50-user.conf \ + 51-local.conf \ + 60-latin.conf \ + 65-fonts-persian.conf \ + 65-nonlatin.conf \ + 69-unifont.conf \ + 80-delicious.conf \ + 90-synthetic.conf + +EXTRA_DIST = $(CONF_FILES) $(DOC_FILES) + +configdir=$(CONFDIR) +confavaildir=$(configdir)/conf.avail +confddir=$(configdir)/conf.d + +confavail_DATA=$(CONF_FILES) +confd_DATA=$(DOC_FILES) + +install-data-local: + mkdir -p ${DESTDIR}${confddir} + @(echo cd ${DESTDIR}${confddir}; \ + cd ${DESTDIR}${confddir}; \ + for i in ${CONF_LINKS}; do \ + rm -f $$i; \ + echo rm -f $$i";" ln -s ../conf.avail/$$i .; \ + ln -s ../conf.avail/$$i .; \ + done) +uninstall-local: + @(echo cd ${DESTDIR}${confddir}; \ + cd ${DESTDIR}${confddir}; \ + for i in ${CONF_LINKS}; do \ + echo rm -f $$i; \ + rm -f $$i; \ + done) diff --git a/fontconfig/config/Makedefs.in b/fontconfig/config/Makedefs.in index 8cfb9e785..ae75aff49 100644 --- a/fontconfig/config/Makedefs.in +++ b/fontconfig/config/Makedefs.in @@ -1,76 +1,76 @@ -#
-# fontconfig/config/Makedefs.in
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-SHELL = @SHELL@
-
-srcdir=@srcdir@
-prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-bindir=@bindir@
-datadir=@datadir@
-includedir=@includedir@
-sysconfdir=@sysconfdir@
-confdir=@confdir@
-
-DSO_LDOPTS=@DSO_LDOPTS@
-DSO_CFLAGS=@DSO_CFLAGS@
-DSO_PIC_CFLAGS=@DSO_PIC_CFLAGS@
-
-INSTALL=@INSTALL@
-INSTALL_PROGRAM=@INSTALL_PROGRAM@
-INSTALL_SCRIPT=@INSTALL_SCRIPT@
-INSTALL_DATA=@INSTALL_DATA@
-MKSHLIB=@MKSHLIB@
-LN_S=@LN_S@
-
-# shared libraries
-LIBDIR=$(libdir)
-# programs
-BINDIR=$(bindir)
-# font configuration files
-CONFDIR=@CONFDIR@
-# include files
-INCLUDEDIR=$(includedir)/fontconfig
-
-X_FONT_DIR=@X_FONT_DIR@
-FC_DEFAULT_FONTS=@FC_DEFAULT_FONTS@
-FCPATH_DEF=-DFONTCONFIG_PATH=\"$(CONFDIR)\"
-
-CDEBUGFLAGS=@CFLAGS@
-
-INCLUDES=-I$(TOPDIR) -I$(srcdir) @CPPFLAGS@
-
-CFLAGS=$(CDEBUGFLAGS) @DEFS@ $(FCPATH_DEF) $(INCLUDES)
-
-LIBBASE=libfontconfig.so
-LIBFILE=$(LIBBASE).@PACKAGE_MAJOR@.@PACKAGE_MINOR@
-LIBMAJOR=$(LIBBASE).@PACKAGE_MAJOR@
-
-LIBFONTCONFIG=-L$(SRCDIR) -lfontconfig
-
-SRCDIR=$(TOPDIR)/src
-
-INCDIR=$(TOPDIR)/fontconfig
-HEADERS=$(INCDIR)/fontconfig.h $(INCDIR)/fcfreetype.h $(INCDIR)/fcprivate.h
+# +# fontconfig/config/Makedefs.in +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# + +SHELL = @SHELL@ + +srcdir=@srcdir@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +bindir=@bindir@ +datadir=@datadir@ +includedir=@includedir@ +sysconfdir=@sysconfdir@ +confdir=@confdir@ + +DSO_LDOPTS=@DSO_LDOPTS@ +DSO_CFLAGS=@DSO_CFLAGS@ +DSO_PIC_CFLAGS=@DSO_PIC_CFLAGS@ + +INSTALL=@INSTALL@ +INSTALL_PROGRAM=@INSTALL_PROGRAM@ +INSTALL_SCRIPT=@INSTALL_SCRIPT@ +INSTALL_DATA=@INSTALL_DATA@ +MKSHLIB=@MKSHLIB@ +LN_S=@LN_S@ + +# shared libraries +LIBDIR=$(libdir) +# programs +BINDIR=$(bindir) +# font configuration files +CONFDIR=@CONFDIR@ +# include files +INCLUDEDIR=$(includedir)/fontconfig + +X_FONT_DIR=@X_FONT_DIR@ +FC_DEFAULT_FONTS=@FC_DEFAULT_FONTS@ +FCPATH_DEF=-DFONTCONFIG_PATH=\"$(CONFDIR)\" + +CDEBUGFLAGS=@CFLAGS@ + +INCLUDES=-I$(TOPDIR) -I$(srcdir) @CPPFLAGS@ + +CFLAGS=$(CDEBUGFLAGS) @DEFS@ $(FCPATH_DEF) $(INCLUDES) + +LIBBASE=libfontconfig.so +LIBFILE=$(LIBBASE).@PACKAGE_MAJOR@.@PACKAGE_MINOR@ +LIBMAJOR=$(LIBBASE).@PACKAGE_MAJOR@ + +LIBFONTCONFIG=-L$(SRCDIR) -lfontconfig + +SRCDIR=$(TOPDIR)/src + +INCDIR=$(TOPDIR)/fontconfig +HEADERS=$(INCDIR)/fontconfig.h $(INCDIR)/fcfreetype.h $(INCDIR)/fcprivate.h diff --git a/fontconfig/configure.in b/fontconfig/configure.in index 04da27299..9f671abe7 100644 --- a/fontconfig/configure.in +++ b/fontconfig/configure.in @@ -1,513 +1,513 @@ -dnl
-dnl fontconfig/configure.in
-dnl
-dnl Copyright © 2003 Keith Packard
-dnl
-dnl Permission to use, copy, modify, distribute, and sell this software and its
-dnl documentation for any purpose is hereby granted without fee, provided that
-dnl the above copyright notice appear in all copies and that both that
-dnl copyright notice and this permission notice appear in supporting
-dnl documentation, and that the name of the author(s) not be used in
-dnl advertising or publicity pertaining to distribution of the software without
-dnl specific, written prior permission. The authors make no
-dnl representations about the suitability of this software for any purpose. It
-dnl is provided "as is" without express or implied warranty.
-dnl
-dnl THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-dnl EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-dnl PERFORMANCE OF THIS SOFTWARE.
-dnl
-dnl Process this file with autoconf to create configure.
-
-AC_INIT(fonts.dtd)
-
-dnl ==========================================================================
-dnl Versioning
-dnl ==========================================================================
-
-dnl This is the package version number, not the shared library
-dnl version. This same version number must appear in fontconfig/fontconfig.h
-dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's
-dnl not possible to extract the version number here from fontconfig.h
-AM_INIT_AUTOMAKE(fontconfig, 2.8.90)
-m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
-
-dnl libtool versioning
-
-dnl bump revision when fixing bugs
-dnl bump current and age, reset revision to zero when adding APIs
-dnl bump current, leave age, reset revision to zero when changing/removing APIS
-LIBT_CURRENT=5
-LIBT_REVISION=4
-AC_SUBST(LIBT_CURRENT)
-AC_SUBST(LIBT_REVISION)
-LIBT_AGE=4
-
-LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE"
-AC_SUBST(LIBT_VERSION_INFO)
-
-LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE`
-AC_SUBST(LIBT_CURRENT_MINUS_AGE)
-
-dnl ==========================================================================
-
-AC_CONFIG_HEADERS(config.h)
-
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_LN_S
-AC_LIBTOOL_WIN32_DLL
-AM_PROG_LIBTOOL
-AC_PROG_MAKE_SET
-
-dnl ==========================================================================
-
-case "$host" in
- *-*-mingw*)
- os_win32=yes
- ;;
- *)
- os_win32=no
-esac
-AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes")
-
-if test "$os_win32" = "yes"; then
- AC_CHECK_PROG(ms_librarian, lib.exe, yes, no)
-fi
-AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes)
-
-WARN_CFLAGS=""
-if test "x$GCC" = "xyes"; then
- WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \
- -Wmissing-prototypes -Wmissing-declarations \
- -Wnested-externs -fno-strict-aliasing"
- AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1,
- [Can use #warning in C files])
-fi
-AC_SUBST(WARN_CFLAGS)
-
-
-dnl ==========================================================================
-
-AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes)
-
-dnl ==========================================================================
-
-AC_ARG_WITH(arch, [ --with-arch=ARCH Force architecture to ARCH], arch="$withval", arch=auto)
-
-if test "x$arch" != xauto; then
- AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names])
-fi
-
-
-dnl ==========================================================================
-
-# Checks for header files.
-AC_HEADER_DIRENT
-AC_HEADER_STDC
-AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h])
-
-# Checks for typedefs, structures, and compiler characteristics.
-AC_C_CONST
-AC_C_INLINE
-AC_TYPE_PID_T
-
-# Checks for library functions.
-AC_FUNC_VPRINTF
-AC_FUNC_MMAP
-AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48])
-
-#
-# Checks for iconv
-#
-AC_MSG_CHECKING([for a usable iconv])
-ICONV_LIBS=""
-AC_TRY_LINK([#include <iconv.h>],
- [iconv_open ("from", "to");],
- [use_iconv=1],
- [use_iconv=0])
-if test x$use_iconv = x1; then
- AC_MSG_RESULT([libc])
-else
- # try using libiconv
- fontconfig_save_libs="$LIBS"
- LIBS="$LIBS -liconv"
-
- AC_TRY_LINK([#include <iconv.h>],
- [iconv_open ("from", "to");],
- [use_iconv=1],
- [use_iconv=0])
-
- if test x$use_iconv = x1; then
- ICONV_LIBS="-liconv"
- AC_MSG_RESULT([libiconv])
- else
- AC_MSG_RESULT([no])
- fi
-
- LIBS="$fontconfig_save_libs"
-fi
-AC_SUBST(ICONV_LIBS)
-AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.])
-
-#
-# Checks for FreeType
-#
-
-AC_ARG_WITH(freetype-config, [ --with-freetype-config=PROG Use FreeType configuration program PROG], freetype_config=$withval, freetype_config=yes)
-
-if test "$freetype_config" = "yes"; then
- AC_PATH_PROG(ft_config,freetype-config,no)
- if test "$ft_config" = "no"; then
- AC_MSG_ERROR([You must have freetype installed; see http://www.freetype.org/])
- fi
-else
- ft_config="$freetype_config"
-fi
-
-FREETYPE_CFLAGS="`$ft_config --cflags`"
-FREETYPE_LIBS="`$ft_config --libs`"
-
-AC_SUBST(FREETYPE_LIBS)
-AC_SUBST(FREETYPE_CFLAGS)
-
-fontconfig_save_libs="$LIBS"
-fontconfig_save_cflags="$CFLAGS"
-LIBS="$LIBS $FREETYPE_LIBS"
-CFLAGS="$CFLAGS $FREETYPE_CFLAGS"
-AC_CHECK_FUNCS(FT_Get_Next_Char FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_Get_X11_Font_Format FT_Select_Size)
-AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem,
- HAVE_FT_BITMAP_SIZE_Y_PPEM=1,
- HAVE_FT_BITMAP_SIZE_Y_PPEM=0,
-[#include <ft2build.h>
-#include FT_FREETYPE_H])
-AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM,
- [FT_Bitmap_Size structure includes y_ppem field])
-CFLAGS="$fontconfig_save_cflags"
-LIBS="$fontconfig_save_libs"
-
-#
-# Check expat configuration
-#
-
-AC_ARG_WITH(expat, [ --with-expat=DIR Use Expat in DIR], expat=$withval, expat=yes)
-AC_ARG_WITH(expat-includes, [ --with-expat-includes=DIR Use Expat includes in DIR], expat_includes=$withval, expat_includes=yes)
-AC_ARG_WITH(expat-lib, [ --with-expat-lib=DIR Use Expat library in DIR], expat_lib=$withval, expat_lib=yes)
-
-if test "$enable_libxml2" != "yes"; then
- case "$expat" in
- no)
- ;;
- *)
- case "$expat_includes" in
- yes)
- case "$expat" in
- yes)
- ;;
- *)
- EXPAT_CFLAGS="-I$expat/include"
- ;;
- esac
- ;;
- no)
- EXPAT_CFLAGS=""
- ;;
- *)
- EXPAT_CFLAGS="-I$expat_includes"
- ;;
- esac
- case "$expat_lib" in
- yes)
- case "$expat" in
- yes)
- EXPAT_LIBS="-lexpat"
- ;;
- *)
- EXPAT_LIBS="-L$expat/lib -lexpat"
- ;;
- esac
- ;;
- no)
- ;;
- *)
- EXPAT_LIBS="-L$expat_lib -lexpat"
- ;;
- esac
-
- expatsaved_CPPFLAGS="$CPPFLAGS"
- CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS"
- expatsaved_LIBS="$LIBS"
- LIBS="$LIBS $EXPAT_LIBS"
-
- AC_CHECK_HEADER(expat.h)
- case "$ac_cv_header_expat_h" in
- no)
- AC_CHECK_HEADER(xmlparse.h)
- case "$ac_cv_header_xmlparse_h" in
- no)
- have_expat_header=no;
- ;;
- yes)
- HAVE_XMLPARSE_H=1
- AC_SUBST(HAVE_XMLPARSE_H)
- AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H,
- [Use xmlparse.h instead of expat.h])
- have_expat_header=yes
- ;;
- esac
- ;;
- yes)
- have_expat_header=yes
- ;;
- esac
- case "$have_expat_header" in
- no)
- expat=no
- ;;
- yes)
- AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler)
- case "$ac_cv_func_XML_SetDoctypeDeclHandler" in
- yes)
- HAVE_EXPAT=1
- AC_SUBST(HAVE_EXPAT)
- AC_DEFINE_UNQUOTED(HAVE_EXPAT,$HAVE_EXPAT,
- [Found a useable expat library])
- ;;
- *)
- expat=no
- ;;
- esac
- ;;
- esac
- CPPFLAGS="$expatsaved_CPPFLAGS"
- LIBS="$expatsaved_LIBS"
- ;;
- esac
-
- AC_SUBST(EXPAT_CFLAGS)
- AC_SUBST(EXPAT_LIBS)
-
- case "$expat" in
- no)
- EXPAT_CFLAGS=""
- EXPAT_LIBS=""
-
- AC_MSG_WARN([Cannot find usable expat library. Trying to use libxml2 as fallback.])
- ;;
- esac
-fi
-
-#
-# Check libxml2 configuration
-#
-
-AC_ARG_ENABLE(libxml2, [ --enable-libxml2 Use libxml2 instead of Expat])
-
-PKG_PROG_PKG_CONFIG
-
-if test "$enable_libxml2" = "yes" -o "$expat" = "no"; then
- PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6])
- AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat])
-
- AC_SUBST(LIBXML2_CFLAGS)
- AC_SUBST(LIBXML2_LIBS)
-fi
-
-#
-# Set default font directory
-#
-
-AC_ARG_WITH(default-fonts, [ --with-default-fonts=DIR Use fonts from DIR when config is busted], default_fonts="$withval", default_fonts=yes)
-
-case "$default_fonts" in
-yes)
- if test "$os_win32" = "yes"; then
- FC_DEFAULT_FONTS="WINDOWSFONTDIR"
- AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR",
- [Windows font directory])
- else
- FC_DEFAULT_FONTS="/usr/share/fonts"
- AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts",
- [System font directory])
- fi
- ;;
-*)
- FC_DEFAULT_FONTS="$default_fonts"
- AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts",
- [System font directory])
- ;;
-esac
-
-AC_SUBST(FC_DEFAULT_FONTS)
-
-#
-# Add more fonts if available. By default, add only the directories
-# with outline fonts; those with bitmaps can be added as desired in
-# local.conf or ~/.fonts.conf
-#
-AC_ARG_WITH(add-fonts, [ --with-add-fonts=DIR1,DIR2,...Find additional fonts in DIR1,DIR2,... ], add_fonts="$withval", add_fonts=yes)
-
-case "$add_fonts" in
-yes)
- FC_ADD_FONTS=""
- for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do
- case x"$FC_ADD_FONTS" in
- x)
- sub="$dir/fonts"
- if test -d "$sub"; then
- case x$FC_ADD_FONTS in
- x)
- FC_ADD_FONTS="$sub"
- ;;
- *)
- FC_ADD_FONTS="$FC_ADD_FONTS,$sub"
- ;;
- esac
- fi
- ;;
- esac
- done
- AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
- ;;
-no)
- FC_ADD_FONTS=""
- ;;
-*)
- FC_ADD_FONTS="$add_fonts"
- AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories])
- ;;
-esac
-
-AC_SUBST(FC_ADD_FONTS)
-
-FC_FONTPATH=""
-
-case "$FC_ADD_FONTS" in
-"")
- ;;
-*)
- FC_FONTPATH=`echo $FC_ADD_FONTS |
- sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'`
- ;;
-esac
-
-AC_SUBST(FC_FONTPATH)
-
-#
-# Set default cache directory path
-#
-AC_ARG_WITH(cache-dir, [ --with-cache-dir=DIR Use DIR to store cache files (default LOCALSTATEDIR/cache/fontconfig)], fc_cachedir="$withval", fc_cachedir=yes)
-
-case $fc_cachedir in
-no|yes)
- if test "$os_win32" = "yes"; then
- fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE"
- else
- fc_cachedir='${localstatedir}/cache/${PACKAGE}'
- fi
- ;;
-*)
- ;;
-esac
-AC_SUBST(fc_cachedir)
-FC_CACHEDIR=${fc_cachedir}
-AC_SUBST(FC_CACHEDIR)
-
-FC_FONTDATE=`LC_ALL=C date`
-
-AC_SUBST(FC_FONTDATE)
-
-AC_ARG_WITH(confdir, [ --with-confdir=DIR Use DIR to store configuration files (default SYSCONFDIR/fonts)], confdir="$withval", confdir=yes)
-
-#
-# Set CONFDIR and FONTCONFIG_PATH
-#
-
-case "$confdir" in
-no|yes)
- confdir='${sysconfdir}'/fonts
- ;;
-*)
- ;;
-esac
-AC_SUBST(confdir)
-CONFDIR=${confdir}
-AC_DEFINE_UNQUOTED(CONFDIR, "$CONFDIR",[Font configuration directory])
-AC_SUBST(CONFDIR)
-
-#
-# Let people not build/install docs if they don't have docbook
-#
-
-AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no)
-
-AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes)
-
-default_docs="yes"
-#
-# Check if docs exist or can be created
-#
-if test x$HASDOCBOOK = xno; then
- if test -f $srcdir/doc/fonts-conf.5; then
- :
- else
- default_docs="no"
- fi
-fi
-
-AC_ARG_ENABLE(docs, [ --disable-docs Don't build and install documentation],,enable_docs=$default_docs)
-
-AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes)
-
-if test "x$enable_docs" = xyes; then
- DOCSRC="doc"
- tmp=funcs.$$
- cat $srcdir/doc/*.fncs | awk '
- /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
- /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } }
- /^@@/ { done = 0; }' > $tmp
- DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'`
- echo DOCMAN3 $DOCMAN3
- rm -f $tmp
-else
- DOCSRC=""
- DOCMAN3=""
-fi
-
-AC_SUBST(DOCSRC)
-AC_SUBST(DOCMAN3)
-
-
-dnl Figure out what cache format suffix to use for this architecture
-AC_C_BIGENDIAN
-AC_CHECK_SIZEOF([void *])
-AC_CHECK_ALIGNOF([double])
-
-
-
-AC_OUTPUT([
-Makefile
-fontconfig/Makefile
-fc-lang/Makefile
-fc-glyphname/Makefile
-fc-case/Makefile
-src/Makefile
-conf.d/Makefile
-fc-cache/Makefile
-fc-cat/Makefile
-fc-list/Makefile
-fc-match/Makefile
-fc-pattern/Makefile
-fc-query/Makefile
-fc-scan/Makefile
-doc/Makefile
-doc/version.sgml
-test/Makefile
-fontconfig.spec
-fontconfig.pc
-fontconfig-zip
-])
+dnl +dnl fontconfig/configure.in +dnl +dnl Copyright © 2003 Keith Packard +dnl +dnl Permission to use, copy, modify, distribute, and sell this software and its +dnl documentation for any purpose is hereby granted without fee, provided that +dnl the above copyright notice appear in all copies and that both that +dnl copyright notice and this permission notice appear in supporting +dnl documentation, and that the name of the author(s) not be used in +dnl advertising or publicity pertaining to distribution of the software without +dnl specific, written prior permission. The authors make no +dnl representations about the suitability of this software for any purpose. It +dnl is provided "as is" without express or implied warranty. +dnl +dnl THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +dnl EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +dnl PERFORMANCE OF THIS SOFTWARE. +dnl +dnl Process this file with autoconf to create configure. + +AC_INIT(fonts.dtd) + +dnl ========================================================================== +dnl Versioning +dnl ========================================================================== + +dnl This is the package version number, not the shared library +dnl version. This same version number must appear in fontconfig/fontconfig.h +dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's +dnl not possible to extract the version number here from fontconfig.h +AM_INIT_AUTOMAKE(fontconfig, 2.8.90) +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + +dnl libtool versioning + +dnl bump revision when fixing bugs +dnl bump current and age, reset revision to zero when adding APIs +dnl bump current, leave age, reset revision to zero when changing/removing APIS +LIBT_CURRENT=5 +LIBT_REVISION=4 +AC_SUBST(LIBT_CURRENT) +AC_SUBST(LIBT_REVISION) +LIBT_AGE=4 + +LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE" +AC_SUBST(LIBT_VERSION_INFO) + +LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE` +AC_SUBST(LIBT_CURRENT_MINUS_AGE) + +dnl ========================================================================== + +AC_CONFIG_HEADERS(config.h) + +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_LN_S +AC_LIBTOOL_WIN32_DLL +AM_PROG_LIBTOOL +AC_PROG_MAKE_SET + +dnl ========================================================================== + +case "$host" in + *-*-mingw*) + os_win32=yes + ;; + *) + os_win32=no +esac +AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") + +if test "$os_win32" = "yes"; then + AC_CHECK_PROG(ms_librarian, lib.exe, yes, no) +fi +AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes) + +WARN_CFLAGS="" +if test "x$GCC" = "xyes"; then + WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \ + -Wmissing-prototypes -Wmissing-declarations \ + -Wnested-externs -fno-strict-aliasing" + AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1, + [Can use #warning in C files]) +fi +AC_SUBST(WARN_CFLAGS) + + +dnl ========================================================================== + +AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes) + +dnl ========================================================================== + +AC_ARG_WITH(arch, [ --with-arch=ARCH Force architecture to ARCH], arch="$withval", arch=auto) + +if test "x$arch" != xauto; then + AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names]) +fi + + +dnl ========================================================================== + +# Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_C_INLINE +AC_TYPE_PID_T + +# Checks for library functions. +AC_FUNC_VPRINTF +AC_FUNC_MMAP +AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48]) + +# +# Checks for iconv +# +AC_MSG_CHECKING([for a usable iconv]) +ICONV_LIBS="" +AC_TRY_LINK([#include <iconv.h>], + [iconv_open ("from", "to");], + [use_iconv=1], + [use_iconv=0]) +if test x$use_iconv = x1; then + AC_MSG_RESULT([libc]) +else + # try using libiconv + fontconfig_save_libs="$LIBS" + LIBS="$LIBS -liconv" + + AC_TRY_LINK([#include <iconv.h>], + [iconv_open ("from", "to");], + [use_iconv=1], + [use_iconv=0]) + + if test x$use_iconv = x1; then + ICONV_LIBS="-liconv" + AC_MSG_RESULT([libiconv]) + else + AC_MSG_RESULT([no]) + fi + + LIBS="$fontconfig_save_libs" +fi +AC_SUBST(ICONV_LIBS) +AC_DEFINE_UNQUOTED(USE_ICONV,$use_iconv,[Use iconv.]) + +# +# Checks for FreeType +# + +AC_ARG_WITH(freetype-config, [ --with-freetype-config=PROG Use FreeType configuration program PROG], freetype_config=$withval, freetype_config=yes) + +if test "$freetype_config" = "yes"; then + AC_PATH_PROG(ft_config,freetype-config,no) + if test "$ft_config" = "no"; then + AC_MSG_ERROR([You must have freetype installed; see http://www.freetype.org/]) + fi +else + ft_config="$freetype_config" +fi + +FREETYPE_CFLAGS="`$ft_config --cflags`" +FREETYPE_LIBS="`$ft_config --libs`" + +AC_SUBST(FREETYPE_LIBS) +AC_SUBST(FREETYPE_CFLAGS) + +fontconfig_save_libs="$LIBS" +fontconfig_save_cflags="$CFLAGS" +LIBS="$LIBS $FREETYPE_LIBS" +CFLAGS="$CFLAGS $FREETYPE_CFLAGS" +AC_CHECK_FUNCS(FT_Get_Next_Char FT_Get_BDF_Property FT_Get_PS_Font_Info FT_Has_PS_Glyph_Names FT_Get_X11_Font_Format FT_Select_Size) +AC_CHECK_MEMBER(FT_Bitmap_Size.y_ppem, + HAVE_FT_BITMAP_SIZE_Y_PPEM=1, + HAVE_FT_BITMAP_SIZE_Y_PPEM=0, +[#include <ft2build.h> +#include FT_FREETYPE_H]) +AC_DEFINE_UNQUOTED(HAVE_FT_BITMAP_SIZE_Y_PPEM,$HAVE_FT_BITMAP_SIZE_Y_PPEM, + [FT_Bitmap_Size structure includes y_ppem field]) +CFLAGS="$fontconfig_save_cflags" +LIBS="$fontconfig_save_libs" + +# +# Check expat configuration +# + +AC_ARG_WITH(expat, [ --with-expat=DIR Use Expat in DIR], expat=$withval, expat=yes) +AC_ARG_WITH(expat-includes, [ --with-expat-includes=DIR Use Expat includes in DIR], expat_includes=$withval, expat_includes=yes) +AC_ARG_WITH(expat-lib, [ --with-expat-lib=DIR Use Expat library in DIR], expat_lib=$withval, expat_lib=yes) + +if test "$enable_libxml2" != "yes"; then + case "$expat" in + no) + ;; + *) + case "$expat_includes" in + yes) + case "$expat" in + yes) + ;; + *) + EXPAT_CFLAGS="-I$expat/include" + ;; + esac + ;; + no) + EXPAT_CFLAGS="" + ;; + *) + EXPAT_CFLAGS="-I$expat_includes" + ;; + esac + case "$expat_lib" in + yes) + case "$expat" in + yes) + EXPAT_LIBS="-lexpat" + ;; + *) + EXPAT_LIBS="-L$expat/lib -lexpat" + ;; + esac + ;; + no) + ;; + *) + EXPAT_LIBS="-L$expat_lib -lexpat" + ;; + esac + + expatsaved_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="$CPPFLAGS $EXPAT_CFLAGS" + expatsaved_LIBS="$LIBS" + LIBS="$LIBS $EXPAT_LIBS" + + AC_CHECK_HEADER(expat.h) + case "$ac_cv_header_expat_h" in + no) + AC_CHECK_HEADER(xmlparse.h) + case "$ac_cv_header_xmlparse_h" in + no) + have_expat_header=no; + ;; + yes) + HAVE_XMLPARSE_H=1 + AC_SUBST(HAVE_XMLPARSE_H) + AC_DEFINE_UNQUOTED(HAVE_XMLPARSE_H,$HAVE_XMLPARSE_H, + [Use xmlparse.h instead of expat.h]) + have_expat_header=yes + ;; + esac + ;; + yes) + have_expat_header=yes + ;; + esac + case "$have_expat_header" in + no) + expat=no + ;; + yes) + AC_CHECK_FUNCS(XML_SetDoctypeDeclHandler) + case "$ac_cv_func_XML_SetDoctypeDeclHandler" in + yes) + HAVE_EXPAT=1 + AC_SUBST(HAVE_EXPAT) + AC_DEFINE_UNQUOTED(HAVE_EXPAT,$HAVE_EXPAT, + [Found a useable expat library]) + ;; + *) + expat=no + ;; + esac + ;; + esac + CPPFLAGS="$expatsaved_CPPFLAGS" + LIBS="$expatsaved_LIBS" + ;; + esac + + AC_SUBST(EXPAT_CFLAGS) + AC_SUBST(EXPAT_LIBS) + + case "$expat" in + no) + EXPAT_CFLAGS="" + EXPAT_LIBS="" + + AC_MSG_WARN([Cannot find usable expat library. Trying to use libxml2 as fallback.]) + ;; + esac +fi + +# +# Check libxml2 configuration +# + +AC_ARG_ENABLE(libxml2, [ --enable-libxml2 Use libxml2 instead of Expat]) + +PKG_PROG_PKG_CONFIG + +if test "$enable_libxml2" = "yes" -o "$expat" = "no"; then + PKG_CHECK_MODULES([LIBXML2], [libxml-2.0 >= 2.6]) + AC_DEFINE_UNQUOTED(ENABLE_LIBXML2,1,[Use libxml2 instead of Expat]) + + AC_SUBST(LIBXML2_CFLAGS) + AC_SUBST(LIBXML2_LIBS) +fi + +# +# Set default font directory +# + +AC_ARG_WITH(default-fonts, [ --with-default-fonts=DIR Use fonts from DIR when config is busted], default_fonts="$withval", default_fonts=yes) + +case "$default_fonts" in +yes) + if test "$os_win32" = "yes"; then + FC_DEFAULT_FONTS="WINDOWSFONTDIR" + AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "WINDOWSFONTDIR", + [Windows font directory]) + else + FC_DEFAULT_FONTS="/usr/share/fonts" + AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "/usr/share/fonts", + [System font directory]) + fi + ;; +*) + FC_DEFAULT_FONTS="$default_fonts" + AC_DEFINE_UNQUOTED(FC_DEFAULT_FONTS, "$default_fonts", + [System font directory]) + ;; +esac + +AC_SUBST(FC_DEFAULT_FONTS) + +# +# Add more fonts if available. By default, add only the directories +# with outline fonts; those with bitmaps can be added as desired in +# local.conf or ~/.fonts.conf +# +AC_ARG_WITH(add-fonts, [ --with-add-fonts=DIR1,DIR2,...Find additional fonts in DIR1,DIR2,... ], add_fonts="$withval", add_fonts=yes) + +case "$add_fonts" in +yes) + FC_ADD_FONTS="" + for dir in /usr/X11R6/lib/X11 /usr/X11/lib/X11 /usr/lib/X11; do + case x"$FC_ADD_FONTS" in + x) + sub="$dir/fonts" + if test -d "$sub"; then + case x$FC_ADD_FONTS in + x) + FC_ADD_FONTS="$sub" + ;; + *) + FC_ADD_FONTS="$FC_ADD_FONTS,$sub" + ;; + esac + fi + ;; + esac + done + AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories]) + ;; +no) + FC_ADD_FONTS="" + ;; +*) + FC_ADD_FONTS="$add_fonts" + AC_DEFINE_UNQUOTED(FC_ADD_FONTS,"$add_fonts",[Additional font directories]) + ;; +esac + +AC_SUBST(FC_ADD_FONTS) + +FC_FONTPATH="" + +case "$FC_ADD_FONTS" in +"") + ;; +*) + FC_FONTPATH=`echo $FC_ADD_FONTS | + sed -e 's/^/<dir>/' -e 's/$/<\/dir>/' -e 's/,/<\/dir> <dir>/g'` + ;; +esac + +AC_SUBST(FC_FONTPATH) + +# +# Set default cache directory path +# +AC_ARG_WITH(cache-dir, [ --with-cache-dir=DIR Use DIR to store cache files (default LOCALSTATEDIR/cache/fontconfig)], fc_cachedir="$withval", fc_cachedir=yes) + +case $fc_cachedir in +no|yes) + if test "$os_win32" = "yes"; then + fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE" + else + fc_cachedir='${localstatedir}/cache/${PACKAGE}' + fi + ;; +*) + ;; +esac +AC_SUBST(fc_cachedir) +FC_CACHEDIR=${fc_cachedir} +AC_SUBST(FC_CACHEDIR) + +FC_FONTDATE=`LC_ALL=C date` + +AC_SUBST(FC_FONTDATE) + +AC_ARG_WITH(confdir, [ --with-confdir=DIR Use DIR to store configuration files (default SYSCONFDIR/fonts)], confdir="$withval", confdir=yes) + +# +# Set CONFDIR and FONTCONFIG_PATH +# + +case "$confdir" in +no|yes) + confdir='${sysconfdir}'/fonts + ;; +*) + ;; +esac +AC_SUBST(confdir) +CONFDIR=${confdir} +AC_DEFINE_UNQUOTED(CONFDIR, "$CONFDIR",[Font configuration directory]) +AC_SUBST(CONFDIR) + +# +# Let people not build/install docs if they don't have docbook +# + +AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no) + +AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes) + +default_docs="yes" +# +# Check if docs exist or can be created +# +if test x$HASDOCBOOK = xno; then + if test -f $srcdir/doc/fonts-conf.5; then + : + else + default_docs="no" + fi +fi + +AC_ARG_ENABLE(docs, [ --disable-docs Don't build and install documentation],,enable_docs=$default_docs) + +AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes) + +if test "x$enable_docs" = xyes; then + DOCSRC="doc" + tmp=funcs.$$ + cat $srcdir/doc/*.fncs | awk ' + /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } } + /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } } + /^@@/ { done = 0; }' > $tmp + DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'` + echo DOCMAN3 $DOCMAN3 + rm -f $tmp +else + DOCSRC="" + DOCMAN3="" +fi + +AC_SUBST(DOCSRC) +AC_SUBST(DOCMAN3) + + +dnl Figure out what cache format suffix to use for this architecture +AC_C_BIGENDIAN +AC_CHECK_SIZEOF([void *]) +AC_CHECK_ALIGNOF([double]) + + + +AC_OUTPUT([ +Makefile +fontconfig/Makefile +fc-lang/Makefile +fc-glyphname/Makefile +fc-case/Makefile +src/Makefile +conf.d/Makefile +fc-cache/Makefile +fc-cat/Makefile +fc-list/Makefile +fc-match/Makefile +fc-pattern/Makefile +fc-query/Makefile +fc-scan/Makefile +doc/Makefile +doc/version.sgml +test/Makefile +fontconfig.spec +fontconfig.pc +fontconfig-zip +]) diff --git a/fontconfig/doc/Makefile.am b/fontconfig/doc/Makefile.am index 2940f75eb..8d7d5c8ba 100644 --- a/fontconfig/doc/Makefile.am +++ b/fontconfig/doc/Makefile.am @@ -1,203 +1,203 @@ -#
-# fontconfig/doc/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC_SRC = $(srcdir)
-DOC_MODULE = fontconfig
-DOC2HTML = docbook2html
-DOC2TXT = docbook2txt
-DOC2MAN = docbook2man
-DOC2PDF = docbook2pdf
-
-TXT = fontconfig-user.txt fontconfig-devel.txt
-PDF = fontconfig-user.pdf fontconfig-devel.pdf
-HTML_FILES = fontconfig-user.html
-HTML_DIR = fontconfig-devel
-SGML = fontconfig-user.sgml fontconfig-devel.sgml
-FNCS_TMPL = ${DOC_SRC}/func.sgml
-
-DOC_FUNCS_FNCS=\
- fcatomic.fncs \
- fcblanks.fncs \
- fccache.fncs \
- fccharset.fncs \
- fcconfig.fncs \
- fcconstant.fncs \
- fcdircache.fncs \
- fcfile.fncs \
- fcfontset.fncs \
- fcformat.fncs \
- fcfreetype.fncs \
- fcinit.fncs \
- fclangset.fncs \
- fcmatrix.fncs \
- fcobjectset.fncs \
- fcobjecttype.fncs \
- fcpattern.fncs \
- fcstring.fncs \
- fcstrset.fncs \
- fcvalue.fncs
-
-DOC_FUNCS_SGML=\
- fcatomic.sgml \
- fcblanks.sgml \
- fccache.sgml \
- fccharset.sgml \
- fcconfig.sgml \
- fcconstant.sgml \
- fcdircache.sgml \
- fcfile.sgml \
- fcfontset.sgml \
- fcformat.sgml \
- fcfreetype.sgml \
- fcinit.sgml \
- fclangset.sgml \
- fcmatrix.sgml \
- fcobjectset.sgml \
- fcobjecttype.sgml \
- fcpattern.sgml \
- fcstring.sgml \
- fcstrset.sgml \
- fcvalue.sgml
-
-man5_MANS=fonts-conf.5
-man3_MANS=$(DOCMAN3)
-
-noinst_PROGRAMS=edit-sgml
-edit_sgml_SOURCES=edit-sgml.c
-
-DOC_FILES=$(TXT) $(PDF) $(HTML_FILES)
-LOCAL_DOCS=$(man3_MANS) $(man5_MANS) $(DOC_FILES) $(HTML_DIR)/*
-
-check_SCRIPTS=check-missing-doc
-TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh
-TESTS=check-missing-doc
-
-EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(DOC_FUNCS_SGML) $(check_SCRIPTS) func.sgml confdir.sgml.in
-
-SUFFIXES=.fncs .sgml .txt .html
-
-if USEDOCBOOK
-
-if CROSS_COMPILING
-.fncs.sgml:
- @echo Warning: cannot rebuild $@ when cross-compiling
-else
-.fncs.sgml:
- $(RM) $@
- ./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml
-endif
-
-.sgml.txt:
- $(RM) $@
- $(DOC2TXT) $<
-
-.sgml.pdf:
- $(RM) $@
- $(DOC2PDF) $<
-
-$(man3_MANS): func.refs
-
-func.refs: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) func.refs
- $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \
- mv devel-man/manpage.refs func.refs && \
- mv devel-man/*.3 . && \
- $(RM) devel-man/manpage.* && \
- rmdir devel-man
-
-local-fontconfig-devel.sgml: fontconfig-devel.sgml
- $(LN_S) $< $@
-
-$(DOC_FUNCS_SGML): edit-sgml.c $(FNCS_TMPL)
-
-fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(DOC2MAN) local-fontconfig-user.sgml && \
- $(RM) manpage.*
-
-local-fontconfig-user.sgml: fontconfig-user.sgml
- $(LN_S) $< $@
-
-all-local: $(LOCAL_DOCS)
-
-clean-local:
- $(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) func.refs
- $(RM) -r $(HTML_DIR)
-
-MAINTAINERCLEANFILES = $(DOC_FUNCS_SGML)
-
-$(HTML_DIR): local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) -r $(HTML_DIR)
- $(DOC2HTML) -V '%use-id-as-filename%' -o $(HTML_DIR) local-fontconfig-devel.sgml
-
-fontconfig-devel.txt: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) $@
- $(DOC2TXT) local-fontconfig-devel.sgml
- mv local-fontconfig-devel.txt $@
-
-fontconfig-devel.pdf: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml
- $(RM) $@
- $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \
- || echo Failed to generate $@ >&2; \
- (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@)
-
-fontconfig-user.html: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@ local-$@ $@.tmp
- $(DOC2HTML) -u local-fontconfig-user.sgml > $@.tmp
- -test -f local-$@ && mv local-$@ $@
- -test -f $@ || mv $@.tmp $@
- -test -f $@.tmp && $(RM) $@.tmp
-
-fontconfig-user.txt: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(DOC2TXT) local-fontconfig-user.sgml
- mv local-fontconfig-user.txt $@
-
-fontconfig-user.pdf: local-fontconfig-user.sgml version.sgml confdir.sgml
- $(RM) $@
- $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \
- || echo Failed to generate $@ >&2; \
- (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@)
-
-STRIPNL=awk '{ if (NR > 1) printf ("\n"); printf ("%s", $$0); }'
-confdir.sgml: ${DOC_SRC}/confdir.sgml.in
- sed "s,@CONFDIR\@,${CONFDIR}," < ${DOC_SRC}/confdir.sgml.in | $(STRIPNL) > confdir.sgml
-
-CLEANFILES=confdir.sgml local-fontconfig-user.sgml local-fontconfig-devel.sgml
-
-htmldoc_DATA = $(HTML_DIR)/*
-
-$(HTML_DIR)/*: $(HTML_DIR)
-
-else
-
-htmldoc_DATA = $(srcdir)/$(HTML_DIR)/*
-
-all-local:
-clean-local:
-endif
-
-htmldocdir=$(docdir)/$(HTML_DIR)
-
-doc_DATA = $(DOC_FILES)
-
+# +# fontconfig/doc/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC_SRC = $(srcdir) +DOC_MODULE = fontconfig +DOC2HTML = docbook2html +DOC2TXT = docbook2txt +DOC2MAN = docbook2man +DOC2PDF = docbook2pdf + +TXT = fontconfig-user.txt fontconfig-devel.txt +PDF = fontconfig-user.pdf fontconfig-devel.pdf +HTML_FILES = fontconfig-user.html +HTML_DIR = fontconfig-devel +SGML = fontconfig-user.sgml fontconfig-devel.sgml +FNCS_TMPL = ${DOC_SRC}/func.sgml + +DOC_FUNCS_FNCS=\ + fcatomic.fncs \ + fcblanks.fncs \ + fccache.fncs \ + fccharset.fncs \ + fcconfig.fncs \ + fcconstant.fncs \ + fcdircache.fncs \ + fcfile.fncs \ + fcfontset.fncs \ + fcformat.fncs \ + fcfreetype.fncs \ + fcinit.fncs \ + fclangset.fncs \ + fcmatrix.fncs \ + fcobjectset.fncs \ + fcobjecttype.fncs \ + fcpattern.fncs \ + fcstring.fncs \ + fcstrset.fncs \ + fcvalue.fncs + +DOC_FUNCS_SGML=\ + fcatomic.sgml \ + fcblanks.sgml \ + fccache.sgml \ + fccharset.sgml \ + fcconfig.sgml \ + fcconstant.sgml \ + fcdircache.sgml \ + fcfile.sgml \ + fcfontset.sgml \ + fcformat.sgml \ + fcfreetype.sgml \ + fcinit.sgml \ + fclangset.sgml \ + fcmatrix.sgml \ + fcobjectset.sgml \ + fcobjecttype.sgml \ + fcpattern.sgml \ + fcstring.sgml \ + fcstrset.sgml \ + fcvalue.sgml + +man5_MANS=fonts-conf.5 +man3_MANS=$(DOCMAN3) + +noinst_PROGRAMS=edit-sgml +edit_sgml_SOURCES=edit-sgml.c + +DOC_FILES=$(TXT) $(PDF) $(HTML_FILES) +LOCAL_DOCS=$(man3_MANS) $(man5_MANS) $(DOC_FILES) $(HTML_DIR)/* + +check_SCRIPTS=check-missing-doc +TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh +TESTS=check-missing-doc + +EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(DOC_FUNCS_SGML) $(check_SCRIPTS) func.sgml confdir.sgml.in + +SUFFIXES=.fncs .sgml .txt .html + +if USEDOCBOOK + +if CROSS_COMPILING +.fncs.sgml: + @echo Warning: cannot rebuild $@ when cross-compiling +else +.fncs.sgml: + $(RM) $@ + ./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml +endif + +.sgml.txt: + $(RM) $@ + $(DOC2TXT) $< + +.sgml.pdf: + $(RM) $@ + $(DOC2PDF) $< + +$(man3_MANS): func.refs + +func.refs: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml + $(RM) func.refs + $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \ + mv devel-man/manpage.refs func.refs && \ + mv devel-man/*.3 . && \ + $(RM) devel-man/manpage.* && \ + rmdir devel-man + +local-fontconfig-devel.sgml: fontconfig-devel.sgml + $(LN_S) $< $@ + +$(DOC_FUNCS_SGML): edit-sgml.c $(FNCS_TMPL) + +fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml + $(RM) $@ + $(DOC2MAN) local-fontconfig-user.sgml && \ + $(RM) manpage.* + +local-fontconfig-user.sgml: fontconfig-user.sgml + $(LN_S) $< $@ + +all-local: $(LOCAL_DOCS) + +clean-local: + $(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) func.refs + $(RM) -r $(HTML_DIR) + +MAINTAINERCLEANFILES = $(DOC_FUNCS_SGML) + +$(HTML_DIR): local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml + $(RM) -r $(HTML_DIR) + $(DOC2HTML) -V '%use-id-as-filename%' -o $(HTML_DIR) local-fontconfig-devel.sgml + +fontconfig-devel.txt: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml + $(RM) $@ + $(DOC2TXT) local-fontconfig-devel.sgml + mv local-fontconfig-devel.txt $@ + +fontconfig-devel.pdf: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml + $(RM) $@ + $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \ + || echo Failed to generate $@ >&2; \ + (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@) + +fontconfig-user.html: local-fontconfig-user.sgml version.sgml confdir.sgml + $(RM) $@ local-$@ $@.tmp + $(DOC2HTML) -u local-fontconfig-user.sgml > $@.tmp + -test -f local-$@ && mv local-$@ $@ + -test -f $@ || mv $@.tmp $@ + -test -f $@.tmp && $(RM) $@.tmp + +fontconfig-user.txt: local-fontconfig-user.sgml version.sgml confdir.sgml + $(RM) $@ + $(DOC2TXT) local-fontconfig-user.sgml + mv local-fontconfig-user.txt $@ + +fontconfig-user.pdf: local-fontconfig-user.sgml version.sgml confdir.sgml + $(RM) $@ + $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \ + || echo Failed to generate $@ >&2; \ + (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@) + +STRIPNL=awk '{ if (NR > 1) printf ("\n"); printf ("%s", $$0); }' +confdir.sgml: ${DOC_SRC}/confdir.sgml.in + sed "s,@CONFDIR\@,${CONFDIR}," < ${DOC_SRC}/confdir.sgml.in | $(STRIPNL) > confdir.sgml + +CLEANFILES=confdir.sgml local-fontconfig-user.sgml local-fontconfig-devel.sgml + +htmldoc_DATA = $(HTML_DIR)/* + +$(HTML_DIR)/*: $(HTML_DIR) + +else + +htmldoc_DATA = $(srcdir)/$(HTML_DIR)/* + +all-local: +clean-local: +endif + +htmldocdir=$(docdir)/$(HTML_DIR) + +doc_DATA = $(DOC_FILES) + diff --git a/fontconfig/doc/confdir.sgml.in b/fontconfig/doc/confdir.sgml.in index 8008ab81d..cfcaa9f6e 100644 --- a/fontconfig/doc/confdir.sgml.in +++ b/fontconfig/doc/confdir.sgml.in @@ -1,26 +1,26 @@ -<!--
- fontconfig/doc/confdir.sgml.in
-
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of the author(s) not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. The authors make no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
--->
-<!-- this is filled in at make time -->
-<!--@CONFDIR@-->
-/etc/fonts
+<!-- + fontconfig/doc/confdir.sgml.in + + Copyright © 2003 Keith Packard + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of the author(s) not be used in + advertising or publicity pertaining to distribution of the software without + specific, written prior permission. The authors make no + representations about the suitability of this software for any purpose. It + is provided "as is" without express or implied warranty. + + THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. +--> +<!-- this is filled in at make time --> +<!--@CONFDIR@--> +/etc/fonts diff --git a/fontconfig/doc/edit-sgml.c b/fontconfig/doc/edit-sgml.c index a3f4aa058..cc2ee7633 100644 --- a/fontconfig/doc/edit-sgml.c +++ b/fontconfig/doc/edit-sgml.c @@ -1,546 +1,546 @@ -/*
- * fontconfig/doc/edit-sgml.c
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <ctype.h>
-
-static void *
-New (int size);
-
-static void *
-Reallocate (void *p, int size);
-
-static void
-Dispose (void *p);
-
-typedef enum { False, True } Bool;
-
-typedef struct {
- char *buf;
- int size;
- int len;
-} String;
-
-static String *
-StringNew (void);
-
-static void
-StringAdd (String *s, char c);
-
-static void
-StringAddString (String *s, char *buf);
-
-static String *
-StringMake (char *buf);
-
-static void
-StringDel (String *s);
-
-static void
-StringPut (FILE *f, String *s);
-
-static void
-StringDispose (String *s);
-
-typedef struct {
- String *tag;
- String *text;
-} Replace;
-
-static Replace *
-ReplaceNew (void);
-
-static void
-ReplaceDispose (Replace *r);
-
-static void
-Bail (const char *format, int line, const char *arg);
-
-static Replace *
-ReplaceRead (FILE *f, int *linep);
-
-typedef struct _replaceList {
- struct _replaceList *next;
- Replace *r;
-} ReplaceList;
-
-static ReplaceList *
-ReplaceListNew (Replace *r, ReplaceList *next);
-
-static void
-ReplaceListDispose (ReplaceList *l);
-
-typedef struct {
- ReplaceList *head;
-} ReplaceSet;
-
-static ReplaceSet *
-ReplaceSetNew (void);
-
-static void
-ReplaceSetDispose (ReplaceSet *s);
-
-static void
-ReplaceSetAdd (ReplaceSet *s, Replace *r);
-
-static Replace *
-ReplaceSetFind (ReplaceSet *s, char *tag);
-
-static ReplaceSet *
-ReplaceSetRead (FILE *f, int *linep);
-
-typedef struct _skipStack {
- struct _skipStack *prev;
- int skipping;
-} SkipStack;
-
-static SkipStack *
-SkipStackPush (SkipStack *prev, int skipping);
-
-static SkipStack *
-SkipStackPop (SkipStack *prev);
-
-typedef struct _loopStack {
- struct _loopStack *prev;
- String *tag;
- String *extra;
- long pos;
-} LoopStack;
-
-static LoopStack *
-LoopStackPush (LoopStack *prev, FILE *f, char *tag);
-
-static LoopStack *
-LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f);
-
-static void
-LineSkip (FILE *f, int *linep);
-
-static void
-DoReplace (FILE *f, int *linep, ReplaceSet *s);
-
-#define STRING_INIT 128
-
-static void *
-New (int size)
-{
- void *m = malloc (size);
- if (!m)
- abort ();
- return m;
-}
-
-static void *
-Reallocate (void *p, int size)
-{
- void *r = realloc (p, size);
-
- if (!r)
- abort ();
- return r;
-}
-
-static void
-Dispose (void *p)
-{
- free (p);
-}
-
-static String *
-StringNew (void)
-{
- String *s;
-
- s = New (sizeof (String));
- s->buf = New (STRING_INIT);
- s->size = STRING_INIT - 1;
- s->buf[0] = '\0';
- s->len = 0;
- return s;
-}
-
-static void
-StringAdd (String *s, char c)
-{
- if (s->len == s->size)
- s->buf = Reallocate (s->buf, (s->size *= 2) + 1);
- s->buf[s->len++] = c;
- s->buf[s->len] = '\0';
-}
-
-static void
-StringAddString (String *s, char *buf)
-{
- while (*buf)
- StringAdd (s, *buf++);
-}
-
-static String *
-StringMake (char *buf)
-{
- String *s = StringNew ();
- StringAddString (s, buf);
- return s;
-}
-
-static void
-StringDel (String *s)
-{
- if (s->len)
- s->buf[--s->len] = '\0';
-}
-
-static void
-StringPut (FILE *f, String *s)
-{
- char *b = s->buf;
-
- while (*b)
- putc (*b++, f);
-}
-
-#define StringLast(s) ((s)->len ? (s)->buf[(s)->len - 1] : '\0')
-
-static void
-StringDispose (String *s)
-{
- Dispose (s->buf);
- Dispose (s);
-}
-
-static Replace *
-ReplaceNew (void)
-{
- Replace *r = New (sizeof (Replace));
- r->tag = StringNew ();
- r->text = StringNew ();
- return r;
-}
-
-static void
-ReplaceDispose (Replace *r)
-{
- StringDispose (r->tag);
- StringDispose (r->text);
- Dispose (r);
-}
-
-static void
-Bail (const char *format, int line, const char *arg)
-{
- fprintf (stderr, "fatal: ");
- fprintf (stderr, format, line, arg);
- fprintf (stderr, "\n");
- exit (1);
-}
-
-static int
-Getc (FILE *f, int *linep)
-{
- int c = getc (f);
- if (c == '\n')
- ++(*linep);
- return c;
-}
-
-static void
-Ungetc (int c, FILE *f, int *linep)
-{
- if (c == '\n')
- --(*linep);
- ungetc (c, f);
-}
-
-static Replace *
-ReplaceRead (FILE *f, int *linep)
-{
- int c;
- Replace *r;
-
- while ((c = Getc (f, linep)) != '@')
- {
- if (c == EOF)
- return 0;
- }
- r = ReplaceNew();
- while ((c = Getc (f, linep)) != '@')
- {
- if (c == EOF)
- {
- ReplaceDispose (r);
- return 0;
- }
- if (isspace (c))
- Bail ("%d: invalid character after tag %s", *linep, r->tag->buf);
- StringAdd (r->tag, c);
- }
- if (r->tag->buf[0] == '\0')
- {
- ReplaceDispose (r);
- return 0;
- }
- while (isspace ((c = Getc (f, linep))))
- ;
- Ungetc (c, f, linep);
- while ((c = Getc (f, linep)) != '@' && c != EOF)
- StringAdd (r->text, c);
- if (c == '@')
- Ungetc (c, f, linep);
- while (isspace (StringLast (r->text)))
- StringDel (r->text);
- if (StringLast(r->text) == '%')
- {
- StringDel (r->text);
- StringAdd (r->text, ' ');
- }
- return r;
-}
-
-static ReplaceList *
-ReplaceListNew (Replace *r, ReplaceList *next)
-{
- ReplaceList *l = New (sizeof (ReplaceList));
- l->r = r;
- l->next = next;
- return l;
-}
-
-static void
-ReplaceListDispose (ReplaceList *l)
-{
- if (l)
- {
- ReplaceListDispose (l->next);
- ReplaceDispose (l->r);
- Dispose (l);
- }
-}
-
-static ReplaceSet *
-ReplaceSetNew (void)
-{
- ReplaceSet *s = New (sizeof (ReplaceSet));
- s->head = 0;
- return s;
-}
-
-static void
-ReplaceSetDispose (ReplaceSet *s)
-{
- ReplaceListDispose (s->head);
- Dispose (s);
-}
-
-static void
-ReplaceSetAdd (ReplaceSet *s, Replace *r)
-{
- s->head = ReplaceListNew (r, s->head);
-}
-
-static Replace *
-ReplaceSetFind (ReplaceSet *s, char *tag)
-{
- ReplaceList *l;
-
- for (l = s->head; l; l = l->next)
- if (!strcmp (tag, l->r->tag->buf))
- return l->r;
- return 0;
-}
-
-static ReplaceSet *
-ReplaceSetRead (FILE *f, int *linep)
-{
- ReplaceSet *s = ReplaceSetNew ();
- Replace *r;
-
- while ((r = ReplaceRead (f, linep)))
- {
- while (ReplaceSetFind (s, r->tag->buf))
- StringAdd (r->tag, '+');
- ReplaceSetAdd (s, r);
- }
- if (!s->head)
- {
- ReplaceSetDispose (s);
- s = 0;
- }
- return s;
-}
-
-static SkipStack *
-SkipStackPush (SkipStack *prev, int skipping)
-{
- SkipStack *ss = New (sizeof (SkipStack));
- ss->prev = prev;
- ss->skipping = skipping;
- return ss;
-}
-
-static SkipStack *
-SkipStackPop (SkipStack *prev)
-{
- SkipStack *ss = prev->prev;
- Dispose (prev);
- return ss;
-}
-
-static LoopStack *
-LoopStackPush (LoopStack *prev, FILE *f, char *tag)
-{
- LoopStack *ls = New (sizeof (LoopStack));
- ls->prev = prev;
- ls->tag = StringMake (tag);
- ls->extra = StringNew ();
- ls->pos = ftell (f);
- return ls;
-}
-
-static LoopStack *
-LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f)
-{
- String *s = StringMake (ls->tag->buf);
- LoopStack *ret = ls;
- Bool loop;
-
- StringAdd (ls->extra, '+');
- StringAddString (s, ls->extra->buf);
- loop = ReplaceSetFind (rs, s->buf) != 0;
- StringDispose (s);
- if (loop)
- fseek (f, ls->pos, SEEK_SET);
- else
- {
- ret = ls->prev;
- StringDispose (ls->tag);
- StringDispose (ls->extra);
- Dispose (ls);
- }
- return ret;
-}
-
-static void
-LineSkip (FILE *f, int *linep)
-{
- int c;
-
- while ((c = Getc (f, linep)) == '\n')
- ;
- Ungetc (c, f, linep);
-}
-
-static void
-DoReplace (FILE *f, int *linep, ReplaceSet *s)
-{
- int c;
- String *tag;
- Replace *r;
- SkipStack *ss = 0;
- LoopStack *ls = 0;
- int skipping = 0;
-
- while ((c = Getc (f, linep)) != EOF)
- {
- if (c == '@')
- {
- tag = StringNew ();
- while ((c = Getc (f, linep)) != '@')
- {
- if (c == EOF)
- abort ();
- StringAdd (tag, c);
- }
- if (ls)
- StringAddString (tag, ls->extra->buf);
- switch (tag->buf[0]) {
- case '?':
- ss = SkipStackPush (ss, skipping);
- if (!ReplaceSetFind (s, tag->buf + 1))
- skipping++;
- LineSkip (f, linep);
- break;
- case ':':
- if (!ss)
- abort ();
- if (ss->skipping == skipping)
- ++skipping;
- else
- --skipping;
- LineSkip (f, linep);
- break;
- case ';':
- skipping = ss->skipping;
- ss = SkipStackPop (ss);
- LineSkip (f, linep);
- break;
- case '{':
- ls = LoopStackPush (ls, f, tag->buf + 1);
- LineSkip (f, linep);
- break;
- case '}':
- ls = LoopStackLoop (s, ls, f);
- LineSkip (f, linep);
- break;
- default:
- r = ReplaceSetFind (s, tag->buf);
- if (r && !skipping)
- StringPut (stdout, r->text);
- break;
- }
- StringDispose (tag);
- }
- else if (!skipping)
- putchar (c);
- }
-}
-
-int
-main (int argc, char **argv)
-{
- FILE *f;
- ReplaceSet *s;
- int iline, oline;
-
- if (!argv[1])
- Bail ("usage: %*s <template.sgml>", 0, argv[0]);
- f = fopen (argv[1], "r");
- if (!f)
- {
- Bail ("can't open file %s", 0, argv[1]);
- exit (1);
- }
- iline = 1;
- while ((s = ReplaceSetRead (stdin, &iline)))
- {
- oline = 1;
- DoReplace (f, &oline, s);
- ReplaceSetDispose (s);
- rewind (f);
- }
- if (ferror (stdout))
- Bail ("%s", 0, "error writing output");
- exit (0);
-}
+/* + * fontconfig/doc/edit-sgml.c + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <ctype.h> + +static void * +New (int size); + +static void * +Reallocate (void *p, int size); + +static void +Dispose (void *p); + +typedef enum { False, True } Bool; + +typedef struct { + char *buf; + int size; + int len; +} String; + +static String * +StringNew (void); + +static void +StringAdd (String *s, char c); + +static void +StringAddString (String *s, char *buf); + +static String * +StringMake (char *buf); + +static void +StringDel (String *s); + +static void +StringPut (FILE *f, String *s); + +static void +StringDispose (String *s); + +typedef struct { + String *tag; + String *text; +} Replace; + +static Replace * +ReplaceNew (void); + +static void +ReplaceDispose (Replace *r); + +static void +Bail (const char *format, int line, const char *arg); + +static Replace * +ReplaceRead (FILE *f, int *linep); + +typedef struct _replaceList { + struct _replaceList *next; + Replace *r; +} ReplaceList; + +static ReplaceList * +ReplaceListNew (Replace *r, ReplaceList *next); + +static void +ReplaceListDispose (ReplaceList *l); + +typedef struct { + ReplaceList *head; +} ReplaceSet; + +static ReplaceSet * +ReplaceSetNew (void); + +static void +ReplaceSetDispose (ReplaceSet *s); + +static void +ReplaceSetAdd (ReplaceSet *s, Replace *r); + +static Replace * +ReplaceSetFind (ReplaceSet *s, char *tag); + +static ReplaceSet * +ReplaceSetRead (FILE *f, int *linep); + +typedef struct _skipStack { + struct _skipStack *prev; + int skipping; +} SkipStack; + +static SkipStack * +SkipStackPush (SkipStack *prev, int skipping); + +static SkipStack * +SkipStackPop (SkipStack *prev); + +typedef struct _loopStack { + struct _loopStack *prev; + String *tag; + String *extra; + long pos; +} LoopStack; + +static LoopStack * +LoopStackPush (LoopStack *prev, FILE *f, char *tag); + +static LoopStack * +LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f); + +static void +LineSkip (FILE *f, int *linep); + +static void +DoReplace (FILE *f, int *linep, ReplaceSet *s); + +#define STRING_INIT 128 + +static void * +New (int size) +{ + void *m = malloc (size); + if (!m) + abort (); + return m; +} + +static void * +Reallocate (void *p, int size) +{ + void *r = realloc (p, size); + + if (!r) + abort (); + return r; +} + +static void +Dispose (void *p) +{ + free (p); +} + +static String * +StringNew (void) +{ + String *s; + + s = New (sizeof (String)); + s->buf = New (STRING_INIT); + s->size = STRING_INIT - 1; + s->buf[0] = '\0'; + s->len = 0; + return s; +} + +static void +StringAdd (String *s, char c) +{ + if (s->len == s->size) + s->buf = Reallocate (s->buf, (s->size *= 2) + 1); + s->buf[s->len++] = c; + s->buf[s->len] = '\0'; +} + +static void +StringAddString (String *s, char *buf) +{ + while (*buf) + StringAdd (s, *buf++); +} + +static String * +StringMake (char *buf) +{ + String *s = StringNew (); + StringAddString (s, buf); + return s; +} + +static void +StringDel (String *s) +{ + if (s->len) + s->buf[--s->len] = '\0'; +} + +static void +StringPut (FILE *f, String *s) +{ + char *b = s->buf; + + while (*b) + putc (*b++, f); +} + +#define StringLast(s) ((s)->len ? (s)->buf[(s)->len - 1] : '\0') + +static void +StringDispose (String *s) +{ + Dispose (s->buf); + Dispose (s); +} + +static Replace * +ReplaceNew (void) +{ + Replace *r = New (sizeof (Replace)); + r->tag = StringNew (); + r->text = StringNew (); + return r; +} + +static void +ReplaceDispose (Replace *r) +{ + StringDispose (r->tag); + StringDispose (r->text); + Dispose (r); +} + +static void +Bail (const char *format, int line, const char *arg) +{ + fprintf (stderr, "fatal: "); + fprintf (stderr, format, line, arg); + fprintf (stderr, "\n"); + exit (1); +} + +static int +Getc (FILE *f, int *linep) +{ + int c = getc (f); + if (c == '\n') + ++(*linep); + return c; +} + +static void +Ungetc (int c, FILE *f, int *linep) +{ + if (c == '\n') + --(*linep); + ungetc (c, f); +} + +static Replace * +ReplaceRead (FILE *f, int *linep) +{ + int c; + Replace *r; + + while ((c = Getc (f, linep)) != '@') + { + if (c == EOF) + return 0; + } + r = ReplaceNew(); + while ((c = Getc (f, linep)) != '@') + { + if (c == EOF) + { + ReplaceDispose (r); + return 0; + } + if (isspace (c)) + Bail ("%d: invalid character after tag %s", *linep, r->tag->buf); + StringAdd (r->tag, c); + } + if (r->tag->buf[0] == '\0') + { + ReplaceDispose (r); + return 0; + } + while (isspace ((c = Getc (f, linep)))) + ; + Ungetc (c, f, linep); + while ((c = Getc (f, linep)) != '@' && c != EOF) + StringAdd (r->text, c); + if (c == '@') + Ungetc (c, f, linep); + while (isspace (StringLast (r->text))) + StringDel (r->text); + if (StringLast(r->text) == '%') + { + StringDel (r->text); + StringAdd (r->text, ' '); + } + return r; +} + +static ReplaceList * +ReplaceListNew (Replace *r, ReplaceList *next) +{ + ReplaceList *l = New (sizeof (ReplaceList)); + l->r = r; + l->next = next; + return l; +} + +static void +ReplaceListDispose (ReplaceList *l) +{ + if (l) + { + ReplaceListDispose (l->next); + ReplaceDispose (l->r); + Dispose (l); + } +} + +static ReplaceSet * +ReplaceSetNew (void) +{ + ReplaceSet *s = New (sizeof (ReplaceSet)); + s->head = 0; + return s; +} + +static void +ReplaceSetDispose (ReplaceSet *s) +{ + ReplaceListDispose (s->head); + Dispose (s); +} + +static void +ReplaceSetAdd (ReplaceSet *s, Replace *r) +{ + s->head = ReplaceListNew (r, s->head); +} + +static Replace * +ReplaceSetFind (ReplaceSet *s, char *tag) +{ + ReplaceList *l; + + for (l = s->head; l; l = l->next) + if (!strcmp (tag, l->r->tag->buf)) + return l->r; + return 0; +} + +static ReplaceSet * +ReplaceSetRead (FILE *f, int *linep) +{ + ReplaceSet *s = ReplaceSetNew (); + Replace *r; + + while ((r = ReplaceRead (f, linep))) + { + while (ReplaceSetFind (s, r->tag->buf)) + StringAdd (r->tag, '+'); + ReplaceSetAdd (s, r); + } + if (!s->head) + { + ReplaceSetDispose (s); + s = 0; + } + return s; +} + +static SkipStack * +SkipStackPush (SkipStack *prev, int skipping) +{ + SkipStack *ss = New (sizeof (SkipStack)); + ss->prev = prev; + ss->skipping = skipping; + return ss; +} + +static SkipStack * +SkipStackPop (SkipStack *prev) +{ + SkipStack *ss = prev->prev; + Dispose (prev); + return ss; +} + +static LoopStack * +LoopStackPush (LoopStack *prev, FILE *f, char *tag) +{ + LoopStack *ls = New (sizeof (LoopStack)); + ls->prev = prev; + ls->tag = StringMake (tag); + ls->extra = StringNew (); + ls->pos = ftell (f); + return ls; +} + +static LoopStack * +LoopStackLoop (ReplaceSet *rs, LoopStack *ls, FILE *f) +{ + String *s = StringMake (ls->tag->buf); + LoopStack *ret = ls; + Bool loop; + + StringAdd (ls->extra, '+'); + StringAddString (s, ls->extra->buf); + loop = ReplaceSetFind (rs, s->buf) != 0; + StringDispose (s); + if (loop) + fseek (f, ls->pos, SEEK_SET); + else + { + ret = ls->prev; + StringDispose (ls->tag); + StringDispose (ls->extra); + Dispose (ls); + } + return ret; +} + +static void +LineSkip (FILE *f, int *linep) +{ + int c; + + while ((c = Getc (f, linep)) == '\n') + ; + Ungetc (c, f, linep); +} + +static void +DoReplace (FILE *f, int *linep, ReplaceSet *s) +{ + int c; + String *tag; + Replace *r; + SkipStack *ss = 0; + LoopStack *ls = 0; + int skipping = 0; + + while ((c = Getc (f, linep)) != EOF) + { + if (c == '@') + { + tag = StringNew (); + while ((c = Getc (f, linep)) != '@') + { + if (c == EOF) + abort (); + StringAdd (tag, c); + } + if (ls) + StringAddString (tag, ls->extra->buf); + switch (tag->buf[0]) { + case '?': + ss = SkipStackPush (ss, skipping); + if (!ReplaceSetFind (s, tag->buf + 1)) + skipping++; + LineSkip (f, linep); + break; + case ':': + if (!ss) + abort (); + if (ss->skipping == skipping) + ++skipping; + else + --skipping; + LineSkip (f, linep); + break; + case ';': + skipping = ss->skipping; + ss = SkipStackPop (ss); + LineSkip (f, linep); + break; + case '{': + ls = LoopStackPush (ls, f, tag->buf + 1); + LineSkip (f, linep); + break; + case '}': + ls = LoopStackLoop (s, ls, f); + LineSkip (f, linep); + break; + default: + r = ReplaceSetFind (s, tag->buf); + if (r && !skipping) + StringPut (stdout, r->text); + break; + } + StringDispose (tag); + } + else if (!skipping) + putchar (c); + } +} + +int +main (int argc, char **argv) +{ + FILE *f; + ReplaceSet *s; + int iline, oline; + + if (!argv[1]) + Bail ("usage: %*s <template.sgml>", 0, argv[0]); + f = fopen (argv[1], "r"); + if (!f) + { + Bail ("can't open file %s", 0, argv[1]); + exit (1); + } + iline = 1; + while ((s = ReplaceSetRead (stdin, &iline))) + { + oline = 1; + DoReplace (f, &oline, s); + ReplaceSetDispose (s); + rewind (f); + } + if (ferror (stdout)) + Bail ("%s", 0, "error writing output"); + exit (0); +} diff --git a/fontconfig/doc/fcatomic.fncs b/fontconfig/doc/fcatomic.fncs index 645fe2b26..017756af1 100644 --- a/fontconfig/doc/fcatomic.fncs +++ b/fontconfig/doc/fcatomic.fncs @@ -1,95 +1,95 @@ -/*
- * fontconfig/doc/fcatomic.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ FcAtomic *
-@FUNC@ FcAtomicCreate
-@TYPE1@ const FcChar8 * @ARG1@ file
-@PURPOSE@ create an FcAtomic object
-@DESC@
-Creates a data structure containing data needed to control access to <parameter>file</parameter>.
-Writing is done to a separate file. Once that file is complete, the original
-configuration file is atomically replaced so that reading process always see
-a consistent and complete file without the need to lock for reading.
-@@
-
-@RET@ FcBool
-@FUNC@ FcAtomicLock
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ lock a file
-@DESC@
-Attempts to lock the file referenced by <parameter>atomic</parameter>.
-Returns FcFalse if the file is already locked, else returns FcTrue and
-leaves the file locked.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcAtomicNewFile
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ return new temporary file name
-@DESC@
-Returns the filename for writing a new version of the file referenced
-by <parameter>atomic</parameter>.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcAtomicOrigFile
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ return original file name
-@DESC@
-Returns the file referenced by <parameter>atomic</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcAtomicReplaceOrig
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ replace original with new
-@DESC@
-Replaces the original file referenced by <parameter>atomic</parameter> with
-the new file. Returns FcFalse if the file cannot be replaced due to
-permission issues in the filesystem. Otherwise returns FcTrue.
-@@
-
-@RET@ void
-@FUNC@ FcAtomicDeleteNew
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ delete new file
-@DESC@
-Deletes the new file. Used in error recovery to back out changes.
-@@
-
-@RET@ void
-@FUNC@ FcAtomicUnlock
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ unlock a file
-@DESC@
-Unlocks the file.
-@@
-
-@RET@ void
-@FUNC@ FcAtomicDestroy
-@TYPE1@ FcAtomic * @ARG1@ atomic
-@PURPOSE@ destroy an FcAtomic object
-@DESC@
-Destroys <parameter>atomic</parameter>.
-@@
+/* + * fontconfig/doc/fcatomic.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@RET@ FcAtomic * +@FUNC@ FcAtomicCreate +@TYPE1@ const FcChar8 * @ARG1@ file +@PURPOSE@ create an FcAtomic object +@DESC@ +Creates a data structure containing data needed to control access to <parameter>file</parameter>. +Writing is done to a separate file. Once that file is complete, the original +configuration file is atomically replaced so that reading process always see +a consistent and complete file without the need to lock for reading. +@@ + +@RET@ FcBool +@FUNC@ FcAtomicLock +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ lock a file +@DESC@ +Attempts to lock the file referenced by <parameter>atomic</parameter>. +Returns FcFalse if the file is already locked, else returns FcTrue and +leaves the file locked. +@@ + +@RET@ FcChar8 * +@FUNC@ FcAtomicNewFile +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ return new temporary file name +@DESC@ +Returns the filename for writing a new version of the file referenced +by <parameter>atomic</parameter>. +@@ + +@RET@ FcChar8 * +@FUNC@ FcAtomicOrigFile +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ return original file name +@DESC@ +Returns the file referenced by <parameter>atomic</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcAtomicReplaceOrig +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ replace original with new +@DESC@ +Replaces the original file referenced by <parameter>atomic</parameter> with +the new file. Returns FcFalse if the file cannot be replaced due to +permission issues in the filesystem. Otherwise returns FcTrue. +@@ + +@RET@ void +@FUNC@ FcAtomicDeleteNew +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ delete new file +@DESC@ +Deletes the new file. Used in error recovery to back out changes. +@@ + +@RET@ void +@FUNC@ FcAtomicUnlock +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ unlock a file +@DESC@ +Unlocks the file. +@@ + +@RET@ void +@FUNC@ FcAtomicDestroy +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ destroy an FcAtomic object +@DESC@ +Destroys <parameter>atomic</parameter>. +@@ diff --git a/fontconfig/doc/fcblanks.fncs b/fontconfig/doc/fcblanks.fncs index a1d3d4ad1..b0996d644 100644 --- a/fontconfig/doc/fcblanks.fncs +++ b/fontconfig/doc/fcblanks.fncs @@ -1,58 +1,58 @@ -/*
- * fontconfig/doc/fcblanks.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcBlanks *
-@FUNC@ FcBlanksCreate
-@TYPE1@ void
-@PURPOSE@ Create an FcBlanks
-@DESC@
-Creates an empty FcBlanks object.
-@@
-
-@RET@ void
-@FUNC@ FcBlanksDestroy
-@TYPE1@ FcBlanks * @ARG1@ b
-@PURPOSE@ Destroy and FcBlanks
-@DESC@
-Destroys an FcBlanks object, freeing any associated memory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcBlanksAdd
-@TYPE1@ FcBlanks * @ARG1@ b
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Add a character to an FcBlanks
-@DESC@
-Adds a single character to an FcBlanks object, returning FcFalse
-if this process ran out of memory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcBlanksIsMember
-@TYPE1@ FcBlanks * @ARG1@ b
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Query membership in an FcBlanks
-@DESC@
-Returns whether the specified FcBlanks object contains the indicated Unicode
-value.
-@@
+/* + * fontconfig/doc/fcblanks.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcBlanks * +@FUNC@ FcBlanksCreate +@TYPE1@ void +@PURPOSE@ Create an FcBlanks +@DESC@ +Creates an empty FcBlanks object. +@@ + +@RET@ void +@FUNC@ FcBlanksDestroy +@TYPE1@ FcBlanks * @ARG1@ b +@PURPOSE@ Destroy and FcBlanks +@DESC@ +Destroys an FcBlanks object, freeing any associated memory. +@@ + +@RET@ FcBool +@FUNC@ FcBlanksAdd +@TYPE1@ FcBlanks * @ARG1@ b +@TYPE2@ FcChar32% @ARG2@ ucs4 +@PURPOSE@ Add a character to an FcBlanks +@DESC@ +Adds a single character to an FcBlanks object, returning FcFalse +if this process ran out of memory. +@@ + +@RET@ FcBool +@FUNC@ FcBlanksIsMember +@TYPE1@ FcBlanks * @ARG1@ b +@TYPE2@ FcChar32% @ARG2@ ucs4 +@PURPOSE@ Query membership in an FcBlanks +@DESC@ +Returns whether the specified FcBlanks object contains the indicated Unicode +value. +@@ diff --git a/fontconfig/doc/fccache.fncs b/fontconfig/doc/fccache.fncs index 96f3f0a6c..f35c5d7cb 100644 --- a/fontconfig/doc/fccache.fncs +++ b/fontconfig/doc/fccache.fncs @@ -1,68 +1,68 @@ -/*
- * Copyright © 2007 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ const FcChar8 *
-@FUNC@ FcCacheDir
-@TYPE1@ const FcCache * @ARG1@ cache
-@PURPOSE@ Return directory of <parameter>cache</parameter>
-@DESC@
-This function returns the directory from which the cache was constructed.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcCacheCopySet
-@TYPE1@ const FcCache * @ARG1@ cache
-@PURPOSE@ Returns a copy of the fontset from <parameter>cache</parameter>
-@DESC@
-The returned fontset contains each of the font patterns from
-<parameter>cache</parameter>. This fontset may be modified, but the patterns
-from the cache are read-only.
-@@
-
-@RET@ const FcChar8 *
-@FUNC@ FcCacheSubdir
-@TYPE1@ const FcCache * @ARG1@ cache
-@TYPE2@ int @ARG2@ i
-@PURPOSE@ Return the <parameter>i</parameter>'th subdirectory.
-@DESC@
-The set of subdirectories stored in a cache file are indexed by this
-function, <parameter>i</parameter> should range from 0 to
-<parameter>n</parameter>-1, where <parameter>n</parameter> is the return
-value from FcCacheNumSubdir.
-@@
-
-@RET@ int
-@FUNC@ FcCacheNumSubdir
-@TYPE1@ const FcCache * @ARG1@ cache
-@PURPOSE@ Return the number of subdirectories in <parameter>cache</parameter>.
-@DESC@
-This returns the total number of subdirectories in the cache.
-@@
-
-@RET@ int
-@FUNC@ FcCacheNumFont
-@TYPE1@ const FcCache * @ARG1@ cache
-@PURPOSE@ Returns the number of fonts in <parameter>cache</parameter>.
-@DESC@
-This returns the number of fonts which would be included in the return from
-FcCacheCopySet.
-@@
+/* + * Copyright © 2007 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@RET@ const FcChar8 * +@FUNC@ FcCacheDir +@TYPE1@ const FcCache * @ARG1@ cache +@PURPOSE@ Return directory of <parameter>cache</parameter> +@DESC@ +This function returns the directory from which the cache was constructed. +@@ + +@RET@ FcFontSet * +@FUNC@ FcCacheCopySet +@TYPE1@ const FcCache * @ARG1@ cache +@PURPOSE@ Returns a copy of the fontset from <parameter>cache</parameter> +@DESC@ +The returned fontset contains each of the font patterns from +<parameter>cache</parameter>. This fontset may be modified, but the patterns +from the cache are read-only. +@@ + +@RET@ const FcChar8 * +@FUNC@ FcCacheSubdir +@TYPE1@ const FcCache * @ARG1@ cache +@TYPE2@ int @ARG2@ i +@PURPOSE@ Return the <parameter>i</parameter>'th subdirectory. +@DESC@ +The set of subdirectories stored in a cache file are indexed by this +function, <parameter>i</parameter> should range from 0 to +<parameter>n</parameter>-1, where <parameter>n</parameter> is the return +value from FcCacheNumSubdir. +@@ + +@RET@ int +@FUNC@ FcCacheNumSubdir +@TYPE1@ const FcCache * @ARG1@ cache +@PURPOSE@ Return the number of subdirectories in <parameter>cache</parameter>. +@DESC@ +This returns the total number of subdirectories in the cache. +@@ + +@RET@ int +@FUNC@ FcCacheNumFont +@TYPE1@ const FcCache * @ARG1@ cache +@PURPOSE@ Returns the number of fonts in <parameter>cache</parameter>. +@DESC@ +This returns the number of fonts which would be included in the return from +FcCacheCopySet. +@@ diff --git a/fontconfig/doc/fccharset.fncs b/fontconfig/doc/fccharset.fncs index 7cd2ff4b5..036870d3b 100644 --- a/fontconfig/doc/fccharset.fncs +++ b/fontconfig/doc/fccharset.fncs @@ -1,217 +1,217 @@ -/*
- * fontconfig/doc/fccharset.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcCharSet *
-@FUNC@ FcCharSetCreate
-@TYPE1@ void
-@PURPOSE@ Create an empty character set
-@DESC@
-<function>FcCharSetCreate</function> allocates and initializes a new empty
-character set object.
-@@
-
-@RET@ void
-@FUNC@ FcCharSetDestroy
-@TYPE1@ FcCharSet * @ARG1@ fcs
-@PURPOSE@ Destroy a character set
-@DESC@
-<function>FcCharSetDestroy</function> decrements the reference count
-<parameter>fcs</parameter>. If the reference count becomes zero, all
-memory referenced is freed.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetAddChar
-@TYPE1@ FcCharSet * @ARG1@ fcs
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Add a character to a charset
-@DESC@
-<function>FcCharSetAddChar</function> adds a single Unicode char to the set,
-returning FcFalse on failure, either as a result of a constant set or from
-running out of memory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetDelChar
-@TYPE1@ FcCharSet * @ARG1@ fcs
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Add a character to a charset
-@DESC@
-<function>FcCharSetDelChar</function> deletes a single Unicode char from the set,
-returning FcFalse on failure, either as a result of a constant set or from
-running out of memory.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetCopy
-@TYPE1@ FcCharSet * @ARG1@ src
-@PURPOSE@ Copy a charset
-@DESC@
-Makes a copy of <parameter>src</parameter>; note that this may not actually do anything more
-than increment the reference count on <parameter>src</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetEqual
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Compare two charsets
-@DESC@
-Returns whether <parameter>a</parameter> and <parameter>b</parameter>
-contain the same set of Unicode chars.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetIntersect
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Intersect charsets
-@DESC@
-Returns a set including only those chars found in both
-<parameter>a</parameter> and <parameter>b</parameter>.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetUnion
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Add charsets
-@DESC@
-Returns a set including only those chars found in either <parameter>a</parameter> or <parameter>b</parameter>.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetSubtract
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Subtract charsets
-@DESC@
-Returns a set including only those chars found in <parameter>a</parameter> but not <parameter>b</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetMerge
-@TYPE1@ FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@TYPE3@ FcBool * @ARG3@ changed
-@PURPOSE@ Merge charsets
-@DESC@
-Adds all chars in <parameter>b</parameter> to <parameter>a</parameter>.
-In other words, this is an in-place version of FcCharSetUnion.
-If <parameter>changed</parameter> is not NULL, then it returns whether any new
-chars from <parameter>b</parameter> were added to <parameter>a</parameter>.
-Returns FcFalse on failure, either when <parameter>a</parameter> is a constant
-set or from running out of memory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetHasChar
-@TYPE1@ const FcCharSet * @ARG1@ fcs
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ Check a charset for a char
-@DESC@
-Returns whether <parameter>fcs</parameter> contains the char <parameter>ucs4</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetCount
-@TYPE1@ const FcCharSet * @ARG1@ a
-@PURPOSE@ Count entries in a charset
-@DESC@
-Returns the total number of Unicode chars in <parameter>a</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetIntersectCount
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Intersect and count charsets
-@DESC@
-Returns the number of chars that are in both <parameter>a</parameter> and <parameter>b</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetSubtractCount
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Subtract and count charsets
-@DESC@
-Returns the number of chars that are in <parameter>a</parameter> but not in <parameter>b</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcCharSetIsSubset
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ const FcCharSet * @ARG2@ b
-@PURPOSE@ Test for charset inclusion
-@DESC@
-Returns whether <parameter>a</parameter> is a subset of <parameter>b</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetFirstPage
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map
-@TYPE3@ FcChar32 * @ARG3@ next
-@PURPOSE@ Start enumerating charset contents
-@DESC@
-Builds an array of bits marking the first page of Unicode coverage of
-<parameter>a</parameter>. Returns the base of the array. <parameter>next</parameter> contains the next page in the
-font.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetNextPage
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map
-@TYPE3@ FcChar32 * @ARG3@ next
-@PURPOSE@ Continue enumerating charset contents
-@DESC@
-Builds an array of bits marking the Unicode coverage of <parameter>a</parameter> for page
-<parameter>*next</parameter>. Returns the base of the array. <parameter>next</parameter> contains the next page in
-the font.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcCharSetCoverage
-@TYPE1@ const FcCharSet * @ARG1@ a
-@TYPE2@ FcChar32 @ARG2@ page
-@TYPE3@ FcChar32[8] @ARG3@ result
-@PURPOSE@ DEPRECATED return coverage for a Unicode page
-@DESC@
-DEPRECATED
-This function returns a bitmask in <parameter>result</parameter> which
-indicates which code points in
-<parameter>page</parameter> are included in <parameter>a</parameter>.
-<function>FcCharSetCoverage</function> returns the next page in the charset which has any
-coverage.
-@@
-
-@RET@ FcCharSet *
-@FUNC@ FcCharSetNew
-@TYPE1@ void
-@PURPOSE@ DEPRECATED alias for FcCharSetCreate
-@DESC@
-<function>FcCharSetNew</function> is a DEPRECATED alias for FcCharSetCreate.
-@@
-
+/* + * fontconfig/doc/fccharset.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcCharSet * +@FUNC@ FcCharSetCreate +@TYPE1@ void +@PURPOSE@ Create an empty character set +@DESC@ +<function>FcCharSetCreate</function> allocates and initializes a new empty +character set object. +@@ + +@RET@ void +@FUNC@ FcCharSetDestroy +@TYPE1@ FcCharSet * @ARG1@ fcs +@PURPOSE@ Destroy a character set +@DESC@ +<function>FcCharSetDestroy</function> decrements the reference count +<parameter>fcs</parameter>. If the reference count becomes zero, all +memory referenced is freed. +@@ + +@RET@ FcBool +@FUNC@ FcCharSetAddChar +@TYPE1@ FcCharSet * @ARG1@ fcs +@TYPE2@ FcChar32% @ARG2@ ucs4 +@PURPOSE@ Add a character to a charset +@DESC@ +<function>FcCharSetAddChar</function> adds a single Unicode char to the set, +returning FcFalse on failure, either as a result of a constant set or from +running out of memory. +@@ + +@RET@ FcBool +@FUNC@ FcCharSetDelChar +@TYPE1@ FcCharSet * @ARG1@ fcs +@TYPE2@ FcChar32% @ARG2@ ucs4 +@PURPOSE@ Add a character to a charset +@DESC@ +<function>FcCharSetDelChar</function> deletes a single Unicode char from the set, +returning FcFalse on failure, either as a result of a constant set or from +running out of memory. +@@ + +@RET@ FcCharSet * +@FUNC@ FcCharSetCopy +@TYPE1@ FcCharSet * @ARG1@ src +@PURPOSE@ Copy a charset +@DESC@ +Makes a copy of <parameter>src</parameter>; note that this may not actually do anything more +than increment the reference count on <parameter>src</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcCharSetEqual +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Compare two charsets +@DESC@ +Returns whether <parameter>a</parameter> and <parameter>b</parameter> +contain the same set of Unicode chars. +@@ + +@RET@ FcCharSet * +@FUNC@ FcCharSetIntersect +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Intersect charsets +@DESC@ +Returns a set including only those chars found in both +<parameter>a</parameter> and <parameter>b</parameter>. +@@ + +@RET@ FcCharSet * +@FUNC@ FcCharSetUnion +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Add charsets +@DESC@ +Returns a set including only those chars found in either <parameter>a</parameter> or <parameter>b</parameter>. +@@ + +@RET@ FcCharSet * +@FUNC@ FcCharSetSubtract +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Subtract charsets +@DESC@ +Returns a set including only those chars found in <parameter>a</parameter> but not <parameter>b</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcCharSetMerge +@TYPE1@ FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@TYPE3@ FcBool * @ARG3@ changed +@PURPOSE@ Merge charsets +@DESC@ +Adds all chars in <parameter>b</parameter> to <parameter>a</parameter>. +In other words, this is an in-place version of FcCharSetUnion. +If <parameter>changed</parameter> is not NULL, then it returns whether any new +chars from <parameter>b</parameter> were added to <parameter>a</parameter>. +Returns FcFalse on failure, either when <parameter>a</parameter> is a constant +set or from running out of memory. +@@ + +@RET@ FcBool +@FUNC@ FcCharSetHasChar +@TYPE1@ const FcCharSet * @ARG1@ fcs +@TYPE2@ FcChar32% @ARG2@ ucs4 +@PURPOSE@ Check a charset for a char +@DESC@ +Returns whether <parameter>fcs</parameter> contains the char <parameter>ucs4</parameter>. +@@ + +@RET@ FcChar32 +@FUNC@ FcCharSetCount +@TYPE1@ const FcCharSet * @ARG1@ a +@PURPOSE@ Count entries in a charset +@DESC@ +Returns the total number of Unicode chars in <parameter>a</parameter>. +@@ + +@RET@ FcChar32 +@FUNC@ FcCharSetIntersectCount +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Intersect and count charsets +@DESC@ +Returns the number of chars that are in both <parameter>a</parameter> and <parameter>b</parameter>. +@@ + +@RET@ FcChar32 +@FUNC@ FcCharSetSubtractCount +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Subtract and count charsets +@DESC@ +Returns the number of chars that are in <parameter>a</parameter> but not in <parameter>b</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcCharSetIsSubset +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Test for charset inclusion +@DESC@ +Returns whether <parameter>a</parameter> is a subset of <parameter>b</parameter>. +@@ + +@RET@ FcChar32 +@FUNC@ FcCharSetFirstPage +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map +@TYPE3@ FcChar32 * @ARG3@ next +@PURPOSE@ Start enumerating charset contents +@DESC@ +Builds an array of bits marking the first page of Unicode coverage of +<parameter>a</parameter>. Returns the base of the array. <parameter>next</parameter> contains the next page in the +font. +@@ + +@RET@ FcChar32 +@FUNC@ FcCharSetNextPage +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ FcChar32[FC_CHARSET_MAP_SIZE]% @ARG2@ map +@TYPE3@ FcChar32 * @ARG3@ next +@PURPOSE@ Continue enumerating charset contents +@DESC@ +Builds an array of bits marking the Unicode coverage of <parameter>a</parameter> for page +<parameter>*next</parameter>. Returns the base of the array. <parameter>next</parameter> contains the next page in +the font. +@@ + +@RET@ FcChar32 +@FUNC@ FcCharSetCoverage +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ FcChar32 @ARG2@ page +@TYPE3@ FcChar32[8] @ARG3@ result +@PURPOSE@ DEPRECATED return coverage for a Unicode page +@DESC@ +DEPRECATED +This function returns a bitmask in <parameter>result</parameter> which +indicates which code points in +<parameter>page</parameter> are included in <parameter>a</parameter>. +<function>FcCharSetCoverage</function> returns the next page in the charset which has any +coverage. +@@ + +@RET@ FcCharSet * +@FUNC@ FcCharSetNew +@TYPE1@ void +@PURPOSE@ DEPRECATED alias for FcCharSetCreate +@DESC@ +<function>FcCharSetNew</function> is a DEPRECATED alias for FcCharSetCreate. +@@ + diff --git a/fontconfig/doc/fcconfig.fncs b/fontconfig/doc/fcconfig.fncs index 6a8c8183d..fb55adece 100644 --- a/fontconfig/doc/fcconfig.fncs +++ b/fontconfig/doc/fcconfig.fncs @@ -1,373 +1,373 @@ -/*
- * fontconfig/doc/fcconfig.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcConfig *
-@FUNC@ FcConfigCreate
-@TYPE1@ void
-@PURPOSE@ Create a configuration
-@DESC@
-Creates an empty configuration.
-@@
-
-@RET@ FcConfig *
-@FUNC@ FcConfigReference
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Increment config reference count
-@DESC@
-Add another reference to <parameter>config</parameter>. Configs are freed only
-when the reference count reaches zero.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-In that case this function will be similar to FcConfigGetCurrent() except that
-it increments the reference count before returning and the user is responsible
-for destroying the configuration when not needed anymore.
-@@
-
-@RET@ void
-@FUNC@ FcConfigDestroy
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Destroy a configuration
-@DESC@
-Decrements the config reference count. If all references are gone, destroys
-the configuration and any data associated with it.
-Note that calling this function with the return from FcConfigGetCurrent will
-cause a new configuration to be created for use as current configuration.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigSetCurrent
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Set configuration as default
-@DESC@
-Sets the current default configuration to <parameter>config</parameter>. Implicitly calls
-FcConfigBuildFonts if necessary, returning FcFalse if that call fails.
-@@
-
-@RET@ FcConfig *
-@FUNC@ FcConfigGetCurrent
-@TYPE1@ void
-@PURPOSE@ Return current configuration
-@DESC@
-Returns the current default configuration.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigUptoDate
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Check timestamps on config files
-@DESC@
-Checks all of the files related to <parameter>config</parameter> and returns
-whether any of them has been modified since the configuration was created.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcConfigHome
-@TYPE1@ void
-@PURPOSE@ return the current home directory.
-@DESC@
-Return the current user's home directory, if it is available, and if using it
-is enabled, and NULL otherwise.
-See also <function>FcConfigEnableHome</function>).
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigEnableHome
-@TYPE1@ FcBool% @ARG1@ enable
-@PURPOSE@ controls use of the home directory.
-@DESC@
-If <parameter>enable</parameter> is FcTrue, then Fontconfig will use various
-files which are specified relative to the user's home directory (using the ~
-notation in the configuration). When <parameter>enable</parameter> is
-FcFalse, then all use of the home directory in these contexts will be
-disabled. The previous setting of the value is returned.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigBuildFonts
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Build font database
-@DESC@
-Builds the set of available fonts for the given configuration. Note that
-any changes to the configuration after this call have indeterminate effects.
-Returns FcFalse if this operation runs out of memory.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcConfigGetConfigDirs
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get config directories
-@DESC@
-Returns the list of font directories specified in the configuration files
-for <parameter>config</parameter>. Does not include any subdirectories.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcConfigGetFontDirs
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get font directories
-@DESC@
-Returns the list of font directories in <parameter>config</parameter>. This includes the
-configured font directories along with any directories below those in the
-filesystem.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcConfigGetConfigFiles
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get config files
-@DESC@
-Returns the list of known configuration files used to generate <parameter>config</parameter>.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcConfigGetCache
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ DEPRECATED used to return per-user cache filename
-@DESC@
-With fontconfig no longer using per-user cache files, this function now
-simply returns NULL to indicate that no per-user file exists.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcConfigGetCacheDirs
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ return the list of directories searched for cache files
-@DESC@
-<function>FcConfigGetCacheDirs</function> returns a string list containing
-all of the directories that fontconfig will search when attempting to load a
-cache file for a font directory.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcConfigGetFonts
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcSetName% @ARG2@ set
-@PURPOSE@ Get config font set
-@DESC@
-Returns one of the two sets of fonts from the configuration as specified
-by <parameter>set</parameter>. This font set is owned by the library and must
-not be modified or freed.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBlanks *
-@FUNC@ FcConfigGetBlanks
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get config blanks
-@DESC@
-Returns the FcBlanks object associated with the given configuration, if no
-blanks were present in the configuration, this function will return 0.
-The returned FcBlanks object if not NULL, is valid as long as the owning
-FcConfig is alive.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ int
-@FUNC@ FcConfigGetRescanInterval
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Get config rescan interval
-@DESC@
-Returns the interval between automatic checks of the configuration (in
-seconds) specified in <parameter>config</parameter>. The configuration is checked during
-a call to FcFontList when this interval has passed since the last check.
-An interval setting of zero disables automatic checks.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigSetRescanInterval
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ int% @ARG2@ rescanInterval
-@PURPOSE@ Set config rescan interval
-@DESC@
-Sets the rescan interval. Returns FcFalse if the interval cannot be set (due
-to allocation failure). Otherwise returns FcTrue.
-An interval setting of zero disables automatic checks.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigAppFontAddFile
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ const FcChar8 * @ARG2@ file
-@PURPOSE@ Add font file to font database
-@DESC@
-Adds an application-specific font to the configuration. Returns FcFalse
-if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigAppFontAddDir
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ const FcChar8 * @ARG2@ dir
-@PURPOSE@ Add fonts from directory to font database
-@DESC@
-Scans the specified directory for fonts, adding each one found to the
-application-specific set of fonts. Returns FcFalse
-if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ void
-@FUNC@ FcConfigAppFontClear
-@TYPE1@ FcConfig * @ARG1@ config
-@PURPOSE@ Remove all app fonts from font database
-@DESC@
-Clears the set of application-specific fonts.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigSubstituteWithPat
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcPattern * @ARG3@ p_pat
-@TYPE4@ FcMatchKind% @ARG4@ kind
-@PURPOSE@ Execute substitutions
-@DESC@
-Performs the sequence of pattern modification operations, if <parameter>kind</parameter> is
-FcMatchPattern, then those tagged as pattern operations are applied, else
-if <parameter>kind</parameter> is FcMatchFont, those tagged as font operations are applied and
-p_pat is used for <test> elements with target=pattern. Returns FcFalse
-if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigSubstitute
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcMatchKind% @ARG3@ kind
-@PURPOSE@ Execute substitutions
-@DESC@
-Calls FcConfigSubstituteWithPat setting p_pat to NULL. Returns FcFalse
-if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcFontMatch
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcResult * @ARG3@ result
-@PURPOSE@ Return best font
-@DESC@
-Finds the font in <parameter>sets</parameter> most closely matching
-<parameter>pattern</parameter> and returns the result of
-<function>FcFontRenderPrepare</function> for that font and the provided
-pattern. This function should be called only after
-<function>FcConfigSubstitute</function> and
-<function>FcDefaultSubstitute</function> have been called for
-<parameter>p</parameter>; otherwise the results will not be correct.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcFontSort
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcBool% @ARG3@ trim
-@TYPE4@ FcCharSet ** @ARG4@ csp
-@TYPE5@ FcResult * @ARG5@ result
-@PURPOSE@ Return list of matching fonts
-@DESC@
-Returns the list of fonts sorted by closeness to <parameter>p</parameter>. If <parameter>trim</parameter> is FcTrue,
-elements in the list which don't include Unicode coverage not provided by
-earlier elements in the list are elided. The union of Unicode coverage of
-all of the fonts is returned in <parameter>csp</parameter>, if <parameter>csp</parameter> is not NULL. This function
-should be called only after FcConfigSubstitute and FcDefaultSubstitute have
-been called for <parameter>p</parameter>; otherwise the results will not be correct.
- </para><para>
-The returned FcFontSet references FcPattern structures which may be shared
-by the return value from multiple FcFontSort calls, applications must not
-modify these patterns. Instead, they should be passed, along with <parameter>p</parameter> to
-<function>FcFontRenderPrepare</function> which combines them into a complete pattern.
- </para><para>
-The FcFontSet returned by FcFontSort is destroyed by calling FcFontSetDestroy.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcFontRenderPrepare
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ pat
-@TYPE3@ FcPattern * @ARG3@ font
-@PURPOSE@ Prepare pattern for loading font file
-@DESC@
-Creates a new pattern consisting of elements of <parameter>font</parameter> not appearing
-in <parameter>pat</parameter>, elements of <parameter>pat</parameter> not appearing in <parameter>font</parameter> and the best matching
-value from <parameter>pat</parameter> for elements appearing in both. The result is passed to
-FcConfigSubstituteWithPat with <parameter>kind</parameter> FcMatchFont and then returned.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcFontList
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcPattern * @ARG2@ p
-@TYPE3@ FcObjectSet * @ARG3@ os
-@PURPOSE@ List fonts
-@DESC@
-Selects fonts matching <parameter>p</parameter>, creates patterns from those fonts containing
-only the objects in <parameter>os</parameter> and returns the set of unique such patterns.
-If <parameter>config</parameter> is NULL, the default configuration is checked
-to be up to date, and used.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcConfigFilename
-@TYPE1@ const FcChar8 * @ARG1@ name
-@PURPOSE@ Find a config file
-@DESC@
-Given the specified external entity name, return the associated filename.
-This provides applications a way to convert various configuration file
-references into filename form.
- </para><para>
-A null or empty <parameter>name</parameter> indicates that the default configuration file should
-be used; which file this references can be overridden with the
-FC_CONFIG_FILE environment variable. Next, if the name starts with <parameter>~</parameter>, it
-refers to a file in the current users home directory. Otherwise if the name
-doesn't start with '/', it refers to a file in the default configuration
-directory; the built-in default directory can be overridden with the
-FC_CONFIG_DIR environment variable.
-@@
-
-@RET@ FcBool
-@FUNC@ FcConfigParseAndLoad
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ const FcChar8 * @ARG2@ file
-@TYPE3@ FcBool% @ARG3@ complain
-@PURPOSE@ load a configuration file
-@DESC@
-Walks the configuration in 'file' and constructs the internal representation
-in 'config'. Any include files referenced from within 'file' will be loaded
-and parsed. If 'complain' is FcFalse, no warning will be displayed if
-'file' does not exist. Error and warning messages will be output to stderr.
-Returns FcFalse if some error occurred while loading the file, either a
-parse error, semantic error or allocation failure. Otherwise returns FcTrue.
-@@
+/* + * fontconfig/doc/fcconfig.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcConfig * +@FUNC@ FcConfigCreate +@TYPE1@ void +@PURPOSE@ Create a configuration +@DESC@ +Creates an empty configuration. +@@ + +@RET@ FcConfig * +@FUNC@ FcConfigReference +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Increment config reference count +@DESC@ +Add another reference to <parameter>config</parameter>. Configs are freed only +when the reference count reaches zero. +If <parameter>config</parameter> is NULL, the current configuration is used. +In that case this function will be similar to FcConfigGetCurrent() except that +it increments the reference count before returning and the user is responsible +for destroying the configuration when not needed anymore. +@@ + +@RET@ void +@FUNC@ FcConfigDestroy +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Destroy a configuration +@DESC@ +Decrements the config reference count. If all references are gone, destroys +the configuration and any data associated with it. +Note that calling this function with the return from FcConfigGetCurrent will +cause a new configuration to be created for use as current configuration. +@@ + +@RET@ FcBool +@FUNC@ FcConfigSetCurrent +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Set configuration as default +@DESC@ +Sets the current default configuration to <parameter>config</parameter>. Implicitly calls +FcConfigBuildFonts if necessary, returning FcFalse if that call fails. +@@ + +@RET@ FcConfig * +@FUNC@ FcConfigGetCurrent +@TYPE1@ void +@PURPOSE@ Return current configuration +@DESC@ +Returns the current default configuration. +@@ + +@RET@ FcBool +@FUNC@ FcConfigUptoDate +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Check timestamps on config files +@DESC@ +Checks all of the files related to <parameter>config</parameter> and returns +whether any of them has been modified since the configuration was created. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcChar8 * +@FUNC@ FcConfigHome +@TYPE1@ void +@PURPOSE@ return the current home directory. +@DESC@ +Return the current user's home directory, if it is available, and if using it +is enabled, and NULL otherwise. +See also <function>FcConfigEnableHome</function>). +@@ + +@RET@ FcBool +@FUNC@ FcConfigEnableHome +@TYPE1@ FcBool% @ARG1@ enable +@PURPOSE@ controls use of the home directory. +@DESC@ +If <parameter>enable</parameter> is FcTrue, then Fontconfig will use various +files which are specified relative to the user's home directory (using the ~ +notation in the configuration). When <parameter>enable</parameter> is +FcFalse, then all use of the home directory in these contexts will be +disabled. The previous setting of the value is returned. +@@ + +@RET@ FcBool +@FUNC@ FcConfigBuildFonts +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Build font database +@DESC@ +Builds the set of available fonts for the given configuration. Note that +any changes to the configuration after this call have indeterminate effects. +Returns FcFalse if this operation runs out of memory. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcStrList * +@FUNC@ FcConfigGetConfigDirs +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Get config directories +@DESC@ +Returns the list of font directories specified in the configuration files +for <parameter>config</parameter>. Does not include any subdirectories. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcStrList * +@FUNC@ FcConfigGetFontDirs +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Get font directories +@DESC@ +Returns the list of font directories in <parameter>config</parameter>. This includes the +configured font directories along with any directories below those in the +filesystem. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcStrList * +@FUNC@ FcConfigGetConfigFiles +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Get config files +@DESC@ +Returns the list of known configuration files used to generate <parameter>config</parameter>. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcChar8 * +@FUNC@ FcConfigGetCache +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ DEPRECATED used to return per-user cache filename +@DESC@ +With fontconfig no longer using per-user cache files, this function now +simply returns NULL to indicate that no per-user file exists. +@@ + +@RET@ FcStrList * +@FUNC@ FcConfigGetCacheDirs +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ return the list of directories searched for cache files +@DESC@ +<function>FcConfigGetCacheDirs</function> returns a string list containing +all of the directories that fontconfig will search when attempting to load a +cache file for a font directory. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcFontSet * +@FUNC@ FcConfigGetFonts +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcSetName% @ARG2@ set +@PURPOSE@ Get config font set +@DESC@ +Returns one of the two sets of fonts from the configuration as specified +by <parameter>set</parameter>. This font set is owned by the library and must +not be modified or freed. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcBlanks * +@FUNC@ FcConfigGetBlanks +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Get config blanks +@DESC@ +Returns the FcBlanks object associated with the given configuration, if no +blanks were present in the configuration, this function will return 0. +The returned FcBlanks object if not NULL, is valid as long as the owning +FcConfig is alive. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ int +@FUNC@ FcConfigGetRescanInterval +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Get config rescan interval +@DESC@ +Returns the interval between automatic checks of the configuration (in +seconds) specified in <parameter>config</parameter>. The configuration is checked during +a call to FcFontList when this interval has passed since the last check. +An interval setting of zero disables automatic checks. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcBool +@FUNC@ FcConfigSetRescanInterval +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ int% @ARG2@ rescanInterval +@PURPOSE@ Set config rescan interval +@DESC@ +Sets the rescan interval. Returns FcFalse if the interval cannot be set (due +to allocation failure). Otherwise returns FcTrue. +An interval setting of zero disables automatic checks. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcBool +@FUNC@ FcConfigAppFontAddFile +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ const FcChar8 * @ARG2@ file +@PURPOSE@ Add font file to font database +@DESC@ +Adds an application-specific font to the configuration. Returns FcFalse +if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcBool +@FUNC@ FcConfigAppFontAddDir +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ const FcChar8 * @ARG2@ dir +@PURPOSE@ Add fonts from directory to font database +@DESC@ +Scans the specified directory for fonts, adding each one found to the +application-specific set of fonts. Returns FcFalse +if the fonts cannot be added (due to allocation failure). Otherwise returns FcTrue. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ void +@FUNC@ FcConfigAppFontClear +@TYPE1@ FcConfig * @ARG1@ config +@PURPOSE@ Remove all app fonts from font database +@DESC@ +Clears the set of application-specific fonts. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcBool +@FUNC@ FcConfigSubstituteWithPat +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcPattern * @ARG2@ p +@TYPE3@ FcPattern * @ARG3@ p_pat +@TYPE4@ FcMatchKind% @ARG4@ kind +@PURPOSE@ Execute substitutions +@DESC@ +Performs the sequence of pattern modification operations, if <parameter>kind</parameter> is +FcMatchPattern, then those tagged as pattern operations are applied, else +if <parameter>kind</parameter> is FcMatchFont, those tagged as font operations are applied and +p_pat is used for <test> elements with target=pattern. Returns FcFalse +if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcBool +@FUNC@ FcConfigSubstitute +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcPattern * @ARG2@ p +@TYPE3@ FcMatchKind% @ARG3@ kind +@PURPOSE@ Execute substitutions +@DESC@ +Calls FcConfigSubstituteWithPat setting p_pat to NULL. Returns FcFalse +if the substitution cannot be performed (due to allocation failure). Otherwise returns FcTrue. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcPattern * +@FUNC@ FcFontMatch +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcPattern * @ARG2@ p +@TYPE3@ FcResult * @ARG3@ result +@PURPOSE@ Return best font +@DESC@ +Finds the font in <parameter>sets</parameter> most closely matching +<parameter>pattern</parameter> and returns the result of +<function>FcFontRenderPrepare</function> for that font and the provided +pattern. This function should be called only after +<function>FcConfigSubstitute</function> and +<function>FcDefaultSubstitute</function> have been called for +<parameter>p</parameter>; otherwise the results will not be correct. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcFontSet * +@FUNC@ FcFontSort +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcPattern * @ARG2@ p +@TYPE3@ FcBool% @ARG3@ trim +@TYPE4@ FcCharSet ** @ARG4@ csp +@TYPE5@ FcResult * @ARG5@ result +@PURPOSE@ Return list of matching fonts +@DESC@ +Returns the list of fonts sorted by closeness to <parameter>p</parameter>. If <parameter>trim</parameter> is FcTrue, +elements in the list which don't include Unicode coverage not provided by +earlier elements in the list are elided. The union of Unicode coverage of +all of the fonts is returned in <parameter>csp</parameter>, if <parameter>csp</parameter> is not NULL. This function +should be called only after FcConfigSubstitute and FcDefaultSubstitute have +been called for <parameter>p</parameter>; otherwise the results will not be correct. + </para><para> +The returned FcFontSet references FcPattern structures which may be shared +by the return value from multiple FcFontSort calls, applications must not +modify these patterns. Instead, they should be passed, along with <parameter>p</parameter> to +<function>FcFontRenderPrepare</function> which combines them into a complete pattern. + </para><para> +The FcFontSet returned by FcFontSort is destroyed by calling FcFontSetDestroy. +If <parameter>config</parameter> is NULL, the current configuration is used. +@@ + +@RET@ FcPattern * +@FUNC@ FcFontRenderPrepare +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcPattern * @ARG2@ pat +@TYPE3@ FcPattern * @ARG3@ font +@PURPOSE@ Prepare pattern for loading font file +@DESC@ +Creates a new pattern consisting of elements of <parameter>font</parameter> not appearing +in <parameter>pat</parameter>, elements of <parameter>pat</parameter> not appearing in <parameter>font</parameter> and the best matching +value from <parameter>pat</parameter> for elements appearing in both. The result is passed to +FcConfigSubstituteWithPat with <parameter>kind</parameter> FcMatchFont and then returned. +@@ + +@RET@ FcFontSet * +@FUNC@ FcFontList +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcPattern * @ARG2@ p +@TYPE3@ FcObjectSet * @ARG3@ os +@PURPOSE@ List fonts +@DESC@ +Selects fonts matching <parameter>p</parameter>, creates patterns from those fonts containing +only the objects in <parameter>os</parameter> and returns the set of unique such patterns. +If <parameter>config</parameter> is NULL, the default configuration is checked +to be up to date, and used. +@@ + +@RET@ FcChar8 * +@FUNC@ FcConfigFilename +@TYPE1@ const FcChar8 * @ARG1@ name +@PURPOSE@ Find a config file +@DESC@ +Given the specified external entity name, return the associated filename. +This provides applications a way to convert various configuration file +references into filename form. + </para><para> +A null or empty <parameter>name</parameter> indicates that the default configuration file should +be used; which file this references can be overridden with the +FC_CONFIG_FILE environment variable. Next, if the name starts with <parameter>~</parameter>, it +refers to a file in the current users home directory. Otherwise if the name +doesn't start with '/', it refers to a file in the default configuration +directory; the built-in default directory can be overridden with the +FC_CONFIG_DIR environment variable. +@@ + +@RET@ FcBool +@FUNC@ FcConfigParseAndLoad +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ const FcChar8 * @ARG2@ file +@TYPE3@ FcBool% @ARG3@ complain +@PURPOSE@ load a configuration file +@DESC@ +Walks the configuration in 'file' and constructs the internal representation +in 'config'. Any include files referenced from within 'file' will be loaded +and parsed. If 'complain' is FcFalse, no warning will be displayed if +'file' does not exist. Error and warning messages will be output to stderr. +Returns FcFalse if some error occurred while loading the file, either a +parse error, semantic error or allocation failure. Otherwise returns FcTrue. +@@ diff --git a/fontconfig/doc/fcconstant.fncs b/fontconfig/doc/fcconstant.fncs index c65fb392c..2ead0a6f0 100644 --- a/fontconfig/doc/fcconstant.fncs +++ b/fontconfig/doc/fcconstant.fncs @@ -1,62 +1,62 @@ -/*
- * fontconfig/doc/fcconstant.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcBool
-@FUNC@ FcNameRegisterConstants
-@TYPE1@ const FcConstant * @ARG1@ consts
-@TYPE2@ int% @ARG2@ nconsts
-@PURPOSE@ Register symbolic constants
-@DESC@
-Register <parameter>nconsts</parameter> new symbolic constants. Returns
-FcFalse if the constants cannot be registered (due to allocation failure).
-Otherwise returns FcTrue.
-@@
-
-@RET@ FcBool
-@FUNC@ FcNameUnregisterConstants
-@TYPE1@ const FcConstant * @ARG1@ consts
-@TYPE2@ int% @ARG2@ nconsts
-@PURPOSE@ Unregister symbolic constants
-@DESC@
-Unregister <parameter>nconsts</parameter> symbolic constants. Returns
-FcFalse if the specified constants were not registered. Otherwise returns
-FcTrue.
-@@
-
-@RET@ const FcConstant *
-@FUNC@ FcNameGetConstant
-@TYPE1@ FcChar8 * @ARG1@ string
-@PURPOSE@ Lookup symbolic constant
-@DESC@
-Return the FcConstant structure related to symbolic constant <parameter>string</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcNameConstant
-@TYPE1@ FcChar8 * @ARG1@ string
-@TYPE2@ int * @ARG2@ result
-@PURPOSE@ Get the value for a symbolic constant
-@DESC@
-Returns whether a symbolic constant with name <parameter>string</parameter> is registered,
-placing the value of the constant in <parameter>result</parameter> if present.
-@@
+/* + * fontconfig/doc/fcconstant.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcBool +@FUNC@ FcNameRegisterConstants +@TYPE1@ const FcConstant * @ARG1@ consts +@TYPE2@ int% @ARG2@ nconsts +@PURPOSE@ Register symbolic constants +@DESC@ +Register <parameter>nconsts</parameter> new symbolic constants. Returns +FcFalse if the constants cannot be registered (due to allocation failure). +Otherwise returns FcTrue. +@@ + +@RET@ FcBool +@FUNC@ FcNameUnregisterConstants +@TYPE1@ const FcConstant * @ARG1@ consts +@TYPE2@ int% @ARG2@ nconsts +@PURPOSE@ Unregister symbolic constants +@DESC@ +Unregister <parameter>nconsts</parameter> symbolic constants. Returns +FcFalse if the specified constants were not registered. Otherwise returns +FcTrue. +@@ + +@RET@ const FcConstant * +@FUNC@ FcNameGetConstant +@TYPE1@ FcChar8 * @ARG1@ string +@PURPOSE@ Lookup symbolic constant +@DESC@ +Return the FcConstant structure related to symbolic constant <parameter>string</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcNameConstant +@TYPE1@ FcChar8 * @ARG1@ string +@TYPE2@ int * @ARG2@ result +@PURPOSE@ Get the value for a symbolic constant +@DESC@ +Returns whether a symbolic constant with name <parameter>string</parameter> is registered, +placing the value of the constant in <parameter>result</parameter> if present. +@@ diff --git a/fontconfig/doc/fcfile.fncs b/fontconfig/doc/fcfile.fncs index a64c0b18b..5f5f32a8a 100644 --- a/fontconfig/doc/fcfile.fncs +++ b/fontconfig/doc/fcfile.fncs @@ -1,88 +1,88 @@ -/*
- * fontconfig/doc/fcfile.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ FcBool
-@FUNC@ FcFileScan
-@TYPE1@ FcFontSet * @ARG1@ set
-@TYPE2@ FcStrSet * @ARG2@ dirs
-@TYPE3@ FcFileCache * @ARG3@ cache
-@TYPE4@ FcBlanks * @ARG4@ blanks
-@TYPE5@ const FcChar8 * @ARG5@ file
-@TYPE6@ FcBool% @ARG6@ force
-@PURPOSE@ scan a font file
-@DESC@
-Scans a single file and adds all fonts found to <parameter>set</parameter>.
-If <parameter>force</parameter> is FcTrue, then the file is scanned even if
-associated information is found in <parameter>cache</parameter>. If
-<parameter>file</parameter> is a directory, it is added to
-<parameter>dirs</parameter>. Whether fonts are found depends on fontconfig
-policy as well as the current configuration. Internally, fontconfig will
-ignore BDF and PCF fonts which are not in Unicode (or the effectively
-equivalent ISO Latin-1) encoding as those are not usable by Unicode-based
-applications. The configuration can ignore fonts based on filename or
-contents of the font file itself. Returns FcFalse if any of the fonts cannot be
-added (due to allocation failure). Otherwise returns FcTrue.
-@@
-
-@RET@ FcBool
-@FUNC@ FcFileIsDir
-@TYPE1@ const FcChar8 * @ARG1@ file
-@PURPOSE@ check whether a file is a directory
-@DESC@
-Returns FcTrue if <parameter>file</parameter> is a directory, otherwise
-returns FcFalse.
-@@
-
-@RET@ FcBool
-@FUNC@ FcDirScan
-@TYPE1@ FcFontSet * @ARG1@ set
-@TYPE2@ FcStrSet * @ARG2@ dirs
-@TYPE3@ FcFileCache * @ARG3@ cache
-@TYPE4@ FcBlanks * @ARG4@ blanks
-@TYPE5@ const FcChar8 * @ARG5@ dir
-@TYPE6@ FcBool% @ARG6@ force
-@PURPOSE@ scan a font directory without caching it
-@DESC@
-If <parameter>cache</parameter> is not zero or if <parameter>force</parameter>
-is FcFalse, this function currently returns FcFalse. Otherwise, it scans an
-entire directory and adds all fonts found to <parameter>set</parameter>.
-Any subdirectories found are added to <parameter>dirs</parameter>. Calling
-this function does not create any cache files. Use FcDirCacheRead() if
-caching is desired.
-@@
-
-@RET@ FcBool
-@FUNC@ FcDirSave
-@TYPE1@ FcFontSet * @ARG1@ set
-@TYPE2@ FcStrSet * @ARG2@ dirs
-@TYPE3@ const FcChar8 * @ARG3@ dir
-@PURPOSE@ DEPRECATED: formerly used to save a directory cache
-@DESC@
-This function now does nothing aside from returning FcFalse. It used to creates the
-per-directory cache file for <parameter>dir</parameter> and populates it
-with the fonts in <parameter>set</parameter> and subdirectories in
-<parameter>dirs</parameter>. All of this functionality is now automatically
-managed by FcDirCacheLoad and FcDirCacheRead.
-@@
-
+/* + * fontconfig/doc/fcfile.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@RET@ FcBool +@FUNC@ FcFileScan +@TYPE1@ FcFontSet * @ARG1@ set +@TYPE2@ FcStrSet * @ARG2@ dirs +@TYPE3@ FcFileCache * @ARG3@ cache +@TYPE4@ FcBlanks * @ARG4@ blanks +@TYPE5@ const FcChar8 * @ARG5@ file +@TYPE6@ FcBool% @ARG6@ force +@PURPOSE@ scan a font file +@DESC@ +Scans a single file and adds all fonts found to <parameter>set</parameter>. +If <parameter>force</parameter> is FcTrue, then the file is scanned even if +associated information is found in <parameter>cache</parameter>. If +<parameter>file</parameter> is a directory, it is added to +<parameter>dirs</parameter>. Whether fonts are found depends on fontconfig +policy as well as the current configuration. Internally, fontconfig will +ignore BDF and PCF fonts which are not in Unicode (or the effectively +equivalent ISO Latin-1) encoding as those are not usable by Unicode-based +applications. The configuration can ignore fonts based on filename or +contents of the font file itself. Returns FcFalse if any of the fonts cannot be +added (due to allocation failure). Otherwise returns FcTrue. +@@ + +@RET@ FcBool +@FUNC@ FcFileIsDir +@TYPE1@ const FcChar8 * @ARG1@ file +@PURPOSE@ check whether a file is a directory +@DESC@ +Returns FcTrue if <parameter>file</parameter> is a directory, otherwise +returns FcFalse. +@@ + +@RET@ FcBool +@FUNC@ FcDirScan +@TYPE1@ FcFontSet * @ARG1@ set +@TYPE2@ FcStrSet * @ARG2@ dirs +@TYPE3@ FcFileCache * @ARG3@ cache +@TYPE4@ FcBlanks * @ARG4@ blanks +@TYPE5@ const FcChar8 * @ARG5@ dir +@TYPE6@ FcBool% @ARG6@ force +@PURPOSE@ scan a font directory without caching it +@DESC@ +If <parameter>cache</parameter> is not zero or if <parameter>force</parameter> +is FcFalse, this function currently returns FcFalse. Otherwise, it scans an +entire directory and adds all fonts found to <parameter>set</parameter>. +Any subdirectories found are added to <parameter>dirs</parameter>. Calling +this function does not create any cache files. Use FcDirCacheRead() if +caching is desired. +@@ + +@RET@ FcBool +@FUNC@ FcDirSave +@TYPE1@ FcFontSet * @ARG1@ set +@TYPE2@ FcStrSet * @ARG2@ dirs +@TYPE3@ const FcChar8 * @ARG3@ dir +@PURPOSE@ DEPRECATED: formerly used to save a directory cache +@DESC@ +This function now does nothing aside from returning FcFalse. It used to creates the +per-directory cache file for <parameter>dir</parameter> and populates it +with the fonts in <parameter>set</parameter> and subdirectories in +<parameter>dirs</parameter>. All of this functionality is now automatically +managed by FcDirCacheLoad and FcDirCacheRead. +@@ + diff --git a/fontconfig/doc/fcfontset.fncs b/fontconfig/doc/fcfontset.fncs index adf9a9688..e076d8b92 100644 --- a/fontconfig/doc/fcfontset.fncs +++ b/fontconfig/doc/fcfontset.fncs @@ -1,140 +1,140 @@ -/*
- * fontconfig/doc/fcfontset.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcFontSet *
-@FUNC@ FcFontSetCreate
-@TYPE1@ void
-@PURPOSE@ Create a font set
-@DESC@
-Creates an empty font set.
-@@
-
-@RET@ void
-@FUNC@ FcFontSetDestroy
-@TYPE1@ FcFontSet * @ARG1@ s
-@PURPOSE@ Destroy a font set
-@DESC@
-Destroys a font set. Note that this destroys any referenced patterns as
-well.
-@@
-
-@RET@ FcBool
-@FUNC@ FcFontSetAdd
-@TYPE1@ FcFontSet * @ARG1@ s
-@TYPE2@ FcPattern * @ARG2@ font
-@PURPOSE@ Add to a font set
-@DESC@
-Adds a pattern to a font set. Note that the pattern is not copied before
-being inserted into the set. Returns FcFalse if the pattern cannot be
-inserted into the set (due to allocation failure). Otherwise returns FcTrue.
-@@
-
-@RET@ FcFontSet *
-@FUNC@ FcFontSetList
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcFontSet ** @ARG2@ sets
-@TYPE3@ int @ARG3@ nsets
-@TYPE4@ FcPattern * @ARG4@ pattern
-@TYPE5@ FcObjectSet * @ARG5@ object_set
-@PURPOSE@ List fonts from a set of font sets
-@DESC@
-Selects fonts matching <parameter>pattern</parameter> from
-<parameter>sets</parameter>, creates patterns from those
-fonts containing only the objects in <parameter>object_set</parameter> and returns
-the set of unique such patterns.
-If <parameter>config</parameter> is NULL, the default configuration is checked
-to be up to date, and used.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcFontSetMatch
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcFontSet ** @ARG2@ sets
-@TYPE3@ int @ARG3@ nsets
-@TYPE4@ FcPattern * @ARG4@ pattern
-@TYPE5@ FcResult * @ARG5@ result
-@PURPOSE@ Return the best font from a set of font sets
-@DESC@
-Finds the font in <parameter>sets</parameter> most closely matching
-<parameter>pattern</parameter> and returns the result of
-<function>FcFontRenderPrepare</function> for that font and the provided
-pattern. This function should be called only after
-<function>FcConfigSubstitute</function> and
-<function>FcDefaultSubstitute</function> have been called for
-<parameter>pattern</parameter>; otherwise the results will not be correct.
-If <parameter>config</parameter> is NULL, the current configuration is used.
-Returns NULL if an error occurs during this process.
-@@
-
-@RET@ void
-@FUNC@ FcFontSetPrint
-@TYPE1@ FcFontSet * @ARG1@ set
-@PURPOSE@ Print a set of patterns to stdout
-@DESC@
-This function is useful for diagnosing font related issues, printing the
-complete contents of every pattern in <parameter>set</parameter>. The format
-of the output is designed to be of help to users and developers, and may
-change at any time.
-@@
-
-@RET@
-@FUNC@ FcFontSetSort
-@TYPE1@ FcConfig * @ARG1@ config
-@TYPE2@ FcFontSet ** @ARG2@ sets
-@TYPE3@ int @ARG3@ nsets
-@TYPE4@ FcPattern * @ARG4@ pattern
-@TYPE5@ FcBool% @ARG5@ trim
-@TYPE6@ FcCharSet ** @ARG6@ csp
-@TYPE7@ FcResult * @ARG7@ result
-@PURPOSE@ Add to a font set
-@DESC@
-Returns the list of fonts from <parameter>sets</parameter>
-sorted by closeness to <parameter>pattern</parameter>.
-If <parameter>trim</parameter> is FcTrue,
-elements in the list which don't include Unicode coverage not provided by
-earlier elements in the list are elided. The union of Unicode coverage of
-all of the fonts is returned in <parameter>csp</parameter>,
-if <parameter>csp</parameter> is not NULL. This function
-should be called only after FcConfigSubstitute and FcDefaultSubstitute have
-been called for <parameter>p</parameter>;
-otherwise the results will not be correct.
- </para><para>
-The returned FcFontSet references FcPattern structures which may be shared
-by the return value from multiple FcFontSort calls, applications cannot
-modify these patterns. Instead, they should be passed, along with
-<parameter>pattern</parameter> to
-<function>FcFontRenderPrepare</function> which combines them into a complete pattern.
- </para><para>
-The FcFontSet returned by FcFontSetSort is destroyed by calling FcFontSetDestroy.
-@@
-
-@RET@
-@FUNC@ FcFontSetSortDestroy
-@TYPE1@ FcFontSet * @ARG1@ set
-@PURPOSE@ DEPRECATED destroy a font set
-@DESC@
-This function is DEPRECATED. <function>FcFontSetSortDestroy</function>
-destroys <parameter>set</parameter> by calling
-<function>FcFontSetDestroy</function>. Applications should use
-<function>FcFontSetDestroy</function> directly instead.
-@@
+/* + * fontconfig/doc/fcfontset.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcFontSet * +@FUNC@ FcFontSetCreate +@TYPE1@ void +@PURPOSE@ Create a font set +@DESC@ +Creates an empty font set. +@@ + +@RET@ void +@FUNC@ FcFontSetDestroy +@TYPE1@ FcFontSet * @ARG1@ s +@PURPOSE@ Destroy a font set +@DESC@ +Destroys a font set. Note that this destroys any referenced patterns as +well. +@@ + +@RET@ FcBool +@FUNC@ FcFontSetAdd +@TYPE1@ FcFontSet * @ARG1@ s +@TYPE2@ FcPattern * @ARG2@ font +@PURPOSE@ Add to a font set +@DESC@ +Adds a pattern to a font set. Note that the pattern is not copied before +being inserted into the set. Returns FcFalse if the pattern cannot be +inserted into the set (due to allocation failure). Otherwise returns FcTrue. +@@ + +@RET@ FcFontSet * +@FUNC@ FcFontSetList +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcFontSet ** @ARG2@ sets +@TYPE3@ int @ARG3@ nsets +@TYPE4@ FcPattern * @ARG4@ pattern +@TYPE5@ FcObjectSet * @ARG5@ object_set +@PURPOSE@ List fonts from a set of font sets +@DESC@ +Selects fonts matching <parameter>pattern</parameter> from +<parameter>sets</parameter>, creates patterns from those +fonts containing only the objects in <parameter>object_set</parameter> and returns +the set of unique such patterns. +If <parameter>config</parameter> is NULL, the default configuration is checked +to be up to date, and used. +@@ + +@RET@ FcPattern * +@FUNC@ FcFontSetMatch +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcFontSet ** @ARG2@ sets +@TYPE3@ int @ARG3@ nsets +@TYPE4@ FcPattern * @ARG4@ pattern +@TYPE5@ FcResult * @ARG5@ result +@PURPOSE@ Return the best font from a set of font sets +@DESC@ +Finds the font in <parameter>sets</parameter> most closely matching +<parameter>pattern</parameter> and returns the result of +<function>FcFontRenderPrepare</function> for that font and the provided +pattern. This function should be called only after +<function>FcConfigSubstitute</function> and +<function>FcDefaultSubstitute</function> have been called for +<parameter>pattern</parameter>; otherwise the results will not be correct. +If <parameter>config</parameter> is NULL, the current configuration is used. +Returns NULL if an error occurs during this process. +@@ + +@RET@ void +@FUNC@ FcFontSetPrint +@TYPE1@ FcFontSet * @ARG1@ set +@PURPOSE@ Print a set of patterns to stdout +@DESC@ +This function is useful for diagnosing font related issues, printing the +complete contents of every pattern in <parameter>set</parameter>. The format +of the output is designed to be of help to users and developers, and may +change at any time. +@@ + +@RET@ +@FUNC@ FcFontSetSort +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ FcFontSet ** @ARG2@ sets +@TYPE3@ int @ARG3@ nsets +@TYPE4@ FcPattern * @ARG4@ pattern +@TYPE5@ FcBool% @ARG5@ trim +@TYPE6@ FcCharSet ** @ARG6@ csp +@TYPE7@ FcResult * @ARG7@ result +@PURPOSE@ Add to a font set +@DESC@ +Returns the list of fonts from <parameter>sets</parameter> +sorted by closeness to <parameter>pattern</parameter>. +If <parameter>trim</parameter> is FcTrue, +elements in the list which don't include Unicode coverage not provided by +earlier elements in the list are elided. The union of Unicode coverage of +all of the fonts is returned in <parameter>csp</parameter>, +if <parameter>csp</parameter> is not NULL. This function +should be called only after FcConfigSubstitute and FcDefaultSubstitute have +been called for <parameter>p</parameter>; +otherwise the results will not be correct. + </para><para> +The returned FcFontSet references FcPattern structures which may be shared +by the return value from multiple FcFontSort calls, applications cannot +modify these patterns. Instead, they should be passed, along with +<parameter>pattern</parameter> to +<function>FcFontRenderPrepare</function> which combines them into a complete pattern. + </para><para> +The FcFontSet returned by FcFontSetSort is destroyed by calling FcFontSetDestroy. +@@ + +@RET@ +@FUNC@ FcFontSetSortDestroy +@TYPE1@ FcFontSet * @ARG1@ set +@PURPOSE@ DEPRECATED destroy a font set +@DESC@ +This function is DEPRECATED. <function>FcFontSetSortDestroy</function> +destroys <parameter>set</parameter> by calling +<function>FcFontSetDestroy</function>. Applications should use +<function>FcFontSetDestroy</function> directly instead. +@@ diff --git a/fontconfig/doc/fcformat.fncs b/fontconfig/doc/fcformat.fncs index f5ad4851c..c136e8cf2 100644 --- a/fontconfig/doc/fcformat.fncs +++ b/fontconfig/doc/fcformat.fncs @@ -1,308 +1,308 @@ -/*
- * fontconfig/doc/fcformat.fncs
- *
- * Copyright © 2008 Behdad Esfahbod
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ FcChar8 *
-@FUNC@ FcPatternFormat
-@TYPE1@ FcPattern * @ARG1@ pat
-@TYPE2@ const FcChar8 * @ARG2@ format
-@PURPOSE@ Format a pattern into a string according to a format specifier
-@DESC@
-
-Converts given pattern <parameter>pat</parameter> into text described by
-the format specifier <parameter>format</parameter>.
-The return value refers to newly allocated memory which should be freed by the
-caller using free(), or NULL if <parameter>format</parameter> is invalid.
-
-</para><para>
-
-The format is loosely modeled after printf-style format string.
-The format string is composed of zero or more directives: ordinary
-characters (not "%"), which are copied unchanged to the output stream;
-and tags which are interpreted to construct text from the pattern in a
-variety of ways (explained below).
-Special characters can be escaped
-using backslash. C-string style special characters like \n and \r are
-also supported (this is useful when the format string is not a C string
-literal).
-It is advisable to always escape curly braces that
-are meant to be copied to the output as ordinary characters.
-
-</para><para>
-
-Each tag is introduced by the character "%",
-followed by an optional minimum field width,
-followed by tag contents in curly braces ({}).
-If the minimum field width value is provided the tag
-will be expanded and the result padded to achieve the minimum width.
-If the minimum field width is positive, the padding will right-align
-the text. Negative field width will left-align.
-The rest of this section describes various supported tag contents
-and their expansion.
-
-</para><para>
-
-A <firstterm>simple</firstterm> tag
-is one where the content is an identifier. When simple
-tags are expanded, the named identifier will be looked up in
-<parameter>pattern</parameter> and the resulting list of values returned,
-joined together using comma. For example, to print the family name and style of the
-pattern, use the format "%{family} %{style}\n". To extend the family column
-to forty characters use "%-40{family}%{style}\n".
-
-</para><para>
-
-Simple tags expand to list of all values for an element. To only choose
-one of the values, one can index using the syntax "%{elt[idx]}". For example,
-to get the first family name only, use "%{family[0]}".
-
-</para><para>
-
-If a simple tag ends with "=" and the element is found in the pattern, the
-name of the element followed by "=" will be output before the list of values.
-For example, "%{weight=}" may expand to the string "weight=80". Or to the empty
-string if <parameter>pattern</parameter> does not have weight set.
-
-</para><para>
-
-If a simple tag starts with ":" and the element is found in the pattern, ":"
-will be printed first. For example, combining this with the =, the format
-"%{:weight=}" may expand to ":weight=80" or to the empty string
-if <parameter>pattern</parameter> does not have weight set.
-
-</para><para>
-
-If a simple tag contains the string ":-", the rest of the the tag contents
-will be used as a default string. The default string is output if the element
-is not found in the pattern. For example, the format
-"%{:weight=:-123}" may expand to ":weight=80" or to the string
-":weight=123" if <parameter>pattern</parameter> does not have weight set.
-
-</para><para>
-
-A <firstterm>count</firstterm> tag
-is one that starts with the character "#" followed by an element
-name, and expands to the number of values for the element in the pattern.
-For example, "%{#family}" expands to the number of family names
-<parameter>pattern</parameter> has set, which may be zero.
-
-</para><para>
-
-A <firstterm>sub-expression</firstterm> tag
-is one that expands a sub-expression. The tag contents
-are the sub-expression to expand placed inside another set of curly braces.
-Sub-expression tags are useful for aligning an entire sub-expression, or to
-apply converters (explained later) to the entire sub-expression output.
-For example, the format "%40{{%{family} %{style}}}" expands the sub-expression
-to construct the family name followed by the style, then takes the entire
-string and pads it on the left to be at least forty characters.
-
-</para><para>
-
-A <firstterm>filter-out</firstterm> tag
-is one starting with the character "-" followed by a
-comma-separated list of element names, followed by a sub-expression enclosed
-in curly braces. The sub-expression will be expanded but with a pattern that
-has the listed elements removed from it.
-For example, the format "%{-size,pixelsize{sub-expr}}" will expand "sub-expr"
-with <parameter>pattern</parameter> sans the size and pixelsize elements.
-
-</para><para>
-
-A <firstterm>filter-in</firstterm> tag
-is one starting with the character "+" followed by a
-comma-separated list of element names, followed by a sub-expression enclosed
-in curly braces. The sub-expression will be expanded but with a pattern that
-only has the listed elements from the surrounding pattern.
-For example, the format "%{+family,familylang{sub-expr}}" will expand "sub-expr"
-with a sub-pattern consisting only the family and family lang elements of
-<parameter>pattern</parameter>.
-
-</para><para>
-
-A <firstterm>conditional</firstterm> tag
-is one starting with the character "?" followed by a
-comma-separated list of element conditions, followed by two sub-expression
-enclosed in curly braces. An element condition can be an element name,
-in which case it tests whether the element is defined in pattern, or
-the character "!" followed by an element name, in which case the test
-is negated. The conditional passes if all the element conditions pass.
-The tag expands the first sub-expression if the conditional passes, and
-expands the second sub-expression otherwise.
-For example, the format "%{?size,dpi,!pixelsize{pass}{fail}}" will expand
-to "pass" if <parameter>pattern</parameter> has size and dpi elements but
-no pixelsize element, and to "fail" otherwise.
-
-</para><para>
-
-An <firstterm>enumerate</firstterm> tag
-is one starting with the string "[]" followed by a
-comma-separated list of element names, followed by a sub-expression enclosed
-in curly braces. The list of values for the named elements are walked in
-parallel and the sub-expression expanded each time with a pattern just having
-a single value for those elements, starting from the first value and
-continuing as long as any of those elements has a value.
-For example, the format "%{[]family,familylang{%{family} (%{familylang})\n}}"
-will expand the pattern "%{family} (%{familylang})\n" with a pattern
-having only the first value of the family and familylang elements, then expands
-it with the second values, then the third, etc.
-
-</para><para>
-
-As a special case, if an enumerate tag has only one element, and that element
-has only one value in the pattern, and that value is of type FcLangSet, the
-individual languages in the language set are enumerated.
-
-</para><para>
-
-A <firstterm>builtin</firstterm> tag
-is one starting with the character "=" followed by a builtin
-name. The following builtins are defined:
-
-<variablelist>
-
-<varlistentry><term>
-unparse
-</term><listitem><para>
-Expands to the result of calling FcNameUnparse() on the pattern.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-fcmatch
-</term><listitem><para>
-Expands to the output of the default output format of the fc-match
-command on the pattern, without the final newline.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-fclist
-</term><listitem><para>
-Expands to the output of the default output format of the fc-list
-command on the pattern, without the final newline.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-fccat
-</term><listitem><para>
-Expands to the output of the default output format of the fc-cat
-command on the pattern, without the final newline.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-pkgkit
-</term><listitem><para>
-Expands to the list of PackageKit font() tags for the pattern.
-Currently this includes tags for each family name, and each language
-from the pattern, enumerated and sanitized into a set of tags terminated
-by newline. Package management systems can use these tags to tag their
-packages accordingly.
-</para></listitem></varlistentry>
-
-</variablelist>
-
-For example, the format "%{+family,style{%{=unparse}}}\n" will expand
-to an unparsed name containing only the family and style element values
-from <parameter>pattern</parameter>.
-
-</para><para>
-
-The contents of any tag can be followed by a set of zero or more
-<firstterm>converter</firstterm>s. A converter is specified by the
-character "|" followed by the converter name and arguments. The
-following converters are defined:
-
-<variablelist>
-
-<varlistentry><term>
-basename
-</term><listitem><para>
-Replaces text with the results of calling FcStrBasename() on it.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-dirname
-</term><listitem><para>
-Replaces text with the results of calling FcStrDirname() on it.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-downcase
-</term><listitem><para>
-Replaces text with the results of calling FcStrDowncase() on it.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-shescape
-</term><listitem><para>
-Escapes text for one level of shell expansion.
-(Escapes single-quotes, also encloses text in single-quotes.)
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-cescape
-</term><listitem><para>
-Escapes text such that it can be used as part of a C string literal.
-(Escapes backslash and double-quotes.)
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-xmlescape
-</term><listitem><para>
-Escapes text such that it can be used in XML and HTML.
-(Escapes less-than, greater-than, and ampersand.)
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-delete(<parameter>chars</parameter>)
-</term><listitem><para>
-Deletes all occurrences of each of the characters in <parameter>chars</parameter>
-from the text.
-FIXME: This converter is not UTF-8 aware yet.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-escape(<parameter>chars</parameter>)
-</term><listitem><para>
-Escapes all occurrences of each of the characters in <parameter>chars</parameter>
-by prepending it by the first character in <parameter>chars</parameter>.
-FIXME: This converter is not UTF-8 aware yet.
-</para></listitem></varlistentry>
-
-<varlistentry><term>
-translate(<parameter>from</parameter>,<parameter>to</parameter>)
-</term><listitem><para>
-Translates all occurrences of each of the characters in <parameter>from</parameter>
-by replacing them with their corresponding character in <parameter>to</parameter>.
-If <parameter>to</parameter> has fewer characters than
-<parameter>from</parameter>, it will be extended by repeating its last
-character.
-FIXME: This converter is not UTF-8 aware yet.
-</para></listitem></varlistentry>
-
-</variablelist>
-
-For example, the format "%{family|downcase|delete( )}\n" will expand
-to the values of the family element in <parameter>pattern</parameter>,
-lower-cased and with spaces removed.
-
-@@
+/* + * fontconfig/doc/fcformat.fncs + * + * Copyright © 2008 Behdad Esfahbod + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@RET@ FcChar8 * +@FUNC@ FcPatternFormat +@TYPE1@ FcPattern * @ARG1@ pat +@TYPE2@ const FcChar8 * @ARG2@ format +@PURPOSE@ Format a pattern into a string according to a format specifier +@DESC@ + +Converts given pattern <parameter>pat</parameter> into text described by +the format specifier <parameter>format</parameter>. +The return value refers to newly allocated memory which should be freed by the +caller using free(), or NULL if <parameter>format</parameter> is invalid. + +</para><para> + +The format is loosely modeled after printf-style format string. +The format string is composed of zero or more directives: ordinary +characters (not "%"), which are copied unchanged to the output stream; +and tags which are interpreted to construct text from the pattern in a +variety of ways (explained below). +Special characters can be escaped +using backslash. C-string style special characters like \n and \r are +also supported (this is useful when the format string is not a C string +literal). +It is advisable to always escape curly braces that +are meant to be copied to the output as ordinary characters. + +</para><para> + +Each tag is introduced by the character "%", +followed by an optional minimum field width, +followed by tag contents in curly braces ({}). +If the minimum field width value is provided the tag +will be expanded and the result padded to achieve the minimum width. +If the minimum field width is positive, the padding will right-align +the text. Negative field width will left-align. +The rest of this section describes various supported tag contents +and their expansion. + +</para><para> + +A <firstterm>simple</firstterm> tag +is one where the content is an identifier. When simple +tags are expanded, the named identifier will be looked up in +<parameter>pattern</parameter> and the resulting list of values returned, +joined together using comma. For example, to print the family name and style of the +pattern, use the format "%{family} %{style}\n". To extend the family column +to forty characters use "%-40{family}%{style}\n". + +</para><para> + +Simple tags expand to list of all values for an element. To only choose +one of the values, one can index using the syntax "%{elt[idx]}". For example, +to get the first family name only, use "%{family[0]}". + +</para><para> + +If a simple tag ends with "=" and the element is found in the pattern, the +name of the element followed by "=" will be output before the list of values. +For example, "%{weight=}" may expand to the string "weight=80". Or to the empty +string if <parameter>pattern</parameter> does not have weight set. + +</para><para> + +If a simple tag starts with ":" and the element is found in the pattern, ":" +will be printed first. For example, combining this with the =, the format +"%{:weight=}" may expand to ":weight=80" or to the empty string +if <parameter>pattern</parameter> does not have weight set. + +</para><para> + +If a simple tag contains the string ":-", the rest of the the tag contents +will be used as a default string. The default string is output if the element +is not found in the pattern. For example, the format +"%{:weight=:-123}" may expand to ":weight=80" or to the string +":weight=123" if <parameter>pattern</parameter> does not have weight set. + +</para><para> + +A <firstterm>count</firstterm> tag +is one that starts with the character "#" followed by an element +name, and expands to the number of values for the element in the pattern. +For example, "%{#family}" expands to the number of family names +<parameter>pattern</parameter> has set, which may be zero. + +</para><para> + +A <firstterm>sub-expression</firstterm> tag +is one that expands a sub-expression. The tag contents +are the sub-expression to expand placed inside another set of curly braces. +Sub-expression tags are useful for aligning an entire sub-expression, or to +apply converters (explained later) to the entire sub-expression output. +For example, the format "%40{{%{family} %{style}}}" expands the sub-expression +to construct the family name followed by the style, then takes the entire +string and pads it on the left to be at least forty characters. + +</para><para> + +A <firstterm>filter-out</firstterm> tag +is one starting with the character "-" followed by a +comma-separated list of element names, followed by a sub-expression enclosed +in curly braces. The sub-expression will be expanded but with a pattern that +has the listed elements removed from it. +For example, the format "%{-size,pixelsize{sub-expr}}" will expand "sub-expr" +with <parameter>pattern</parameter> sans the size and pixelsize elements. + +</para><para> + +A <firstterm>filter-in</firstterm> tag +is one starting with the character "+" followed by a +comma-separated list of element names, followed by a sub-expression enclosed +in curly braces. The sub-expression will be expanded but with a pattern that +only has the listed elements from the surrounding pattern. +For example, the format "%{+family,familylang{sub-expr}}" will expand "sub-expr" +with a sub-pattern consisting only the family and family lang elements of +<parameter>pattern</parameter>. + +</para><para> + +A <firstterm>conditional</firstterm> tag +is one starting with the character "?" followed by a +comma-separated list of element conditions, followed by two sub-expression +enclosed in curly braces. An element condition can be an element name, +in which case it tests whether the element is defined in pattern, or +the character "!" followed by an element name, in which case the test +is negated. The conditional passes if all the element conditions pass. +The tag expands the first sub-expression if the conditional passes, and +expands the second sub-expression otherwise. +For example, the format "%{?size,dpi,!pixelsize{pass}{fail}}" will expand +to "pass" if <parameter>pattern</parameter> has size and dpi elements but +no pixelsize element, and to "fail" otherwise. + +</para><para> + +An <firstterm>enumerate</firstterm> tag +is one starting with the string "[]" followed by a +comma-separated list of element names, followed by a sub-expression enclosed +in curly braces. The list of values for the named elements are walked in +parallel and the sub-expression expanded each time with a pattern just having +a single value for those elements, starting from the first value and +continuing as long as any of those elements has a value. +For example, the format "%{[]family,familylang{%{family} (%{familylang})\n}}" +will expand the pattern "%{family} (%{familylang})\n" with a pattern +having only the first value of the family and familylang elements, then expands +it with the second values, then the third, etc. + +</para><para> + +As a special case, if an enumerate tag has only one element, and that element +has only one value in the pattern, and that value is of type FcLangSet, the +individual languages in the language set are enumerated. + +</para><para> + +A <firstterm>builtin</firstterm> tag +is one starting with the character "=" followed by a builtin +name. The following builtins are defined: + +<variablelist> + +<varlistentry><term> +unparse +</term><listitem><para> +Expands to the result of calling FcNameUnparse() on the pattern. +</para></listitem></varlistentry> + +<varlistentry><term> +fcmatch +</term><listitem><para> +Expands to the output of the default output format of the fc-match +command on the pattern, without the final newline. +</para></listitem></varlistentry> + +<varlistentry><term> +fclist +</term><listitem><para> +Expands to the output of the default output format of the fc-list +command on the pattern, without the final newline. +</para></listitem></varlistentry> + +<varlistentry><term> +fccat +</term><listitem><para> +Expands to the output of the default output format of the fc-cat +command on the pattern, without the final newline. +</para></listitem></varlistentry> + +<varlistentry><term> +pkgkit +</term><listitem><para> +Expands to the list of PackageKit font() tags for the pattern. +Currently this includes tags for each family name, and each language +from the pattern, enumerated and sanitized into a set of tags terminated +by newline. Package management systems can use these tags to tag their +packages accordingly. +</para></listitem></varlistentry> + +</variablelist> + +For example, the format "%{+family,style{%{=unparse}}}\n" will expand +to an unparsed name containing only the family and style element values +from <parameter>pattern</parameter>. + +</para><para> + +The contents of any tag can be followed by a set of zero or more +<firstterm>converter</firstterm>s. A converter is specified by the +character "|" followed by the converter name and arguments. The +following converters are defined: + +<variablelist> + +<varlistentry><term> +basename +</term><listitem><para> +Replaces text with the results of calling FcStrBasename() on it. +</para></listitem></varlistentry> + +<varlistentry><term> +dirname +</term><listitem><para> +Replaces text with the results of calling FcStrDirname() on it. +</para></listitem></varlistentry> + +<varlistentry><term> +downcase +</term><listitem><para> +Replaces text with the results of calling FcStrDowncase() on it. +</para></listitem></varlistentry> + +<varlistentry><term> +shescape +</term><listitem><para> +Escapes text for one level of shell expansion. +(Escapes single-quotes, also encloses text in single-quotes.) +</para></listitem></varlistentry> + +<varlistentry><term> +cescape +</term><listitem><para> +Escapes text such that it can be used as part of a C string literal. +(Escapes backslash and double-quotes.) +</para></listitem></varlistentry> + +<varlistentry><term> +xmlescape +</term><listitem><para> +Escapes text such that it can be used in XML and HTML. +(Escapes less-than, greater-than, and ampersand.) +</para></listitem></varlistentry> + +<varlistentry><term> +delete(<parameter>chars</parameter>) +</term><listitem><para> +Deletes all occurrences of each of the characters in <parameter>chars</parameter> +from the text. +FIXME: This converter is not UTF-8 aware yet. +</para></listitem></varlistentry> + +<varlistentry><term> +escape(<parameter>chars</parameter>) +</term><listitem><para> +Escapes all occurrences of each of the characters in <parameter>chars</parameter> +by prepending it by the first character in <parameter>chars</parameter>. +FIXME: This converter is not UTF-8 aware yet. +</para></listitem></varlistentry> + +<varlistentry><term> +translate(<parameter>from</parameter>,<parameter>to</parameter>) +</term><listitem><para> +Translates all occurrences of each of the characters in <parameter>from</parameter> +by replacing them with their corresponding character in <parameter>to</parameter>. +If <parameter>to</parameter> has fewer characters than +<parameter>from</parameter>, it will be extended by repeating its last +character. +FIXME: This converter is not UTF-8 aware yet. +</para></listitem></varlistentry> + +</variablelist> + +For example, the format "%{family|downcase|delete( )}\n" will expand +to the values of the family element in <parameter>pattern</parameter>, +lower-cased and with spaces removed. + +@@ diff --git a/fontconfig/doc/fcfreetype.fncs b/fontconfig/doc/fcfreetype.fncs index acd101dc5..e4cca46a3 100644 --- a/fontconfig/doc/fcfreetype.fncs +++ b/fontconfig/doc/fcfreetype.fncs @@ -1,106 +1,106 @@ -/*
- * fontconfig/doc/fcfreetype.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@SYNOPSIS@
-#include <fontconfig.h>
-#include <fcfreetype.h>
-@RET@ FT_UInt
-@FUNC@ FcFreeTypeCharIndex
-@TYPE1@ FT_Face% @ARG1@ face
-@TYPE2@ FcChar32% @ARG2@ ucs4
-@PURPOSE@ map Unicode to glyph id
-@DESC@
-Maps a Unicode char to a glyph index. This function uses information from
-several possible underlying encoding tables to work around broken fonts.
-As a result, this function isn't designed to be used in performance
-sensitive areas; results from this function are intended to be cached by
-higher level functions.
-@@
-
-@SYNOPSIS@
-#include <fontconfig.h>
-#include <fcfreetype.h>
-@RET@ FcCharSet *
-@FUNC@ FcFreeTypeCharSet
-@TYPE1@ FT_Face% @ARG1@ face
-@TYPE2@ FcBlanks * @ARG2@ blanks
-@PURPOSE@ compute Unicode coverage
-@DESC@
-Scans a FreeType face and returns the set of encoded Unicode chars. This scans
-several encoding tables to build as complete a list as possible.
-If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs
-not in 'blanks' are not placed in the returned FcCharSet.
-@@
-
-@SYNOPSIS@
-#include <fontconfig.h>
-#include <fcfreetype.h>
-@RET@ FcCharSet *
-@FUNC@ FcFreeTypeCharSetAndSpacing
-@TYPE1@ FT_Face% @ARG1@ face
-@TYPE2@ FcBlanks * @ARG2@ blanks
-@TYPE3@ int * @ARG3@ spacing
-@PURPOSE@ compute Unicode coverage and spacing type
-@DESC@
-Scans a FreeType face and returns the set of encoded Unicode chars.
-This scans
-several encoding tables to build as complete a list as possible.
-If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs
-not in 'blanks' are not placed in the returned FcCharSet.
-<parameter>spacing</parameter> receives the computed spacing type of the
-font, one of FC_MONO for a font where all glyphs have the same width,
-FC_DUAL, where the font has glyphs in precisely two widths, one twice as
-wide as the other, or FC_PROPORTIONAL where the font has glyphs of many
-widths.
-@@
-
-@SYNOPSIS@
-#include <fontconfig.h>
-#include <fcfreetype.h>
-@RET@ FcPattern *
-@FUNC@ FcFreeTypeQuery
-@TYPE1@ const FcChar8 * @ARG1@ file
-@TYPE2@ int% @ARG2@ id
-@TYPE3@ FcBlanks * @ARG3@ blanks
-@TYPE4@ int * @ARG4@ count
-@PURPOSE@ compute pattern from font file (and index)
-@DESC@
-Constructs a pattern representing the 'id'th font in 'file'. The number
-of fonts in 'file' is returned in 'count'.
-@@
-
-@SYNOPSIS@
-#include <fontconfig.h>
-#include <fcfreetype.h>
-@RET@ FcPattern *
-@FUNC@ FcFreeTypeQueryFace
-@TYPE1@ const FT_Face% @ARG1@ face
-@TYPE2@ const FcChar8 * @ARG2@ file
-@TYPE3@ int% @ARG3@ id
-@TYPE4@ FcBlanks * @ARG4@ blanks
-@PURPOSE@ compute pattern from FT_Face
-@DESC@
-Constructs a pattern representing 'face'. 'file' and 'id' are used solely as
-data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY).
-@@
+/* + * fontconfig/doc/fcfreetype.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@SYNOPSIS@ +#include <fontconfig.h> +#include <fcfreetype.h> +@RET@ FT_UInt +@FUNC@ FcFreeTypeCharIndex +@TYPE1@ FT_Face% @ARG1@ face +@TYPE2@ FcChar32% @ARG2@ ucs4 +@PURPOSE@ map Unicode to glyph id +@DESC@ +Maps a Unicode char to a glyph index. This function uses information from +several possible underlying encoding tables to work around broken fonts. +As a result, this function isn't designed to be used in performance +sensitive areas; results from this function are intended to be cached by +higher level functions. +@@ + +@SYNOPSIS@ +#include <fontconfig.h> +#include <fcfreetype.h> +@RET@ FcCharSet * +@FUNC@ FcFreeTypeCharSet +@TYPE1@ FT_Face% @ARG1@ face +@TYPE2@ FcBlanks * @ARG2@ blanks +@PURPOSE@ compute Unicode coverage +@DESC@ +Scans a FreeType face and returns the set of encoded Unicode chars. This scans +several encoding tables to build as complete a list as possible. +If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs +not in 'blanks' are not placed in the returned FcCharSet. +@@ + +@SYNOPSIS@ +#include <fontconfig.h> +#include <fcfreetype.h> +@RET@ FcCharSet * +@FUNC@ FcFreeTypeCharSetAndSpacing +@TYPE1@ FT_Face% @ARG1@ face +@TYPE2@ FcBlanks * @ARG2@ blanks +@TYPE3@ int * @ARG3@ spacing +@PURPOSE@ compute Unicode coverage and spacing type +@DESC@ +Scans a FreeType face and returns the set of encoded Unicode chars. +This scans +several encoding tables to build as complete a list as possible. +If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs +not in 'blanks' are not placed in the returned FcCharSet. +<parameter>spacing</parameter> receives the computed spacing type of the +font, one of FC_MONO for a font where all glyphs have the same width, +FC_DUAL, where the font has glyphs in precisely two widths, one twice as +wide as the other, or FC_PROPORTIONAL where the font has glyphs of many +widths. +@@ + +@SYNOPSIS@ +#include <fontconfig.h> +#include <fcfreetype.h> +@RET@ FcPattern * +@FUNC@ FcFreeTypeQuery +@TYPE1@ const FcChar8 * @ARG1@ file +@TYPE2@ int% @ARG2@ id +@TYPE3@ FcBlanks * @ARG3@ blanks +@TYPE4@ int * @ARG4@ count +@PURPOSE@ compute pattern from font file (and index) +@DESC@ +Constructs a pattern representing the 'id'th font in 'file'. The number +of fonts in 'file' is returned in 'count'. +@@ + +@SYNOPSIS@ +#include <fontconfig.h> +#include <fcfreetype.h> +@RET@ FcPattern * +@FUNC@ FcFreeTypeQueryFace +@TYPE1@ const FT_Face% @ARG1@ face +@TYPE2@ const FcChar8 * @ARG2@ file +@TYPE3@ int% @ARG3@ id +@TYPE4@ FcBlanks * @ARG4@ blanks +@PURPOSE@ compute pattern from FT_Face +@DESC@ +Constructs a pattern representing 'face'. 'file' and 'id' are used solely as +data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY). +@@ diff --git a/fontconfig/doc/fcinit.fncs b/fontconfig/doc/fcinit.fncs index f0bb397b4..014af0dea 100644 --- a/fontconfig/doc/fcinit.fncs +++ b/fontconfig/doc/fcinit.fncs @@ -1,92 +1,92 @@ -/*
- * fontconfig/doc/fcinit.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcConfig *
-@FUNC@ FcInitLoadConfig
-@TYPE1@ void
-@PURPOSE@ load configuration
-@DESC@
-Loads the default configuration file and returns the resulting configuration.
-Does not load any font information.
-@@
-
-@RET@ FcConfig *
-@FUNC@ FcInitLoadConfigAndFonts
-@TYPE1@ void
-@PURPOSE@ load configuration and font data
-@DESC@
-Loads the default configuration file and builds information about the
-available fonts. Returns the resulting configuration.
-@@
-
-@RET@ FcBool
-@FUNC@ FcInit
-@TYPE1@ void
-@PURPOSE@ initialize fontconfig library
-@DESC@
-Loads the default configuration file and the fonts referenced therein and
-sets the default configuration to that result. Returns whether this
-process succeeded or not. If the default configuration has already
-been loaded, this routine does nothing and returns FcTrue.
-@@
-
-@RET@ void
-@FUNC@ FcFini
-@TYPE1@ void
-@PURPOSE@ finalize fontconfig library
-@DESC@
-Frees all data structures allocated by previous calls to fontconfig
-functions. Fontconfig returns to an uninitialized state, requiring a
-new call to one of the FcInit functions before any other fontconfig
-function may be called.
-@@
-
-@RET@ int
-@FUNC@ FcGetVersion
-@TYPE1@ void
-@PURPOSE@ library version number
-@DESC@
-Returns the version number of the library.
-@@
-
-@RET@ FcBool
-@FUNC@ FcInitReinitialize
-@TYPE1@ void
-@PURPOSE@ re-initialize library
-@DESC@
-Forces the default configuration file to be reloaded and resets the default
-configuration. Returns FcFalse if the configuration cannot be reloaded (due
-to configuration file errors, allocation failures or other issues) and leaves the
-existing configuration unchanged. Otherwise returns FcTrue.
-@@
-
-@RET@ FcBool
-@FUNC@ FcInitBringUptoDate
-@TYPE1@ void
-@PURPOSE@ reload configuration files if needed
-@DESC@
-Checks the rescan interval in the default configuration, checking the
-configuration if the interval has passed and reloading the configuration if
-when any changes are detected. Returns FcFalse if the configuration cannot
-be reloaded (see FcInitReinitialize). Otherwise returns FcTrue.
-@@
+/* + * fontconfig/doc/fcinit.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcConfig * +@FUNC@ FcInitLoadConfig +@TYPE1@ void +@PURPOSE@ load configuration +@DESC@ +Loads the default configuration file and returns the resulting configuration. +Does not load any font information. +@@ + +@RET@ FcConfig * +@FUNC@ FcInitLoadConfigAndFonts +@TYPE1@ void +@PURPOSE@ load configuration and font data +@DESC@ +Loads the default configuration file and builds information about the +available fonts. Returns the resulting configuration. +@@ + +@RET@ FcBool +@FUNC@ FcInit +@TYPE1@ void +@PURPOSE@ initialize fontconfig library +@DESC@ +Loads the default configuration file and the fonts referenced therein and +sets the default configuration to that result. Returns whether this +process succeeded or not. If the default configuration has already +been loaded, this routine does nothing and returns FcTrue. +@@ + +@RET@ void +@FUNC@ FcFini +@TYPE1@ void +@PURPOSE@ finalize fontconfig library +@DESC@ +Frees all data structures allocated by previous calls to fontconfig +functions. Fontconfig returns to an uninitialized state, requiring a +new call to one of the FcInit functions before any other fontconfig +function may be called. +@@ + +@RET@ int +@FUNC@ FcGetVersion +@TYPE1@ void +@PURPOSE@ library version number +@DESC@ +Returns the version number of the library. +@@ + +@RET@ FcBool +@FUNC@ FcInitReinitialize +@TYPE1@ void +@PURPOSE@ re-initialize library +@DESC@ +Forces the default configuration file to be reloaded and resets the default +configuration. Returns FcFalse if the configuration cannot be reloaded (due +to configuration file errors, allocation failures or other issues) and leaves the +existing configuration unchanged. Otherwise returns FcTrue. +@@ + +@RET@ FcBool +@FUNC@ FcInitBringUptoDate +@TYPE1@ void +@PURPOSE@ reload configuration files if needed +@DESC@ +Checks the rescan interval in the default configuration, checking the +configuration if the interval has passed and reloading the configuration if +when any changes are detected. Returns FcFalse if the configuration cannot +be reloaded (see FcInitReinitialize). Otherwise returns FcTrue. +@@ diff --git a/fontconfig/doc/fclangset.fncs b/fontconfig/doc/fclangset.fncs index d61d9dfef..0a44b38c2 100644 --- a/fontconfig/doc/fclangset.fncs +++ b/fontconfig/doc/fclangset.fncs @@ -1,178 +1,178 @@ -/*
- * Copyright © 2007 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no representations
- * about the suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-@RET@ FcLangSet *
-@FUNC@ FcLangSetCreate
-@TYPE1@ void
-@PURPOSE@ create a langset object
-@DESC@
-<function>FcLangSetCreate</function> creates a new FcLangSet object.
-@@
-
-@RET@ void
-@FUNC@ FcLangSetDestroy
-@TYPE1@ FcLangSet * @ARG1@ ls
-@PURPOSE@ destroy a langset object
-@DESC@
-<function>FcLangSetDestroy</function> destroys a FcLangSet object, freeing
-all memory associated with it.
-@@
-
-@RET@ FcLangSet *
-@FUNC@ FcLangSetCopy
-@TYPE1@ const FcLangSet * @ARG1@ ls
-@PURPOSE@ copy a langset object
-@DESC@
-<function>FcLangSetCopy</function> creates a new FcLangSet object and
-populates it with the contents of <parameter>ls</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcLangSetAdd
-@TYPE1@ FcLangSet * @ARG1@ ls
-@TYPE2@ const FcChar8 * @ARG2@ lang
-@PURPOSE@ add a language to a langset
-@DESC@
-<parameter>lang</parameter> is added to <parameter>ls</parameter>.
-<parameter>lang</parameter> should be of the form Ll-Tt where Ll is a
-two or three letter language from ISO 639 and Tt is a territory from ISO
-3166.
-@@
-
-@RET@ FcBool
-@FUNC@ FcLangSetDel
-@TYPE1@ FcLangSet * @ARG1@ ls
-@TYPE2@ const FcChar8 * @ARG2@ lang
-@PURPOSE@ delete a language from a langset
-@DESC@
-<parameter>lang</parameter> is removed from <parameter>ls</parameter>.
-<parameter>lang</parameter> should be of the form Ll-Tt where Ll is a
-two or three letter language from ISO 639 and Tt is a territory from ISO
-3166.
-@@
-
-@RET@ FcLangSet *
-@FUNC@ FcLangSetUnion
-@TYPE1@ const FcLangSet * @ARG1@ ls_a
-@TYPE2@ const FcLangSet * @ARG2@ ls_b
-@PURPOSE@ Add langsets
-@DESC@
-Returns a set including only those languages found in either <parameter>ls_a</parameter> or <parameter>ls_b</parameter>.
-@@
-
-@RET@ FcLangSet *
-@FUNC@ FcLangSetSubtract
-@TYPE1@ const FcLangSet * @ARG1@ ls_a
-@TYPE2@ const FcLangSet * @ARG2@ ls_b
-@PURPOSE@ Subtract langsets
-@DESC@
-Returns a set including only those languages found in <parameter>ls_a</parameter> but not in <parameter>ls_b</parameter>.
-@@
-
-@RET@ FcLangResult
-@FUNC@ FcLangSetCompare
-@TYPE1@ const FcLangSet * @ARG1@ ls_a
-@TYPE2@ const FcLangSet * @ARG2@ ls_b
-@PURPOSE@ compare language sets
-@DESC@
-<function>FcLangSetCompare</function> compares language coverage for
-<parameter>ls_a</parameter> and <parameter>ls_b</parameter>. If they share
-any language and territory pair, this function returns FcLangEqual. If they
-share a language but differ in which territory that language is for, this
-function returns FcLangDifferentTerritory. If they share no languages in
-common, this function returns FcLangDifferentLang.
-@@
-
-@RET@ FcBool
-@FUNC@ FcLangSetContains
-@TYPE1@ const FcLangSet * @ARG1@ ls_a
-@TYPE2@ const FcLangSet * @ARG2@ ls_b
-@PURPOSE@ check langset subset relation
-@DESC@
-<function>FcLangSetContains</function> returns FcTrue if
-<parameter>ls_a</parameter> contains every language in
-<parameter>ls_b</parameter>. <parameter>ls_a</parameter> will 'contain' a
-language from <parameter>ls_b</parameter> if <parameter>ls_a</parameter>
-has exactly the language, or either the language or
-<parameter>ls_a</parameter> has no territory.
-@@
-
-@RET@ FcBool
-@FUNC@ FcLangSetEqual
-@TYPE1@ const FcLangSet * @ARG1@ ls_a
-@TYPE2@ const FcLangSet * @ARG2@ ls_b
-@PURPOSE@ test for matching langsets
-@DESC@
-Returns FcTrue if and only if <parameter>ls_a</parameter> supports precisely
-the same language and territory combinations as <parameter>ls_b</parameter>.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcLangSetHash
-@TYPE1@ const FcLangSet * @ARG1@ ls
-@PURPOSE@ return a hash value for a langset
-@DESC@
-This function returns a value which depends solely on the languages
-supported by <parameter>ls</parameter>. Any language which equals
-<parameter>ls</parameter> will have the same result from
-<function>FcLangSetHash</function>. However, two langsets with the same hash
-value may not be equal.
-@@
-
-@RET@ FcLangResult
-@FUNC@ FcLangSetHasLang
-@TYPE1@ const FcLangSet * @ARG1@ ls
-@TYPE2@ const FcChar8 * @ARG2@ lang
-@PURPOSE@ test langset for language support
-@DESC@
-<function>FcLangSetHasLang</function> checks whether
-<parameter>ls</parameter> supports <parameter>lang</parameter>. If
-<parameter>ls</parameter> has a matching language and territory pair,
-this function returns FcLangEqual. If <parameter>ls</parameter> has
-a matching language but differs in which territory that language is for, this
-function returns FcLangDifferentTerritory. If <parameter>ls</parameter>
-has no matching language, this function returns FcLangDifferentLang.
-@@
-
-@RET@ FcStrSet *
-@FUNC@ FcLangSetGetLangs
-@TYPE1@ const FcLangSet * @ARG1@ ls
-@PURPOSE@ get the list of languages in the langset
-@DESC@
-Returns a string set of all languages in <parameter>langset</parameter>.
-@@
-
-@RET@ FcStrSet *
-@FUNC@ FcGetLangs
-@TYPE1@ void
-@PURPOSE@ Get list of languages
-@DESC@
-Returns a string set of all known languages.
-@@
-
-@RET@ const FcCharSet *
-@FUNC@ FcLangGetCharSet
-@TYPE1@ const FcChar8 * @ARG1@ lang
-@PURPOSE@ Get character map for a language
-@DESC@
-Returns the FcCharMap for a language.
-@@
+/* + * Copyright © 2007 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +@RET@ FcLangSet * +@FUNC@ FcLangSetCreate +@TYPE1@ void +@PURPOSE@ create a langset object +@DESC@ +<function>FcLangSetCreate</function> creates a new FcLangSet object. +@@ + +@RET@ void +@FUNC@ FcLangSetDestroy +@TYPE1@ FcLangSet * @ARG1@ ls +@PURPOSE@ destroy a langset object +@DESC@ +<function>FcLangSetDestroy</function> destroys a FcLangSet object, freeing +all memory associated with it. +@@ + +@RET@ FcLangSet * +@FUNC@ FcLangSetCopy +@TYPE1@ const FcLangSet * @ARG1@ ls +@PURPOSE@ copy a langset object +@DESC@ +<function>FcLangSetCopy</function> creates a new FcLangSet object and +populates it with the contents of <parameter>ls</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcLangSetAdd +@TYPE1@ FcLangSet * @ARG1@ ls +@TYPE2@ const FcChar8 * @ARG2@ lang +@PURPOSE@ add a language to a langset +@DESC@ +<parameter>lang</parameter> is added to <parameter>ls</parameter>. +<parameter>lang</parameter> should be of the form Ll-Tt where Ll is a +two or three letter language from ISO 639 and Tt is a territory from ISO +3166. +@@ + +@RET@ FcBool +@FUNC@ FcLangSetDel +@TYPE1@ FcLangSet * @ARG1@ ls +@TYPE2@ const FcChar8 * @ARG2@ lang +@PURPOSE@ delete a language from a langset +@DESC@ +<parameter>lang</parameter> is removed from <parameter>ls</parameter>. +<parameter>lang</parameter> should be of the form Ll-Tt where Ll is a +two or three letter language from ISO 639 and Tt is a territory from ISO +3166. +@@ + +@RET@ FcLangSet * +@FUNC@ FcLangSetUnion +@TYPE1@ const FcLangSet * @ARG1@ ls_a +@TYPE2@ const FcLangSet * @ARG2@ ls_b +@PURPOSE@ Add langsets +@DESC@ +Returns a set including only those languages found in either <parameter>ls_a</parameter> or <parameter>ls_b</parameter>. +@@ + +@RET@ FcLangSet * +@FUNC@ FcLangSetSubtract +@TYPE1@ const FcLangSet * @ARG1@ ls_a +@TYPE2@ const FcLangSet * @ARG2@ ls_b +@PURPOSE@ Subtract langsets +@DESC@ +Returns a set including only those languages found in <parameter>ls_a</parameter> but not in <parameter>ls_b</parameter>. +@@ + +@RET@ FcLangResult +@FUNC@ FcLangSetCompare +@TYPE1@ const FcLangSet * @ARG1@ ls_a +@TYPE2@ const FcLangSet * @ARG2@ ls_b +@PURPOSE@ compare language sets +@DESC@ +<function>FcLangSetCompare</function> compares language coverage for +<parameter>ls_a</parameter> and <parameter>ls_b</parameter>. If they share +any language and territory pair, this function returns FcLangEqual. If they +share a language but differ in which territory that language is for, this +function returns FcLangDifferentTerritory. If they share no languages in +common, this function returns FcLangDifferentLang. +@@ + +@RET@ FcBool +@FUNC@ FcLangSetContains +@TYPE1@ const FcLangSet * @ARG1@ ls_a +@TYPE2@ const FcLangSet * @ARG2@ ls_b +@PURPOSE@ check langset subset relation +@DESC@ +<function>FcLangSetContains</function> returns FcTrue if +<parameter>ls_a</parameter> contains every language in +<parameter>ls_b</parameter>. <parameter>ls_a</parameter> will 'contain' a +language from <parameter>ls_b</parameter> if <parameter>ls_a</parameter> +has exactly the language, or either the language or +<parameter>ls_a</parameter> has no territory. +@@ + +@RET@ FcBool +@FUNC@ FcLangSetEqual +@TYPE1@ const FcLangSet * @ARG1@ ls_a +@TYPE2@ const FcLangSet * @ARG2@ ls_b +@PURPOSE@ test for matching langsets +@DESC@ +Returns FcTrue if and only if <parameter>ls_a</parameter> supports precisely +the same language and territory combinations as <parameter>ls_b</parameter>. +@@ + +@RET@ FcChar32 +@FUNC@ FcLangSetHash +@TYPE1@ const FcLangSet * @ARG1@ ls +@PURPOSE@ return a hash value for a langset +@DESC@ +This function returns a value which depends solely on the languages +supported by <parameter>ls</parameter>. Any language which equals +<parameter>ls</parameter> will have the same result from +<function>FcLangSetHash</function>. However, two langsets with the same hash +value may not be equal. +@@ + +@RET@ FcLangResult +@FUNC@ FcLangSetHasLang +@TYPE1@ const FcLangSet * @ARG1@ ls +@TYPE2@ const FcChar8 * @ARG2@ lang +@PURPOSE@ test langset for language support +@DESC@ +<function>FcLangSetHasLang</function> checks whether +<parameter>ls</parameter> supports <parameter>lang</parameter>. If +<parameter>ls</parameter> has a matching language and territory pair, +this function returns FcLangEqual. If <parameter>ls</parameter> has +a matching language but differs in which territory that language is for, this +function returns FcLangDifferentTerritory. If <parameter>ls</parameter> +has no matching language, this function returns FcLangDifferentLang. +@@ + +@RET@ FcStrSet * +@FUNC@ FcLangSetGetLangs +@TYPE1@ const FcLangSet * @ARG1@ ls +@PURPOSE@ get the list of languages in the langset +@DESC@ +Returns a string set of all languages in <parameter>langset</parameter>. +@@ + +@RET@ FcStrSet * +@FUNC@ FcGetLangs +@TYPE1@ void +@PURPOSE@ Get list of languages +@DESC@ +Returns a string set of all known languages. +@@ + +@RET@ const FcCharSet * +@FUNC@ FcLangGetCharSet +@TYPE1@ const FcChar8 * @ARG1@ lang +@PURPOSE@ Get character map for a language +@DESC@ +Returns the FcCharMap for a language. +@@ diff --git a/fontconfig/doc/fcmatrix.fncs b/fontconfig/doc/fcmatrix.fncs index 7e752ea4e..a53ade946 100644 --- a/fontconfig/doc/fcmatrix.fncs +++ b/fontconfig/doc/fcmatrix.fncs @@ -1,125 +1,125 @@ -/*
- * fontconfig/doc/fcmatrix.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@RET@ void
-@FUNC@ FcMatrixInit
-@PURPOSE@ initialize an FcMatrix structure
-@TYPE1@ FcMatrix *
-@ARG1@ matrix
-@DESC@
-<function>FcMatrixInit</function> initializes <parameter>matrix</parameter>
-to the identity matrix.
-@@
-
-@FUNC@ FcMatrixCopy
-@PURPOSE@ Copy a matrix
-@TYPE1@ const FcMatrix *
-@ARG1@ matrix
-@DESC@
-<function>FcMatrixCopy</function> allocates a new FcMatrix
-and copies <parameter>mat</parameter> into it.
-@@
-
-@FUNC@ FcMatrixEqual
-@PURPOSE@ Compare two matrices
-@TYPE1@ const FcMatrix *
-@ARG1@ matrix1
-@TYPE2@ const FcMatrix *
-@ARG2@ matrix2
-@DESC@
-<function>FcMatrixEqual</function> compares <parameter>matrix1</parameter>
-and <parameter>matrix2</parameter> returning FcTrue when they are equal and
-FcFalse when they are not.
-@@
-
-@FUNC@ FcMatrixMultiply
-@PURPOSE@ Multiply matrices
-@TYPE1@ FcMatrix *
-@ARG1@ result
-@TYPE2@ const FcMatrix *
-@ARG2@ matrix1
-@TYPE3@ const FcMatrix *
-@ARG3@ matrix2
-@DESC@
-<function>FcMatrixMultiply</function> multiplies
-<parameter>matrix1</parameter> and <parameter>matrix2</parameter> storing
-the result in <parameter>result</parameter>.
-@@
-
-@FUNC@ FcMatrixRotate
-@PURPOSE@ Rotate a matrix
-@TYPE1@ FcMatrix *
-@ARG1@ matrix
-@TYPE2@ double%
-@ARG2@ cos
-@TYPE3@ double%
-@ARG3@ sin
-@DESC@
-<function>FcMatrixRotate</function> rotates <parameter>matrix</parameter>
-by the angle who's sine is <parameter>sin</parameter> and cosine is
-<parameter>cos</parameter>. This is done by multiplying by the
-matrix:
-<programlisting>
- cos -sin
- sin cos
-</programlisting>
-@@
-
-@FUNC@ FcMatrixScale
-@PURPOSE@ Scale a matrix
-@TYPE1@ FcMatrix *
-@ARG1@ matrix
-@TYPE2@ double%
-@ARG2@ sx
-@TYPE3@ double%
-@ARG3@ dy
-@DESC@
-<function>FcMatrixScale</function> multiplies <parameter>matrix</parameter>
-x values by <parameter>sx</parameter> and y values by
-<parameter>dy</parameter>. This is done by multiplying by
-the matrix:
-<programlisting>
- sx 0
- 0 dy
-</programlisting>
-@@
-
-@FUNC@ FcMatrixShear
-@PURPOSE@ Shear a matrix
-@TYPE1@ FcMatrix *
-@ARG1@ matrix
-@TYPE2@ double%
-@ARG2@ sh
-@TYPE3@ double%
-@ARG3@ sv
-@DESC@
-<function>FcMatrixShare</function> shears <parameter>matrix</parameter>
-horizontally by <parameter>sh</parameter> and vertically by
-<parameter>sv</parameter>. This is done by multiplying by
-the matrix:
-<programlisting>
- 1 sh
- sv 1
-</programlisting>
-@@
+/* + * fontconfig/doc/fcmatrix.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@RET@ void +@FUNC@ FcMatrixInit +@PURPOSE@ initialize an FcMatrix structure +@TYPE1@ FcMatrix * +@ARG1@ matrix +@DESC@ +<function>FcMatrixInit</function> initializes <parameter>matrix</parameter> +to the identity matrix. +@@ + +@FUNC@ FcMatrixCopy +@PURPOSE@ Copy a matrix +@TYPE1@ const FcMatrix * +@ARG1@ matrix +@DESC@ +<function>FcMatrixCopy</function> allocates a new FcMatrix +and copies <parameter>mat</parameter> into it. +@@ + +@FUNC@ FcMatrixEqual +@PURPOSE@ Compare two matrices +@TYPE1@ const FcMatrix * +@ARG1@ matrix1 +@TYPE2@ const FcMatrix * +@ARG2@ matrix2 +@DESC@ +<function>FcMatrixEqual</function> compares <parameter>matrix1</parameter> +and <parameter>matrix2</parameter> returning FcTrue when they are equal and +FcFalse when they are not. +@@ + +@FUNC@ FcMatrixMultiply +@PURPOSE@ Multiply matrices +@TYPE1@ FcMatrix * +@ARG1@ result +@TYPE2@ const FcMatrix * +@ARG2@ matrix1 +@TYPE3@ const FcMatrix * +@ARG3@ matrix2 +@DESC@ +<function>FcMatrixMultiply</function> multiplies +<parameter>matrix1</parameter> and <parameter>matrix2</parameter> storing +the result in <parameter>result</parameter>. +@@ + +@FUNC@ FcMatrixRotate +@PURPOSE@ Rotate a matrix +@TYPE1@ FcMatrix * +@ARG1@ matrix +@TYPE2@ double% +@ARG2@ cos +@TYPE3@ double% +@ARG3@ sin +@DESC@ +<function>FcMatrixRotate</function> rotates <parameter>matrix</parameter> +by the angle who's sine is <parameter>sin</parameter> and cosine is +<parameter>cos</parameter>. This is done by multiplying by the +matrix: +<programlisting> + cos -sin + sin cos +</programlisting> +@@ + +@FUNC@ FcMatrixScale +@PURPOSE@ Scale a matrix +@TYPE1@ FcMatrix * +@ARG1@ matrix +@TYPE2@ double% +@ARG2@ sx +@TYPE3@ double% +@ARG3@ dy +@DESC@ +<function>FcMatrixScale</function> multiplies <parameter>matrix</parameter> +x values by <parameter>sx</parameter> and y values by +<parameter>dy</parameter>. This is done by multiplying by +the matrix: +<programlisting> + sx 0 + 0 dy +</programlisting> +@@ + +@FUNC@ FcMatrixShear +@PURPOSE@ Shear a matrix +@TYPE1@ FcMatrix * +@ARG1@ matrix +@TYPE2@ double% +@ARG2@ sh +@TYPE3@ double% +@ARG3@ sv +@DESC@ +<function>FcMatrixShare</function> shears <parameter>matrix</parameter> +horizontally by <parameter>sh</parameter> and vertically by +<parameter>sv</parameter>. This is done by multiplying by +the matrix: +<programlisting> + 1 sh + sv 1 +</programlisting> +@@ diff --git a/fontconfig/doc/fcobjectset.fncs b/fontconfig/doc/fcobjectset.fncs index b741cfa08..57e1750d1 100644 --- a/fontconfig/doc/fcobjectset.fncs +++ b/fontconfig/doc/fcobjectset.fncs @@ -1,73 +1,73 @@ -/*
- * fontconfig/doc/fcobjectset.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcObjectSet *
-@FUNC@ FcObjectSetCreate
-@TYPE1@ void
-@PURPOSE@ Create an object set
-@DESC@
-Creates an empty set.
-@@
-
-@RET@ FcBool
-@FUNC@ FcObjectSetAdd
-@TYPE1@ FcObjectSet * @ARG1@ os
-@TYPE2@ const char * @ARG2@ object
-@PURPOSE@ Add to an object set
-@DESC@
-Adds a property name to the set. Returns FcFalse if the property name cannot be
-inserted into the set (due to allocation failure). Otherwise returns FcTrue.
-@@
-
-@RET@ void
-@FUNC@ FcObjectSetDestroy
-@TYPE1@ FcObjectSet * @ARG1@ os
-@PURPOSE@ Destroy an object set
-@DESC@
-Destroys an object set.
-@@
-
-@RET@ FcObjectSet *
-@FUNC@ FcObjectSetBuild
-@TYPE1@ const char * @ARG1@ first
-@TYPE2@ ...
-
-@PROTOTYPE+@
-@RET+@ FcObjectSet *
-@FUNC+@ FcObjectSetVaBuild
-@TYPE1+@ const char * @ARG1+@ first
-@TYPE2+@ va_list% @ARG2+@ va
-
-@PROTOTYPE++@
-@RET++@ void
-@FUNC++@ FcObjectSetVapBuild
-@TYPE1++@ FcObjectSet * @ARG1++@ result
-@TYPE2++@ const char * @ARG2++@ first
-@TYPE3++@ va_list% @ARG3++@ va
-
-@PURPOSE@ Build object set from args
-@DESC@
-These build an object set from a null-terminated list of property names.
-FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns
-the result in the <parameter>result</parameter> variable directly.
-@@
+/* + * fontconfig/doc/fcobjectset.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcObjectSet * +@FUNC@ FcObjectSetCreate +@TYPE1@ void +@PURPOSE@ Create an object set +@DESC@ +Creates an empty set. +@@ + +@RET@ FcBool +@FUNC@ FcObjectSetAdd +@TYPE1@ FcObjectSet * @ARG1@ os +@TYPE2@ const char * @ARG2@ object +@PURPOSE@ Add to an object set +@DESC@ +Adds a property name to the set. Returns FcFalse if the property name cannot be +inserted into the set (due to allocation failure). Otherwise returns FcTrue. +@@ + +@RET@ void +@FUNC@ FcObjectSetDestroy +@TYPE1@ FcObjectSet * @ARG1@ os +@PURPOSE@ Destroy an object set +@DESC@ +Destroys an object set. +@@ + +@RET@ FcObjectSet * +@FUNC@ FcObjectSetBuild +@TYPE1@ const char * @ARG1@ first +@TYPE2@ ... + +@PROTOTYPE+@ +@RET+@ FcObjectSet * +@FUNC+@ FcObjectSetVaBuild +@TYPE1+@ const char * @ARG1+@ first +@TYPE2+@ va_list% @ARG2+@ va + +@PROTOTYPE++@ +@RET++@ void +@FUNC++@ FcObjectSetVapBuild +@TYPE1++@ FcObjectSet * @ARG1++@ result +@TYPE2++@ const char * @ARG2++@ first +@TYPE3++@ va_list% @ARG3++@ va + +@PURPOSE@ Build object set from args +@DESC@ +These build an object set from a null-terminated list of property names. +FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns +the result in the <parameter>result</parameter> variable directly. +@@ diff --git a/fontconfig/doc/fcobjecttype.fncs b/fontconfig/doc/fcobjecttype.fncs index ebc1bf745..45f3a31a0 100644 --- a/fontconfig/doc/fcobjecttype.fncs +++ b/fontconfig/doc/fcobjecttype.fncs @@ -1,50 +1,50 @@ -/*
- * fontconfig/doc/fcobjecttype.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcBool
-@FUNC@ FcNameRegisterObjectTypes
-@TYPE1@ const FcObjectType * @ARG1@ types
-@TYPE2@ int% @ARG2@ ntype
-@PURPOSE@ Register object types
-@DESC@
-Register <parameter>ntype</parameter> new object types. Returns FcFalse if
-some of the names cannot be
-registered (due to allocation failure). Otherwise returns FcTrue.
-@@
-
-@RET@ FcBool
-@FUNC@ FcNameUnregisterObjectTypes
-@TYPE1@ const FcObjectType * @ARG1@ types
-@TYPE2@ int% @ARG2@ ntype
-@PURPOSE@ Unregister object types
-@DESC@
-Unregister <parameter>ntype</parameter> object types. Returns FcTrue.
-@@
-
-@RET@ const FcObjectType *
-@FUNC@ FcNameGetObjectType
-@TYPE1@ const char * @ARG1@ object
-@PURPOSE@ Lookup an object type
-@DESC@
-Return the object type for the pattern element named <parameter>object</parameter>.
-@@
+/* + * fontconfig/doc/fcobjecttype.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcBool +@FUNC@ FcNameRegisterObjectTypes +@TYPE1@ const FcObjectType * @ARG1@ types +@TYPE2@ int% @ARG2@ ntype +@PURPOSE@ Register object types +@DESC@ +Register <parameter>ntype</parameter> new object types. Returns FcFalse if +some of the names cannot be +registered (due to allocation failure). Otherwise returns FcTrue. +@@ + +@RET@ FcBool +@FUNC@ FcNameUnregisterObjectTypes +@TYPE1@ const FcObjectType * @ARG1@ types +@TYPE2@ int% @ARG2@ ntype +@PURPOSE@ Unregister object types +@DESC@ +Unregister <parameter>ntype</parameter> object types. Returns FcTrue. +@@ + +@RET@ const FcObjectType * +@FUNC@ FcNameGetObjectType +@TYPE1@ const char * @ARG1@ object +@PURPOSE@ Lookup an object type +@DESC@ +Return the object type for the pattern element named <parameter>object</parameter>. +@@ diff --git a/fontconfig/doc/fcpattern.fncs b/fontconfig/doc/fcpattern.fncs index 17e873872..1df1c4f61 100644 --- a/fontconfig/doc/fcpattern.fncs +++ b/fontconfig/doc/fcpattern.fncs @@ -1,397 +1,397 @@ -/*
- * fontconfig/doc/fcpattern.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ FcPattern *
-@FUNC@ FcPatternCreate
-@TYPE1@ void
-@PURPOSE@ Create a pattern
-@DESC@
-Creates a pattern with no properties; used to build patterns from scratch.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcPatternDuplicate
-@TYPE1@ const FcPattern * @ARG1@ p
-@PURPOSE@ Copy a pattern
-@DESC@
-Copy a pattern, returning a new pattern that matches
-<parameter>p</parameter>. Each pattern may be modified without affecting the
-other.
-@@
-
-@RET@ void
-@FUNC@ FcPatternReference
-@TYPE1@ FcPattern * @ARG1@ p
-@PURPOSE@ Increment pattern reference count
-@DESC@
-Add another reference to <parameter>p</parameter>. Patterns are freed only
-when the reference count reaches zero.
-@@
-
-@RET@ void
-@FUNC@ FcPatternDestroy
-@TYPE1@ FcPattern * @ARG1@ p
-@PURPOSE@ Destroy a pattern
-@DESC@
-Decrement the pattern reference count. If all references are gone, destroys
-the pattern, in the process destroying all related values.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternEqual
-@TYPE1@ const FcPattern * @ARG1@ pa
-@TYPE2@ const FcPattern * @ARG2@ pb
-@PURPOSE@ Compare patterns
-@DESC@
-Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> are exactly alike.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternEqualSubset
-@TYPE1@ const FcPattern * @ARG1@ pa
-@TYPE2@ const FcPattern * @ARG2@ pb
-@TYPE3@ const FcObjectSet * @ARG3@ os
-@PURPOSE@ Compare portions of patterns
-@DESC@
-Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> have exactly the same values for all of the
-objects in <parameter>os</parameter>.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcPatternFilter
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const FcObjectSet * @ARG1@ os
-@PURPOSE@ Filter the objects of pattern
-@DESC@
-Returns a new pattern that only has those objects from
-<parameter>p</parameter> that are in <parameter>os</parameter>.
-If <parameter>os</parameter> is NULL, a duplicate of
-<parameter>p</parameter> is returned.
-@@
-
-@RET@ FcChar32
-@FUNC@ FcPatternHash
-@TYPE1@ const FcPattern * @ARG1@ p
-@PURPOSE@ Compute a pattern hash value
-@DESC@
-Returns a 32-bit number which is the same for any two patterns which are
-equal.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternAdd
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ FcValue% @ARG3@ value
-@TYPE4@ FcBool% @ARG4@ append
-@PURPOSE@ Add a value to a pattern
-@DESC@
-Adds a single value to the list of values associated with the property named
-`object<parameter>. If `append</parameter> is FcTrue, the value is added at the end of any
-existing list, otherwise it is inserted at the beginning. `value' is saved
-(with FcValueSave) when inserted into the pattern so that the library
-retains no reference to any application-supplied data structure.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternAddWeak
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ FcValue% @ARG3@ value
-@TYPE4@ FcBool% @ARG4@ append
-@PURPOSE@ Add a value to a pattern with weak binding
-@DESC@
-FcPatternAddWeak is essentially the same as FcPatternAdd except that any
-values added to the list have binding <parameter>weak</parameter> instead of <parameter>strong</parameter>.
-@@
-
-@TITLE@ FcPatternAdd-Type
-@RET@ FcBool
-@FUNC@ FcPatternAddInteger
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ int% @ARG3@ i
-
-@PROTOTYPE+@
-@RET+@ FcBool
-@FUNC+@ FcPatternAddDouble
-@TYPE1+@ FcPattern * @ARG1+@ p
-@TYPE2+@ const char * @ARG2+@ object
-@TYPE3+@ double% @ARG3+@ d
-
-@PROTOTYPE++@
-@RET++@ FcBool
-@FUNC++@ FcPatternAddString
-@TYPE1++@ FcPattern * @ARG1++@ p
-@TYPE2++@ const char * @ARG2++@ object
-@TYPE3++@ const FcChar8 * @ARG3++@ s
-
-@PROTOTYPE+++@
-@RET+++@ FcBool
-@FUNC+++@ FcPatternAddMatrix
-@TYPE1+++@ FcPattern * @ARG1+++@ p
-@TYPE2+++@ const char * @ARG2+++@ object
-@TYPE3+++@ const FcMatrix * @ARG3+++@ m
-
-@PROTOTYPE++++@
-@RET++++@ FcBool
-@FUNC++++@ FcPatternAddCharSet
-@TYPE1++++@ FcPattern * @ARG1++++@ p
-@TYPE2++++@ const char * @ARG2++++@ object
-@TYPE3++++@ const FcCharSet * @ARG3++++@ c
-
-@PROTOTYPE+++++@
-@RET+++++@ FcBool
-@FUNC+++++@ FcPatternAddBool
-@TYPE1+++++@ FcPattern * @ARG1+++++@ p
-@TYPE2+++++@ const char * @ARG2+++++@ object
-@TYPE3+++++@ FcBool% @ARG3+++++@ b
-
-@PROTOTYPE++++++@
-@RET++++++@ FcBool
-@FUNC++++++@ FcPatternAddFTFace
-@TYPE1++++++@ FcPattern * @ARG1++++++@ p
-@TYPE2++++++@ const char * @ARG2++++++@ object
-@TYPE3++++++@ const FT_Face @ARG3++++++@ f
-
-@PROTOTYPE+++++++@
-@RET+++++++@ FcBool
-@FUNC+++++++@ FcPatternAddLangSet
-@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p
-@TYPE2+++++++@ const char * @ARG2+++++++@ object
-@TYPE3+++++++@ const FcLangSet * @ARG3+++++++@ l
-
-@PURPOSE@ Add a typed value to a pattern
-@DESC@
-These are all convenience functions that insert objects of the specified
-type into the pattern. Use these in preference to FcPatternAdd as they
-will provide compile-time typechecking. These all append values to
-any existing list of values.
-@@
-
-@RET@ FcResult
-@FUNC@ FcPatternGet
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ int% @ARG3@ id
-@TYPE4@ FcValue * @ARG4@ v
-@PURPOSE@ Return a value from a pattern
-@DESC@
-Returns in <parameter>v</parameter> the <parameter>id</parameter>'th value
-associated with the property <parameter>object</parameter>.
-The value returned is not a copy, but rather refers to the data stored
-within the pattern directly. Applications must not free this value.
-@@
-
-@TITLE@ FcPatternGet-Type
-@PROTOTYPE@
-@RET@ FcResult
-@FUNC@ FcPatternGetInteger
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ int% @ARG3@ n
-@TYPE4@ int * @ARG4@ i
-
-@PROTOTYPE+@
-@RET+@ FcResult
-@FUNC+@ FcPatternGetDouble
-@TYPE1+@ FcPattern * @ARG1+@ p
-@TYPE2+@ const char * @ARG2+@ object
-@TYPE3+@ int% @ARG3+@ n
-@TYPE4+@ double * @ARG4+@ d
-
-@PROTOTYPE++@
-@RET++@ FcResult
-@FUNC++@ FcPatternGetString
-@TYPE1++@ FcPattern * @ARG1++@ p
-@TYPE2++@ const char * @ARG2++@ object
-@TYPE3++@ int% @ARG3++@ n
-@TYPE4++@ FcChar8 ** @ARG4++@ s
-
-@PROTOTYPE+++@
-@RET+++@ FcResult
-@FUNC+++@ FcPatternGetMatrix
-@TYPE1+++@ FcPattern * @ARG1+++@ p
-@TYPE2+++@ const char * @ARG2+++@ object
-@TYPE3+++@ int% @ARG3+++@ n
-@TYPE4+++@ FcMatrix ** @ARG4+++@ s
-
-@PROTOTYPE++++@
-@RET++++@ FcResult
-@FUNC++++@ FcPatternGetCharSet
-@TYPE1++++@ FcPattern * @ARG1++++@ p
-@TYPE2++++@ const char * @ARG2++++@ object
-@TYPE3++++@ int% @ARG3++++@ n
-@TYPE4++++@ FcCharSet ** @ARG4++++@ c
-
-@PROTOTYPE+++++@
-@RET+++++@ FcResult
-@FUNC+++++@ FcPatternGetBool
-@TYPE1+++++@ FcPattern * @ARG1+++++@ p
-@TYPE2+++++@ const char * @ARG2+++++@ object
-@TYPE3+++++@ int% @ARG3+++++@ n
-@TYPE4+++++@ FcBool * @ARG4+++++@ b
-
-@PROTOTYPE++++++@
-@RET++++++@ FcResult
-@FUNC++++++@ FcPatternGetFTFace
-@TYPE1++++++@ FcPattern * @ARG1++++++@ p
-@TYPE2++++++@ const char * @ARG2++++++@ object
-@TYPE3+++++@ int% @ARG3+++++@ n
-@TYPE3++++++@ FT_Face * @ARG3++++++@ f
-
-@PROTOTYPE+++++++@
-@RET+++++++@ FcResult
-@FUNC+++++++@ FcPatternGetLangSet
-@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p
-@TYPE2+++++++@ const char * @ARG2+++++++@ object
-@TYPE3+++++@ int% @ARG3+++++@ n
-@TYPE3+++++++@ FcLangSet ** @ARG3+++++++@ l
-
-@PURPOSE@ Return a typed value from a pattern
-@DESC@
-These are convenience functions that call FcPatternGet and verify that the
-returned data is of the expected type. They return FcResultTypeMismatch if
-this is not the case. Note that these (like FcPatternGet) do not make a
-copy of any data structure referenced by the return value. Use these
-in preference to FcPatternGet to provide compile-time typechecking.
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcPatternBuild
-@TYPE1@ FcPattern * @ARG1@ pattern
-@TYPE2@ ...
-
-@PROTOTYPE+@
-@RET+@ FcPattern *
-@FUNC+@ FcPatternVaBuild
-@TYPE1+@ FcPattern * @ARG1+@ pattern
-@TYPE2+@ va_list% @ARG2+@ va
-
-@PROTOTYPE++@
-@RET++@ void
-@FUNC++@ FcPatternVapBuild
-@TYPE1++@ FcPattern * @ARG1++@ result
-@TYPE2++@ FcPattern * @ARG2++@ pattern
-@TYPE3++@ va_list% @ARG3++@ va
-
-@PURPOSE@ Create patterns from arguments
-@DESC@
-Builds a pattern using a list of objects, types and values. Each
-value to be entered in the pattern is specified with three arguments:
-</para>
-<orderedlist>
-<listitem><para>
-Object name, a string describing the property to be added.
-</para></listitem><listitem><para>
-Object type, one of the FcType enumerated values
-</para></listitem><listitem><para>
-Value, not an FcValue, but the raw type as passed to any of the
-FcPatternAdd<type> functions. Must match the type of the second
-argument.
-</para></listitem>
-</orderedlist>
-<para>
-The argument list is terminated by a null object name, no object type nor
-value need be passed for this. The values are added to `pattern', if
-`pattern' is null, a new pattern is created. In either case, the pattern is
-returned. Example
-</para>
-<programlisting>
-pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0);
-</programlisting>
-<para>
-FcPatternVaBuild is used when the arguments are already in the form of a
-varargs value. FcPatternVapBuild is a macro version of FcPatternVaBuild
-which returns its result directly in the <parameter>result</parameter>
-variable.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternDel
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@PURPOSE@ Delete a property from a pattern
-@DESC@
-Deletes all values associated with the property `object', returning
-whether the property existed or not.
-@@
-
-@RET@ FcBool
-@FUNC@ FcPatternRemove
-@TYPE1@ FcPattern * @ARG1@ p
-@TYPE2@ const char * @ARG2@ object
-@TYPE3@ int% @ARG3@ id
-@PURPOSE@ Remove one object of the specified type from the pattern
-@DESC@
-Removes the value associated with the property `object' at position `id', returning
-whether the property existed and had a value at that position or not.
-@@
-
-@RET@ void
-@FUNC@ FcPatternPrint
-@TYPE1@ const FcPattern * @ARG1@ p
-@PURPOSE@ Print a pattern for debugging
-@DESC@
-Prints an easily readable version of the pattern to stdout. There is
-no provision for reparsing data in this format, it's just for diagnostics
-and debugging.
-@@
-
-@RET@ void
-@FUNC@ FcDefaultSubstitute
-@TYPE1@ FcPattern * @ARG1@ pattern
-@PURPOSE@ Perform default substitutions in a pattern
-@DESC@
-Supplies default values for underspecified font patterns:
-<itemizedlist>
-<listitem><para>
-Patterns without a specified style or weight are set to Medium
-</para></listitem>
-<listitem><para>
-Patterns without a specified style or slant are set to Roman
-</para></listitem>
-<listitem><para>
-Patterns without a specified pixel size are given one computed from any
-specified point size (default 12), dpi (default 75) and scale (default 1).
-</para></listitem>
-</itemizedlist>
-@@
-
-@RET@ FcPattern *
-@FUNC@ FcNameParse
-@TYPE1@ const FcChar8 * @ARG1@ name
-@PURPOSE@ Parse a pattern string
-@DESC@
-Converts <parameter>name</parameter> from the standard text format described above into a pattern.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcNameUnparse
-@TYPE1@ FcPattern * @ARG1@ pat
-@PURPOSE@ Convert a pattern back into a string that can be parsed
-@DESC@
-Converts the given pattern into the standard text format described above.
-The return value is not static, but instead refers to newly allocated memory
-which should be freed by the caller using free().
-@@
+/* + * fontconfig/doc/fcpattern.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcPattern * +@FUNC@ FcPatternCreate +@TYPE1@ void +@PURPOSE@ Create a pattern +@DESC@ +Creates a pattern with no properties; used to build patterns from scratch. +@@ + +@RET@ FcPattern * +@FUNC@ FcPatternDuplicate +@TYPE1@ const FcPattern * @ARG1@ p +@PURPOSE@ Copy a pattern +@DESC@ +Copy a pattern, returning a new pattern that matches +<parameter>p</parameter>. Each pattern may be modified without affecting the +other. +@@ + +@RET@ void +@FUNC@ FcPatternReference +@TYPE1@ FcPattern * @ARG1@ p +@PURPOSE@ Increment pattern reference count +@DESC@ +Add another reference to <parameter>p</parameter>. Patterns are freed only +when the reference count reaches zero. +@@ + +@RET@ void +@FUNC@ FcPatternDestroy +@TYPE1@ FcPattern * @ARG1@ p +@PURPOSE@ Destroy a pattern +@DESC@ +Decrement the pattern reference count. If all references are gone, destroys +the pattern, in the process destroying all related values. +@@ + +@RET@ FcBool +@FUNC@ FcPatternEqual +@TYPE1@ const FcPattern * @ARG1@ pa +@TYPE2@ const FcPattern * @ARG2@ pb +@PURPOSE@ Compare patterns +@DESC@ +Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> are exactly alike. +@@ + +@RET@ FcBool +@FUNC@ FcPatternEqualSubset +@TYPE1@ const FcPattern * @ARG1@ pa +@TYPE2@ const FcPattern * @ARG2@ pb +@TYPE3@ const FcObjectSet * @ARG3@ os +@PURPOSE@ Compare portions of patterns +@DESC@ +Returns whether <parameter>pa</parameter> and <parameter>pb</parameter> have exactly the same values for all of the +objects in <parameter>os</parameter>. +@@ + +@RET@ FcPattern * +@FUNC@ FcPatternFilter +@TYPE1@ FcPattern * @ARG1@ p +@TYPE2@ const FcObjectSet * @ARG1@ os +@PURPOSE@ Filter the objects of pattern +@DESC@ +Returns a new pattern that only has those objects from +<parameter>p</parameter> that are in <parameter>os</parameter>. +If <parameter>os</parameter> is NULL, a duplicate of +<parameter>p</parameter> is returned. +@@ + +@RET@ FcChar32 +@FUNC@ FcPatternHash +@TYPE1@ const FcPattern * @ARG1@ p +@PURPOSE@ Compute a pattern hash value +@DESC@ +Returns a 32-bit number which is the same for any two patterns which are +equal. +@@ + +@RET@ FcBool +@FUNC@ FcPatternAdd +@TYPE1@ FcPattern * @ARG1@ p +@TYPE2@ const char * @ARG2@ object +@TYPE3@ FcValue% @ARG3@ value +@TYPE4@ FcBool% @ARG4@ append +@PURPOSE@ Add a value to a pattern +@DESC@ +Adds a single value to the list of values associated with the property named +`object<parameter>. If `append</parameter> is FcTrue, the value is added at the end of any +existing list, otherwise it is inserted at the beginning. `value' is saved +(with FcValueSave) when inserted into the pattern so that the library +retains no reference to any application-supplied data structure. +@@ + +@RET@ FcBool +@FUNC@ FcPatternAddWeak +@TYPE1@ FcPattern * @ARG1@ p +@TYPE2@ const char * @ARG2@ object +@TYPE3@ FcValue% @ARG3@ value +@TYPE4@ FcBool% @ARG4@ append +@PURPOSE@ Add a value to a pattern with weak binding +@DESC@ +FcPatternAddWeak is essentially the same as FcPatternAdd except that any +values added to the list have binding <parameter>weak</parameter> instead of <parameter>strong</parameter>. +@@ + +@TITLE@ FcPatternAdd-Type +@RET@ FcBool +@FUNC@ FcPatternAddInteger +@TYPE1@ FcPattern * @ARG1@ p +@TYPE2@ const char * @ARG2@ object +@TYPE3@ int% @ARG3@ i + +@PROTOTYPE+@ +@RET+@ FcBool +@FUNC+@ FcPatternAddDouble +@TYPE1+@ FcPattern * @ARG1+@ p +@TYPE2+@ const char * @ARG2+@ object +@TYPE3+@ double% @ARG3+@ d + +@PROTOTYPE++@ +@RET++@ FcBool +@FUNC++@ FcPatternAddString +@TYPE1++@ FcPattern * @ARG1++@ p +@TYPE2++@ const char * @ARG2++@ object +@TYPE3++@ const FcChar8 * @ARG3++@ s + +@PROTOTYPE+++@ +@RET+++@ FcBool +@FUNC+++@ FcPatternAddMatrix +@TYPE1+++@ FcPattern * @ARG1+++@ p +@TYPE2+++@ const char * @ARG2+++@ object +@TYPE3+++@ const FcMatrix * @ARG3+++@ m + +@PROTOTYPE++++@ +@RET++++@ FcBool +@FUNC++++@ FcPatternAddCharSet +@TYPE1++++@ FcPattern * @ARG1++++@ p +@TYPE2++++@ const char * @ARG2++++@ object +@TYPE3++++@ const FcCharSet * @ARG3++++@ c + +@PROTOTYPE+++++@ +@RET+++++@ FcBool +@FUNC+++++@ FcPatternAddBool +@TYPE1+++++@ FcPattern * @ARG1+++++@ p +@TYPE2+++++@ const char * @ARG2+++++@ object +@TYPE3+++++@ FcBool% @ARG3+++++@ b + +@PROTOTYPE++++++@ +@RET++++++@ FcBool +@FUNC++++++@ FcPatternAddFTFace +@TYPE1++++++@ FcPattern * @ARG1++++++@ p +@TYPE2++++++@ const char * @ARG2++++++@ object +@TYPE3++++++@ const FT_Face @ARG3++++++@ f + +@PROTOTYPE+++++++@ +@RET+++++++@ FcBool +@FUNC+++++++@ FcPatternAddLangSet +@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p +@TYPE2+++++++@ const char * @ARG2+++++++@ object +@TYPE3+++++++@ const FcLangSet * @ARG3+++++++@ l + +@PURPOSE@ Add a typed value to a pattern +@DESC@ +These are all convenience functions that insert objects of the specified +type into the pattern. Use these in preference to FcPatternAdd as they +will provide compile-time typechecking. These all append values to +any existing list of values. +@@ + +@RET@ FcResult +@FUNC@ FcPatternGet +@TYPE1@ FcPattern * @ARG1@ p +@TYPE2@ const char * @ARG2@ object +@TYPE3@ int% @ARG3@ id +@TYPE4@ FcValue * @ARG4@ v +@PURPOSE@ Return a value from a pattern +@DESC@ +Returns in <parameter>v</parameter> the <parameter>id</parameter>'th value +associated with the property <parameter>object</parameter>. +The value returned is not a copy, but rather refers to the data stored +within the pattern directly. Applications must not free this value. +@@ + +@TITLE@ FcPatternGet-Type +@PROTOTYPE@ +@RET@ FcResult +@FUNC@ FcPatternGetInteger +@TYPE1@ FcPattern * @ARG1@ p +@TYPE2@ const char * @ARG2@ object +@TYPE3@ int% @ARG3@ n +@TYPE4@ int * @ARG4@ i + +@PROTOTYPE+@ +@RET+@ FcResult +@FUNC+@ FcPatternGetDouble +@TYPE1+@ FcPattern * @ARG1+@ p +@TYPE2+@ const char * @ARG2+@ object +@TYPE3+@ int% @ARG3+@ n +@TYPE4+@ double * @ARG4+@ d + +@PROTOTYPE++@ +@RET++@ FcResult +@FUNC++@ FcPatternGetString +@TYPE1++@ FcPattern * @ARG1++@ p +@TYPE2++@ const char * @ARG2++@ object +@TYPE3++@ int% @ARG3++@ n +@TYPE4++@ FcChar8 ** @ARG4++@ s + +@PROTOTYPE+++@ +@RET+++@ FcResult +@FUNC+++@ FcPatternGetMatrix +@TYPE1+++@ FcPattern * @ARG1+++@ p +@TYPE2+++@ const char * @ARG2+++@ object +@TYPE3+++@ int% @ARG3+++@ n +@TYPE4+++@ FcMatrix ** @ARG4+++@ s + +@PROTOTYPE++++@ +@RET++++@ FcResult +@FUNC++++@ FcPatternGetCharSet +@TYPE1++++@ FcPattern * @ARG1++++@ p +@TYPE2++++@ const char * @ARG2++++@ object +@TYPE3++++@ int% @ARG3++++@ n +@TYPE4++++@ FcCharSet ** @ARG4++++@ c + +@PROTOTYPE+++++@ +@RET+++++@ FcResult +@FUNC+++++@ FcPatternGetBool +@TYPE1+++++@ FcPattern * @ARG1+++++@ p +@TYPE2+++++@ const char * @ARG2+++++@ object +@TYPE3+++++@ int% @ARG3+++++@ n +@TYPE4+++++@ FcBool * @ARG4+++++@ b + +@PROTOTYPE++++++@ +@RET++++++@ FcResult +@FUNC++++++@ FcPatternGetFTFace +@TYPE1++++++@ FcPattern * @ARG1++++++@ p +@TYPE2++++++@ const char * @ARG2++++++@ object +@TYPE3+++++@ int% @ARG3+++++@ n +@TYPE3++++++@ FT_Face * @ARG3++++++@ f + +@PROTOTYPE+++++++@ +@RET+++++++@ FcResult +@FUNC+++++++@ FcPatternGetLangSet +@TYPE1+++++++@ FcPattern * @ARG1+++++++@ p +@TYPE2+++++++@ const char * @ARG2+++++++@ object +@TYPE3+++++@ int% @ARG3+++++@ n +@TYPE3+++++++@ FcLangSet ** @ARG3+++++++@ l + +@PURPOSE@ Return a typed value from a pattern +@DESC@ +These are convenience functions that call FcPatternGet and verify that the +returned data is of the expected type. They return FcResultTypeMismatch if +this is not the case. Note that these (like FcPatternGet) do not make a +copy of any data structure referenced by the return value. Use these +in preference to FcPatternGet to provide compile-time typechecking. +@@ + +@RET@ FcPattern * +@FUNC@ FcPatternBuild +@TYPE1@ FcPattern * @ARG1@ pattern +@TYPE2@ ... + +@PROTOTYPE+@ +@RET+@ FcPattern * +@FUNC+@ FcPatternVaBuild +@TYPE1+@ FcPattern * @ARG1+@ pattern +@TYPE2+@ va_list% @ARG2+@ va + +@PROTOTYPE++@ +@RET++@ void +@FUNC++@ FcPatternVapBuild +@TYPE1++@ FcPattern * @ARG1++@ result +@TYPE2++@ FcPattern * @ARG2++@ pattern +@TYPE3++@ va_list% @ARG3++@ va + +@PURPOSE@ Create patterns from arguments +@DESC@ +Builds a pattern using a list of objects, types and values. Each +value to be entered in the pattern is specified with three arguments: +</para> +<orderedlist> +<listitem><para> +Object name, a string describing the property to be added. +</para></listitem><listitem><para> +Object type, one of the FcType enumerated values +</para></listitem><listitem><para> +Value, not an FcValue, but the raw type as passed to any of the +FcPatternAdd<type> functions. Must match the type of the second +argument. +</para></listitem> +</orderedlist> +<para> +The argument list is terminated by a null object name, no object type nor +value need be passed for this. The values are added to `pattern', if +`pattern' is null, a new pattern is created. In either case, the pattern is +returned. Example +</para> +<programlisting> +pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0); +</programlisting> +<para> +FcPatternVaBuild is used when the arguments are already in the form of a +varargs value. FcPatternVapBuild is a macro version of FcPatternVaBuild +which returns its result directly in the <parameter>result</parameter> +variable. +@@ + +@RET@ FcBool +@FUNC@ FcPatternDel +@TYPE1@ FcPattern * @ARG1@ p +@TYPE2@ const char * @ARG2@ object +@PURPOSE@ Delete a property from a pattern +@DESC@ +Deletes all values associated with the property `object', returning +whether the property existed or not. +@@ + +@RET@ FcBool +@FUNC@ FcPatternRemove +@TYPE1@ FcPattern * @ARG1@ p +@TYPE2@ const char * @ARG2@ object +@TYPE3@ int% @ARG3@ id +@PURPOSE@ Remove one object of the specified type from the pattern +@DESC@ +Removes the value associated with the property `object' at position `id', returning +whether the property existed and had a value at that position or not. +@@ + +@RET@ void +@FUNC@ FcPatternPrint +@TYPE1@ const FcPattern * @ARG1@ p +@PURPOSE@ Print a pattern for debugging +@DESC@ +Prints an easily readable version of the pattern to stdout. There is +no provision for reparsing data in this format, it's just for diagnostics +and debugging. +@@ + +@RET@ void +@FUNC@ FcDefaultSubstitute +@TYPE1@ FcPattern * @ARG1@ pattern +@PURPOSE@ Perform default substitutions in a pattern +@DESC@ +Supplies default values for underspecified font patterns: +<itemizedlist> +<listitem><para> +Patterns without a specified style or weight are set to Medium +</para></listitem> +<listitem><para> +Patterns without a specified style or slant are set to Roman +</para></listitem> +<listitem><para> +Patterns without a specified pixel size are given one computed from any +specified point size (default 12), dpi (default 75) and scale (default 1). +</para></listitem> +</itemizedlist> +@@ + +@RET@ FcPattern * +@FUNC@ FcNameParse +@TYPE1@ const FcChar8 * @ARG1@ name +@PURPOSE@ Parse a pattern string +@DESC@ +Converts <parameter>name</parameter> from the standard text format described above into a pattern. +@@ + +@RET@ FcChar8 * +@FUNC@ FcNameUnparse +@TYPE1@ FcPattern * @ARG1@ pat +@PURPOSE@ Convert a pattern back into a string that can be parsed +@DESC@ +Converts the given pattern into the standard text format described above. +The return value is not static, but instead refers to newly allocated memory +which should be freed by the caller using free(). +@@ diff --git a/fontconfig/doc/fcstring.fncs b/fontconfig/doc/fcstring.fncs index f30549308..0412bbd1a 100644 --- a/fontconfig/doc/fcstring.fncs +++ b/fontconfig/doc/fcstring.fncs @@ -1,244 +1,244 @@ -/*
- * fontconfig/doc/fcstring.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
- <variablelist>
-
-@RET@ int
-@FUNC@ FcUtf8ToUcs4
-@TYPE1@ FcChar8 * @ARG1@ src
-@TYPE2@ FcChar32 * @ARG2@ dst
-@TYPE3@ int% @ARG3@ len
-@PURPOSE@ convert UTF-8 to UCS4
-@DESC@
-Converts the next Unicode char from <parameter>src</parameter> into
-<parameter>dst</parameter> and returns the number of bytes containing the
-char. <parameter>src</parameter> must be at least
-<parameter>len</parameter> bytes long.
-@@
-
-@RET@ int
-@FUNC@ FcUcs4ToUtf8
-@TYPE1@ FcChar32% @ARG1@ src
-@TYPE2@ FcChar8% @ARG2@ dst[FC_UTF8_MAX_LEN]
-@PURPOSE@ convert UCS4 to UTF-8
-@DESC@
-Converts the Unicode char from <parameter>src</parameter> into
-<parameter>dst</parameter> and returns the number of bytes needed to encode
-the char.
-@@
-
-@RET@ FcBool
-@FUNC@ FcUtf8Len
-@TYPE1@ FcChar8 * @ARG1@ src
-@TYPE2@ int% @ARG2@ len
-@TYPE3@ int * @ARG3@ nchar
-@TYPE4@ int * @ARG4@ wchar
-@PURPOSE@ count UTF-8 encoded chars
-@DESC@
-Counts the number of Unicode chars in <parameter>len</parameter> bytes of
-<parameter>src</parameter>. Places that count in
-<parameter>nchar</parameter>. <parameter>wchar</parameter> contains 1, 2 or
-4 depending on the number of bytes needed to hold the largest Unicode char
-counted. The return value indicates whether <parameter>src</parameter> is a
-well-formed UTF8 string.
-@@
-
-@RET@ int
-@FUNC@ FcUtf16ToUcs4
-@TYPE1@ FcChar8 * @ARG1@ src
-@TYPE2@ FcEndian% @ARG2@ endian
-@TYPE3@ FcChar32 * @ARG3@ dst
-@TYPE4@ int% @ARG4@ len
-@PURPOSE@ convert UTF-16 to UCS4
-@DESC@
-Converts the next Unicode char from <parameter>src</parameter> into
-<parameter>dst</parameter> and returns the number of bytes containing the
-char. <parameter>src</parameter> must be at least <parameter>len</parameter>
-bytes long. Bytes of <parameter>src</parameter> are combined into 16-bit
-units according to <parameter>endian</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcUtf16Len
-@TYPE1@ FcChar8 * @ARG1@ src
-@TYPE2@ FcEndian% @ARG2@ endian
-@TYPE3@ int% @ARG3@ len
-@TYPE4@ int * @ARG4@ nchar
-@TYPE5@ int * @ARG5@ wchar
-@PURPOSE@ count UTF-16 encoded chars
-@DESC@
-Counts the number of Unicode chars in <parameter>len</parameter> bytes of
-<parameter>src</parameter>. Bytes of <parameter>src</parameter> are
-combined into 16-bit units according to <parameter>endian</parameter>.
-Places that count in <parameter>nchar</parameter>.
-<parameter>wchar</parameter> contains 1, 2 or 4 depending on the number of
-bytes needed to hold the largest Unicode char counted. The return value
-indicates whether <parameter>string</parameter> is a well-formed UTF16
-string.
-@@
-
-@RET@ FcBool
-@FUNC@ FcIsLower
-@TYPE1@ FcChar8 @ARG1@ c
-@PURPOSE@ check for lower case ASCII character
-@DESC@
-This macro checks whether <parameter>c</parameter> is an lower case ASCII
-letter.
-@@
-
-@RET@ FcBool
-@FUNC@ FcIsUpper
-@TYPE1@ FcChar8 @ARG1@ c
-@PURPOSE@ check for upper case ASCII character
-@DESC@
-This macro checks whether <parameter>c</parameter> is a upper case ASCII
-letter.
-@@
-
-@RET@ FcChar8
-@FUNC@ FcToLower
-@TYPE1@ FcChar8 @ARG1@ c
-@PURPOSE@ convert upper case ASCII to lower case
-@DESC@
-This macro converts upper case ASCII <parameter>c</parameter> to the
-equivalent lower case letter.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrCopy
-@TYPE1@ const FcChar8 * @ARG1@ s
-@PURPOSE@ duplicate a string
-@DESC@
-Allocates memory, copies <parameter>s</parameter> and returns the resulting
-buffer. Yes, this is <function>strdup</function>, but that function isn't
-available on every platform.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrDowncase
-@TYPE1@ const FcChar8 * @ARG1@ s
-@PURPOSE@ create a lower case translation of a string
-@DESC@
-Allocates memory, copies <parameter>s</parameter>, converting upper case
-letters to lower case and returns the allocated buffer.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrCopyFilename
-@TYPE1@ const FcChar8 * @ARG1@ s
-@PURPOSE@ create a complete path from a filename
-@DESC@
-<function>FcStrCopyFilename</function> constructs an absolute pathname from
-<parameter>s</parameter>. It converts any leading '~' characters in
-to the value of the HOME environment variable, and any relative paths are
-converted to absolute paths using the current working directory. Sequences
-of '/' characters are converted to a single '/', and names containing the
-current directory '.' or parent directory '..' are correctly reconstructed.
-Returns NULL if '~' is the leading character and HOME is unset or disabled
-(see <function>FcConfigEnableHome</function>).
-@@
-
-@RET@ int
-@FUNC@ FcStrCmp
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ compare UTF-8 strings
-@DESC@
-Returns the usual <0, 0, >0 result of comparing
-<parameter>s1</parameter> and <parameter>s2</parameter>.
-@@
-
-@RET@ int
-@FUNC@ FcStrCmpIgnoreCase
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ compare UTF-8 strings ignoring case
-@DESC@
-Returns the usual <0, 0, >0 result of comparing
-<parameter>s1</parameter> and <parameter>s2</parameter>. This test is
-case-insensitive for all proper UTF-8 encoded strings.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrStr
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ locate UTF-8 substring
-@DESC@
-Returns the location of <parameter>s2</parameter> in
-<parameter>s1</parameter>. Returns NULL if <parameter>s2</parameter>
-is not present in <parameter>s1</parameter>. This test will operate properly
-with UTF8 encoded strings.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrStrIgnoreCase
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ locate UTF-8 substring ignoring ASCII case
-@DESC@
-Returns the location of <parameter>s2</parameter> in
-<parameter>s1</parameter>, ignoring case. Returns NULL if
-<parameter>s2</parameter> is not present in <parameter>s1</parameter>.
-This test is case-insensitive for all proper UTF-8 encoded strings.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrPlus
-@TYPE1@ const FcChar8 * @ARG1@ s1
-@TYPE2@ const FcChar8 * @ARG2@ s2
-@PURPOSE@ concatenate two strings
-@DESC@
-This function allocates new storage and places the concatenation of
-<parameter>s1</parameter> and <parameter>s2</parameter> there, returning the
-new string.
-@@
-
-@RET@ void
-@FUNC@ FcStrFree
-@TYPE1@ FcChar8 * @ARG1@ s
-@PURPOSE@ free a string
-@DESC@
-This is just a wrapper around free(3) which helps track memory usage of
-strings within the fontconfig library.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrDirname
-@TYPE1@ const FcChar8 * @ARG1@ file
-@PURPOSE@ directory part of filename
-@DESC@
-Returns the directory containing <parameter>file</parameter>. This
-is returned in newly allocated storage which should be freed when no longer
-needed.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrBasename
-@TYPE1@ const FcChar8 * @ARG1@ file
-@PURPOSE@ last component of filename
-@DESC@
-Returns the filename of <parameter>file</parameter> stripped of any leading
-directory names. This is returned in newly allocated storage which should
-be freed when no longer needed.
-@@
+/* + * fontconfig/doc/fcstring.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + <variablelist> + +@RET@ int +@FUNC@ FcUtf8ToUcs4 +@TYPE1@ FcChar8 * @ARG1@ src +@TYPE2@ FcChar32 * @ARG2@ dst +@TYPE3@ int% @ARG3@ len +@PURPOSE@ convert UTF-8 to UCS4 +@DESC@ +Converts the next Unicode char from <parameter>src</parameter> into +<parameter>dst</parameter> and returns the number of bytes containing the +char. <parameter>src</parameter> must be at least +<parameter>len</parameter> bytes long. +@@ + +@RET@ int +@FUNC@ FcUcs4ToUtf8 +@TYPE1@ FcChar32% @ARG1@ src +@TYPE2@ FcChar8% @ARG2@ dst[FC_UTF8_MAX_LEN] +@PURPOSE@ convert UCS4 to UTF-8 +@DESC@ +Converts the Unicode char from <parameter>src</parameter> into +<parameter>dst</parameter> and returns the number of bytes needed to encode +the char. +@@ + +@RET@ FcBool +@FUNC@ FcUtf8Len +@TYPE1@ FcChar8 * @ARG1@ src +@TYPE2@ int% @ARG2@ len +@TYPE3@ int * @ARG3@ nchar +@TYPE4@ int * @ARG4@ wchar +@PURPOSE@ count UTF-8 encoded chars +@DESC@ +Counts the number of Unicode chars in <parameter>len</parameter> bytes of +<parameter>src</parameter>. Places that count in +<parameter>nchar</parameter>. <parameter>wchar</parameter> contains 1, 2 or +4 depending on the number of bytes needed to hold the largest Unicode char +counted. The return value indicates whether <parameter>src</parameter> is a +well-formed UTF8 string. +@@ + +@RET@ int +@FUNC@ FcUtf16ToUcs4 +@TYPE1@ FcChar8 * @ARG1@ src +@TYPE2@ FcEndian% @ARG2@ endian +@TYPE3@ FcChar32 * @ARG3@ dst +@TYPE4@ int% @ARG4@ len +@PURPOSE@ convert UTF-16 to UCS4 +@DESC@ +Converts the next Unicode char from <parameter>src</parameter> into +<parameter>dst</parameter> and returns the number of bytes containing the +char. <parameter>src</parameter> must be at least <parameter>len</parameter> +bytes long. Bytes of <parameter>src</parameter> are combined into 16-bit +units according to <parameter>endian</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcUtf16Len +@TYPE1@ FcChar8 * @ARG1@ src +@TYPE2@ FcEndian% @ARG2@ endian +@TYPE3@ int% @ARG3@ len +@TYPE4@ int * @ARG4@ nchar +@TYPE5@ int * @ARG5@ wchar +@PURPOSE@ count UTF-16 encoded chars +@DESC@ +Counts the number of Unicode chars in <parameter>len</parameter> bytes of +<parameter>src</parameter>. Bytes of <parameter>src</parameter> are +combined into 16-bit units according to <parameter>endian</parameter>. +Places that count in <parameter>nchar</parameter>. +<parameter>wchar</parameter> contains 1, 2 or 4 depending on the number of +bytes needed to hold the largest Unicode char counted. The return value +indicates whether <parameter>string</parameter> is a well-formed UTF16 +string. +@@ + +@RET@ FcBool +@FUNC@ FcIsLower +@TYPE1@ FcChar8 @ARG1@ c +@PURPOSE@ check for lower case ASCII character +@DESC@ +This macro checks whether <parameter>c</parameter> is an lower case ASCII +letter. +@@ + +@RET@ FcBool +@FUNC@ FcIsUpper +@TYPE1@ FcChar8 @ARG1@ c +@PURPOSE@ check for upper case ASCII character +@DESC@ +This macro checks whether <parameter>c</parameter> is a upper case ASCII +letter. +@@ + +@RET@ FcChar8 +@FUNC@ FcToLower +@TYPE1@ FcChar8 @ARG1@ c +@PURPOSE@ convert upper case ASCII to lower case +@DESC@ +This macro converts upper case ASCII <parameter>c</parameter> to the +equivalent lower case letter. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrCopy +@TYPE1@ const FcChar8 * @ARG1@ s +@PURPOSE@ duplicate a string +@DESC@ +Allocates memory, copies <parameter>s</parameter> and returns the resulting +buffer. Yes, this is <function>strdup</function>, but that function isn't +available on every platform. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrDowncase +@TYPE1@ const FcChar8 * @ARG1@ s +@PURPOSE@ create a lower case translation of a string +@DESC@ +Allocates memory, copies <parameter>s</parameter>, converting upper case +letters to lower case and returns the allocated buffer. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrCopyFilename +@TYPE1@ const FcChar8 * @ARG1@ s +@PURPOSE@ create a complete path from a filename +@DESC@ +<function>FcStrCopyFilename</function> constructs an absolute pathname from +<parameter>s</parameter>. It converts any leading '~' characters in +to the value of the HOME environment variable, and any relative paths are +converted to absolute paths using the current working directory. Sequences +of '/' characters are converted to a single '/', and names containing the +current directory '.' or parent directory '..' are correctly reconstructed. +Returns NULL if '~' is the leading character and HOME is unset or disabled +(see <function>FcConfigEnableHome</function>). +@@ + +@RET@ int +@FUNC@ FcStrCmp +@TYPE1@ const FcChar8 * @ARG1@ s1 +@TYPE2@ const FcChar8 * @ARG2@ s2 +@PURPOSE@ compare UTF-8 strings +@DESC@ +Returns the usual <0, 0, >0 result of comparing +<parameter>s1</parameter> and <parameter>s2</parameter>. +@@ + +@RET@ int +@FUNC@ FcStrCmpIgnoreCase +@TYPE1@ const FcChar8 * @ARG1@ s1 +@TYPE2@ const FcChar8 * @ARG2@ s2 +@PURPOSE@ compare UTF-8 strings ignoring case +@DESC@ +Returns the usual <0, 0, >0 result of comparing +<parameter>s1</parameter> and <parameter>s2</parameter>. This test is +case-insensitive for all proper UTF-8 encoded strings. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrStr +@TYPE1@ const FcChar8 * @ARG1@ s1 +@TYPE2@ const FcChar8 * @ARG2@ s2 +@PURPOSE@ locate UTF-8 substring +@DESC@ +Returns the location of <parameter>s2</parameter> in +<parameter>s1</parameter>. Returns NULL if <parameter>s2</parameter> +is not present in <parameter>s1</parameter>. This test will operate properly +with UTF8 encoded strings. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrStrIgnoreCase +@TYPE1@ const FcChar8 * @ARG1@ s1 +@TYPE2@ const FcChar8 * @ARG2@ s2 +@PURPOSE@ locate UTF-8 substring ignoring ASCII case +@DESC@ +Returns the location of <parameter>s2</parameter> in +<parameter>s1</parameter>, ignoring case. Returns NULL if +<parameter>s2</parameter> is not present in <parameter>s1</parameter>. +This test is case-insensitive for all proper UTF-8 encoded strings. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrPlus +@TYPE1@ const FcChar8 * @ARG1@ s1 +@TYPE2@ const FcChar8 * @ARG2@ s2 +@PURPOSE@ concatenate two strings +@DESC@ +This function allocates new storage and places the concatenation of +<parameter>s1</parameter> and <parameter>s2</parameter> there, returning the +new string. +@@ + +@RET@ void +@FUNC@ FcStrFree +@TYPE1@ FcChar8 * @ARG1@ s +@PURPOSE@ free a string +@DESC@ +This is just a wrapper around free(3) which helps track memory usage of +strings within the fontconfig library. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrDirname +@TYPE1@ const FcChar8 * @ARG1@ file +@PURPOSE@ directory part of filename +@DESC@ +Returns the directory containing <parameter>file</parameter>. This +is returned in newly allocated storage which should be freed when no longer +needed. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrBasename +@TYPE1@ const FcChar8 * @ARG1@ file +@PURPOSE@ last component of filename +@DESC@ +Returns the filename of <parameter>file</parameter> stripped of any leading +directory names. This is returned in newly allocated storage which should +be freed when no longer needed. +@@ diff --git a/fontconfig/doc/fcstrset.fncs b/fontconfig/doc/fcstrset.fncs index 65ec08908..737347b00 100644 --- a/fontconfig/doc/fcstrset.fncs +++ b/fontconfig/doc/fcstrset.fncs @@ -1,115 +1,115 @@ -/*
- * fontconfig/doc/fcstrset.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
- <variablelist>
-
-@RET@ FcStrSet *
-@FUNC@ FcStrSetCreate
-@TYPE1@ void
-@PURPOSE@ create a string set
-@DESC@
-Create an empty set.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetMember
-@TYPE1@ FcStrSet * @ARG1@ set
-@TYPE2@ const FcChar8 * @ARG2@ s
-@PURPOSE@ check set for membership
-@DESC@
-Returns whether <parameter>s</parameter> is a member of
-<parameter>set</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetEqual
-@TYPE1@ FcStrSet * @ARG1@ set_a
-@TYPE2@ FcStrSet * @ARG2@ set_b
-@PURPOSE@ check sets for equality
-@DESC@
-Returns whether <parameter>set_a</parameter> contains precisely the same
-strings as <parameter>set_b</parameter>. Ordering of strings within the two
-sets is not considered.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetAdd
-@TYPE1@ FcStrSet * @ARG1@ set
-@TYPE2@ const FcChar8 * @ARG2@ s
-@PURPOSE@ add to a string set
-@DESC@
-Adds a copy of <parameter>s</parameter> to <parameter>set</parameter>.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetAddFilename
-@TYPE1@ FcStrSet * @ARG1@ set
-@TYPE2@ const FcChar8 * @ARG2@ s
-@PURPOSE@ add a filename to a string set
-@DESC@
-Adds a copy <parameter>s</parameter> to <parameter>set</parameter>, The copy
-is created with FcStrCopyFilename so that leading '~' values are replaced
-with the value of the HOME environment variable.
-@@
-
-@RET@ FcBool
-@FUNC@ FcStrSetDel
-@TYPE1@ FcStrSet * @ARG1@ set
-@TYPE2@ const FcChar8 * @ARG2@ s
-@PURPOSE@ delete from a string set
-@DESC@
-Removes <parameter>s</parameter> from <parameter>set</parameter>, returning
-FcTrue if <parameter>s</parameter> was a member else FcFalse.
-@@
-
-@RET@ void
-@FUNC@ FcStrSetDestroy
-@TYPE1@ FcStrSet * @ARG1@ set
-@PURPOSE@ destroy a string set
-@DESC@
-Destroys <parameter>set</parameter>.
-@@
-
-@RET@ FcStrList *
-@FUNC@ FcStrListCreate
-@TYPE1@ FcStrSet * @ARG1@ set
-@PURPOSE@ create a string iterator
-@DESC@
-Creates an iterator to list the strings in <parameter>set</parameter>.
-@@
-
-@RET@ FcChar8 *
-@FUNC@ FcStrListNext
-@TYPE1@ FcStrList * @ARG1@ list
-@PURPOSE@ get next string in iteration
-@DESC@
-Returns the next string in <parameter>set</parameter>.
-@@
-
-@RET@ void
-@FUNC@ FcStrListDone
-@TYPE1@ FcStrList * @ARG1@ list
-@PURPOSE@ destroy a string iterator
-@DESC@
-Destroys the enumerator <parameter>list</parameter>.
-@@
+/* + * fontconfig/doc/fcstrset.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + <variablelist> + +@RET@ FcStrSet * +@FUNC@ FcStrSetCreate +@TYPE1@ void +@PURPOSE@ create a string set +@DESC@ +Create an empty set. +@@ + +@RET@ FcBool +@FUNC@ FcStrSetMember +@TYPE1@ FcStrSet * @ARG1@ set +@TYPE2@ const FcChar8 * @ARG2@ s +@PURPOSE@ check set for membership +@DESC@ +Returns whether <parameter>s</parameter> is a member of +<parameter>set</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcStrSetEqual +@TYPE1@ FcStrSet * @ARG1@ set_a +@TYPE2@ FcStrSet * @ARG2@ set_b +@PURPOSE@ check sets for equality +@DESC@ +Returns whether <parameter>set_a</parameter> contains precisely the same +strings as <parameter>set_b</parameter>. Ordering of strings within the two +sets is not considered. +@@ + +@RET@ FcBool +@FUNC@ FcStrSetAdd +@TYPE1@ FcStrSet * @ARG1@ set +@TYPE2@ const FcChar8 * @ARG2@ s +@PURPOSE@ add to a string set +@DESC@ +Adds a copy of <parameter>s</parameter> to <parameter>set</parameter>. +@@ + +@RET@ FcBool +@FUNC@ FcStrSetAddFilename +@TYPE1@ FcStrSet * @ARG1@ set +@TYPE2@ const FcChar8 * @ARG2@ s +@PURPOSE@ add a filename to a string set +@DESC@ +Adds a copy <parameter>s</parameter> to <parameter>set</parameter>, The copy +is created with FcStrCopyFilename so that leading '~' values are replaced +with the value of the HOME environment variable. +@@ + +@RET@ FcBool +@FUNC@ FcStrSetDel +@TYPE1@ FcStrSet * @ARG1@ set +@TYPE2@ const FcChar8 * @ARG2@ s +@PURPOSE@ delete from a string set +@DESC@ +Removes <parameter>s</parameter> from <parameter>set</parameter>, returning +FcTrue if <parameter>s</parameter> was a member else FcFalse. +@@ + +@RET@ void +@FUNC@ FcStrSetDestroy +@TYPE1@ FcStrSet * @ARG1@ set +@PURPOSE@ destroy a string set +@DESC@ +Destroys <parameter>set</parameter>. +@@ + +@RET@ FcStrList * +@FUNC@ FcStrListCreate +@TYPE1@ FcStrSet * @ARG1@ set +@PURPOSE@ create a string iterator +@DESC@ +Creates an iterator to list the strings in <parameter>set</parameter>. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrListNext +@TYPE1@ FcStrList * @ARG1@ list +@PURPOSE@ get next string in iteration +@DESC@ +Returns the next string in <parameter>set</parameter>. +@@ + +@RET@ void +@FUNC@ FcStrListDone +@TYPE1@ FcStrList * @ARG1@ list +@PURPOSE@ destroy a string iterator +@DESC@ +Destroys the enumerator <parameter>list</parameter>. +@@ diff --git a/fontconfig/doc/fcvalue.fncs b/fontconfig/doc/fcvalue.fncs index 2563a2557..83a5b3aa9 100644 --- a/fontconfig/doc/fcvalue.fncs +++ b/fontconfig/doc/fcvalue.fncs @@ -1,61 +1,61 @@ -/*
- * fontconfig/doc/fcvalue.fncs
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-@RET@ void
-@FUNC@ FcValueDestroy
-@TYPE1@ FcValue% @ARG1@ v
-@PURPOSE@ Free a value
-@DESC@
-Frees any memory referenced by <parameter>v</parameter>. Values of type FcTypeString,
-FcTypeMatrix and FcTypeCharSet reference memory, the other types do not.
-@@
-
-@RET@ FcValue
-@FUNC@ FcValueSave
-@TYPE1@ FcValue% @ARG1@ v
-@PURPOSE@ Copy a value
-@DESC@
-Returns a copy of <parameter>v</parameter> duplicating any object referenced by it so that <parameter>v</parameter>
-may be safely destroyed without harming the new value.
-@@
-
-@RET@ void
-@FUNC@ FcValuePrint
-@TYPE1@ FcValue% @ARG1@ v
-@PURPOSE@ Print a value to stdout
-@DESC@
-Prints a human-readable representation of <parameter>v</parameter> to
-stdout. The format should not be considered part of the library
-specification as it may change in the future.
-@@
-
-@RET@ FcBool
-@FUNC@ FcValueEqual
-@TYPE1@ FcValue% @ARG1@ v_a
-@TYPE2@ FcValue% @ARG2@ v_b
-@PURPOSE@ Test two values for equality
-@DESC@
-Compares two values. Integers and Doubles are compared as numbers; otherwise
-the two values have to be the same type to be considered equal. Strings are
-compared ignoring case.
-@@
+/* + * fontconfig/doc/fcvalue.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ void +@FUNC@ FcValueDestroy +@TYPE1@ FcValue% @ARG1@ v +@PURPOSE@ Free a value +@DESC@ +Frees any memory referenced by <parameter>v</parameter>. Values of type FcTypeString, +FcTypeMatrix and FcTypeCharSet reference memory, the other types do not. +@@ + +@RET@ FcValue +@FUNC@ FcValueSave +@TYPE1@ FcValue% @ARG1@ v +@PURPOSE@ Copy a value +@DESC@ +Returns a copy of <parameter>v</parameter> duplicating any object referenced by it so that <parameter>v</parameter> +may be safely destroyed without harming the new value. +@@ + +@RET@ void +@FUNC@ FcValuePrint +@TYPE1@ FcValue% @ARG1@ v +@PURPOSE@ Print a value to stdout +@DESC@ +Prints a human-readable representation of <parameter>v</parameter> to +stdout. The format should not be considered part of the library +specification as it may change in the future. +@@ + +@RET@ FcBool +@FUNC@ FcValueEqual +@TYPE1@ FcValue% @ARG1@ v_a +@TYPE2@ FcValue% @ARG2@ v_b +@PURPOSE@ Test two values for equality +@DESC@ +Compares two values. Integers and Doubles are compared as numbers; otherwise +the two values have to be the same type to be considered equal. Strings are +compared ignoring case. +@@ diff --git a/fontconfig/doc/fontconfig-devel.sgml b/fontconfig/doc/fontconfig-devel.sgml index 52675e267..87339511c 100644 --- a/fontconfig/doc/fontconfig-devel.sgml +++ b/fontconfig/doc/fontconfig-devel.sgml @@ -1,573 +1,573 @@ -<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
-<!ENTITY fcatomic SYSTEM "fcatomic.sgml">
-<!ENTITY fcblanks SYSTEM "fcblanks.sgml">
-<!ENTITY fccache SYSTEM "fccache.sgml">
-<!ENTITY fccharset SYSTEM "fccharset.sgml">
-<!ENTITY fcconfig SYSTEM "fcconfig.sgml">
-<!ENTITY fcconstant SYSTEM "fcconstant.sgml">
-<!ENTITY fcdircache SYSTEM "fcdircache.sgml">
-<!ENTITY fcfile SYSTEM "fcfile.sgml">
-<!ENTITY fcfontset SYSTEM "fcfontset.sgml">
-<!ENTITY fcformat SYSTEM "fcformat.sgml">
-<!ENTITY fcfreetype SYSTEM "fcfreetype.sgml">
-<!ENTITY fcinit SYSTEM "fcinit.sgml">
-<!ENTITY fclangset SYSTEM "fclangset.sgml">
-<!ENTITY fcmatrix SYSTEM "fcmatrix.sgml">
-<!ENTITY fcobjectset SYSTEM "fcobjectset.sgml">
-<!ENTITY fcobjecttype SYSTEM "fcobjecttype.sgml">
-<!ENTITY fcpattern SYSTEM "fcpattern.sgml">
-<!ENTITY fcstring SYSTEM "fcstring.sgml">
-<!ENTITY fcstrset SYSTEM "fcstrset.sgml">
-<!ENTITY fcvalue SYSTEM "fcvalue.sgml">
-<!ENTITY version SYSTEM "version.sgml">
-]>
-<!--
- fontconfig/doc/local-fontconfig-devel.sgml
-
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of the author(s) not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. The authors make no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
--->
-<article>
- <title>Fontconfig Developers Reference, Version &version; </title>
- <artheader>
- <author>
- <firstname>Keith</firstname>
- <surname>Packard</surname>
- <affiliation><orgname>
- HP Cambridge Research Lab
- </orgname></affiliation>
- </author>
- <authorinitials>KRP</authorinitials>
- <productname>Fontconfig</productname>
- <productnumber>&version;</productnumber>
- <LegalNotice>
- <simpara>
-Copyright © 2002 Keith Packard
- </simpara><simpara>
-Permission to use, copy, modify, distribute, and sell this software and its
-documentation for any purpose is hereby granted without fee, provided that
-the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of the author(s) not be used in
-advertising or publicity pertaining to distribution of the software without
-specific, written prior permission. The authors make no
-representations about the suitability of this software for any purpose. It
-is provided "as is" without express or implied warranty.
- </simpara><simpara>
-THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
- </simpara>
- </LegalNotice>
- </artheader>
-<sect1><title>DESCRIPTION</title>
- <para>
-Fontconfig is a library designed to provide system-wide font configuration,
-customization and application access.
- </para>
-</sect1>
-<sect1><title>FUNCTIONAL OVERVIEW</title>
- <para>
-Fontconfig contains two essential modules, the configuration module which
-builds an internal configuration from XML files and the matching module
-which accepts font patterns and returns the nearest matching font.
- </para>
- <sect2><title>FONT CONFIGURATION</title>
- <para>
-The configuration module consists of the FcConfig datatype, libexpat and
-FcConfigParse which walks over an XML tree and amends a configuration with
-data found within. From an external perspective, configuration of the
-library consists of generating a valid XML tree and feeding that to
-FcConfigParse. The only other mechanism provided to applications for
-changing the running configuration is to add fonts and directories to the
-list of application-provided font files.
- </para><para>
-The intent is to make font configurations relatively static, and shared by
-as many applications as possible. It is hoped that this will lead to more
-stable font selection when passing names from one application to another.
-XML was chosen as a configuration file format because it provides a format
-which is easy for external agents to edit while retaining the correct
-structure and syntax.
- </para><para>
-Font configuration is separate from font matching; applications needing to
-do their own matching can access the available fonts from the library and
-perform private matching. The intent is to permit applications to pick and
-choose appropriate functionality from the library instead of forcing them to
-choose between this library and a private configuration mechanism. The hope
-is that this will ensure that configuration of fonts for all applications
-can be centralized in one place. Centralizing font configuration will
-simplify and regularize font installation and customization.
- </para>
- </sect2>
- <sect2>
- <title>FONT PROPERTIES</title>
- <para>
-While font patterns may contain essentially any properties, there are some
-well known properties with associated types. Fontconfig uses some of these
-properties for font matching and font completion. Others are provided as a
-convenience for the application's rendering mechanism.
- </para>
- <programlisting>
- Property Definitions
-
- Property C Preprocessor Symbol Type Description
- ----------------------------------------------------
- family FC_FAMILY String Font family names
- familylang FC_FAMILYLANG String Language corresponding to
- each family name
- style FC_STYLE String Font style. Overrides weight
- and slant
- stylelang FC_STYLELANG String Language corresponding to
- each style name
- fullname FC_FULLNAME String Font face full name where
- different from family and
- family + style
- fullnamelang FC_FULLNAMELANG String Language corresponding to
- each fullname
- slant FC_SLANT Int Italic, oblique or roman
- weight FC_WEIGHT Int Light, medium, demibold,
- bold or black
- size FC_SIZE Double Point size
- width FC_WIDTH Int Condensed, normal or expanded
- aspect FC_ASPECT Double Stretches glyphs horizontally
- before hinting
- pixelsize FC_PIXEL_SIZE Double Pixel size
- spacing FC_SPACING Int Proportional, dual-width,
- monospace or charcell
- foundry FC_FOUNDRY String Font foundry name
- antialias FC_ANTIALIAS Bool Whether glyphs can be
- antialiased
- hinting FC_HINTING Bool Whether the rasterizer should
- use hinting
- hintstyle FC_HINT_STYLE Int Automatic hinting style
- verticallayout FC_VERTICAL_LAYOUT Bool Use vertical layout
- autohint FC_AUTOHINT Bool Use autohinter instead of
- normal hinter
- globaladvance FC_GLOBAL_ADVANCE Bool Use font global advance data
- file FC_FILE String The filename holding the font
- index FC_INDEX Int The index of the font within
- the file
- ftface FC_FT_FACE FT_Face Use the specified FreeType
- face object
- rasterizer FC_RASTERIZER String Which rasterizer is in use
- outline FC_OUTLINE Bool Whether the glyphs are outlines
- scalable FC_SCALABLE Bool Whether glyphs can be scaled
- scale FC_SCALE Double Scale factor for point->pixel
- conversions
- dpi FC_DPI Double Target dots per inch
- rgba FC_RGBA Int unknown, rgb, bgr, vrgb,
- vbgr, none - subpixel geometry
- lcdfilter FC_LCD_FILTER Int Type of LCD filter
- minspace FC_MINSPACE Bool Eliminate leading from line
- spacing
- charset FC_CHARSET CharSet Unicode chars encoded by
- the font
- lang FC_LANG LangSet Set of RFC-3066-style
- languages this font supports
- fontversion FC_FONTVERSION Int Version number of the font
- capability FC_CAPABILITY String List of layout capabilities in
- the font
- embolden FC_EMBOLDEN Bool Rasterizer should
- synthetically embolden the font
- </programlisting>
- </sect2>
-</sect1>
-<sect1><title>Datatypes</title>
- <para>
-Fontconfig uses abstract data types to hide internal implementation details
-for most data structures. A few structures are exposed where appropriate.
- </para>
- <sect2><title>FcChar8, FcChar16, FcChar32, FcBool</title>
- <para>
-These are primitive data types; the FcChar* types hold precisely the number
-of bits stated (if supported by the C implementation). FcBool holds
-one of two C preprocessor symbols: FcFalse or FcTrue.
- </para>
- </sect2>
- <sect2><title>FcMatrix</title>
- <para>
-An FcMatrix holds an affine transformation, usually used to reshape glyphs.
-A small set of matrix operations are provided to manipulate these.
- <programlisting>
- typedef struct _FcMatrix {
- double xx, xy, yx, yy;
- } FcMatrix;
- </programlisting>
- </para>
- </sect2>
- <sect2><title>FcCharSet</title>
- <para>
-An FcCharSet is an abstract type that holds the set of encoded Unicode chars
-in a font. Operations to build and compare these sets are provided.
- </para>
- </sect2>
- <sect2><title>FcLangSet</title>
- <para>
-An FcLangSet is an abstract type that holds the set of languages supported
-by a font. Operations to build and compare these sets are provided. These
-are computed for a font based on orthographic information built into the
-fontconfig library. Fontconfig has orthographies for all of the ISO 639-1
-languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. If
-you have orthographic information for any of these languages, please submit
-them.
- </para>
- </sect2>
- <sect2><title>FcLangResult</title>
- <para>
-An FcLangResult is an enumeration used to return the results of comparing
-two language strings or FcLangSet objects. FcLangEqual means the
-objects match language and territory. FcLangDifferentTerritory means
-the objects match in language but differ in territory.
-FcLangDifferentLang means the objects differ in language.
- </para>
- </sect2>
- <sect2><title>FcType</title>
- <para>
-Tags the kind of data stored in an FcValue.
- </para>
- </sect2>
- <sect2><title>FcValue</title>
- <para>
-An FcValue object holds a single value with one of a number of different
-types. The 'type' tag indicates which member is valid.
- <programlisting>
- typedef struct _FcValue {
- FcType type;
- union {
- const FcChar8 *s;
- int i;
- FcBool b;
- double d;
- const FcMatrix *m;
- const FcCharSet *c;
- void *f;
- const FcLangSet *l;
- } u;
- } FcValue;
- </programlisting>
- <programlisting>
- FcValue Members
-
- Type Union member Datatype
- --------------------------------
- FcTypeVoid (none) (none)
- FcTypeInteger i int
- FcTypeDouble d double
- FcTypeString s FcChar8 *
- FcTypeBool b b
- FcTypeMatrix m FcMatrix *
- FcTypeCharSet c FcCharSet *
- FcTypeFTFace f void * (FT_Face)
- FcTypeLangSet l FcLangSet *
- </programlisting>
- </para>
- </sect2>
- <sect2><title>FcPattern</title>
- <para>
-holds a set of names with associated value lists; each name refers to a
-property of a font. FcPatterns are used as inputs to the matching code as
-well as holding information about specific fonts. Each property can hold
-one or more values; conventionally all of the same type, although the
-interface doesn't demand that.
- </para>
- </sect2>
- <sect2><title>FcFontSet</title>
- <para>
- <programlisting>
- typedef struct _FcFontSet {
- int nfont;
- int sfont;
- FcPattern **fonts;
- } FcFontSet;
- </programlisting>
-An FcFontSet contains a list of FcPatterns. Internally fontconfig uses this
-data structure to hold sets of fonts. Externally, fontconfig returns the
-results of listing fonts in this format. 'nfont' holds the number of
-patterns in the 'fonts' array; 'sfont' is used to indicate the size of that
-array.
- </para>
- </sect2>
- <sect2><title>FcStrSet, FcStrList</title>
- <para>
-FcStrSet holds a list of strings that can be appended to and enumerated.
-Its unique characteristic is that the enumeration works even while strings
-are appended during enumeration. FcStrList is used during enumeration to
-safely and correctly walk the list of strings even while that list is edited
-in the middle of enumeration.
- </para>
- </sect2>
- <sect2><title>FcObjectSet</title>
- <para>
- <programlisting>
- typedef struct _FcObjectSet {
- int nobject;
- int sobject;
- const char **objects;
- } FcObjectSet;
- </programlisting>
-holds a set of names and is used to specify which fields from fonts are
-placed in the the list of returned patterns when listing fonts.
- </para>
- </sect2>
- <sect2><title>FcObjectType</title>
- <para>
- <programlisting>
- typedef struct _FcObjectType {
- const char *object;
- FcType type;
- } FcObjectType;
- </programlisting>
-marks the type of a pattern element generated when parsing font names.
-Applications can add new object types so that font names may contain the new
-elements.
- </para>
- </sect2>
- <sect2><title>FcConstant</title>
- <para>
- <programlisting>
- typedef struct _FcConstant {
- const FcChar8 *name;
- const char *object;
- int value;
- } FcConstant;
- </programlisting>
-Provides for symbolic constants for new pattern elements. When 'name' is
-seen in a font name, an 'object' element is created with value 'value'.
- </para>
- </sect2>
- <sect2><title>FcBlanks</title>
- <para>
-holds a list of Unicode chars which are expected to be blank; unexpectedly
-blank chars are assumed to be invalid and are elided from the charset
-associated with the font.
- </para>
- </sect2>
- <sect2><title>FcFileCache</title>
- <para>
-holds the per-user cache information for use while loading the font
-database. This is built automatically for the current configuration when
-that is loaded. Applications must always pass '0' when one is requested.
- </para>
- </sect2>
- <sect2><title>FcConfig</title>
- <para>
-holds a complete configuration of the library; there is one default
-configuration, other can be constructed from XML data structures. All
-public entry points that need global data can take an optional FcConfig*
-argument; passing 0 uses the default configuration. FcConfig objects hold two
-sets of fonts, the first contains those specified by the configuration, the
-second set holds those added by the application at run-time. Interfaces
-that need to reference a particular set use one of the FcSetName enumerated
-values.
- </para>
- </sect2>
- <sect2><title>FcSetName</title>
- <para>
-Specifies one of the two sets of fonts available in a configuration;
-FcSetSystem for those fonts specified in the configuration and
-FcSetApplication which holds fonts provided by the application.
- </para>
- </sect2>
- <sect2><title>FcResult</title>
- <para>
-Used as a return type for functions manipulating FcPattern objects.
- <programlisting>
- FcResult Values
- Result Code Meaning
- -----------------------------------------------------------
- FcResultMatch Object exists with the specified ID
- FcResultNoMatch Object doesn't exist at all
- FcResultTypeMismatch Object exists, but the type doesn't match
- FcResultNoId Object exists, but has fewer values
- than specified
- FcResultOutOfMemory malloc failed
- </programlisting>
- </para>
- </sect2>
- <sect2><title>FcAtomic</title>
- <para>
-Used for locking access to configuration files. Provides a safe way to update
-configuration files.
- </para>
- </sect2>
- <sect2><title>FcCache</title>
- <para>
-Holds information about the fonts contained in a single directory. Normal
-applications need not worry about this as caches for font access are
-automatically managed by the library. Applications dealing with cache
-management may want to use some of these objects in their work, however the
-included 'fc-cache' program generally suffices for all of that.
- </para>
- </sect2>
-</sect1>
-<sect1><title>FUNCTIONS</title>
- <para>
-These are grouped by functionality, often using the main data type being
-manipulated.
- </para>
- <sect2><title>Initialization</title>
- <para>
-These functions provide some control over how the library is initialized.
- </para>
- &fcinit;
- </sect2>
- <sect2><title>FcPattern</title>
- <para>
-An FcPattern is an opaque type that holds both patterns to match against the
-available fonts, as well as the information about each font.
- </para>
- &fcpattern;
- &fcformat;
- </sect2>
- <sect2><title>FcFontSet</title>
- <para>
-An FcFontSet simply holds a list of patterns; these are used to return the
-results of listing available fonts.
- </para>
- &fcfontset;
- </sect2>
- <sect2><title>FcObjectSet</title>
- <para>
-An FcObjectSet holds a list of pattern property names; it is used to
-indicate which properties are to be returned in the patterns from
-FcFontList.
- </para>
- &fcobjectset;
- </sect2>
- <sect2><title>FreeType specific functions</title>
- <para>
-While the fontconfig library doesn't insist that FreeType be used as the
-rasterization mechanism for fonts, it does provide some convenience
-functions.
- </para>
- &fcfreetype;
- </sect2>
- <sect2><title>FcValue</title>
- <para>
-FcValue is a structure containing a type tag and a union of all possible
-datatypes. The tag is an enum of type
-<emphasis>FcType</emphasis>
-and is intended to provide a measure of run-time
-typechecking, although that depends on careful programming.
- </para>
- &fcvalue;
- </sect2>
- <sect2><title>FcCharSet</title>
- <para>
-An FcCharSet is a boolean array indicating a set of Unicode chars. Those
-associated with a font are marked constant and cannot be edited.
-FcCharSets may be reference counted internally to reduce memory consumption;
-this may be visible to applications as the result of FcCharSetCopy may
-return it's argument, and that CharSet may remain unmodifiable.
- </para>
- &fccharset;
- </sect2>
- <sect2><title>FcLangSet</title>
- <para>
-An FcLangSet is a set of language names (each of which include language and
-an optional territory). They are used when selecting fonts to indicate which
-languages the fonts need to support. Each font is marked, using language
-orthography information built into fontconfig, with the set of supported
-languages.
- </para>
- &fclangset;
- </sect2>
- <sect2><title>FcMatrix</title>
- <para>
-FcMatrix structures hold an affine transformation in matrix form.
- </para>
- &fcmatrix;
- </sect2>
- <sect2><title>FcConfig</title>
- <para>
-An FcConfig object holds the internal representation of a configuration.
-There is a default configuration which applications may use by passing 0 to
-any function using the data within an FcConfig.
- </para>
- &fcconfig;
- </sect2>
- <sect2><title>FcObjectType</title>
- <para>
-Provides for application-specified font name object types so that new
-pattern elements can be generated from font names.
- </para>
- &fcobjecttype;
- </sect2>
- <sect2><title>FcConstant</title>
- <para>
-Provides for application-specified symbolic constants for font names.
- </para>
- &fcconstant;
- </sect2>
- <sect2><title>FcBlanks</title>
- <para>
-An FcBlanks object holds a list of Unicode chars which are expected to
-be blank when drawn. When scanning new fonts, any glyphs which are
-empty and not in this list will be assumed to be broken and not placed in
-the FcCharSet associated with the font. This provides a significantly more
-accurate CharSet for applications.
- </para>
- &fcblanks;
- </sect2>
- <sect2><title>FcAtomic</title>
- <para>
-These functions provide a safe way to update configuration files, allowing ongoing
-reading of the old configuration file while locked for writing and ensuring that a
-consistent and complete version of the configuration file is always available.
- </para>
- &fcatomic;
- </sect2>
- <sect2><title>File and Directory routines</title>
- <para>
-These routines work with font files and directories, including font
-directory cache files.
- </para>
- &fcfile;
- &fcdircache;
- </sect2>
- <sect2><title>FcCache routines</title>
- <para>
-These routines work with font directory caches, accessing their contents in
-limited ways. It is not expected that normal applications will need to use
-these functions.
- </para>
- &fccache;
- </sect2>
- <sect2><title>FcStrSet and FcStrList</title>
- <para>
-A data structure for enumerating strings, used to list directories while
-scanning the configuration as directories are added while scanning.
- </para>
- &fcstrset;
- </sect2>
- <sect2><title>String utilities</title>
- <para>
-Fontconfig manipulates many UTF-8 strings represented with the FcChar8 type.
-These functions are exposed to help applications deal with these UTF-8
-strings in a locale-insensitive manner.
- </para>
- &fcstring;
- </sect2>
-</sect1>
-</article>
+<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [ +<!ENTITY fcatomic SYSTEM "fcatomic.sgml"> +<!ENTITY fcblanks SYSTEM "fcblanks.sgml"> +<!ENTITY fccache SYSTEM "fccache.sgml"> +<!ENTITY fccharset SYSTEM "fccharset.sgml"> +<!ENTITY fcconfig SYSTEM "fcconfig.sgml"> +<!ENTITY fcconstant SYSTEM "fcconstant.sgml"> +<!ENTITY fcdircache SYSTEM "fcdircache.sgml"> +<!ENTITY fcfile SYSTEM "fcfile.sgml"> +<!ENTITY fcfontset SYSTEM "fcfontset.sgml"> +<!ENTITY fcformat SYSTEM "fcformat.sgml"> +<!ENTITY fcfreetype SYSTEM "fcfreetype.sgml"> +<!ENTITY fcinit SYSTEM "fcinit.sgml"> +<!ENTITY fclangset SYSTEM "fclangset.sgml"> +<!ENTITY fcmatrix SYSTEM "fcmatrix.sgml"> +<!ENTITY fcobjectset SYSTEM "fcobjectset.sgml"> +<!ENTITY fcobjecttype SYSTEM "fcobjecttype.sgml"> +<!ENTITY fcpattern SYSTEM "fcpattern.sgml"> +<!ENTITY fcstring SYSTEM "fcstring.sgml"> +<!ENTITY fcstrset SYSTEM "fcstrset.sgml"> +<!ENTITY fcvalue SYSTEM "fcvalue.sgml"> +<!ENTITY version SYSTEM "version.sgml"> +]> +<!-- + fontconfig/doc/local-fontconfig-devel.sgml + + Copyright © 2003 Keith Packard + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of the author(s) not be used in + advertising or publicity pertaining to distribution of the software without + specific, written prior permission. The authors make no + representations about the suitability of this software for any purpose. It + is provided "as is" without express or implied warranty. + + THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. +--> +<article> + <title>Fontconfig Developers Reference, Version &version; </title> + <artheader> + <author> + <firstname>Keith</firstname> + <surname>Packard</surname> + <affiliation><orgname> + HP Cambridge Research Lab + </orgname></affiliation> + </author> + <authorinitials>KRP</authorinitials> + <productname>Fontconfig</productname> + <productnumber>&version;</productnumber> + <LegalNotice> + <simpara> +Copyright © 2002 Keith Packard + </simpara><simpara> +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of the author(s) not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. The authors make no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + </simpara><simpara> +THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + </simpara> + </LegalNotice> + </artheader> +<sect1><title>DESCRIPTION</title> + <para> +Fontconfig is a library designed to provide system-wide font configuration, +customization and application access. + </para> +</sect1> +<sect1><title>FUNCTIONAL OVERVIEW</title> + <para> +Fontconfig contains two essential modules, the configuration module which +builds an internal configuration from XML files and the matching module +which accepts font patterns and returns the nearest matching font. + </para> + <sect2><title>FONT CONFIGURATION</title> + <para> +The configuration module consists of the FcConfig datatype, libexpat and +FcConfigParse which walks over an XML tree and amends a configuration with +data found within. From an external perspective, configuration of the +library consists of generating a valid XML tree and feeding that to +FcConfigParse. The only other mechanism provided to applications for +changing the running configuration is to add fonts and directories to the +list of application-provided font files. + </para><para> +The intent is to make font configurations relatively static, and shared by +as many applications as possible. It is hoped that this will lead to more +stable font selection when passing names from one application to another. +XML was chosen as a configuration file format because it provides a format +which is easy for external agents to edit while retaining the correct +structure and syntax. + </para><para> +Font configuration is separate from font matching; applications needing to +do their own matching can access the available fonts from the library and +perform private matching. The intent is to permit applications to pick and +choose appropriate functionality from the library instead of forcing them to +choose between this library and a private configuration mechanism. The hope +is that this will ensure that configuration of fonts for all applications +can be centralized in one place. Centralizing font configuration will +simplify and regularize font installation and customization. + </para> + </sect2> + <sect2> + <title>FONT PROPERTIES</title> + <para> +While font patterns may contain essentially any properties, there are some +well known properties with associated types. Fontconfig uses some of these +properties for font matching and font completion. Others are provided as a +convenience for the application's rendering mechanism. + </para> + <programlisting> + Property Definitions + + Property C Preprocessor Symbol Type Description + ---------------------------------------------------- + family FC_FAMILY String Font family names + familylang FC_FAMILYLANG String Language corresponding to + each family name + style FC_STYLE String Font style. Overrides weight + and slant + stylelang FC_STYLELANG String Language corresponding to + each style name + fullname FC_FULLNAME String Font face full name where + different from family and + family + style + fullnamelang FC_FULLNAMELANG String Language corresponding to + each fullname + slant FC_SLANT Int Italic, oblique or roman + weight FC_WEIGHT Int Light, medium, demibold, + bold or black + size FC_SIZE Double Point size + width FC_WIDTH Int Condensed, normal or expanded + aspect FC_ASPECT Double Stretches glyphs horizontally + before hinting + pixelsize FC_PIXEL_SIZE Double Pixel size + spacing FC_SPACING Int Proportional, dual-width, + monospace or charcell + foundry FC_FOUNDRY String Font foundry name + antialias FC_ANTIALIAS Bool Whether glyphs can be + antialiased + hinting FC_HINTING Bool Whether the rasterizer should + use hinting + hintstyle FC_HINT_STYLE Int Automatic hinting style + verticallayout FC_VERTICAL_LAYOUT Bool Use vertical layout + autohint FC_AUTOHINT Bool Use autohinter instead of + normal hinter + globaladvance FC_GLOBAL_ADVANCE Bool Use font global advance data + file FC_FILE String The filename holding the font + index FC_INDEX Int The index of the font within + the file + ftface FC_FT_FACE FT_Face Use the specified FreeType + face object + rasterizer FC_RASTERIZER String Which rasterizer is in use + outline FC_OUTLINE Bool Whether the glyphs are outlines + scalable FC_SCALABLE Bool Whether glyphs can be scaled + scale FC_SCALE Double Scale factor for point->pixel + conversions + dpi FC_DPI Double Target dots per inch + rgba FC_RGBA Int unknown, rgb, bgr, vrgb, + vbgr, none - subpixel geometry + lcdfilter FC_LCD_FILTER Int Type of LCD filter + minspace FC_MINSPACE Bool Eliminate leading from line + spacing + charset FC_CHARSET CharSet Unicode chars encoded by + the font + lang FC_LANG LangSet Set of RFC-3066-style + languages this font supports + fontversion FC_FONTVERSION Int Version number of the font + capability FC_CAPABILITY String List of layout capabilities in + the font + embolden FC_EMBOLDEN Bool Rasterizer should + synthetically embolden the font + </programlisting> + </sect2> +</sect1> +<sect1><title>Datatypes</title> + <para> +Fontconfig uses abstract data types to hide internal implementation details +for most data structures. A few structures are exposed where appropriate. + </para> + <sect2><title>FcChar8, FcChar16, FcChar32, FcBool</title> + <para> +These are primitive data types; the FcChar* types hold precisely the number +of bits stated (if supported by the C implementation). FcBool holds +one of two C preprocessor symbols: FcFalse or FcTrue. + </para> + </sect2> + <sect2><title>FcMatrix</title> + <para> +An FcMatrix holds an affine transformation, usually used to reshape glyphs. +A small set of matrix operations are provided to manipulate these. + <programlisting> + typedef struct _FcMatrix { + double xx, xy, yx, yy; + } FcMatrix; + </programlisting> + </para> + </sect2> + <sect2><title>FcCharSet</title> + <para> +An FcCharSet is an abstract type that holds the set of encoded Unicode chars +in a font. Operations to build and compare these sets are provided. + </para> + </sect2> + <sect2><title>FcLangSet</title> + <para> +An FcLangSet is an abstract type that holds the set of languages supported +by a font. Operations to build and compare these sets are provided. These +are computed for a font based on orthographic information built into the +fontconfig library. Fontconfig has orthographies for all of the ISO 639-1 +languages except for MS, NA, PA, PS, QU, RN, RW, SD, SG, SN, SU and ZA. If +you have orthographic information for any of these languages, please submit +them. + </para> + </sect2> + <sect2><title>FcLangResult</title> + <para> +An FcLangResult is an enumeration used to return the results of comparing +two language strings or FcLangSet objects. FcLangEqual means the +objects match language and territory. FcLangDifferentTerritory means +the objects match in language but differ in territory. +FcLangDifferentLang means the objects differ in language. + </para> + </sect2> + <sect2><title>FcType</title> + <para> +Tags the kind of data stored in an FcValue. + </para> + </sect2> + <sect2><title>FcValue</title> + <para> +An FcValue object holds a single value with one of a number of different +types. The 'type' tag indicates which member is valid. + <programlisting> + typedef struct _FcValue { + FcType type; + union { + const FcChar8 *s; + int i; + FcBool b; + double d; + const FcMatrix *m; + const FcCharSet *c; + void *f; + const FcLangSet *l; + } u; + } FcValue; + </programlisting> + <programlisting> + FcValue Members + + Type Union member Datatype + -------------------------------- + FcTypeVoid (none) (none) + FcTypeInteger i int + FcTypeDouble d double + FcTypeString s FcChar8 * + FcTypeBool b b + FcTypeMatrix m FcMatrix * + FcTypeCharSet c FcCharSet * + FcTypeFTFace f void * (FT_Face) + FcTypeLangSet l FcLangSet * + </programlisting> + </para> + </sect2> + <sect2><title>FcPattern</title> + <para> +holds a set of names with associated value lists; each name refers to a +property of a font. FcPatterns are used as inputs to the matching code as +well as holding information about specific fonts. Each property can hold +one or more values; conventionally all of the same type, although the +interface doesn't demand that. + </para> + </sect2> + <sect2><title>FcFontSet</title> + <para> + <programlisting> + typedef struct _FcFontSet { + int nfont; + int sfont; + FcPattern **fonts; + } FcFontSet; + </programlisting> +An FcFontSet contains a list of FcPatterns. Internally fontconfig uses this +data structure to hold sets of fonts. Externally, fontconfig returns the +results of listing fonts in this format. 'nfont' holds the number of +patterns in the 'fonts' array; 'sfont' is used to indicate the size of that +array. + </para> + </sect2> + <sect2><title>FcStrSet, FcStrList</title> + <para> +FcStrSet holds a list of strings that can be appended to and enumerated. +Its unique characteristic is that the enumeration works even while strings +are appended during enumeration. FcStrList is used during enumeration to +safely and correctly walk the list of strings even while that list is edited +in the middle of enumeration. + </para> + </sect2> + <sect2><title>FcObjectSet</title> + <para> + <programlisting> + typedef struct _FcObjectSet { + int nobject; + int sobject; + const char **objects; + } FcObjectSet; + </programlisting> +holds a set of names and is used to specify which fields from fonts are +placed in the the list of returned patterns when listing fonts. + </para> + </sect2> + <sect2><title>FcObjectType</title> + <para> + <programlisting> + typedef struct _FcObjectType { + const char *object; + FcType type; + } FcObjectType; + </programlisting> +marks the type of a pattern element generated when parsing font names. +Applications can add new object types so that font names may contain the new +elements. + </para> + </sect2> + <sect2><title>FcConstant</title> + <para> + <programlisting> + typedef struct _FcConstant { + const FcChar8 *name; + const char *object; + int value; + } FcConstant; + </programlisting> +Provides for symbolic constants for new pattern elements. When 'name' is +seen in a font name, an 'object' element is created with value 'value'. + </para> + </sect2> + <sect2><title>FcBlanks</title> + <para> +holds a list of Unicode chars which are expected to be blank; unexpectedly +blank chars are assumed to be invalid and are elided from the charset +associated with the font. + </para> + </sect2> + <sect2><title>FcFileCache</title> + <para> +holds the per-user cache information for use while loading the font +database. This is built automatically for the current configuration when +that is loaded. Applications must always pass '0' when one is requested. + </para> + </sect2> + <sect2><title>FcConfig</title> + <para> +holds a complete configuration of the library; there is one default +configuration, other can be constructed from XML data structures. All +public entry points that need global data can take an optional FcConfig* +argument; passing 0 uses the default configuration. FcConfig objects hold two +sets of fonts, the first contains those specified by the configuration, the +second set holds those added by the application at run-time. Interfaces +that need to reference a particular set use one of the FcSetName enumerated +values. + </para> + </sect2> + <sect2><title>FcSetName</title> + <para> +Specifies one of the two sets of fonts available in a configuration; +FcSetSystem for those fonts specified in the configuration and +FcSetApplication which holds fonts provided by the application. + </para> + </sect2> + <sect2><title>FcResult</title> + <para> +Used as a return type for functions manipulating FcPattern objects. + <programlisting> + FcResult Values + Result Code Meaning + ----------------------------------------------------------- + FcResultMatch Object exists with the specified ID + FcResultNoMatch Object doesn't exist at all + FcResultTypeMismatch Object exists, but the type doesn't match + FcResultNoId Object exists, but has fewer values + than specified + FcResultOutOfMemory malloc failed + </programlisting> + </para> + </sect2> + <sect2><title>FcAtomic</title> + <para> +Used for locking access to configuration files. Provides a safe way to update +configuration files. + </para> + </sect2> + <sect2><title>FcCache</title> + <para> +Holds information about the fonts contained in a single directory. Normal +applications need not worry about this as caches for font access are +automatically managed by the library. Applications dealing with cache +management may want to use some of these objects in their work, however the +included 'fc-cache' program generally suffices for all of that. + </para> + </sect2> +</sect1> +<sect1><title>FUNCTIONS</title> + <para> +These are grouped by functionality, often using the main data type being +manipulated. + </para> + <sect2><title>Initialization</title> + <para> +These functions provide some control over how the library is initialized. + </para> + &fcinit; + </sect2> + <sect2><title>FcPattern</title> + <para> +An FcPattern is an opaque type that holds both patterns to match against the +available fonts, as well as the information about each font. + </para> + &fcpattern; + &fcformat; + </sect2> + <sect2><title>FcFontSet</title> + <para> +An FcFontSet simply holds a list of patterns; these are used to return the +results of listing available fonts. + </para> + &fcfontset; + </sect2> + <sect2><title>FcObjectSet</title> + <para> +An FcObjectSet holds a list of pattern property names; it is used to +indicate which properties are to be returned in the patterns from +FcFontList. + </para> + &fcobjectset; + </sect2> + <sect2><title>FreeType specific functions</title> + <para> +While the fontconfig library doesn't insist that FreeType be used as the +rasterization mechanism for fonts, it does provide some convenience +functions. + </para> + &fcfreetype; + </sect2> + <sect2><title>FcValue</title> + <para> +FcValue is a structure containing a type tag and a union of all possible +datatypes. The tag is an enum of type +<emphasis>FcType</emphasis> +and is intended to provide a measure of run-time +typechecking, although that depends on careful programming. + </para> + &fcvalue; + </sect2> + <sect2><title>FcCharSet</title> + <para> +An FcCharSet is a boolean array indicating a set of Unicode chars. Those +associated with a font are marked constant and cannot be edited. +FcCharSets may be reference counted internally to reduce memory consumption; +this may be visible to applications as the result of FcCharSetCopy may +return it's argument, and that CharSet may remain unmodifiable. + </para> + &fccharset; + </sect2> + <sect2><title>FcLangSet</title> + <para> +An FcLangSet is a set of language names (each of which include language and +an optional territory). They are used when selecting fonts to indicate which +languages the fonts need to support. Each font is marked, using language +orthography information built into fontconfig, with the set of supported +languages. + </para> + &fclangset; + </sect2> + <sect2><title>FcMatrix</title> + <para> +FcMatrix structures hold an affine transformation in matrix form. + </para> + &fcmatrix; + </sect2> + <sect2><title>FcConfig</title> + <para> +An FcConfig object holds the internal representation of a configuration. +There is a default configuration which applications may use by passing 0 to +any function using the data within an FcConfig. + </para> + &fcconfig; + </sect2> + <sect2><title>FcObjectType</title> + <para> +Provides for application-specified font name object types so that new +pattern elements can be generated from font names. + </para> + &fcobjecttype; + </sect2> + <sect2><title>FcConstant</title> + <para> +Provides for application-specified symbolic constants for font names. + </para> + &fcconstant; + </sect2> + <sect2><title>FcBlanks</title> + <para> +An FcBlanks object holds a list of Unicode chars which are expected to +be blank when drawn. When scanning new fonts, any glyphs which are +empty and not in this list will be assumed to be broken and not placed in +the FcCharSet associated with the font. This provides a significantly more +accurate CharSet for applications. + </para> + &fcblanks; + </sect2> + <sect2><title>FcAtomic</title> + <para> +These functions provide a safe way to update configuration files, allowing ongoing +reading of the old configuration file while locked for writing and ensuring that a +consistent and complete version of the configuration file is always available. + </para> + &fcatomic; + </sect2> + <sect2><title>File and Directory routines</title> + <para> +These routines work with font files and directories, including font +directory cache files. + </para> + &fcfile; + &fcdircache; + </sect2> + <sect2><title>FcCache routines</title> + <para> +These routines work with font directory caches, accessing their contents in +limited ways. It is not expected that normal applications will need to use +these functions. + </para> + &fccache; + </sect2> + <sect2><title>FcStrSet and FcStrList</title> + <para> +A data structure for enumerating strings, used to list directories while +scanning the configuration as directories are added while scanning. + </para> + &fcstrset; + </sect2> + <sect2><title>String utilities</title> + <para> +Fontconfig manipulates many UTF-8 strings represented with the FcChar8 type. +These functions are exposed to help applications deal with these UTF-8 +strings in a locale-insensitive manner. + </para> + &fcstring; + </sect2> +</sect1> +</article> diff --git a/fontconfig/doc/fontconfig-user.sgml b/fontconfig/doc/fontconfig-user.sgml index efa01aa58..217feb97a 100644 --- a/fontconfig/doc/fontconfig-user.sgml +++ b/fontconfig/doc/fontconfig-user.sgml @@ -1,704 +1,704 @@ -<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [
-<!ENTITY version SYSTEM "version.sgml">
-<!ENTITY confdir SYSTEM "confdir.sgml">
-]>
-<!--
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of the author(s) not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. The authors make no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
--->
-<refentry>
-<refmeta>
- <refentrytitle>fonts-conf</refentrytitle>
- <manvolnum>5</manvolnum>
-</refmeta>
-<refnamediv>
- <refname>fonts.conf</refname>
- <refpurpose>Font configuration files</refpurpose>
-</refnamediv>
-<refsynopsisdiv>
-<synopsis>
- &confdir;/fonts.conf
- &confdir;/fonts.dtd
- &confdir;/conf.d
- ~/.fonts.conf.d
- ~/.fonts.conf
-</synopsis>
-</refsynopsisdiv>
-<refsect1><title>Description</title>
- <para>
-Fontconfig is a library designed to provide system-wide font configuration,
-customization and application access.
- </para>
-</refsect1>
-<refsect1><title>Functional Overview</title>
- <para>
-Fontconfig contains two essential modules, the configuration module which
-builds an internal configuration from XML files and the matching module
-which accepts font patterns and returns the nearest matching font.
- </para>
- <refsect2><title>Font Configuration</title>
- <para>
-The configuration module consists of the FcConfig datatype, libexpat and
-FcConfigParse which walks over an XML tree and amends a configuration with
-data found within. From an external perspective, configuration of the
-library consists of generating a valid XML tree and feeding that to
-FcConfigParse. The only other mechanism provided to applications for
-changing the running configuration is to add fonts and directories to the
-list of application-provided font files.
- </para><para>
-The intent is to make font configurations relatively static, and shared by
-as many applications as possible. It is hoped that this will lead to more
-stable font selection when passing names from one application to another.
-XML was chosen as a configuration file format because it provides a format
-which is easy for external agents to edit while retaining the correct
-structure and syntax.
- </para><para>
-Font configuration is separate from font matching; applications needing to
-do their own matching can access the available fonts from the library and
-perform private matching. The intent is to permit applications to pick and
-choose appropriate functionality from the library instead of forcing them to
-choose between this library and a private configuration mechanism. The hope
-is that this will ensure that configuration of fonts for all applications
-can be centralized in one place. Centralizing font configuration will
-simplify and regularize font installation and customization.
- </para>
- </refsect2>
- <refsect2>
- <title>Font Properties</title>
- <para>
-While font patterns may contain essentially any properties, there are some
-well known properties with associated types. Fontconfig uses some of these
-properties for font matching and font completion. Others are provided as a
-convenience for the applications' rendering mechanism.
- </para>
- <programlisting>
- Property Type Description
- --------------------------------------------------------------
- family String Font family names
- familylang String Languages corresponding to each family
- style String Font style. Overrides weight and slant
- stylelang String Languages corresponding to each style
- fullname String Font full names (often includes style)
- fullnamelang String Languages corresponding to each fullname
- slant Int Italic, oblique or roman
- weight Int Light, medium, demibold, bold or black
- size Double Point size
- width Int Condensed, normal or expanded
- aspect Double Stretches glyphs horizontally before hinting
- pixelsize Double Pixel size
- spacing Int Proportional, dual-width, monospace or charcell
- foundry String Font foundry name
- antialias Bool Whether glyphs can be antialiased
- hinting Bool Whether the rasterizer should use hinting
- hintstyle Int Automatic hinting style
- verticallayout Bool Use vertical layout
- autohint Bool Use autohinter instead of normal hinter
- globaladvance Bool Use font global advance data
- file String The filename holding the font
- index Int The index of the font within the file
- ftface FT_Face Use the specified FreeType face object
- rasterizer String Which rasterizer is in use
- outline Bool Whether the glyphs are outlines
- scalable Bool Whether glyphs can be scaled
- scale Double Scale factor for point->pixel conversions
- dpi Double Target dots per inch
- rgba Int unknown, rgb, bgr, vrgb, vbgr,
- none - subpixel geometry
- lcdfilter Int Type of LCD filter
- minspace Bool Eliminate leading from line spacing
- charset CharSet Unicode chars encoded by the font
- lang String List of RFC-3066-style languages this
- font supports
- fontversion Int Version number of the font
- capability String List of layout capabilities in the font
- embolden Bool Rasterizer should synthetically embolden the font
- </programlisting>
- </refsect2>
- <refsect2>
- <title>Font Matching</title>
- <para>
-Fontconfig performs matching by measuring the distance from a provided
-pattern to all of the available fonts in the system. The closest matching
-font is selected. This ensures that a font will always be returned, but
-doesn't ensure that it is anything like the requested pattern.
- </para><para>
-Font matching starts with an application constructed pattern. The desired
-attributes of the resulting font are collected together in a pattern. Each
-property of the pattern can contain one or more values; these are listed in
-priority order; matches earlier in the list are considered "closer" than
-matches later in the list.
- </para><para>
-The initial pattern is modified by applying the list of editing instructions
-specific to patterns found in the configuration; each consists of a match
-predicate and a set of editing operations. They are executed in the order
-they appeared in the configuration. Each match causes the associated
-sequence of editing operations to be applied.
- </para><para>
-After the pattern has been edited, a sequence of default substitutions are
-performed to canonicalize the set of available properties; this avoids the
-need for the lower layers to constantly provide default values for various
-font properties during rendering.
- </para><para>
-The canonical font pattern is finally matched against all available fonts.
-The distance from the pattern to the font is measured for each of several
-properties: foundry, charset, family, lang, spacing, pixelsize, style,
-slant, weight, antialias, rasterizer and outline. This list is in priority
-order -- results of comparing earlier elements of this list weigh more
-heavily than later elements.
- </para><para>
-There is one special case to this rule; family names are split into two
-bindings; strong and weak. Strong family names are given greater precedence
-in the match than lang elements while weak family names are given lower
-precedence than lang elements. This permits the document language to drive
-font selection when any document specified font is unavailable.
- </para><para>
-The pattern representing that font is augmented to include any properties
-found in the pattern but not found in the font itself; this permits the
-application to pass rendering instructions or any other data through the
-matching system. Finally, the list of editing instructions specific to
-fonts found in the configuration are applied to the pattern. This modified
-pattern is returned to the application.
- </para><para>
-The return value contains sufficient information to locate and rasterize the
-font, including the file name, pixel size and other rendering data. As
-none of the information involved pertains to the FreeType library,
-applications are free to use any rasterization engine or even to take
-the identified font file and access it directly.
- </para><para>
-The match/edit sequences in the configuration are performed in two passes
-because there are essentially two different operations necessary -- the
-first is to modify how fonts are selected; aliasing families and adding
-suitable defaults. The second is to modify how the selected fonts are
-rasterized. Those must apply to the selected font, not the original pattern
-as false matches will often occur.
- </para>
- </refsect2>
- <refsect2><title>Font Names</title>
- <para>
-Fontconfig provides a textual representation for patterns that the library
-can both accept and generate. The representation is in three parts, first a
-list of family names, second a list of point sizes and finally a list of
-additional properties:
- </para>
- <programlisting>
- <families>-<point sizes>:<name1>=<values1>:<name2>=<values2>...
- </programlisting>
- <para>
-Values in a list are separated with commas. The name needn't include either
-families or point sizes; they can be elided. In addition, there are
-symbolic constants that simultaneously indicate both a name and a value.
-Here are some examples:
- </para>
- <programlisting>
- Name Meaning
- ----------------------------------------------------------
- Times-12 12 point Times Roman
- Times-12:bold 12 point Times Bold
- Courier:italic Courier Italic in the default size
- Monospace:matrix=1 .1 0 1 The users preferred monospace font
- with artificial obliquing
- </programlisting>
- <para>
-The '\', '-', ':' and ',' characters in family names must be preceded by a
-'\' character to avoid having them misinterpreted. Similarly, values
-containing '\', '=', '_', ':' and ',' must also have them preceded by a
-'\' character. The '\' characters are stripped out of the family name and
-values as the font name is read.
- </para>
- </refsect2>
-</refsect1>
-<refsect1><title>Debugging Applications</title>
- <para>
-To help diagnose font and applications problems, fontconfig is built with a
-large amount of internal debugging left enabled. It is controlled by means
-of the FC_DEBUG environment variable. The value of this variable is
-interpreted as a number, and each bit within that value controls different
-debugging messages.
- </para>
- <programlisting>
- Name Value Meaning
- ---------------------------------------------------------
- MATCH 1 Brief information about font matching
- MATCHV 2 Extensive font matching information
- EDIT 4 Monitor match/test/edit execution
- FONTSET 8 Track loading of font information at startup
- CACHE 16 Watch cache files being written
- CACHEV 32 Extensive cache file writing information
- PARSE 64 (no longer in use)
- SCAN 128 Watch font files being scanned to build caches
- SCANV 256 Verbose font file scanning information
- MEMORY 512 Monitor fontconfig memory usage
- CONFIG 1024 Monitor which config files are loaded
- LANGSET 2048 Dump char sets used to construct lang values
- OBJTYPES 4096 Display message when value typechecks fail
- </programlisting>
- <para>
-Add the value of the desired debug levels together and assign that (in
-base 10) to the FC_DEBUG environment variable before running the
-application. Output from these statements is sent to stdout.
- </para>
-</refsect1>
-<refsect1><title>Lang Tags</title>
- <para>
-Each font in the database contains a list of languages it supports. This is
-computed by comparing the Unicode coverage of the font with the orthography
-of each language. Languages are tagged using an RFC-3066 compatible naming
-and occur in two parts -- the ISO 639 language tag followed a hyphen and then
-by the ISO 3166 country code. The hyphen and country code may be elided.
- </para><para>
-Fontconfig has orthographies for several languages built into the library.
-No provision has been made for adding new ones aside from rebuilding the
-library. It currently supports 122 of the 139 languages named in ISO 639-1,
-141 of the languages with two-letter codes from ISO 639-2 and another 30
-languages with only three-letter codes. Languages with both two and three
-letter codes are provided with only the two letter code.
- </para><para>
-For languages used in multiple territories with radically different
-character sets, fontconfig includes per-territory orthographies. This
-includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese.
- </para>
-</refsect1>
-<refsect1><title>Configuration File Format</title>
- <para>
-Configuration files for fontconfig are stored in XML format; this
-format makes external configuration tools easier to write and ensures that
-they will generate syntactically correct configuration files. As XML
-files are plain text, they can also be manipulated by the expert user using
-a text editor.
- </para><para>
-The fontconfig document type definition resides in the external entity
-"fonts.dtd"; this is normally stored in the default font configuration
-directory (&confdir;). Each configuration file should contain the
-following structure:
- <programlisting>
- <?xml version="1.0"?>
- <!DOCTYPE fontconfig SYSTEM "fonts.dtd">
- <fontconfig>
- ...
- </fontconfig>
- </programlisting>
- </para>
-<refsect2><title><literal><fontconfig></literal></title><para>
-This is the top level element for a font configuration and can contain
-<literal><dir></literal>, <literal><cache></literal>, <literal><include></literal>, <literal><match></literal> and <literal><alias></literal> elements in any order.
- </para></refsect2>
- <refsect2><title><literal><dir></literal></title><para>
-This element contains a directory name which will be scanned for font files
-to include in the set of available fonts.
- </para></refsect2>
- <refsect2><title><literal><cache></literal></title><para>
-This element contains a file name for the per-user cache of font
-information. If it starts with '~', it refers to a file in the users
-home directory. This file is used to hold information about fonts that
-isn't present in the per-directory cache files. It is automatically
-maintained by the fontconfig library. The default for this file
-is ``~/.fonts.cache-<literal><version></literal>'', where <literal><version></literal> is the font configuration
-file version number (currently 2).
- </para></refsect2>
- <refsect2><title><literal><include ignore_missing="no"></literal></title><para>
-This element contains the name of an additional configuration file or
-directory. If a directory, every file within that directory starting with an
-ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order. When
-the XML datatype is traversed by FcConfigParse, the contents of the file(s)
-will also be incorporated into the configuration by passing the filename(s) to
-FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the
-default "no", a missing file or directory will elicit no warning message from
-the library.
- </para></refsect2>
- <refsect2><title><literal><config></literal></title><para>
-This element provides a place to consolidate additional configuration
-information. <literal><config></literal> can contain <literal><blank></literal> and <literal><rescan></literal> elements in any
-order.
- </para></refsect2>
- <refsect2><title><literal><blank></literal></title><para>
-Fonts often include "broken" glyphs which appear in the encoding but are
-drawn as blanks on the screen. Within the <literal><blank></literal> element, place each
-Unicode characters which is supposed to be blank in an <literal><int></literal> element.
-Characters outside of this set which are drawn as blank will be elided from
-the set of characters supported by the font.
- </para></refsect2>
- <refsect2><title><literal><rescan></literal></title><para>
-The <literal><rescan></literal> element holds an <literal><int></literal> element which indicates the default
-interval between automatic checks for font configuration changes.
-Fontconfig will validate all of the configuration files and directories and
-automatically rebuild the internal datastructures when this interval passes.
- </para></refsect2>
- <refsect2><title><literal><selectfont></literal></title><para>
-This element is used to black/white list fonts from being listed or matched
-against. It holds acceptfont and rejectfont elements.
- </para></refsect2>
- <refsect2><title><literal><acceptfont></literal></title><para>
-Fonts matched by an acceptfont element are "whitelisted"; such fonts are
-explicitly included in the set of fonts used to resolve list and match
-requests; including them in this list protects them from being "blacklisted"
-by a rejectfont element. Acceptfont elements include glob and pattern
-elements which are used to match fonts.
- </para></refsect2>
- <refsect2><title><literal><rejectfont></literal></title><para>
-Fonts matched by an rejectfont element are "blacklisted"; such fonts are
-excluded from the set of fonts used to resolve list and match requests as if
-they didn't exist in the system. Rejectfont elements include glob and
-pattern elements which are used to match fonts.
- </para></refsect2>
- <refsect2><title><literal><glob></literal></title><para>
-Glob elements hold shell-style filename matching patterns (including ? and
-*) which match fonts based on their complete pathnames. This can be used to
-exclude a set of directories (/usr/share/fonts/uglyfont*), or particular
-font file types (*.pcf.gz), but the latter mechanism relies rather heavily
-on filenaming conventions which can't be relied upon. Note that globs
-only apply to directories, not to individual fonts.
- </para></refsect2>
- <refsect2><title><literal><pattern></literal></title><para>
-Pattern elements perform list-style matching on incoming fonts; that is,
-they hold a list of elements and associated values. If all of those
-elements have a matching value, then the pattern matches the font. This can
-be used to select fonts based on attributes of the font (scalable, bold,
-etc), which is a more reliable mechanism than using file extensions.
-Pattern elements include patelt elements.
- </para></refsect2>
- <refsect2><title><literal><patelt name="property"></literal></title><para>
-Patelt elements hold a single pattern element and list of values. They must
-have a 'name' attribute which indicates the pattern element name. Patelt
-elements include int, double, string, matrix, bool, charset and const
-elements.
- </para></refsect2>
- <refsect2><title><literal><match target="pattern"></literal></title><para>
-This element holds first a (possibly empty) list of <literal><test></literal> elements and then
-a (possibly empty) list of <literal><edit></literal> elements. Patterns which match all of the
-tests are subjected to all the edits. If 'target' is set to "font" instead
-of the default "pattern", then this element applies to the font name
-resulting from a match rather than a font pattern to be matched. If 'target'
-is set to "scan", then this element applies when the font is scanned to
-build the fontconfig database.
- </para></refsect2>
- <refsect2><title><literal><test qual="any" name="property" target="default" compare="eq"></literal></title><para>
-This element contains a single value which is compared with the target
-('pattern', 'font', 'scan' or 'default') property "property" (substitute any of the property names seen
-above). 'compare' can be one of "eq", "not_eq", "less", "less_eq", "more", or
-"more_eq". 'qual' may either be the default, "any", in which case the match
-succeeds if any value associated with the property matches the test value, or
-"all", in which case all of the values associated with the property must
-match the test value. When used in a <match target="font"> element,
-the target= attribute in the <test> element selects between matching
-the original pattern or the font. "default" selects whichever target the
-outer <match> element has selected.
- </para></refsect2>
- <refsect2><title><literal><edit name="property" mode="assign" binding="weak"></literal></title><para>
-This element contains a list of expression elements (any of the value or
-operator elements). The expression elements are evaluated at run-time and
-modify the property "property". The modification depends on whether
-"property" was matched by one of the associated <literal><test></literal> elements, if so, the
-modification may affect the first matched value. Any values inserted into
-the property are given the indicated binding ("strong", "weak" or "same")
-with "same" binding using the value from the matched pattern element.
-'mode' is one of:
- <programlisting>
- Mode With Match Without Match
- ---------------------------------------------------------------------
- "assign" Replace matching value Replace all values
- "assign_replace" Replace all values Replace all values
- "prepend" Insert before matching Insert at head of list
- "prepend_first" Insert at head of list Insert at head of list
- "append" Append after matching Append at end of list
- "append_last" Append at end of list Append at end of list
- </programlisting>
- </para></refsect2>
- <refsect2><title><literal><int></literal>, <literal><double></literal>, <literal><string></literal>, <literal><bool></literal></title><para>
-These elements hold a single value of the indicated type. <literal><bool></literal>
-elements hold either true or false. An important limitation exists in
-the parsing of floating point numbers -- fontconfig requires that
-the mantissa start with a digit, not a decimal point, so insert a leading
-zero for purely fractional values (e.g. use 0.5 instead of .5 and -0.5
-instead of -.5).
- </para></refsect2>
- <refsect2><title><literal><matrix></literal></title><para>
-This element holds the four <literal><double></literal> elements of an affine
-transformation.
- </para></refsect2>
- <refsect2><title><literal><range></literal></title><para>
-This element holds the two <literal><int></literal> elements of a range
-representation.
- </para></refsect2>
- <refsect2><title><literal><charset></literal></title><para>
-This element holds at least one <literal><int></literal> element of
-an Unicode code point or more.
- </para></refsect2>
- <refsect2><title><literal><langset></literal></title><para>
-This element holds at least one <literal><string></literal> element of
-a RFC-3066-style languages or more.
- </para></refsect2>
- <refsect2><title><literal><name></literal></title><para>
-Holds a property name. Evaluates to the first value from the property of
-the font, not the pattern.
- </para></refsect2>
- <refsect2><title><literal><const></literal></title><para>
-Holds the name of a constant; these are always integers and serve as
-symbolic names for common font values:
- <programlisting>
- Constant Property Value
- -------------------------------------
- thin weight 0
- extralight weight 40
- ultralight weight 40
- light weight 50
- book weight 75
- regular weight 80
- normal weight 80
- medium weight 100
- demibold weight 180
- semibold weight 180
- bold weight 200
- extrabold weight 205
- black weight 210
- heavy weight 210
- roman slant 0
- italic slant 100
- oblique slant 110
- ultracondensed width 50
- extracondensed width 63
- condensed width 75
- semicondensed width 87
- normal width 100
- semiexpanded width 113
- expanded width 125
- extraexpanded width 150
- ultraexpanded width 200
- proportional spacing 0
- dual spacing 90
- mono spacing 100
- charcell spacing 110
- unknown rgba 0
- rgb rgba 1
- bgr rgba 2
- vrgb rgba 3
- vbgr rgba 4
- none rgba 5
- lcdnone lcdfilter 0
- lcddefault lcdfilter 1
- lcdlight lcdfilter 2
- lcdlegacy lcdfilter 3
- hintnone hintstyle 0
- hintslight hintstyle 1
- hintmedium hintstyle 2
- hintfull hintstyle 3
- </programlisting>
- </para>
- </refsect2>
- <refsect2>
- <title><literal><or></literal>, <literal><and></literal>, <literal><plus></literal>, <literal><minus></literal>, <literal><times></literal>, <literal><divide></literal></title>
- <para>
-These elements perform the specified operation on a list of expression
-elements. <literal><or></literal> and <literal><and></literal> are boolean, not bitwise.
- </para>
- </refsect2>
- <refsect2>
- <title><literal><eq></literal>, <literal><not_eq></literal>, <literal><less></literal>, <literal><less_eq></literal>, <literal><more></literal>, <literal><more_eq></literal></title>
- <para>
-These elements compare two values, producing a boolean result.
- </para></refsect2>
- <refsect2><title><literal><not></literal></title><para>
-Inverts the boolean sense of its one expression element
- </para></refsect2>
- <refsect2><title><literal><if></literal></title><para>
-This element takes three expression elements; if the value of the first is
-true, it produces the value of the second, otherwise it produces the value
-of the third.
- </para></refsect2>
- <refsect2><title><literal><alias></literal></title><para>
-Alias elements provide a shorthand notation for the set of common match
-operations needed to substitute one font family for another. They contain a
-<literal><family></literal> element followed by optional <literal><prefer></literal>, <literal><accept></literal> and <literal><default></literal>
-elements. Fonts matching the <literal><family></literal> element are edited to prepend the
-list of <literal><prefer></literal>ed families before the matching <literal><family></literal>, append the
-<literal><accept></literal>able families after the matching <literal><family></literal> and append the <literal><default></literal>
-families to the end of the family list.
- </para></refsect2>
- <refsect2><title><literal><family></literal></title><para>
-Holds a single font family name
- </para></refsect2>
- <refsect2><title><literal><prefer></literal>, <literal><accept></literal>, <literal><default></literal></title><para>
-These hold a list of <literal><family></literal> elements to be used by the <literal><alias></literal> element.
- </para></refsect2>
-</refsect1>
-<refsect1><title>EXAMPLE CONFIGURATION FILE</title>
- <refsect2><title>System configuration file</title>
- <para>
-This is an example of a system-wide configuration file
- </para>
- <programlisting>
-<?xml version="1.0"?>
-<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-<!-- &confdir;/fonts.conf file to configure system font access -->
-<fontconfig>
-<!--
- Find fonts in these directories
--->
-<dir>/usr/share/fonts</dir>
-<dir>/usr/X11R6/lib/X11/fonts</dir>
-
-<!--
- Accept deprecated 'mono' alias, replacing it with 'monospace'
--->
-<match target="pattern">
- <test qual="any" name="family"><string>mono</string></test>
- <edit name="family" mode="assign"><string>monospace</string></edit>
-</match>
-
-<!--
- Names not including any well known alias are given 'sans'
--->
-<match target="pattern">
- <test qual="all" name="family" mode="not_eq">sans</test>
- <test qual="all" name="family" mode="not_eq">serif</test>
- <test qual="all" name="family" mode="not_eq">monospace</test>
- <edit name="family" mode="append_last"><string>sans</string></edit>
-</match>
-
-<!--
- Load per-user customization file, but don't complain
- if it doesn't exist
--->
-<include ignore_missing="yes">~/.fonts.conf</include>
-
-<!--
- Load local customization files, but don't complain
- if there aren't any
--->
-<include ignore_missing="yes">conf.d</include>
-<include ignore_missing="yes">local.conf</include>
-
-<!--
- Alias well known font names to available TrueType fonts.
- These substitute TrueType faces for similar Type1
- faces to improve screen appearance.
--->
-<alias>
- <family>Times</family>
- <prefer><family>Times New Roman</family></prefer>
- <default><family>serif</family></default>
-</alias>
-<alias>
- <family>Helvetica</family>
- <prefer><family>Arial</family></prefer>
- <default><family>sans</family></default>
-</alias>
-<alias>
- <family>Courier</family>
- <prefer><family>Courier New</family></prefer>
- <default><family>monospace</family></default>
-</alias>
-
-<!--
- Provide required aliases for standard names
- Do these after the users configuration file so that
- any aliases there are used preferentially
--->
-<alias>
- <family>serif</family>
- <prefer><family>Times New Roman</family></prefer>
-</alias>
-<alias>
- <family>sans</family>
- <prefer><family>Arial</family></prefer>
-</alias>
-<alias>
- <family>monospace</family>
- <prefer><family>Andale Mono</family></prefer>
-</alias>
-</fontconfig>
- </programlisting>
- </refsect2>
- <refsect2><title>User configuration file</title>
- <para>
-This is an example of a per-user configuration file that lives in
-~/.fonts.conf
- </para>
- <programlisting>
-<?xml version="1.0"?>
-<!DOCTYPE fontconfig SYSTEM "fonts.dtd">
-<!-- ~/.fonts.conf for per-user font configuration -->
-<fontconfig>
-
-<!--
- Private font directory
--->
-<dir>~/.fonts</dir>
-
-<!--
- use rgb sub-pixel ordering to improve glyph appearance on
- LCD screens. Changes affecting rendering, but not matching
- should always use target="font".
--->
-<match target="font">
- <edit name="rgba" mode="assign"><const>rgb</const></edit>
-</match>
-</fontconfig>
- </programlisting>
- </refsect2>
-</refsect1>
-<refsect1><title>Files</title>
- <para>
-<emphasis>fonts.conf</emphasis>
-contains configuration information for the fontconfig library
-consisting of directories to look at for font information as well as
-instructions on editing program specified font patterns before attempting to
-match the available fonts. It is in XML format.
- </para>
- <para>
-<emphasis>conf.d</emphasis>
-is the conventional name for a directory of additional configuration files
-managed by external applications or the local administrator. The
-filenames starting with decimal digits are sorted in lexicographic order
-and used as additional configuration files. All of these files are in XML
-format. The master fonts.conf file references this directory in an
-<include> directive.
- </para>
- <para>
-<emphasis>fonts.dtd</emphasis>
-is a DTD that describes the format of the configuration files.
- </para>
- <para>
-<emphasis>~/.fonts.conf.d</emphasis>
-is the conventional name for a per-user directory of (typically
-auto-generated) configuration files, although the
-actual location is specified in the global fonts.conf file.
- </para>
- <para>
-<emphasis>~/.fonts.conf</emphasis>
-is the conventional location for per-user font configuration, although the
-actual location is specified in the global fonts.conf file.
- </para>
- <para>
-<emphasis> ~/.fonts.cache-*</emphasis>
-is the conventional repository of font information that isn't found in the
-per-directory caches. This file is automatically maintained by fontconfig.
- </para>
-</refsect1>
-<refsect1><title>See Also</title>
- <para>
-fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1)
- </para>
-</refsect1>
-<refsect1><title>Version</title>
- <para>
-Fontconfig version &version;
- </para>
-</refsect1>
-</refentry>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook V3.1//EN" [ +<!ENTITY version SYSTEM "version.sgml"> +<!ENTITY confdir SYSTEM "confdir.sgml"> +]> +<!-- + Copyright © 2003 Keith Packard + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of the author(s) not be used in + advertising or publicity pertaining to distribution of the software without + specific, written prior permission. The authors make no + representations about the suitability of this software for any purpose. It + is provided "as is" without express or implied warranty. + + THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. +--> +<refentry> +<refmeta> + <refentrytitle>fonts-conf</refentrytitle> + <manvolnum>5</manvolnum> +</refmeta> +<refnamediv> + <refname>fonts.conf</refname> + <refpurpose>Font configuration files</refpurpose> +</refnamediv> +<refsynopsisdiv> +<synopsis> + &confdir;/fonts.conf + &confdir;/fonts.dtd + &confdir;/conf.d + ~/.fonts.conf.d + ~/.fonts.conf +</synopsis> +</refsynopsisdiv> +<refsect1><title>Description</title> + <para> +Fontconfig is a library designed to provide system-wide font configuration, +customization and application access. + </para> +</refsect1> +<refsect1><title>Functional Overview</title> + <para> +Fontconfig contains two essential modules, the configuration module which +builds an internal configuration from XML files and the matching module +which accepts font patterns and returns the nearest matching font. + </para> + <refsect2><title>Font Configuration</title> + <para> +The configuration module consists of the FcConfig datatype, libexpat and +FcConfigParse which walks over an XML tree and amends a configuration with +data found within. From an external perspective, configuration of the +library consists of generating a valid XML tree and feeding that to +FcConfigParse. The only other mechanism provided to applications for +changing the running configuration is to add fonts and directories to the +list of application-provided font files. + </para><para> +The intent is to make font configurations relatively static, and shared by +as many applications as possible. It is hoped that this will lead to more +stable font selection when passing names from one application to another. +XML was chosen as a configuration file format because it provides a format +which is easy for external agents to edit while retaining the correct +structure and syntax. + </para><para> +Font configuration is separate from font matching; applications needing to +do their own matching can access the available fonts from the library and +perform private matching. The intent is to permit applications to pick and +choose appropriate functionality from the library instead of forcing them to +choose between this library and a private configuration mechanism. The hope +is that this will ensure that configuration of fonts for all applications +can be centralized in one place. Centralizing font configuration will +simplify and regularize font installation and customization. + </para> + </refsect2> + <refsect2> + <title>Font Properties</title> + <para> +While font patterns may contain essentially any properties, there are some +well known properties with associated types. Fontconfig uses some of these +properties for font matching and font completion. Others are provided as a +convenience for the applications' rendering mechanism. + </para> + <programlisting> + Property Type Description + -------------------------------------------------------------- + family String Font family names + familylang String Languages corresponding to each family + style String Font style. Overrides weight and slant + stylelang String Languages corresponding to each style + fullname String Font full names (often includes style) + fullnamelang String Languages corresponding to each fullname + slant Int Italic, oblique or roman + weight Int Light, medium, demibold, bold or black + size Double Point size + width Int Condensed, normal or expanded + aspect Double Stretches glyphs horizontally before hinting + pixelsize Double Pixel size + spacing Int Proportional, dual-width, monospace or charcell + foundry String Font foundry name + antialias Bool Whether glyphs can be antialiased + hinting Bool Whether the rasterizer should use hinting + hintstyle Int Automatic hinting style + verticallayout Bool Use vertical layout + autohint Bool Use autohinter instead of normal hinter + globaladvance Bool Use font global advance data + file String The filename holding the font + index Int The index of the font within the file + ftface FT_Face Use the specified FreeType face object + rasterizer String Which rasterizer is in use + outline Bool Whether the glyphs are outlines + scalable Bool Whether glyphs can be scaled + scale Double Scale factor for point->pixel conversions + dpi Double Target dots per inch + rgba Int unknown, rgb, bgr, vrgb, vbgr, + none - subpixel geometry + lcdfilter Int Type of LCD filter + minspace Bool Eliminate leading from line spacing + charset CharSet Unicode chars encoded by the font + lang String List of RFC-3066-style languages this + font supports + fontversion Int Version number of the font + capability String List of layout capabilities in the font + embolden Bool Rasterizer should synthetically embolden the font + </programlisting> + </refsect2> + <refsect2> + <title>Font Matching</title> + <para> +Fontconfig performs matching by measuring the distance from a provided +pattern to all of the available fonts in the system. The closest matching +font is selected. This ensures that a font will always be returned, but +doesn't ensure that it is anything like the requested pattern. + </para><para> +Font matching starts with an application constructed pattern. The desired +attributes of the resulting font are collected together in a pattern. Each +property of the pattern can contain one or more values; these are listed in +priority order; matches earlier in the list are considered "closer" than +matches later in the list. + </para><para> +The initial pattern is modified by applying the list of editing instructions +specific to patterns found in the configuration; each consists of a match +predicate and a set of editing operations. They are executed in the order +they appeared in the configuration. Each match causes the associated +sequence of editing operations to be applied. + </para><para> +After the pattern has been edited, a sequence of default substitutions are +performed to canonicalize the set of available properties; this avoids the +need for the lower layers to constantly provide default values for various +font properties during rendering. + </para><para> +The canonical font pattern is finally matched against all available fonts. +The distance from the pattern to the font is measured for each of several +properties: foundry, charset, family, lang, spacing, pixelsize, style, +slant, weight, antialias, rasterizer and outline. This list is in priority +order -- results of comparing earlier elements of this list weigh more +heavily than later elements. + </para><para> +There is one special case to this rule; family names are split into two +bindings; strong and weak. Strong family names are given greater precedence +in the match than lang elements while weak family names are given lower +precedence than lang elements. This permits the document language to drive +font selection when any document specified font is unavailable. + </para><para> +The pattern representing that font is augmented to include any properties +found in the pattern but not found in the font itself; this permits the +application to pass rendering instructions or any other data through the +matching system. Finally, the list of editing instructions specific to +fonts found in the configuration are applied to the pattern. This modified +pattern is returned to the application. + </para><para> +The return value contains sufficient information to locate and rasterize the +font, including the file name, pixel size and other rendering data. As +none of the information involved pertains to the FreeType library, +applications are free to use any rasterization engine or even to take +the identified font file and access it directly. + </para><para> +The match/edit sequences in the configuration are performed in two passes +because there are essentially two different operations necessary -- the +first is to modify how fonts are selected; aliasing families and adding +suitable defaults. The second is to modify how the selected fonts are +rasterized. Those must apply to the selected font, not the original pattern +as false matches will often occur. + </para> + </refsect2> + <refsect2><title>Font Names</title> + <para> +Fontconfig provides a textual representation for patterns that the library +can both accept and generate. The representation is in three parts, first a +list of family names, second a list of point sizes and finally a list of +additional properties: + </para> + <programlisting> + <families>-<point sizes>:<name1>=<values1>:<name2>=<values2>... + </programlisting> + <para> +Values in a list are separated with commas. The name needn't include either +families or point sizes; they can be elided. In addition, there are +symbolic constants that simultaneously indicate both a name and a value. +Here are some examples: + </para> + <programlisting> + Name Meaning + ---------------------------------------------------------- + Times-12 12 point Times Roman + Times-12:bold 12 point Times Bold + Courier:italic Courier Italic in the default size + Monospace:matrix=1 .1 0 1 The users preferred monospace font + with artificial obliquing + </programlisting> + <para> +The '\', '-', ':' and ',' characters in family names must be preceded by a +'\' character to avoid having them misinterpreted. Similarly, values +containing '\', '=', '_', ':' and ',' must also have them preceded by a +'\' character. The '\' characters are stripped out of the family name and +values as the font name is read. + </para> + </refsect2> +</refsect1> +<refsect1><title>Debugging Applications</title> + <para> +To help diagnose font and applications problems, fontconfig is built with a +large amount of internal debugging left enabled. It is controlled by means +of the FC_DEBUG environment variable. The value of this variable is +interpreted as a number, and each bit within that value controls different +debugging messages. + </para> + <programlisting> + Name Value Meaning + --------------------------------------------------------- + MATCH 1 Brief information about font matching + MATCHV 2 Extensive font matching information + EDIT 4 Monitor match/test/edit execution + FONTSET 8 Track loading of font information at startup + CACHE 16 Watch cache files being written + CACHEV 32 Extensive cache file writing information + PARSE 64 (no longer in use) + SCAN 128 Watch font files being scanned to build caches + SCANV 256 Verbose font file scanning information + MEMORY 512 Monitor fontconfig memory usage + CONFIG 1024 Monitor which config files are loaded + LANGSET 2048 Dump char sets used to construct lang values + OBJTYPES 4096 Display message when value typechecks fail + </programlisting> + <para> +Add the value of the desired debug levels together and assign that (in +base 10) to the FC_DEBUG environment variable before running the +application. Output from these statements is sent to stdout. + </para> +</refsect1> +<refsect1><title>Lang Tags</title> + <para> +Each font in the database contains a list of languages it supports. This is +computed by comparing the Unicode coverage of the font with the orthography +of each language. Languages are tagged using an RFC-3066 compatible naming +and occur in two parts -- the ISO 639 language tag followed a hyphen and then +by the ISO 3166 country code. The hyphen and country code may be elided. + </para><para> +Fontconfig has orthographies for several languages built into the library. +No provision has been made for adding new ones aside from rebuilding the +library. It currently supports 122 of the 139 languages named in ISO 639-1, +141 of the languages with two-letter codes from ISO 639-2 and another 30 +languages with only three-letter codes. Languages with both two and three +letter codes are provided with only the two letter code. + </para><para> +For languages used in multiple territories with radically different +character sets, fontconfig includes per-territory orthographies. This +includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese. + </para> +</refsect1> +<refsect1><title>Configuration File Format</title> + <para> +Configuration files for fontconfig are stored in XML format; this +format makes external configuration tools easier to write and ensures that +they will generate syntactically correct configuration files. As XML +files are plain text, they can also be manipulated by the expert user using +a text editor. + </para><para> +The fontconfig document type definition resides in the external entity +"fonts.dtd"; this is normally stored in the default font configuration +directory (&confdir;). Each configuration file should contain the +following structure: + <programlisting> + <?xml version="1.0"?> + <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> + <fontconfig> + ... + </fontconfig> + </programlisting> + </para> +<refsect2><title><literal><fontconfig></literal></title><para> +This is the top level element for a font configuration and can contain +<literal><dir></literal>, <literal><cache></literal>, <literal><include></literal>, <literal><match></literal> and <literal><alias></literal> elements in any order. + </para></refsect2> + <refsect2><title><literal><dir></literal></title><para> +This element contains a directory name which will be scanned for font files +to include in the set of available fonts. + </para></refsect2> + <refsect2><title><literal><cache></literal></title><para> +This element contains a file name for the per-user cache of font +information. If it starts with '~', it refers to a file in the users +home directory. This file is used to hold information about fonts that +isn't present in the per-directory cache files. It is automatically +maintained by the fontconfig library. The default for this file +is ``~/.fonts.cache-<literal><version></literal>'', where <literal><version></literal> is the font configuration +file version number (currently 2). + </para></refsect2> + <refsect2><title><literal><include ignore_missing="no"></literal></title><para> +This element contains the name of an additional configuration file or +directory. If a directory, every file within that directory starting with an +ASCII digit (U+0030 - U+0039) and ending with the string ``.conf'' will be processed in sorted order. When +the XML datatype is traversed by FcConfigParse, the contents of the file(s) +will also be incorporated into the configuration by passing the filename(s) to +FcConfigLoadAndParse. If 'ignore_missing' is set to "yes" instead of the +default "no", a missing file or directory will elicit no warning message from +the library. + </para></refsect2> + <refsect2><title><literal><config></literal></title><para> +This element provides a place to consolidate additional configuration +information. <literal><config></literal> can contain <literal><blank></literal> and <literal><rescan></literal> elements in any +order. + </para></refsect2> + <refsect2><title><literal><blank></literal></title><para> +Fonts often include "broken" glyphs which appear in the encoding but are +drawn as blanks on the screen. Within the <literal><blank></literal> element, place each +Unicode characters which is supposed to be blank in an <literal><int></literal> element. +Characters outside of this set which are drawn as blank will be elided from +the set of characters supported by the font. + </para></refsect2> + <refsect2><title><literal><rescan></literal></title><para> +The <literal><rescan></literal> element holds an <literal><int></literal> element which indicates the default +interval between automatic checks for font configuration changes. +Fontconfig will validate all of the configuration files and directories and +automatically rebuild the internal datastructures when this interval passes. + </para></refsect2> + <refsect2><title><literal><selectfont></literal></title><para> +This element is used to black/white list fonts from being listed or matched +against. It holds acceptfont and rejectfont elements. + </para></refsect2> + <refsect2><title><literal><acceptfont></literal></title><para> +Fonts matched by an acceptfont element are "whitelisted"; such fonts are +explicitly included in the set of fonts used to resolve list and match +requests; including them in this list protects them from being "blacklisted" +by a rejectfont element. Acceptfont elements include glob and pattern +elements which are used to match fonts. + </para></refsect2> + <refsect2><title><literal><rejectfont></literal></title><para> +Fonts matched by an rejectfont element are "blacklisted"; such fonts are +excluded from the set of fonts used to resolve list and match requests as if +they didn't exist in the system. Rejectfont elements include glob and +pattern elements which are used to match fonts. + </para></refsect2> + <refsect2><title><literal><glob></literal></title><para> +Glob elements hold shell-style filename matching patterns (including ? and +*) which match fonts based on their complete pathnames. This can be used to +exclude a set of directories (/usr/share/fonts/uglyfont*), or particular +font file types (*.pcf.gz), but the latter mechanism relies rather heavily +on filenaming conventions which can't be relied upon. Note that globs +only apply to directories, not to individual fonts. + </para></refsect2> + <refsect2><title><literal><pattern></literal></title><para> +Pattern elements perform list-style matching on incoming fonts; that is, +they hold a list of elements and associated values. If all of those +elements have a matching value, then the pattern matches the font. This can +be used to select fonts based on attributes of the font (scalable, bold, +etc), which is a more reliable mechanism than using file extensions. +Pattern elements include patelt elements. + </para></refsect2> + <refsect2><title><literal><patelt name="property"></literal></title><para> +Patelt elements hold a single pattern element and list of values. They must +have a 'name' attribute which indicates the pattern element name. Patelt +elements include int, double, string, matrix, bool, charset and const +elements. + </para></refsect2> + <refsect2><title><literal><match target="pattern"></literal></title><para> +This element holds first a (possibly empty) list of <literal><test></literal> elements and then +a (possibly empty) list of <literal><edit></literal> elements. Patterns which match all of the +tests are subjected to all the edits. If 'target' is set to "font" instead +of the default "pattern", then this element applies to the font name +resulting from a match rather than a font pattern to be matched. If 'target' +is set to "scan", then this element applies when the font is scanned to +build the fontconfig database. + </para></refsect2> + <refsect2><title><literal><test qual="any" name="property" target="default" compare="eq"></literal></title><para> +This element contains a single value which is compared with the target +('pattern', 'font', 'scan' or 'default') property "property" (substitute any of the property names seen +above). 'compare' can be one of "eq", "not_eq", "less", "less_eq", "more", or +"more_eq". 'qual' may either be the default, "any", in which case the match +succeeds if any value associated with the property matches the test value, or +"all", in which case all of the values associated with the property must +match the test value. When used in a <match target="font"> element, +the target= attribute in the <test> element selects between matching +the original pattern or the font. "default" selects whichever target the +outer <match> element has selected. + </para></refsect2> + <refsect2><title><literal><edit name="property" mode="assign" binding="weak"></literal></title><para> +This element contains a list of expression elements (any of the value or +operator elements). The expression elements are evaluated at run-time and +modify the property "property". The modification depends on whether +"property" was matched by one of the associated <literal><test></literal> elements, if so, the +modification may affect the first matched value. Any values inserted into +the property are given the indicated binding ("strong", "weak" or "same") +with "same" binding using the value from the matched pattern element. +'mode' is one of: + <programlisting> + Mode With Match Without Match + --------------------------------------------------------------------- + "assign" Replace matching value Replace all values + "assign_replace" Replace all values Replace all values + "prepend" Insert before matching Insert at head of list + "prepend_first" Insert at head of list Insert at head of list + "append" Append after matching Append at end of list + "append_last" Append at end of list Append at end of list + </programlisting> + </para></refsect2> + <refsect2><title><literal><int></literal>, <literal><double></literal>, <literal><string></literal>, <literal><bool></literal></title><para> +These elements hold a single value of the indicated type. <literal><bool></literal> +elements hold either true or false. An important limitation exists in +the parsing of floating point numbers -- fontconfig requires that +the mantissa start with a digit, not a decimal point, so insert a leading +zero for purely fractional values (e.g. use 0.5 instead of .5 and -0.5 +instead of -.5). + </para></refsect2> + <refsect2><title><literal><matrix></literal></title><para> +This element holds the four <literal><double></literal> elements of an affine +transformation. + </para></refsect2> + <refsect2><title><literal><range></literal></title><para> +This element holds the two <literal><int></literal> elements of a range +representation. + </para></refsect2> + <refsect2><title><literal><charset></literal></title><para> +This element holds at least one <literal><int></literal> element of +an Unicode code point or more. + </para></refsect2> + <refsect2><title><literal><langset></literal></title><para> +This element holds at least one <literal><string></literal> element of +a RFC-3066-style languages or more. + </para></refsect2> + <refsect2><title><literal><name></literal></title><para> +Holds a property name. Evaluates to the first value from the property of +the font, not the pattern. + </para></refsect2> + <refsect2><title><literal><const></literal></title><para> +Holds the name of a constant; these are always integers and serve as +symbolic names for common font values: + <programlisting> + Constant Property Value + ------------------------------------- + thin weight 0 + extralight weight 40 + ultralight weight 40 + light weight 50 + book weight 75 + regular weight 80 + normal weight 80 + medium weight 100 + demibold weight 180 + semibold weight 180 + bold weight 200 + extrabold weight 205 + black weight 210 + heavy weight 210 + roman slant 0 + italic slant 100 + oblique slant 110 + ultracondensed width 50 + extracondensed width 63 + condensed width 75 + semicondensed width 87 + normal width 100 + semiexpanded width 113 + expanded width 125 + extraexpanded width 150 + ultraexpanded width 200 + proportional spacing 0 + dual spacing 90 + mono spacing 100 + charcell spacing 110 + unknown rgba 0 + rgb rgba 1 + bgr rgba 2 + vrgb rgba 3 + vbgr rgba 4 + none rgba 5 + lcdnone lcdfilter 0 + lcddefault lcdfilter 1 + lcdlight lcdfilter 2 + lcdlegacy lcdfilter 3 + hintnone hintstyle 0 + hintslight hintstyle 1 + hintmedium hintstyle 2 + hintfull hintstyle 3 + </programlisting> + </para> + </refsect2> + <refsect2> + <title><literal><or></literal>, <literal><and></literal>, <literal><plus></literal>, <literal><minus></literal>, <literal><times></literal>, <literal><divide></literal></title> + <para> +These elements perform the specified operation on a list of expression +elements. <literal><or></literal> and <literal><and></literal> are boolean, not bitwise. + </para> + </refsect2> + <refsect2> + <title><literal><eq></literal>, <literal><not_eq></literal>, <literal><less></literal>, <literal><less_eq></literal>, <literal><more></literal>, <literal><more_eq></literal></title> + <para> +These elements compare two values, producing a boolean result. + </para></refsect2> + <refsect2><title><literal><not></literal></title><para> +Inverts the boolean sense of its one expression element + </para></refsect2> + <refsect2><title><literal><if></literal></title><para> +This element takes three expression elements; if the value of the first is +true, it produces the value of the second, otherwise it produces the value +of the third. + </para></refsect2> + <refsect2><title><literal><alias></literal></title><para> +Alias elements provide a shorthand notation for the set of common match +operations needed to substitute one font family for another. They contain a +<literal><family></literal> element followed by optional <literal><prefer></literal>, <literal><accept></literal> and <literal><default></literal> +elements. Fonts matching the <literal><family></literal> element are edited to prepend the +list of <literal><prefer></literal>ed families before the matching <literal><family></literal>, append the +<literal><accept></literal>able families after the matching <literal><family></literal> and append the <literal><default></literal> +families to the end of the family list. + </para></refsect2> + <refsect2><title><literal><family></literal></title><para> +Holds a single font family name + </para></refsect2> + <refsect2><title><literal><prefer></literal>, <literal><accept></literal>, <literal><default></literal></title><para> +These hold a list of <literal><family></literal> elements to be used by the <literal><alias></literal> element. + </para></refsect2> +</refsect1> +<refsect1><title>EXAMPLE CONFIGURATION FILE</title> + <refsect2><title>System configuration file</title> + <para> +This is an example of a system-wide configuration file + </para> + <programlisting> +<?xml version="1.0"?> +<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> +<!-- &confdir;/fonts.conf file to configure system font access --> +<fontconfig> +<!-- + Find fonts in these directories +--> +<dir>/usr/share/fonts</dir> +<dir>/usr/X11R6/lib/X11/fonts</dir> + +<!-- + Accept deprecated 'mono' alias, replacing it with 'monospace' +--> +<match target="pattern"> + <test qual="any" name="family"><string>mono</string></test> + <edit name="family" mode="assign"><string>monospace</string></edit> +</match> + +<!-- + Names not including any well known alias are given 'sans' +--> +<match target="pattern"> + <test qual="all" name="family" mode="not_eq">sans</test> + <test qual="all" name="family" mode="not_eq">serif</test> + <test qual="all" name="family" mode="not_eq">monospace</test> + <edit name="family" mode="append_last"><string>sans</string></edit> +</match> + +<!-- + Load per-user customization file, but don't complain + if it doesn't exist +--> +<include ignore_missing="yes">~/.fonts.conf</include> + +<!-- + Load local customization files, but don't complain + if there aren't any +--> +<include ignore_missing="yes">conf.d</include> +<include ignore_missing="yes">local.conf</include> + +<!-- + Alias well known font names to available TrueType fonts. + These substitute TrueType faces for similar Type1 + faces to improve screen appearance. +--> +<alias> + <family>Times</family> + <prefer><family>Times New Roman</family></prefer> + <default><family>serif</family></default> +</alias> +<alias> + <family>Helvetica</family> + <prefer><family>Arial</family></prefer> + <default><family>sans</family></default> +</alias> +<alias> + <family>Courier</family> + <prefer><family>Courier New</family></prefer> + <default><family>monospace</family></default> +</alias> + +<!-- + Provide required aliases for standard names + Do these after the users configuration file so that + any aliases there are used preferentially +--> +<alias> + <family>serif</family> + <prefer><family>Times New Roman</family></prefer> +</alias> +<alias> + <family>sans</family> + <prefer><family>Arial</family></prefer> +</alias> +<alias> + <family>monospace</family> + <prefer><family>Andale Mono</family></prefer> +</alias> +</fontconfig> + </programlisting> + </refsect2> + <refsect2><title>User configuration file</title> + <para> +This is an example of a per-user configuration file that lives in +~/.fonts.conf + </para> + <programlisting> +<?xml version="1.0"?> +<!DOCTYPE fontconfig SYSTEM "fonts.dtd"> +<!-- ~/.fonts.conf for per-user font configuration --> +<fontconfig> + +<!-- + Private font directory +--> +<dir>~/.fonts</dir> + +<!-- + use rgb sub-pixel ordering to improve glyph appearance on + LCD screens. Changes affecting rendering, but not matching + should always use target="font". +--> +<match target="font"> + <edit name="rgba" mode="assign"><const>rgb</const></edit> +</match> +</fontconfig> + </programlisting> + </refsect2> +</refsect1> +<refsect1><title>Files</title> + <para> +<emphasis>fonts.conf</emphasis> +contains configuration information for the fontconfig library +consisting of directories to look at for font information as well as +instructions on editing program specified font patterns before attempting to +match the available fonts. It is in XML format. + </para> + <para> +<emphasis>conf.d</emphasis> +is the conventional name for a directory of additional configuration files +managed by external applications or the local administrator. The +filenames starting with decimal digits are sorted in lexicographic order +and used as additional configuration files. All of these files are in XML +format. The master fonts.conf file references this directory in an +<include> directive. + </para> + <para> +<emphasis>fonts.dtd</emphasis> +is a DTD that describes the format of the configuration files. + </para> + <para> +<emphasis>~/.fonts.conf.d</emphasis> +is the conventional name for a per-user directory of (typically +auto-generated) configuration files, although the +actual location is specified in the global fonts.conf file. + </para> + <para> +<emphasis>~/.fonts.conf</emphasis> +is the conventional location for per-user font configuration, although the +actual location is specified in the global fonts.conf file. + </para> + <para> +<emphasis> ~/.fonts.cache-*</emphasis> +is the conventional repository of font information that isn't found in the +per-directory caches. This file is automatically maintained by fontconfig. + </para> +</refsect1> +<refsect1><title>See Also</title> + <para> +fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1) + </para> +</refsect1> +<refsect1><title>Version</title> + <para> +Fontconfig version &version; + </para> +</refsect1> +</refentry> diff --git a/fontconfig/doc/func.sgml b/fontconfig/doc/func.sgml index 7fb38ab4a..88be32047 100644 --- a/fontconfig/doc/func.sgml +++ b/fontconfig/doc/func.sgml @@ -1,90 +1,90 @@ -<!--
- fontconfig/doc/func.sgml
-
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of the author(s) not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. The authors make no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
- -->
-@?TITLE@
- <refentry id="@TITLE@">
-@:@
- <refentry id="@FUNC@">
-@;@
- <refmeta>
-@?TITLE@
- <refentrytitle>@TITLE@</refentrytitle>
-@:@
- <refentrytitle>@FUNC@</refentrytitle>
-@;@
- <manvolnum>3</manvolnum>
- </refmeta>
- <refnamediv>
-@{PROTOTYPE@
- <refname>@FUNC@</refname>
-@}PROTOTYPE@
- <refpurpose>@PURPOSE@</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <funcsynopsis>
- <funcsynopsisinfo>
-@?SYNOPSIS@
-@SYNOPSIS@
-@:@
-#include <fontconfig.h>
-@;@
- </funcsynopsisinfo>
-@{PROTOTYPE@
- <funcprototype>
- <funcdef>@?RET@@RET@@:@void@;@ <function>@FUNC@</function></funcdef>
-@?TYPE1@
- <paramdef>@TYPE1@<parameter>@ARG1@</parameter></paramdef>
-@;@
-@?TYPE2@
- <paramdef>@TYPE2@<parameter>@ARG2@</parameter></paramdef>
-@;@
-@?TYPE3@
- <paramdef>@TYPE3@<parameter>@ARG3@</parameter></paramdef>
-@;@
-@?TYPE4@
- <paramdef>@TYPE4@<parameter>@ARG4@</parameter></paramdef>
-@;@
-@?TYPE5@
- <paramdef>@TYPE5@<parameter>@ARG5@</parameter></paramdef>
-@;@
-@?TYPE6@
- <paramdef>@TYPE6@<parameter>@ARG6@</parameter></paramdef>
-@;@
-@?TYPE7@
- <paramdef>@TYPE7@<parameter>@ARG7@</parameter></paramdef>
-@;@
- </funcprototype>
-@}PROTOTYPE@
- </funcsynopsis>
- </refsynopsisdiv>
- <refsect1><title>Description</title>
- <para>
-@DESC@
- </para>
- </refsect1>
- <refsect1><title>Version</title>
- <para>
-Fontconfig version &version;
- </para>
- </refsect1>
- </refentry>
+<!-- + fontconfig/doc/func.sgml + + Copyright © 2003 Keith Packard + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of the author(s) not be used in + advertising or publicity pertaining to distribution of the software without + specific, written prior permission. The authors make no + representations about the suitability of this software for any purpose. It + is provided "as is" without express or implied warranty. + + THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + --> +@?TITLE@ + <refentry id="@TITLE@"> +@:@ + <refentry id="@FUNC@"> +@;@ + <refmeta> +@?TITLE@ + <refentrytitle>@TITLE@</refentrytitle> +@:@ + <refentrytitle>@FUNC@</refentrytitle> +@;@ + <manvolnum>3</manvolnum> + </refmeta> + <refnamediv> +@{PROTOTYPE@ + <refname>@FUNC@</refname> +@}PROTOTYPE@ + <refpurpose>@PURPOSE@</refpurpose> + </refnamediv> + <refsynopsisdiv> + <funcsynopsis> + <funcsynopsisinfo> +@?SYNOPSIS@ +@SYNOPSIS@ +@:@ +#include <fontconfig.h> +@;@ + </funcsynopsisinfo> +@{PROTOTYPE@ + <funcprototype> + <funcdef>@?RET@@RET@@:@void@;@ <function>@FUNC@</function></funcdef> +@?TYPE1@ + <paramdef>@TYPE1@<parameter>@ARG1@</parameter></paramdef> +@;@ +@?TYPE2@ + <paramdef>@TYPE2@<parameter>@ARG2@</parameter></paramdef> +@;@ +@?TYPE3@ + <paramdef>@TYPE3@<parameter>@ARG3@</parameter></paramdef> +@;@ +@?TYPE4@ + <paramdef>@TYPE4@<parameter>@ARG4@</parameter></paramdef> +@;@ +@?TYPE5@ + <paramdef>@TYPE5@<parameter>@ARG5@</parameter></paramdef> +@;@ +@?TYPE6@ + <paramdef>@TYPE6@<parameter>@ARG6@</parameter></paramdef> +@;@ +@?TYPE7@ + <paramdef>@TYPE7@<parameter>@ARG7@</parameter></paramdef> +@;@ + </funcprototype> +@}PROTOTYPE@ + </funcsynopsis> + </refsynopsisdiv> + <refsect1><title>Description</title> + <para> +@DESC@ + </para> + </refsect1> + <refsect1><title>Version</title> + <para> +Fontconfig version &version; + </para> + </refsect1> + </refentry> diff --git a/fontconfig/doc/version.sgml.in b/fontconfig/doc/version.sgml.in index 95d4088ad..13315ba6d 100644 --- a/fontconfig/doc/version.sgml.in +++ b/fontconfig/doc/version.sgml.in @@ -1,24 +1,24 @@ -<!--
- fontconfig/doc/version.sgml.in
-
- Copyright © 2003 Keith Packard
-
- Permission to use, copy, modify, distribute, and sell this software and its
- documentation for any purpose is hereby granted without fee, provided that
- the above copyright notice appear in all copies and that both that
- copyright notice and this permission notice appear in supporting
- documentation, and that the name of the author(s) not be used in
- advertising or publicity pertaining to distribution of the software without
- specific, written prior permission. The authors make no
- representations about the suitability of this software for any purpose. It
- is provided "as is" without express or implied warranty.
-
- THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
--->
-@VERSION@
+<!-- + fontconfig/doc/version.sgml.in + + Copyright © 2003 Keith Packard + + Permission to use, copy, modify, distribute, and sell this software and its + documentation for any purpose is hereby granted without fee, provided that + the above copyright notice appear in all copies and that both that + copyright notice and this permission notice appear in supporting + documentation, and that the name of the author(s) not be used in + advertising or publicity pertaining to distribution of the software without + specific, written prior permission. The authors make no + representations about the suitability of this software for any purpose. It + is provided "as is" without express or implied warranty. + + THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. +--> +@VERSION@ diff --git a/fontconfig/fc-cache/Makefile.am b/fontconfig/fc-cache/Makefile.am index 4402d8952..300c96697 100644 --- a/fontconfig/fc-cache/Makefile.am +++ b/fontconfig/fc-cache/Makefile.am @@ -1,68 +1,68 @@ -#
-# fontconfig/fc-cache/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC2MAN = docbook2man
-
-FC_CACHE_SRC=${top_srcdir}/fc-cache
-
-SGML = ${FC_CACHE_SRC}/fc-cache.sgml
-
-if OS_WIN32
-else
-install-data-local:
- -$(mkinstalldirs) "$(DESTDIR)$(fc_cachedir)"
-
-uninstall-local:
- -$(RM) -rf "$(DESTDIR)$(fc_cachedir)"
-endif
-
-INCLUDES=-I${top_srcdir} -I${top_srcdir}/src $(WARN_CFLAGS)
-
-bin_PROGRAMS=fc-cache
-
-BUILT_MANS=fc-cache.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-cache.sgml $(BUILT_MANS)
-
-fc_cache_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+# +# fontconfig/fc-cache/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC2MAN = docbook2man + +FC_CACHE_SRC=${top_srcdir}/fc-cache + +SGML = ${FC_CACHE_SRC}/fc-cache.sgml + +if OS_WIN32 +else +install-data-local: + -$(mkinstalldirs) "$(DESTDIR)$(fc_cachedir)" + +uninstall-local: + -$(RM) -rf "$(DESTDIR)$(fc_cachedir)" +endif + +INCLUDES=-I${top_srcdir} -I${top_srcdir}/src $(WARN_CFLAGS) + +bin_PROGRAMS=fc-cache + +BUILT_MANS=fc-cache.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-cache.sgml $(BUILT_MANS) + +fc_cache_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-cache/fc-cache.c b/fontconfig/fc-cache/fc-cache.c index c7dcbbfd7..d2653507e 100644 --- a/fontconfig/fc-cache/fc-cache.c +++ b/fontconfig/fc-cache/fc-cache.c @@ -1,472 +1,472 @@ -/*
- * fontconfig/fc-cache/fc-cache.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "../src/fcarch.h"
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <string.h>
-
-#if defined (_WIN32)
-#define STRICT
-#include <windows.h>
-#define sleep(x) Sleep((x) * 1000)
-#undef STRICT
-#endif
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-const struct option longopts[] = {
- {"force", 0, 0, 'f'},
- {"really-force", 0, 0, 'r'},
- {"system-only", 0, 0, 's'},
- {"version", 0, 0, 'V'},
- {"verbose", 0, 0, 'v'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-frsvVh] [--force|--really-force] [--system-only] [--verbose] [--version] [--help] [dirs]\n",
- program);
-#else
- fprintf (file, "usage: %s [-frsvVh] [dirs]\n",
- program);
-#endif
- fprintf (file, "Build font information caches in [dirs]\n"
- "(all directories in font configuration by default).\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -f, --force scan directories with apparently valid caches\n");
- fprintf (file, " -r, --really-force erase all existing caches, then rescan\n");
- fprintf (file, " -s, --system-only scan system-wide directories only\n");
- fprintf (file, " -v, --verbose display status information while busy\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -f (force) scan directories with apparently valid caches\n");
- fprintf (file, " -r, (really force) erase all existing caches, then rescan\n");
- fprintf (file, " -s (system) scan system-wide directories only\n");
- fprintf (file, " -v (verbose) display status information while busy\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-static FcStrSet *processed_dirs;
-
-static int
-scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, int *changed)
-{
- int ret = 0;
- const FcChar8 *dir;
- FcStrSet *subdirs;
- FcStrList *sublist;
- FcCache *cache;
- struct stat statb;
- FcBool was_valid;
- int i;
-
- /*
- * Now scan all of the directories into separate databases
- * and write out the results
- */
- while ((dir = FcStrListNext (list)))
- {
- if (verbose)
- {
- printf ("%s: ", dir);
- fflush (stdout);
- }
-
- if (!dir)
- {
- if (verbose)
- printf ("skipping, no such directory\n");
- continue;
- }
-
- if (FcStrSetMember (processed_dirs, dir))
- {
- if (verbose)
- printf ("skipping, looped directory detected\n");
- continue;
- }
-
- if (stat ((char *) dir, &statb) == -1)
- {
- switch (errno) {
- case ENOENT:
- case ENOTDIR:
- if (verbose)
- printf ("skipping, no such directory\n");
- break;
- default:
- fprintf (stderr, "\"%s\": ", dir);
- perror ("");
- ret++;
- break;
- }
- continue;
- }
-
- if (!S_ISDIR (statb.st_mode))
- {
- fprintf (stderr, "\"%s\": not a directory, skipping\n", dir);
- continue;
- }
-
- if (really_force)
- FcDirCacheUnlink (dir, config);
-
- cache = NULL;
- was_valid = FcFalse;
- if (!force) {
- cache = FcDirCacheLoad (dir, config, NULL);
- if (cache)
- was_valid = FcTrue;
- }
-
- if (!cache)
- {
- (*changed)++;
- cache = FcDirCacheRead (dir, FcTrue, config);
- if (!cache)
- {
- fprintf (stderr, "%s: error scanning\n", dir);
- ret++;
- continue;
- }
- }
-
- if (was_valid)
- {
- if (verbose)
- printf ("skipping, existing cache is valid: %d fonts, %d dirs\n",
- FcCacheNumFont (cache), FcCacheNumSubdir (cache));
- }
- else
- {
- if (verbose)
- printf ("caching, new cache contents: %d fonts, %d dirs\n",
- FcCacheNumFont (cache), FcCacheNumSubdir (cache));
-
- if (!FcDirCacheValid (dir))
- {
- fprintf (stderr, "%s: failed to write cache\n", dir);
- (void) FcDirCacheUnlink (dir, config);
- ret++;
- }
- }
-
- subdirs = FcStrSetCreate ();
- if (!subdirs)
- {
- fprintf (stderr, "%s: Can't create subdir set\n", dir);
- ret++;
- FcDirCacheUnload (cache);
- continue;
- }
- for (i = 0; i < FcCacheNumSubdir (cache); i++)
- FcStrSetAdd (subdirs, FcCacheSubdir (cache, i));
-
- FcDirCacheUnload (cache);
-
- sublist = FcStrListCreate (subdirs);
- FcStrSetDestroy (subdirs);
- if (!sublist)
- {
- fprintf (stderr, "%s: Can't create subdir list\n", dir);
- ret++;
- continue;
- }
- FcStrSetAdd (processed_dirs, dir);
- ret += scanDirs (sublist, config, force, really_force, verbose, changed);
- }
- FcStrListDone (list);
- return ret;
-}
-
-static FcBool
-cleanCacheDirectory (FcConfig *config, FcChar8 *dir, FcBool verbose)
-{
- DIR *d;
- struct dirent *ent;
- FcChar8 *dir_base;
- FcBool ret = FcTrue;
- FcBool remove;
- FcCache *cache;
- struct stat target_stat;
-
- dir_base = FcStrPlus (dir, (FcChar8 *) "/");
- if (!dir_base)
- {
- fprintf (stderr, "%s: out of memory\n", dir);
- return FcFalse;
- }
- if (access ((char *) dir, W_OK) != 0)
- {
- if (verbose)
- printf ("%s: not cleaning %s cache directory\n", dir,
- access ((char *) dir, F_OK) == 0 ? "unwritable" : "non-existent");
- FcStrFree (dir_base);
- return FcTrue;
- }
- if (verbose)
- printf ("%s: cleaning cache directory\n", dir);
- d = opendir ((char *) dir);
- if (!d)
- {
- perror ((char *) dir);
- FcStrFree (dir_base);
- return FcFalse;
- }
- while ((ent = readdir (d)))
- {
- FcChar8 *file_name;
- const FcChar8 *target_dir;
-
- if (ent->d_name[0] == '.')
- continue;
- /* skip cache files for different architectures and */
- /* files which are not cache files at all */
- if (strlen(ent->d_name) != 32 + strlen ("-" FC_ARCHITECTURE FC_CACHE_SUFFIX) ||
- strcmp(ent->d_name + 32, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX))
- continue;
-
- file_name = FcStrPlus (dir_base, (FcChar8 *) ent->d_name);
- if (!file_name)
- {
- fprintf (stderr, "%s: allocation failure\n", dir);
- ret = FcFalse;
- break;
- }
- remove = FcFalse;
- cache = FcDirCacheLoadFile (file_name, NULL);
- if (!cache)
- {
- if (verbose)
- printf ("%s: invalid cache file: %s\n", dir, ent->d_name);
- remove = FcTrue;
- }
- else
- {
- target_dir = FcCacheDir (cache);
- if (stat ((char *) target_dir, &target_stat) < 0)
- {
- if (verbose)
- printf ("%s: %s: missing directory: %s \n",
- dir, ent->d_name, target_dir);
- remove = FcTrue;
- }
- }
- if (remove)
- {
- if (unlink ((char *) file_name) < 0)
- {
- perror ((char *) file_name);
- ret = FcFalse;
- }
- }
- FcDirCacheUnload (cache);
- FcStrFree (file_name);
- }
-
- closedir (d);
- FcStrFree (dir_base);
- return ret;
-}
-
-static FcBool
-cleanCacheDirectories (FcConfig *config, FcBool verbose)
-{
- FcStrList *cache_dirs = FcConfigGetCacheDirs (config);
- FcChar8 *cache_dir;
- FcBool ret = FcTrue;
-
- if (!cache_dirs)
- return FcFalse;
- while ((cache_dir = FcStrListNext (cache_dirs)))
- {
- if (!cleanCacheDirectory (config, cache_dir, verbose))
- {
- ret = FcFalse;
- break;
- }
- }
- FcStrListDone (cache_dirs);
- return ret;
-}
-
-int
-main (int argc, char **argv)
-{
- FcStrSet *dirs;
- FcStrList *list;
- FcBool verbose = FcFalse;
- FcBool force = FcFalse;
- FcBool really_force = FcFalse;
- FcBool systemOnly = FcFalse;
- FcConfig *config;
- int i;
- int changed;
- int ret;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "frsVvh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "frsVvh")) != -1)
-#endif
- {
- switch (c) {
- case 'r':
- really_force = FcTrue;
- /* fall through */
- case 'f':
- force = FcTrue;
- break;
- case 's':
- systemOnly = FcTrue;
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'v':
- verbose = FcTrue;
- break;
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (systemOnly)
- FcConfigEnableHome (FcFalse);
- config = FcInitLoadConfig ();
- if (!config)
- {
- fprintf (stderr, "%s: Can't init font config library\n", argv[0]);
- return 1;
- }
- FcConfigSetCurrent (config);
-
- if (argv[i])
- {
- dirs = FcStrSetCreate ();
- if (!dirs)
- {
- fprintf (stderr, "%s: Can't create list of directories\n",
- argv[0]);
- return 1;
- }
- while (argv[i])
- {
- if (!FcStrSetAddFilename (dirs, (FcChar8 *) argv[i]))
- {
- fprintf (stderr, "%s: Can't add directory\n", argv[0]);
- return 1;
- }
- i++;
- }
- list = FcStrListCreate (dirs);
- FcStrSetDestroy (dirs);
- }
- else
- list = FcConfigGetConfigDirs (config);
-
- if ((processed_dirs = FcStrSetCreate()) == NULL) {
- fprintf(stderr, "Cannot malloc\n");
- return 1;
- }
-
- changed = 0;
- ret = scanDirs (list, config, force, really_force, verbose, &changed);
-
- FcStrSetDestroy (processed_dirs);
-
- cleanCacheDirectories (config, verbose);
-
- /*
- * Now we need to sleep a second (or two, to be extra sure), to make
- * sure that timestamps for changes after this run of fc-cache are later
- * then any timestamps we wrote. We don't use gettimeofday() because
- * sleep(3) can't be interrupted by a signal here -- this isn't in the
- * library, and there aren't any signals flying around here.
- */
- FcConfigDestroy (config);
- FcFini ();
- if (changed)
- sleep (2);
- if (verbose)
- printf ("%s: %s\n", argv[0], ret ? "failed" : "succeeded");
- return ret;
-}
+/* + * fontconfig/fc-cache/fc-cache.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../src/fcarch.h" + +#ifdef HAVE_CONFIG_H +#include <config.h> +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include <fontconfig/fontconfig.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <errno.h> +#include <fcntl.h> +#include <dirent.h> +#include <string.h> + +#if defined (_WIN32) +#define STRICT +#include <windows.h> +#define sleep(x) Sleep((x) * 1000) +#undef STRICT +#endif + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +#ifndef HAVE_GETOPT +#define HAVE_GETOPT 0 +#endif +#ifndef HAVE_GETOPT_LONG +#define HAVE_GETOPT_LONG 0 +#endif + +#if HAVE_GETOPT_LONG +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include <getopt.h> +const struct option longopts[] = { + {"force", 0, 0, 'f'}, + {"really-force", 0, 0, 'r'}, + {"system-only", 0, 0, 's'}, + {"version", 0, 0, 'V'}, + {"verbose", 0, 0, 'v'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-frsvVh] [--force|--really-force] [--system-only] [--verbose] [--version] [--help] [dirs]\n", + program); +#else + fprintf (file, "usage: %s [-frsvVh] [dirs]\n", + program); +#endif + fprintf (file, "Build font information caches in [dirs]\n" + "(all directories in font configuration by default).\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -f, --force scan directories with apparently valid caches\n"); + fprintf (file, " -r, --really-force erase all existing caches, then rescan\n"); + fprintf (file, " -s, --system-only scan system-wide directories only\n"); + fprintf (file, " -v, --verbose display status information while busy\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -f (force) scan directories with apparently valid caches\n"); + fprintf (file, " -r, (really force) erase all existing caches, then rescan\n"); + fprintf (file, " -s (system) scan system-wide directories only\n"); + fprintf (file, " -v (verbose) display status information while busy\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +static FcStrSet *processed_dirs; + +static int +scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, int *changed) +{ + int ret = 0; + const FcChar8 *dir; + FcStrSet *subdirs; + FcStrList *sublist; + FcCache *cache; + struct stat statb; + FcBool was_valid; + int i; + + /* + * Now scan all of the directories into separate databases + * and write out the results + */ + while ((dir = FcStrListNext (list))) + { + if (verbose) + { + printf ("%s: ", dir); + fflush (stdout); + } + + if (!dir) + { + if (verbose) + printf ("skipping, no such directory\n"); + continue; + } + + if (FcStrSetMember (processed_dirs, dir)) + { + if (verbose) + printf ("skipping, looped directory detected\n"); + continue; + } + + if (stat ((char *) dir, &statb) == -1) + { + switch (errno) { + case ENOENT: + case ENOTDIR: + if (verbose) + printf ("skipping, no such directory\n"); + break; + default: + fprintf (stderr, "\"%s\": ", dir); + perror (""); + ret++; + break; + } + continue; + } + + if (!S_ISDIR (statb.st_mode)) + { + fprintf (stderr, "\"%s\": not a directory, skipping\n", dir); + continue; + } + + if (really_force) + FcDirCacheUnlink (dir, config); + + cache = NULL; + was_valid = FcFalse; + if (!force) { + cache = FcDirCacheLoad (dir, config, NULL); + if (cache) + was_valid = FcTrue; + } + + if (!cache) + { + (*changed)++; + cache = FcDirCacheRead (dir, FcTrue, config); + if (!cache) + { + fprintf (stderr, "%s: error scanning\n", dir); + ret++; + continue; + } + } + + if (was_valid) + { + if (verbose) + printf ("skipping, existing cache is valid: %d fonts, %d dirs\n", + FcCacheNumFont (cache), FcCacheNumSubdir (cache)); + } + else + { + if (verbose) + printf ("caching, new cache contents: %d fonts, %d dirs\n", + FcCacheNumFont (cache), FcCacheNumSubdir (cache)); + + if (!FcDirCacheValid (dir)) + { + fprintf (stderr, "%s: failed to write cache\n", dir); + (void) FcDirCacheUnlink (dir, config); + ret++; + } + } + + subdirs = FcStrSetCreate (); + if (!subdirs) + { + fprintf (stderr, "%s: Can't create subdir set\n", dir); + ret++; + FcDirCacheUnload (cache); + continue; + } + for (i = 0; i < FcCacheNumSubdir (cache); i++) + FcStrSetAdd (subdirs, FcCacheSubdir (cache, i)); + + FcDirCacheUnload (cache); + + sublist = FcStrListCreate (subdirs); + FcStrSetDestroy (subdirs); + if (!sublist) + { + fprintf (stderr, "%s: Can't create subdir list\n", dir); + ret++; + continue; + } + FcStrSetAdd (processed_dirs, dir); + ret += scanDirs (sublist, config, force, really_force, verbose, changed); + } + FcStrListDone (list); + return ret; +} + +static FcBool +cleanCacheDirectory (FcConfig *config, FcChar8 *dir, FcBool verbose) +{ + DIR *d; + struct dirent *ent; + FcChar8 *dir_base; + FcBool ret = FcTrue; + FcBool remove; + FcCache *cache; + struct stat target_stat; + + dir_base = FcStrPlus (dir, (FcChar8 *) "/"); + if (!dir_base) + { + fprintf (stderr, "%s: out of memory\n", dir); + return FcFalse; + } + if (access ((char *) dir, W_OK) != 0) + { + if (verbose) + printf ("%s: not cleaning %s cache directory\n", dir, + access ((char *) dir, F_OK) == 0 ? "unwritable" : "non-existent"); + FcStrFree (dir_base); + return FcTrue; + } + if (verbose) + printf ("%s: cleaning cache directory\n", dir); + d = opendir ((char *) dir); + if (!d) + { + perror ((char *) dir); + FcStrFree (dir_base); + return FcFalse; + } + while ((ent = readdir (d))) + { + FcChar8 *file_name; + const FcChar8 *target_dir; + + if (ent->d_name[0] == '.') + continue; + /* skip cache files for different architectures and */ + /* files which are not cache files at all */ + if (strlen(ent->d_name) != 32 + strlen ("-" FC_ARCHITECTURE FC_CACHE_SUFFIX) || + strcmp(ent->d_name + 32, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX)) + continue; + + file_name = FcStrPlus (dir_base, (FcChar8 *) ent->d_name); + if (!file_name) + { + fprintf (stderr, "%s: allocation failure\n", dir); + ret = FcFalse; + break; + } + remove = FcFalse; + cache = FcDirCacheLoadFile (file_name, NULL); + if (!cache) + { + if (verbose) + printf ("%s: invalid cache file: %s\n", dir, ent->d_name); + remove = FcTrue; + } + else + { + target_dir = FcCacheDir (cache); + if (stat ((char *) target_dir, &target_stat) < 0) + { + if (verbose) + printf ("%s: %s: missing directory: %s \n", + dir, ent->d_name, target_dir); + remove = FcTrue; + } + } + if (remove) + { + if (unlink ((char *) file_name) < 0) + { + perror ((char *) file_name); + ret = FcFalse; + } + } + FcDirCacheUnload (cache); + FcStrFree (file_name); + } + + closedir (d); + FcStrFree (dir_base); + return ret; +} + +static FcBool +cleanCacheDirectories (FcConfig *config, FcBool verbose) +{ + FcStrList *cache_dirs = FcConfigGetCacheDirs (config); + FcChar8 *cache_dir; + FcBool ret = FcTrue; + + if (!cache_dirs) + return FcFalse; + while ((cache_dir = FcStrListNext (cache_dirs))) + { + if (!cleanCacheDirectory (config, cache_dir, verbose)) + { + ret = FcFalse; + break; + } + } + FcStrListDone (cache_dirs); + return ret; +} + +int +main (int argc, char **argv) +{ + FcStrSet *dirs; + FcStrList *list; + FcBool verbose = FcFalse; + FcBool force = FcFalse; + FcBool really_force = FcFalse; + FcBool systemOnly = FcFalse; + FcConfig *config; + int i; + int changed; + int ret; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "frsVvh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "frsVvh")) != -1) +#endif + { + switch (c) { + case 'r': + really_force = FcTrue; + /* fall through */ + case 'f': + force = FcTrue; + break; + case 's': + systemOnly = FcTrue; + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'v': + verbose = FcTrue; + break; + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (systemOnly) + FcConfigEnableHome (FcFalse); + config = FcInitLoadConfig (); + if (!config) + { + fprintf (stderr, "%s: Can't init font config library\n", argv[0]); + return 1; + } + FcConfigSetCurrent (config); + + if (argv[i]) + { + dirs = FcStrSetCreate (); + if (!dirs) + { + fprintf (stderr, "%s: Can't create list of directories\n", + argv[0]); + return 1; + } + while (argv[i]) + { + if (!FcStrSetAddFilename (dirs, (FcChar8 *) argv[i])) + { + fprintf (stderr, "%s: Can't add directory\n", argv[0]); + return 1; + } + i++; + } + list = FcStrListCreate (dirs); + FcStrSetDestroy (dirs); + } + else + list = FcConfigGetConfigDirs (config); + + if ((processed_dirs = FcStrSetCreate()) == NULL) { + fprintf(stderr, "Cannot malloc\n"); + return 1; + } + + changed = 0; + ret = scanDirs (list, config, force, really_force, verbose, &changed); + + FcStrSetDestroy (processed_dirs); + + cleanCacheDirectories (config, verbose); + + /* + * Now we need to sleep a second (or two, to be extra sure), to make + * sure that timestamps for changes after this run of fc-cache are later + * then any timestamps we wrote. We don't use gettimeofday() because + * sleep(3) can't be interrupted by a signal here -- this isn't in the + * library, and there aren't any signals flying around here. + */ + FcConfigDestroy (config); + FcFini (); + if (changed) + sleep (2); + if (verbose) + printf ("%s: %s\n", argv[0], ret ? "failed" : "succeeded"); + return ret; +} diff --git a/fontconfig/fc-cache/fc-cache.sgml b/fontconfig/fc-cache/fc-cache.sgml index b5328f173..3740be77f 100644 --- a/fontconfig/fc-cache/fc-cache.sgml +++ b/fontconfig/fc-cache/fc-cache.sgml @@ -1,220 +1,220 @@ -<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Josselin</firstname>">
- <!ENTITY dhsurname "<surname>Mouette</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>joss@debian.org</email>">
- <!ENTITY dhusername "Josselin Mouette">
- <!ENTITY dhucpackage "<refentrytitle>fc-cache</refentrytitle>">
- <!ENTITY dhpackage "fc-cache">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2003</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>build font information cache files</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-frsvVh</option></arg>
- <arg><option>--force</option></arg>
- <arg><option>--really-force</option></arg>
- <arg><option>--system-only</option></arg>
- <arg><option>--verbose</option></arg>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <arg rep="repeat"><option><replaceable>dir</replaceable></option></arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> scans the font directories on
- the system and builds font information cache files for
- applications using fontconfig for their font handling.</para>
-
- <para>If directory arguments are not given,
- <command>&dhpackage;</command> uses each directory in the
- current font configuration. Each directory is scanned for
- font files readable by FreeType. A cache is created which
- contains properties of each font and the associated filename.
- This cache is used to speed up application startup when using
- the fontconfig library.</para>
-
- <para>Note that <command>&dhpackage;</command> must be executed
- once per architecture to generate font information customized
- for that architecture.</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-f</option>
- <option>--force</option>
- </term>
- <listitem>
- <para>Force re-generation of apparently up-to-date cache files,
- overriding the timestamp checking.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-r</option>
- <option>--really-force</option>
- </term>
- <listitem>
- <para>Erase all existing cache files and rescan.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-s</option>
- <option>--system-only</option>
- </term>
- <listitem>
- <para>Only scan system-wide directories, omitting the places
- located in the user's home directory.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-v</option>
- <option>--verbose</option>
- </term>
- <listitem>
- <para>Display status information while busy.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>dir</replaceable></option>
- </term>
- <listitem>
- <para>Directory to scan for fonts.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>FILES</title>
- <variablelist>
- <varlistentry>
- <term><filename><replaceable>%cachdir%</replaceable>/*-<replaceable>%arch%</replaceable>.cache-2</filename></term>
- <listitem>
- <para>These files are generated by <command>&dhpackage;</command>
- and contain maps from file names to font properties. They are
- read by the fontconfig library at application startup to locate
- appropriate fonts.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-cat</command>(1)
- <command>fc-list</command>(1)
- <command>fc-match</command>(1)
- <command>fc-pattern</command>(1)
- <command>fc-query</command>(1)
- <command>fc-scan</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was written by Keith Packard
- <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [ + +<!-- Process this file with docbook-to-man to generate an nroff manual + page: `docbook-to-man manpage.sgml > manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + <!-- Fill in your name for FIRSTNAME and SURNAME. --> + <!ENTITY dhfirstname "<firstname>Josselin</firstname>"> + <!ENTITY dhsurname "<surname>Mouette</surname>"> + <!-- Please adjust the date whenever revising the manpage. --> + <!ENTITY dhdate "<date>Aug 13, 2008</date>"> + <!-- SECTION should be 1-8, maybe w/ subsection other parameters are + allowed: see man(7), man(1). --> + <!ENTITY dhsection "<manvolnum>1</manvolnum>"> + <!ENTITY dhemail "<email>joss@debian.org</email>"> + <!ENTITY dhusername "Josselin Mouette"> + <!ENTITY dhucpackage "<refentrytitle>fc-cache</refentrytitle>"> + <!ENTITY dhpackage "fc-cache"> + + <!ENTITY debian "<productname>Debian</productname>"> + <!ENTITY gnu "<acronym>GNU</acronym>"> + <!ENTITY gpl "&gnu; <acronym>GPL</acronym>"> +]> + +<refentry> + <refentryinfo> + <address> + &dhemail; + </address> + <author> + &dhfirstname; + &dhsurname; + </author> + <copyright> + <year>2003</year> + <holder>&dhusername;</holder> + </copyright> + &dhdate; + </refentryinfo> + <refmeta> + &dhucpackage; + + &dhsection; + </refmeta> + <refnamediv> + <refname>&dhpackage;</refname> + + <refpurpose>build font information cache files</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>&dhpackage;</command> + + <arg><option>-frsvVh</option></arg> + <arg><option>--force</option></arg> + <arg><option>--really-force</option></arg> + <arg><option>--system-only</option></arg> + <arg><option>--verbose</option></arg> + <arg><option>--version</option></arg> + <arg><option>--help</option></arg> + <arg rep="repeat"><option><replaceable>dir</replaceable></option></arg> + + </cmdsynopsis> + </refsynopsisdiv> + <refsect1> + <title>DESCRIPTION</title> + + <para><command>&dhpackage;</command> scans the font directories on + the system and builds font information cache files for + applications using fontconfig for their font handling.</para> + + <para>If directory arguments are not given, + <command>&dhpackage;</command> uses each directory in the + current font configuration. Each directory is scanned for + font files readable by FreeType. A cache is created which + contains properties of each font and the associated filename. + This cache is used to speed up application startup when using + the fontconfig library.</para> + + <para>Note that <command>&dhpackage;</command> must be executed + once per architecture to generate font information customized + for that architecture.</para> + + </refsect1> + <refsect1> + <title>OPTIONS</title> + + <para>This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below.</para> + + <variablelist> + <varlistentry> + <term><option>-f</option> + <option>--force</option> + </term> + <listitem> + <para>Force re-generation of apparently up-to-date cache files, + overriding the timestamp checking.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-r</option> + <option>--really-force</option> + </term> + <listitem> + <para>Erase all existing cache files and rescan.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-s</option> + <option>--system-only</option> + </term> + <listitem> + <para>Only scan system-wide directories, omitting the places + located in the user's home directory.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-v</option> + <option>--verbose</option> + </term> + <listitem> + <para>Display status information while busy.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-h</option> + <option>--help</option> + </term> + <listitem> + <para>Show summary of options.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-V</option> + <option>--version</option> + </term> + <listitem> + <para>Show version of the program and exit.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option><replaceable>dir</replaceable></option> + </term> + <listitem> + <para>Directory to scan for fonts.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>FILES</title> + <variablelist> + <varlistentry> + <term><filename><replaceable>%cachdir%</replaceable>/*-<replaceable>%arch%</replaceable>.cache-2</filename></term> + <listitem> + <para>These files are generated by <command>&dhpackage;</command> + and contain maps from file names to font properties. They are + read by the fontconfig library at application startup to locate + appropriate fonts.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>SEE ALSO</title> + + <para> + <command>fc-cat</command>(1) + <command>fc-list</command>(1) + <command>fc-match</command>(1) + <command>fc-pattern</command>(1) + <command>fc-query</command>(1) + <command>fc-scan</command>(1) + </para> + + <para>The fontconfig user's guide, in HTML format: + <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para> + + </refsect1> + <refsect1> + <title>AUTHOR</title> + + <para>This manual page was written by Keith Packard + <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para> + + </refsect1> +</refentry> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:2 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:nil +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +--> diff --git a/fontconfig/fc-case/CaseFolding.txt b/fontconfig/fc-case/CaseFolding.txt index 0c0c1b8c8..ffe6173d7 100644 --- a/fontconfig/fc-case/CaseFolding.txt +++ b/fontconfig/fc-case/CaseFolding.txt @@ -1,1211 +1,1211 @@ -# CaseFolding-6.0.0.txt
-# Date: 2010-05-18, 00:48:57 GMT [MD]
-#
-# Unicode Character Database
-# Copyright (c) 1991-2010 Unicode, Inc.
-# For terms of use, see http://www.unicode.org/terms_of_use.html
-# For documentation, see http://www.unicode.org/reports/tr44/
-#
-# Case Folding Properties
-#
-# This file is a supplement to the UnicodeData file.
-# It provides a case folding mapping generated from the Unicode Character Database.
-# If all characters are mapped according to the full mapping below, then
-# case differences (according to UnicodeData.txt and SpecialCasing.txt)
-# are eliminated.
-#
-# The data supports both implementations that require simple case foldings
-# (where string lengths don't change), and implementations that allow full case folding
-# (where string lengths may grow). Note that where they can be supported, the
-# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match.
-#
-# All code points not listed in this file map to themselves.
-#
-# NOTE: case folding does not preserve normalization formats!
-#
-# For information on case folding, including how to have case folding
-# preserve normalization formats, see Section 3.13 Default Case Algorithms in
-# The Unicode Standard, Version 5.0.
-#
-# ================================================================================
-# Format
-# ================================================================================
-# The entries in this file are in the following machine-readable format:
-#
-# <code>; <status>; <mapping>; # <name>
-#
-# The status field is:
-# C: common case folding, common mappings shared by both simple and full mappings.
-# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces.
-# S: simple case folding, mappings to single characters where different from F.
-# T: special case for uppercase I and dotted uppercase I
-# - For non-Turkic languages, this mapping is normally not used.
-# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters.
-# Note that the Turkic mappings do not maintain canonical equivalence without additional processing.
-# See the discussions of case mapping in the Unicode Standard for more information.
-#
-# Usage:
-# A. To do a simple case folding, use the mappings with status C + S.
-# B. To do a full case folding, use the mappings with status C + F.
-#
-# The mappings with status T can be used or omitted depending on the desired case-folding
-# behavior. (The default option is to exclude them.)
-#
-# =================================================================
-# @missing 0000..10FFFF; <codepoint>
-0041; C; 0061; # LATIN CAPITAL LETTER A
-0042; C; 0062; # LATIN CAPITAL LETTER B
-0043; C; 0063; # LATIN CAPITAL LETTER C
-0044; C; 0064; # LATIN CAPITAL LETTER D
-0045; C; 0065; # LATIN CAPITAL LETTER E
-0046; C; 0066; # LATIN CAPITAL LETTER F
-0047; C; 0067; # LATIN CAPITAL LETTER G
-0048; C; 0068; # LATIN CAPITAL LETTER H
-0049; C; 0069; # LATIN CAPITAL LETTER I
-0049; T; 0131; # LATIN CAPITAL LETTER I
-004A; C; 006A; # LATIN CAPITAL LETTER J
-004B; C; 006B; # LATIN CAPITAL LETTER K
-004C; C; 006C; # LATIN CAPITAL LETTER L
-004D; C; 006D; # LATIN CAPITAL LETTER M
-004E; C; 006E; # LATIN CAPITAL LETTER N
-004F; C; 006F; # LATIN CAPITAL LETTER O
-0050; C; 0070; # LATIN CAPITAL LETTER P
-0051; C; 0071; # LATIN CAPITAL LETTER Q
-0052; C; 0072; # LATIN CAPITAL LETTER R
-0053; C; 0073; # LATIN CAPITAL LETTER S
-0054; C; 0074; # LATIN CAPITAL LETTER T
-0055; C; 0075; # LATIN CAPITAL LETTER U
-0056; C; 0076; # LATIN CAPITAL LETTER V
-0057; C; 0077; # LATIN CAPITAL LETTER W
-0058; C; 0078; # LATIN CAPITAL LETTER X
-0059; C; 0079; # LATIN CAPITAL LETTER Y
-005A; C; 007A; # LATIN CAPITAL LETTER Z
-00B5; C; 03BC; # MICRO SIGN
-00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE
-00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE
-00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE
-00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE
-00C6; C; 00E6; # LATIN CAPITAL LETTER AE
-00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA
-00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE
-00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE
-00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS
-00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE
-00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE
-00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS
-00D0; C; 00F0; # LATIN CAPITAL LETTER ETH
-00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE
-00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE
-00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE
-00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE
-00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS
-00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE
-00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE
-00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE
-00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS
-00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE
-00DE; C; 00FE; # LATIN CAPITAL LETTER THORN
-00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S
-0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON
-0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE
-0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK
-0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE
-0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX
-010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE
-010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON
-010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON
-0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE
-0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON
-0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE
-0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE
-0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK
-011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON
-011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX
-011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE
-0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE
-0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA
-0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX
-0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE
-0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE
-012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON
-012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE
-012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK
-0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE
-0132; C; 0133; # LATIN CAPITAL LIGATURE IJ
-0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX
-0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA
-0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE
-013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA
-013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON
-013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE
-0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE
-0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA
-0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON
-0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE
-014A; C; 014B; # LATIN CAPITAL LETTER ENG
-014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON
-014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE
-0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE
-0152; C; 0153; # LATIN CAPITAL LIGATURE OE
-0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE
-0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA
-0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON
-015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE
-015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX
-015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA
-0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON
-0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA
-0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON
-0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE
-0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE
-016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON
-016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE
-016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE
-0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE
-0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK
-0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS
-0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE
-017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE
-017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON
-017F; C; 0073; # LATIN SMALL LETTER LONG S
-0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK
-0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR
-0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX
-0186; C; 0254; # LATIN CAPITAL LETTER OPEN O
-0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK
-0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D
-018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK
-018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR
-018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E
-018F; C; 0259; # LATIN CAPITAL LETTER SCHWA
-0190; C; 025B; # LATIN CAPITAL LETTER OPEN E
-0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK
-0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK
-0194; C; 0263; # LATIN CAPITAL LETTER GAMMA
-0196; C; 0269; # LATIN CAPITAL LETTER IOTA
-0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE
-0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK
-019C; C; 026F; # LATIN CAPITAL LETTER TURNED M
-019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK
-019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE
-01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN
-01A2; C; 01A3; # LATIN CAPITAL LETTER OI
-01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK
-01A6; C; 0280; # LATIN LETTER YR
-01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO
-01A9; C; 0283; # LATIN CAPITAL LETTER ESH
-01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK
-01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK
-01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN
-01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON
-01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK
-01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK
-01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE
-01B7; C; 0292; # LATIN CAPITAL LETTER EZH
-01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED
-01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE
-01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON
-01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-01C7; C; 01C9; # LATIN CAPITAL LETTER LJ
-01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J
-01CA; C; 01CC; # LATIN CAPITAL LETTER NJ
-01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J
-01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON
-01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON
-01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON
-01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON
-01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON
-01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE
-01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON
-01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE
-01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON
-01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON
-01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON
-01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE
-01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON
-01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON
-01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK
-01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON
-01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON
-01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON
-01F1; C; 01F3; # LATIN CAPITAL LETTER DZ
-01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE
-01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR
-01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN
-01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE
-01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE
-01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE
-0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE
-0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE
-0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE
-0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE
-020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE
-020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE
-020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE
-0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE
-0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE
-0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE
-0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE
-0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW
-021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW
-021C; C; 021D; # LATIN CAPITAL LETTER YOGH
-021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON
-0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG
-0222; C; 0223; # LATIN CAPITAL LETTER OU
-0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK
-0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE
-0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA
-022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON
-022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON
-022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE
-0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON
-0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON
-023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE
-023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE
-023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR
-023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE
-0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP
-0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE
-0244; C; 0289; # LATIN CAPITAL LETTER U BAR
-0245; C; 028C; # LATIN CAPITAL LETTER TURNED V
-0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE
-0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE
-024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL
-024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE
-024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE
-0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI
-0370; C; 0371; # GREEK CAPITAL LETTER HETA
-0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI
-0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA
-0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS
-0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS
-0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS
-038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS
-038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS
-038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS
-038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS
-0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
-0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA
-0392; C; 03B2; # GREEK CAPITAL LETTER BETA
-0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA
-0394; C; 03B4; # GREEK CAPITAL LETTER DELTA
-0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON
-0396; C; 03B6; # GREEK CAPITAL LETTER ZETA
-0397; C; 03B7; # GREEK CAPITAL LETTER ETA
-0398; C; 03B8; # GREEK CAPITAL LETTER THETA
-0399; C; 03B9; # GREEK CAPITAL LETTER IOTA
-039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA
-039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA
-039C; C; 03BC; # GREEK CAPITAL LETTER MU
-039D; C; 03BD; # GREEK CAPITAL LETTER NU
-039E; C; 03BE; # GREEK CAPITAL LETTER XI
-039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON
-03A0; C; 03C0; # GREEK CAPITAL LETTER PI
-03A1; C; 03C1; # GREEK CAPITAL LETTER RHO
-03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA
-03A4; C; 03C4; # GREEK CAPITAL LETTER TAU
-03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON
-03A6; C; 03C6; # GREEK CAPITAL LETTER PHI
-03A7; C; 03C7; # GREEK CAPITAL LETTER CHI
-03A8; C; 03C8; # GREEK CAPITAL LETTER PSI
-03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA
-03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA
-03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA
-03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
-03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA
-03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL
-03D0; C; 03B2; # GREEK BETA SYMBOL
-03D1; C; 03B8; # GREEK THETA SYMBOL
-03D5; C; 03C6; # GREEK PHI SYMBOL
-03D6; C; 03C0; # GREEK PI SYMBOL
-03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA
-03DA; C; 03DB; # GREEK LETTER STIGMA
-03DC; C; 03DD; # GREEK LETTER DIGAMMA
-03DE; C; 03DF; # GREEK LETTER KOPPA
-03E0; C; 03E1; # GREEK LETTER SAMPI
-03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI
-03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI
-03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI
-03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI
-03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA
-03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA
-03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI
-03F0; C; 03BA; # GREEK KAPPA SYMBOL
-03F1; C; 03C1; # GREEK RHO SYMBOL
-03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL
-03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL
-03F7; C; 03F8; # GREEK CAPITAL LETTER SHO
-03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL
-03FA; C; 03FB; # GREEK CAPITAL LETTER SAN
-03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL
-03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL
-03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL
-0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0401; C; 0451; # CYRILLIC CAPITAL LETTER IO
-0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE
-0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE
-0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE
-0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE
-0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-0407; C; 0457; # CYRILLIC CAPITAL LETTER YI
-0408; C; 0458; # CYRILLIC CAPITAL LETTER JE
-0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE
-040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE
-040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE
-040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE
-040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE
-040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U
-040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE
-0410; C; 0430; # CYRILLIC CAPITAL LETTER A
-0411; C; 0431; # CYRILLIC CAPITAL LETTER BE
-0412; C; 0432; # CYRILLIC CAPITAL LETTER VE
-0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE
-0414; C; 0434; # CYRILLIC CAPITAL LETTER DE
-0415; C; 0435; # CYRILLIC CAPITAL LETTER IE
-0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE
-0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE
-0418; C; 0438; # CYRILLIC CAPITAL LETTER I
-0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I
-041A; C; 043A; # CYRILLIC CAPITAL LETTER KA
-041B; C; 043B; # CYRILLIC CAPITAL LETTER EL
-041C; C; 043C; # CYRILLIC CAPITAL LETTER EM
-041D; C; 043D; # CYRILLIC CAPITAL LETTER EN
-041E; C; 043E; # CYRILLIC CAPITAL LETTER O
-041F; C; 043F; # CYRILLIC CAPITAL LETTER PE
-0420; C; 0440; # CYRILLIC CAPITAL LETTER ER
-0421; C; 0441; # CYRILLIC CAPITAL LETTER ES
-0422; C; 0442; # CYRILLIC CAPITAL LETTER TE
-0423; C; 0443; # CYRILLIC CAPITAL LETTER U
-0424; C; 0444; # CYRILLIC CAPITAL LETTER EF
-0425; C; 0445; # CYRILLIC CAPITAL LETTER HA
-0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE
-0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE
-0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA
-0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA
-042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN
-042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU
-042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN
-042D; C; 044D; # CYRILLIC CAPITAL LETTER E
-042E; C; 044E; # CYRILLIC CAPITAL LETTER YU
-042F; C; 044F; # CYRILLIC CAPITAL LETTER YA
-0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA
-0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT
-0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E
-0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS
-0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS
-046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS
-046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS
-046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI
-0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI
-0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA
-0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA
-0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT
-0478; C; 0479; # CYRILLIC CAPITAL LETTER UK
-047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA
-047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO
-047E; C; 047F; # CYRILLIC CAPITAL LETTER OT
-0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA
-048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL
-048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN
-048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK
-0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN
-0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK
-0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER
-0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER
-049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE
-049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE
-04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA
-04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE
-04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK
-04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA
-04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER
-04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U
-04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE
-04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER
-04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE
-04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER
-04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE
-04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA
-04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE
-04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER
-04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA
-04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE
-04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK
-04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL
-04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK
-04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL
-04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE
-04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL
-04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE
-04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS
-04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE
-04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE
-04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA
-04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS
-04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS
-04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS
-04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE
-04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON
-04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS
-04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS
-04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O
-04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS
-04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS
-04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON
-04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS
-04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE
-04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS
-04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER
-04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS
-04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK
-04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK
-04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE
-0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE
-0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE
-0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE
-0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE
-0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE
-050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE
-050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE
-050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE
-0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE
-0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK
-0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA
-0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA
-0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE
-051A; C; 051B; # CYRILLIC CAPITAL LETTER QA
-051C; C; 051D; # CYRILLIC CAPITAL LETTER WE
-051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA
-0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK
-0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK
-0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER
-0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER
-0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB
-0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN
-0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM
-0534; C; 0564; # ARMENIAN CAPITAL LETTER DA
-0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH
-0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA
-0537; C; 0567; # ARMENIAN CAPITAL LETTER EH
-0538; C; 0568; # ARMENIAN CAPITAL LETTER ET
-0539; C; 0569; # ARMENIAN CAPITAL LETTER TO
-053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE
-053B; C; 056B; # ARMENIAN CAPITAL LETTER INI
-053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN
-053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH
-053E; C; 056E; # ARMENIAN CAPITAL LETTER CA
-053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN
-0540; C; 0570; # ARMENIAN CAPITAL LETTER HO
-0541; C; 0571; # ARMENIAN CAPITAL LETTER JA
-0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD
-0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH
-0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN
-0545; C; 0575; # ARMENIAN CAPITAL LETTER YI
-0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW
-0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA
-0548; C; 0578; # ARMENIAN CAPITAL LETTER VO
-0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA
-054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH
-054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH
-054C; C; 057C; # ARMENIAN CAPITAL LETTER RA
-054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH
-054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW
-054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN
-0550; C; 0580; # ARMENIAN CAPITAL LETTER REH
-0551; C; 0581; # ARMENIAN CAPITAL LETTER CO
-0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN
-0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR
-0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH
-0555; C; 0585; # ARMENIAN CAPITAL LETTER OH
-0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH
-0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN
-10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN
-10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN
-10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN
-10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON
-10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN
-10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN
-10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN
-10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN
-10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN
-10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN
-10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS
-10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN
-10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR
-10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON
-10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR
-10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR
-10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE
-10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN
-10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR
-10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN
-10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR
-10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR
-10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN
-10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR
-10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN
-10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN
-10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN
-10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL
-10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL
-10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR
-10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN
-10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN
-10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE
-10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE
-10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE
-10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE
-10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR
-10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE
-1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW
-1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE
-1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW
-1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW
-1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE
-1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE
-1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW
-1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW
-1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA
-1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW
-1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE
-1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE
-1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW
-1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW
-1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE
-1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE
-1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON
-1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE
-1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW
-1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS
-1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA
-1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW
-1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW
-1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE
-1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE
-1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW
-1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW
-1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW
-1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON
-1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW
-1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW
-1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE
-1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE
-1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW
-1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE
-1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW
-1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW
-1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW
-1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE
-1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS
-1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE
-1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE
-1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE
-1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE
-1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE
-1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW
-1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON
-1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW
-1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE
-1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW
-1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE
-1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE
-1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE
-1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE
-1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW
-1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW
-1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW
-1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW
-1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW
-1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW
-1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE
-1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS
-1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE
-1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW
-1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE
-1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE
-1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS
-1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE
-1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW
-1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE
-1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS
-1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE
-1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX
-1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW
-1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW
-1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW
-1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS
-1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE
-1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE
-1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING
-1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE
-1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S
-1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S
-1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW
-1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE
-1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE
-1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE
-1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE
-1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE
-1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW
-1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE
-1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE
-1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE
-1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE
-1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW
-1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW
-1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE
-1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE
-1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE
-1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE
-1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE
-1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE
-1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW
-1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE
-1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW
-1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW
-1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE
-1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE
-1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE
-1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE
-1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE
-1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW
-1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE
-1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE
-1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE
-1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE
-1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW
-1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW
-1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE
-1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE
-1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE
-1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE
-1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE
-1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW
-1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE
-1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW
-1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE
-1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE
-1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL
-1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V
-1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP
-1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI
-1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA
-1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA
-1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA
-1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA
-1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA
-1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI
-1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI
-1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI
-1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA
-1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA
-1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA
-1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA
-1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA
-1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI
-1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA
-1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA
-1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA
-1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA
-1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA
-1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI
-1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI
-1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI
-1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA
-1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA
-1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA
-1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA
-1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA
-1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI
-1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI
-1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI
-1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA
-1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA
-1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA
-1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA
-1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA
-1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI
-1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
-1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
-1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
-1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA
-1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA
-1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA
-1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI
-1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI
-1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA
-1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA
-1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA
-1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA
-1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA
-1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI
-1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI
-1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI
-1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI
-1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI
-1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI
-1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI
-1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI
-1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI
-1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI
-1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI
-1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI
-1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI
-1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI
-1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI
-1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI
-1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI
-1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI
-1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI
-1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI
-1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI
-1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI
-1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI
-1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI
-1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI
-1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI
-1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI
-1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI
-1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
-1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY
-1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON
-1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA
-1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA
-1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI
-1FBE; C; 03B9; # GREEK PROSGEGRAMMENI
-1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI
-1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI
-1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI
-1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI
-1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA
-1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA
-1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA
-1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA
-1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI
-1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA
-1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA
-1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI
-1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI
-1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY
-1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON
-1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA
-1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA
-1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA
-1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA
-1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI
-1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI
-1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI
-1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY
-1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON
-1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA
-1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA
-1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA
-1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI
-1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI
-1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI
-1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
-1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
-1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA
-1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA
-1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA
-1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA
-1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
-2126; C; 03C9; # OHM SIGN
-212A; C; 006B; # KELVIN SIGN
-212B; C; 00E5; # ANGSTROM SIGN
-2132; C; 214E; # TURNED CAPITAL F
-2160; C; 2170; # ROMAN NUMERAL ONE
-2161; C; 2171; # ROMAN NUMERAL TWO
-2162; C; 2172; # ROMAN NUMERAL THREE
-2163; C; 2173; # ROMAN NUMERAL FOUR
-2164; C; 2174; # ROMAN NUMERAL FIVE
-2165; C; 2175; # ROMAN NUMERAL SIX
-2166; C; 2176; # ROMAN NUMERAL SEVEN
-2167; C; 2177; # ROMAN NUMERAL EIGHT
-2168; C; 2178; # ROMAN NUMERAL NINE
-2169; C; 2179; # ROMAN NUMERAL TEN
-216A; C; 217A; # ROMAN NUMERAL ELEVEN
-216B; C; 217B; # ROMAN NUMERAL TWELVE
-216C; C; 217C; # ROMAN NUMERAL FIFTY
-216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED
-216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED
-216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND
-2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED
-24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A
-24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B
-24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C
-24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D
-24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E
-24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F
-24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G
-24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H
-24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I
-24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J
-24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K
-24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L
-24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M
-24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N
-24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O
-24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P
-24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q
-24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R
-24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S
-24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T
-24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U
-24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V
-24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W
-24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X
-24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y
-24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z
-2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU
-2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY
-2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE
-2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI
-2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO
-2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU
-2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE
-2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO
-2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA
-2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE
-2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE
-2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I
-2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI
-2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO
-2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE
-2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE
-2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI
-2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU
-2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI
-2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI
-2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO
-2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO
-2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU
-2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU
-2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU
-2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU
-2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE
-2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA
-2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI
-2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI
-2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA
-2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU
-2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI
-2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI
-2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA
-2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU
-2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS
-2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL
-2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO
-2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS
-2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS
-2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS
-2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA
-2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA
-2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC
-2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A
-2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE
-2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR
-2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE
-2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE
-2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL
-2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER
-2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER
-2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER
-2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA
-2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK
-2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A
-2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA
-2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK
-2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H
-2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL
-2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL
-2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA
-2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA
-2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA
-2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA
-2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE
-2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU
-2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA
-2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE
-2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE
-2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA
-2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA
-2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA
-2C98; C; 2C99; # COPTIC CAPITAL LETTER MI
-2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI
-2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI
-2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O
-2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI
-2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO
-2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA
-2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU
-2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA
-2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI
-2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI
-2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI
-2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU
-2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF
-2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN
-2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE
-2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA
-2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI
-2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI
-2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU
-2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI
-2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI
-2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI
-2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH
-2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI
-2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI
-2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI
-2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA
-2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA
-2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI
-2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT
-2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA
-2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA
-2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA
-2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA
-2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI
-2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI
-2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU
-2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI
-2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA
-A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA
-A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO
-A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE
-A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA
-A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV
-A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK
-A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA
-A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER
-A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER
-A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT
-A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU
-A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A
-A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS
-A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS
-A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS
-A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN
-A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE
-A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE
-A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL
-A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM
-A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O
-A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O
-A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O
-A680; C; A681; # CYRILLIC CAPITAL LETTER DWE
-A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE
-A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE
-A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE
-A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE
-A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK
-A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE
-A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE
-A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE
-A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE
-A694; C; A695; # CYRILLIC CAPITAL LETTER HWE
-A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE
-A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF
-A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN
-A726; C; A727; # LATIN CAPITAL LETTER HENG
-A728; C; A729; # LATIN CAPITAL LETTER TZ
-A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO
-A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO
-A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA
-A732; C; A733; # LATIN CAPITAL LETTER AA
-A734; C; A735; # LATIN CAPITAL LETTER AO
-A736; C; A737; # LATIN CAPITAL LETTER AU
-A738; C; A739; # LATIN CAPITAL LETTER AV
-A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR
-A73C; C; A73D; # LATIN CAPITAL LETTER AY
-A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT
-A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE
-A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE
-A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE
-A746; C; A747; # LATIN CAPITAL LETTER BROKEN L
-A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE
-A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY
-A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP
-A74E; C; A74F; # LATIN CAPITAL LETTER OO
-A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER
-A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH
-A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL
-A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER
-A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE
-A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA
-A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA
-A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE
-A760; C; A761; # LATIN CAPITAL LETTER VY
-A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z
-A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE
-A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER
-A768; C; A769; # LATIN CAPITAL LETTER VEND
-A76A; C; A76B; # LATIN CAPITAL LETTER ET
-A76C; C; A76D; # LATIN CAPITAL LETTER IS
-A76E; C; A76F; # LATIN CAPITAL LETTER CON
-A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D
-A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F
-A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G
-A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G
-A780; C; A781; # LATIN CAPITAL LETTER TURNED L
-A782; C; A783; # LATIN CAPITAL LETTER INSULAR R
-A784; C; A785; # LATIN CAPITAL LETTER INSULAR S
-A786; C; A787; # LATIN CAPITAL LETTER INSULAR T
-A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO
-A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H
-A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER
-A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE
-A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE
-A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE
-A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE
-A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE
-FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF
-FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI
-FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL
-FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI
-FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL
-FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T
-FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST
-FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW
-FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH
-FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI
-FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW
-FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH
-FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A
-FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B
-FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C
-FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D
-FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E
-FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F
-FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G
-FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H
-FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I
-FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J
-FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K
-FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L
-FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M
-FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N
-FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O
-FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P
-FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q
-FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R
-FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S
-FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T
-FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U
-FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V
-FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W
-FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X
-FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y
-FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z
-10400; C; 10428; # DESERET CAPITAL LETTER LONG I
-10401; C; 10429; # DESERET CAPITAL LETTER LONG E
-10402; C; 1042A; # DESERET CAPITAL LETTER LONG A
-10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH
-10404; C; 1042C; # DESERET CAPITAL LETTER LONG O
-10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO
-10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I
-10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E
-10408; C; 10430; # DESERET CAPITAL LETTER SHORT A
-10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH
-1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O
-1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO
-1040C; C; 10434; # DESERET CAPITAL LETTER AY
-1040D; C; 10435; # DESERET CAPITAL LETTER OW
-1040E; C; 10436; # DESERET CAPITAL LETTER WU
-1040F; C; 10437; # DESERET CAPITAL LETTER YEE
-10410; C; 10438; # DESERET CAPITAL LETTER H
-10411; C; 10439; # DESERET CAPITAL LETTER PEE
-10412; C; 1043A; # DESERET CAPITAL LETTER BEE
-10413; C; 1043B; # DESERET CAPITAL LETTER TEE
-10414; C; 1043C; # DESERET CAPITAL LETTER DEE
-10415; C; 1043D; # DESERET CAPITAL LETTER CHEE
-10416; C; 1043E; # DESERET CAPITAL LETTER JEE
-10417; C; 1043F; # DESERET CAPITAL LETTER KAY
-10418; C; 10440; # DESERET CAPITAL LETTER GAY
-10419; C; 10441; # DESERET CAPITAL LETTER EF
-1041A; C; 10442; # DESERET CAPITAL LETTER VEE
-1041B; C; 10443; # DESERET CAPITAL LETTER ETH
-1041C; C; 10444; # DESERET CAPITAL LETTER THEE
-1041D; C; 10445; # DESERET CAPITAL LETTER ES
-1041E; C; 10446; # DESERET CAPITAL LETTER ZEE
-1041F; C; 10447; # DESERET CAPITAL LETTER ESH
-10420; C; 10448; # DESERET CAPITAL LETTER ZHEE
-10421; C; 10449; # DESERET CAPITAL LETTER ER
-10422; C; 1044A; # DESERET CAPITAL LETTER EL
-10423; C; 1044B; # DESERET CAPITAL LETTER EM
-10424; C; 1044C; # DESERET CAPITAL LETTER EN
-10425; C; 1044D; # DESERET CAPITAL LETTER ENG
-10426; C; 1044E; # DESERET CAPITAL LETTER OI
-10427; C; 1044F; # DESERET CAPITAL LETTER EW
+# CaseFolding-6.0.0.txt +# Date: 2010-05-18, 00:48:57 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2010 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see http://www.unicode.org/reports/tr44/ +# +# Case Folding Properties +# +# This file is a supplement to the UnicodeData file. +# It provides a case folding mapping generated from the Unicode Character Database. +# If all characters are mapped according to the full mapping below, then +# case differences (according to UnicodeData.txt and SpecialCasing.txt) +# are eliminated. +# +# The data supports both implementations that require simple case foldings +# (where string lengths don't change), and implementations that allow full case folding +# (where string lengths may grow). Note that where they can be supported, the +# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match. +# +# All code points not listed in this file map to themselves. +# +# NOTE: case folding does not preserve normalization formats! +# +# For information on case folding, including how to have case folding +# preserve normalization formats, see Section 3.13 Default Case Algorithms in +# The Unicode Standard, Version 5.0. +# +# ================================================================================ +# Format +# ================================================================================ +# The entries in this file are in the following machine-readable format: +# +# <code>; <status>; <mapping>; # <name> +# +# The status field is: +# C: common case folding, common mappings shared by both simple and full mappings. +# F: full case folding, mappings that cause strings to grow in length. Multiple characters are separated by spaces. +# S: simple case folding, mappings to single characters where different from F. +# T: special case for uppercase I and dotted uppercase I +# - For non-Turkic languages, this mapping is normally not used. +# - For Turkic languages (tr, az), this mapping can be used instead of the normal mapping for these characters. +# Note that the Turkic mappings do not maintain canonical equivalence without additional processing. +# See the discussions of case mapping in the Unicode Standard for more information. +# +# Usage: +# A. To do a simple case folding, use the mappings with status C + S. +# B. To do a full case folding, use the mappings with status C + F. +# +# The mappings with status T can be used or omitted depending on the desired case-folding +# behavior. (The default option is to exclude them.) +# +# ================================================================= +# @missing 0000..10FFFF; <codepoint> +0041; C; 0061; # LATIN CAPITAL LETTER A +0042; C; 0062; # LATIN CAPITAL LETTER B +0043; C; 0063; # LATIN CAPITAL LETTER C +0044; C; 0064; # LATIN CAPITAL LETTER D +0045; C; 0065; # LATIN CAPITAL LETTER E +0046; C; 0066; # LATIN CAPITAL LETTER F +0047; C; 0067; # LATIN CAPITAL LETTER G +0048; C; 0068; # LATIN CAPITAL LETTER H +0049; C; 0069; # LATIN CAPITAL LETTER I +0049; T; 0131; # LATIN CAPITAL LETTER I +004A; C; 006A; # LATIN CAPITAL LETTER J +004B; C; 006B; # LATIN CAPITAL LETTER K +004C; C; 006C; # LATIN CAPITAL LETTER L +004D; C; 006D; # LATIN CAPITAL LETTER M +004E; C; 006E; # LATIN CAPITAL LETTER N +004F; C; 006F; # LATIN CAPITAL LETTER O +0050; C; 0070; # LATIN CAPITAL LETTER P +0051; C; 0071; # LATIN CAPITAL LETTER Q +0052; C; 0072; # LATIN CAPITAL LETTER R +0053; C; 0073; # LATIN CAPITAL LETTER S +0054; C; 0074; # LATIN CAPITAL LETTER T +0055; C; 0075; # LATIN CAPITAL LETTER U +0056; C; 0076; # LATIN CAPITAL LETTER V +0057; C; 0077; # LATIN CAPITAL LETTER W +0058; C; 0078; # LATIN CAPITAL LETTER X +0059; C; 0079; # LATIN CAPITAL LETTER Y +005A; C; 007A; # LATIN CAPITAL LETTER Z +00B5; C; 03BC; # MICRO SIGN +00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE +00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE +00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE +00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE +00C6; C; 00E6; # LATIN CAPITAL LETTER AE +00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA +00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE +00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE +00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS +00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE +00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE +00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS +00D0; C; 00F0; # LATIN CAPITAL LETTER ETH +00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE +00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE +00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE +00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE +00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS +00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE +00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE +00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE +00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS +00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE +00DE; C; 00FE; # LATIN CAPITAL LETTER THORN +00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S +0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON +0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE +0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK +0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE +0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE +010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON +010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON +0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE +0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON +0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE +0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE +0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK +011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON +011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE +0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE +0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA +0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE +0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE +012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON +012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE +012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK +0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE +0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE +0132; C; 0133; # LATIN CAPITAL LIGATURE IJ +0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA +0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE +013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA +013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON +013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE +0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE +0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA +0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON +0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A; C; 014B; # LATIN CAPITAL LETTER ENG +014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON +014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE +0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152; C; 0153; # LATIN CAPITAL LIGATURE OE +0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE +0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA +0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON +015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE +015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA +0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON +0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA +0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON +0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE +0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE +016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON +016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE +016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE +0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK +0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS +0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE +017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON +017F; C; 0073; # LATIN SMALL LETTER LONG S +0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK +0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR +0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX +0186; C; 0254; # LATIN CAPITAL LETTER OPEN O +0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK +0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D +018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK +018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR +018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E +018F; C; 0259; # LATIN CAPITAL LETTER SCHWA +0190; C; 025B; # LATIN CAPITAL LETTER OPEN E +0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK +0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK +0194; C; 0263; # LATIN CAPITAL LETTER GAMMA +0196; C; 0269; # LATIN CAPITAL LETTER IOTA +0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE +0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK +019C; C; 026F; # LATIN CAPITAL LETTER TURNED M +019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK +019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE +01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN +01A2; C; 01A3; # LATIN CAPITAL LETTER OI +01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK +01A6; C; 0280; # LATIN LETTER YR +01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO +01A9; C; 0283; # LATIN CAPITAL LETTER ESH +01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK +01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK +01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN +01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON +01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK +01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK +01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE +01B7; C; 0292; # LATIN CAPITAL LETTER EZH +01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED +01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE +01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON +01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C7; C; 01C9; # LATIN CAPITAL LETTER LJ +01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J +01CA; C; 01CC; # LATIN CAPITAL LETTER NJ +01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON +01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON +01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON +01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON +01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON +01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE +01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON +01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON +01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK +01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON +01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON +01F1; C; 01F3; # LATIN CAPITAL LETTER DZ +01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE +01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR +01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN +01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE +01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE +01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW +021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW +021C; C; 021D; # LATIN CAPITAL LETTER YOGH +021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON +0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222; C; 0223; # LATIN CAPITAL LETTER OU +0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK +0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE +0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA +022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE +0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON +023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE +023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE +023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR +023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP +0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE +0244; C; 0289; # LATIN CAPITAL LETTER U BAR +0245; C; 028C; # LATIN CAPITAL LETTER TURNED V +0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE +0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE +024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE +024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE +0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI +0370; C; 0371; # GREEK CAPITAL LETTER HETA +0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI +0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS +0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS +0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS +038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS +038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS +038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS +038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS +0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA +0392; C; 03B2; # GREEK CAPITAL LETTER BETA +0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA +0394; C; 03B4; # GREEK CAPITAL LETTER DELTA +0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON +0396; C; 03B6; # GREEK CAPITAL LETTER ZETA +0397; C; 03B7; # GREEK CAPITAL LETTER ETA +0398; C; 03B8; # GREEK CAPITAL LETTER THETA +0399; C; 03B9; # GREEK CAPITAL LETTER IOTA +039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA +039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA +039C; C; 03BC; # GREEK CAPITAL LETTER MU +039D; C; 03BD; # GREEK CAPITAL LETTER NU +039E; C; 03BE; # GREEK CAPITAL LETTER XI +039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON +03A0; C; 03C0; # GREEK CAPITAL LETTER PI +03A1; C; 03C1; # GREEK CAPITAL LETTER RHO +03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA +03A4; C; 03C4; # GREEK CAPITAL LETTER TAU +03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON +03A6; C; 03C6; # GREEK CAPITAL LETTER PHI +03A7; C; 03C7; # GREEK CAPITAL LETTER CHI +03A8; C; 03C8; # GREEK CAPITAL LETTER PSI +03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA +03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA +03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL +03D0; C; 03B2; # GREEK BETA SYMBOL +03D1; C; 03B8; # GREEK THETA SYMBOL +03D5; C; 03C6; # GREEK PHI SYMBOL +03D6; C; 03C0; # GREEK PI SYMBOL +03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA +03DA; C; 03DB; # GREEK LETTER STIGMA +03DC; C; 03DD; # GREEK LETTER DIGAMMA +03DE; C; 03DF; # GREEK LETTER KOPPA +03E0; C; 03E1; # GREEK LETTER SAMPI +03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI +03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI +03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI +03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI +03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA +03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA +03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI +03F0; C; 03BA; # GREEK KAPPA SYMBOL +03F1; C; 03C1; # GREEK RHO SYMBOL +03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL +03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL +03F7; C; 03F8; # GREEK CAPITAL LETTER SHO +03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL +03FA; C; 03FB; # GREEK CAPITAL LETTER SAN +03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL +03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL +03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401; C; 0451; # CYRILLIC CAPITAL LETTER IO +0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE +0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE +0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE +0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407; C; 0457; # CYRILLIC CAPITAL LETTER YI +0408; C; 0458; # CYRILLIC CAPITAL LETTER JE +0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE +040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE +040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE +040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE +040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE +040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U +040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE +0410; C; 0430; # CYRILLIC CAPITAL LETTER A +0411; C; 0431; # CYRILLIC CAPITAL LETTER BE +0412; C; 0432; # CYRILLIC CAPITAL LETTER VE +0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE +0414; C; 0434; # CYRILLIC CAPITAL LETTER DE +0415; C; 0435; # CYRILLIC CAPITAL LETTER IE +0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE +0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE +0418; C; 0438; # CYRILLIC CAPITAL LETTER I +0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I +041A; C; 043A; # CYRILLIC CAPITAL LETTER KA +041B; C; 043B; # CYRILLIC CAPITAL LETTER EL +041C; C; 043C; # CYRILLIC CAPITAL LETTER EM +041D; C; 043D; # CYRILLIC CAPITAL LETTER EN +041E; C; 043E; # CYRILLIC CAPITAL LETTER O +041F; C; 043F; # CYRILLIC CAPITAL LETTER PE +0420; C; 0440; # CYRILLIC CAPITAL LETTER ER +0421; C; 0441; # CYRILLIC CAPITAL LETTER ES +0422; C; 0442; # CYRILLIC CAPITAL LETTER TE +0423; C; 0443; # CYRILLIC CAPITAL LETTER U +0424; C; 0444; # CYRILLIC CAPITAL LETTER EF +0425; C; 0445; # CYRILLIC CAPITAL LETTER HA +0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE +0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE +0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA +0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA +042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN +042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU +042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN +042D; C; 044D; # CYRILLIC CAPITAL LETTER E +042E; C; 044E; # CYRILLIC CAPITAL LETTER YU +042F; C; 044F; # CYRILLIC CAPITAL LETTER YA +0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA +0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT +0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E +0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS +0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS +046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI +0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI +0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA +0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA +0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478; C; 0479; # CYRILLIC CAPITAL LETTER UK +047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA +047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E; C; 047F; # CYRILLIC CAPITAL LETTER OT +0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA +048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK +0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA +04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE +04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U +04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE +04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA +04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA +04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE +04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE +04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA +04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON +04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O +04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON +04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE +0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE +0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE +0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE +0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE +0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE +050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE +050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE +050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE +0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE +0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK +0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA +0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA +0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE +051A; C; 051B; # CYRILLIC CAPITAL LETTER QA +051C; C; 051D; # CYRILLIC CAPITAL LETTER WE +051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA +0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB +0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN +0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM +0534; C; 0564; # ARMENIAN CAPITAL LETTER DA +0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH +0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA +0537; C; 0567; # ARMENIAN CAPITAL LETTER EH +0538; C; 0568; # ARMENIAN CAPITAL LETTER ET +0539; C; 0569; # ARMENIAN CAPITAL LETTER TO +053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE +053B; C; 056B; # ARMENIAN CAPITAL LETTER INI +053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN +053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH +053E; C; 056E; # ARMENIAN CAPITAL LETTER CA +053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN +0540; C; 0570; # ARMENIAN CAPITAL LETTER HO +0541; C; 0571; # ARMENIAN CAPITAL LETTER JA +0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD +0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH +0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN +0545; C; 0575; # ARMENIAN CAPITAL LETTER YI +0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW +0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA +0548; C; 0578; # ARMENIAN CAPITAL LETTER VO +0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA +054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH +054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH +054C; C; 057C; # ARMENIAN CAPITAL LETTER RA +054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH +054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW +054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN +0550; C; 0580; # ARMENIAN CAPITAL LETTER REH +0551; C; 0581; # ARMENIAN CAPITAL LETTER CO +0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN +0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR +0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH +0555; C; 0585; # ARMENIAN CAPITAL LETTER OH +0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH +0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN +10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN +10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN +10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN +10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON +10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN +10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN +10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN +10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN +10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN +10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN +10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS +10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN +10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR +10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON +10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR +10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR +10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE +10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN +10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR +10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN +10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR +10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR +10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN +10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR +10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN +10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN +10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN +10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL +10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL +10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR +10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN +10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN +10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE +10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE +10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE +10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE +10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR +10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE +1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW +1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW +1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW +1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW +1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA +1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON +1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW +1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS +1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA +1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE +1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW +1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW +1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW +1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE +1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW +1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW +1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE +1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW +1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW +1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW +1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE +1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW +1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE +1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE +1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS +1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW +1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW +1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS +1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE +1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE +1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING +1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE +1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S +1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S +1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE +1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE +1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE +1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP +1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI +1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA +1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI +1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA +1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI +1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA +1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI +1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA +1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI +1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA +1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI +1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA +1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA +1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI +1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI +1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA +1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI +1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI +1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON +1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA +1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE; C; 03B9; # GREEK PROSGEGRAMMENI +1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI +1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI +1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA +1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA +1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA +1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA +1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI +1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON +1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA +1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA +1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA +1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI +1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI +1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON +1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA +1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA +1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI +1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI +1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA +1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA +1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2126; C; 03C9; # OHM SIGN +212A; C; 006B; # KELVIN SIGN +212B; C; 00E5; # ANGSTROM SIGN +2132; C; 214E; # TURNED CAPITAL F +2160; C; 2170; # ROMAN NUMERAL ONE +2161; C; 2171; # ROMAN NUMERAL TWO +2162; C; 2172; # ROMAN NUMERAL THREE +2163; C; 2173; # ROMAN NUMERAL FOUR +2164; C; 2174; # ROMAN NUMERAL FIVE +2165; C; 2175; # ROMAN NUMERAL SIX +2166; C; 2176; # ROMAN NUMERAL SEVEN +2167; C; 2177; # ROMAN NUMERAL EIGHT +2168; C; 2178; # ROMAN NUMERAL NINE +2169; C; 2179; # ROMAN NUMERAL TEN +216A; C; 217A; # ROMAN NUMERAL ELEVEN +216B; C; 217B; # ROMAN NUMERAL TWELVE +216C; C; 217C; # ROMAN NUMERAL FIFTY +216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED +216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED +216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND +2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED +24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A +24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B +24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C +24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D +24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E +24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F +24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G +24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H +24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I +24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J +24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K +24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L +24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M +24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N +24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O +24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P +24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q +24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R +24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S +24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T +24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U +24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V +24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W +24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X +24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y +24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z +2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU +2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY +2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE +2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI +2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO +2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU +2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE +2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO +2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA +2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE +2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE +2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I +2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI +2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO +2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE +2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE +2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI +2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU +2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI +2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI +2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO +2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO +2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU +2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU +2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU +2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU +2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE +2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA +2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI +2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI +2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA +2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU +2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI +2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI +2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA +2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU +2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS +2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL +2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO +2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS +2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS +2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS +2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA +2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA +2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC +2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A +2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE +2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE +2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL +2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER +2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER +2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA +2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK +2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A +2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA +2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK +2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H +2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL +2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL +2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA +2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA +2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA +2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA +2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE +2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU +2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA +2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE +2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE +2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA +2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA +2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA +2C98; C; 2C99; # COPTIC CAPITAL LETTER MI +2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI +2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI +2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O +2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI +2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO +2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA +2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU +2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA +2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI +2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI +2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI +2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU +2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN +2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA +2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI +2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI +2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI +2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH +2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI +2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI +2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA +2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA +2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT +2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA +2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA +A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO +A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE +A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA +A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV +A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER +A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU +A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A +A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS +A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN +A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE +A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE +A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL +A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM +A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O +A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O +A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680; C; A681; # CYRILLIC CAPITAL LETTER DWE +A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE +A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE +A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE +A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE +A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE +A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE +A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE +A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE +A694; C; A695; # CYRILLIC CAPITAL LETTER HWE +A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE +A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726; C; A727; # LATIN CAPITAL LETTER HENG +A728; C; A729; # LATIN CAPITAL LETTER TZ +A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO +A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO +A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732; C; A733; # LATIN CAPITAL LETTER AA +A734; C; A735; # LATIN CAPITAL LETTER AO +A736; C; A737; # LATIN CAPITAL LETTER AU +A738; C; A739; # LATIN CAPITAL LETTER AV +A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C; C; A73D; # LATIN CAPITAL LETTER AY +A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT +A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE +A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746; C; A747; # LATIN CAPITAL LETTER BROKEN L +A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP +A74E; C; A74F; # LATIN CAPITAL LETTER OO +A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH +A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA +A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA +A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760; C; A761; # LATIN CAPITAL LETTER VY +A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z +A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE +A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768; C; A769; # LATIN CAPITAL LETTER VEND +A76A; C; A76B; # LATIN CAPITAL LETTER ET +A76C; C; A76D; # LATIN CAPITAL LETTER IS +A76E; C; A76F; # LATIN CAPITAL LETTER CON +A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D +A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F +A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G +A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G +A780; C; A781; # LATIN CAPITAL LETTER TURNED L +A782; C; A783; # LATIN CAPITAL LETTER INSULAR R +A784; C; A785; # LATIN CAPITAL LETTER INSULAR S +A786; C; A787; # LATIN CAPITAL LETTER INSULAR T +A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO +A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H +A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER +A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF +FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI +FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL +FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI +FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL +FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T +FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST +FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW +FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH +FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI +FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW +FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH +FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A +FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B +FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C +FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D +FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E +FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F +FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G +FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H +FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I +FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J +FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K +FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L +FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M +FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N +FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O +FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P +FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q +FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R +FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S +FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T +FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U +FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V +FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W +FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X +FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y +FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z +10400; C; 10428; # DESERET CAPITAL LETTER LONG I +10401; C; 10429; # DESERET CAPITAL LETTER LONG E +10402; C; 1042A; # DESERET CAPITAL LETTER LONG A +10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH +10404; C; 1042C; # DESERET CAPITAL LETTER LONG O +10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO +10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I +10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E +10408; C; 10430; # DESERET CAPITAL LETTER SHORT A +10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH +1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O +1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO +1040C; C; 10434; # DESERET CAPITAL LETTER AY +1040D; C; 10435; # DESERET CAPITAL LETTER OW +1040E; C; 10436; # DESERET CAPITAL LETTER WU +1040F; C; 10437; # DESERET CAPITAL LETTER YEE +10410; C; 10438; # DESERET CAPITAL LETTER H +10411; C; 10439; # DESERET CAPITAL LETTER PEE +10412; C; 1043A; # DESERET CAPITAL LETTER BEE +10413; C; 1043B; # DESERET CAPITAL LETTER TEE +10414; C; 1043C; # DESERET CAPITAL LETTER DEE +10415; C; 1043D; # DESERET CAPITAL LETTER CHEE +10416; C; 1043E; # DESERET CAPITAL LETTER JEE +10417; C; 1043F; # DESERET CAPITAL LETTER KAY +10418; C; 10440; # DESERET CAPITAL LETTER GAY +10419; C; 10441; # DESERET CAPITAL LETTER EF +1041A; C; 10442; # DESERET CAPITAL LETTER VEE +1041B; C; 10443; # DESERET CAPITAL LETTER ETH +1041C; C; 10444; # DESERET CAPITAL LETTER THEE +1041D; C; 10445; # DESERET CAPITAL LETTER ES +1041E; C; 10446; # DESERET CAPITAL LETTER ZEE +1041F; C; 10447; # DESERET CAPITAL LETTER ESH +10420; C; 10448; # DESERET CAPITAL LETTER ZHEE +10421; C; 10449; # DESERET CAPITAL LETTER ER +10422; C; 1044A; # DESERET CAPITAL LETTER EL +10423; C; 1044B; # DESERET CAPITAL LETTER EM +10424; C; 1044C; # DESERET CAPITAL LETTER EN +10425; C; 1044D; # DESERET CAPITAL LETTER ENG +10426; C; 1044E; # DESERET CAPITAL LETTER OI +10427; C; 1044F; # DESERET CAPITAL LETTER EW diff --git a/fontconfig/fc-case/Makefile.am b/fontconfig/fc-case/Makefile.am index 47d9634c6..4f255fc71 100644 --- a/fontconfig/fc-case/Makefile.am +++ b/fontconfig/fc-case/Makefile.am @@ -1,64 +1,64 @@ -#
-# $Id $
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
-
-TMPL=fccase.tmpl.h
-STMPL=${top_srcdir}/fc-case/${TMPL}
-TARG=fccase.h
-
-noinst_PROGRAMS=fc-case
-
-noinst_HEADERS=$(TARG)
-
-fc_case_SRCS= \
- fc-case.c \
- fccaseint.h \
- fccaseread.c
-
-CASEFOLDING=CaseFolding.txt
-SCASEFOLDING=${top_srcdir}/fc-case/CaseFolding.txt
-
-EXTRA_DIST = $(TARG) $(TMPL) $(CASEFOLDING)
-
-if CROSS_COMPILING
-$(TARG): $(STMPL) fc-case.c $(SCASEFOLDING)
- @echo Warning: cannot rebuild $(TARG) when cross-compiling
-else
-$(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING)
- $(AM_V_GEN) $(RM) $(TARG); \
- ./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG).tmp && \
- mv $(TARG).tmp $(TARG)
-endif
-
-ALIAS_FILES = fcalias.h fcaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES)
-
-$(ALIAS_FILES):
- touch $(ALIAS_FILES)
-
-CLEANFILES = $(ALIAS_FILES)
-
-MAINTAINERCLEANFILES = $(TARG)
+# +# $Id $ +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# + +INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) + +TMPL=fccase.tmpl.h +STMPL=${top_srcdir}/fc-case/${TMPL} +TARG=fccase.h + +noinst_PROGRAMS=fc-case + +noinst_HEADERS=$(TARG) + +fc_case_SRCS= \ + fc-case.c \ + fccaseint.h \ + fccaseread.c + +CASEFOLDING=CaseFolding.txt +SCASEFOLDING=${top_srcdir}/fc-case/CaseFolding.txt + +EXTRA_DIST = $(TARG) $(TMPL) $(CASEFOLDING) + +if CROSS_COMPILING +$(TARG): $(STMPL) fc-case.c $(SCASEFOLDING) + @echo Warning: cannot rebuild $(TARG) when cross-compiling +else +$(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING) + $(AM_V_GEN) $(RM) $(TARG); \ + ./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG).tmp && \ + mv $(TARG).tmp $(TARG) +endif + +ALIAS_FILES = fcalias.h fcaliastail.h + +BUILT_SOURCES = $(ALIAS_FILES) + +$(ALIAS_FILES): + touch $(ALIAS_FILES) + +CLEANFILES = $(ALIAS_FILES) + +MAINTAINERCLEANFILES = $(TARG) diff --git a/fontconfig/fc-case/fc-case.c b/fontconfig/fc-case/fc-case.c index dd8b1f08a..236bff5f0 100644 --- a/fontconfig/fc-case/fc-case.c +++ b/fontconfig/fc-case/fc-case.c @@ -1,363 +1,363 @@ -/*
- * fontconfig/fc-case/fc-case.c
- *
- * Copyright © 2004 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <ctype.h>
-
-#define MAX_OUT 32
-#define MAX_LINE 8192
-
-typedef enum _caseFoldClass { CaseFoldCommon, CaseFoldFull, CaseFoldSimple, CaseFoldTurkic } CaseFoldClass;
-
-typedef struct _caseFoldClassMap {
- const char *name;
- CaseFoldClass class;
-} CaseFoldClassMap;
-
-static const CaseFoldClassMap caseFoldClassMap[] = {
- { "C", CaseFoldCommon },
- { "F", CaseFoldFull },
- { "S", CaseFoldSimple },
- { "T", CaseFoldTurkic },
- { 0, 0 }
-};
-
-typedef struct _caseFoldRaw {
- FcChar32 upper;
- CaseFoldClass class;
- int nout;
- FcChar32 lower[MAX_OUT];
-} CaseFoldRaw;
-
-static void
-panic (const char *reason)
-{
- fprintf (stderr, "fc-case: panic %s\n", reason);
- exit (1);
-}
-
-int maxExpand;
-static FcCaseFold *folds;
-int nfolds;
-
-static FcCaseFold *
-addFold (void)
-{
- if (folds)
- folds = realloc (folds, (nfolds + 1) * sizeof (FcCaseFold));
- else
- folds = malloc (sizeof (FcCaseFold));
- if (!folds)
- panic ("out of memory");
- return &folds[nfolds++];
-}
-
-static int
-ucs4_to_utf8 (FcChar32 ucs4,
- FcChar8 dest[FC_UTF8_MAX_LEN])
-{
- int bits;
- FcChar8 *d = dest;
-
- if (ucs4 < 0x80) { *d++= ucs4; bits= -6; }
- else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; }
- else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; }
- else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; }
- else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; }
- else return 0;
-
- for ( ; bits >= 0; bits-= 6) {
- *d++= ((ucs4 >> bits) & 0x3F) | 0x80;
- }
- return d - dest;
-}
-
-static int
-utf8_size (FcChar32 ucs4)
-{
- FcChar8 utf8[FC_UTF8_MAX_LEN];
- return ucs4_to_utf8 (ucs4, utf8 );
-}
-
-static FcChar8 *foldChars;
-static int nfoldChars;
-static int maxFoldChars;
-static FcChar32 minFoldChar;
-static FcChar32 maxFoldChar;
-
-static void
-addChar (FcChar32 c)
-{
- FcChar8 utf8[FC_UTF8_MAX_LEN];
- int len;
- int i;
-
- len = ucs4_to_utf8 (c, utf8);
- if (foldChars)
- foldChars = realloc (foldChars, (nfoldChars + len) * sizeof (FcChar8));
- else
- foldChars = malloc (sizeof (FcChar8) * len);
- if (!foldChars)
- panic ("out of memory");
- for (i = 0; i < len; i++)
- foldChars[nfoldChars + i] = utf8[i];
- nfoldChars += len;
-}
-
-static int
-foldExtends (FcCaseFold *fold, CaseFoldRaw *raw)
-{
- switch (fold->method) {
- case FC_CASE_FOLD_RANGE:
- if ((short) (raw->lower[0] - raw->upper) != fold->offset)
- return 0;
- if (raw->upper != fold->upper + fold->count)
- return 0;
- return 1;
- case FC_CASE_FOLD_EVEN_ODD:
- if ((short) (raw->lower[0] - raw->upper) != 1)
- return 0;
- if (raw->upper != fold->upper + fold->count + 1)
- return 0;
- return 1;
- case FC_CASE_FOLD_FULL:
- break;
- }
- return 0;
-}
-
-static const char *
-case_fold_method_name (FcChar16 method)
-{
- switch (method) {
- case FC_CASE_FOLD_RANGE: return "FC_CASE_FOLD_RANGE,";
- case FC_CASE_FOLD_EVEN_ODD: return "FC_CASE_FOLD_EVEN_ODD,";
- case FC_CASE_FOLD_FULL: return "FC_CASE_FOLD_FULL,";
- default: return "unknown";
- }
-}
-
-static void
-dump (void)
-{
- int i;
-
- printf ( "#define FC_NUM_CASE_FOLD %d\n", nfolds);
- printf ( "#define FC_NUM_CASE_FOLD_CHARS %d\n", nfoldChars);
- printf ( "#define FC_MAX_CASE_FOLD_CHARS %d\n", maxFoldChars);
- printf ( "#define FC_MAX_CASE_FOLD_EXPAND %d\n", maxExpand);
- printf ( "#define FC_MIN_FOLD_CHAR 0x%08x\n", minFoldChar);
- printf ( "#define FC_MAX_FOLD_CHAR 0x%08x\n", maxFoldChar);
- printf ( "\n");
-
- /*
- * Dump out ranges
- */
- printf ("static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = {\n");
- for (i = 0; i < nfolds; i++)
- {
- printf (" { 0x%08x, %-22s 0x%04x, %6d },\n",
- folds[i].upper, case_fold_method_name (folds[i].method),
- folds[i].count, folds[i].offset);
- }
- printf ("};\n\n");
-
- /*
- * Dump out "other" values
- */
-
- printf ("static const FcChar8 fcCaseFoldChars[FC_NUM_CASE_FOLD_CHARS] = {\n");
- for (i = 0; i < nfoldChars; i++)
- {
- printf ("0x%02x", foldChars[i]);
- if (i != nfoldChars - 1)
- {
- if ((i & 0xf) == 0xf)
- printf (",\n");
- else
- printf (",");
- }
- }
- printf ("\n};\n");
-}
-
-/*
- * Read the standard Unicode CaseFolding.txt file
- */
-#define SEP "; \t\n"
-
-static int
-parseRaw (char *line, CaseFoldRaw *raw)
-{
- char *tok, *end;
- int i;
-
- if (!isxdigit (line[0]))
- return 0;
- /*
- * Get upper case value
- */
- tok = strtok (line, SEP);
- if (!tok || tok[0] == '#')
- return 0;
- raw->upper = strtol (tok, &end, 16);
- if (end == tok)
- return 0;
- /*
- * Get class
- */
- tok = strtok (NULL, SEP);
- if (!tok || tok[0] == '#')
- return 0;
- for (i = 0; caseFoldClassMap[i].name; i++)
- if (!strcmp (tok, caseFoldClassMap[i].name))
- {
- raw->class = caseFoldClassMap[i].class;
- break;
- }
- if (!caseFoldClassMap[i].name)
- return 0;
-
- /*
- * Get list of result characters
- */
- for (i = 0; i < MAX_OUT; i++)
- {
- tok = strtok (NULL, SEP);
- if (!tok || tok[0] == '#')
- break;
- raw->lower[i] = strtol (tok, &end, 16);
- if (end == tok)
- break;
- }
- if (i == 0)
- return 0;
- raw->nout = i;
- return 1;
-}
-
-static int
-caseFoldReadRaw (FILE *in, CaseFoldRaw *raw)
-{
- char line[MAX_LINE];
-
- for (;;)
- {
- if (!fgets (line, sizeof (line) - 1, in))
- return 0;
- if (parseRaw (line, raw))
- return 1;
- }
-}
-
-int
-main (int argc, char **argv)
-{
- FcCaseFold *fold = 0;
- CaseFoldRaw raw;
- int i;
- FILE *caseFile;
- char line[MAX_LINE];
- int expand;
-
- if (argc != 2)
- panic ("usage: fc-case CaseFolding.txt");
- caseFile = fopen (argv[1], "r");
- if (!caseFile)
- panic ("can't open case folding file");
-
- while (caseFoldReadRaw (caseFile, &raw))
- {
- if (!minFoldChar)
- minFoldChar = raw.upper;
- maxFoldChar = raw.upper;
- switch (raw.class) {
- case CaseFoldCommon:
- case CaseFoldFull:
- if (raw.nout == 1)
- {
- if (fold && foldExtends (fold, &raw))
- fold->count = raw.upper - fold->upper + 1;
- else
- {
- fold = addFold ();
- fold->upper = raw.upper;
- fold->offset = raw.lower[0] - raw.upper;
- if (fold->offset == 1)
- fold->method = FC_CASE_FOLD_EVEN_ODD;
- else
- fold->method = FC_CASE_FOLD_RANGE;
- fold->count = 1;
- }
- expand = utf8_size (raw.lower[0]) - utf8_size(raw.upper);
- }
- else
- {
- fold = addFold ();
- fold->upper = raw.upper;
- fold->method = FC_CASE_FOLD_FULL;
- fold->offset = nfoldChars;
- for (i = 0; i < raw.nout; i++)
- addChar (raw.lower[i]);
- fold->count = nfoldChars - fold->offset;
- if (fold->count > maxFoldChars)
- maxFoldChars = fold->count;
- expand = fold->count - utf8_size (raw.upper);
- }
- if (expand > maxExpand)
- maxExpand = expand;
- break;
- case CaseFoldSimple:
- break;
- case CaseFoldTurkic:
- break;
- }
- }
- /*
- * Scan the input until the marker is found
- */
-
- while (fgets (line, sizeof (line), stdin))
- {
- if (!strncmp (line, "@@@", 3))
- break;
- fputs (line, stdout);
- }
-
- /*
- * Dump these tables
- */
- dump ();
-
- /*
- * And flush out the rest of the input file
- */
-
- while (fgets (line, sizeof (line), stdin))
- fputs (line, stdout);
-
- fflush (stdout);
- exit (ferror (stdout));
-}
+/* + * fontconfig/fc-case/fc-case.c + * + * Copyright © 2004 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <ctype.h> + +#define MAX_OUT 32 +#define MAX_LINE 8192 + +typedef enum _caseFoldClass { CaseFoldCommon, CaseFoldFull, CaseFoldSimple, CaseFoldTurkic } CaseFoldClass; + +typedef struct _caseFoldClassMap { + const char *name; + CaseFoldClass class; +} CaseFoldClassMap; + +static const CaseFoldClassMap caseFoldClassMap[] = { + { "C", CaseFoldCommon }, + { "F", CaseFoldFull }, + { "S", CaseFoldSimple }, + { "T", CaseFoldTurkic }, + { 0, 0 } +}; + +typedef struct _caseFoldRaw { + FcChar32 upper; + CaseFoldClass class; + int nout; + FcChar32 lower[MAX_OUT]; +} CaseFoldRaw; + +static void +panic (const char *reason) +{ + fprintf (stderr, "fc-case: panic %s\n", reason); + exit (1); +} + +int maxExpand; +static FcCaseFold *folds; +int nfolds; + +static FcCaseFold * +addFold (void) +{ + if (folds) + folds = realloc (folds, (nfolds + 1) * sizeof (FcCaseFold)); + else + folds = malloc (sizeof (FcCaseFold)); + if (!folds) + panic ("out of memory"); + return &folds[nfolds++]; +} + +static int +ucs4_to_utf8 (FcChar32 ucs4, + FcChar8 dest[FC_UTF8_MAX_LEN]) +{ + int bits; + FcChar8 *d = dest; + + if (ucs4 < 0x80) { *d++= ucs4; bits= -6; } + else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; } + else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; } + else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; } + else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; } + else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; } + else return 0; + + for ( ; bits >= 0; bits-= 6) { + *d++= ((ucs4 >> bits) & 0x3F) | 0x80; + } + return d - dest; +} + +static int +utf8_size (FcChar32 ucs4) +{ + FcChar8 utf8[FC_UTF8_MAX_LEN]; + return ucs4_to_utf8 (ucs4, utf8 ); +} + +static FcChar8 *foldChars; +static int nfoldChars; +static int maxFoldChars; +static FcChar32 minFoldChar; +static FcChar32 maxFoldChar; + +static void +addChar (FcChar32 c) +{ + FcChar8 utf8[FC_UTF8_MAX_LEN]; + int len; + int i; + + len = ucs4_to_utf8 (c, utf8); + if (foldChars) + foldChars = realloc (foldChars, (nfoldChars + len) * sizeof (FcChar8)); + else + foldChars = malloc (sizeof (FcChar8) * len); + if (!foldChars) + panic ("out of memory"); + for (i = 0; i < len; i++) + foldChars[nfoldChars + i] = utf8[i]; + nfoldChars += len; +} + +static int +foldExtends (FcCaseFold *fold, CaseFoldRaw *raw) +{ + switch (fold->method) { + case FC_CASE_FOLD_RANGE: + if ((short) (raw->lower[0] - raw->upper) != fold->offset) + return 0; + if (raw->upper != fold->upper + fold->count) + return 0; + return 1; + case FC_CASE_FOLD_EVEN_ODD: + if ((short) (raw->lower[0] - raw->upper) != 1) + return 0; + if (raw->upper != fold->upper + fold->count + 1) + return 0; + return 1; + case FC_CASE_FOLD_FULL: + break; + } + return 0; +} + +static const char * +case_fold_method_name (FcChar16 method) +{ + switch (method) { + case FC_CASE_FOLD_RANGE: return "FC_CASE_FOLD_RANGE,"; + case FC_CASE_FOLD_EVEN_ODD: return "FC_CASE_FOLD_EVEN_ODD,"; + case FC_CASE_FOLD_FULL: return "FC_CASE_FOLD_FULL,"; + default: return "unknown"; + } +} + +static void +dump (void) +{ + int i; + + printf ( "#define FC_NUM_CASE_FOLD %d\n", nfolds); + printf ( "#define FC_NUM_CASE_FOLD_CHARS %d\n", nfoldChars); + printf ( "#define FC_MAX_CASE_FOLD_CHARS %d\n", maxFoldChars); + printf ( "#define FC_MAX_CASE_FOLD_EXPAND %d\n", maxExpand); + printf ( "#define FC_MIN_FOLD_CHAR 0x%08x\n", minFoldChar); + printf ( "#define FC_MAX_FOLD_CHAR 0x%08x\n", maxFoldChar); + printf ( "\n"); + + /* + * Dump out ranges + */ + printf ("static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = {\n"); + for (i = 0; i < nfolds; i++) + { + printf (" { 0x%08x, %-22s 0x%04x, %6d },\n", + folds[i].upper, case_fold_method_name (folds[i].method), + folds[i].count, folds[i].offset); + } + printf ("};\n\n"); + + /* + * Dump out "other" values + */ + + printf ("static const FcChar8 fcCaseFoldChars[FC_NUM_CASE_FOLD_CHARS] = {\n"); + for (i = 0; i < nfoldChars; i++) + { + printf ("0x%02x", foldChars[i]); + if (i != nfoldChars - 1) + { + if ((i & 0xf) == 0xf) + printf (",\n"); + else + printf (","); + } + } + printf ("\n};\n"); +} + +/* + * Read the standard Unicode CaseFolding.txt file + */ +#define SEP "; \t\n" + +static int +parseRaw (char *line, CaseFoldRaw *raw) +{ + char *tok, *end; + int i; + + if (!isxdigit (line[0])) + return 0; + /* + * Get upper case value + */ + tok = strtok (line, SEP); + if (!tok || tok[0] == '#') + return 0; + raw->upper = strtol (tok, &end, 16); + if (end == tok) + return 0; + /* + * Get class + */ + tok = strtok (NULL, SEP); + if (!tok || tok[0] == '#') + return 0; + for (i = 0; caseFoldClassMap[i].name; i++) + if (!strcmp (tok, caseFoldClassMap[i].name)) + { + raw->class = caseFoldClassMap[i].class; + break; + } + if (!caseFoldClassMap[i].name) + return 0; + + /* + * Get list of result characters + */ + for (i = 0; i < MAX_OUT; i++) + { + tok = strtok (NULL, SEP); + if (!tok || tok[0] == '#') + break; + raw->lower[i] = strtol (tok, &end, 16); + if (end == tok) + break; + } + if (i == 0) + return 0; + raw->nout = i; + return 1; +} + +static int +caseFoldReadRaw (FILE *in, CaseFoldRaw *raw) +{ + char line[MAX_LINE]; + + for (;;) + { + if (!fgets (line, sizeof (line) - 1, in)) + return 0; + if (parseRaw (line, raw)) + return 1; + } +} + +int +main (int argc, char **argv) +{ + FcCaseFold *fold = 0; + CaseFoldRaw raw; + int i; + FILE *caseFile; + char line[MAX_LINE]; + int expand; + + if (argc != 2) + panic ("usage: fc-case CaseFolding.txt"); + caseFile = fopen (argv[1], "r"); + if (!caseFile) + panic ("can't open case folding file"); + + while (caseFoldReadRaw (caseFile, &raw)) + { + if (!minFoldChar) + minFoldChar = raw.upper; + maxFoldChar = raw.upper; + switch (raw.class) { + case CaseFoldCommon: + case CaseFoldFull: + if (raw.nout == 1) + { + if (fold && foldExtends (fold, &raw)) + fold->count = raw.upper - fold->upper + 1; + else + { + fold = addFold (); + fold->upper = raw.upper; + fold->offset = raw.lower[0] - raw.upper; + if (fold->offset == 1) + fold->method = FC_CASE_FOLD_EVEN_ODD; + else + fold->method = FC_CASE_FOLD_RANGE; + fold->count = 1; + } + expand = utf8_size (raw.lower[0]) - utf8_size(raw.upper); + } + else + { + fold = addFold (); + fold->upper = raw.upper; + fold->method = FC_CASE_FOLD_FULL; + fold->offset = nfoldChars; + for (i = 0; i < raw.nout; i++) + addChar (raw.lower[i]); + fold->count = nfoldChars - fold->offset; + if (fold->count > maxFoldChars) + maxFoldChars = fold->count; + expand = fold->count - utf8_size (raw.upper); + } + if (expand > maxExpand) + maxExpand = expand; + break; + case CaseFoldSimple: + break; + case CaseFoldTurkic: + break; + } + } + /* + * Scan the input until the marker is found + */ + + while (fgets (line, sizeof (line), stdin)) + { + if (!strncmp (line, "@@@", 3)) + break; + fputs (line, stdout); + } + + /* + * Dump these tables + */ + dump (); + + /* + * And flush out the rest of the input file + */ + + while (fgets (line, sizeof (line), stdin)) + fputs (line, stdout); + + fflush (stdout); + exit (ferror (stdout)); +} diff --git a/fontconfig/fc-case/fccase.tmpl.h b/fontconfig/fc-case/fccase.tmpl.h index 45d67d12b..c8e2925b9 100644 --- a/fontconfig/fc-case/fccase.tmpl.h +++ b/fontconfig/fc-case/fccase.tmpl.h @@ -1,25 +1,25 @@ -/*
- * fontconfig/fc-case/fccase.tmpl.h
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@@@
+/* + * fontconfig/fc-case/fccase.tmpl.h + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@@@ diff --git a/fontconfig/fc-cat/Makefile.am b/fontconfig/fc-cat/Makefile.am index b88c1a499..587459591 100644 --- a/fontconfig/fc-cat/Makefile.am +++ b/fontconfig/fc-cat/Makefile.am @@ -1,59 +1,59 @@ -#
-# fontconfig/fc-cat/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC2MAN = docbook2man
-
-FC_CAT_SRC=${top_srcdir}/fc-cat
-
-SGML = ${FC_CAT_SRC}/fc-cat.sgml
-
-INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
-
-bin_PROGRAMS=fc-cat
-
-BUILT_MANS=fc-cat.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-cat.sgml ${BUILT_MANS}
-
-fc_cat_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+# +# fontconfig/fc-cat/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC2MAN = docbook2man + +FC_CAT_SRC=${top_srcdir}/fc-cat + +SGML = ${FC_CAT_SRC}/fc-cat.sgml + +INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) + +bin_PROGRAMS=fc-cat + +BUILT_MANS=fc-cat.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-cat.sgml ${BUILT_MANS} + +fc_cat_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-cat/fc-cat.c b/fontconfig/fc-cat/fc-cat.c index 623a01466..5ee947ec2 100644 --- a/fontconfig/fc-cat/fc-cat.c +++ b/fontconfig/fc-cat/fc-cat.c @@ -1,392 +1,392 @@ -/*
- * fontconfig/fc-cat/fc-cat.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include "../src/fcarch.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-const struct option longopts[] = {
- {"version", 0, 0, 'V'},
- {"verbose", 0, 0, 'v'},
- {"recurse", 0, 0, 'r'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-/*
- * POSIX has broken stdio so that getc must do thread-safe locking,
- * this is a serious performance problem for applications doing large
- * amounts of IO with getc (as is done here). If available, use
- * the getc_unlocked varient instead.
- */
-
-#if defined(getc_unlocked) || defined(_IO_getc_unlocked)
-#define GETC(f) getc_unlocked(f)
-#define PUTC(c,f) putc_unlocked(c,f)
-#else
-#define GETC(f) getc(f)
-#define PUTC(c,f) putc(c,f)
-#endif
-
-static FcBool
-write_chars (FILE *f, const FcChar8 *chars)
-{
- FcChar8 c;
- while ((c = *chars++))
- {
- switch (c) {
- case '"':
- case '\\':
- if (PUTC ('\\', f) == EOF)
- return FcFalse;
- /* fall through */
- default:
- if (PUTC (c, f) == EOF)
- return FcFalse;
- }
- }
- return FcTrue;
-}
-
-static FcBool
-write_ulong (FILE *f, unsigned long t)
-{
- int pow;
- unsigned long temp, digit;
-
- temp = t;
- pow = 1;
- while (temp >= 10)
- {
- temp /= 10;
- pow *= 10;
- }
- temp = t;
- while (pow)
- {
- digit = temp / pow;
- if (PUTC ((char) digit + '0', f) == EOF)
- return FcFalse;
- temp = temp - pow * digit;
- pow = pow / 10;
- }
- return FcTrue;
-}
-
-static FcBool
-write_int (FILE *f, int i)
-{
- return write_ulong (f, (unsigned long) i);
-}
-
-static FcBool
-write_string (FILE *f, const FcChar8 *string)
-{
-
- if (PUTC ('"', f) == EOF)
- return FcFalse;
- if (!write_chars (f, string))
- return FcFalse;
- if (PUTC ('"', f) == EOF)
- return FcFalse;
- return FcTrue;
-}
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-rv] [--recurse] [--verbose] [*-%s.cache-2|directory]...\n",
- program, FC_ARCHITECTURE);
- fprintf (file, " %s [-Vh] [--version] [--help]\n", program);
-#else
- fprintf (file, "usage: %s [-rvVh] [*-%s.cache-2|directory]...\n",
- program, FC_ARCHITECTURE);
-#endif
- fprintf (file, "Reads font information cache from:\n");
- fprintf (file, " 1) specified fontconfig cache file\n");
- fprintf (file, " 2) related to a particular font directory\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -r, --recurse recurse into subdirectories\n");
- fprintf (file, " -v, --verbose be verbose\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -r (recurse) recurse into subdirectories\n");
- fprintf (file, " -v (verbose) be verbose\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-/*
- * return the path from the directory containing 'cache' to 'file'
- */
-
-static const FcChar8 *
-file_base_name (const FcChar8 *cache, const FcChar8 *file)
-{
- int cache_len = strlen ((char *) cache);
-
- if (!strncmp ((char *) cache, (char *) file, cache_len) && file[cache_len] == '/')
- return file + cache_len + 1;
- return file;
-}
-
-#define FC_FONT_FILE_DIR ((FcChar8 *) ".dir")
-
-static FcBool
-cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBool verbose)
-{
- FcChar8 *dir;
- const FcChar8 *base;
- int n;
- int ndir = 0;
- FcStrList *list;
-
- list = FcStrListCreate (dirs);
- if (!list)
- goto bail2;
-
- while ((dir = FcStrListNext (list)))
- {
- base = file_base_name (base_name, dir);
- if (!write_string (stdout, base))
- goto bail3;
- if (PUTC (' ', stdout) == EOF)
- goto bail3;
- if (!write_int (stdout, 0))
- goto bail3;
- if (PUTC (' ', stdout) == EOF)
- goto bail3;
- if (!write_string (stdout, FC_FONT_FILE_DIR))
- goto bail3;
- if (PUTC ('\n', stdout) == EOF)
- goto bail3;
- ndir++;
- }
-
- for (n = 0; n < set->nfont; n++)
- {
- FcPattern *font = set->fonts[n];
- FcChar8 *s;
-
- s = FcPatternFormat (font, "%{=fccat}\n");
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
- if (verbose && !set->nfont && !ndir)
- printf ("<empty>\n");
-
- FcStrListDone (list);
-
- return FcTrue;
-
-bail3:
- FcStrListDone (list);
-bail2:
- return FcFalse;
-}
-
-int
-main (int argc, char **argv)
-{
- int i;
- int ret = 0;
- FcFontSet *fs;
- FcStrSet *dirs;
- FcStrSet *args = NULL;
- FcStrList *arglist;
- FcCache *cache;
- FcConfig *config;
- FcChar8 *arg;
- int verbose = 0;
- int recurse = 0;
- FcBool first = FcTrue;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "Vvrh")) != -1)
-#endif
- {
- switch (c) {
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'v':
- verbose++;
- break;
- case 'r':
- recurse++;
- break;
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- config = FcInitLoadConfig ();
- if (!config)
- {
- fprintf (stderr, "%s: Can't init font config library\n", argv[0]);
- return 1;
- }
- FcConfigSetCurrent (config);
-
- args = FcStrSetCreate ();
- if (!args)
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
- if (i < argc)
- {
- for (; i < argc; i++)
- {
- if (!FcStrSetAddFilename (args, (const FcChar8 *) argv[i]))
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
- }
- arglist = FcStrListCreate (args);
- if (!arglist)
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
- }
- else
- {
- recurse++;
- arglist = FcConfigGetFontDirs (config);
- while ((arg = FcStrListNext (arglist)))
- if (!FcStrSetAdd (args, arg))
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
- FcStrListDone (arglist);
- }
- arglist = FcStrListCreate (args);
- if (!arglist)
- {
- fprintf (stderr, "%s: malloc failure\n", argv[0]);
- return 1;
- }
-
- while ((arg = FcStrListNext (arglist)))
- {
- int j;
- FcChar8 *cache_file = NULL;
- struct stat file_stat;
-
- if (FcFileIsDir (arg))
- cache = FcDirCacheLoad (arg, config, &cache_file);
- else
- cache = FcDirCacheLoadFile (arg, &file_stat);
- if (!cache)
- {
- perror ((char *) arg);
- ret++;
- continue;
- }
-
- dirs = FcStrSetCreate ();
- fs = FcCacheCopySet (cache);
- for (j = 0; j < FcCacheNumSubdir (cache); j++)
- {
- FcStrSetAdd (dirs, FcCacheSubdir (cache, j));
- if (recurse)
- FcStrSetAdd (args, FcCacheSubdir (cache, j));
- }
-
- if (verbose)
- {
- if (!first)
- printf ("\n");
- printf ("Directory: %s\nCache: %s\n--------\n",
- FcCacheDir(cache), cache_file ? cache_file : arg);
- first = FcFalse;
- }
- cache_print_set (fs, dirs, FcCacheDir (cache), verbose);
-
- FcStrSetDestroy (dirs);
-
- FcFontSetDestroy (fs);
- FcDirCacheUnload (cache);
- if (cache_file)
- FcStrFree (cache_file);
- }
-
- FcFini ();
- return 0;
-}
+/* + * fontconfig/fc-cat/fc-cat.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include <fontconfig/fontconfig.h> +#include "../src/fcarch.h" +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <errno.h> + +#ifndef HAVE_GETOPT +#define HAVE_GETOPT 0 +#endif +#ifndef HAVE_GETOPT_LONG +#define HAVE_GETOPT_LONG 0 +#endif + +#if HAVE_GETOPT_LONG +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include <getopt.h> +const struct option longopts[] = { + {"version", 0, 0, 'V'}, + {"verbose", 0, 0, 'v'}, + {"recurse", 0, 0, 'r'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +/* + * POSIX has broken stdio so that getc must do thread-safe locking, + * this is a serious performance problem for applications doing large + * amounts of IO with getc (as is done here). If available, use + * the getc_unlocked varient instead. + */ + +#if defined(getc_unlocked) || defined(_IO_getc_unlocked) +#define GETC(f) getc_unlocked(f) +#define PUTC(c,f) putc_unlocked(c,f) +#else +#define GETC(f) getc(f) +#define PUTC(c,f) putc(c,f) +#endif + +static FcBool +write_chars (FILE *f, const FcChar8 *chars) +{ + FcChar8 c; + while ((c = *chars++)) + { + switch (c) { + case '"': + case '\\': + if (PUTC ('\\', f) == EOF) + return FcFalse; + /* fall through */ + default: + if (PUTC (c, f) == EOF) + return FcFalse; + } + } + return FcTrue; +} + +static FcBool +write_ulong (FILE *f, unsigned long t) +{ + int pow; + unsigned long temp, digit; + + temp = t; + pow = 1; + while (temp >= 10) + { + temp /= 10; + pow *= 10; + } + temp = t; + while (pow) + { + digit = temp / pow; + if (PUTC ((char) digit + '0', f) == EOF) + return FcFalse; + temp = temp - pow * digit; + pow = pow / 10; + } + return FcTrue; +} + +static FcBool +write_int (FILE *f, int i) +{ + return write_ulong (f, (unsigned long) i); +} + +static FcBool +write_string (FILE *f, const FcChar8 *string) +{ + + if (PUTC ('"', f) == EOF) + return FcFalse; + if (!write_chars (f, string)) + return FcFalse; + if (PUTC ('"', f) == EOF) + return FcFalse; + return FcTrue; +} + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-rv] [--recurse] [--verbose] [*-%s.cache-2|directory]...\n", + program, FC_ARCHITECTURE); + fprintf (file, " %s [-Vh] [--version] [--help]\n", program); +#else + fprintf (file, "usage: %s [-rvVh] [*-%s.cache-2|directory]...\n", + program, FC_ARCHITECTURE); +#endif + fprintf (file, "Reads font information cache from:\n"); + fprintf (file, " 1) specified fontconfig cache file\n"); + fprintf (file, " 2) related to a particular font directory\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -r, --recurse recurse into subdirectories\n"); + fprintf (file, " -v, --verbose be verbose\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -r (recurse) recurse into subdirectories\n"); + fprintf (file, " -v (verbose) be verbose\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +/* + * return the path from the directory containing 'cache' to 'file' + */ + +static const FcChar8 * +file_base_name (const FcChar8 *cache, const FcChar8 *file) +{ + int cache_len = strlen ((char *) cache); + + if (!strncmp ((char *) cache, (char *) file, cache_len) && file[cache_len] == '/') + return file + cache_len + 1; + return file; +} + +#define FC_FONT_FILE_DIR ((FcChar8 *) ".dir") + +static FcBool +cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBool verbose) +{ + FcChar8 *dir; + const FcChar8 *base; + int n; + int ndir = 0; + FcStrList *list; + + list = FcStrListCreate (dirs); + if (!list) + goto bail2; + + while ((dir = FcStrListNext (list))) + { + base = file_base_name (base_name, dir); + if (!write_string (stdout, base)) + goto bail3; + if (PUTC (' ', stdout) == EOF) + goto bail3; + if (!write_int (stdout, 0)) + goto bail3; + if (PUTC (' ', stdout) == EOF) + goto bail3; + if (!write_string (stdout, FC_FONT_FILE_DIR)) + goto bail3; + if (PUTC ('\n', stdout) == EOF) + goto bail3; + ndir++; + } + + for (n = 0; n < set->nfont; n++) + { + FcPattern *font = set->fonts[n]; + FcChar8 *s; + + s = FcPatternFormat (font, "%{=fccat}\n"); + if (s) + { + printf ("%s", s); + free (s); + } + } + if (verbose && !set->nfont && !ndir) + printf ("<empty>\n"); + + FcStrListDone (list); + + return FcTrue; + +bail3: + FcStrListDone (list); +bail2: + return FcFalse; +} + +int +main (int argc, char **argv) +{ + int i; + int ret = 0; + FcFontSet *fs; + FcStrSet *dirs; + FcStrSet *args = NULL; + FcStrList *arglist; + FcCache *cache; + FcConfig *config; + FcChar8 *arg; + int verbose = 0; + int recurse = 0; + FcBool first = FcTrue; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "Vvrh")) != -1) +#endif + { + switch (c) { + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'v': + verbose++; + break; + case 'r': + recurse++; + break; + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + config = FcInitLoadConfig (); + if (!config) + { + fprintf (stderr, "%s: Can't init font config library\n", argv[0]); + return 1; + } + FcConfigSetCurrent (config); + + args = FcStrSetCreate (); + if (!args) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + if (i < argc) + { + for (; i < argc; i++) + { + if (!FcStrSetAddFilename (args, (const FcChar8 *) argv[i])) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + } + arglist = FcStrListCreate (args); + if (!arglist) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + } + else + { + recurse++; + arglist = FcConfigGetFontDirs (config); + while ((arg = FcStrListNext (arglist))) + if (!FcStrSetAdd (args, arg)) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + FcStrListDone (arglist); + } + arglist = FcStrListCreate (args); + if (!arglist) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + + while ((arg = FcStrListNext (arglist))) + { + int j; + FcChar8 *cache_file = NULL; + struct stat file_stat; + + if (FcFileIsDir (arg)) + cache = FcDirCacheLoad (arg, config, &cache_file); + else + cache = FcDirCacheLoadFile (arg, &file_stat); + if (!cache) + { + perror ((char *) arg); + ret++; + continue; + } + + dirs = FcStrSetCreate (); + fs = FcCacheCopySet (cache); + for (j = 0; j < FcCacheNumSubdir (cache); j++) + { + FcStrSetAdd (dirs, FcCacheSubdir (cache, j)); + if (recurse) + FcStrSetAdd (args, FcCacheSubdir (cache, j)); + } + + if (verbose) + { + if (!first) + printf ("\n"); + printf ("Directory: %s\nCache: %s\n--------\n", + FcCacheDir(cache), cache_file ? cache_file : arg); + first = FcFalse; + } + cache_print_set (fs, dirs, FcCacheDir (cache), verbose); + + FcStrSetDestroy (dirs); + + FcFontSetDestroy (fs); + FcDirCacheUnload (cache); + if (cache_file) + FcStrFree (cache_file); + } + + FcFini (); + return 0; +} diff --git a/fontconfig/fc-cat/fc-cat.sgml b/fontconfig/fc-cat/fc-cat.sgml index 38ba0653e..ce4736de5 100644 --- a/fontconfig/fc-cat/fc-cat.sgml +++ b/fontconfig/fc-cat/fc-cat.sgml @@ -1,169 +1,169 @@ -<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Patrick</firstname>">
- <!ENTITY dhsurname "<surname>Lam</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>plam@mit.edu</email>">
- <!ENTITY dhusername "Patrick Lam">
- <!ENTITY dhucpackage "<refentrytitle>fc-cat</refentrytitle>">
- <!ENTITY dhpackage "fc-cat">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2005</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>read font information cache files</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-rvVh</option></arg>
- <arg><option>--recurse</option></arg>
- <arg><option>--verbose</option></arg>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <sbr>
- <group rep="repeat">
- <arg><option><replaceable>fonts-cache-2-files</replaceable></option></arg>
- <arg><option><replaceable>dirs</replaceable></option></arg>
- </group>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> reads the font information from
- cache files or related to font directories
- and emits it in ASCII form.</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-r</option>
- <option>--recurse</option>
- </term>
- <listitem>
- <para>Recurse into subdirectories.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-v</option>
- <option>--verbose</option>
- </term>
- <listitem>
- <para>Be verbose.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-cache</command>(1)
- <command>fc-list</command>(1)
- <command>fc-match</command>(1)
- <command>fc-pattern</command>(1)
- <command>fc-query</command>(1)
- <command>fc-scan</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was written by &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [ + +<!-- Process this file with docbook-to-man to generate an nroff manual + page: `docbook-to-man manpage.sgml > manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + <!-- Fill in your name for FIRSTNAME and SURNAME. --> + <!ENTITY dhfirstname "<firstname>Patrick</firstname>"> + <!ENTITY dhsurname "<surname>Lam</surname>"> + <!-- Please adjust the date whenever revising the manpage. --> + <!ENTITY dhdate "<date>Aug 13, 2008</date>"> + <!-- SECTION should be 1-8, maybe w/ subsection other parameters are + allowed: see man(7), man(1). --> + <!ENTITY dhsection "<manvolnum>1</manvolnum>"> + <!ENTITY dhemail "<email>plam@mit.edu</email>"> + <!ENTITY dhusername "Patrick Lam"> + <!ENTITY dhucpackage "<refentrytitle>fc-cat</refentrytitle>"> + <!ENTITY dhpackage "fc-cat"> + + <!ENTITY debian "<productname>Debian</productname>"> + <!ENTITY gnu "<acronym>GNU</acronym>"> + <!ENTITY gpl "&gnu; <acronym>GPL</acronym>"> +]> + +<refentry> + <refentryinfo> + <address> + &dhemail; + </address> + <author> + &dhfirstname; + &dhsurname; + </author> + <copyright> + <year>2005</year> + <holder>&dhusername;</holder> + </copyright> + &dhdate; + </refentryinfo> + <refmeta> + &dhucpackage; + + &dhsection; + </refmeta> + <refnamediv> + <refname>&dhpackage;</refname> + + <refpurpose>read font information cache files</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>&dhpackage;</command> + + <arg><option>-rvVh</option></arg> + <arg><option>--recurse</option></arg> + <arg><option>--verbose</option></arg> + <arg><option>--version</option></arg> + <arg><option>--help</option></arg> + <sbr> + <group rep="repeat"> + <arg><option><replaceable>fonts-cache-2-files</replaceable></option></arg> + <arg><option><replaceable>dirs</replaceable></option></arg> + </group> + + </cmdsynopsis> + </refsynopsisdiv> + <refsect1> + <title>DESCRIPTION</title> + + <para><command>&dhpackage;</command> reads the font information from + cache files or related to font directories + and emits it in ASCII form.</para> + + </refsect1> + <refsect1> + <title>OPTIONS</title> + + <para>This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below.</para> + + <variablelist> + <varlistentry> + <term><option>-r</option> + <option>--recurse</option> + </term> + <listitem> + <para>Recurse into subdirectories.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-v</option> + <option>--verbose</option> + </term> + <listitem> + <para>Be verbose.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-h</option> + <option>--help</option> + </term> + <listitem> + <para>Show summary of options.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-V</option> + <option>--version</option> + </term> + <listitem> + <para>Show version of the program and exit.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>SEE ALSO</title> + + <para> + <command>fc-cache</command>(1) + <command>fc-list</command>(1) + <command>fc-match</command>(1) + <command>fc-pattern</command>(1) + <command>fc-query</command>(1) + <command>fc-scan</command>(1) + </para> + + <para>The fontconfig user's guide, in HTML format: + <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para> + + </refsect1> + <refsect1> + <title>AUTHOR</title> + + <para>This manual page was written by &dhusername; &dhemail;.</para> + + </refsect1> +</refentry> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:2 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:nil +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +--> diff --git a/fontconfig/fc-glyphname/Makefile.am b/fontconfig/fc-glyphname/Makefile.am index 2484f377e..3799880e5 100644 --- a/fontconfig/fc-glyphname/Makefile.am +++ b/fontconfig/fc-glyphname/Makefile.am @@ -1,57 +1,57 @@ -#
-# $Id $
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
-
-TMPL=fcglyphname.tmpl.h
-STMPL=${top_srcdir}/fc-glyphname/${TMPL}
-TARG=fcglyphname.h
-
-noinst_PROGRAMS=fc-glyphname
-
-GLYPHNAME=zapfdingbats.txt
-SGLYPHNAME=${top_srcdir}/fc-glyphname/zapfdingbats.txt
-
-EXTRA_DIST = $(TARG) $(TMPL) $(GLYPHNAME)
-
-if CROSS_COMPILING
-$(TARG): $(STMPL) fc-glyphname.c $(SGLYPHNAME)
- @echo Warning: cannot rebuild $(TARG) when cross-compiling
-else
-$(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME)
- $(AM_V_GEN) $(RM) $(TARG); \
- ./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG).tmp && \
- mv $(TARG).tmp $(TARG)
-endif
-
-ALIAS_FILES = fcalias.h fcaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
-
-$(ALIAS_FILES):
- touch $(ALIAS_FILES)
-
-CLEANFILES = $(ALIAS_FILES)
-
-MAINTAINERCLEANFILES = $(TARG)
+# +# $Id $ +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# + +INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) + +TMPL=fcglyphname.tmpl.h +STMPL=${top_srcdir}/fc-glyphname/${TMPL} +TARG=fcglyphname.h + +noinst_PROGRAMS=fc-glyphname + +GLYPHNAME=zapfdingbats.txt +SGLYPHNAME=${top_srcdir}/fc-glyphname/zapfdingbats.txt + +EXTRA_DIST = $(TARG) $(TMPL) $(GLYPHNAME) + +if CROSS_COMPILING +$(TARG): $(STMPL) fc-glyphname.c $(SGLYPHNAME) + @echo Warning: cannot rebuild $(TARG) when cross-compiling +else +$(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME) + $(AM_V_GEN) $(RM) $(TARG); \ + ./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG).tmp && \ + mv $(TARG).tmp $(TARG) +endif + +ALIAS_FILES = fcalias.h fcaliastail.h + +BUILT_SOURCES = $(ALIAS_FILES) $(TARG) + +$(ALIAS_FILES): + touch $(ALIAS_FILES) + +CLEANFILES = $(ALIAS_FILES) + +MAINTAINERCLEANFILES = $(TARG) diff --git a/fontconfig/fc-glyphname/fc-glyphname.c b/fontconfig/fc-glyphname/fc-glyphname.c index 0339073a2..b790d986f 100644 --- a/fontconfig/fc-glyphname/fc-glyphname.c +++ b/fontconfig/fc-glyphname/fc-glyphname.c @@ -1,325 +1,325 @@ -/*
- * fontconfig/fc-glyphname/fc-glyphname.c
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-
-static int
-rawindex (const FcGlyphName *gn);
-
-static void
-scan (FILE *f, char *filename);
-
-static int
-isprime (int i);
-
-static void
-find_hash (void);
-
-static FcChar32
-FcHashGlyphName (const FcChar8 *name);
-
-static void
-insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h);
-
-static void
-dump (FcGlyphName * const *table, const char *name);
-
-static FcGlyphName *
-FcAllocGlyphName (FcChar32 ucs, FcChar8 *name)
-{
- FcGlyphName *gn;
-
- gn = malloc (sizeof (FcGlyphName) + strlen ((char *) name));
- if (!gn)
- return 0;
- gn->ucs = ucs;
- strcpy ((char *) gn->name, (char *) name);
- return gn;
-}
-
-static void
-fatal (const char *file, int lineno, const char *msg)
-{
- if (lineno)
- fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
- else
- fprintf (stderr, "%s: %s\n", file, msg);
-
- exit (1);
-}
-
-#define MAX_GLYPHFILE 256
-#define MAX_GLYPHNAME 10240
-#define MAX_NAMELEN 1024
-
-static FcGlyphName *raw[MAX_GLYPHNAME];
-static int nraw;
-static int max_name_len;
-static FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2];
-static FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2];
-static unsigned int hash, rehash;
-
-static int
-rawindex (const FcGlyphName *gn)
-{
- int i;
-
- for (i = 0; i < nraw; i++)
- if (raw[i] == gn)
- return i;
- return -1;
-}
-
-static void
-scan (FILE *f, char *filename)
-{
- char buf[MAX_NAMELEN];
- char name[MAX_NAMELEN];
- unsigned long ucs;
- FcGlyphName *gn;
- int lineno = 0;
- int len;
-
- while (fgets (buf, sizeof (buf), f))
- {
- lineno++;
- if (sscanf (buf, "%[^;];%lx\n", name, &ucs) != 2)
- continue;
- gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name);
- if (!gn)
- fatal (filename, lineno, "out of memory");
- len = strlen (name);
- if (len > max_name_len)
- max_name_len = len;
- raw[nraw++] = gn;
- }
-}
-
-static int compare_string (const void *a, const void *b)
-{
- const char *const *as = a, *const *bs = b;
- return strcmp (*as, *bs);
-}
-
-static int compare_glyphname (const void *a, const void *b)
-{
- const FcGlyphName *const *ag = a, *const *bg = b;
-
- return strcmp ((char *) (*ag)->name, (char *) (*bg)->name);
-}
-
-static int
-isqrt (int a)
-{
- int l, h, m;
-
- l = 2;
- h = a/2;
- while ((h-l) > 1)
- {
- m = (h+l) >> 1;
- if (m * m < a)
- l = m;
- else
- h = m;
- }
- return h;
-}
-
-static int
-isprime (int i)
-{
- int l, t;
-
- if (i < 2)
- return FcFalse;
- if ((i & 1) == 0)
- {
- if (i == 2)
- return FcTrue;
- return FcFalse;
- }
- l = isqrt (i) + 1;
- for (t = 3; t <= l; t += 2)
- if (i % t == 0)
- return 0;
- return 1;
-}
-
-/*
- * Find a prime pair that leaves at least 25% of the hash table empty
- */
-
-static void
-find_hash (void)
-{
- int h;
-
- h = nraw + nraw / 4;
- if ((h & 1) == 0)
- h++;
- while (!isprime(h-2) || !isprime(h))
- h += 2;
- hash = h;
- rehash = h-2;
-}
-
-static FcChar32
-FcHashGlyphName (const FcChar8 *name)
-{
- FcChar32 h = 0;
- FcChar8 c;
-
- while ((c = *name++))
- {
- h = ((h << 1) | (h >> 31)) ^ c;
- }
- return h;
-}
-
-static void
-insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h)
-{
- int i, r = 0;
-
- i = (int) (h % hash);
- while (table[i])
- {
- if (!r) r = (int) (h % rehash + 1);
- i += r;
- if (i >= hash)
- i -= hash;
- }
- table[i] = gn;
-}
-
-static void
-dump (FcGlyphName * const *table, const char *name)
-{
- int i;
-
- printf ("static const FcGlyphId %s[%d] = {\n", name, hash);
-
- for (i = 0; i < hash; i++)
- if (table[i])
- printf (" %d,\n", rawindex(table[i]));
- else
- printf (" -1,\n");
-
- printf ("};\n");
-}
-
-int
-main (int argc, char **argv)
-{
- char *files[MAX_GLYPHFILE];
- char line[1024];
- FILE *f;
- int i;
- char *type;
-
- i = 0;
- while (argv[i+1])
- {
- if (i == MAX_GLYPHFILE)
- fatal (*argv, 0, "Too many glyphname files");
- files[i] = argv[i+1];
- i++;
- }
- files[i] = 0;
- qsort (files, i, sizeof (char *), compare_string);
- for (i = 0; files[i]; i++)
- {
- f = fopen (files[i], "r");
- if (!f)
- fatal (files[i], 0, strerror (errno));
- scan (f, files[i]);
- fclose (f);
- }
- qsort (raw, nraw, sizeof (FcGlyphName *), compare_glyphname);
-
- find_hash ();
-
- for (i = 0; i < nraw; i++)
- {
- insert (raw[i], name_to_ucs, FcHashGlyphName (raw[i]->name));
- insert (raw[i], ucs_to_name, raw[i]->ucs);
- }
-
- /*
- * Scan the input until the marker is found
- */
-
- while (fgets (line, sizeof (line), stdin))
- {
- if (!strncmp (line, "@@@", 3))
- break;
- fputs (line, stdout);
- }
-
- printf ("/* %d glyphnames in %d entries, %d%% occupancy */\n\n",
- nraw, hash, nraw * 100 / hash);
-
- printf ("#define FC_GLYPHNAME_HASH %u\n", hash);
- printf ("#define FC_GLYPHNAME_REHASH %u\n", rehash);
- printf ("#define FC_GLYPHNAME_MAXLEN %d\n\n", max_name_len);
- if (nraw < 128)
- type = "int8_t";
- else if (nraw < 32768)
- type = "int16_t";
- else
- type = "int32_t";
-
- printf ("typedef %s FcGlyphId;\n\n", type);
-
- /*
- * Dump out entries
- */
-
- printf ("static const struct { const FcChar32 ucs; const FcChar8 name[%d]; } _fc_glyph_names[%d] = {\n",
- max_name_len + 1, nraw);
-
- for (i = 0; i < nraw; i++)
- printf (" { 0x%lx, \"%s\" },\n",
- (unsigned long) raw[i]->ucs, raw[i]->name);
-
- printf ("};\n");
-
- /*
- * Dump out name_to_ucs table
- */
-
- dump (name_to_ucs, "_fc_name_to_ucs");
-
- /*
- * Dump out ucs_to_name table
- */
- dump (ucs_to_name, "_fc_ucs_to_name");
-
- while (fgets (line, sizeof (line), stdin))
- fputs (line, stdout);
-
- fflush (stdout);
- exit (ferror (stdout));
-}
+/* + * fontconfig/fc-glyphname/fc-glyphname.c + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" + +static int +rawindex (const FcGlyphName *gn); + +static void +scan (FILE *f, char *filename); + +static int +isprime (int i); + +static void +find_hash (void); + +static FcChar32 +FcHashGlyphName (const FcChar8 *name); + +static void +insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h); + +static void +dump (FcGlyphName * const *table, const char *name); + +static FcGlyphName * +FcAllocGlyphName (FcChar32 ucs, FcChar8 *name) +{ + FcGlyphName *gn; + + gn = malloc (sizeof (FcGlyphName) + strlen ((char *) name)); + if (!gn) + return 0; + gn->ucs = ucs; + strcpy ((char *) gn->name, (char *) name); + return gn; +} + +static void +fatal (const char *file, int lineno, const char *msg) +{ + if (lineno) + fprintf (stderr, "%s:%d: %s\n", file, lineno, msg); + else + fprintf (stderr, "%s: %s\n", file, msg); + + exit (1); +} + +#define MAX_GLYPHFILE 256 +#define MAX_GLYPHNAME 10240 +#define MAX_NAMELEN 1024 + +static FcGlyphName *raw[MAX_GLYPHNAME]; +static int nraw; +static int max_name_len; +static FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2]; +static FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2]; +static unsigned int hash, rehash; + +static int +rawindex (const FcGlyphName *gn) +{ + int i; + + for (i = 0; i < nraw; i++) + if (raw[i] == gn) + return i; + return -1; +} + +static void +scan (FILE *f, char *filename) +{ + char buf[MAX_NAMELEN]; + char name[MAX_NAMELEN]; + unsigned long ucs; + FcGlyphName *gn; + int lineno = 0; + int len; + + while (fgets (buf, sizeof (buf), f)) + { + lineno++; + if (sscanf (buf, "%[^;];%lx\n", name, &ucs) != 2) + continue; + gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name); + if (!gn) + fatal (filename, lineno, "out of memory"); + len = strlen (name); + if (len > max_name_len) + max_name_len = len; + raw[nraw++] = gn; + } +} + +static int compare_string (const void *a, const void *b) +{ + const char *const *as = a, *const *bs = b; + return strcmp (*as, *bs); +} + +static int compare_glyphname (const void *a, const void *b) +{ + const FcGlyphName *const *ag = a, *const *bg = b; + + return strcmp ((char *) (*ag)->name, (char *) (*bg)->name); +} + +static int +isqrt (int a) +{ + int l, h, m; + + l = 2; + h = a/2; + while ((h-l) > 1) + { + m = (h+l) >> 1; + if (m * m < a) + l = m; + else + h = m; + } + return h; +} + +static int +isprime (int i) +{ + int l, t; + + if (i < 2) + return FcFalse; + if ((i & 1) == 0) + { + if (i == 2) + return FcTrue; + return FcFalse; + } + l = isqrt (i) + 1; + for (t = 3; t <= l; t += 2) + if (i % t == 0) + return 0; + return 1; +} + +/* + * Find a prime pair that leaves at least 25% of the hash table empty + */ + +static void +find_hash (void) +{ + int h; + + h = nraw + nraw / 4; + if ((h & 1) == 0) + h++; + while (!isprime(h-2) || !isprime(h)) + h += 2; + hash = h; + rehash = h-2; +} + +static FcChar32 +FcHashGlyphName (const FcChar8 *name) +{ + FcChar32 h = 0; + FcChar8 c; + + while ((c = *name++)) + { + h = ((h << 1) | (h >> 31)) ^ c; + } + return h; +} + +static void +insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h) +{ + int i, r = 0; + + i = (int) (h % hash); + while (table[i]) + { + if (!r) r = (int) (h % rehash + 1); + i += r; + if (i >= hash) + i -= hash; + } + table[i] = gn; +} + +static void +dump (FcGlyphName * const *table, const char *name) +{ + int i; + + printf ("static const FcGlyphId %s[%d] = {\n", name, hash); + + for (i = 0; i < hash; i++) + if (table[i]) + printf (" %d,\n", rawindex(table[i])); + else + printf (" -1,\n"); + + printf ("};\n"); +} + +int +main (int argc, char **argv) +{ + char *files[MAX_GLYPHFILE]; + char line[1024]; + FILE *f; + int i; + char *type; + + i = 0; + while (argv[i+1]) + { + if (i == MAX_GLYPHFILE) + fatal (*argv, 0, "Too many glyphname files"); + files[i] = argv[i+1]; + i++; + } + files[i] = 0; + qsort (files, i, sizeof (char *), compare_string); + for (i = 0; files[i]; i++) + { + f = fopen (files[i], "r"); + if (!f) + fatal (files[i], 0, strerror (errno)); + scan (f, files[i]); + fclose (f); + } + qsort (raw, nraw, sizeof (FcGlyphName *), compare_glyphname); + + find_hash (); + + for (i = 0; i < nraw; i++) + { + insert (raw[i], name_to_ucs, FcHashGlyphName (raw[i]->name)); + insert (raw[i], ucs_to_name, raw[i]->ucs); + } + + /* + * Scan the input until the marker is found + */ + + while (fgets (line, sizeof (line), stdin)) + { + if (!strncmp (line, "@@@", 3)) + break; + fputs (line, stdout); + } + + printf ("/* %d glyphnames in %d entries, %d%% occupancy */\n\n", + nraw, hash, nraw * 100 / hash); + + printf ("#define FC_GLYPHNAME_HASH %u\n", hash); + printf ("#define FC_GLYPHNAME_REHASH %u\n", rehash); + printf ("#define FC_GLYPHNAME_MAXLEN %d\n\n", max_name_len); + if (nraw < 128) + type = "int8_t"; + else if (nraw < 32768) + type = "int16_t"; + else + type = "int32_t"; + + printf ("typedef %s FcGlyphId;\n\n", type); + + /* + * Dump out entries + */ + + printf ("static const struct { const FcChar32 ucs; const FcChar8 name[%d]; } _fc_glyph_names[%d] = {\n", + max_name_len + 1, nraw); + + for (i = 0; i < nraw; i++) + printf (" { 0x%lx, \"%s\" },\n", + (unsigned long) raw[i]->ucs, raw[i]->name); + + printf ("};\n"); + + /* + * Dump out name_to_ucs table + */ + + dump (name_to_ucs, "_fc_name_to_ucs"); + + /* + * Dump out ucs_to_name table + */ + dump (ucs_to_name, "_fc_ucs_to_name"); + + while (fgets (line, sizeof (line), stdin)) + fputs (line, stdout); + + fflush (stdout); + exit (ferror (stdout)); +} diff --git a/fontconfig/fc-glyphname/fcglyphname.tmpl.h b/fontconfig/fc-glyphname/fcglyphname.tmpl.h index 7e2160996..d4f8a9524 100644 --- a/fontconfig/fc-glyphname/fcglyphname.tmpl.h +++ b/fontconfig/fc-glyphname/fcglyphname.tmpl.h @@ -1,25 +1,25 @@ -/*
- * fontconfig/fc-glyphname/fcglyphname.tmpl.h
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@@@
+/* + * fontconfig/fc-glyphname/fcglyphname.tmpl.h + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@@@ diff --git a/fontconfig/fc-lang/Makefile.am b/fontconfig/fc-lang/Makefile.am index 1f6a4aef3..29cee5934 100644 --- a/fontconfig/fc-lang/Makefile.am +++ b/fontconfig/fc-lang/Makefile.am @@ -1,303 +1,303 @@ -#
-# $Id $
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-
-INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS)
-
-TMPL=fclang.tmpl.h
-STMPL=${top_srcdir}/fc-lang/fclang.tmpl.h
-TARG=fclang.h
-
-noinst_PROGRAMS=fc-lang
-
-noinst_MANS=fc-lang.man
-
-EXTRA_DIST = $(TARG) $(TMPL) $(ORTH)
-
-if CROSS_COMPILING
-$(TARG):$(ORTH) fc-lang.c $(STMPL)
- @echo Warning: cannot rebuild $(TARG) when cross-compiling
-else
-$(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL)
- $(AM_V_GEN) $(RM) $(TARG); \
- ./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG).tmp && \
- mv $(TARG).tmp $(TARG)
-endif
-
-ALIAS_FILES = fcalias.h fcaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES) $(TARG)
-
-$(ALIAS_FILES):
- touch $(ALIAS_FILES)
-
-CLEANFILES = $(ALIAS_FILES)
-
-MAINTAINERCLEANFILES = $(TARG)
-
-# NOTE:
-#
-# The order of the orth files here is extremely important (part of the cache
-# format) and should not be modified. New orth files should be added at the
-# end. No files should be removed either.
-#
-ORTH = \
- aa.orth \
- ab.orth \
- af.orth \
- am.orth \
- ar.orth \
- as.orth \
- ast.orth \
- av.orth \
- ay.orth \
- az_az.orth \
- az_ir.orth \
- ba.orth \
- bm.orth \
- be.orth \
- bg.orth \
- bh.orth \
- bho.orth \
- bi.orth \
- bin.orth \
- bn.orth \
- bo.orth \
- br.orth \
- bs.orth \
- bua.orth \
- ca.orth \
- ce.orth \
- ch.orth \
- chm.orth \
- chr.orth \
- co.orth \
- cs.orth \
- cu.orth \
- cv.orth \
- cy.orth \
- da.orth \
- de.orth \
- dz.orth \
- el.orth \
- en.orth \
- eo.orth \
- es.orth \
- et.orth \
- eu.orth \
- fa.orth \
- fi.orth \
- fj.orth \
- fo.orth \
- fr.orth \
- ff.orth \
- fur.orth \
- fy.orth \
- ga.orth \
- gd.orth \
- gez.orth \
- gl.orth \
- gn.orth \
- gu.orth \
- gv.orth \
- ha.orth \
- haw.orth \
- he.orth \
- hi.orth \
- ho.orth \
- hr.orth \
- hu.orth \
- hy.orth \
- ia.orth \
- ig.orth \
- id.orth \
- ie.orth \
- ik.orth \
- io.orth \
- is.orth \
- it.orth \
- iu.orth \
- ja.orth \
- ka.orth \
- kaa.orth \
- ki.orth \
- kk.orth \
- kl.orth \
- km.orth \
- kn.orth \
- ko.orth \
- kok.orth \
- ks.orth \
- ku_am.orth \
- ku_ir.orth \
- kum.orth \
- kv.orth \
- kw.orth \
- ky.orth \
- la.orth \
- lb.orth \
- lez.orth \
- ln.orth \
- lo.orth \
- lt.orth \
- lv.orth \
- mg.orth \
- mh.orth \
- mi.orth \
- mk.orth \
- ml.orth \
- mn_cn.orth \
- mo.orth \
- mr.orth \
- mt.orth \
- my.orth \
- nb.orth \
- nds.orth \
- ne.orth \
- nl.orth \
- nn.orth \
- no.orth \
- nr.orth \
- nso.orth \
- ny.orth \
- oc.orth \
- om.orth \
- or.orth \
- os.orth \
- pa.orth \
- pl.orth \
- ps_af.orth \
- ps_pk.orth \
- pt.orth \
- rm.orth \
- ro.orth \
- ru.orth \
- sa.orth \
- sah.orth \
- sco.orth \
- se.orth \
- sel.orth \
- sh.orth \
- shs.orth \
- si.orth \
- sk.orth \
- sl.orth \
- sm.orth \
- sma.orth \
- smj.orth \
- smn.orth \
- sms.orth \
- so.orth \
- sq.orth \
- sr.orth \
- ss.orth \
- st.orth \
- sv.orth \
- sw.orth \
- syr.orth \
- ta.orth \
- te.orth \
- tg.orth \
- th.orth \
- ti_er.orth \
- ti_et.orth \
- tig.orth \
- tk.orth \
- tl.orth \
- tn.orth \
- to.orth \
- tr.orth \
- ts.orth \
- tt.orth \
- tw.orth \
- tyv.orth \
- ug.orth \
- uk.orth \
- ur.orth \
- uz.orth \
- ve.orth \
- vi.orth \
- vo.orth \
- vot.orth \
- wa.orth \
- wen.orth \
- wo.orth \
- xh.orth \
- yap.orth \
- yi.orth \
- yo.orth \
- zh_cn.orth \
- zh_hk.orth \
- zh_mo.orth \
- zh_sg.orth \
- zh_tw.orth \
- zu.orth \
- ak.orth \
- an.orth \
- ber_dz.orth \
- ber_ma.orth \
- byn.orth \
- crh.orth \
- csb.orth \
- dv.orth \
- ee.orth \
- fat.orth \
- fil.orth \
- hne.orth \
- hsb.orth \
- ht.orth \
- hz.orth \
- ii.orth \
- jv.orth \
- kab.orth \
- kj.orth \
- kr.orth \
- ku_iq.orth \
- ku_tr.orth \
- kwm.orth \
- lg.orth \
- li.orth \
- mai.orth \
- mn_mn.orth \
- ms.orth \
- na.orth \
- ng.orth \
- nv.orth \
- ota.orth \
- pa_pk.orth \
- pap_an.orth \
- pap_aw.orth \
- qu.orth \
- rn.orth \
- rw.orth \
- sc.orth \
- sd.orth \
- sg.orth \
- sid.orth \
- sn.orth \
- su.orth \
- ty.orth \
- wal.orth \
- za.orth \
- lah.orth
-# ^-------------- Add new orth files here
+# +# $Id $ +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# + +INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) + +TMPL=fclang.tmpl.h +STMPL=${top_srcdir}/fc-lang/fclang.tmpl.h +TARG=fclang.h + +noinst_PROGRAMS=fc-lang + +noinst_MANS=fc-lang.man + +EXTRA_DIST = $(TARG) $(TMPL) $(ORTH) + +if CROSS_COMPILING +$(TARG):$(ORTH) fc-lang.c $(STMPL) + @echo Warning: cannot rebuild $(TARG) when cross-compiling +else +$(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL) + $(AM_V_GEN) $(RM) $(TARG); \ + ./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG).tmp && \ + mv $(TARG).tmp $(TARG) +endif + +ALIAS_FILES = fcalias.h fcaliastail.h + +BUILT_SOURCES = $(ALIAS_FILES) $(TARG) + +$(ALIAS_FILES): + touch $(ALIAS_FILES) + +CLEANFILES = $(ALIAS_FILES) + +MAINTAINERCLEANFILES = $(TARG) + +# NOTE: +# +# The order of the orth files here is extremely important (part of the cache +# format) and should not be modified. New orth files should be added at the +# end. No files should be removed either. +# +ORTH = \ + aa.orth \ + ab.orth \ + af.orth \ + am.orth \ + ar.orth \ + as.orth \ + ast.orth \ + av.orth \ + ay.orth \ + az_az.orth \ + az_ir.orth \ + ba.orth \ + bm.orth \ + be.orth \ + bg.orth \ + bh.orth \ + bho.orth \ + bi.orth \ + bin.orth \ + bn.orth \ + bo.orth \ + br.orth \ + bs.orth \ + bua.orth \ + ca.orth \ + ce.orth \ + ch.orth \ + chm.orth \ + chr.orth \ + co.orth \ + cs.orth \ + cu.orth \ + cv.orth \ + cy.orth \ + da.orth \ + de.orth \ + dz.orth \ + el.orth \ + en.orth \ + eo.orth \ + es.orth \ + et.orth \ + eu.orth \ + fa.orth \ + fi.orth \ + fj.orth \ + fo.orth \ + fr.orth \ + ff.orth \ + fur.orth \ + fy.orth \ + ga.orth \ + gd.orth \ + gez.orth \ + gl.orth \ + gn.orth \ + gu.orth \ + gv.orth \ + ha.orth \ + haw.orth \ + he.orth \ + hi.orth \ + ho.orth \ + hr.orth \ + hu.orth \ + hy.orth \ + ia.orth \ + ig.orth \ + id.orth \ + ie.orth \ + ik.orth \ + io.orth \ + is.orth \ + it.orth \ + iu.orth \ + ja.orth \ + ka.orth \ + kaa.orth \ + ki.orth \ + kk.orth \ + kl.orth \ + km.orth \ + kn.orth \ + ko.orth \ + kok.orth \ + ks.orth \ + ku_am.orth \ + ku_ir.orth \ + kum.orth \ + kv.orth \ + kw.orth \ + ky.orth \ + la.orth \ + lb.orth \ + lez.orth \ + ln.orth \ + lo.orth \ + lt.orth \ + lv.orth \ + mg.orth \ + mh.orth \ + mi.orth \ + mk.orth \ + ml.orth \ + mn_cn.orth \ + mo.orth \ + mr.orth \ + mt.orth \ + my.orth \ + nb.orth \ + nds.orth \ + ne.orth \ + nl.orth \ + nn.orth \ + no.orth \ + nr.orth \ + nso.orth \ + ny.orth \ + oc.orth \ + om.orth \ + or.orth \ + os.orth \ + pa.orth \ + pl.orth \ + ps_af.orth \ + ps_pk.orth \ + pt.orth \ + rm.orth \ + ro.orth \ + ru.orth \ + sa.orth \ + sah.orth \ + sco.orth \ + se.orth \ + sel.orth \ + sh.orth \ + shs.orth \ + si.orth \ + sk.orth \ + sl.orth \ + sm.orth \ + sma.orth \ + smj.orth \ + smn.orth \ + sms.orth \ + so.orth \ + sq.orth \ + sr.orth \ + ss.orth \ + st.orth \ + sv.orth \ + sw.orth \ + syr.orth \ + ta.orth \ + te.orth \ + tg.orth \ + th.orth \ + ti_er.orth \ + ti_et.orth \ + tig.orth \ + tk.orth \ + tl.orth \ + tn.orth \ + to.orth \ + tr.orth \ + ts.orth \ + tt.orth \ + tw.orth \ + tyv.orth \ + ug.orth \ + uk.orth \ + ur.orth \ + uz.orth \ + ve.orth \ + vi.orth \ + vo.orth \ + vot.orth \ + wa.orth \ + wen.orth \ + wo.orth \ + xh.orth \ + yap.orth \ + yi.orth \ + yo.orth \ + zh_cn.orth \ + zh_hk.orth \ + zh_mo.orth \ + zh_sg.orth \ + zh_tw.orth \ + zu.orth \ + ak.orth \ + an.orth \ + ber_dz.orth \ + ber_ma.orth \ + byn.orth \ + crh.orth \ + csb.orth \ + dv.orth \ + ee.orth \ + fat.orth \ + fil.orth \ + hne.orth \ + hsb.orth \ + ht.orth \ + hz.orth \ + ii.orth \ + jv.orth \ + kab.orth \ + kj.orth \ + kr.orth \ + ku_iq.orth \ + ku_tr.orth \ + kwm.orth \ + lg.orth \ + li.orth \ + mai.orth \ + mn_mn.orth \ + ms.orth \ + na.orth \ + ng.orth \ + nv.orth \ + ota.orth \ + pa_pk.orth \ + pap_an.orth \ + pap_aw.orth \ + qu.orth \ + rn.orth \ + rw.orth \ + sc.orth \ + sd.orth \ + sg.orth \ + sid.orth \ + sn.orth \ + su.orth \ + ty.orth \ + wal.orth \ + za.orth \ + lah.orth +# ^-------------- Add new orth files here diff --git a/fontconfig/fc-lang/aa.orth b/fontconfig/fc-lang/aa.orth index d4e59d326..cd5ac64c3 100644 --- a/fontconfig/fc-lang/aa.orth +++ b/fontconfig/fc-lang/aa.orth @@ -1,40 +1,40 @@ -#
-# fontconfig/fc-lang/aa.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Afar (AA)
-#
-# Taken from http://www.arhotaba.com/waldegram.htm
-# and http://www.arhotaba.com/alphabet.htm
-#
-0041-005a # afar doesn't use J, P, V or Z
-0061-007a # afar doesn't use j, p, v or z
-00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
+# +# fontconfig/fc-lang/aa.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Afar (AA) +# +# Taken from http://www.arhotaba.com/waldegram.htm +# and http://www.arhotaba.com/alphabet.htm +# +0041-005a # afar doesn't use J, P, V or Z +0061-007a # afar doesn't use j, p, v or z +00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX diff --git a/fontconfig/fc-lang/ab.orth b/fontconfig/fc-lang/ab.orth index ce2d1608b..82ab4290d 100644 --- a/fontconfig/fc-lang/ab.orth +++ b/fontconfig/fc-lang/ab.orth @@ -1,45 +1,45 @@ -#
-# fontconfig/fc-lang/ab.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Abkhazia (AB)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab # double angle quotes
-#00bb # double angle quotes
-0401
-040f
-0410-044f
-0451
-045f
-049e-049f
-04a6-04a9
-04ac-04ad
-04b2-04b7
-04bc-04bf
-04d8
-04d9
-04e0-04e1
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/ab.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Abkhazia (AB) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab # double angle quotes +#00bb # double angle quotes +0401 +040f +0410-044f +0451 +045f +049e-049f +04a6-04a9 +04ac-04ad +04b2-04b7 +04bc-04bf +04d8 +04d9 +04e0-04e1 +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/af.orth b/fontconfig/fc-lang/af.orth index df6bbc426..d8b377660 100644 --- a/fontconfig/fc-lang/af.orth +++ b/fontconfig/fc-lang/af.orth @@ -1,46 +1,46 @@ -#
-# fontconfig/fc-lang/af.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Afrikaans (AF)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c8
-00e8
-00c9
-00e9
-00ca
-00ea
-00cb
-00eb
-00ce
-00ee
-00cf
-00ef
-00d4
-00f4
-00db
-00fb
-0149
+# +# fontconfig/fc-lang/af.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Afrikaans (AF) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c8 +00e8 +00c9 +00e9 +00ca +00ea +00cb +00eb +00ce +00ee +00cf +00ef +00d4 +00f4 +00db +00fb +0149 diff --git a/fontconfig/fc-lang/am.orth b/fontconfig/fc-lang/am.orth index 447aafc38..42c8d49fb 100644 --- a/fontconfig/fc-lang/am.orth +++ b/fontconfig/fc-lang/am.orth @@ -1,36 +1,36 @@ -#
-# fontconfig/fc-lang/am.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Amharic (AM)
-#
-# The same as Ethiopic
-#
-include gez.orth
-1238-123f # xe-xWa
-1268-126e # ve-vo
-1278-127f # ce-cWa
-1298-129f # Ne-NWa
-12a8 # ea
-12e0-12e8 # Ze-ZWa
-1300-1307 # je-jWa
-1328-132f # Ce-CWa
+# +# fontconfig/fc-lang/am.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Amharic (AM) +# +# The same as Ethiopic +# +include gez.orth +1238-123f # xe-xWa +1268-126e # ve-vo +1278-127f # ce-cWa +1298-129f # Ne-NWa +12a8 # ea +12e0-12e8 # Ze-ZWa +1300-1307 # je-jWa +1328-132f # Ce-CWa diff --git a/fontconfig/fc-lang/ar.orth b/fontconfig/fc-lang/ar.orth index cc2da0a16..fd673c672 100644 --- a/fontconfig/fc-lang/ar.orth +++ b/fontconfig/fc-lang/ar.orth @@ -1,39 +1,39 @@ -#
-# fontconfig/fc-lang/ar.orth
-#
-# Copyright © 2002 Keith Packard
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Arabic (ar)
-#
-# We are assuming that:
-# * Most fonts that claim to support an Arabic letter actually do so;
-# * Most modern text rendering software use OpenType tables, instead of
-# directly using presentation forms.
-# * Some good Arabic fonts do not support codepoints for Arabic presentation
-# forms.
-# Thus, we are switching to general forms of Arabic letters.
-#
-# General forms:
-0621-063a
-0641-064a
-# Presentations forms:
-# fe80-fefc
+# +# fontconfig/fc-lang/ar.orth +# +# Copyright © 2002 Keith Packard +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Arabic (ar) +# +# We are assuming that: +# * Most fonts that claim to support an Arabic letter actually do so; +# * Most modern text rendering software use OpenType tables, instead of +# directly using presentation forms. +# * Some good Arabic fonts do not support codepoints for Arabic presentation +# forms. +# Thus, we are switching to general forms of Arabic letters. +# +# General forms: +0621-063a +0641-064a +# Presentations forms: +# fe80-fefc diff --git a/fontconfig/fc-lang/ast.orth b/fontconfig/fc-lang/ast.orth index 9a9cf0921..634f07910 100644 --- a/fontconfig/fc-lang/ast.orth +++ b/fontconfig/fc-lang/ast.orth @@ -1,43 +1,43 @@ -#
-# fontconfig/fc-lang/ast.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Orthography from http://www.evertype.com/alphabets/asturian.pdf
-#
-# Asturian/Bable/Leonese/Asturleonese (ast)
-#
-0041-005a
-0061-007a
-00c1
-00c9
-00cd
-00d1
-00d3
-00da
-00dc
-00e1
-00e9
-00ed
-00f1
-00f3
-00fa
-00fc
+# +# fontconfig/fc-lang/ast.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Orthography from http://www.evertype.com/alphabets/asturian.pdf +# +# Asturian/Bable/Leonese/Asturleonese (ast) +# +0041-005a +0061-007a +00c1 +00c9 +00cd +00d1 +00d3 +00da +00dc +00e1 +00e9 +00ed +00f1 +00f3 +00fa +00fc diff --git a/fontconfig/fc-lang/av.orth b/fontconfig/fc-lang/av.orth index 9fc1c9a6d..bb3e6abca 100644 --- a/fontconfig/fc-lang/av.orth +++ b/fontconfig/fc-lang/av.orth @@ -1,97 +1,97 @@ -#
-# fontconfig/fc-lang/av.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Avaric (av)
-#
-0401
-0406
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+# +# fontconfig/fc-lang/av.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Avaric (av) +# +0401 +0406 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/ay.orth b/fontconfig/fc-lang/ay.orth index d7338fa91..538bc80f7 100644 --- a/fontconfig/fc-lang/ay.orth +++ b/fontconfig/fc-lang/ay.orth @@ -1,37 +1,37 @@ -#
-# fontconfig/fc-lang/ay.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Aymara (KW)
-#
-# Orthography from http://www.aymara.org/arusa/qillqa_eng.html
-#
-0041-005a
-0061-007a
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-00D1 # LATIN CAPITAL LETTER N WITH TILDE
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00EF # LATIN SMALL LETTER I WITH DIAERESIS
-00F1 # LATIN SMALL LETTER N WITH TILDE
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
+# +# fontconfig/fc-lang/ay.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Aymara (KW) +# +# Orthography from http://www.aymara.org/arusa/qillqa_eng.html +# +0041-005a +0061-007a +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +00D1 # LATIN CAPITAL LETTER N WITH TILDE +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00EF # LATIN SMALL LETTER I WITH DIAERESIS +00F1 # LATIN SMALL LETTER N WITH TILDE +00FC # LATIN SMALL LETTER U WITH DIAERESIS diff --git a/fontconfig/fc-lang/az_ir.orth b/fontconfig/fc-lang/az_ir.orth index dfa9681e5..1a5aea9a7 100644 --- a/fontconfig/fc-lang/az_ir.orth +++ b/fontconfig/fc-lang/az_ir.orth @@ -1,32 +1,32 @@ -#
-# fontconfig/fc-lang/az_ir.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Azerbaijani in Iran (AZ-IR)
-#
-# Data from Roozbeh Pournader <roozbeh@sharif.edu>
-#
-# Iran's Azerbaijani uses Persian letters plus an obligatory HAMZA ABOVE
-# (only used over FARSI YEH).
-#
-include fa.orth
-0654 # ARABIC HAMZA ABOVE
+# +# fontconfig/fc-lang/az_ir.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Azerbaijani in Iran (AZ-IR) +# +# Data from Roozbeh Pournader <roozbeh@sharif.edu> +# +# Iran's Azerbaijani uses Persian letters plus an obligatory HAMZA ABOVE +# (only used over FARSI YEH). +# +include fa.orth +0654 # ARABIC HAMZA ABOVE diff --git a/fontconfig/fc-lang/ba.orth b/fontconfig/fc-lang/ba.orth index 513c1c775..9c91dda6c 100644 --- a/fontconfig/fc-lang/ba.orth +++ b/fontconfig/fc-lang/ba.orth @@ -1,56 +1,56 @@ -#
-# fontconfig/fc-lang/ba.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bashkir (BA)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00AA # FEMININE ORDINAL INDICATOR
-#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
-#0401 # CYRILLIC CAPITAL LETTER IO in evertype.com
-#0451 # CYRILLIC SMALL LETTER IO in evertype.com
-
-0410-044f # CYRILLIC
-0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE
-0493 # CYRILLIC SMALL LETTER GHE WITH STROKE
-0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER
-0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER
-04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA
-04A1 # CYRILLIC SMALL LETTER BASHKIR KA
-04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER
-04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER
-04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER
-04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER
-04AE # CYRILLIC CAPITAL LETTER STRAIGHT U
-04AF # CYRILLIC SMALL LETTER STRAIGHT U
-04BA # CYRILLIC CAPITAL LETTER SHHA
-04BB # CYRILLIC SMALL LETTER SHHA
-04D8 # CYRILLIC CAPITAL LETTER SCHWA
-04D9 # CYRILLIC SMALL LETTER SCHWA
-04E8 # CYRILLIC CAPITAL LETTER BARRED O
-04E9 # CYRILLIC SMALL LETTER BARRED O
-#2018-2019 # single quotes
-#201c-201d # double quotes
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/ba.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bashkir (BA) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00AA # FEMININE ORDINAL INDICATOR +#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * +#0401 # CYRILLIC CAPITAL LETTER IO in evertype.com +#0451 # CYRILLIC SMALL LETTER IO in evertype.com + +0410-044f # CYRILLIC +0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE +0493 # CYRILLIC SMALL LETTER GHE WITH STROKE +0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER +04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA +04A1 # CYRILLIC SMALL LETTER BASHKIR KA +04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER +04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER +04AE # CYRILLIC CAPITAL LETTER STRAIGHT U +04AF # CYRILLIC SMALL LETTER STRAIGHT U +04BA # CYRILLIC CAPITAL LETTER SHHA +04BB # CYRILLIC SMALL LETTER SHHA +04D8 # CYRILLIC CAPITAL LETTER SCHWA +04D9 # CYRILLIC SMALL LETTER SCHWA +04E8 # CYRILLIC CAPITAL LETTER BARRED O +04E9 # CYRILLIC SMALL LETTER BARRED O +#2018-2019 # single quotes +#201c-201d # double quotes +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/be.orth b/fontconfig/fc-lang/be.orth index 0d93d5dc7..1bf5e3234 100644 --- a/fontconfig/fc-lang/be.orth +++ b/fontconfig/fc-lang/be.orth @@ -1,40 +1,40 @@ -#
-# fontconfig/fc-lang/be.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Byelorussian (BE)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab
-#00bb
-#02BC # MODIFIER LETTER APOSTROPHE
-#0401 # CYRILLIC CAPITAL LETTER IO evertype.com
-0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I
-040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian)
-0410-044f
-#0451 # CYRILLIC SMALL LETTER IO evertype.com
-0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I
-045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian)
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/be.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Byelorussian (BE) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab +#00bb +#02BC # MODIFIER LETTER APOSTROPHE +#0401 # CYRILLIC CAPITAL LETTER IO evertype.com +0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) +0410-044f +#0451 # CYRILLIC SMALL LETTER IO evertype.com +0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian) +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/bg.orth b/fontconfig/fc-lang/bg.orth index bbedc44a2..c947490f0 100644 --- a/fontconfig/fc-lang/bg.orth +++ b/fontconfig/fc-lang/bg.orth @@ -1,43 +1,43 @@ -#
-# fontconfig/fc-lang/bg.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bulgarian (BG)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#0400 # CYRILLIC CAPITAL IE WITH GRAVE evertype.com
-#040d # CYRILLIC CAPITAL I WITH GRAVE evertype.com
-0410-042a
-042c
-042e-042f
-0430-044a
-044c
-044e-044f
-#0450 # CYRILLIC SMALL IE WITH GRAVE evertype.com
-#045d # CYRILLIC SMALL I WITH GRAVE evertype.com
-#0462 # CYRILLIC CAPITAL LETTER YAT evertype.com
-#0463 # CYRILLIC SMALL LETTER YAT evertype.com
-#046A # CYRILLIC CAPITAL LETTER BIG YUS evertype.com
-#046B # CYRILLIC SMALL LETTER BIG YUS evertype.com
+# +# fontconfig/fc-lang/bg.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bulgarian (BG) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#0400 # CYRILLIC CAPITAL IE WITH GRAVE evertype.com +#040d # CYRILLIC CAPITAL I WITH GRAVE evertype.com +0410-042a +042c +042e-042f +0430-044a +044c +044e-044f +#0450 # CYRILLIC SMALL IE WITH GRAVE evertype.com +#045d # CYRILLIC SMALL I WITH GRAVE evertype.com +#0462 # CYRILLIC CAPITAL LETTER YAT evertype.com +#0463 # CYRILLIC SMALL LETTER YAT evertype.com +#046A # CYRILLIC CAPITAL LETTER BIG YUS evertype.com +#046B # CYRILLIC SMALL LETTER BIG YUS evertype.com diff --git a/fontconfig/fc-lang/bh.orth b/fontconfig/fc-lang/bh.orth index c39a7a676..2dd749cb4 100644 --- a/fontconfig/fc-lang/bh.orth +++ b/fontconfig/fc-lang/bh.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/bh.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bihari (Devanagari script) (BH)
-include hi.orth
+# +# fontconfig/fc-lang/bh.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bihari (Devanagari script) (BH) +include hi.orth diff --git a/fontconfig/fc-lang/bho.orth b/fontconfig/fc-lang/bho.orth index e72746bd7..b5e34d851 100644 --- a/fontconfig/fc-lang/bho.orth +++ b/fontconfig/fc-lang/bho.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/bho.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bhojpuri (Devanagari script) (BHO)
-include hi.orth
+# +# fontconfig/fc-lang/bho.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bhojpuri (Devanagari script) (BHO) +include hi.orth diff --git a/fontconfig/fc-lang/bi.orth b/fontconfig/fc-lang/bi.orth index c488c0c82..521d52981 100644 --- a/fontconfig/fc-lang/bi.orth +++ b/fontconfig/fc-lang/bi.orth @@ -1,39 +1,39 @@ -#
-# fontconfig/fc-lang/bi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bislama (BI)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c9
-00e9
-00cf
-00ef
-#e000 # LATIN CAPITAL LETTER M WITH MACRON (no UCS code)
-#e001 # LATIN SMALL LETTER M WITH MACRON (no UCS code)
-#e002 # LATIN CAPITAL LETTER P WITH MACRON (no UCS code)
-#e003 # LATIN SMALL LETTER P WITH MACRON (no UCS code)
-00dc
-00fc
+# +# fontconfig/fc-lang/bi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bislama (BI) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c9 +00e9 +00cf +00ef +#e000 # LATIN CAPITAL LETTER M WITH MACRON (no UCS code) +#e001 # LATIN SMALL LETTER M WITH MACRON (no UCS code) +#e002 # LATIN CAPITAL LETTER P WITH MACRON (no UCS code) +#e003 # LATIN SMALL LETTER P WITH MACRON (no UCS code) +00dc +00fc diff --git a/fontconfig/fc-lang/bin.orth b/fontconfig/fc-lang/bin.orth index e0f8f7ad3..b9db3a182 100644 --- a/fontconfig/fc-lang/bin.orth +++ b/fontconfig/fc-lang/bin.orth @@ -1,55 +1,55 @@ -#
-# fontconfig/fc-lang/bin.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Edo or Bini (BIN)
-#
-# Orthography from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
-00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CC # LATIN CAPITAL LETTER I WITH GRAVE
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-00E0 # LATIN SMALL LETTER A WITH GRAVE
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-00E8 # LATIN SMALL LETTER E WITH GRAVE
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00EC # LATIN SMALL LETTER I WITH GRAVE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00F2 # LATIN SMALL LETTER O WITH GRAVE
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-00F9 # LATIN SMALL LETTER U WITH GRAVE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW
-1EB9 # LATIN SMALL LETTER E WITH DOT BELOW
-1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW
-1ECD # LATIN SMALL LETTER O WITH DOT BELOW
-0300 # COMBINING GRAVE ACCENT (Varia)
-0301 # COMBINING ACUTE ACCENT (Oxia, Tonos)
+# +# fontconfig/fc-lang/bin.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Edo or Bini (BIN) +# +# Orthography from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a +00C0 # LATIN CAPITAL LETTER A WITH GRAVE +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +00C8 # LATIN CAPITAL LETTER E WITH GRAVE +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CC # LATIN CAPITAL LETTER I WITH GRAVE +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00D2 # LATIN CAPITAL LETTER O WITH GRAVE +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +00D9 # LATIN CAPITAL LETTER U WITH GRAVE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +00E0 # LATIN SMALL LETTER A WITH GRAVE +00E1 # LATIN SMALL LETTER A WITH ACUTE +00E8 # LATIN SMALL LETTER E WITH GRAVE +00E9 # LATIN SMALL LETTER E WITH ACUTE +00EC # LATIN SMALL LETTER I WITH GRAVE +00ED # LATIN SMALL LETTER I WITH ACUTE +00F2 # LATIN SMALL LETTER O WITH GRAVE +00F3 # LATIN SMALL LETTER O WITH ACUTE +00F9 # LATIN SMALL LETTER U WITH GRAVE +00FA # LATIN SMALL LETTER U WITH ACUTE +1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW +1EB9 # LATIN SMALL LETTER E WITH DOT BELOW +1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW +1ECD # LATIN SMALL LETTER O WITH DOT BELOW +0300 # COMBINING GRAVE ACCENT (Varia) +0301 # COMBINING ACUTE ACCENT (Oxia, Tonos) diff --git a/fontconfig/fc-lang/bm.orth b/fontconfig/fc-lang/bm.orth index f19d9e8a6..fca67e86e 100644 --- a/fontconfig/fc-lang/bm.orth +++ b/fontconfig/fc-lang/bm.orth @@ -1,37 +1,37 @@ -#
-# fontconfig/fc-lang/bm.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bambara (bm)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0190
-025b
-014a
-014b
-019d
-0272
-0186
-0254
+# +# fontconfig/fc-lang/bm.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bambara (bm) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0190 +025b +014a +014b +019d +0272 +0186 +0254 diff --git a/fontconfig/fc-lang/bo.orth b/fontconfig/fc-lang/bo.orth index 00cb52dc5..a347759c5 100644 --- a/fontconfig/fc-lang/bo.orth +++ b/fontconfig/fc-lang/bo.orth @@ -1,39 +1,39 @@ -#
-# fontconfig/fc-lang/bo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tibetan (BO)
-#
-# Taken from the Unicode coverage of this language
-#
-0f40-0f47
-0f49-0f69
-0f71-0f76
-0f78
-0f7a-0f7d
-0f80-0f81
-0f90-0f97
-0f99-0fb9
-# Fixed-form subjoined consonants
-# These characters are used only for transliteration and transcription.
-#0fba-0fbc
-
+# +# fontconfig/fc-lang/bo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tibetan (BO) +# +# Taken from the Unicode coverage of this language +# +0f40-0f47 +0f49-0f69 +0f71-0f76 +0f78 +0f7a-0f7d +0f80-0f81 +0f90-0f97 +0f99-0fb9 +# Fixed-form subjoined consonants +# These characters are used only for transliteration and transcription. +#0fba-0fbc + diff --git a/fontconfig/fc-lang/br.orth b/fontconfig/fc-lang/br.orth index f38d7f579..9d126ab59 100644 --- a/fontconfig/fc-lang/br.orth +++ b/fontconfig/fc-lang/br.orth @@ -1,47 +1,47 @@ -#
-# fontconfig/fc-lang/br.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Breton (BR)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#0027
-0041-005a
-0061-007a
-#00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK *
-#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
-00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00D1 # LATIN CAPITAL LETTER N WITH TILDE
-00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX eki.ee
-00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-00F1 # LATIN SMALL LETTER N WITH TILDE
-00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX eki.ee
-00F9 # LATIN SMALL LETTER U WITH GRAVE
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-#2019-201a # single quote and comma
+# +# fontconfig/fc-lang/br.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Breton (BR) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#0027 +0041-005a +0061-007a +#00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK * +#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * +00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00D1 # LATIN CAPITAL LETTER N WITH TILDE +00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX eki.ee +00D9 # LATIN CAPITAL LETTER U WITH GRAVE +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +00F1 # LATIN SMALL LETTER N WITH TILDE +00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX eki.ee +00F9 # LATIN SMALL LETTER U WITH GRAVE +00FC # LATIN SMALL LETTER U WITH DIAERESIS +#2019-201a # single quote and comma diff --git a/fontconfig/fc-lang/bs.orth b/fontconfig/fc-lang/bs.orth index 13dc27e23..3ef930908 100644 --- a/fontconfig/fc-lang/bs.orth +++ b/fontconfig/fc-lang/bs.orth @@ -1,39 +1,39 @@ -#
-# fontconfig/fc-lang/bs.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Bosnian (BS)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0106
-0107
-010c
-010d
-0110
-0111
-0160
-0161
-017d
-017e
+# +# fontconfig/fc-lang/bs.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bosnian (BS) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0106 +0107 +010c +010d +0110 +0111 +0160 +0161 +017d +017e diff --git a/fontconfig/fc-lang/bua.orth b/fontconfig/fc-lang/bua.orth index 14df6912a..8618310f3 100644 --- a/fontconfig/fc-lang/bua.orth +++ b/fontconfig/fc-lang/bua.orth @@ -1,102 +1,102 @@ -#
-# fontconfig/fc-lang/bua.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Buriat (Buryat) (BUA)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
-#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
-04ae
-04af
-04ba
-04bb
+# +# fontconfig/fc-lang/bua.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Buriat (Buryat) (BUA) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) +#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) +04ae +04af +04ba +04bb diff --git a/fontconfig/fc-lang/ca.orth b/fontconfig/fc-lang/ca.orth index 7cb4d67f1..3436ab995 100644 --- a/fontconfig/fc-lang/ca.orth +++ b/fontconfig/fc-lang/ca.orth @@ -1,58 +1,58 @@ -#
-# fontconfig/fc-lang/ca.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Catalan (CA)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00B7 # MIDDLE DOT
-00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-#00D1 # LATIN CAPITAL LETTER N WITH TILDE "important" @ eki.ee
-00D2 # LATIN CAPITAL LETTER O WITH GRAVE
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E0 # LATIN SMALL LETTER A WITH GRAVE
-00E7 # LATIN SMALL LETTER C WITH CEDILLA
-00E8 # LATIN SMALL LETTER E WITH GRAVE
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00EF # LATIN SMALL LETTER I WITH DIAERESIS
-#00F1 # LATIN SMALL LETTER N WITH TILDE "important" @ eki.ee
-00F2 # LATIN SMALL LETTER O WITH GRAVE
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT
-0140 # LATIN SMALL LETTER L WITH MIDDLE DOT
-#2018-2019 # single quotes
-#201c-201d # double quotes
+# +# fontconfig/fc-lang/ca.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Catalan (CA) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00B7 # MIDDLE DOT +00C0 # LATIN CAPITAL LETTER A WITH GRAVE +00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +00C8 # LATIN CAPITAL LETTER E WITH GRAVE +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +#00D1 # LATIN CAPITAL LETTER N WITH TILDE "important" @ eki.ee +00D2 # LATIN CAPITAL LETTER O WITH GRAVE +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E0 # LATIN SMALL LETTER A WITH GRAVE +00E7 # LATIN SMALL LETTER C WITH CEDILLA +00E8 # LATIN SMALL LETTER E WITH GRAVE +00E9 # LATIN SMALL LETTER E WITH ACUTE +00ED # LATIN SMALL LETTER I WITH ACUTE +00EF # LATIN SMALL LETTER I WITH DIAERESIS +#00F1 # LATIN SMALL LETTER N WITH TILDE "important" @ eki.ee +00F2 # LATIN SMALL LETTER O WITH GRAVE +00F3 # LATIN SMALL LETTER O WITH ACUTE +00FA # LATIN SMALL LETTER U WITH ACUTE +00FC # LATIN SMALL LETTER U WITH DIAERESIS +013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT +0140 # LATIN SMALL LETTER L WITH MIDDLE DOT +#2018-2019 # single quotes +#201c-201d # double quotes diff --git a/fontconfig/fc-lang/ce.orth b/fontconfig/fc-lang/ce.orth index 502b1df44..fb9785a2e 100644 --- a/fontconfig/fc-lang/ce.orth +++ b/fontconfig/fc-lang/ce.orth @@ -1,97 +1,97 @@ -#
-# fontconfig/fc-lang/ce.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Chechen (CE)
-#
-0401
-0406
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+# +# fontconfig/fc-lang/ce.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Chechen (CE) +# +0401 +0406 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/ch.orth b/fontconfig/fc-lang/ch.orth index 45385b0c6..8e8ac6fb3 100644 --- a/fontconfig/fc-lang/ch.orth +++ b/fontconfig/fc-lang/ch.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/ch.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chamorro (CH)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c2
-00e2
-00d1
-00f1
-00dc
-00fc
+# +# fontconfig/fc-lang/ch.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chamorro (CH) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c2 +00e2 +00d1 +00f1 +00dc +00fc diff --git a/fontconfig/fc-lang/chm.orth b/fontconfig/fc-lang/chm.orth index f400cd35c..3ff7d3b24 100644 --- a/fontconfig/fc-lang/chm.orth +++ b/fontconfig/fc-lang/chm.orth @@ -1,109 +1,109 @@ -#
-# fontconfig/fc-lang/chm.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Mari (Lower Cheremis / Upper Cheremis) (CHM)
-#
-# I've merged both of these languages together so that a font
-# for 'chm' will cover both orthographies
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-04a4
-04a5
-04d2
-04d3
-04e6
-04e7
-04f0
-04f1
-04f8
-04f9
+# +# fontconfig/fc-lang/chm.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Mari (Lower Cheremis / Upper Cheremis) (CHM) +# +# I've merged both of these languages together so that a font +# for 'chm' will cover both orthographies +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +04a4 +04a5 +04d2 +04d3 +04e6 +04e7 +04f0 +04f1 +04f8 +04f9 diff --git a/fontconfig/fc-lang/chr.orth b/fontconfig/fc-lang/chr.orth index 0d87148f6..22972613d 100644 --- a/fontconfig/fc-lang/chr.orth +++ b/fontconfig/fc-lang/chr.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/chr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Cherokee (chr)
-13a0-13f4
+# +# fontconfig/fc-lang/chr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Cherokee (chr) +13a0-13f4 diff --git a/fontconfig/fc-lang/co.orth b/fontconfig/fc-lang/co.orth index 91915bd5c..4c67f755f 100644 --- a/fontconfig/fc-lang/co.orth +++ b/fontconfig/fc-lang/co.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/co.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Corsican (CO)
-include fr.orth
+# +# fontconfig/fc-lang/co.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Corsican (CO) +include fr.orth diff --git a/fontconfig/fc-lang/cs.orth b/fontconfig/fc-lang/cs.orth index 422d4b6b8..3c03e80d2 100644 --- a/fontconfig/fc-lang/cs.orth +++ b/fontconfig/fc-lang/cs.orth @@ -1,67 +1,67 @@ -#
-# fontconfig/fc-lang/cs.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Czech (CS)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
-00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com
-00FA # LATIN SMALL LETTER U WITH ACUTE
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
-00FD # LATIN SMALL LETTER Y WITH ACUTE
-010C # LATIN CAPITAL LETTER C WITH CARON
-010D # LATIN SMALL LETTER C WITH CARON
-010E # LATIN CAPITAL LETTER D WITH CARON
-010F # LATIN SMALL LETTER D WITH CARON
-011A # LATIN CAPITAL LETTER E WITH CARON
-011B # LATIN SMALL LETTER E WITH CARON
-0147 # LATIN CAPITAL LETTER N WITH CARON
-0148 # LATIN SMALL LETTER N WITH CARON
-0158 # LATIN CAPITAL LETTER R WITH CARON
-0159 # LATIN SMALL LETTER R WITH CARON
-0160 # LATIN CAPITAL LETTER S WITH CARON
-0161 # LATIN SMALL LETTER S WITH CARON
-0164 # LATIN CAPITAL LETTER T WITH CARON
-0165 # LATIN SMALL LETTER T WITH CARON
-016E # LATIN CAPITAL LETTER U WITH RING ABOVE
-016F # LATIN SMALL LETTER U WITH RING ABOVE
-017D # LATIN CAPITAL LETTER Z WITH CARON
-017E # LATIN SMALL LETTER Z WITH CARON
+# +# fontconfig/fc-lang/cs.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Czech (CS) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com +00DA # LATIN CAPITAL LETTER U WITH ACUTE +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com +00DD # LATIN CAPITAL LETTER Y WITH ACUTE +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com +00E9 # LATIN SMALL LETTER E WITH ACUTE +00ED # LATIN SMALL LETTER I WITH ACUTE +00F3 # LATIN SMALL LETTER O WITH ACUTE +#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com +00FA # LATIN SMALL LETTER U WITH ACUTE +#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com +00FD # LATIN SMALL LETTER Y WITH ACUTE +010C # LATIN CAPITAL LETTER C WITH CARON +010D # LATIN SMALL LETTER C WITH CARON +010E # LATIN CAPITAL LETTER D WITH CARON +010F # LATIN SMALL LETTER D WITH CARON +011A # LATIN CAPITAL LETTER E WITH CARON +011B # LATIN SMALL LETTER E WITH CARON +0147 # LATIN CAPITAL LETTER N WITH CARON +0148 # LATIN SMALL LETTER N WITH CARON +0158 # LATIN CAPITAL LETTER R WITH CARON +0159 # LATIN SMALL LETTER R WITH CARON +0160 # LATIN CAPITAL LETTER S WITH CARON +0161 # LATIN SMALL LETTER S WITH CARON +0164 # LATIN CAPITAL LETTER T WITH CARON +0165 # LATIN SMALL LETTER T WITH CARON +016E # LATIN CAPITAL LETTER U WITH RING ABOVE +016F # LATIN SMALL LETTER U WITH RING ABOVE +017D # LATIN CAPITAL LETTER Z WITH CARON +017E # LATIN SMALL LETTER Z WITH CARON diff --git a/fontconfig/fc-lang/cu.orth b/fontconfig/fc-lang/cu.orth index 6e7e7c290..f4f512778 100644 --- a/fontconfig/fc-lang/cu.orth +++ b/fontconfig/fc-lang/cu.orth @@ -1,42 +1,42 @@ -#
-# fontconfig/fc-lang/cu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Old Church Slavonic (CU)
-#
-# Orthography from http://www.evertype.com/alphabets/old-church-slavonic.pdf
-#
-0401-0402
-0405-0406
-0408
-040b
-040d
-040f-0418
-041a-042c
-042e-044c
-044e-0450
-0452
-0455-456
-0458
-045b
-045d
-045f-0479
+# +# fontconfig/fc-lang/cu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Old Church Slavonic (CU) +# +# Orthography from http://www.evertype.com/alphabets/old-church-slavonic.pdf +# +0401-0402 +0405-0406 +0408 +040b +040d +040f-0418 +041a-042c +042e-044c +044e-0450 +0452 +0455-456 +0458 +045b +045d +045f-0479 diff --git a/fontconfig/fc-lang/cv.orth b/fontconfig/fc-lang/cv.orth index 44ebe9282..58c739b23 100644 --- a/fontconfig/fc-lang/cv.orth +++ b/fontconfig/fc-lang/cv.orth @@ -1,109 +1,109 @@ -#
-# fontconfig/fc-lang/cv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Chuvash (CV)
-#
-#
-# I'm guessing the c cedilla is really es with descender
-#
-#00c7 # C cedilla
-#00e7 # c cedilla
-04aa # capital es with descender
-04ab # small es with descender
-0102
-0103
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-04d6
-04d7
-04f2
-04f3
+# +# fontconfig/fc-lang/cv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Chuvash (CV) +# +# +# I'm guessing the c cedilla is really es with descender +# +#00c7 # C cedilla +#00e7 # c cedilla +04aa # capital es with descender +04ab # small es with descender +0102 +0103 +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +04d6 +04d7 +04f2 +04f3 diff --git a/fontconfig/fc-lang/cy.orth b/fontconfig/fc-lang/cy.orth index 617df3d34..7d1b8a4db 100644 --- a/fontconfig/fc-lang/cy.orth +++ b/fontconfig/fc-lang/cy.orth @@ -1,63 +1,63 @@ -#
-# fontconfig/fc-lang/cy.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Welsh (CY)
-#
-# Coverage given by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk>
-# and separately by Jessica Perry Hekman <jphekman@arborius.net>
-# with help from Mark Kille and Jerry Hunter.
-#
-0041-005a
-0061-007a
-00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-00EF # LATIN SMALL LETTER I WITH DIAERESIS
-00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-00FF # LATIN SMALL LETTER Y WITH DIAERESIS
-#
-# Non-Latin-1 characters needed for Welsh:
-#
-0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX
-0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX
-0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX
-0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX
-0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
-#
-# And stricktly speaking for dictionary authors also:
-#
-1E80 # LATIN CAPITAL LETTER W WITH GRAVE
-1E81 # LATIN SMALL LETTER W WITH GRAVE
-1E82 # LATIN CAPITAL LETTER W WITH ACUTE
-1E83 # LATIN SMALL LETTER W WITH ACUTE
-1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS
-1E85 # LATIN SMALL LETTER W WITH DIAERESIS
-1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE
-1EF3 # LATIN SMALL LETTER Y WITH GRAVE
+# +# fontconfig/fc-lang/cy.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Welsh (CY) +# +# Coverage given by Markus Kuhn <Markus.Kuhn@cl.cam.ac.uk> +# and separately by Jessica Perry Hekman <jphekman@arborius.net> +# with help from Mark Kille and Jerry Hunter. +# +0041-005a +0061-007a +00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +00E9 # LATIN SMALL LETTER E WITH ACUTE +00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF # LATIN SMALL LETTER I WITH DIAERESIS +00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +00FF # LATIN SMALL LETTER Y WITH DIAERESIS +# +# Non-Latin-1 characters needed for Welsh: +# +0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX +0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +# +# And stricktly speaking for dictionary authors also: +# +1E80 # LATIN CAPITAL LETTER W WITH GRAVE +1E81 # LATIN SMALL LETTER W WITH GRAVE +1E82 # LATIN CAPITAL LETTER W WITH ACUTE +1E83 # LATIN SMALL LETTER W WITH ACUTE +1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS +1E85 # LATIN SMALL LETTER W WITH DIAERESIS +1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE +1EF3 # LATIN SMALL LETTER Y WITH GRAVE diff --git a/fontconfig/fc-lang/da.orth b/fontconfig/fc-lang/da.orth index 3e74d81bb..a10ac7370 100644 --- a/fontconfig/fc-lang/da.orth +++ b/fontconfig/fc-lang/da.orth @@ -1,89 +1,89 @@ -#
-# fontconfig/fc-lang/da.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Danish (DA)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-# Note:
-# The sources cited at www.evertype.com appear to have unified
-# all of the nordic languages making the orthography significantly
-# larger than needed for Danish. The orthography used here is
-# just that from eki.ee with the evertype.com additions commented out
-#
-0041-005a
-0061-007a
-#00ab
-#00bb
-#00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-00C6 # LATIN CAPITAL LETTER AE (ash) *
-#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-#00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-#00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-#00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-#00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-00D8 # LATIN CAPITAL LETTER O WITH STROKE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-#00DE # LATIN CAPITAL LETTER THORN (Icelandic)
-#00E0 # LATIN SMALL LETTER A WITH GRAVE
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-#00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-00E6 # LATIN SMALL LETTER AE (ash) *
-#00E7 # LATIN SMALL LETTER C WITH CEDILLA
-#00E8 # LATIN SMALL LETTER E WITH GRAVE
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-#00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-#00EB # LATIN SMALL LETTER E WITH DIAERESIS
-00ED # LATIN SMALL LETTER I WITH ACUTE
-#00F0 # LATIN SMALL LETTER ETH (Icelandic)
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-#00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-#00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-00F8 # LATIN SMALL LETTER O WITH STROKE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS
-00FD # LATIN SMALL LETTER Y WITH ACUTE
-#00FE # LATIN SMALL LETTER THORN (Icelandic)
-#0152 # LATIN CAPITAL LIGATURE OE
-#0153 # LATIN SMALL LIGATURE OE
-#01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE
-#01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE
-#01FC # LATIN CAPITAL LETTER AE WITH ACUTE (ash) *
-#01FD # LATIN SMALL LETTER AE WITH ACUTE (ash) *
-#01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE
-#01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/da.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Danish (DA) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# Note: +# The sources cited at www.evertype.com appear to have unified +# all of the nordic languages making the orthography significantly +# larger than needed for Danish. The orthography used here is +# just that from eki.ee with the evertype.com additions commented out +# +0041-005a +0061-007a +#00ab +#00bb +#00C0 # LATIN CAPITAL LETTER A WITH GRAVE +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +00C6 # LATIN CAPITAL LETTER AE (ash) * +#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +#00C8 # LATIN CAPITAL LETTER E WITH GRAVE +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +#00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +00CD # LATIN CAPITAL LETTER I WITH ACUTE +#00D0 # LATIN CAPITAL LETTER ETH (Icelandic) +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +#00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +00D8 # LATIN CAPITAL LETTER O WITH STROKE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00DD # LATIN CAPITAL LETTER Y WITH ACUTE +#00DE # LATIN CAPITAL LETTER THORN (Icelandic) +#00E0 # LATIN SMALL LETTER A WITH GRAVE +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +#00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00E5 # LATIN SMALL LETTER A WITH RING ABOVE +00E6 # LATIN SMALL LETTER AE (ash) * +#00E7 # LATIN SMALL LETTER C WITH CEDILLA +#00E8 # LATIN SMALL LETTER E WITH GRAVE +00E9 # LATIN SMALL LETTER E WITH ACUTE +#00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +#00EB # LATIN SMALL LETTER E WITH DIAERESIS +00ED # LATIN SMALL LETTER I WITH ACUTE +#00F0 # LATIN SMALL LETTER ETH (Icelandic) +00F3 # LATIN SMALL LETTER O WITH ACUTE +#00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +#00F6 # LATIN SMALL LETTER O WITH DIAERESIS +00F8 # LATIN SMALL LETTER O WITH STROKE +00FA # LATIN SMALL LETTER U WITH ACUTE +#00FC # LATIN SMALL LETTER U WITH DIAERESIS +00FD # LATIN SMALL LETTER Y WITH ACUTE +#00FE # LATIN SMALL LETTER THORN (Icelandic) +#0152 # LATIN CAPITAL LIGATURE OE +#0153 # LATIN SMALL LIGATURE OE +#01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +#01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +#01FC # LATIN CAPITAL LETTER AE WITH ACUTE (ash) * +#01FD # LATIN SMALL LETTER AE WITH ACUTE (ash) * +#01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +#01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/de.orth b/fontconfig/fc-lang/de.orth index 69dc73066..63a2eebf4 100644 --- a/fontconfig/fc-lang/de.orth +++ b/fontconfig/fc-lang/de.orth @@ -1,49 +1,49 @@ -#
-# fontconfig/fc-lang/de.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# German (DE)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab
-#00bb
-0041-005a
-0061-007a
-#00C0 # LATIN CAPITAL LETTER A WITH GRAVE eki.ee
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-#00C9 # LATIN CAPITAL LETTER E WITH ACUTE eki.ee
-00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00DF # LATIN SMALL LETTER SHARP S (German)
-#00E0 # LATIN SMALL LETTER A WITH GRAVE eki.ee
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-#00E9 # LATIN SMALL LETTER E WITH ACUTE eki.ee
-00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-#2018 # single quotes
-#201a # single quotes
-#201c # double quotes
-#201e # double quotes
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/de.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# German (DE) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab +#00bb +0041-005a +0061-007a +#00C0 # LATIN CAPITAL LETTER A WITH GRAVE eki.ee +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +#00C9 # LATIN CAPITAL LETTER E WITH ACUTE eki.ee +00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00DF # LATIN SMALL LETTER SHARP S (German) +#00E0 # LATIN SMALL LETTER A WITH GRAVE eki.ee +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +#00E9 # LATIN SMALL LETTER E WITH ACUTE eki.ee +00F6 # LATIN SMALL LETTER O WITH DIAERESIS +00FC # LATIN SMALL LETTER U WITH DIAERESIS +#2018 # single quotes +#201a # single quotes +#201c # double quotes +#201e # double quotes +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/dz.orth b/fontconfig/fc-lang/dz.orth index 58dc1a202..0d5306572 100644 --- a/fontconfig/fc-lang/dz.orth +++ b/fontconfig/fc-lang/dz.orth @@ -1,28 +1,28 @@ -#
-# fontconfig/fc-lang/dz.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Dzongkha (DZ)
-#
-# Uses Tibetan script
-#
-include bo.orth
+# +# fontconfig/fc-lang/dz.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Dzongkha (DZ) +# +# Uses Tibetan script +# +include bo.orth diff --git a/fontconfig/fc-lang/el.orth b/fontconfig/fc-lang/el.orth index 3c7eb0636..460d74074 100644 --- a/fontconfig/fc-lang/el.orth +++ b/fontconfig/fc-lang/el.orth @@ -1,32 +1,32 @@ -#
-# fontconfig/fc-lang/el.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Greek (EL)
-#
-# From vvas@hal.csd.auth.gr (Vasilis Vasaitis)
-#
-0386
-0388-038a
-038c
-038e-03a1
-03a3-03ce
+# +# fontconfig/fc-lang/el.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Greek (EL) +# +# From vvas@hal.csd.auth.gr (Vasilis Vasaitis) +# +0386 +0388-038a +038c +038e-03a1 +03a3-03ce diff --git a/fontconfig/fc-lang/en.orth b/fontconfig/fc-lang/en.orth index ce4214cd0..94e74dbcf 100644 --- a/fontconfig/fc-lang/en.orth +++ b/fontconfig/fc-lang/en.orth @@ -1,40 +1,40 @@ -#
-# fontconfig/fc-lang/en.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# English (EN)
-0041-005a
-0061-007a
-00c0
-00c7-00cb
-00cf
-00d1
-00d4
-00d6
-00e0
-00e7-00eb
-00ef
-00f1
-00f4
-00f6
-#2018-2019 # single quotes
-#201c-201d # double quotes
+# +# fontconfig/fc-lang/en.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# English (EN) +0041-005a +0061-007a +00c0 +00c7-00cb +00cf +00d1 +00d4 +00d6 +00e0 +00e7-00eb +00ef +00f1 +00f4 +00f6 +#2018-2019 # single quotes +#201c-201d # double quotes diff --git a/fontconfig/fc-lang/eo.orth b/fontconfig/fc-lang/eo.orth index e9c247a26..65351c829 100644 --- a/fontconfig/fc-lang/eo.orth +++ b/fontconfig/fc-lang/eo.orth @@ -1,32 +1,32 @@ -#
-# fontconfig/fc-lang/eo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Esperanto (EO)
-0041-005a
-0061-007a
-0108-0109
-011c-011d
-0124-0125
-0134-0135
-015c-015d
-016c-016d
+# +# fontconfig/fc-lang/eo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Esperanto (EO) +0041-005a +0061-007a +0108-0109 +011c-011d +0124-0125 +0134-0135 +015c-015d +016c-016d diff --git a/fontconfig/fc-lang/es.orth b/fontconfig/fc-lang/es.orth index 9d43a33d9..b9db47bac 100644 --- a/fontconfig/fc-lang/es.orth +++ b/fontconfig/fc-lang/es.orth @@ -1,50 +1,50 @@ -#
-# fontconfig/fc-lang/es.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Spanish (ES)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00A1 # INVERTED EXCLAMATION MARK
-#00BF # INVERTED QUESTION MARK
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA important @eki.ee
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00D1 # LATIN CAPITAL LETTER N WITH TILDE
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E7 # LATIN SMALL LETTER C WITH CEDILLA important @eki.ee
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00F1 # LATIN SMALL LETTER N WITH TILDE
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-#
+# +# fontconfig/fc-lang/es.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Spanish (ES) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00A1 # INVERTED EXCLAMATION MARK +#00BF # INVERTED QUESTION MARK +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA important @eki.ee +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00D1 # LATIN CAPITAL LETTER N WITH TILDE +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E7 # LATIN SMALL LETTER C WITH CEDILLA important @eki.ee +00E9 # LATIN SMALL LETTER E WITH ACUTE +00ED # LATIN SMALL LETTER I WITH ACUTE +00F1 # LATIN SMALL LETTER N WITH TILDE +00F3 # LATIN SMALL LETTER O WITH ACUTE +00FA # LATIN SMALL LETTER U WITH ACUTE +00FC # LATIN SMALL LETTER U WITH DIAERESIS +# diff --git a/fontconfig/fc-lang/et.orth b/fontconfig/fc-lang/et.orth index da1108613..16c3684c5 100644 --- a/fontconfig/fc-lang/et.orth +++ b/fontconfig/fc-lang/et.orth @@ -1,47 +1,47 @@ -#
-# fontconfig/fc-lang/et.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Estonian (ET)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00D5 # LATIN CAPITAL LETTER O WITH TILDE
-00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00F5 # LATIN SMALL LETTER O WITH TILDE
-00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0160 # LATIN CAPITAL LETTER S WITH CARON
-0161 # LATIN SMALL LETTER S WITH CARON
-017D # LATIN CAPITAL LETTER Z WITH CARON
-017E # LATIN SMALL LETTER Z WITH CARON
-#2018 # # single quote
-#201a # # single quote
-#201c # # double quote
-#201e # # double quote
+# +# fontconfig/fc-lang/et.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Estonian (ET) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00D5 # LATIN CAPITAL LETTER O WITH TILDE +00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00F5 # LATIN SMALL LETTER O WITH TILDE +00F6 # LATIN SMALL LETTER O WITH DIAERESIS +00FC # LATIN SMALL LETTER U WITH DIAERESIS +0160 # LATIN CAPITAL LETTER S WITH CARON +0161 # LATIN SMALL LETTER S WITH CARON +017D # LATIN CAPITAL LETTER Z WITH CARON +017E # LATIN SMALL LETTER Z WITH CARON +#2018 # # single quote +#201a # # single quote +#201c # # double quote +#201e # # double quote diff --git a/fontconfig/fc-lang/eu.orth b/fontconfig/fc-lang/eu.orth index ad3f5d91a..ab7b9070e 100644 --- a/fontconfig/fc-lang/eu.orth +++ b/fontconfig/fc-lang/eu.orth @@ -1,45 +1,45 @@ -#
-# fontconfig/fc-lang/eu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Basque (EU)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-# The orthography from evertype.com comes from the Académie de la Langue
-# Basque prior to 1926. eki.ee adds some additional letters, marked here
-# and commented out. I've also commented out some older letters
-# from the evertype.com orthography which are (apparently) no longer
-# in use
-#
-0041-005a
-0061-007a
-#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA eki.ee
-00D1 LATIN CAPITAL LETTER N WITH TILDE
-00DC LATIN CAPITAL LETTER U WITH DIAERESIS
-#00E7 # LATIN SMALL LETTER C WITH CEDILLA eki.ee
-00F1 LATIN SMALL LETTER N WITH TILDE
-00FC LATIN SMALL LETTER U WITH DIAERESIS
-#0154 LATIN CAPITAL LETTER R WITH ACUTE evertype.com
-#0155 LATIN SMALL LETTER R WITH ACUTE evertype.com
+# +# fontconfig/fc-lang/eu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Basque (EU) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +# The orthography from evertype.com comes from the Académie de la Langue +# Basque prior to 1926. eki.ee adds some additional letters, marked here +# and commented out. I've also commented out some older letters +# from the evertype.com orthography which are (apparently) no longer +# in use +# +0041-005a +0061-007a +#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA eki.ee +00D1 LATIN CAPITAL LETTER N WITH TILDE +00DC LATIN CAPITAL LETTER U WITH DIAERESIS +#00E7 # LATIN SMALL LETTER C WITH CEDILLA eki.ee +00F1 LATIN SMALL LETTER N WITH TILDE +00FC LATIN SMALL LETTER U WITH DIAERESIS +#0154 LATIN CAPITAL LETTER R WITH ACUTE evertype.com +#0155 LATIN SMALL LETTER R WITH ACUTE evertype.com diff --git a/fontconfig/fc-lang/fa.orth b/fontconfig/fc-lang/fa.orth index e404478bb..6e680f2d2 100644 --- a/fontconfig/fc-lang/fa.orth +++ b/fontconfig/fc-lang/fa.orth @@ -1,73 +1,73 @@ -#
-# fontconfig/fc-lang/fa.orth
-#
-# Copyright © 2002 Keith Packard
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Persian (fa)
-#
-# Sources:
-# * ISIRI 6219:2002, "Information Technology — Persian Information
-# Interchange and Display Mechanism, using Unicode"
-# * "Dastur-e Khat-te Fārsi", Iranian Academy of Persian Language and
-# Literature, 4th printing, December 2005, ISBN 964-7531-13-3. Available
-# at http://www.persianacademy.ir/fa/das.aspx
-#
-# We are assuming that:
-# * Most fonts that claim to support an Arabic letter actually do so;
-# * Most modern text rendering software use OpenType tables, instead of
-# directly using presentation forms.
-# * Some good Arabic fonts do not support codepoints for Arabic presentation
-# forms.
-# Thus, we are switching to general forms of Arabic letters.
-#
-# General forms:
-0621-0624
-0626-0628
-0629 # TEH MARBUTA, implicitly considered mandatory in the official orthography
-062a-063a
-0641-0642
-0644-0648
-064b # FATHATAN, considered mandatory in the official orthography
-# 064b-064d # DAMMATAN and KASRATAN, considered mandatory in the official orthography, but very rare
-# 064e-0650 # FATHA, DAMMA, and KASRA, not mandataroy in the official orthography
-# 0651 # SHADDA, considered mandatory only for legal texts
-# 0652 # SUKUN, not mandatory in the official orthography
-0654 # HAMZA ABOVE, considered mandatory in the official orthography
-# 0656 # SUBSCRIPT ALEF, not mentioned in official orthography, but sometimes used
-# 0670 # SUPERSCRIPT ALEF, not explicilty listed in the official orthography, although used in the document; not mandatory
-067e
-0686
-0698
-06a9
-06af
-06cc
-# Presentations forms:
-#fb56-fb59
-#fb7a-fb7d
-#fb8a-fb8b
-#fb8e-fb95
-#fbfc-fbff
-#fe80-fe86
-#fe89-fed8
-#fedd-feee
-##fef5-fef8 # These four happen very rarely
-#fefb-fefc
+# +# fontconfig/fc-lang/fa.orth +# +# Copyright © 2002 Keith Packard +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Persian (fa) +# +# Sources: +# * ISIRI 6219:2002, "Information Technology — Persian Information +# Interchange and Display Mechanism, using Unicode" +# * "Dastur-e Khat-te Fārsi", Iranian Academy of Persian Language and +# Literature, 4th printing, December 2005, ISBN 964-7531-13-3. Available +# at http://www.persianacademy.ir/fa/das.aspx +# +# We are assuming that: +# * Most fonts that claim to support an Arabic letter actually do so; +# * Most modern text rendering software use OpenType tables, instead of +# directly using presentation forms. +# * Some good Arabic fonts do not support codepoints for Arabic presentation +# forms. +# Thus, we are switching to general forms of Arabic letters. +# +# General forms: +0621-0624 +0626-0628 +0629 # TEH MARBUTA, implicitly considered mandatory in the official orthography +062a-063a +0641-0642 +0644-0648 +064b # FATHATAN, considered mandatory in the official orthography +# 064b-064d # DAMMATAN and KASRATAN, considered mandatory in the official orthography, but very rare +# 064e-0650 # FATHA, DAMMA, and KASRA, not mandataroy in the official orthography +# 0651 # SHADDA, considered mandatory only for legal texts +# 0652 # SUKUN, not mandatory in the official orthography +0654 # HAMZA ABOVE, considered mandatory in the official orthography +# 0656 # SUBSCRIPT ALEF, not mentioned in official orthography, but sometimes used +# 0670 # SUPERSCRIPT ALEF, not explicilty listed in the official orthography, although used in the document; not mandatory +067e +0686 +0698 +06a9 +06af +06cc +# Presentations forms: +#fb56-fb59 +#fb7a-fb7d +#fb8a-fb8b +#fb8e-fb95 +#fbfc-fbff +#fe80-fe86 +#fe89-fed8 +#fedd-feee +##fef5-fef8 # These four happen very rarely +#fefb-fefc diff --git a/fontconfig/fc-lang/fc-lang.c b/fontconfig/fc-lang/fc-lang.c index 67d0f1d5f..51717f952 100644 --- a/fontconfig/fc-lang/fc-lang.c +++ b/fontconfig/fc-lang/fc-lang.c @@ -1,592 +1,592 @@ -/*
- * fontconfig/fc-lang/fc-lang.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fccharset.c"
-#include "fcstr.c"
-#include "fcserialize.c"
-
-/*
- * fc-lang
- *
- * Read a set of language orthographies and build C declarations for
- * charsets which can then be used to identify which languages are
- * supported by a given font. Note that this uses some utilities
- * from the fontconfig library, so the necessary file is simply
- * included in this compilation. A couple of extra utility
- * functions are also needed in slightly modified form
- */
-
-void
-FcMemAlloc (int kind, int size)
-{
-}
-
-void
-FcMemFree (int kind, int size)
-{
-}
-
-FcPrivate void
-FcCacheObjectReference (void *object)
-{
-}
-
-FcPrivate void
-FcCacheObjectDereference (void *object)
-{
-}
-
-int FcDebugVal;
-
-FcChar8 *
-FcConfigHome (void)
-{
- return (FcChar8 *) getenv ("HOME");
-}
-
-static void
-fatal (const char *file, int lineno, const char *msg)
-{
- if (lineno)
- fprintf (stderr, "%s:%d: %s\n", file, lineno, msg);
- else
- fprintf (stderr, "%s: %s\n", file, msg);
- exit (1);
-}
-
-static char *
-get_line (FILE *f, char *buf, int *lineno)
-{
- char *hash;
- char *line;
- int end;
-
-next:
- line = buf;
- if (!fgets (line, 1024, f))
- return 0;
- ++(*lineno);
- hash = strchr (line, '#');
- if (hash)
- *hash = '\0';
-
- while (line[0] && isspace (line[0]))
- line++;
- end = strlen (line);
- while (end > 0 && isspace (line[end-1]))
- line[--end] = '\0';
-
- if (line[0] == '\0' || line[0] == '\n' || line[0] == '\r')
- goto next;
-
- return line;
-}
-
-static char *dir = 0;
-
-static FILE *
-scanopen (char *file)
-{
- FILE *f;
-
- f = fopen (file, "r");
- if (!f && dir)
- {
- char path[1024];
-
- strcpy (path, dir);
- strcat (path, "/");
- strcat (path, file);
- f = fopen (path, "r");
- }
- return f;
-}
-
-/*
- * build a single charset from a source file
- *
- * The file format is quite simple, either
- * a single hex value or a pair separated with a dash
- *
- * Comments begin with '#'
- */
-
-static FcCharSet *
-scan (FILE *f, char *file, FcCharSetFreezer *freezer)
-{
- FcCharSet *c = 0;
- FcCharSet *n;
- FcBool del;
- int start, end, ucs4;
- char buf[1024];
- char *line;
- int lineno = 0;
-
- while ((line = get_line (f, buf, &lineno)))
- {
- if (!strncmp (line, "include", 7))
- {
- FILE *included_f;
- char *included_file;
- included_file = strchr (line, ' ');
- if (!included_file)
- fatal (file, lineno,
- "invalid syntax, expected: include filename");
- while (isspace(*included_file))
- included_file++;
- included_f = scanopen (included_file);
- if (!included_f)
- fatal (included_file, 0, "can't open");
- n = scan (included_f, included_file, freezer);
- fclose (included_f);
- if (!c)
- c = FcCharSetCreate ();
- if (!FcCharSetMerge (c, n, NULL))
- fatal (file, lineno, "out of memory");
- FcCharSetDestroy (n);
- continue;
- }
- del = FcFalse;
- if (line[0] == '-')
- {
- del = FcTrue;
- line++;
- }
- if (strchr (line, '-'))
- {
- if (sscanf (line, "%x-%x", &start, &end) != 2)
- fatal (file, lineno, "parse error");
- }
- else
- {
- if (sscanf (line, "%x", &start) != 1)
- fatal (file, lineno, "parse error");
- end = start;
- }
- if (!c)
- c = FcCharSetCreate ();
- for (ucs4 = start; ucs4 <= end; ucs4++)
- {
- if (!((del ? FcCharSetDelChar : FcCharSetAddChar) (c, ucs4)))
- fatal (file, lineno, "out of memory");
- }
- }
- n = (FcCharSet *) FcCharSetFreeze (freezer, c);
- FcCharSetDestroy (c);
- return n;
-}
-
-/*
- * Convert a file name into a name suitable for C declarations
- */
-static char *
-get_name (char *file)
-{
- char *name;
- char *dot;
-
- dot = strchr (file, '.');
- if (!dot)
- dot = file + strlen(file);
- name = malloc (dot - file + 1);
- strncpy (name, file, dot - file);
- name[dot-file] = '\0';
- return name;
-}
-
-/*
- * Convert a C name into a language name
- */
-static char *
-get_lang (char *name)
-{
- char *lang = malloc (strlen (name) + 1);
- char *l = lang;
- char c;
-
- while ((c = *name++))
- {
- if (isupper ((int) (unsigned char) c))
- c = tolower ((int) (unsigned char) c);
- if (c == '_')
- c = '-';
- if (c == ' ')
- continue;
- *l++ = c;
- }
- *l++ = '\0';
- return lang;
-}
-
-typedef struct _Entry {
- int id;
- char *file;
-} Entry;
-
-static int compare (const void *a, const void *b)
-{
- const Entry *as = a, *bs = b;
- return FcStrCmpIgnoreCase ((const FcChar8 *) as->file, (const FcChar8 *) bs->file);
-}
-
-#define MAX_LANG 1024
-#define MAX_LANG_SET_MAP ((MAX_LANG + 31) / 32)
-
-#define BitSet(map, i) ((map)[(entries[i].id)>>5] |= ((FcChar32) 1 << ((entries[i].id) & 0x1f)))
-#define BitGet(map, i) ((map)[(entries[i].id)>>5] >> ((entries[i].id) & 0x1f)) & 1)
-
-int
-main (int argc, char **argv)
-{
- static Entry entries[MAX_LANG];
- static FcCharSet *sets[MAX_LANG];
- static int duplicate[MAX_LANG];
- static int country[MAX_LANG];
- static char *names[MAX_LANG];
- static char *langs[MAX_LANG];
- static int off[MAX_LANG];
- FILE *f;
- int ncountry = 0;
- int i = 0;
- int nsets = 0;
- int argi;
- FcCharLeaf **leaves;
- int total_leaves = 0;
- int l, sl, tl, tn;
- static char line[1024];
- static FcChar32 map[MAX_LANG_SET_MAP];
- int num_lang_set_map;
- int setRangeStart[26];
- int setRangeEnd[26];
- FcChar8 setRangeChar;
- FcCharSetFreezer *freezer;
-
- freezer = FcCharSetFreezerCreate ();
- if (!freezer)
- fatal (argv[0], 0, "out of memory");
- argi = 1;
- while (argv[argi])
- {
- if (!strcmp (argv[argi], "-d"))
- {
- argi++;
- dir = argv[argi++];
- continue;
- }
- if (i == MAX_LANG)
- fatal (argv[0], 0, "Too many languages");
- entries[i].id = i;
- entries[i].file = argv[argi++];
- i++;
- }
- entries[i].file = 0;
- qsort (entries, i, sizeof (Entry), compare);
- i = 0;
- while (entries[i].file)
- {
- f = scanopen (entries[i].file);
- if (!f)
- fatal (entries[i].file, 0, strerror (errno));
- sets[i] = scan (f, entries[i].file, freezer);
- names[i] = get_name (entries[i].file);
- langs[i] = get_lang(names[i]);
- if (strchr (langs[i], '-'))
- country[ncountry++] = i;
-
- total_leaves += sets[i]->num;
- i++;
- fclose (f);
- }
- nsets = i;
- sets[i] = 0;
- leaves = malloc (total_leaves * sizeof (FcCharLeaf *));
- tl = 0;
- /*
- * Find unique leaves
- */
- for (i = 0; sets[i]; i++)
- {
- for (sl = 0; sl < sets[i]->num; sl++)
- {
- for (l = 0; l < tl; l++)
- if (leaves[l] == FcCharSetLeaf(sets[i], sl))
- break;
- if (l == tl)
- leaves[tl++] = FcCharSetLeaf(sets[i], sl);
- }
- }
-
- /*
- * Scan the input until the marker is found
- */
-
- while (fgets (line, sizeof (line), stdin))
- {
- if (!strncmp (line, "@@@", 3))
- break;
- fputs (line, stdout);
- }
-
- printf ("/* total size: %d unique leaves: %d */\n\n",
- total_leaves, tl);
-
- /*
- * Find duplicate charsets
- */
- duplicate[0] = -1;
- for (i = 1; sets[i]; i++)
- {
- int j;
-
- duplicate[i] = -1;
- for (j = 0; j < i; j++)
- if (sets[j] == sets[i])
- {
- duplicate[i] = j;
- break;
- }
- }
-
- tn = 0;
- for (i = 0; sets[i]; i++) {
- if (duplicate[i] >= 0)
- continue;
- off[i] = tn;
- tn += sets[i]->num;
- }
-
- printf ("#define LEAF0 (%d * sizeof (FcLangCharSet))\n", nsets);
- printf ("#define OFF0 (LEAF0 + %d * sizeof (FcCharLeaf))\n", tl);
- printf ("#define NUM0 (OFF0 + %d * sizeof (uintptr_t))\n", tn);
- printf ("#define SET(n) (n * sizeof (FcLangCharSet) + offsetof (FcLangCharSet, charset))\n");
- printf ("#define OFF(s,o) (OFF0 + o * sizeof (uintptr_t) - SET(s))\n");
- printf ("#define NUM(s,n) (NUM0 + n * sizeof (FcChar16) - SET(s))\n");
- printf ("#define LEAF(o,l) (LEAF0 + l * sizeof (FcCharLeaf) - (OFF0 + o * sizeof (intptr_t)))\n");
- printf ("#define fcLangCharSets (fcLangData.langCharSets)\n");
- printf ("#define fcLangCharSetIndices (fcLangData.langIndices)\n");
- printf ("#define fcLangCharSetIndicesInv (fcLangData.langIndicesInv)\n");
- printf ("\n");
-
- printf ("static const struct {\n"
- " FcLangCharSet langCharSets[%d];\n"
- " FcCharLeaf leaves[%d];\n"
- " uintptr_t leaf_offsets[%d];\n"
- " FcChar16 numbers[%d];\n"
- " FcChar%s langIndices[%d];\n"
- " FcChar%s langIndicesInv[%d];\n"
- "} fcLangData = {\n",
- nsets, tl, tn, tn,
- nsets < 256 ? "8 " : "16", nsets, nsets < 256 ? "8 " : "16", nsets);
-
- /*
- * Dump sets
- */
-
- printf ("{\n");
- for (i = 0; sets[i]; i++)
- {
- int j = duplicate[i];
-
- if (j < 0)
- j = i;
-
- printf (" { \"%s\", "
- " { FC_REF_CONSTANT, %d, OFF(%d,%d), NUM(%d,%d) } }, /* %d */\n",
- langs[i],
- sets[j]->num, i, off[j], i, off[j], i);
- }
- printf ("},\n");
-
- /*
- * Dump leaves
- */
- printf ("{\n");
- for (l = 0; l < tl; l++)
- {
- printf (" { { /* %d */", l);
- for (i = 0; i < 256/32; i++)
- {
- if (i % 4 == 0)
- printf ("\n ");
- printf (" 0x%08x,", leaves[l]->map[i]);
- }
- printf ("\n } },\n");
- }
- printf ("},\n");
-
- /*
- * Dump leaves
- */
- printf ("{\n");
- for (i = 0; sets[i]; i++)
- {
- int n;
-
- if (duplicate[i] >= 0)
- continue;
- printf (" /* %s */\n", names[i]);
- for (n = 0; n < sets[i]->num; n++)
- {
- if (n % 4 == 0)
- printf (" ");
- for (l = 0; l < tl; l++)
- if (leaves[l] == FcCharSetLeaf(sets[i], n))
- break;
- if (l == tl)
- fatal (names[i], 0, "can't find leaf");
- printf (" LEAF(%3d,%3d),", off[i], l);
- if (n % 4 == 3)
- printf ("\n");
- }
- if (n % 4 != 0)
- printf ("\n");
- }
- printf ("},\n");
-
-
- printf ("{\n");
- for (i = 0; sets[i]; i++)
- {
- int n;
-
- if (duplicate[i] >= 0)
- continue;
- printf (" /* %s */\n", names[i]);
- for (n = 0; n < sets[i]->num; n++)
- {
- if (n % 8 == 0)
- printf (" ");
- printf (" 0x%04x,", FcCharSetNumbers (sets[i])[n]);
- if (n % 8 == 7)
- printf ("\n");
- }
- if (n % 8 != 0)
- printf ("\n");
- }
- printf ("},\n");
-
- /* langIndices */
- printf ("{\n");
- for (i = 0; sets[i]; i++)
- {
- printf (" %d, /* %s */\n", entries[i].id, names[i]);
- }
- printf ("},\n");
-
- /* langIndicesInv */
- printf ("{\n");
- {
- static int entries_inv[MAX_LANG];
- for (i = 0; sets[i]; i++)
- entries_inv[entries[i].id] = i;
- for (i = 0; sets[i]; i++)
- printf (" %d, /* %s */\n", entries_inv[i], names[entries_inv[i]]);
- }
- printf ("}\n");
-
- printf ("};\n\n");
-
- printf ("#define NUM_LANG_CHAR_SET %d\n", i);
- num_lang_set_map = (i + 31) / 32;
- printf ("#define NUM_LANG_SET_MAP %d\n", num_lang_set_map);
- /*
- * Dump indices with country codes
- */
- if (ncountry)
- {
- int c;
- int ncountry_ent = 0;
- printf ("\n");
- printf ("static const FcChar32 fcLangCountrySets[][NUM_LANG_SET_MAP] = {\n");
- for (c = 0; c < ncountry; c++)
- {
- i = country[c];
- if (i >= 0)
- {
- int lang = strchr (langs[i], '-') - langs[i];
- int d, k;
-
- for (k = 0; k < num_lang_set_map; k++)
- map[k] = 0;
-
- BitSet (map, i);
- for (d = c + 1; d < ncountry; d++)
- {
- int j = country[d];
- if (j >= 0 && !strncmp (langs[j], langs[i], lang + 1))
- {
- BitSet(map, j);
- country[d] = -1;
- }
- }
- printf (" {");
- for (k = 0; k < num_lang_set_map; k++)
- printf (" 0x%08x,", map[k]);
- printf (" }, /* %*.*s */\n",
- lang, lang, langs[i]);
- ++ncountry_ent;
- }
- }
- printf ("};\n\n");
- printf ("#define NUM_COUNTRY_SET %d\n", ncountry_ent);
- }
-
-
- /*
- * Find ranges for each letter for faster searching
- */
- setRangeChar = 'a';
- memset(setRangeStart, '\0', sizeof (setRangeStart));
- memset(setRangeEnd, '\0', sizeof (setRangeEnd));
- for (i = 0; sets[i]; i++)
- {
- char c = names[i][0];
-
- while (setRangeChar <= c && c <= 'z')
- setRangeStart[setRangeChar++ - 'a'] = i;
- }
- for (setRangeChar = 'a'; setRangeChar < 'z'; setRangeChar++)
- setRangeEnd[setRangeChar - 'a'] = setRangeStart[setRangeChar+1-'a'] - 1;
- setRangeEnd[setRangeChar - 'a'] = i - 1;
-
- /*
- * Dump sets start/finish for the fastpath
- */
- printf ("\n");
- printf ("static const FcLangCharSetRange fcLangCharSetRanges[] = {\n");
- printf ("\n");
- for (setRangeChar = 'a'; setRangeChar <= 'z' ; setRangeChar++)
- {
- printf (" { %d, %d }, /* %c */\n",
- setRangeStart[setRangeChar - 'a'],
- setRangeEnd[setRangeChar - 'a'], setRangeChar);
- }
- printf ("};\n\n");
-
- while (fgets (line, sizeof (line), stdin))
- fputs (line, stdout);
-
- fflush (stdout);
- exit (ferror (stdout));
-}
+/* + * fontconfig/fc-lang/fc-lang.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fccharset.c" +#include "fcstr.c" +#include "fcserialize.c" + +/* + * fc-lang + * + * Read a set of language orthographies and build C declarations for + * charsets which can then be used to identify which languages are + * supported by a given font. Note that this uses some utilities + * from the fontconfig library, so the necessary file is simply + * included in this compilation. A couple of extra utility + * functions are also needed in slightly modified form + */ + +void +FcMemAlloc (int kind, int size) +{ +} + +void +FcMemFree (int kind, int size) +{ +} + +FcPrivate void +FcCacheObjectReference (void *object) +{ +} + +FcPrivate void +FcCacheObjectDereference (void *object) +{ +} + +int FcDebugVal; + +FcChar8 * +FcConfigHome (void) +{ + return (FcChar8 *) getenv ("HOME"); +} + +static void +fatal (const char *file, int lineno, const char *msg) +{ + if (lineno) + fprintf (stderr, "%s:%d: %s\n", file, lineno, msg); + else + fprintf (stderr, "%s: %s\n", file, msg); + exit (1); +} + +static char * +get_line (FILE *f, char *buf, int *lineno) +{ + char *hash; + char *line; + int end; + +next: + line = buf; + if (!fgets (line, 1024, f)) + return 0; + ++(*lineno); + hash = strchr (line, '#'); + if (hash) + *hash = '\0'; + + while (line[0] && isspace (line[0])) + line++; + end = strlen (line); + while (end > 0 && isspace (line[end-1])) + line[--end] = '\0'; + + if (line[0] == '\0' || line[0] == '\n' || line[0] == '\r') + goto next; + + return line; +} + +static char *dir = 0; + +static FILE * +scanopen (char *file) +{ + FILE *f; + + f = fopen (file, "r"); + if (!f && dir) + { + char path[1024]; + + strcpy (path, dir); + strcat (path, "/"); + strcat (path, file); + f = fopen (path, "r"); + } + return f; +} + +/* + * build a single charset from a source file + * + * The file format is quite simple, either + * a single hex value or a pair separated with a dash + * + * Comments begin with '#' + */ + +static FcCharSet * +scan (FILE *f, char *file, FcCharSetFreezer *freezer) +{ + FcCharSet *c = 0; + FcCharSet *n; + FcBool del; + int start, end, ucs4; + char buf[1024]; + char *line; + int lineno = 0; + + while ((line = get_line (f, buf, &lineno))) + { + if (!strncmp (line, "include", 7)) + { + FILE *included_f; + char *included_file; + included_file = strchr (line, ' '); + if (!included_file) + fatal (file, lineno, + "invalid syntax, expected: include filename"); + while (isspace(*included_file)) + included_file++; + included_f = scanopen (included_file); + if (!included_f) + fatal (included_file, 0, "can't open"); + n = scan (included_f, included_file, freezer); + fclose (included_f); + if (!c) + c = FcCharSetCreate (); + if (!FcCharSetMerge (c, n, NULL)) + fatal (file, lineno, "out of memory"); + FcCharSetDestroy (n); + continue; + } + del = FcFalse; + if (line[0] == '-') + { + del = FcTrue; + line++; + } + if (strchr (line, '-')) + { + if (sscanf (line, "%x-%x", &start, &end) != 2) + fatal (file, lineno, "parse error"); + } + else + { + if (sscanf (line, "%x", &start) != 1) + fatal (file, lineno, "parse error"); + end = start; + } + if (!c) + c = FcCharSetCreate (); + for (ucs4 = start; ucs4 <= end; ucs4++) + { + if (!((del ? FcCharSetDelChar : FcCharSetAddChar) (c, ucs4))) + fatal (file, lineno, "out of memory"); + } + } + n = (FcCharSet *) FcCharSetFreeze (freezer, c); + FcCharSetDestroy (c); + return n; +} + +/* + * Convert a file name into a name suitable for C declarations + */ +static char * +get_name (char *file) +{ + char *name; + char *dot; + + dot = strchr (file, '.'); + if (!dot) + dot = file + strlen(file); + name = malloc (dot - file + 1); + strncpy (name, file, dot - file); + name[dot-file] = '\0'; + return name; +} + +/* + * Convert a C name into a language name + */ +static char * +get_lang (char *name) +{ + char *lang = malloc (strlen (name) + 1); + char *l = lang; + char c; + + while ((c = *name++)) + { + if (isupper ((int) (unsigned char) c)) + c = tolower ((int) (unsigned char) c); + if (c == '_') + c = '-'; + if (c == ' ') + continue; + *l++ = c; + } + *l++ = '\0'; + return lang; +} + +typedef struct _Entry { + int id; + char *file; +} Entry; + +static int compare (const void *a, const void *b) +{ + const Entry *as = a, *bs = b; + return FcStrCmpIgnoreCase ((const FcChar8 *) as->file, (const FcChar8 *) bs->file); +} + +#define MAX_LANG 1024 +#define MAX_LANG_SET_MAP ((MAX_LANG + 31) / 32) + +#define BitSet(map, i) ((map)[(entries[i].id)>>5] |= ((FcChar32) 1 << ((entries[i].id) & 0x1f))) +#define BitGet(map, i) ((map)[(entries[i].id)>>5] >> ((entries[i].id) & 0x1f)) & 1) + +int +main (int argc, char **argv) +{ + static Entry entries[MAX_LANG]; + static FcCharSet *sets[MAX_LANG]; + static int duplicate[MAX_LANG]; + static int country[MAX_LANG]; + static char *names[MAX_LANG]; + static char *langs[MAX_LANG]; + static int off[MAX_LANG]; + FILE *f; + int ncountry = 0; + int i = 0; + int nsets = 0; + int argi; + FcCharLeaf **leaves; + int total_leaves = 0; + int l, sl, tl, tn; + static char line[1024]; + static FcChar32 map[MAX_LANG_SET_MAP]; + int num_lang_set_map; + int setRangeStart[26]; + int setRangeEnd[26]; + FcChar8 setRangeChar; + FcCharSetFreezer *freezer; + + freezer = FcCharSetFreezerCreate (); + if (!freezer) + fatal (argv[0], 0, "out of memory"); + argi = 1; + while (argv[argi]) + { + if (!strcmp (argv[argi], "-d")) + { + argi++; + dir = argv[argi++]; + continue; + } + if (i == MAX_LANG) + fatal (argv[0], 0, "Too many languages"); + entries[i].id = i; + entries[i].file = argv[argi++]; + i++; + } + entries[i].file = 0; + qsort (entries, i, sizeof (Entry), compare); + i = 0; + while (entries[i].file) + { + f = scanopen (entries[i].file); + if (!f) + fatal (entries[i].file, 0, strerror (errno)); + sets[i] = scan (f, entries[i].file, freezer); + names[i] = get_name (entries[i].file); + langs[i] = get_lang(names[i]); + if (strchr (langs[i], '-')) + country[ncountry++] = i; + + total_leaves += sets[i]->num; + i++; + fclose (f); + } + nsets = i; + sets[i] = 0; + leaves = malloc (total_leaves * sizeof (FcCharLeaf *)); + tl = 0; + /* + * Find unique leaves + */ + for (i = 0; sets[i]; i++) + { + for (sl = 0; sl < sets[i]->num; sl++) + { + for (l = 0; l < tl; l++) + if (leaves[l] == FcCharSetLeaf(sets[i], sl)) + break; + if (l == tl) + leaves[tl++] = FcCharSetLeaf(sets[i], sl); + } + } + + /* + * Scan the input until the marker is found + */ + + while (fgets (line, sizeof (line), stdin)) + { + if (!strncmp (line, "@@@", 3)) + break; + fputs (line, stdout); + } + + printf ("/* total size: %d unique leaves: %d */\n\n", + total_leaves, tl); + + /* + * Find duplicate charsets + */ + duplicate[0] = -1; + for (i = 1; sets[i]; i++) + { + int j; + + duplicate[i] = -1; + for (j = 0; j < i; j++) + if (sets[j] == sets[i]) + { + duplicate[i] = j; + break; + } + } + + tn = 0; + for (i = 0; sets[i]; i++) { + if (duplicate[i] >= 0) + continue; + off[i] = tn; + tn += sets[i]->num; + } + + printf ("#define LEAF0 (%d * sizeof (FcLangCharSet))\n", nsets); + printf ("#define OFF0 (LEAF0 + %d * sizeof (FcCharLeaf))\n", tl); + printf ("#define NUM0 (OFF0 + %d * sizeof (uintptr_t))\n", tn); + printf ("#define SET(n) (n * sizeof (FcLangCharSet) + offsetof (FcLangCharSet, charset))\n"); + printf ("#define OFF(s,o) (OFF0 + o * sizeof (uintptr_t) - SET(s))\n"); + printf ("#define NUM(s,n) (NUM0 + n * sizeof (FcChar16) - SET(s))\n"); + printf ("#define LEAF(o,l) (LEAF0 + l * sizeof (FcCharLeaf) - (OFF0 + o * sizeof (intptr_t)))\n"); + printf ("#define fcLangCharSets (fcLangData.langCharSets)\n"); + printf ("#define fcLangCharSetIndices (fcLangData.langIndices)\n"); + printf ("#define fcLangCharSetIndicesInv (fcLangData.langIndicesInv)\n"); + printf ("\n"); + + printf ("static const struct {\n" + " FcLangCharSet langCharSets[%d];\n" + " FcCharLeaf leaves[%d];\n" + " uintptr_t leaf_offsets[%d];\n" + " FcChar16 numbers[%d];\n" + " FcChar%s langIndices[%d];\n" + " FcChar%s langIndicesInv[%d];\n" + "} fcLangData = {\n", + nsets, tl, tn, tn, + nsets < 256 ? "8 " : "16", nsets, nsets < 256 ? "8 " : "16", nsets); + + /* + * Dump sets + */ + + printf ("{\n"); + for (i = 0; sets[i]; i++) + { + int j = duplicate[i]; + + if (j < 0) + j = i; + + printf (" { \"%s\", " + " { FC_REF_CONSTANT, %d, OFF(%d,%d), NUM(%d,%d) } }, /* %d */\n", + langs[i], + sets[j]->num, i, off[j], i, off[j], i); + } + printf ("},\n"); + + /* + * Dump leaves + */ + printf ("{\n"); + for (l = 0; l < tl; l++) + { + printf (" { { /* %d */", l); + for (i = 0; i < 256/32; i++) + { + if (i % 4 == 0) + printf ("\n "); + printf (" 0x%08x,", leaves[l]->map[i]); + } + printf ("\n } },\n"); + } + printf ("},\n"); + + /* + * Dump leaves + */ + printf ("{\n"); + for (i = 0; sets[i]; i++) + { + int n; + + if (duplicate[i] >= 0) + continue; + printf (" /* %s */\n", names[i]); + for (n = 0; n < sets[i]->num; n++) + { + if (n % 4 == 0) + printf (" "); + for (l = 0; l < tl; l++) + if (leaves[l] == FcCharSetLeaf(sets[i], n)) + break; + if (l == tl) + fatal (names[i], 0, "can't find leaf"); + printf (" LEAF(%3d,%3d),", off[i], l); + if (n % 4 == 3) + printf ("\n"); + } + if (n % 4 != 0) + printf ("\n"); + } + printf ("},\n"); + + + printf ("{\n"); + for (i = 0; sets[i]; i++) + { + int n; + + if (duplicate[i] >= 0) + continue; + printf (" /* %s */\n", names[i]); + for (n = 0; n < sets[i]->num; n++) + { + if (n % 8 == 0) + printf (" "); + printf (" 0x%04x,", FcCharSetNumbers (sets[i])[n]); + if (n % 8 == 7) + printf ("\n"); + } + if (n % 8 != 0) + printf ("\n"); + } + printf ("},\n"); + + /* langIndices */ + printf ("{\n"); + for (i = 0; sets[i]; i++) + { + printf (" %d, /* %s */\n", entries[i].id, names[i]); + } + printf ("},\n"); + + /* langIndicesInv */ + printf ("{\n"); + { + static int entries_inv[MAX_LANG]; + for (i = 0; sets[i]; i++) + entries_inv[entries[i].id] = i; + for (i = 0; sets[i]; i++) + printf (" %d, /* %s */\n", entries_inv[i], names[entries_inv[i]]); + } + printf ("}\n"); + + printf ("};\n\n"); + + printf ("#define NUM_LANG_CHAR_SET %d\n", i); + num_lang_set_map = (i + 31) / 32; + printf ("#define NUM_LANG_SET_MAP %d\n", num_lang_set_map); + /* + * Dump indices with country codes + */ + if (ncountry) + { + int c; + int ncountry_ent = 0; + printf ("\n"); + printf ("static const FcChar32 fcLangCountrySets[][NUM_LANG_SET_MAP] = {\n"); + for (c = 0; c < ncountry; c++) + { + i = country[c]; + if (i >= 0) + { + int lang = strchr (langs[i], '-') - langs[i]; + int d, k; + + for (k = 0; k < num_lang_set_map; k++) + map[k] = 0; + + BitSet (map, i); + for (d = c + 1; d < ncountry; d++) + { + int j = country[d]; + if (j >= 0 && !strncmp (langs[j], langs[i], lang + 1)) + { + BitSet(map, j); + country[d] = -1; + } + } + printf (" {"); + for (k = 0; k < num_lang_set_map; k++) + printf (" 0x%08x,", map[k]); + printf (" }, /* %*.*s */\n", + lang, lang, langs[i]); + ++ncountry_ent; + } + } + printf ("};\n\n"); + printf ("#define NUM_COUNTRY_SET %d\n", ncountry_ent); + } + + + /* + * Find ranges for each letter for faster searching + */ + setRangeChar = 'a'; + memset(setRangeStart, '\0', sizeof (setRangeStart)); + memset(setRangeEnd, '\0', sizeof (setRangeEnd)); + for (i = 0; sets[i]; i++) + { + char c = names[i][0]; + + while (setRangeChar <= c && c <= 'z') + setRangeStart[setRangeChar++ - 'a'] = i; + } + for (setRangeChar = 'a'; setRangeChar < 'z'; setRangeChar++) + setRangeEnd[setRangeChar - 'a'] = setRangeStart[setRangeChar+1-'a'] - 1; + setRangeEnd[setRangeChar - 'a'] = i - 1; + + /* + * Dump sets start/finish for the fastpath + */ + printf ("\n"); + printf ("static const FcLangCharSetRange fcLangCharSetRanges[] = {\n"); + printf ("\n"); + for (setRangeChar = 'a'; setRangeChar <= 'z' ; setRangeChar++) + { + printf (" { %d, %d }, /* %c */\n", + setRangeStart[setRangeChar - 'a'], + setRangeEnd[setRangeChar - 'a'], setRangeChar); + } + printf ("};\n\n"); + + while (fgets (line, sizeof (line), stdin)) + fputs (line, stdout); + + fflush (stdout); + exit (ferror (stdout)); +} diff --git a/fontconfig/fc-lang/fc-lang.man b/fontconfig/fc-lang/fc-lang.man index 2e8774935..f520c5115 100644 --- a/fontconfig/fc-lang/fc-lang.man +++ b/fontconfig/fc-lang/fc-lang.man @@ -1,39 +1,39 @@ -.\"
-.\" Copyright © 2002 Keith Packard
-.\"
-.\" Permission to use, copy, modify, distribute, and sell this software and its
-.\" documentation for any purpose is hereby granted without fee, provided that
-.\" the above copyright notice appear in all copies and that both that
-.\" copyright notice and this permission notice appear in supporting
-.\" documentation, and that the name of the author(s) not be used in
-.\" advertising or publicity pertaining to distribution of the software without
-.\" specific, written prior permission. The authors make no
-.\" representations about the suitability of this software for any purpose. It
-.\" is provided "as is" without express or implied warranty.
-.\"
-.\" THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-.\" EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-.\" PERFORMANCE OF THIS SOFTWARE.
-.\"
-.\"
-.\" fontconfig/fc-lang/fc-lang.man
-.\"
-.TH FC-LANG 1 __vendorversion__
-.SH NAME
-fc-lang, fclang.h \- create an database of language orthographies
-.SH SYNOPSIS
-.B "fc-lang"
-.RI [ language-coverage
-\|.\|.\|. ]
-.SH DESCRIPTION
-.I Fc-lang
-builds the fclang.h file used in the fontconfig library to automatically
-determine language coverage for fonts which don't contain this information.
-.SH FILES
-.TP 15
-.B fclang.tmpl.h
-The template file in which the tables are inserted
+.\" +.\" Copyright © 2002 Keith Packard +.\" +.\" Permission to use, copy, modify, distribute, and sell this software and its +.\" documentation for any purpose is hereby granted without fee, provided that +.\" the above copyright notice appear in all copies and that both that +.\" copyright notice and this permission notice appear in supporting +.\" documentation, and that the name of the author(s) not be used in +.\" advertising or publicity pertaining to distribution of the software without +.\" specific, written prior permission. The authors make no +.\" representations about the suitability of this software for any purpose. It +.\" is provided "as is" without express or implied warranty. +.\" +.\" THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +.\" EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +.\" PERFORMANCE OF THIS SOFTWARE. +.\" +.\" +.\" fontconfig/fc-lang/fc-lang.man +.\" +.TH FC-LANG 1 __vendorversion__ +.SH NAME +fc-lang, fclang.h \- create an database of language orthographies +.SH SYNOPSIS +.B "fc-lang" +.RI [ language-coverage +\|.\|.\|. ] +.SH DESCRIPTION +.I Fc-lang +builds the fclang.h file used in the fontconfig library to automatically +determine language coverage for fonts which don't contain this information. +.SH FILES +.TP 15 +.B fclang.tmpl.h +The template file in which the tables are inserted diff --git a/fontconfig/fc-lang/fclang.tmpl.h b/fontconfig/fc-lang/fclang.tmpl.h index 946537bd7..605614870 100644 --- a/fontconfig/fc-lang/fclang.tmpl.h +++ b/fontconfig/fc-lang/fclang.tmpl.h @@ -1,25 +1,25 @@ -/*
- * fontconfig/fc-lang/fclang.tmpl.h
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-@@@
+/* + * fontconfig/fc-lang/fclang.tmpl.h + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@@@ diff --git a/fontconfig/fc-lang/ff.orth b/fontconfig/fc-lang/ff.orth index 05a12ffa0..bed81aeed 100644 --- a/fontconfig/fc-lang/ff.orth +++ b/fontconfig/fc-lang/ff.orth @@ -1,38 +1,38 @@ -#
-# fontconfig/fc-lang/ff.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Fulah (Fula) (ff)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0181
-0253
-018a
-0257
-014a
-014b
-019d
-0272
-01b3-01b4
+# +# fontconfig/fc-lang/ff.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Fulah (Fula) (ff) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0181 +0253 +018a +0257 +014a +014b +019d +0272 +01b3-01b4 diff --git a/fontconfig/fc-lang/fi.orth b/fontconfig/fc-lang/fi.orth index eb3cd02e3..c0e19d99e 100644 --- a/fontconfig/fc-lang/fi.orth +++ b/fontconfig/fc-lang/fi.orth @@ -1,51 +1,51 @@ -#
-# fontconfig/fc-lang/fi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Finnish (FI)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK *
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE
-#00C6 # LATIN CAPITAL LETTER AE (ash) * evertype.com
-#00D5 # LATIN CAPITAL LETTER O WITH TILDE evertype.com
-00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00E5 # LATIN SMALL LETTER A WITH RING ABOVE
-#00E6 # LATIN SMALL LETTER AE (ash) * evertype.com
-#00F5 # LATIN SMALL LETTER O WITH TILDE evertype.com
-00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
-0160 # LATIN CAPITAL LETTER S WITH CARON
-0161 # LATIN SMALL LETTER S WITH CARON
-017D # LATIN CAPITAL LETTER Z WITH CARON
-017E # LATIN SMALL LETTER Z WITH CARON
-#2019 # single quote
-#201d # double quote
-#203a # angle quote
+# +# fontconfig/fc-lang/fi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Finnish (FI) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +#00C6 # LATIN CAPITAL LETTER AE (ash) * evertype.com +#00D5 # LATIN CAPITAL LETTER O WITH TILDE evertype.com +00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00E5 # LATIN SMALL LETTER A WITH RING ABOVE +#00E6 # LATIN SMALL LETTER AE (ash) * evertype.com +#00F5 # LATIN SMALL LETTER O WITH TILDE evertype.com +00F6 # LATIN SMALL LETTER O WITH DIAERESIS +#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com +0160 # LATIN CAPITAL LETTER S WITH CARON +0161 # LATIN SMALL LETTER S WITH CARON +017D # LATIN CAPITAL LETTER Z WITH CARON +017E # LATIN SMALL LETTER Z WITH CARON +#2019 # single quote +#201d # double quote +#203a # angle quote diff --git a/fontconfig/fc-lang/fj.orth b/fontconfig/fc-lang/fj.orth index a0e40d4ba..07f2f518d 100644 --- a/fontconfig/fc-lang/fj.orth +++ b/fontconfig/fc-lang/fj.orth @@ -1,34 +1,34 @@ -#
-# fontconfig/fc-lang/fj.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Fijian (KW)
-#
-# Orthography guessed from http://www.deeptrans.com/deeptrans/german.html
-#
-# There may be diacritical marks used, but I couldn't find any information
-# about them, nor any Fijian text using them.
-#
-# Fijian doesn't use h, x, z and uses f, j and p in loan words
-#
-0041-005a
-0061-007a
+# +# fontconfig/fc-lang/fj.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Fijian (KW) +# +# Orthography guessed from http://www.deeptrans.com/deeptrans/german.html +# +# There may be diacritical marks used, but I couldn't find any information +# about them, nor any Fijian text using them. +# +# Fijian doesn't use h, x, z and uses f, j and p in loan words +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/fo.orth b/fontconfig/fc-lang/fo.orth index 6bf70af76..d4b055b36 100644 --- a/fontconfig/fc-lang/fo.orth +++ b/fontconfig/fc-lang/fo.orth @@ -1,59 +1,59 @@ -#
-# fontconfig/fc-lang/fo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Faroese (FO)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
-#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com
-00C6 # LATIN CAPITAL LETTER AE (ash) *
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-00D0 # LATIN CAPITAL LETTER ETH (Icelandic)
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com
-00D8 # LATIN CAPITAL LETTER O WITH STROKE
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
-00DD # LATIN CAPITAL LETTER Y WITH ACUTE
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
-#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com
-00E6 # LATIN SMALL LETTER AE (ash) *
-00ED # LATIN SMALL LETTER I WITH ACUTE
-00F0 # LATIN SMALL LETTER ETH (Icelandic)
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com
-00F8 # LATIN SMALL LETTER O WITH STROKE
-00FA # LATIN SMALL LETTER U WITH ACUTE
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
-00FD # LATIN SMALL LETTER Y WITH ACUTE
-#2018 # single quote
-#201a # single quote
-#201c # double quote
-#201e # double quote
+# +# fontconfig/fc-lang/fo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Faroese (FO) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com +#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com +00C6 # LATIN CAPITAL LETTER AE (ash) * +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00D0 # LATIN CAPITAL LETTER ETH (Icelandic) +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com +00D8 # LATIN CAPITAL LETTER O WITH STROKE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com +00DD # LATIN CAPITAL LETTER Y WITH ACUTE +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com +#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com +00E6 # LATIN SMALL LETTER AE (ash) * +00ED # LATIN SMALL LETTER I WITH ACUTE +00F0 # LATIN SMALL LETTER ETH (Icelandic) +00F3 # LATIN SMALL LETTER O WITH ACUTE +#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com +00F8 # LATIN SMALL LETTER O WITH STROKE +00FA # LATIN SMALL LETTER U WITH ACUTE +#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com +00FD # LATIN SMALL LETTER Y WITH ACUTE +#2018 # single quote +#201a # single quote +#201c # double quote +#201e # double quote diff --git a/fontconfig/fc-lang/fr.orth b/fontconfig/fc-lang/fr.orth index e5eb4495f..6e88ff927 100644 --- a/fontconfig/fc-lang/fr.orth +++ b/fontconfig/fc-lang/fr.orth @@ -1,58 +1,58 @@ -#
-# fontconfig/fc-lang/fr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# French (FR)
-0041-005a
-0061-007a
-00C0 # LATIN CAPITAL LETTER A WITH GRAVE
-00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00E0 # LATIN SMALL LETTER A WITH GRAVE
-00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX
-00C7 # LATIN CAPITAL LETTER C WITH CEDILLA
-00E7 # LATIN SMALL LETTER C WITH CEDILLA
-00C8 # LATIN CAPITAL LETTER E WITH GRAVE
-00E8 # LATIN SMALL LETTER E WITH GRAVE
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX
-00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX
-00CB # LATIN CAPITAL LETTER E WITH DIAERESIS
-00EB # LATIN SMALL LETTER E WITH DIAERESIS
-00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX
-00CF # LATIN CAPITAL LETTER I WITH DIAERESIS
-00EF # LATIN SMALL LETTER I WITH DIAERESIS
-00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX
-00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX
-0152 # LATIN CAPITAL LIGATURE OE
-0153 # LATIN SMALL LIGATURE OE
-00D9 # LATIN CAPITAL LETTER U WITH GRAVE
-00F9 # LATIN SMALL LETTER U WITH GRAVE
-00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
-0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS
-00FF # LATIN SMALL LETTER Y WITH DIAERESIS
-00C6 # LATIN CAPITAL LETTER AE (ash) *
-00E6 # LATIN SMALL LETTER AE (ash) *
+# +# fontconfig/fc-lang/fr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# French (FR) +0041-005a +0061-007a +00C0 # LATIN CAPITAL LETTER A WITH GRAVE +00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00E0 # LATIN SMALL LETTER A WITH GRAVE +00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +00E7 # LATIN SMALL LETTER C WITH CEDILLA +00C8 # LATIN CAPITAL LETTER E WITH GRAVE +00E8 # LATIN SMALL LETTER E WITH GRAVE +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00E9 # LATIN SMALL LETTER E WITH ACUTE +00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +00EB # LATIN SMALL LETTER E WITH DIAERESIS +00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +00EF # LATIN SMALL LETTER I WITH DIAERESIS +00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0152 # LATIN CAPITAL LIGATURE OE +0153 # LATIN SMALL LIGATURE OE +00D9 # LATIN CAPITAL LETTER U WITH GRAVE +00F9 # LATIN SMALL LETTER U WITH GRAVE +00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00FC # LATIN SMALL LETTER U WITH DIAERESIS +0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +00FF # LATIN SMALL LETTER Y WITH DIAERESIS +00C6 # LATIN CAPITAL LETTER AE (ash) * +00E6 # LATIN SMALL LETTER AE (ash) * diff --git a/fontconfig/fc-lang/fur.orth b/fontconfig/fc-lang/fur.orth index fa3e76a83..bf47ccd44 100644 --- a/fontconfig/fc-lang/fur.orth +++ b/fontconfig/fc-lang/fur.orth @@ -1,39 +1,39 @@ -#
-# fontconfig/fc-lang/fur.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Friulian (FUR)
-#
-# Orthography from http://www.evertype.com/alphabets/friulian.pdf
-#
-0041-005a
-0061-007a
-00c0-00c2
-00c8
-00cc
-00d2
-00d9
-00e0-00e2
-00e8
-00ec
-00f2
-00f9
+# +# fontconfig/fc-lang/fur.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Friulian (FUR) +# +# Orthography from http://www.evertype.com/alphabets/friulian.pdf +# +0041-005a +0061-007a +00c0-00c2 +00c8 +00cc +00d2 +00d9 +00e0-00e2 +00e8 +00ec +00f2 +00f9 diff --git a/fontconfig/fc-lang/fy.orth b/fontconfig/fc-lang/fy.orth index a853f4111..b75112e62 100644 --- a/fontconfig/fc-lang/fy.orth +++ b/fontconfig/fc-lang/fy.orth @@ -1,61 +1,61 @@ -#
-# fontconfig/fc-lang/fy.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Frisian (FY)
-#
-# West Frisian orthography from
-# http://www.evertype.com/alphabets/west-frisian.pdf
-#
-#
-# Checked with orthography from eki.ee/letter which include
-# a few others (commented out here).
-#
-# Added in ß from German orthography
-#
-0041-005a
-0061-007a
-00c2
-00c4
-00c9
-00ca
-00cb
-#00ce # eki.ee
-00cf
-00d4
-00d6
-00da
-00db
-00dc
-00df
-00e2
-00e4
-00e9
-00ea
-00eb
-#00ee # eki.ee
-00ef
-00f4
-00f6
-00fa
-00fb
-00fc
+# +# fontconfig/fc-lang/fy.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Frisian (FY) +# +# West Frisian orthography from +# http://www.evertype.com/alphabets/west-frisian.pdf +# +# +# Checked with orthography from eki.ee/letter which include +# a few others (commented out here). +# +# Added in ß from German orthography +# +0041-005a +0061-007a +00c2 +00c4 +00c9 +00ca +00cb +#00ce # eki.ee +00cf +00d4 +00d6 +00da +00db +00dc +00df +00e2 +00e4 +00e9 +00ea +00eb +#00ee # eki.ee +00ef +00f4 +00f6 +00fa +00fb +00fc diff --git a/fontconfig/fc-lang/ga.orth b/fontconfig/fc-lang/ga.orth index 4c3798c49..57fa7f5d3 100644 --- a/fontconfig/fc-lang/ga.orth +++ b/fontconfig/fc-lang/ga.orth @@ -1,84 +1,84 @@ -#
-# fontconfig/fc-lang/ga.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Irish (GA)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-# The orthography from evertype.com includes the lenited consonants
-# as indicated with seimhiu (dot above). I've included those here
-# even though they're not present in the orthography listed from eki.ee;
-# eki.ee mentions that the seimhiu form is still written but is
-# often written by a following h instead.
-#
-0041-005a
-0061-007a
-#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com
-00C1 # LATIN CAPITAL LETTER A WITH ACUTE
-#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA evertype.com
-#00C8 # LATIN CAPITAL LETTER E WITH GRAVE evertype.com
-00C9 # LATIN CAPITAL LETTER E WITH ACUTE
-#00CC # LATIN CAPITAL LETTER I WITH GRAVE evertype.com
-00CD # LATIN CAPITAL LETTER I WITH ACUTE
-#00D2 # LATIN CAPITAL LETTER O WITH GRAVE evertype.com
-00D3 # LATIN CAPITAL LETTER O WITH ACUTE
-#00D9 # LATIN CAPITAL LETTER U WITH GRAVE evertype.com
-00DA # LATIN CAPITAL LETTER U WITH ACUTE
-#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com
-00E1 # LATIN SMALL LETTER A WITH ACUTE
-#00E7 # LATIN SMALL LETTER C WITH CEDILLA evertype.com
-#00E8 # LATIN SMALL LETTER E WITH GRAVE evertype.com
-00E9 # LATIN SMALL LETTER E WITH ACUTE
-#00EC # LATIN SMALL LETTER I WITH GRAVE
-00ED # LATIN SMALL LETTER I WITH ACUTE
-#00F2 # LATIN SMALL LETTER O WITH GRAVE evertype.com
-00F3 # LATIN SMALL LETTER O WITH ACUTE
-#00F9 # LATIN SMALL LETTER U WITH GRAVE evertype.com
-00FA # LATIN SMALL LETTER U WITH ACUTE
-010A # LATIN CAPITAL LETTER C WITH DOT ABOVE
-010B # LATIN SMALL LETTER C WITH DOT ABOVE
-0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE
-0121 # LATIN SMALL LETTER G WITH DOT ABOVE
-#017F # LATIN SMALL LETTER LONG S evertype.com
-#027C # LATIN SMALL LETTER R WITH LONG LEG evertype.com
-1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE
-1E03 # LATIN SMALL LETTER B WITH DOT ABOVE
-1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE
-1E0B # LATIN SMALL LETTER D WITH DOT ABOVE
-1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE
-1E1F # LATIN SMALL LETTER F WITH DOT ABOVE
-1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE
-1E41 # LATIN SMALL LETTER M WITH DOT ABOVE
-1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE
-1E57 # LATIN SMALL LETTER P WITH DOT ABOVE
-1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE
-1E61 # LATIN SMALL LETTER S WITH DOT ABOVE
-1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE
-1E6B # LATIN SMALL LETTER T WITH DOT ABOVE
-#1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE evertype.com
-#1680-169c # Ogham
-#2018-2019 # single quotes
-#201c-201d # double quotes
-#204a # tironian sign et
+# +# fontconfig/fc-lang/ga.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Irish (GA) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +# The orthography from evertype.com includes the lenited consonants +# as indicated with seimhiu (dot above). I've included those here +# even though they're not present in the orthography listed from eki.ee; +# eki.ee mentions that the seimhiu form is still written but is +# often written by a following h instead. +# +0041-005a +0061-007a +#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA evertype.com +#00C8 # LATIN CAPITAL LETTER E WITH GRAVE evertype.com +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +#00CC # LATIN CAPITAL LETTER I WITH GRAVE evertype.com +00CD # LATIN CAPITAL LETTER I WITH ACUTE +#00D2 # LATIN CAPITAL LETTER O WITH GRAVE evertype.com +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +#00D9 # LATIN CAPITAL LETTER U WITH GRAVE evertype.com +00DA # LATIN CAPITAL LETTER U WITH ACUTE +#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E7 # LATIN SMALL LETTER C WITH CEDILLA evertype.com +#00E8 # LATIN SMALL LETTER E WITH GRAVE evertype.com +00E9 # LATIN SMALL LETTER E WITH ACUTE +#00EC # LATIN SMALL LETTER I WITH GRAVE +00ED # LATIN SMALL LETTER I WITH ACUTE +#00F2 # LATIN SMALL LETTER O WITH GRAVE evertype.com +00F3 # LATIN SMALL LETTER O WITH ACUTE +#00F9 # LATIN SMALL LETTER U WITH GRAVE evertype.com +00FA # LATIN SMALL LETTER U WITH ACUTE +010A # LATIN CAPITAL LETTER C WITH DOT ABOVE +010B # LATIN SMALL LETTER C WITH DOT ABOVE +0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE +0121 # LATIN SMALL LETTER G WITH DOT ABOVE +#017F # LATIN SMALL LETTER LONG S evertype.com +#027C # LATIN SMALL LETTER R WITH LONG LEG evertype.com +1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E03 # LATIN SMALL LETTER B WITH DOT ABOVE +1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0B # LATIN SMALL LETTER D WITH DOT ABOVE +1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE +1E1F # LATIN SMALL LETTER F WITH DOT ABOVE +1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E41 # LATIN SMALL LETTER M WITH DOT ABOVE +1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE +1E57 # LATIN SMALL LETTER P WITH DOT ABOVE +1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE +1E61 # LATIN SMALL LETTER S WITH DOT ABOVE +1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6B # LATIN SMALL LETTER T WITH DOT ABOVE +#1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE evertype.com +#1680-169c # Ogham +#2018-2019 # single quotes +#201c-201d # double quotes +#204a # tironian sign et diff --git a/fontconfig/fc-lang/gd.orth b/fontconfig/fc-lang/gd.orth index e5b90fc56..035a3df04 100644 --- a/fontconfig/fc-lang/gd.orth +++ b/fontconfig/fc-lang/gd.orth @@ -1,51 +1,51 @@ -#
-# fontconfig/fc-lang/gd.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Scots Gaelic (GD)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00c1
-00c7
-00c8
-00c9
-00cc
-00d2
-00d3
-00d9
-00e0
-00e1
-00e7
-00e8
-00e9
-00ec
-00f2
-00f3
-00f9
-#2018-2019 # single quotes
-#201c-201d # double quotes
+# +# fontconfig/fc-lang/gd.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Scots Gaelic (GD) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00c1 +00c7 +00c8 +00c9 +00cc +00d2 +00d3 +00d9 +00e0 +00e1 +00e7 +00e8 +00e9 +00ec +00f2 +00f3 +00f9 +#2018-2019 # single quotes +#201c-201d # double quotes diff --git a/fontconfig/fc-lang/gez.orth b/fontconfig/fc-lang/gez.orth index 88cadfecb..70c369485 100644 --- a/fontconfig/fc-lang/gez.orth +++ b/fontconfig/fc-lang/gez.orth @@ -1,60 +1,60 @@ -#
-# fontconfig/fc-lang/gez.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Ethiopic (Geez) (eth)
-#
-# Taken from Unicode coverage (1200-137f)
-#
-# Sylables
-1200-1206 # he-ho
-1208-1216 # le-Ho, skip HWa
-1218-1226 # me-`so, skip `sWa
-1228-1230 # re-sWa
-1238-1246 # re-qo
-1248 # qWe
-124a-124d # qWi-qW
-1260-1267 # be-bWa
-1270-1277 # te-to
-1280-1286 # `he-`ho
-1288 # hWe
-128a-128d # hWi-hW
-1290-1297 # ne-nWa
-12a0-12a7 # a-o, skip ea
-12a8-12ae # ke-ko
-12b0 # kWe
-12b2-12b5 # kWi-kW
-12c8-12ce # we-wo
-12d0-12d6 # `e-`o
-12d8-12df # ze-zWa
-12e8-12ee # ye-yo
-12f0-12f7 # de-dWa
-1308-130e # ge-go
-1310 # gWe
-1312-1315 # gWi-gW
-1320-1328 # Te-TWa
-1330-1346 # Pe-`So
-1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
-#1361-1368 # punctuation
-#1369-1371 # digits
-#1372-137c # numbers
-#
+# +# fontconfig/fc-lang/gez.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Ethiopic (Geez) (eth) +# +# Taken from Unicode coverage (1200-137f) +# +# Sylables +1200-1206 # he-ho +1208-1216 # le-Ho, skip HWa +1218-1226 # me-`so, skip `sWa +1228-1230 # re-sWa +1238-1246 # re-qo +1248 # qWe +124a-124d # qWi-qW +1260-1267 # be-bWa +1270-1277 # te-to +1280-1286 # `he-`ho +1288 # hWe +128a-128d # hWi-hW +1290-1297 # ne-nWa +12a0-12a7 # a-o, skip ea +12a8-12ae # ke-ko +12b0 # kWe +12b2-12b5 # kWi-kW +12c8-12ce # we-wo +12d0-12d6 # `e-`o +12d8-12df # ze-zWa +12e8-12ee # ye-yo +12f0-12f7 # de-dWa +1308-130e # ge-go +1310 # gWe +1312-1315 # gWi-gW +1320-1328 # Te-TWa +1330-1346 # Pe-`So +1348-1356 # fe-po, skip pWa, rYa, mYa, fYa +#1361-1368 # punctuation +#1369-1371 # digits +#1372-137c # numbers +# diff --git a/fontconfig/fc-lang/gl.orth b/fontconfig/fc-lang/gl.orth index 364f0f2c2..5617088a3 100644 --- a/fontconfig/fc-lang/gl.orth +++ b/fontconfig/fc-lang/gl.orth @@ -1,50 +1,50 @@ -#
-# fontconfig/fc-lang/gl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Galician (GL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00a1
-#00ab
-#00bb
-#00bf
-00c1
-00c9
-00cd
-00d1
-00d3
-00da
-00dc
-00e1
-00e9
-00ed
-00f1
-00f3
-00fa
-00fc
-#2019-201a # single qutoes
+# +# fontconfig/fc-lang/gl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Galician (GL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00a1 +#00ab +#00bb +#00bf +00c1 +00c9 +00cd +00d1 +00d3 +00da +00dc +00e1 +00e9 +00ed +00f1 +00f3 +00fa +00fc +#2019-201a # single qutoes diff --git a/fontconfig/fc-lang/gn.orth b/fontconfig/fc-lang/gn.orth index d9fca71c4..644ab9330 100644 --- a/fontconfig/fc-lang/gn.orth +++ b/fontconfig/fc-lang/gn.orth @@ -1,48 +1,48 @@ -#
-# fontconfig/fc-lang/gn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Guaraní (GN)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-00e3
-00c9
-00e9
-1ebd
-#e005 # LATIN SMALL LETTER G WITH TILDE (no UCS)
-00cd
-00ed
-0129
-00d1
-00f1
-00d3
-00f3
-00f5
-00da
-00fa
-0169
-1ef9
+# +# fontconfig/fc-lang/gn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Guaraní (GN) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +00e3 +00c9 +00e9 +1ebd +#e005 # LATIN SMALL LETTER G WITH TILDE (no UCS) +00cd +00ed +0129 +00d1 +00f1 +00d3 +00f3 +00f5 +00da +00fa +0169 +1ef9 diff --git a/fontconfig/fc-lang/gu.orth b/fontconfig/fc-lang/gu.orth index 48d6d8af5..5e556ce12 100644 --- a/fontconfig/fc-lang/gu.orth +++ b/fontconfig/fc-lang/gu.orth @@ -1,41 +1,41 @@ -#
-# fontconfig/fc-lang/gu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Gujarati (gu)
-#
-# Taken from the Unicode coverage of this language
-#
-0a81-0a83
-0a85-0a8b
-0a8d
-0a8f-0a91
-0a93-0aa8
-0aaa-0ab0
-0ab2-0ab3
-0ab5-0ab9
-0abc-0ac5
-0ac7-0ac9
-0acb-0acd
-0ad0
-0ae0
-#0ae6-0aef # Digits
+# +# fontconfig/fc-lang/gu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Gujarati (gu) +# +# Taken from the Unicode coverage of this language +# +0a81-0a83 +0a85-0a8b +0a8d +0a8f-0a91 +0a93-0aa8 +0aaa-0ab0 +0ab2-0ab3 +0ab5-0ab9 +0abc-0ac5 +0ac7-0ac9 +0acb-0acd +0ad0 +0ae0 +#0ae6-0aef # Digits diff --git a/fontconfig/fc-lang/gv.orth b/fontconfig/fc-lang/gv.orth index f089768c4..3d44e80a8 100644 --- a/fontconfig/fc-lang/gv.orth +++ b/fontconfig/fc-lang/gv.orth @@ -1,31 +1,31 @@ -#
-# fontconfig/fc-lang/gv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Manx Gaelic (GV)
-#
-# Orthography from http://www.evertype.com/alphabets/manx-gaelic.pdf
-#
-0041-005a
-0061-007a
-00c7
-00e7
+# +# fontconfig/fc-lang/gv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Manx Gaelic (GV) +# +# Orthography from http://www.evertype.com/alphabets/manx-gaelic.pdf +# +0041-005a +0061-007a +00c7 +00e7 diff --git a/fontconfig/fc-lang/ha.orth b/fontconfig/fc-lang/ha.orth index 33d95c36c..3a3d28670 100644 --- a/fontconfig/fc-lang/ha.orth +++ b/fontconfig/fc-lang/ha.orth @@ -1,36 +1,36 @@ -#
-# fontconfig/fc-lang/ha.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hausa (HA)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0181
-0253
-018a
-0257
-0198-0199
-01b3 # used in Niger
-01b4 # used in Niger
+# +# fontconfig/fc-lang/ha.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hausa (HA) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0181 +0253 +018a +0257 +0198-0199 +01b3 # used in Niger +01b4 # used in Niger diff --git a/fontconfig/fc-lang/haw.orth b/fontconfig/fc-lang/haw.orth index e48192bdf..cdd24477a 100644 --- a/fontconfig/fc-lang/haw.orth +++ b/fontconfig/fc-lang/haw.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/haw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hawaiian (HAW)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0100-0101
-0112-0113
-012a-012b
-014c-014d
-016a-016b
-02bb
+# +# fontconfig/fc-lang/haw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hawaiian (HAW) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0100-0101 +0112-0113 +012a-012b +014c-014d +016a-016b +02bb diff --git a/fontconfig/fc-lang/he.orth b/fontconfig/fc-lang/he.orth index ceada0b65..756c191b2 100644 --- a/fontconfig/fc-lang/he.orth +++ b/fontconfig/fc-lang/he.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/he.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hebrew (HE)
-05d0-05ea
+# +# fontconfig/fc-lang/he.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hebrew (HE) +05d0-05ea diff --git a/fontconfig/fc-lang/hi.orth b/fontconfig/fc-lang/hi.orth index 1e10f4658..3d18da5b8 100644 --- a/fontconfig/fc-lang/hi.orth +++ b/fontconfig/fc-lang/hi.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/hi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hindi (Devanagari script) (HI)
-#
-# From Unicode coverage for Devanagari
-#
-0905-0914 # Independent vowels
-0915-0939 # Consonants
-093f-094c # Dependent vowel signs
-094d # virama
-#0958-095f # Additional consonants
-#0960-0965 # Generic additions
-#0966-096f # Digits
-#0970 # Abbreviation sign
+# +# fontconfig/fc-lang/hi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hindi (Devanagari script) (HI) +# +# From Unicode coverage for Devanagari +# +0905-0914 # Independent vowels +0915-0939 # Consonants +093f-094c # Dependent vowel signs +094d # virama +#0958-095f # Additional consonants +#0960-0965 # Generic additions +#0966-096f # Digits +#0970 # Abbreviation sign diff --git a/fontconfig/fc-lang/ho.orth b/fontconfig/fc-lang/ho.orth index c2ac24615..ade4e8afb 100644 --- a/fontconfig/fc-lang/ho.orth +++ b/fontconfig/fc-lang/ho.orth @@ -1,33 +1,33 @@ -#
-# fontconfig/fc-lang/ho.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hiri Motu (HO)
-#
-# I found one sample of Hiri Motu text, a translation of the first part of
-# Genesis at
-# http://rosettaproject.org:8080/live/search/showpages?ethnocode=POM&doctype=gen&version=1&scale=six
-#
-# It appears to use only ASCII glyphs, so we'll go with that for now
-#
-0041-005a
-0061-007a
+# +# fontconfig/fc-lang/ho.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hiri Motu (HO) +# +# I found one sample of Hiri Motu text, a translation of the first part of +# Genesis at +# http://rosettaproject.org:8080/live/search/showpages?ethnocode=POM&doctype=gen&version=1&scale=six +# +# It appears to use only ASCII glyphs, so we'll go with that for now +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/hr.orth b/fontconfig/fc-lang/hr.orth index 3fed0e4a3..008ff7921 100644 --- a/fontconfig/fc-lang/hr.orth +++ b/fontconfig/fc-lang/hr.orth @@ -1,49 +1,49 @@ -#
-# fontconfig/fc-lang/hr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Croatian (HR)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00c0 # evertype.com
-#00c8 # evertype.com
-#00cc # evertype.com
-#00d2 # evertype.com
-#00d9 # evertype.com
-#00e0 # evertype.com
-#00e8 # evertype.com
-#00ec # evertype.com
-#00f2 # evertype.com
-#00f9 # evertype.com
-0106-0107
-010c-010d
-0110-0111
-0160-0161
-017d-017e
-#01c4-01cc # evertype.com
-#01f1-01f5 # evertype.com
-#0200-0217 # evertype.com
+# +# fontconfig/fc-lang/hr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Croatian (HR) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00c0 # evertype.com +#00c8 # evertype.com +#00cc # evertype.com +#00d2 # evertype.com +#00d9 # evertype.com +#00e0 # evertype.com +#00e8 # evertype.com +#00ec # evertype.com +#00f2 # evertype.com +#00f9 # evertype.com +0106-0107 +010c-010d +0110-0111 +0160-0161 +017d-017e +#01c4-01cc # evertype.com +#01f1-01f5 # evertype.com +#0200-0217 # evertype.com diff --git a/fontconfig/fc-lang/hu.orth b/fontconfig/fc-lang/hu.orth index 8ef0d9a1b..3e597fd4d 100644 --- a/fontconfig/fc-lang/hu.orth +++ b/fontconfig/fc-lang/hu.orth @@ -1,49 +1,49 @@ -#
-# fontconfig/fc-lang/hu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Hungarian (HU)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com
-00c1
-00c9
-00cd
-00d3
-00d6
-00da
-00dc
-#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com
-00e1
-00e9
-00ed
-00f3
-00f6
-00fa
-00fc
-0150-0151
-0170-0171
+# +# fontconfig/fc-lang/hu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hungarian (HU) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com +00c1 +00c9 +00cd +00d3 +00d6 +00da +00dc +#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com +00e1 +00e9 +00ed +00f3 +00f6 +00fa +00fc +0150-0151 +0170-0171 diff --git a/fontconfig/fc-lang/hy.orth b/fontconfig/fc-lang/hy.orth index 15e8d649f..0ccc9eb74 100644 --- a/fontconfig/fc-lang/hy.orth +++ b/fontconfig/fc-lang/hy.orth @@ -1,26 +1,26 @@ -#
-# fontconfig/fc-lang/hy.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Armenian (HY)
-0531-0556
-0561-0587
+# +# fontconfig/fc-lang/hy.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Armenian (HY) +0531-0556 +0561-0587 diff --git a/fontconfig/fc-lang/ia.orth b/fontconfig/fc-lang/ia.orth index 1a434d72e..60a9582f9 100644 --- a/fontconfig/fc-lang/ia.orth +++ b/fontconfig/fc-lang/ia.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/ia.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Interlingua (IA)
-#
-# Orthography taken from http://www.geocities.com/linguablau/spelling_main.html
-#
-0041-005a
-0061-007a
+# +# fontconfig/fc-lang/ia.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Interlingua (IA) +# +# Orthography taken from http://www.geocities.com/linguablau/spelling_main.html +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/id.orth b/fontconfig/fc-lang/id.orth index 89e1a8d2f..36071be29 100644 --- a/fontconfig/fc-lang/id.orth +++ b/fontconfig/fc-lang/id.orth @@ -1,31 +1,31 @@ -#
-# fontconfig/fc-lang/id.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Indonesian (ID)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c9
-00e9
+# +# fontconfig/fc-lang/id.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Indonesian (ID) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c9 +00e9 diff --git a/fontconfig/fc-lang/ie.orth b/fontconfig/fc-lang/ie.orth index 261070f99..19b35a2d6 100644 --- a/fontconfig/fc-lang/ie.orth +++ b/fontconfig/fc-lang/ie.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/ie.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Interlingue (IE)
-#
-# Orthography taken from http://www.kolumbus.fi/allkiv/itgr/itgrix.htm
-#
-0041-005a
-0061-007a
+# +# fontconfig/fc-lang/ie.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Interlingue (IE) +# +# Orthography taken from http://www.kolumbus.fi/allkiv/itgr/itgrix.htm +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/ig.orth b/fontconfig/fc-lang/ig.orth index 0453b21e5..9999117cb 100644 --- a/fontconfig/fc-lang/ig.orth +++ b/fontconfig/fc-lang/ig.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/ig.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Igbo (ig)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-1eca
-1ecb
-1ecc
-1ecd
-1ee4
-1ee5
+# +# fontconfig/fc-lang/ig.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Igbo (ig) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +1eca +1ecb +1ecc +1ecd +1ee4 +1ee5 diff --git a/fontconfig/fc-lang/ik.orth b/fontconfig/fc-lang/ik.orth index 21b16a888..87e26207c 100644 --- a/fontconfig/fc-lang/ik.orth +++ b/fontconfig/fc-lang/ik.orth @@ -1,100 +1,100 @@ -#
-# fontconfig/fc-lang/ik.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Inupiaq (Inupiak, Eskimo) (IK)
-#
-# I'm making a guess that this is language is set using Cyrillic
-#
-0401
-040e
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-045e
+# +# fontconfig/fc-lang/ik.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Inupiaq (Inupiak, Eskimo) (IK) +# +# I'm making a guess that this is language is set using Cyrillic +# +0401 +040e +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +045e diff --git a/fontconfig/fc-lang/io.orth b/fontconfig/fc-lang/io.orth index abe63ae08..407261d10 100644 --- a/fontconfig/fc-lang/io.orth +++ b/fontconfig/fc-lang/io.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/io.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Ido (IO)
-#
-# Orthography taken from http://www.homunculus.com/babel/aido.html
-#
-0041-005a
-0061-007a
+# +# fontconfig/fc-lang/io.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Ido (IO) +# +# Orthography taken from http://www.homunculus.com/babel/aido.html +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/is.orth b/fontconfig/fc-lang/is.orth index fcb8f4158..2867f8e35 100644 --- a/fontconfig/fc-lang/is.orth +++ b/fontconfig/fc-lang/is.orth @@ -1,64 +1,64 @@ -#
-# fontconfig/fc-lang/is.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Icelandic (IS)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com
-#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com
-00c6
-00c9
-#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS evertype.com
-00cd
-00d0
-00d3
-#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS eki.ee
-#00D8 # LATIN CAPITAL LETTER O WITH STROKE evertype.com
-00da
-#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com
-00dd
-00de
-00e1
-#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com
-#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com
-00e6
-00e9
-00ed
-00f0
-00f3
-#00F6 # LATIN SMALL LETTER O WITH DIAERESIS eki.ee
-#00F8 # LATIN SMALL LETTER O WITH STROKE evertype.com
-00fa
-#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com
-00fd
-00fe
-#2018 # single quote
-#201a # single quote
-#201c # double quote
-#201e # double quote
+# +# fontconfig/fc-lang/is.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Icelandic (IS) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com +#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com +00c6 +00c9 +#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS evertype.com +00cd +00d0 +00d3 +#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS eki.ee +#00D8 # LATIN CAPITAL LETTER O WITH STROKE evertype.com +00da +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com +00dd +00de +00e1 +#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com +#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com +00e6 +00e9 +00ed +00f0 +00f3 +#00F6 # LATIN SMALL LETTER O WITH DIAERESIS eki.ee +#00F8 # LATIN SMALL LETTER O WITH STROKE evertype.com +00fa +#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com +00fd +00fe +#2018 # single quote +#201a # single quote +#201c # double quote +#201e # double quote diff --git a/fontconfig/fc-lang/it.orth b/fontconfig/fc-lang/it.orth index f216fa1d8..329d2f104 100644 --- a/fontconfig/fc-lang/it.orth +++ b/fontconfig/fc-lang/it.orth @@ -1,51 +1,51 @@ -#
-# fontconfig/fc-lang/it.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Italian (IT)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-#00c1
-00c8-00c9
-00cc
-00cd
-#00ce
-00cf
-00d2-00d3
-00d9
-00da
-00e0
-#00e1
-00e8-00e9
-00ec
-00ed
-#00ee
-00ef
-00f2-00f3
-00f9
-00fa
+# +# fontconfig/fc-lang/it.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Italian (IT) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +#00c1 +00c8-00c9 +00cc +00cd +#00ce +00cf +00d2-00d3 +00d9 +00da +00e0 +#00e1 +00e8-00e9 +00ec +00ed +#00ee +00ef +00f2-00f3 +00f9 +00fa diff --git a/fontconfig/fc-lang/iu.orth b/fontconfig/fc-lang/iu.orth index 6dde0bf98..24d4102c1 100644 --- a/fontconfig/fc-lang/iu.orth +++ b/fontconfig/fc-lang/iu.orth @@ -1,77 +1,77 @@ -#
-# fontconfig/fc-lang/iu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Inuktitut (IU)
-#
-# Taken from alphabetic coverage of the Pigiarniq font as
-# produced by the legislative assembly of Nunavut
-# http://www.assembly.nu.ca/unicode/fonts/
-#
-1401-1406
-140a-140b
-142f-1434
-1438-1439
-1449
-144c-1451
-1455-1456
-1466
-146b-1470
-1472-1473
-1483
-1489-148e
-1490-1491
-14a1
-14a3-14a8
-14aa-14ab
-14bb
-14c0-14c5
-14c7-14c8
-14d0
-14d3-14d8
-14da-14db
-14ea
-14ed-14f2
-14f4-14f5
-14fa
-14fc
-14fe
-1500
-1502
-1505
-1526-152b
-152d-152e
-153e
-1542
-1545-1549
-154b-154c
-1550
-1553-155a
-155d
-1575-1577
-1579-157c
-157e-1585
-158b-1596
-15a0-15a6
-15a8-15ae
-166f
-1670-1676
+# +# fontconfig/fc-lang/iu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Inuktitut (IU) +# +# Taken from alphabetic coverage of the Pigiarniq font as +# produced by the legislative assembly of Nunavut +# http://www.assembly.nu.ca/unicode/fonts/ +# +1401-1406 +140a-140b +142f-1434 +1438-1439 +1449 +144c-1451 +1455-1456 +1466 +146b-1470 +1472-1473 +1483 +1489-148e +1490-1491 +14a1 +14a3-14a8 +14aa-14ab +14bb +14c0-14c5 +14c7-14c8 +14d0 +14d3-14d8 +14da-14db +14ea +14ed-14f2 +14f4-14f5 +14fa +14fc +14fe +1500 +1502 +1505 +1526-152b +152d-152e +153e +1542 +1545-1549 +154b-154c +1550 +1553-155a +155d +1575-1577 +1579-157c +157e-1585 +158b-1596 +15a0-15a6 +15a8-15ae +166f +1670-1676 diff --git a/fontconfig/fc-lang/ja.orth b/fontconfig/fc-lang/ja.orth index 5f8ea38d6..e87269b85 100644 --- a/fontconfig/fc-lang/ja.orth +++ b/fontconfig/fc-lang/ja.orth @@ -1,6565 +1,6565 @@ -#
-# fontconfig/fc-lang/ja.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage from JIS X 0208 (1990)
-#
-0x3000 # IDEOGRAPHIC SPACE
-0x3001 # IDEOGRAPHIC COMMA
-0x3002 # IDEOGRAPHIC FULL STOP
-0x3005 # IDEOGRAPHIC ITERATION MARK
-0x3006 # IDEOGRAPHIC CLOSING MARK
-0x3007 # IDEOGRAPHIC NUMBER ZERO
-0x3041 # HIRAGANA LETTER SMALL A
-0x3042 # HIRAGANA LETTER A
-0x3043 # HIRAGANA LETTER SMALL I
-0x3044 # HIRAGANA LETTER I
-0x3045 # HIRAGANA LETTER SMALL U
-0x3046 # HIRAGANA LETTER U
-0x3047 # HIRAGANA LETTER SMALL E
-0x3048 # HIRAGANA LETTER E
-0x3049 # HIRAGANA LETTER SMALL O
-0x304A # HIRAGANA LETTER O
-0x304B # HIRAGANA LETTER KA
-0x304C # HIRAGANA LETTER GA
-0x304D # HIRAGANA LETTER KI
-0x304E # HIRAGANA LETTER GI
-0x304F # HIRAGANA LETTER KU
-0x3050 # HIRAGANA LETTER GU
-0x3051 # HIRAGANA LETTER KE
-0x3052 # HIRAGANA LETTER GE
-0x3053 # HIRAGANA LETTER KO
-0x3054 # HIRAGANA LETTER GO
-0x3055 # HIRAGANA LETTER SA
-0x3056 # HIRAGANA LETTER ZA
-0x3057 # HIRAGANA LETTER SI
-0x3058 # HIRAGANA LETTER ZI
-0x3059 # HIRAGANA LETTER SU
-0x305A # HIRAGANA LETTER ZU
-0x305B # HIRAGANA LETTER SE
-0x305C # HIRAGANA LETTER ZE
-0x305D # HIRAGANA LETTER SO
-0x305E # HIRAGANA LETTER ZO
-0x305F # HIRAGANA LETTER TA
-0x3060 # HIRAGANA LETTER DA
-0x3061 # HIRAGANA LETTER TI
-0x3062 # HIRAGANA LETTER DI
-0x3063 # HIRAGANA LETTER SMALL TU
-0x3064 # HIRAGANA LETTER TU
-0x3065 # HIRAGANA LETTER DU
-0x3066 # HIRAGANA LETTER TE
-0x3067 # HIRAGANA LETTER DE
-0x3068 # HIRAGANA LETTER TO
-0x3069 # HIRAGANA LETTER DO
-0x306A # HIRAGANA LETTER NA
-0x306B # HIRAGANA LETTER NI
-0x306C # HIRAGANA LETTER NU
-0x306D # HIRAGANA LETTER NE
-0x306E # HIRAGANA LETTER NO
-0x306F # HIRAGANA LETTER HA
-0x3070 # HIRAGANA LETTER BA
-0x3071 # HIRAGANA LETTER PA
-0x3072 # HIRAGANA LETTER HI
-0x3073 # HIRAGANA LETTER BI
-0x3074 # HIRAGANA LETTER PI
-0x3075 # HIRAGANA LETTER HU
-0x3076 # HIRAGANA LETTER BU
-0x3077 # HIRAGANA LETTER PU
-0x3078 # HIRAGANA LETTER HE
-0x3079 # HIRAGANA LETTER BE
-0x307A # HIRAGANA LETTER PE
-0x307B # HIRAGANA LETTER HO
-0x307C # HIRAGANA LETTER BO
-0x307D # HIRAGANA LETTER PO
-0x307E # HIRAGANA LETTER MA
-0x307F # HIRAGANA LETTER MI
-0x3080 # HIRAGANA LETTER MU
-0x3081 # HIRAGANA LETTER ME
-0x3082 # HIRAGANA LETTER MO
-0x3083 # HIRAGANA LETTER SMALL YA
-0x3084 # HIRAGANA LETTER YA
-0x3085 # HIRAGANA LETTER SMALL YU
-0x3086 # HIRAGANA LETTER YU
-0x3087 # HIRAGANA LETTER SMALL YO
-0x3088 # HIRAGANA LETTER YO
-0x3089 # HIRAGANA LETTER RA
-0x308A # HIRAGANA LETTER RI
-0x308B # HIRAGANA LETTER RU
-0x308C # HIRAGANA LETTER RE
-0x308D # HIRAGANA LETTER RO
-0x308E # HIRAGANA LETTER SMALL WA
-0x308F # HIRAGANA LETTER WA
-0x3090 # HIRAGANA LETTER WI
-0x3091 # HIRAGANA LETTER WE
-0x3092 # HIRAGANA LETTER WO
-0x3093 # HIRAGANA LETTER N
-0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK
-0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
-0x309D # HIRAGANA ITERATION MARK
-0x309E # HIRAGANA VOICED ITERATION MARK
-0x30A1 # KATAKANA LETTER SMALL A
-0x30A2 # KATAKANA LETTER A
-0x30A3 # KATAKANA LETTER SMALL I
-0x30A4 # KATAKANA LETTER I
-0x30A5 # KATAKANA LETTER SMALL U
-0x30A6 # KATAKANA LETTER U
-0x30A7 # KATAKANA LETTER SMALL E
-0x30A8 # KATAKANA LETTER E
-0x30A9 # KATAKANA LETTER SMALL O
-0x30AA # KATAKANA LETTER O
-0x30AB # KATAKANA LETTER KA
-0x30AC # KATAKANA LETTER GA
-0x30AD # KATAKANA LETTER KI
-0x30AE # KATAKANA LETTER GI
-0x30AF # KATAKANA LETTER KU
-0x30B0 # KATAKANA LETTER GU
-0x30B1 # KATAKANA LETTER KE
-0x30B2 # KATAKANA LETTER GE
-0x30B3 # KATAKANA LETTER KO
-0x30B4 # KATAKANA LETTER GO
-0x30B5 # KATAKANA LETTER SA
-0x30B6 # KATAKANA LETTER ZA
-0x30B7 # KATAKANA LETTER SI
-0x30B8 # KATAKANA LETTER ZI
-0x30B9 # KATAKANA LETTER SU
-0x30BA # KATAKANA LETTER ZU
-0x30BB # KATAKANA LETTER SE
-0x30BC # KATAKANA LETTER ZE
-0x30BD # KATAKANA LETTER SO
-0x30BE # KATAKANA LETTER ZO
-0x30BF # KATAKANA LETTER TA
-0x30C0 # KATAKANA LETTER DA
-0x30C1 # KATAKANA LETTER TI
-0x30C2 # KATAKANA LETTER DI
-0x30C3 # KATAKANA LETTER SMALL TU
-0x30C4 # KATAKANA LETTER TU
-0x30C5 # KATAKANA LETTER DU
-0x30C6 # KATAKANA LETTER TE
-0x30C7 # KATAKANA LETTER DE
-0x30C8 # KATAKANA LETTER TO
-0x30C9 # KATAKANA LETTER DO
-0x30CA # KATAKANA LETTER NA
-0x30CB # KATAKANA LETTER NI
-0x30CC # KATAKANA LETTER NU
-0x30CD # KATAKANA LETTER NE
-0x30CE # KATAKANA LETTER NO
-0x30CF # KATAKANA LETTER HA
-0x30D0 # KATAKANA LETTER BA
-0x30D1 # KATAKANA LETTER PA
-0x30D2 # KATAKANA LETTER HI
-0x30D3 # KATAKANA LETTER BI
-0x30D4 # KATAKANA LETTER PI
-0x30D5 # KATAKANA LETTER HU
-0x30D6 # KATAKANA LETTER BU
-0x30D7 # KATAKANA LETTER PU
-0x30D8 # KATAKANA LETTER HE
-0x30D9 # KATAKANA LETTER BE
-0x30DA # KATAKANA LETTER PE
-0x30DB # KATAKANA LETTER HO
-0x30DC # KATAKANA LETTER BO
-0x30DD # KATAKANA LETTER PO
-0x30DE # KATAKANA LETTER MA
-0x30DF # KATAKANA LETTER MI
-0x30E0 # KATAKANA LETTER MU
-0x30E1 # KATAKANA LETTER ME
-0x30E2 # KATAKANA LETTER MO
-0x30E3 # KATAKANA LETTER SMALL YA
-0x30E4 # KATAKANA LETTER YA
-0x30E5 # KATAKANA LETTER SMALL YU
-0x30E6 # KATAKANA LETTER YU
-0x30E7 # KATAKANA LETTER SMALL YO
-0x30E8 # KATAKANA LETTER YO
-0x30E9 # KATAKANA LETTER RA
-0x30EA # KATAKANA LETTER RI
-0x30EB # KATAKANA LETTER RU
-0x30EC # KATAKANA LETTER RE
-0x30ED # KATAKANA LETTER RO
-0x30EE # KATAKANA LETTER SMALL WA
-0x30EF # KATAKANA LETTER WA
-0x30F0 # KATAKANA LETTER WI
-0x30F1 # KATAKANA LETTER WE
-0x30F2 # KATAKANA LETTER WO
-0x30F3 # KATAKANA LETTER N
-0x30F4 # KATAKANA LETTER VU
-0x30F5 # KATAKANA LETTER SMALL KA
-0x30F6 # KATAKANA LETTER SMALL KE
-0x30FB # KATAKANA MIDDLE DOT
-0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK
-0x30FD # KATAKANA ITERATION MARK
-0x30FE # KATAKANA VOICED ITERATION MARK
-0x4E00 # <CJK>
-0x4E01 # <CJK>
-0x4E03 # <CJK>
-0x4E07 # <CJK>
-0x4E08 # <CJK>
-0x4E09 # <CJK>
-0x4E0A # <CJK>
-0x4E0B # <CJK>
-0x4E0D # <CJK>
-0x4E0E # <CJK>
-0x4E10 # <CJK>
-0x4E11 # <CJK>
-0x4E14 # <CJK>
-0x4E15 # <CJK>
-0x4E16 # <CJK>
-0x4E17 # <CJK>
-0x4E18 # <CJK>
-0x4E19 # <CJK>
-0x4E1E # <CJK>
-0x4E21 # <CJK>
-0x4E26 # <CJK>
-0x4E2A # <CJK>
-0x4E2D # <CJK>
-0x4E31 # <CJK>
-0x4E32 # <CJK>
-0x4E36 # <CJK>
-0x4E38 # <CJK>
-0x4E39 # <CJK>
-0x4E3B # <CJK>
-0x4E3C # <CJK>
-0x4E3F # <CJK>
-0x4E42 # <CJK>
-0x4E43 # <CJK>
-0x4E45 # <CJK>
-0x4E4B # <CJK>
-0x4E4D # <CJK>
-0x4E4E # <CJK>
-0x4E4F # <CJK>
-0x4E55 # <CJK>
-0x4E56 # <CJK>
-0x4E57 # <CJK>
-0x4E58 # <CJK>
-0x4E59 # <CJK>
-0x4E5D # <CJK>
-0x4E5E # <CJK>
-0x4E5F # <CJK>
-0x4E62 # <CJK>
-0x4E71 # <CJK>
-0x4E73 # <CJK>
-0x4E7E # <CJK>
-0x4E80 # <CJK>
-0x4E82 # <CJK>
-0x4E85 # <CJK>
-0x4E86 # <CJK>
-0x4E88 # <CJK>
-0x4E89 # <CJK>
-0x4E8A # <CJK>
-0x4E8B # <CJK>
-0x4E8C # <CJK>
-0x4E8E # <CJK>
-0x4E91 # <CJK>
-0x4E92 # <CJK>
-0x4E94 # <CJK>
-0x4E95 # <CJK>
-0x4E98 # <CJK>
-0x4E99 # <CJK>
-0x4E9B # <CJK>
-0x4E9C # <CJK>
-0x4E9E # <CJK>
-0x4E9F # <CJK>
-0x4EA0 # <CJK>
-0x4EA1 # <CJK>
-0x4EA2 # <CJK>
-0x4EA4 # <CJK>
-0x4EA5 # <CJK>
-0x4EA6 # <CJK>
-0x4EA8 # <CJK>
-0x4EAB # <CJK>
-0x4EAC # <CJK>
-0x4EAD # <CJK>
-0x4EAE # <CJK>
-0x4EB0 # <CJK>
-0x4EB3 # <CJK>
-0x4EB6 # <CJK>
-0x4EBA # <CJK>
-0x4EC0 # <CJK>
-0x4EC1 # <CJK>
-0x4EC2 # <CJK>
-0x4EC4 # <CJK>
-0x4EC6 # <CJK>
-0x4EC7 # <CJK>
-0x4ECA # <CJK>
-0x4ECB # <CJK>
-0x4ECD # <CJK>
-0x4ECE # <CJK>
-0x4ECF # <CJK>
-0x4ED4 # <CJK>
-0x4ED5 # <CJK>
-0x4ED6 # <CJK>
-0x4ED7 # <CJK>
-0x4ED8 # <CJK>
-0x4ED9 # <CJK>
-0x4EDD # <CJK>
-0x4EDE # <CJK>
-0x4EDF # <CJK>
-0x4EE3 # <CJK>
-0x4EE4 # <CJK>
-0x4EE5 # <CJK>
-0x4EED # <CJK>
-0x4EEE # <CJK>
-0x4EF0 # <CJK>
-0x4EF2 # <CJK>
-0x4EF6 # <CJK>
-0x4EF7 # <CJK>
-0x4EFB # <CJK>
-0x4F01 # <CJK>
-0x4F09 # <CJK>
-0x4F0A # <CJK>
-0x4F0D # <CJK>
-0x4F0E # <CJK>
-0x4F0F # <CJK>
-0x4F10 # <CJK>
-0x4F11 # <CJK>
-0x4F1A # <CJK>
-0x4F1C # <CJK>
-0x4F1D # <CJK>
-0x4F2F # <CJK>
-0x4F30 # <CJK>
-0x4F34 # <CJK>
-0x4F36 # <CJK>
-0x4F38 # <CJK>
-0x4F3A # <CJK>
-0x4F3C # <CJK>
-0x4F3D # <CJK>
-0x4F43 # <CJK>
-0x4F46 # <CJK>
-0x4F47 # <CJK>
-0x4F4D # <CJK>
-0x4F4E # <CJK>
-0x4F4F # <CJK>
-0x4F50 # <CJK>
-0x4F51 # <CJK>
-0x4F53 # <CJK>
-0x4F55 # <CJK>
-0x4F57 # <CJK>
-0x4F59 # <CJK>
-0x4F5A # <CJK>
-0x4F5B # <CJK>
-0x4F5C # <CJK>
-0x4F5D # <CJK>
-0x4F5E # <CJK>
-0x4F69 # <CJK>
-0x4F6F # <CJK>
-0x4F70 # <CJK>
-0x4F73 # <CJK>
-0x4F75 # <CJK>
-0x4F76 # <CJK>
-0x4F7B # <CJK>
-0x4F7C # <CJK>
-0x4F7F # <CJK>
-0x4F83 # <CJK>
-0x4F86 # <CJK>
-0x4F88 # <CJK>
-0x4F8B # <CJK>
-0x4F8D # <CJK>
-0x4F8F # <CJK>
-0x4F91 # <CJK>
-0x4F96 # <CJK>
-0x4F98 # <CJK>
-0x4F9B # <CJK>
-0x4F9D # <CJK>
-0x4FA0 # <CJK>
-0x4FA1 # <CJK>
-0x4FAB # <CJK>
-0x4FAD # <CJK>
-0x4FAE # <CJK>
-0x4FAF # <CJK>
-0x4FB5 # <CJK>
-0x4FB6 # <CJK>
-0x4FBF # <CJK>
-0x4FC2 # <CJK>
-0x4FC3 # <CJK>
-0x4FC4 # <CJK>
-0x4FCA # <CJK>
-0x4FCE # <CJK>
-0x4FD0 # <CJK>
-0x4FD1 # <CJK>
-0x4FD4 # <CJK>
-0x4FD7 # <CJK>
-0x4FD8 # <CJK>
-0x4FDA # <CJK>
-0x4FDB # <CJK>
-0x4FDD # <CJK>
-0x4FDF # <CJK>
-0x4FE1 # <CJK>
-0x4FE3 # <CJK>
-0x4FE4 # <CJK>
-0x4FE5 # <CJK>
-0x4FEE # <CJK>
-0x4FEF # <CJK>
-0x4FF3 # <CJK>
-0x4FF5 # <CJK>
-0x4FF6 # <CJK>
-0x4FF8 # <CJK>
-0x4FFA # <CJK>
-0x4FFE # <CJK>
-0x5005 # <CJK>
-0x5006 # <CJK>
-0x5009 # <CJK>
-0x500B # <CJK>
-0x500D # <CJK>
-0x500F # <CJK>
-0x5011 # <CJK>
-0x5012 # <CJK>
-0x5014 # <CJK>
-0x5016 # <CJK>
-0x5019 # <CJK>
-0x501A # <CJK>
-0x501F # <CJK>
-0x5021 # <CJK>
-0x5023 # <CJK>
-0x5024 # <CJK>
-0x5025 # <CJK>
-0x5026 # <CJK>
-0x5028 # <CJK>
-0x5029 # <CJK>
-0x502A # <CJK>
-0x502B # <CJK>
-0x502C # <CJK>
-0x502D # <CJK>
-0x5036 # <CJK>
-0x5039 # <CJK>
-0x5043 # <CJK>
-0x5047 # <CJK>
-0x5048 # <CJK>
-0x5049 # <CJK>
-0x504F # <CJK>
-0x5050 # <CJK>
-0x5055 # <CJK>
-0x5056 # <CJK>
-0x505A # <CJK>
-0x505C # <CJK>
-0x5065 # <CJK>
-0x506C # <CJK>
-0x5072 # <CJK>
-0x5074 # <CJK>
-0x5075 # <CJK>
-0x5076 # <CJK>
-0x5078 # <CJK>
-0x507D # <CJK>
-0x5080 # <CJK>
-0x5085 # <CJK>
-0x508D # <CJK>
-0x5091 # <CJK>
-0x5098 # <CJK>
-0x5099 # <CJK>
-0x509A # <CJK>
-0x50AC # <CJK>
-0x50AD # <CJK>
-0x50B2 # <CJK>
-0x50B3 # <CJK>
-0x50B4 # <CJK>
-0x50B5 # <CJK>
-0x50B7 # <CJK>
-0x50BE # <CJK>
-0x50C2 # <CJK>
-0x50C5 # <CJK>
-0x50C9 # <CJK>
-0x50CA # <CJK>
-0x50CD # <CJK>
-0x50CF # <CJK>
-0x50D1 # <CJK>
-0x50D5 # <CJK>
-0x50D6 # <CJK>
-0x50DA # <CJK>
-0x50DE # <CJK>
-0x50E3 # <CJK>
-0x50E5 # <CJK>
-0x50E7 # <CJK>
-0x50ED # <CJK>
-0x50EE # <CJK>
-0x50F5 # <CJK>
-0x50F9 # <CJK>
-0x50FB # <CJK>
-0x5100 # <CJK>
-0x5101 # <CJK>
-0x5102 # <CJK>
-0x5104 # <CJK>
-0x5109 # <CJK>
-0x5112 # <CJK>
-0x5114 # <CJK>
-0x5115 # <CJK>
-0x5116 # <CJK>
-0x5118 # <CJK>
-0x511A # <CJK>
-0x511F # <CJK>
-0x5121 # <CJK>
-0x512A # <CJK>
-0x5132 # <CJK>
-0x5137 # <CJK>
-0x513A # <CJK>
-0x513B # <CJK>
-0x513C # <CJK>
-0x513F # <CJK>
-0x5140 # <CJK>
-0x5141 # <CJK>
-0x5143 # <CJK>
-0x5144 # <CJK>
-0x5145 # <CJK>
-0x5146 # <CJK>
-0x5147 # <CJK>
-0x5148 # <CJK>
-0x5149 # <CJK>
-0x514B # <CJK>
-0x514C # <CJK>
-0x514D # <CJK>
-0x514E # <CJK>
-0x5150 # <CJK>
-0x5152 # <CJK>
-0x5154 # <CJK>
-0x515A # <CJK>
-0x515C # <CJK>
-0x5162 # <CJK>
-0x5165 # <CJK>
-0x5168 # <CJK>
-0x5169 # <CJK>
-0x516A # <CJK>
-0x516B # <CJK>
-0x516C # <CJK>
-0x516D # <CJK>
-0x516E # <CJK>
-0x5171 # <CJK>
-0x5175 # <CJK>
-0x5176 # <CJK>
-0x5177 # <CJK>
-0x5178 # <CJK>
-0x517C # <CJK>
-0x5180 # <CJK>
-0x5182 # <CJK>
-0x5185 # <CJK>
-0x5186 # <CJK>
-0x5189 # <CJK>
-0x518A # <CJK>
-0x518C # <CJK>
-0x518D # <CJK>
-0x518F # <CJK>
-0x5190 # <CJK>
-0x5191 # <CJK>
-0x5192 # <CJK>
-0x5193 # <CJK>
-0x5195 # <CJK>
-0x5196 # <CJK>
-0x5197 # <CJK>
-0x5199 # <CJK>
-0x51A0 # <CJK>
-0x51A2 # <CJK>
-0x51A4 # <CJK>
-0x51A5 # <CJK>
-0x51A6 # <CJK>
-0x51A8 # <CJK>
-0x51A9 # <CJK>
-0x51AA # <CJK>
-0x51AB # <CJK>
-0x51AC # <CJK>
-0x51B0 # <CJK>
-0x51B1 # <CJK>
-0x51B2 # <CJK>
-0x51B3 # <CJK>
-0x51B4 # <CJK>
-0x51B5 # <CJK>
-0x51B6 # <CJK>
-0x51B7 # <CJK>
-0x51BD # <CJK>
-0x51C4 # <CJK>
-0x51C5 # <CJK>
-0x51C6 # <CJK>
-0x51C9 # <CJK>
-0x51CB # <CJK>
-0x51CC # <CJK>
-0x51CD # <CJK>
-0x51D6 # <CJK>
-0x51DB # <CJK>
-#0x51DC # <CJK> # not in kochi fonts
-0x51DD # <CJK>
-0x51E0 # <CJK>
-0x51E1 # <CJK>
-0x51E6 # <CJK>
-0x51E7 # <CJK>
-0x51E9 # <CJK>
-0x51EA # <CJK>
-0x51ED # <CJK>
-0x51F0 # <CJK>
-0x51F1 # <CJK>
-0x51F5 # <CJK>
-0x51F6 # <CJK>
-0x51F8 # <CJK>
-0x51F9 # <CJK>
-0x51FA # <CJK>
-0x51FD # <CJK>
-0x51FE # <CJK>
-0x5200 # <CJK>
-0x5203 # <CJK>
-0x5204 # <CJK>
-0x5206 # <CJK>
-0x5207 # <CJK>
-0x5208 # <CJK>
-0x520A # <CJK>
-0x520B # <CJK>
-0x520E # <CJK>
-0x5211 # <CJK>
-0x5214 # <CJK>
-0x5217 # <CJK>
-0x521D # <CJK>
-0x5224 # <CJK>
-0x5225 # <CJK>
-0x5227 # <CJK>
-0x5229 # <CJK>
-0x522A # <CJK>
-0x522E # <CJK>
-0x5230 # <CJK>
-0x5233 # <CJK>
-0x5236 # <CJK>
-0x5237 # <CJK>
-0x5238 # <CJK>
-0x5239 # <CJK>
-0x523A # <CJK>
-0x523B # <CJK>
-0x5243 # <CJK>
-0x5244 # <CJK>
-0x5247 # <CJK>
-0x524A # <CJK>
-0x524B # <CJK>
-0x524C # <CJK>
-0x524D # <CJK>
-0x524F # <CJK>
-0x5254 # <CJK>
-0x5256 # <CJK>
-0x525B # <CJK>
-0x525E # <CJK>
-0x5263 # <CJK>
-0x5264 # <CJK>
-0x5265 # <CJK>
-0x5269 # <CJK>
-0x526A # <CJK>
-0x526F # <CJK>
-0x5270 # <CJK>
-0x5271 # <CJK>
-0x5272 # <CJK>
-0x5273 # <CJK>
-0x5274 # <CJK>
-0x5275 # <CJK>
-0x527D # <CJK>
-0x527F # <CJK>
-0x5283 # <CJK>
-0x5287 # <CJK>
-0x5288 # <CJK>
-0x5289 # <CJK>
-0x528D # <CJK>
-0x5291 # <CJK>
-0x5292 # <CJK>
-0x5294 # <CJK>
-0x529B # <CJK>
-0x529F # <CJK>
-0x52A0 # <CJK>
-0x52A3 # <CJK>
-0x52A9 # <CJK>
-0x52AA # <CJK>
-0x52AB # <CJK>
-0x52AC # <CJK>
-0x52AD # <CJK>
-0x52B1 # <CJK>
-0x52B4 # <CJK>
-0x52B5 # <CJK>
-0x52B9 # <CJK>
-0x52BC # <CJK>
-0x52BE # <CJK>
-0x52C1 # <CJK>
-0x52C3 # <CJK>
-0x52C5 # <CJK>
-0x52C7 # <CJK>
-0x52C9 # <CJK>
-0x52CD # <CJK>
-0x52D2 # <CJK>
-0x52D5 # <CJK>
-0x52D7 # <CJK>
-0x52D8 # <CJK>
-0x52D9 # <CJK>
-0x52DD # <CJK>
-0x52DE # <CJK>
-0x52DF # <CJK>
-0x52E0 # <CJK>
-0x52E2 # <CJK>
-0x52E3 # <CJK>
-0x52E4 # <CJK>
-0x52E6 # <CJK>
-0x52E7 # <CJK>
-0x52F2 # <CJK>
-0x52F3 # <CJK>
-0x52F5 # <CJK>
-0x52F8 # <CJK>
-0x52F9 # <CJK>
-0x52FA # <CJK>
-0x52FE # <CJK>
-0x52FF # <CJK>
-0x5301 # <CJK>
-0x5302 # <CJK>
-0x5305 # <CJK>
-0x5306 # <CJK>
-0x5308 # <CJK>
-0x530D # <CJK>
-0x530F # <CJK>
-0x5310 # <CJK>
-0x5315 # <CJK>
-0x5316 # <CJK>
-0x5317 # <CJK>
-0x5319 # <CJK>
-0x531A # <CJK>
-0x531D # <CJK>
-0x5320 # <CJK>
-0x5321 # <CJK>
-0x5323 # <CJK>
-0x532A # <CJK>
-0x532F # <CJK>
-0x5331 # <CJK>
-0x5333 # <CJK>
-0x5338 # <CJK>
-0x5339 # <CJK>
-0x533A # <CJK>
-0x533B # <CJK>
-0x533F # <CJK>
-0x5340 # <CJK>
-0x5341 # <CJK>
-0x5343 # <CJK>
-0x5345 # <CJK>
-0x5346 # <CJK>
-0x5347 # <CJK>
-0x5348 # <CJK>
-0x5349 # <CJK>
-0x534A # <CJK>
-0x534D # <CJK>
-0x5351 # <CJK>
-0x5352 # <CJK>
-0x5353 # <CJK>
-0x5354 # <CJK>
-0x5357 # <CJK>
-0x5358 # <CJK>
-0x535A # <CJK>
-0x535C # <CJK>
-0x535E # <CJK>
-0x5360 # <CJK>
-0x5366 # <CJK>
-0x5369 # <CJK>
-0x536E # <CJK>
-0x536F # <CJK>
-0x5370 # <CJK>
-0x5371 # <CJK>
-0x5373 # <CJK>
-0x5374 # <CJK>
-0x5375 # <CJK>
-0x5377 # <CJK>
-0x5378 # <CJK>
-0x537B # <CJK>
-0x537F # <CJK>
-0x5382 # <CJK>
-0x5384 # <CJK>
-0x5396 # <CJK>
-0x5398 # <CJK>
-0x539A # <CJK>
-0x539F # <CJK>
-0x53A0 # <CJK>
-0x53A5 # <CJK>
-0x53A6 # <CJK>
-0x53A8 # <CJK>
-0x53A9 # <CJK>
-0x53AD # <CJK>
-0x53AE # <CJK>
-0x53B0 # <CJK>
-0x53B3 # <CJK>
-0x53B6 # <CJK>
-0x53BB # <CJK>
-0x53C2 # <CJK>
-0x53C3 # <CJK>
-0x53C8 # <CJK>
-0x53C9 # <CJK>
-0x53CA # <CJK>
-0x53CB # <CJK>
-0x53CC # <CJK>
-0x53CD # <CJK>
-0x53CE # <CJK>
-0x53D4 # <CJK>
-0x53D6 # <CJK>
-0x53D7 # <CJK>
-0x53D9 # <CJK>
-0x53DB # <CJK>
-0x53DF # <CJK>
-0x53E1 # <CJK>
-0x53E2 # <CJK>
-0x53E3 # <CJK>
-0x53E4 # <CJK>
-0x53E5 # <CJK>
-0x53E8 # <CJK>
-0x53E9 # <CJK>
-0x53EA # <CJK>
-0x53EB # <CJK>
-0x53EC # <CJK>
-0x53ED # <CJK>
-0x53EE # <CJK>
-0x53EF # <CJK>
-0x53F0 # <CJK>
-0x53F1 # <CJK>
-0x53F2 # <CJK>
-0x53F3 # <CJK>
-0x53F6 # <CJK>
-0x53F7 # <CJK>
-0x53F8 # <CJK>
-0x53FA # <CJK>
-0x5401 # <CJK>
-0x5403 # <CJK>
-0x5404 # <CJK>
-0x5408 # <CJK>
-0x5409 # <CJK>
-0x540A # <CJK>
-0x540B # <CJK>
-0x540C # <CJK>
-0x540D # <CJK>
-0x540E # <CJK>
-0x540F # <CJK>
-0x5410 # <CJK>
-0x5411 # <CJK>
-0x541B # <CJK>
-0x541D # <CJK>
-0x541F # <CJK>
-0x5420 # <CJK>
-0x5426 # <CJK>
-0x5429 # <CJK>
-0x542B # <CJK>
-0x542C # <CJK>
-0x542D # <CJK>
-0x542E # <CJK>
-0x5436 # <CJK>
-0x5438 # <CJK>
-0x5439 # <CJK>
-0x543B # <CJK>
-0x543C # <CJK>
-0x543D # <CJK>
-0x543E # <CJK>
-0x5440 # <CJK>
-0x5442 # <CJK>
-0x5446 # <CJK>
-0x5448 # <CJK>
-0x5449 # <CJK>
-0x544A # <CJK>
-0x544E # <CJK>
-0x5451 # <CJK>
-0x545F # <CJK>
-0x5468 # <CJK>
-0x546A # <CJK>
-0x5470 # <CJK>
-0x5471 # <CJK>
-0x5473 # <CJK>
-0x5475 # <CJK>
-0x5476 # <CJK>
-0x5477 # <CJK>
-0x547B # <CJK>
-0x547C # <CJK>
-0x547D # <CJK>
-0x5480 # <CJK>
-0x5484 # <CJK>
-0x5486 # <CJK>
-0x548B # <CJK>
-0x548C # <CJK>
-0x548E # <CJK>
-0x548F # <CJK>
-0x5490 # <CJK>
-0x5492 # <CJK>
-0x54A2 # <CJK>
-0x54A4 # <CJK>
-0x54A5 # <CJK>
-0x54A8 # <CJK>
-0x54AB # <CJK>
-0x54AC # <CJK>
-0x54AF # <CJK>
-0x54B2 # <CJK>
-0x54B3 # <CJK>
-0x54B8 # <CJK>
-0x54BC # <CJK>
-0x54BD # <CJK>
-0x54BE # <CJK>
-0x54C0 # <CJK>
-0x54C1 # <CJK>
-0x54C2 # <CJK>
-0x54C4 # <CJK>
-0x54C7 # <CJK>
-0x54C8 # <CJK>
-0x54C9 # <CJK>
-0x54D8 # <CJK>
-0x54E1 # <CJK>
-0x54E2 # <CJK>
-0x54E5 # <CJK>
-0x54E6 # <CJK>
-0x54E8 # <CJK>
-0x54E9 # <CJK>
-0x54ED # <CJK>
-0x54EE # <CJK>
-0x54F2 # <CJK>
-0x54FA # <CJK>
-0x54FD # <CJK>
-0x5504 # <CJK>
-0x5506 # <CJK>
-0x5507 # <CJK>
-0x550F # <CJK>
-0x5510 # <CJK>
-0x5514 # <CJK>
-0x5516 # <CJK>
-0x552E # <CJK>
-0x552F # <CJK>
-0x5531 # <CJK>
-0x5533 # <CJK>
-0x5538 # <CJK>
-0x5539 # <CJK>
-0x553E # <CJK>
-0x5540 # <CJK>
-0x5544 # <CJK>
-0x5545 # <CJK>
-0x5546 # <CJK>
-0x554C # <CJK>
-0x554F # <CJK>
-0x5553 # <CJK>
-0x5556 # <CJK>
-0x5557 # <CJK>
-0x555C # <CJK>
-0x555D # <CJK>
-0x5563 # <CJK>
-0x557B # <CJK>
-0x557C # <CJK>
-0x557E # <CJK>
-0x5580 # <CJK>
-0x5583 # <CJK>
-0x5584 # <CJK>
-0x5587 # <CJK>
-0x5589 # <CJK>
-0x558A # <CJK>
-0x558B # <CJK>
-0x5598 # <CJK>
-0x5599 # <CJK>
-0x559A # <CJK>
-0x559C # <CJK>
-0x559D # <CJK>
-0x559E # <CJK>
-0x559F # <CJK>
-0x55A7 # <CJK>
-0x55A8 # <CJK>
-0x55A9 # <CJK>
-0x55AA # <CJK>
-0x55AB # <CJK>
-0x55AC # <CJK>
-0x55AE # <CJK>
-0x55B0 # <CJK>
-0x55B6 # <CJK>
-0x55C4 # <CJK>
-0x55C5 # <CJK>
-0x55C7 # <CJK>
-0x55D4 # <CJK>
-0x55DA # <CJK>
-0x55DC # <CJK>
-0x55DF # <CJK>
-0x55E3 # <CJK>
-0x55E4 # <CJK>
-0x55F7 # <CJK>
-0x55F9 # <CJK>
-0x55FD # <CJK>
-0x55FE # <CJK>
-0x5606 # <CJK>
-0x5609 # <CJK>
-0x5614 # <CJK>
-0x5616 # <CJK>
-0x5617 # <CJK>
-0x5618 # <CJK>
-0x561B # <CJK>
-0x5629 # <CJK>
-0x562F # <CJK>
-0x5631 # <CJK>
-0x5632 # <CJK>
-0x5634 # <CJK>
-0x5636 # <CJK>
-0x5638 # <CJK>
-0x5642 # <CJK>
-0x564C # <CJK>
-0x564E # <CJK>
-0x5650 # <CJK>
-0x565B # <CJK>
-0x5664 # <CJK>
-0x5668 # <CJK>
-0x566A # <CJK>
-0x566B # <CJK>
-0x566C # <CJK>
-0x5674 # <CJK>
-0x5678 # <CJK>
-0x567A # <CJK>
-0x5680 # <CJK>
-0x5686 # <CJK>
-0x5687 # <CJK>
-0x568A # <CJK>
-0x568F # <CJK>
-0x5694 # <CJK>
-0x56A0 # <CJK>
-0x56A2 # <CJK>
-0x56A5 # <CJK>
-0x56AE # <CJK>
-0x56B4 # <CJK>
-0x56B6 # <CJK>
-0x56BC # <CJK>
-0x56C0 # <CJK>
-0x56C1 # <CJK>
-0x56C2 # <CJK>
-0x56C3 # <CJK>
-0x56C8 # <CJK>
-0x56CE # <CJK>
-0x56D1 # <CJK>
-0x56D3 # <CJK>
-0x56D7 # <CJK>
-0x56D8 # <CJK>
-0x56DA # <CJK>
-0x56DB # <CJK>
-0x56DE # <CJK>
-0x56E0 # <CJK>
-0x56E3 # <CJK>
-0x56EE # <CJK>
-0x56F0 # <CJK>
-0x56F2 # <CJK>
-0x56F3 # <CJK>
-0x56F9 # <CJK>
-0x56FA # <CJK>
-0x56FD # <CJK>
-0x56FF # <CJK>
-0x5700 # <CJK>
-0x5703 # <CJK>
-0x5704 # <CJK>
-0x5708 # <CJK>
-0x5709 # <CJK>
-0x570B # <CJK>
-0x570D # <CJK>
-0x570F # <CJK>
-0x5712 # <CJK>
-0x5713 # <CJK>
-0x5716 # <CJK>
-0x5718 # <CJK>
-0x571C # <CJK>
-0x571F # <CJK>
-0x5726 # <CJK>
-0x5727 # <CJK>
-0x5728 # <CJK>
-0x572D # <CJK>
-0x5730 # <CJK>
-0x5737 # <CJK>
-0x5738 # <CJK>
-0x573B # <CJK>
-0x5740 # <CJK>
-0x5742 # <CJK>
-0x5747 # <CJK>
-0x574A # <CJK>
-0x574E # <CJK>
-0x574F # <CJK>
-0x5750 # <CJK>
-0x5751 # <CJK>
-0x5761 # <CJK>
-0x5764 # <CJK>
-0x5766 # <CJK>
-0x5769 # <CJK>
-0x576A # <CJK>
-0x577F # <CJK>
-0x5782 # <CJK>
-0x5788 # <CJK>
-0x5789 # <CJK>
-0x578B # <CJK>
-0x5793 # <CJK>
-0x57A0 # <CJK>
-0x57A2 # <CJK>
-0x57A3 # <CJK>
-0x57A4 # <CJK>
-0x57AA # <CJK>
-0x57B0 # <CJK>
-0x57B3 # <CJK>
-0x57C0 # <CJK>
-0x57C3 # <CJK>
-0x57C6 # <CJK>
-0x57CB # <CJK>
-0x57CE # <CJK>
-0x57D2 # <CJK>
-0x57D3 # <CJK>
-0x57D4 # <CJK>
-0x57D6 # <CJK>
-0x57DC # <CJK>
-0x57DF # <CJK>
-0x57E0 # <CJK>
-0x57E3 # <CJK>
-0x57F4 # <CJK>
-0x57F7 # <CJK>
-0x57F9 # <CJK>
-0x57FA # <CJK>
-0x57FC # <CJK>
-0x5800 # <CJK>
-0x5802 # <CJK>
-0x5805 # <CJK>
-0x5806 # <CJK>
-0x580A # <CJK>
-0x580B # <CJK>
-0x5815 # <CJK>
-0x5819 # <CJK>
-0x581D # <CJK>
-0x5821 # <CJK>
-0x5824 # <CJK>
-0x582A # <CJK>
-0x582F # <CJK>
-0x5830 # <CJK>
-0x5831 # <CJK>
-0x5834 # <CJK>
-0x5835 # <CJK>
-0x583A # <CJK>
-0x583D # <CJK>
-0x5840 # <CJK>
-0x5841 # <CJK>
-0x584A # <CJK>
-0x584B # <CJK>
-0x5851 # <CJK>
-0x5852 # <CJK>
-0x5854 # <CJK>
-0x5857 # <CJK>
-0x5858 # <CJK>
-0x5859 # <CJK>
-0x585A # <CJK>
-0x585E # <CJK>
-0x5862 # <CJK>
-0x5869 # <CJK>
-0x586B # <CJK>
-0x5870 # <CJK>
-0x5872 # <CJK>
-0x5875 # <CJK>
-0x5879 # <CJK>
-0x587E # <CJK>
-0x5883 # <CJK>
-0x5885 # <CJK>
-0x5893 # <CJK>
-0x5897 # <CJK>
-0x589C # <CJK>
-0x589F # <CJK>
-0x58A8 # <CJK>
-0x58AB # <CJK>
-0x58AE # <CJK>
-0x58B3 # <CJK>
-0x58B8 # <CJK>
-0x58B9 # <CJK>
-0x58BA # <CJK>
-0x58BB # <CJK>
-0x58BE # <CJK>
-0x58C1 # <CJK>
-0x58C5 # <CJK>
-0x58C7 # <CJK>
-0x58CA # <CJK>
-0x58CC # <CJK>
-0x58D1 # <CJK>
-0x58D3 # <CJK>
-0x58D5 # <CJK>
-0x58D7 # <CJK>
-0x58D8 # <CJK>
-0x58D9 # <CJK>
-0x58DC # <CJK>
-0x58DE # <CJK>
-0x58DF # <CJK>
-0x58E4 # <CJK>
-0x58E5 # <CJK>
-0x58EB # <CJK>
-0x58EC # <CJK>
-0x58EE # <CJK>
-0x58EF # <CJK>
-0x58F0 # <CJK>
-0x58F1 # <CJK>
-0x58F2 # <CJK>
-0x58F7 # <CJK>
-0x58F9 # <CJK>
-0x58FA # <CJK>
-0x58FB # <CJK>
-0x58FC # <CJK>
-0x58FD # <CJK>
-0x5902 # <CJK>
-0x5909 # <CJK>
-0x590A # <CJK>
-0x590F # <CJK>
-0x5910 # <CJK>
-0x5915 # <CJK>
-0x5916 # <CJK>
-0x5918 # <CJK>
-0x5919 # <CJK>
-0x591A # <CJK>
-0x591B # <CJK>
-0x591C # <CJK>
-0x5922 # <CJK>
-0x5925 # <CJK>
-0x5927 # <CJK>
-0x5929 # <CJK>
-0x592A # <CJK>
-0x592B # <CJK>
-0x592C # <CJK>
-0x592D # <CJK>
-0x592E # <CJK>
-0x5931 # <CJK>
-0x5932 # <CJK>
-0x5937 # <CJK>
-0x5938 # <CJK>
-0x593E # <CJK>
-0x5944 # <CJK>
-0x5947 # <CJK>
-0x5948 # <CJK>
-0x5949 # <CJK>
-0x594E # <CJK>
-0x594F # <CJK>
-0x5950 # <CJK>
-0x5951 # <CJK>
-0x5954 # <CJK>
-0x5955 # <CJK>
-0x5957 # <CJK>
-0x5958 # <CJK>
-0x595A # <CJK>
-0x5960 # <CJK>
-0x5962 # <CJK>
-0x5965 # <CJK>
-0x5967 # <CJK>
-0x5968 # <CJK>
-0x5969 # <CJK>
-0x596A # <CJK>
-0x596C # <CJK>
-0x596E # <CJK>
-0x5973 # <CJK>
-0x5974 # <CJK>
-0x5978 # <CJK>
-0x597D # <CJK>
-0x5981 # <CJK>
-0x5982 # <CJK>
-0x5983 # <CJK>
-0x5984 # <CJK>
-0x598A # <CJK>
-0x598D # <CJK>
-0x5993 # <CJK>
-0x5996 # <CJK>
-0x5999 # <CJK>
-0x599B # <CJK>
-0x599D # <CJK>
-0x59A3 # <CJK>
-0x59A5 # <CJK>
-0x59A8 # <CJK>
-0x59AC # <CJK>
-0x59B2 # <CJK>
-0x59B9 # <CJK>
-0x59BB # <CJK>
-0x59BE # <CJK>
-0x59C6 # <CJK>
-0x59C9 # <CJK>
-0x59CB # <CJK>
-0x59D0 # <CJK>
-0x59D1 # <CJK>
-0x59D3 # <CJK>
-0x59D4 # <CJK>
-0x59D9 # <CJK>
-0x59DA # <CJK>
-0x59DC # <CJK>
-0x59E5 # <CJK>
-0x59E6 # <CJK>
-0x59E8 # <CJK>
-0x59EA # <CJK>
-0x59EB # <CJK>
-0x59F6 # <CJK>
-0x59FB # <CJK>
-0x59FF # <CJK>
-0x5A01 # <CJK>
-0x5A03 # <CJK>
-0x5A09 # <CJK>
-0x5A11 # <CJK>
-0x5A18 # <CJK>
-0x5A1A # <CJK>
-0x5A1C # <CJK>
-0x5A1F # <CJK>
-0x5A20 # <CJK>
-0x5A25 # <CJK>
-0x5A29 # <CJK>
-0x5A2F # <CJK>
-0x5A35 # <CJK>
-0x5A36 # <CJK>
-0x5A3C # <CJK>
-0x5A40 # <CJK>
-0x5A41 # <CJK>
-0x5A46 # <CJK>
-0x5A49 # <CJK>
-0x5A5A # <CJK>
-0x5A62 # <CJK>
-0x5A66 # <CJK>
-0x5A6A # <CJK>
-0x5A6C # <CJK>
-0x5A7F # <CJK>
-0x5A92 # <CJK>
-0x5A9A # <CJK>
-0x5A9B # <CJK>
-0x5ABC # <CJK>
-0x5ABD # <CJK>
-0x5ABE # <CJK>
-0x5AC1 # <CJK>
-0x5AC2 # <CJK>
-0x5AC9 # <CJK>
-0x5ACB # <CJK>
-0x5ACC # <CJK>
-0x5AD0 # <CJK>
-0x5AD6 # <CJK>
-0x5AD7 # <CJK>
-0x5AE1 # <CJK>
-0x5AE3 # <CJK>
-0x5AE6 # <CJK>
-0x5AE9 # <CJK>
-0x5AFA # <CJK>
-0x5AFB # <CJK>
-0x5B09 # <CJK>
-0x5B0B # <CJK>
-0x5B0C # <CJK>
-0x5B16 # <CJK>
-0x5B22 # <CJK>
-0x5B2A # <CJK>
-0x5B2C # <CJK>
-0x5B30 # <CJK>
-0x5B32 # <CJK>
-0x5B36 # <CJK>
-0x5B3E # <CJK>
-0x5B40 # <CJK>
-0x5B43 # <CJK>
-0x5B45 # <CJK>
-0x5B50 # <CJK>
-0x5B51 # <CJK>
-0x5B54 # <CJK>
-0x5B55 # <CJK>
-0x5B57 # <CJK>
-0x5B58 # <CJK>
-0x5B5A # <CJK>
-0x5B5B # <CJK>
-0x5B5C # <CJK>
-0x5B5D # <CJK>
-0x5B5F # <CJK>
-0x5B63 # <CJK>
-0x5B64 # <CJK>
-0x5B65 # <CJK>
-0x5B66 # <CJK>
-0x5B69 # <CJK>
-0x5B6B # <CJK>
-0x5B70 # <CJK>
-0x5B71 # <CJK>
-0x5B73 # <CJK>
-0x5B75 # <CJK>
-0x5B78 # <CJK>
-0x5B7A # <CJK>
-0x5B80 # <CJK>
-0x5B83 # <CJK>
-0x5B85 # <CJK>
-0x5B87 # <CJK>
-0x5B88 # <CJK>
-0x5B89 # <CJK>
-0x5B8B # <CJK>
-0x5B8C # <CJK>
-0x5B8D # <CJK>
-0x5B8F # <CJK>
-0x5B95 # <CJK>
-0x5B97 # <CJK>
-0x5B98 # <CJK>
-0x5B99 # <CJK>
-0x5B9A # <CJK>
-0x5B9B # <CJK>
-0x5B9C # <CJK>
-0x5B9D # <CJK>
-0x5B9F # <CJK>
-0x5BA2 # <CJK>
-0x5BA3 # <CJK>
-0x5BA4 # <CJK>
-0x5BA5 # <CJK>
-0x5BA6 # <CJK>
-0x5BAE # <CJK>
-0x5BB0 # <CJK>
-0x5BB3 # <CJK>
-0x5BB4 # <CJK>
-0x5BB5 # <CJK>
-0x5BB6 # <CJK>
-0x5BB8 # <CJK>
-0x5BB9 # <CJK>
-0x5BBF # <CJK>
-0x5BC2 # <CJK>
-0x5BC3 # <CJK>
-0x5BC4 # <CJK>
-0x5BC5 # <CJK>
-0x5BC6 # <CJK>
-0x5BC7 # <CJK>
-0x5BC9 # <CJK>
-0x5BCC # <CJK>
-0x5BD0 # <CJK>
-0x5BD2 # <CJK>
-0x5BD3 # <CJK>
-0x5BD4 # <CJK>
-0x5BDB # <CJK>
-0x5BDD # <CJK>
-0x5BDE # <CJK>
-0x5BDF # <CJK>
-0x5BE1 # <CJK>
-0x5BE2 # <CJK>
-0x5BE4 # <CJK>
-0x5BE5 # <CJK>
-0x5BE6 # <CJK>
-0x5BE7 # <CJK>
-0x5BE8 # <CJK>
-0x5BE9 # <CJK>
-0x5BEB # <CJK>
-0x5BEE # <CJK>
-0x5BF0 # <CJK>
-0x5BF3 # <CJK>
-0x5BF5 # <CJK>
-0x5BF6 # <CJK>
-0x5BF8 # <CJK>
-0x5BFA # <CJK>
-0x5BFE # <CJK>
-0x5BFF # <CJK>
-0x5C01 # <CJK>
-0x5C02 # <CJK>
-0x5C04 # <CJK>
-0x5C05 # <CJK>
-0x5C06 # <CJK>
-0x5C07 # <CJK>
-0x5C08 # <CJK>
-0x5C09 # <CJK>
-0x5C0A # <CJK>
-0x5C0B # <CJK>
-0x5C0D # <CJK>
-0x5C0E # <CJK>
-0x5C0F # <CJK>
-0x5C11 # <CJK>
-0x5C13 # <CJK>
-0x5C16 # <CJK>
-0x5C1A # <CJK>
-0x5C20 # <CJK>
-0x5C22 # <CJK>
-0x5C24 # <CJK>
-0x5C28 # <CJK>
-0x5C2D # <CJK>
-0x5C31 # <CJK>
-0x5C38 # <CJK>
-0x5C39 # <CJK>
-0x5C3A # <CJK>
-0x5C3B # <CJK>
-0x5C3C # <CJK>
-0x5C3D # <CJK>
-0x5C3E # <CJK>
-0x5C3F # <CJK>
-0x5C40 # <CJK>
-0x5C41 # <CJK>
-0x5C45 # <CJK>
-0x5C46 # <CJK>
-0x5C48 # <CJK>
-0x5C4A # <CJK>
-0x5C4B # <CJK>
-0x5C4D # <CJK>
-0x5C4E # <CJK>
-0x5C4F # <CJK>
-0x5C50 # <CJK>
-0x5C51 # <CJK>
-0x5C53 # <CJK>
-0x5C55 # <CJK>
-0x5C5E # <CJK>
-0x5C60 # <CJK>
-0x5C61 # <CJK>
-0x5C64 # <CJK>
-0x5C65 # <CJK>
-0x5C6C # <CJK>
-0x5C6E # <CJK>
-0x5C6F # <CJK>
-0x5C71 # <CJK>
-0x5C76 # <CJK>
-0x5C79 # <CJK>
-0x5C8C # <CJK>
-0x5C90 # <CJK>
-0x5C91 # <CJK>
-0x5C94 # <CJK>
-0x5CA1 # <CJK>
-0x5CA8 # <CJK>
-0x5CA9 # <CJK>
-0x5CAB # <CJK>
-0x5CAC # <CJK>
-0x5CB1 # <CJK>
-0x5CB3 # <CJK>
-0x5CB6 # <CJK>
-0x5CB7 # <CJK>
-0x5CB8 # <CJK>
-0x5CBB # <CJK>
-0x5CBC # <CJK>
-0x5CBE # <CJK>
-0x5CC5 # <CJK>
-0x5CC7 # <CJK>
-0x5CD9 # <CJK>
-0x5CE0 # <CJK>
-0x5CE1 # <CJK>
-0x5CE8 # <CJK>
-0x5CE9 # <CJK>
-0x5CEA # <CJK>
-0x5CED # <CJK>
-0x5CEF # <CJK>
-0x5CF0 # <CJK>
-0x5CF6 # <CJK>
-0x5CFA # <CJK>
-0x5CFB # <CJK>
-0x5CFD # <CJK>
-0x5D07 # <CJK>
-0x5D0B # <CJK>
-0x5D0E # <CJK>
-0x5D11 # <CJK>
-0x5D14 # <CJK>
-0x5D15 # <CJK>
-0x5D16 # <CJK>
-0x5D17 # <CJK>
-0x5D18 # <CJK>
-0x5D19 # <CJK>
-0x5D1A # <CJK>
-0x5D1B # <CJK>
-0x5D1F # <CJK>
-0x5D22 # <CJK>
-0x5D29 # <CJK>
-0x5D4B # <CJK>
-0x5D4C # <CJK>
-0x5D4E # <CJK>
-0x5D50 # <CJK>
-0x5D52 # <CJK>
-0x5D5C # <CJK>
-0x5D69 # <CJK>
-0x5D6C # <CJK>
-0x5D6F # <CJK>
-0x5D73 # <CJK>
-0x5D76 # <CJK>
-0x5D82 # <CJK>
-0x5D84 # <CJK>
-0x5D87 # <CJK>
-0x5D8B # <CJK>
-0x5D8C # <CJK>
-0x5D90 # <CJK>
-0x5D9D # <CJK>
-0x5DA2 # <CJK>
-0x5DAC # <CJK>
-0x5DAE # <CJK>
-0x5DB7 # <CJK>
-0x5DBA # <CJK>
-0x5DBC # <CJK>
-0x5DBD # <CJK>
-0x5DC9 # <CJK>
-0x5DCC # <CJK>
-0x5DCD # <CJK>
-0x5DD2 # <CJK>
-0x5DD3 # <CJK>
-0x5DD6 # <CJK>
-0x5DDB # <CJK>
-0x5DDD # <CJK>
-0x5DDE # <CJK>
-0x5DE1 # <CJK>
-0x5DE3 # <CJK>
-0x5DE5 # <CJK>
-0x5DE6 # <CJK>
-0x5DE7 # <CJK>
-0x5DE8 # <CJK>
-0x5DEB # <CJK>
-0x5DEE # <CJK>
-0x5DF1 # <CJK>
-0x5DF2 # <CJK>
-0x5DF3 # <CJK>
-0x5DF4 # <CJK>
-0x5DF5 # <CJK>
-0x5DF7 # <CJK>
-0x5DFB # <CJK>
-0x5DFD # <CJK>
-0x5DFE # <CJK>
-0x5E02 # <CJK>
-0x5E03 # <CJK>
-0x5E06 # <CJK>
-0x5E0B # <CJK>
-0x5E0C # <CJK>
-0x5E11 # <CJK>
-0x5E16 # <CJK>
-0x5E19 # <CJK>
-0x5E1A # <CJK>
-0x5E1B # <CJK>
-0x5E1D # <CJK>
-0x5E25 # <CJK>
-0x5E2B # <CJK>
-0x5E2D # <CJK>
-0x5E2F # <CJK>
-0x5E30 # <CJK>
-0x5E33 # <CJK>
-0x5E36 # <CJK>
-0x5E37 # <CJK>
-0x5E38 # <CJK>
-0x5E3D # <CJK>
-0x5E40 # <CJK>
-0x5E43 # <CJK>
-0x5E44 # <CJK>
-0x5E45 # <CJK>
-0x5E47 # <CJK>
-0x5E4C # <CJK>
-0x5E4E # <CJK>
-0x5E54 # <CJK>
-0x5E55 # <CJK>
-0x5E57 # <CJK>
-0x5E5F # <CJK>
-0x5E61 # <CJK>
-0x5E62 # <CJK>
-0x5E63 # <CJK>
-0x5E64 # <CJK>
-0x5E72 # <CJK>
-0x5E73 # <CJK>
-0x5E74 # <CJK>
-0x5E75 # <CJK>
-0x5E76 # <CJK>
-0x5E78 # <CJK>
-0x5E79 # <CJK>
-0x5E7A # <CJK>
-0x5E7B # <CJK>
-0x5E7C # <CJK>
-0x5E7D # <CJK>
-0x5E7E # <CJK>
-0x5E7F # <CJK>
-0x5E81 # <CJK>
-0x5E83 # <CJK>
-0x5E84 # <CJK>
-0x5E87 # <CJK>
-0x5E8A # <CJK>
-0x5E8F # <CJK>
-0x5E95 # <CJK>
-0x5E96 # <CJK>
-0x5E97 # <CJK>
-0x5E9A # <CJK>
-0x5E9C # <CJK>
-0x5EA0 # <CJK>
-0x5EA6 # <CJK>
-0x5EA7 # <CJK>
-0x5EAB # <CJK>
-0x5EAD # <CJK>
-0x5EB5 # <CJK>
-0x5EB6 # <CJK>
-0x5EB7 # <CJK>
-0x5EB8 # <CJK>
-0x5EC1 # <CJK>
-0x5EC2 # <CJK>
-0x5EC3 # <CJK>
-0x5EC8 # <CJK>
-0x5EC9 # <CJK>
-0x5ECA # <CJK>
-0x5ECF # <CJK>
-0x5ED0 # <CJK>
-0x5ED3 # <CJK>
-0x5ED6 # <CJK>
-0x5EDA # <CJK>
-0x5EDB # <CJK>
-0x5EDD # <CJK>
-0x5EDF # <CJK>
-0x5EE0 # <CJK>
-0x5EE1 # <CJK>
-0x5EE2 # <CJK>
-0x5EE3 # <CJK>
-0x5EE8 # <CJK>
-0x5EE9 # <CJK>
-0x5EEC # <CJK>
-0x5EF0 # <CJK>
-0x5EF1 # <CJK>
-0x5EF3 # <CJK>
-0x5EF4 # <CJK>
-0x5EF6 # <CJK>
-0x5EF7 # <CJK>
-0x5EF8 # <CJK>
-0x5EFA # <CJK>
-0x5EFB # <CJK>
-0x5EFC # <CJK>
-0x5EFE # <CJK>
-0x5EFF # <CJK>
-0x5F01 # <CJK>
-0x5F03 # <CJK>
-0x5F04 # <CJK>
-0x5F09 # <CJK>
-0x5F0A # <CJK>
-0x5F0B # <CJK>
-0x5F0C # <CJK>
-0x5F0D # <CJK>
-0x5F0F # <CJK>
-0x5F10 # <CJK>
-0x5F11 # <CJK>
-0x5F13 # <CJK>
-0x5F14 # <CJK>
-0x5F15 # <CJK>
-0x5F16 # <CJK>
-0x5F17 # <CJK>
-0x5F18 # <CJK>
-0x5F1B # <CJK>
-0x5F1F # <CJK>
-0x5F25 # <CJK>
-0x5F26 # <CJK>
-0x5F27 # <CJK>
-0x5F29 # <CJK>
-0x5F2D # <CJK>
-0x5F2F # <CJK>
-0x5F31 # <CJK>
-0x5F35 # <CJK>
-0x5F37 # <CJK>
-0x5F38 # <CJK>
-0x5F3C # <CJK>
-0x5F3E # <CJK>
-0x5F41 # <CJK>
-0x5F48 # <CJK>
-0x5F4A # <CJK>
-0x5F4C # <CJK>
-0x5F4E # <CJK>
-0x5F51 # <CJK>
-0x5F53 # <CJK>
-0x5F56 # <CJK>
-0x5F57 # <CJK>
-0x5F59 # <CJK>
-0x5F5C # <CJK>
-0x5F5D # <CJK>
-0x5F61 # <CJK>
-0x5F62 # <CJK>
-0x5F66 # <CJK>
-0x5F69 # <CJK>
-0x5F6A # <CJK>
-0x5F6B # <CJK>
-0x5F6C # <CJK>
-0x5F6D # <CJK>
-0x5F70 # <CJK>
-0x5F71 # <CJK>
-0x5F73 # <CJK>
-0x5F77 # <CJK>
-0x5F79 # <CJK>
-0x5F7C # <CJK>
-0x5F7F # <CJK>
-0x5F80 # <CJK>
-0x5F81 # <CJK>
-0x5F82 # <CJK>
-0x5F83 # <CJK>
-0x5F84 # <CJK>
-0x5F85 # <CJK>
-0x5F87 # <CJK>
-0x5F88 # <CJK>
-0x5F8A # <CJK>
-0x5F8B # <CJK>
-0x5F8C # <CJK>
-0x5F90 # <CJK>
-0x5F91 # <CJK>
-0x5F92 # <CJK>
-0x5F93 # <CJK>
-0x5F97 # <CJK>
-0x5F98 # <CJK>
-0x5F99 # <CJK>
-0x5F9E # <CJK>
-0x5FA0 # <CJK>
-0x5FA1 # <CJK>
-0x5FA8 # <CJK>
-0x5FA9 # <CJK>
-0x5FAA # <CJK>
-0x5FAD # <CJK>
-0x5FAE # <CJK>
-0x5FB3 # <CJK>
-0x5FB4 # <CJK>
-0x5FB9 # <CJK>
-0x5FBC # <CJK>
-0x5FBD # <CJK>
-0x5FC3 # <CJK>
-0x5FC5 # <CJK>
-0x5FCC # <CJK>
-0x5FCD # <CJK>
-0x5FD6 # <CJK>
-0x5FD7 # <CJK>
-0x5FD8 # <CJK>
-0x5FD9 # <CJK>
-0x5FDC # <CJK>
-0x5FDD # <CJK>
-0x5FE0 # <CJK>
-0x5FE4 # <CJK>
-0x5FEB # <CJK>
-0x5FF0 # <CJK>
-0x5FF1 # <CJK>
-0x5FF5 # <CJK>
-0x5FF8 # <CJK>
-0x5FFB # <CJK>
-0x5FFD # <CJK>
-0x5FFF # <CJK>
-0x600E # <CJK>
-0x600F # <CJK>
-0x6010 # <CJK>
-0x6012 # <CJK>
-0x6015 # <CJK>
-0x6016 # <CJK>
-0x6019 # <CJK>
-0x601B # <CJK>
-0x601C # <CJK>
-0x601D # <CJK>
-0x6020 # <CJK>
-0x6021 # <CJK>
-0x6025 # <CJK>
-0x6026 # <CJK>
-0x6027 # <CJK>
-0x6028 # <CJK>
-0x6029 # <CJK>
-0x602A # <CJK>
-0x602B # <CJK>
-0x602F # <CJK>
-0x6031 # <CJK>
-0x603A # <CJK>
-0x6041 # <CJK>
-0x6042 # <CJK>
-0x6043 # <CJK>
-0x6046 # <CJK>
-0x604A # <CJK>
-0x604B # <CJK>
-0x604D # <CJK>
-0x6050 # <CJK>
-0x6052 # <CJK>
-0x6055 # <CJK>
-0x6059 # <CJK>
-0x605A # <CJK>
-0x605F # <CJK>
-0x6060 # <CJK>
-0x6062 # <CJK>
-0x6063 # <CJK>
-0x6064 # <CJK>
-0x6065 # <CJK>
-0x6068 # <CJK>
-0x6069 # <CJK>
-0x606A # <CJK>
-0x606B # <CJK>
-0x606C # <CJK>
-0x606D # <CJK>
-0x606F # <CJK>
-0x6070 # <CJK>
-0x6075 # <CJK>
-0x6077 # <CJK>
-0x6081 # <CJK>
-0x6083 # <CJK>
-0x6084 # <CJK>
-0x6089 # <CJK>
-0x608B # <CJK>
-0x608C # <CJK>
-0x608D # <CJK>
-0x6092 # <CJK>
-0x6094 # <CJK>
-0x6096 # <CJK>
-0x6097 # <CJK>
-0x609A # <CJK>
-0x609B # <CJK>
-0x609F # <CJK>
-0x60A0 # <CJK>
-0x60A3 # <CJK>
-0x60A6 # <CJK>
-0x60A7 # <CJK>
-0x60A9 # <CJK>
-0x60AA # <CJK>
-0x60B2 # <CJK>
-0x60B3 # <CJK>
-0x60B4 # <CJK>
-0x60B5 # <CJK>
-0x60B6 # <CJK>
-0x60B8 # <CJK>
-0x60BC # <CJK>
-0x60BD # <CJK>
-0x60C5 # <CJK>
-0x60C6 # <CJK>
-0x60C7 # <CJK>
-0x60D1 # <CJK>
-0x60D3 # <CJK>
-0x60D8 # <CJK>
-0x60DA # <CJK>
-0x60DC # <CJK>
-0x60DF # <CJK>
-0x60E0 # <CJK>
-0x60E1 # <CJK>
-0x60E3 # <CJK>
-0x60E7 # <CJK>
-0x60E8 # <CJK>
-0x60F0 # <CJK>
-0x60F1 # <CJK>
-0x60F3 # <CJK>
-0x60F4 # <CJK>
-0x60F6 # <CJK>
-0x60F7 # <CJK>
-0x60F9 # <CJK>
-0x60FA # <CJK>
-0x60FB # <CJK>
-0x6100 # <CJK>
-0x6101 # <CJK>
-0x6103 # <CJK>
-0x6106 # <CJK>
-0x6108 # <CJK>
-0x6109 # <CJK>
-0x610D # <CJK>
-0x610E # <CJK>
-0x610F # <CJK>
-0x6115 # <CJK>
-0x611A # <CJK>
-0x611B # <CJK>
-0x611F # <CJK>
-0x6121 # <CJK>
-0x6127 # <CJK>
-0x6128 # <CJK>
-0x612C # <CJK>
-0x6134 # <CJK>
-0x613C # <CJK>
-0x613D # <CJK>
-0x613E # <CJK>
-0x613F # <CJK>
-0x6142 # <CJK>
-0x6144 # <CJK>
-0x6147 # <CJK>
-0x6148 # <CJK>
-0x614A # <CJK>
-0x614B # <CJK>
-0x614C # <CJK>
-0x614D # <CJK>
-0x614E # <CJK>
-0x6153 # <CJK>
-0x6155 # <CJK>
-0x6158 # <CJK>
-0x6159 # <CJK>
-0x615A # <CJK>
-0x615D # <CJK>
-0x615F # <CJK>
-0x6162 # <CJK>
-0x6163 # <CJK>
-0x6165 # <CJK>
-0x6167 # <CJK>
-0x6168 # <CJK>
-0x616B # <CJK>
-0x616E # <CJK>
-0x616F # <CJK>
-0x6170 # <CJK>
-0x6171 # <CJK>
-0x6173 # <CJK>
-0x6174 # <CJK>
-0x6175 # <CJK>
-0x6176 # <CJK>
-0x6177 # <CJK>
-0x617E # <CJK>
-0x6182 # <CJK>
-0x6187 # <CJK>
-0x618A # <CJK>
-0x618E # <CJK>
-0x6190 # <CJK>
-0x6191 # <CJK>
-0x6194 # <CJK>
-0x6196 # <CJK>
-0x6199 # <CJK>
-0x619A # <CJK>
-0x61A4 # <CJK>
-0x61A7 # <CJK>
-0x61A9 # <CJK>
-0x61AB # <CJK>
-0x61AC # <CJK>
-0x61AE # <CJK>
-0x61B2 # <CJK>
-0x61B6 # <CJK>
-0x61BA # <CJK>
-0x61BE # <CJK>
-0x61C3 # <CJK>
-0x61C6 # <CJK>
-0x61C7 # <CJK>
-0x61C8 # <CJK>
-0x61C9 # <CJK>
-0x61CA # <CJK>
-0x61CB # <CJK>
-0x61CC # <CJK>
-0x61CD # <CJK>
-0x61D0 # <CJK>
-0x61E3 # <CJK>
-0x61E6 # <CJK>
-0x61F2 # <CJK>
-0x61F4 # <CJK>
-0x61F6 # <CJK>
-0x61F7 # <CJK>
-0x61F8 # <CJK>
-0x61FA # <CJK>
-0x61FC # <CJK>
-0x61FD # <CJK>
-0x61FE # <CJK>
-0x61FF # <CJK>
-0x6200 # <CJK>
-0x6208 # <CJK>
-0x6209 # <CJK>
-0x620A # <CJK>
-0x620C # <CJK>
-0x620D # <CJK>
-0x620E # <CJK>
-0x6210 # <CJK>
-0x6211 # <CJK>
-0x6212 # <CJK>
-0x6214 # <CJK>
-0x6216 # <CJK>
-0x621A # <CJK>
-0x621B # <CJK>
-0x621D # <CJK>
-0x621E # <CJK>
-0x621F # <CJK>
-0x6221 # <CJK>
-0x6226 # <CJK>
-0x622A # <CJK>
-0x622E # <CJK>
-0x622F # <CJK>
-0x6230 # <CJK>
-0x6232 # <CJK>
-0x6233 # <CJK>
-0x6234 # <CJK>
-0x6238 # <CJK>
-0x623B # <CJK>
-0x623F # <CJK>
-0x6240 # <CJK>
-0x6241 # <CJK>
-0x6247 # <CJK>
-0x6248 # <CJK>
-0x6249 # <CJK>
-0x624B # <CJK>
-0x624D # <CJK>
-0x624E # <CJK>
-0x6253 # <CJK>
-0x6255 # <CJK>
-0x6258 # <CJK>
-0x625B # <CJK>
-0x625E # <CJK>
-0x6260 # <CJK>
-0x6263 # <CJK>
-0x6268 # <CJK>
-0x626E # <CJK>
-0x6271 # <CJK>
-0x6276 # <CJK>
-0x6279 # <CJK>
-0x627C # <CJK>
-0x627E # <CJK>
-0x627F # <CJK>
-0x6280 # <CJK>
-0x6282 # <CJK>
-0x6283 # <CJK>
-0x6284 # <CJK>
-0x6289 # <CJK>
-0x628A # <CJK>
-0x6291 # <CJK>
-0x6292 # <CJK>
-0x6293 # <CJK>
-0x6294 # <CJK>
-0x6295 # <CJK>
-0x6296 # <CJK>
-0x6297 # <CJK>
-0x6298 # <CJK>
-0x629B # <CJK>
-0x629C # <CJK>
-0x629E # <CJK>
-0x62AB # <CJK>
-0x62AC # <CJK>
-0x62B1 # <CJK>
-0x62B5 # <CJK>
-0x62B9 # <CJK>
-0x62BB # <CJK>
-0x62BC # <CJK>
-0x62BD # <CJK>
-0x62C2 # <CJK>
-0x62C5 # <CJK>
-0x62C6 # <CJK>
-0x62C7 # <CJK>
-0x62C8 # <CJK>
-0x62C9 # <CJK>
-0x62CA # <CJK>
-0x62CC # <CJK>
-0x62CD # <CJK>
-0x62CF # <CJK>
-0x62D0 # <CJK>
-0x62D1 # <CJK>
-0x62D2 # <CJK>
-0x62D3 # <CJK>
-0x62D4 # <CJK>
-0x62D7 # <CJK>
-0x62D8 # <CJK>
-0x62D9 # <CJK>
-0x62DB # <CJK>
-0x62DC # <CJK>
-0x62DD # <CJK>
-0x62E0 # <CJK>
-0x62E1 # <CJK>
-0x62EC # <CJK>
-0x62ED # <CJK>
-0x62EE # <CJK>
-0x62EF # <CJK>
-0x62F1 # <CJK>
-0x62F3 # <CJK>
-0x62F5 # <CJK>
-0x62F6 # <CJK>
-0x62F7 # <CJK>
-0x62FE # <CJK>
-0x62FF # <CJK>
-0x6301 # <CJK>
-0x6302 # <CJK>
-0x6307 # <CJK>
-0x6308 # <CJK>
-0x6309 # <CJK>
-0x630C # <CJK>
-0x6311 # <CJK>
-0x6319 # <CJK>
-0x631F # <CJK>
-0x6327 # <CJK>
-0x6328 # <CJK>
-0x632B # <CJK>
-0x632F # <CJK>
-0x633A # <CJK>
-0x633D # <CJK>
-0x633E # <CJK>
-0x633F # <CJK>
-0x6349 # <CJK>
-0x634C # <CJK>
-0x634D # <CJK>
-0x634F # <CJK>
-0x6350 # <CJK>
-0x6355 # <CJK>
-0x6357 # <CJK>
-0x635C # <CJK>
-0x6367 # <CJK>
-0x6368 # <CJK>
-0x6369 # <CJK>
-0x636B # <CJK>
-0x636E # <CJK>
-0x6372 # <CJK>
-0x6376 # <CJK>
-0x6377 # <CJK>
-0x637A # <CJK>
-0x637B # <CJK>
-0x6380 # <CJK>
-0x6383 # <CJK>
-0x6388 # <CJK>
-0x6389 # <CJK>
-0x638C # <CJK>
-0x638E # <CJK>
-0x638F # <CJK>
-0x6392 # <CJK>
-0x6396 # <CJK>
-0x6398 # <CJK>
-0x639B # <CJK>
-0x639F # <CJK>
-0x63A0 # <CJK>
-0x63A1 # <CJK>
-0x63A2 # <CJK>
-0x63A3 # <CJK>
-0x63A5 # <CJK>
-0x63A7 # <CJK>
-0x63A8 # <CJK>
-0x63A9 # <CJK>
-0x63AA # <CJK>
-0x63AB # <CJK>
-0x63AC # <CJK>
-0x63B2 # <CJK>
-0x63B4 # <CJK>
-0x63B5 # <CJK>
-0x63BB # <CJK>
-0x63BE # <CJK>
-0x63C0 # <CJK>
-0x63C3 # <CJK>
-0x63C4 # <CJK>
-0x63C6 # <CJK>
-0x63C9 # <CJK>
-0x63CF # <CJK>
-0x63D0 # <CJK>
-0x63D2 # <CJK>
-0x63D6 # <CJK>
-0x63DA # <CJK>
-0x63DB # <CJK>
-0x63E1 # <CJK>
-0x63E3 # <CJK>
-0x63E9 # <CJK>
-0x63EE # <CJK>
-0x63F4 # <CJK>
-0x63F6 # <CJK>
-0x63FA # <CJK>
-0x6406 # <CJK>
-0x640D # <CJK>
-0x640F # <CJK>
-0x6413 # <CJK>
-0x6416 # <CJK>
-0x6417 # <CJK>
-0x641C # <CJK>
-0x6426 # <CJK>
-0x6428 # <CJK>
-0x642C # <CJK>
-0x642D # <CJK>
-0x6434 # <CJK>
-0x6436 # <CJK>
-0x643A # <CJK>
-0x643E # <CJK>
-0x6442 # <CJK>
-0x644E # <CJK>
-0x6458 # <CJK>
-0x6467 # <CJK>
-0x6469 # <CJK>
-0x646F # <CJK>
-0x6476 # <CJK>
-0x6478 # <CJK>
-0x647A # <CJK>
-0x6483 # <CJK>
-0x6488 # <CJK>
-0x6492 # <CJK>
-0x6493 # <CJK>
-0x6495 # <CJK>
-0x649A # <CJK>
-0x649E # <CJK>
-0x64A4 # <CJK>
-0x64A5 # <CJK>
-0x64A9 # <CJK>
-0x64AB # <CJK>
-0x64AD # <CJK>
-0x64AE # <CJK>
-0x64B0 # <CJK>
-0x64B2 # <CJK>
-0x64B9 # <CJK>
-0x64BB # <CJK>
-0x64BC # <CJK>
-0x64C1 # <CJK>
-0x64C2 # <CJK>
-0x64C5 # <CJK>
-0x64C7 # <CJK>
-0x64CD # <CJK>
-0x64D2 # <CJK>
-0x64D4 # <CJK>
-0x64D8 # <CJK>
-0x64DA # <CJK>
-0x64E0 # <CJK>
-0x64E1 # <CJK>
-0x64E2 # <CJK>
-0x64E3 # <CJK>
-0x64E6 # <CJK>
-0x64E7 # <CJK>
-0x64EC # <CJK>
-0x64EF # <CJK>
-0x64F1 # <CJK>
-0x64F2 # <CJK>
-0x64F4 # <CJK>
-0x64F6 # <CJK>
-0x64FA # <CJK>
-0x64FD # <CJK>
-0x64FE # <CJK>
-0x6500 # <CJK>
-0x6505 # <CJK>
-0x6518 # <CJK>
-0x651C # <CJK>
-0x651D # <CJK>
-0x6523 # <CJK>
-0x6524 # <CJK>
-0x652A # <CJK>
-0x652B # <CJK>
-0x652C # <CJK>
-0x652F # <CJK>
-0x6534 # <CJK>
-0x6535 # <CJK>
-0x6536 # <CJK>
-0x6537 # <CJK>
-0x6538 # <CJK>
-0x6539 # <CJK>
-0x653B # <CJK>
-0x653E # <CJK>
-0x653F # <CJK>
-0x6545 # <CJK>
-0x6548 # <CJK>
-0x654D # <CJK>
-0x654F # <CJK>
-0x6551 # <CJK>
-0x6555 # <CJK>
-0x6556 # <CJK>
-0x6557 # <CJK>
-0x6558 # <CJK>
-0x6559 # <CJK>
-0x655D # <CJK>
-0x655E # <CJK>
-0x6562 # <CJK>
-0x6563 # <CJK>
-0x6566 # <CJK>
-0x656C # <CJK>
-0x6570 # <CJK>
-0x6572 # <CJK>
-0x6574 # <CJK>
-0x6575 # <CJK>
-0x6577 # <CJK>
-0x6578 # <CJK>
-0x6582 # <CJK>
-0x6583 # <CJK>
-0x6587 # <CJK>
-0x6588 # <CJK>
-0x6589 # <CJK>
-0x658C # <CJK>
-0x658E # <CJK>
-0x6590 # <CJK>
-0x6591 # <CJK>
-0x6597 # <CJK>
-0x6599 # <CJK>
-0x659B # <CJK>
-0x659C # <CJK>
-0x659F # <CJK>
-0x65A1 # <CJK>
-0x65A4 # <CJK>
-0x65A5 # <CJK>
-0x65A7 # <CJK>
-0x65AB # <CJK>
-0x65AC # <CJK>
-0x65AD # <CJK>
-0x65AF # <CJK>
-0x65B0 # <CJK>
-0x65B7 # <CJK>
-0x65B9 # <CJK>
-0x65BC # <CJK>
-0x65BD # <CJK>
-0x65C1 # <CJK>
-0x65C3 # <CJK>
-0x65C4 # <CJK>
-0x65C5 # <CJK>
-0x65C6 # <CJK>
-0x65CB # <CJK>
-0x65CC # <CJK>
-0x65CF # <CJK>
-0x65D2 # <CJK>
-0x65D7 # <CJK>
-0x65D9 # <CJK>
-0x65DB # <CJK>
-0x65E0 # <CJK>
-0x65E1 # <CJK>
-0x65E2 # <CJK>
-0x65E5 # <CJK>
-0x65E6 # <CJK>
-0x65E7 # <CJK>
-0x65E8 # <CJK>
-0x65E9 # <CJK>
-0x65EC # <CJK>
-0x65ED # <CJK>
-0x65F1 # <CJK>
-0x65FA # <CJK>
-0x65FB # <CJK>
-0x6602 # <CJK>
-0x6603 # <CJK>
-0x6606 # <CJK>
-0x6607 # <CJK>
-0x660A # <CJK>
-0x660C # <CJK>
-0x660E # <CJK>
-0x660F # <CJK>
-0x6613 # <CJK>
-0x6614 # <CJK>
-0x661C # <CJK>
-0x661F # <CJK>
-0x6620 # <CJK>
-0x6625 # <CJK>
-0x6627 # <CJK>
-0x6628 # <CJK>
-0x662D # <CJK>
-0x662F # <CJK>
-0x6634 # <CJK>
-0x6635 # <CJK>
-0x6636 # <CJK>
-0x663C # <CJK>
-0x663F # <CJK>
-0x6641 # <CJK>
-0x6642 # <CJK>
-0x6643 # <CJK>
-0x6644 # <CJK>
-0x6649 # <CJK>
-0x664B # <CJK>
-0x664F # <CJK>
-0x6652 # <CJK>
-0x665D # <CJK>
-0x665E # <CJK>
-0x665F # <CJK>
-0x6662 # <CJK>
-0x6664 # <CJK>
-0x6666 # <CJK>
-0x6667 # <CJK>
-0x6668 # <CJK>
-0x6669 # <CJK>
-0x666E # <CJK>
-0x666F # <CJK>
-0x6670 # <CJK>
-0x6674 # <CJK>
-0x6676 # <CJK>
-0x667A # <CJK>
-0x6681 # <CJK>
-0x6683 # <CJK>
-0x6684 # <CJK>
-0x6687 # <CJK>
-0x6688 # <CJK>
-0x6689 # <CJK>
-0x668E # <CJK>
-0x6691 # <CJK>
-0x6696 # <CJK>
-0x6697 # <CJK>
-0x6698 # <CJK>
-0x669D # <CJK>
-0x66A2 # <CJK>
-0x66A6 # <CJK>
-0x66AB # <CJK>
-0x66AE # <CJK>
-0x66B4 # <CJK>
-0x66B8 # <CJK>
-0x66B9 # <CJK>
-0x66BC # <CJK>
-0x66BE # <CJK>
-0x66C1 # <CJK>
-0x66C4 # <CJK>
-0x66C7 # <CJK>
-0x66C9 # <CJK>
-0x66D6 # <CJK>
-0x66D9 # <CJK>
-0x66DA # <CJK>
-0x66DC # <CJK>
-0x66DD # <CJK>
-0x66E0 # <CJK>
-0x66E6 # <CJK>
-0x66E9 # <CJK>
-0x66F0 # <CJK>
-0x66F2 # <CJK>
-0x66F3 # <CJK>
-0x66F4 # <CJK>
-0x66F5 # <CJK>
-0x66F7 # <CJK>
-0x66F8 # <CJK>
-0x66F9 # <CJK>
-0x66FC # <CJK>
-0x66FD # <CJK>
-0x66FE # <CJK>
-0x66FF # <CJK>
-0x6700 # <CJK>
-0x6703 # <CJK>
-0x6708 # <CJK>
-0x6709 # <CJK>
-0x670B # <CJK>
-0x670D # <CJK>
-0x670F # <CJK>
-0x6714 # <CJK>
-0x6715 # <CJK>
-0x6716 # <CJK>
-0x6717 # <CJK>
-0x671B # <CJK>
-0x671D # <CJK>
-0x671E # <CJK>
-0x671F # <CJK>
-0x6726 # <CJK>
-0x6727 # <CJK>
-0x6728 # <CJK>
-0x672A # <CJK>
-0x672B # <CJK>
-0x672C # <CJK>
-0x672D # <CJK>
-0x672E # <CJK>
-0x6731 # <CJK>
-0x6734 # <CJK>
-0x6736 # <CJK>
-0x6737 # <CJK>
-0x6738 # <CJK>
-0x673A # <CJK>
-0x673D # <CJK>
-0x673F # <CJK>
-0x6741 # <CJK>
-0x6746 # <CJK>
-0x6749 # <CJK>
-0x674E # <CJK>
-0x674F # <CJK>
-0x6750 # <CJK>
-0x6751 # <CJK>
-0x6753 # <CJK>
-0x6756 # <CJK>
-0x6759 # <CJK>
-0x675C # <CJK>
-0x675E # <CJK>
-0x675F # <CJK>
-0x6760 # <CJK>
-0x6761 # <CJK>
-0x6762 # <CJK>
-0x6763 # <CJK>
-0x6764 # <CJK>
-0x6765 # <CJK>
-0x676A # <CJK>
-0x676D # <CJK>
-0x676F # <CJK>
-0x6770 # <CJK>
-0x6771 # <CJK>
-0x6772 # <CJK>
-0x6773 # <CJK>
-0x6775 # <CJK>
-0x6777 # <CJK>
-0x677C # <CJK>
-0x677E # <CJK>
-0x677F # <CJK>
-0x6785 # <CJK>
-0x6787 # <CJK>
-0x6789 # <CJK>
-0x678B # <CJK>
-0x678C # <CJK>
-0x6790 # <CJK>
-0x6795 # <CJK>
-0x6797 # <CJK>
-0x679A # <CJK>
-0x679C # <CJK>
-0x679D # <CJK>
-0x67A0 # <CJK>
-0x67A1 # <CJK>
-0x67A2 # <CJK>
-0x67A6 # <CJK>
-0x67A9 # <CJK>
-0x67AF # <CJK>
-0x67B3 # <CJK>
-0x67B4 # <CJK>
-0x67B6 # <CJK>
-0x67B7 # <CJK>
-0x67B8 # <CJK>
-0x67B9 # <CJK>
-0x67C1 # <CJK>
-0x67C4 # <CJK>
-0x67C6 # <CJK>
-0x67CA # <CJK>
-0x67CE # <CJK>
-0x67CF # <CJK>
-0x67D0 # <CJK>
-0x67D1 # <CJK>
-0x67D3 # <CJK>
-0x67D4 # <CJK>
-0x67D8 # <CJK>
-0x67DA # <CJK>
-0x67DD # <CJK>
-0x67DE # <CJK>
-0x67E2 # <CJK>
-0x67E4 # <CJK>
-0x67E7 # <CJK>
-0x67E9 # <CJK>
-0x67EC # <CJK>
-0x67EE # <CJK>
-0x67EF # <CJK>
-0x67F1 # <CJK>
-0x67F3 # <CJK>
-0x67F4 # <CJK>
-0x67F5 # <CJK>
-0x67FB # <CJK>
-0x67FE # <CJK>
-0x67FF # <CJK>
-0x6802 # <CJK>
-0x6803 # <CJK>
-0x6804 # <CJK>
-0x6813 # <CJK>
-0x6816 # <CJK>
-0x6817 # <CJK>
-0x681E # <CJK>
-0x6821 # <CJK>
-0x6822 # <CJK>
-0x6829 # <CJK>
-0x682A # <CJK>
-0x682B # <CJK>
-0x6832 # <CJK>
-0x6834 # <CJK>
-0x6838 # <CJK>
-0x6839 # <CJK>
-0x683C # <CJK>
-0x683D # <CJK>
-0x6840 # <CJK>
-0x6841 # <CJK>
-0x6842 # <CJK>
-0x6843 # <CJK>
-0x6846 # <CJK>
-0x6848 # <CJK>
-0x684D # <CJK>
-0x684E # <CJK>
-0x6850 # <CJK>
-0x6851 # <CJK>
-0x6853 # <CJK>
-0x6854 # <CJK>
-0x6859 # <CJK>
-0x685C # <CJK>
-0x685D # <CJK>
-0x685F # <CJK>
-0x6863 # <CJK>
-0x6867 # <CJK>
-0x6874 # <CJK>
-0x6876 # <CJK>
-0x6877 # <CJK>
-0x687E # <CJK>
-0x687F # <CJK>
-0x6881 # <CJK>
-0x6883 # <CJK>
-0x6885 # <CJK>
-0x688D # <CJK>
-0x688F # <CJK>
-0x6893 # <CJK>
-0x6894 # <CJK>
-0x6897 # <CJK>
-0x689B # <CJK>
-0x689D # <CJK>
-0x689F # <CJK>
-0x68A0 # <CJK>
-0x68A2 # <CJK>
-0x68A6 # <CJK>
-0x68A7 # <CJK>
-0x68A8 # <CJK>
-0x68AD # <CJK>
-0x68AF # <CJK>
-0x68B0 # <CJK>
-0x68B1 # <CJK>
-0x68B3 # <CJK>
-0x68B5 # <CJK>
-0x68B6 # <CJK>
-0x68B9 # <CJK>
-0x68BA # <CJK>
-0x68BC # <CJK>
-0x68C4 # <CJK>
-0x68C6 # <CJK>
-0x68C9 # <CJK>
-0x68CA # <CJK>
-0x68CB # <CJK>
-0x68CD # <CJK>
-0x68D2 # <CJK>
-0x68D4 # <CJK>
-0x68D5 # <CJK>
-0x68D7 # <CJK>
-0x68D8 # <CJK>
-0x68DA # <CJK>
-0x68DF # <CJK>
-0x68E0 # <CJK>
-0x68E1 # <CJK>
-0x68E3 # <CJK>
-0x68E7 # <CJK>
-0x68EE # <CJK>
-0x68EF # <CJK>
-0x68F2 # <CJK>
-0x68F9 # <CJK>
-0x68FA # <CJK>
-0x6900 # <CJK>
-0x6901 # <CJK>
-0x6904 # <CJK>
-0x6905 # <CJK>
-0x6908 # <CJK>
-0x690B # <CJK>
-0x690C # <CJK>
-0x690D # <CJK>
-0x690E # <CJK>
-0x690F # <CJK>
-0x6912 # <CJK>
-0x6919 # <CJK>
-0x691A # <CJK>
-0x691B # <CJK>
-0x691C # <CJK>
-0x6921 # <CJK>
-0x6922 # <CJK>
-0x6923 # <CJK>
-0x6925 # <CJK>
-0x6926 # <CJK>
-0x6928 # <CJK>
-0x692A # <CJK>
-0x6930 # <CJK>
-0x6934 # <CJK>
-0x6936 # <CJK>
-0x6939 # <CJK>
-0x693D # <CJK>
-0x693F # <CJK>
-0x694A # <CJK>
-0x6953 # <CJK>
-0x6954 # <CJK>
-0x6955 # <CJK>
-0x6959 # <CJK>
-0x695A # <CJK>
-0x695C # <CJK>
-0x695D # <CJK>
-0x695E # <CJK>
-0x6960 # <CJK>
-0x6961 # <CJK>
-0x6962 # <CJK>
-0x696A # <CJK>
-0x696B # <CJK>
-0x696D # <CJK>
-0x696E # <CJK>
-0x696F # <CJK>
-0x6973 # <CJK>
-0x6974 # <CJK>
-0x6975 # <CJK>
-0x6977 # <CJK>
-0x6978 # <CJK>
-0x6979 # <CJK>
-0x697C # <CJK>
-0x697D # <CJK>
-0x697E # <CJK>
-0x6981 # <CJK>
-0x6982 # <CJK>
-0x698A # <CJK>
-0x698E # <CJK>
-0x6991 # <CJK>
-0x6994 # <CJK>
-0x6995 # <CJK>
-0x699B # <CJK>
-0x699C # <CJK>
-0x69A0 # <CJK>
-0x69A7 # <CJK>
-0x69AE # <CJK>
-0x69B1 # <CJK>
-0x69B2 # <CJK>
-0x69B4 # <CJK>
-0x69BB # <CJK>
-0x69BE # <CJK>
-0x69BF # <CJK>
-0x69C1 # <CJK>
-0x69C3 # <CJK>
-0x69C7 # <CJK>
-0x69CA # <CJK>
-0x69CB # <CJK>
-0x69CC # <CJK>
-0x69CD # <CJK>
-0x69CE # <CJK>
-0x69D0 # <CJK>
-0x69D3 # <CJK>
-0x69D8 # <CJK>
-0x69D9 # <CJK>
-0x69DD # <CJK>
-0x69DE # <CJK>
-0x69E7 # <CJK>
-0x69E8 # <CJK>
-0x69EB # <CJK>
-0x69ED # <CJK>
-0x69F2 # <CJK>
-0x69F9 # <CJK>
-0x69FB # <CJK>
-0x69FD # <CJK>
-0x69FF # <CJK>
-0x6A02 # <CJK>
-0x6A05 # <CJK>
-0x6A0A # <CJK>
-0x6A0B # <CJK>
-0x6A0C # <CJK>
-0x6A12 # <CJK>
-0x6A13 # <CJK>
-0x6A14 # <CJK>
-0x6A17 # <CJK>
-0x6A19 # <CJK>
-0x6A1B # <CJK>
-0x6A1E # <CJK>
-0x6A1F # <CJK>
-0x6A21 # <CJK>
-0x6A22 # <CJK>
-0x6A23 # <CJK>
-0x6A29 # <CJK>
-0x6A2A # <CJK>
-0x6A2B # <CJK>
-0x6A2E # <CJK>
-0x6A35 # <CJK>
-0x6A36 # <CJK>
-0x6A38 # <CJK>
-0x6A39 # <CJK>
-0x6A3A # <CJK>
-0x6A3D # <CJK>
-0x6A44 # <CJK>
-0x6A47 # <CJK>
-0x6A48 # <CJK>
-0x6A4B # <CJK>
-0x6A58 # <CJK>
-0x6A59 # <CJK>
-0x6A5F # <CJK>
-0x6A61 # <CJK>
-0x6A62 # <CJK>
-0x6A66 # <CJK>
-0x6A72 # <CJK>
-0x6A78 # <CJK>
-0x6A7F # <CJK>
-0x6A80 # <CJK>
-0x6A84 # <CJK>
-0x6A8D # <CJK>
-0x6A8E # <CJK>
-0x6A90 # <CJK>
-0x6A97 # <CJK>
-0x6A9C # <CJK>
-0x6AA0 # <CJK>
-0x6AA2 # <CJK>
-0x6AA3 # <CJK>
-0x6AAA # <CJK>
-0x6AAC # <CJK>
-0x6AAE # <CJK>
-0x6AB3 # <CJK>
-0x6AB8 # <CJK>
-0x6ABB # <CJK>
-0x6AC1 # <CJK>
-0x6AC2 # <CJK>
-0x6AC3 # <CJK>
-0x6AD1 # <CJK>
-0x6AD3 # <CJK>
-0x6ADA # <CJK>
-0x6ADB # <CJK>
-0x6ADE # <CJK>
-0x6ADF # <CJK>
-0x6AE8 # <CJK>
-0x6AEA # <CJK>
-0x6AFA # <CJK>
-0x6AFB # <CJK>
-0x6B04 # <CJK>
-0x6B05 # <CJK>
-0x6B0A # <CJK>
-0x6B12 # <CJK>
-0x6B16 # <CJK>
-0x6B1D # <CJK>
-0x6B1F # <CJK>
-0x6B20 # <CJK>
-0x6B21 # <CJK>
-0x6B23 # <CJK>
-0x6B27 # <CJK>
-0x6B32 # <CJK>
-0x6B37 # <CJK>
-0x6B38 # <CJK>
-0x6B39 # <CJK>
-0x6B3A # <CJK>
-0x6B3D # <CJK>
-0x6B3E # <CJK>
-0x6B43 # <CJK>
-0x6B47 # <CJK>
-0x6B49 # <CJK>
-0x6B4C # <CJK>
-0x6B4E # <CJK>
-0x6B50 # <CJK>
-0x6B53 # <CJK>
-0x6B54 # <CJK>
-0x6B59 # <CJK>
-0x6B5B # <CJK>
-0x6B5F # <CJK>
-0x6B61 # <CJK>
-0x6B62 # <CJK>
-0x6B63 # <CJK>
-0x6B64 # <CJK>
-0x6B66 # <CJK>
-0x6B69 # <CJK>
-0x6B6A # <CJK>
-0x6B6F # <CJK>
-0x6B73 # <CJK>
-0x6B74 # <CJK>
-0x6B78 # <CJK>
-0x6B79 # <CJK>
-0x6B7B # <CJK>
-0x6B7F # <CJK>
-0x6B80 # <CJK>
-0x6B83 # <CJK>
-0x6B84 # <CJK>
-0x6B86 # <CJK>
-0x6B89 # <CJK>
-0x6B8A # <CJK>
-0x6B8B # <CJK>
-0x6B8D # <CJK>
-0x6B95 # <CJK>
-0x6B96 # <CJK>
-0x6B98 # <CJK>
-0x6B9E # <CJK>
-0x6BA4 # <CJK>
-0x6BAA # <CJK>
-0x6BAB # <CJK>
-0x6BAF # <CJK>
-0x6BB1 # <CJK>
-0x6BB2 # <CJK>
-0x6BB3 # <CJK>
-0x6BB4 # <CJK>
-0x6BB5 # <CJK>
-0x6BB7 # <CJK>
-0x6BBA # <CJK>
-0x6BBB # <CJK>
-0x6BBC # <CJK>
-0x6BBF # <CJK>
-0x6BC0 # <CJK>
-0x6BC5 # <CJK>
-0x6BC6 # <CJK>
-0x6BCB # <CJK>
-0x6BCD # <CJK>
-0x6BCE # <CJK>
-0x6BD2 # <CJK>
-0x6BD3 # <CJK>
-0x6BD4 # <CJK>
-0x6BD8 # <CJK>
-0x6BDB # <CJK>
-0x6BDF # <CJK>
-0x6BEB # <CJK>
-0x6BEC # <CJK>
-0x6BEF # <CJK>
-0x6BF3 # <CJK>
-0x6C08 # <CJK>
-0x6C0F # <CJK>
-0x6C11 # <CJK>
-0x6C13 # <CJK>
-0x6C14 # <CJK>
-0x6C17 # <CJK>
-0x6C1B # <CJK>
-0x6C23 # <CJK>
-0x6C24 # <CJK>
-0x6C34 # <CJK>
-0x6C37 # <CJK>
-0x6C38 # <CJK>
-0x6C3E # <CJK>
-0x6C40 # <CJK>
-0x6C41 # <CJK>
-0x6C42 # <CJK>
-0x6C4E # <CJK>
-0x6C50 # <CJK>
-0x6C55 # <CJK>
-0x6C57 # <CJK>
-0x6C5A # <CJK>
-0x6C5D # <CJK>
-0x6C5E # <CJK>
-0x6C5F # <CJK>
-0x6C60 # <CJK>
-0x6C62 # <CJK>
-0x6C68 # <CJK>
-0x6C6A # <CJK>
-0x6C70 # <CJK>
-0x6C72 # <CJK>
-0x6C73 # <CJK>
-0x6C7A # <CJK>
-0x6C7D # <CJK>
-0x6C7E # <CJK>
-0x6C81 # <CJK>
-0x6C82 # <CJK>
-0x6C83 # <CJK>
-0x6C88 # <CJK>
-0x6C8C # <CJK>
-0x6C8D # <CJK>
-0x6C90 # <CJK>
-0x6C92 # <CJK>
-0x6C93 # <CJK>
-0x6C96 # <CJK>
-0x6C99 # <CJK>
-0x6C9A # <CJK>
-0x6C9B # <CJK>
-0x6CA1 # <CJK>
-0x6CA2 # <CJK>
-0x6CAB # <CJK>
-0x6CAE # <CJK>
-0x6CB1 # <CJK>
-0x6CB3 # <CJK>
-0x6CB8 # <CJK>
-0x6CB9 # <CJK>
-0x6CBA # <CJK>
-0x6CBB # <CJK>
-0x6CBC # <CJK>
-0x6CBD # <CJK>
-0x6CBE # <CJK>
-0x6CBF # <CJK>
-0x6CC1 # <CJK>
-0x6CC4 # <CJK>
-0x6CC5 # <CJK>
-0x6CC9 # <CJK>
-0x6CCA # <CJK>
-0x6CCC # <CJK>
-0x6CD3 # <CJK>
-0x6CD5 # <CJK>
-0x6CD7 # <CJK>
-0x6CD9 # <CJK>
-0x6CDB # <CJK>
-0x6CDD # <CJK>
-0x6CE1 # <CJK>
-0x6CE2 # <CJK>
-0x6CE3 # <CJK>
-0x6CE5 # <CJK>
-0x6CE8 # <CJK>
-0x6CEA # <CJK>
-0x6CEF # <CJK>
-0x6CF0 # <CJK>
-0x6CF1 # <CJK>
-0x6CF3 # <CJK>
-0x6D0B # <CJK>
-0x6D0C # <CJK>
-0x6D12 # <CJK>
-0x6D17 # <CJK>
-0x6D19 # <CJK>
-0x6D1B # <CJK>
-0x6D1E # <CJK>
-0x6D1F # <CJK>
-0x6D25 # <CJK>
-0x6D29 # <CJK>
-0x6D2A # <CJK>
-0x6D2B # <CJK>
-0x6D32 # <CJK>
-0x6D33 # <CJK>
-0x6D35 # <CJK>
-0x6D36 # <CJK>
-0x6D38 # <CJK>
-0x6D3B # <CJK>
-0x6D3D # <CJK>
-0x6D3E # <CJK>
-0x6D41 # <CJK>
-0x6D44 # <CJK>
-0x6D45 # <CJK>
-0x6D59 # <CJK>
-0x6D5A # <CJK>
-0x6D5C # <CJK>
-0x6D63 # <CJK>
-0x6D64 # <CJK>
-0x6D66 # <CJK>
-0x6D69 # <CJK>
-0x6D6A # <CJK>
-0x6D6C # <CJK>
-0x6D6E # <CJK>
-0x6D74 # <CJK>
-0x6D77 # <CJK>
-0x6D78 # <CJK>
-0x6D79 # <CJK>
-0x6D85 # <CJK>
-0x6D88 # <CJK>
-0x6D8C # <CJK>
-0x6D8E # <CJK>
-0x6D93 # <CJK>
-0x6D95 # <CJK>
-0x6D99 # <CJK>
-0x6D9B # <CJK>
-0x6D9C # <CJK>
-0x6DAF # <CJK>
-0x6DB2 # <CJK>
-0x6DB5 # <CJK>
-0x6DB8 # <CJK>
-0x6DBC # <CJK>
-0x6DC0 # <CJK>
-0x6DC5 # <CJK>
-0x6DC6 # <CJK>
-0x6DC7 # <CJK>
-0x6DCB # <CJK>
-0x6DCC # <CJK>
-0x6DD1 # <CJK>
-0x6DD2 # <CJK>
-0x6DD5 # <CJK>
-0x6DD8 # <CJK>
-0x6DD9 # <CJK>
-0x6DDE # <CJK>
-0x6DE1 # <CJK>
-0x6DE4 # <CJK>
-0x6DE6 # <CJK>
-0x6DE8 # <CJK>
-0x6DEA # <CJK>
-0x6DEB # <CJK>
-0x6DEC # <CJK>
-0x6DEE # <CJK>
-0x6DF1 # <CJK>
-0x6DF3 # <CJK>
-0x6DF5 # <CJK>
-0x6DF7 # <CJK>
-0x6DF9 # <CJK>
-0x6DFA # <CJK>
-0x6DFB # <CJK>
-0x6E05 # <CJK>
-0x6E07 # <CJK>
-0x6E08 # <CJK>
-0x6E09 # <CJK>
-0x6E0A # <CJK>
-0x6E0B # <CJK>
-0x6E13 # <CJK>
-0x6E15 # <CJK>
-0x6E19 # <CJK>
-0x6E1A # <CJK>
-0x6E1B # <CJK>
-0x6E1D # <CJK>
-0x6E1F # <CJK>
-0x6E20 # <CJK>
-0x6E21 # <CJK>
-0x6E23 # <CJK>
-0x6E24 # <CJK>
-0x6E25 # <CJK>
-0x6E26 # <CJK>
-0x6E29 # <CJK>
-0x6E2B # <CJK>
-0x6E2C # <CJK>
-0x6E2D # <CJK>
-0x6E2E # <CJK>
-0x6E2F # <CJK>
-0x6E38 # <CJK>
-0x6E3A # <CJK>
-0x6E3E # <CJK>
-0x6E43 # <CJK>
-0x6E4A # <CJK>
-0x6E4D # <CJK>
-0x6E4E # <CJK>
-0x6E56 # <CJK>
-0x6E58 # <CJK>
-0x6E5B # <CJK>
-0x6E5F # <CJK>
-0x6E67 # <CJK>
-0x6E6B # <CJK>
-0x6E6E # <CJK>
-0x6E6F # <CJK>
-0x6E72 # <CJK>
-0x6E76 # <CJK>
-0x6E7E # <CJK>
-0x6E7F # <CJK>
-0x6E80 # <CJK>
-0x6E82 # <CJK>
-0x6E8C # <CJK>
-0x6E8F # <CJK>
-0x6E90 # <CJK>
-0x6E96 # <CJK>
-0x6E98 # <CJK>
-0x6E9C # <CJK>
-0x6E9D # <CJK>
-0x6E9F # <CJK>
-0x6EA2 # <CJK>
-0x6EA5 # <CJK>
-0x6EAA # <CJK>
-0x6EAF # <CJK>
-0x6EB2 # <CJK>
-0x6EB6 # <CJK>
-0x6EB7 # <CJK>
-0x6EBA # <CJK>
-0x6EBD # <CJK>
-0x6EC2 # <CJK>
-0x6EC4 # <CJK>
-0x6EC5 # <CJK>
-0x6EC9 # <CJK>
-0x6ECB # <CJK>
-0x6ECC # <CJK>
-0x6ED1 # <CJK>
-0x6ED3 # <CJK>
-0x6ED4 # <CJK>
-0x6ED5 # <CJK>
-0x6EDD # <CJK>
-0x6EDE # <CJK>
-0x6EEC # <CJK>
-0x6EEF # <CJK>
-0x6EF2 # <CJK>
-0x6EF4 # <CJK>
-0x6EF7 # <CJK>
-0x6EF8 # <CJK>
-0x6EFE # <CJK>
-0x6EFF # <CJK>
-0x6F01 # <CJK>
-0x6F02 # <CJK>
-0x6F06 # <CJK>
-0x6F09 # <CJK>
-0x6F0F # <CJK>
-0x6F11 # <CJK>
-0x6F13 # <CJK>
-0x6F14 # <CJK>
-0x6F15 # <CJK>
-0x6F20 # <CJK>
-0x6F22 # <CJK>
-0x6F23 # <CJK>
-0x6F2B # <CJK>
-0x6F2C # <CJK>
-0x6F31 # <CJK>
-0x6F32 # <CJK>
-0x6F38 # <CJK>
-0x6F3E # <CJK>
-0x6F3F # <CJK>
-0x6F41 # <CJK>
-0x6F45 # <CJK>
-0x6F54 # <CJK>
-0x6F58 # <CJK>
-0x6F5B # <CJK>
-0x6F5C # <CJK>
-0x6F5F # <CJK>
-0x6F64 # <CJK>
-0x6F66 # <CJK>
-0x6F6D # <CJK>
-0x6F6E # <CJK>
-0x6F6F # <CJK>
-0x6F70 # <CJK>
-0x6F74 # <CJK>
-0x6F78 # <CJK>
-0x6F7A # <CJK>
-0x6F7C # <CJK>
-0x6F80 # <CJK>
-0x6F81 # <CJK>
-0x6F82 # <CJK>
-0x6F84 # <CJK>
-0x6F86 # <CJK>
-0x6F8E # <CJK>
-0x6F91 # <CJK>
-0x6F97 # <CJK>
-0x6FA1 # <CJK>
-0x6FA3 # <CJK>
-0x6FA4 # <CJK>
-0x6FAA # <CJK>
-0x6FB1 # <CJK>
-0x6FB3 # <CJK>
-0x6FB9 # <CJK>
-0x6FC0 # <CJK>
-0x6FC1 # <CJK>
-0x6FC2 # <CJK>
-0x6FC3 # <CJK>
-0x6FC6 # <CJK>
-0x6FD4 # <CJK>
-0x6FD5 # <CJK>
-0x6FD8 # <CJK>
-0x6FDB # <CJK>
-0x6FDF # <CJK>
-0x6FE0 # <CJK>
-0x6FE1 # <CJK>
-0x6FE4 # <CJK>
-0x6FEB # <CJK>
-0x6FEC # <CJK>
-0x6FEE # <CJK>
-0x6FEF # <CJK>
-0x6FF1 # <CJK>
-0x6FF3 # <CJK>
-0x6FF6 # <CJK>
-0x6FFA # <CJK>
-0x6FFE # <CJK>
-0x7001 # <CJK>
-0x7009 # <CJK>
-0x700B # <CJK>
-0x700F # <CJK>
-0x7011 # <CJK>
-0x7015 # <CJK>
-0x7018 # <CJK>
-0x701A # <CJK>
-0x701B # <CJK>
-0x701D # <CJK>
-0x701E # <CJK>
-0x701F # <CJK>
-0x7026 # <CJK>
-0x7027 # <CJK>
-0x702C # <CJK>
-0x7030 # <CJK>
-0x7032 # <CJK>
-0x703E # <CJK>
-0x704C # <CJK>
-0x7051 # <CJK>
-0x7058 # <CJK>
-0x7063 # <CJK>
-0x706B # <CJK>
-0x706F # <CJK>
-0x7070 # <CJK>
-0x7078 # <CJK>
-0x707C # <CJK>
-0x707D # <CJK>
-0x7089 # <CJK>
-0x708A # <CJK>
-0x708E # <CJK>
-0x7092 # <CJK>
-0x7099 # <CJK>
-0x70AC # <CJK>
-0x70AD # <CJK>
-0x70AE # <CJK>
-0x70AF # <CJK>
-0x70B3 # <CJK>
-0x70B8 # <CJK>
-0x70B9 # <CJK>
-0x70BA # <CJK>
-0x70C8 # <CJK>
-0x70CB # <CJK>
-0x70CF # <CJK>
-0x70D9 # <CJK>
-0x70DD # <CJK>
-0x70DF # <CJK>
-0x70F1 # <CJK>
-0x70F9 # <CJK>
-0x70FD # <CJK>
-0x7109 # <CJK>
-0x7114 # <CJK>
-0x7119 # <CJK>
-0x711A # <CJK>
-0x711C # <CJK>
-0x7121 # <CJK>
-0x7126 # <CJK>
-0x7136 # <CJK>
-0x713C # <CJK>
-0x7149 # <CJK>
-0x714C # <CJK>
-0x714E # <CJK>
-0x7155 # <CJK>
-0x7156 # <CJK>
-0x7159 # <CJK>
-0x7162 # <CJK>
-0x7164 # <CJK>
-0x7165 # <CJK>
-0x7166 # <CJK>
-0x7167 # <CJK>
-0x7169 # <CJK>
-0x716C # <CJK>
-0x716E # <CJK>
-0x717D # <CJK>
-0x7184 # <CJK>
-0x7188 # <CJK>
-0x718A # <CJK>
-0x718F # <CJK>
-0x7194 # <CJK>
-0x7195 # <CJK>
-#0x7199 # <CJK> # not in kochi fonts
-0x719F # <CJK>
-0x71A8 # <CJK>
-0x71AC # <CJK>
-0x71B1 # <CJK>
-0x71B9 # <CJK>
-0x71BE # <CJK>
-0x71C3 # <CJK>
-0x71C8 # <CJK>
-0x71C9 # <CJK>
-0x71CE # <CJK>
-0x71D0 # <CJK>
-0x71D2 # <CJK>
-0x71D4 # <CJK>
-0x71D5 # <CJK>
-0x71D7 # <CJK>
-0x71DF # <CJK>
-0x71E0 # <CJK>
-0x71E5 # <CJK>
-0x71E6 # <CJK>
-0x71E7 # <CJK>
-0x71EC # <CJK>
-0x71ED # <CJK>
-0x71EE # <CJK>
-0x71F5 # <CJK>
-0x71F9 # <CJK>
-0x71FB # <CJK>
-0x71FC # <CJK>
-0x71FF # <CJK>
-0x7206 # <CJK>
-0x720D # <CJK>
-0x7210 # <CJK>
-0x721B # <CJK>
-0x7228 # <CJK>
-0x722A # <CJK>
-0x722C # <CJK>
-0x722D # <CJK>
-0x7230 # <CJK>
-0x7232 # <CJK>
-0x7235 # <CJK>
-0x7236 # <CJK>
-0x723A # <CJK>
-0x723B # <CJK>
-0x723C # <CJK>
-0x723D # <CJK>
-0x723E # <CJK>
-0x723F # <CJK>
-0x7240 # <CJK>
-0x7246 # <CJK>
-0x7247 # <CJK>
-0x7248 # <CJK>
-0x724B # <CJK>
-0x724C # <CJK>
-0x7252 # <CJK>
-0x7258 # <CJK>
-0x7259 # <CJK>
-0x725B # <CJK>
-0x725D # <CJK>
-0x725F # <CJK>
-0x7261 # <CJK>
-0x7262 # <CJK>
-0x7267 # <CJK>
-0x7269 # <CJK>
-0x7272 # <CJK>
-0x7274 # <CJK>
-0x7279 # <CJK>
-0x727D # <CJK>
-0x727E # <CJK>
-0x7280 # <CJK>
-0x7281 # <CJK>
-0x7282 # <CJK>
-0x7287 # <CJK>
-0x7292 # <CJK>
-0x7296 # <CJK>
-0x72A0 # <CJK>
-0x72A2 # <CJK>
-0x72A7 # <CJK>
-0x72AC # <CJK>
-0x72AF # <CJK>
-0x72B2 # <CJK>
-0x72B6 # <CJK>
-0x72B9 # <CJK>
-0x72C2 # <CJK>
-0x72C3 # <CJK>
-0x72C4 # <CJK>
-0x72C6 # <CJK>
-0x72CE # <CJK>
-0x72D0 # <CJK>
-0x72D2 # <CJK>
-0x72D7 # <CJK>
-0x72D9 # <CJK>
-0x72DB # <CJK>
-0x72E0 # <CJK>
-0x72E1 # <CJK>
-0x72E2 # <CJK>
-0x72E9 # <CJK>
-0x72EC # <CJK>
-0x72ED # <CJK>
-0x72F7 # <CJK>
-0x72F8 # <CJK>
-0x72F9 # <CJK>
-0x72FC # <CJK>
-0x72FD # <CJK>
-0x730A # <CJK>
-0x7316 # <CJK>
-0x7317 # <CJK>
-0x731B # <CJK>
-0x731C # <CJK>
-0x731D # <CJK>
-0x731F # <CJK>
-0x7325 # <CJK>
-0x7329 # <CJK>
-0x732A # <CJK>
-0x732B # <CJK>
-0x732E # <CJK>
-0x732F # <CJK>
-0x7334 # <CJK>
-0x7336 # <CJK>
-0x7337 # <CJK>
-0x733E # <CJK>
-0x733F # <CJK>
-0x7344 # <CJK>
-0x7345 # <CJK>
-0x734E # <CJK>
-0x734F # <CJK>
-0x7357 # <CJK>
-0x7363 # <CJK>
-0x7368 # <CJK>
-0x736A # <CJK>
-0x7370 # <CJK>
-0x7372 # <CJK>
-0x7375 # <CJK>
-0x7378 # <CJK>
-0x737A # <CJK>
-0x737B # <CJK>
-0x7384 # <CJK>
-0x7387 # <CJK>
-0x7389 # <CJK>
-0x738B # <CJK>
-0x7396 # <CJK>
-0x73A9 # <CJK>
-0x73B2 # <CJK>
-0x73B3 # <CJK>
-0x73BB # <CJK>
-0x73C0 # <CJK>
-0x73C2 # <CJK>
-0x73C8 # <CJK>
-0x73CA # <CJK>
-0x73CD # <CJK>
-0x73CE # <CJK>
-0x73DE # <CJK>
-0x73E0 # <CJK>
-0x73E5 # <CJK>
-0x73EA # <CJK>
-0x73ED # <CJK>
-0x73EE # <CJK>
-0x73F1 # <CJK>
-0x73F8 # <CJK>
-0x73FE # <CJK>
-0x7403 # <CJK>
-0x7405 # <CJK>
-0x7406 # <CJK>
-0x7409 # <CJK>
-0x7422 # <CJK>
-0x7425 # <CJK>
-0x7432 # <CJK>
-0x7433 # <CJK>
-0x7434 # <CJK>
-0x7435 # <CJK>
-0x7436 # <CJK>
-0x743A # <CJK>
-0x743F # <CJK>
-0x7441 # <CJK>
-0x7455 # <CJK>
-0x7459 # <CJK>
-0x745A # <CJK>
-0x745B # <CJK>
-0x745C # <CJK>
-0x745E # <CJK>
-0x745F # <CJK>
-0x7460 # <CJK>
-0x7463 # <CJK>
-0x7464 # <CJK>
-0x7469 # <CJK>
-0x746A # <CJK>
-0x746F # <CJK>
-0x7470 # <CJK>
-0x7473 # <CJK>
-0x7476 # <CJK>
-0x747E # <CJK>
-0x7483 # <CJK>
-0x748B # <CJK>
-0x749E # <CJK>
-0x74A2 # <CJK>
-0x74A7 # <CJK>
-0x74B0 # <CJK>
-0x74BD # <CJK>
-0x74CA # <CJK>
-0x74CF # <CJK>
-0x74D4 # <CJK>
-0x74DC # <CJK>
-0x74E0 # <CJK>
-0x74E2 # <CJK>
-0x74E3 # <CJK>
-0x74E6 # <CJK>
-0x74E7 # <CJK>
-0x74E9 # <CJK>
-0x74EE # <CJK>
-0x74F0 # <CJK>
-0x74F1 # <CJK>
-0x74F2 # <CJK>
-0x74F6 # <CJK>
-0x74F7 # <CJK>
-0x74F8 # <CJK>
-0x7503 # <CJK>
-0x7504 # <CJK>
-0x7505 # <CJK>
-0x750C # <CJK>
-0x750D # <CJK>
-0x750E # <CJK>
-0x7511 # <CJK>
-0x7513 # <CJK>
-0x7515 # <CJK>
-0x7518 # <CJK>
-0x751A # <CJK>
-0x751C # <CJK>
-0x751E # <CJK>
-0x751F # <CJK>
-0x7523 # <CJK>
-0x7525 # <CJK>
-0x7526 # <CJK>
-0x7528 # <CJK>
-0x752B # <CJK>
-0x752C # <CJK>
-0x7530 # <CJK>
-0x7531 # <CJK>
-0x7532 # <CJK>
-0x7533 # <CJK>
-0x7537 # <CJK>
-0x7538 # <CJK>
-0x753A # <CJK>
-0x753B # <CJK>
-0x753C # <CJK>
-0x7544 # <CJK>
-0x7546 # <CJK>
-0x7549 # <CJK>
-0x754A # <CJK>
-0x754B # <CJK>
-0x754C # <CJK>
-0x754D # <CJK>
-0x754F # <CJK>
-0x7551 # <CJK>
-0x7554 # <CJK>
-0x7559 # <CJK>
-0x755A # <CJK>
-0x755B # <CJK>
-0x755C # <CJK>
-0x755D # <CJK>
-0x7560 # <CJK>
-0x7562 # <CJK>
-0x7564 # <CJK>
-0x7565 # <CJK>
-0x7566 # <CJK>
-0x7567 # <CJK>
-0x7569 # <CJK>
-0x756A # <CJK>
-0x756B # <CJK>
-0x756D # <CJK>
-0x7570 # <CJK>
-0x7573 # <CJK>
-0x7574 # <CJK>
-0x7576 # <CJK>
-0x7577 # <CJK>
-0x7578 # <CJK>
-0x757F # <CJK>
-0x7582 # <CJK>
-0x7586 # <CJK>
-0x7587 # <CJK>
-0x7589 # <CJK>
-0x758A # <CJK>
-0x758B # <CJK>
-0x758E # <CJK>
-0x758F # <CJK>
-0x7591 # <CJK>
-0x7594 # <CJK>
-0x759A # <CJK>
-0x759D # <CJK>
-0x75A3 # <CJK>
-0x75A5 # <CJK>
-0x75AB # <CJK>
-0x75B1 # <CJK>
-0x75B2 # <CJK>
-0x75B3 # <CJK>
-0x75B5 # <CJK>
-0x75B8 # <CJK>
-0x75B9 # <CJK>
-0x75BC # <CJK>
-0x75BD # <CJK>
-0x75BE # <CJK>
-0x75C2 # <CJK>
-0x75C3 # <CJK>
-0x75C5 # <CJK>
-0x75C7 # <CJK>
-0x75CA # <CJK>
-0x75CD # <CJK>
-0x75D2 # <CJK>
-0x75D4 # <CJK>
-0x75D5 # <CJK>
-0x75D8 # <CJK>
-0x75D9 # <CJK>
-0x75DB # <CJK>
-0x75DE # <CJK>
-0x75E2 # <CJK>
-0x75E3 # <CJK>
-0x75E9 # <CJK>
-0x75F0 # <CJK>
-0x75F2 # <CJK>
-0x75F3 # <CJK>
-0x75F4 # <CJK>
-0x75FA # <CJK>
-0x75FC # <CJK>
-0x75FE # <CJK>
-0x75FF # <CJK>
-0x7601 # <CJK>
-0x7609 # <CJK>
-0x760B # <CJK>
-0x760D # <CJK>
-0x761F # <CJK>
-0x7620 # <CJK>
-0x7621 # <CJK>
-0x7622 # <CJK>
-0x7624 # <CJK>
-0x7627 # <CJK>
-0x7630 # <CJK>
-0x7634 # <CJK>
-0x763B # <CJK>
-0x7642 # <CJK>
-0x7646 # <CJK>
-0x7647 # <CJK>
-0x7648 # <CJK>
-0x764C # <CJK>
-0x7652 # <CJK>
-0x7656 # <CJK>
-0x7658 # <CJK>
-0x765C # <CJK>
-0x7661 # <CJK>
-0x7662 # <CJK>
-0x7667 # <CJK>
-0x7668 # <CJK>
-0x7669 # <CJK>
-0x766A # <CJK>
-0x766C # <CJK>
-0x7670 # <CJK>
-0x7672 # <CJK>
-0x7676 # <CJK>
-0x7678 # <CJK>
-0x767A # <CJK>
-0x767B # <CJK>
-0x767C # <CJK>
-0x767D # <CJK>
-0x767E # <CJK>
-0x7680 # <CJK>
-0x7683 # <CJK>
-0x7684 # <CJK>
-0x7686 # <CJK>
-0x7687 # <CJK>
-0x7688 # <CJK>
-0x768B # <CJK>
-0x768E # <CJK>
-0x7690 # <CJK>
-0x7693 # <CJK>
-0x7696 # <CJK>
-0x7699 # <CJK>
-0x769A # <CJK>
-0x76AE # <CJK>
-0x76B0 # <CJK>
-0x76B4 # <CJK>
-0x76B7 # <CJK>
-0x76B8 # <CJK>
-0x76B9 # <CJK>
-0x76BA # <CJK>
-0x76BF # <CJK>
-0x76C2 # <CJK>
-0x76C3 # <CJK>
-0x76C6 # <CJK>
-0x76C8 # <CJK>
-0x76CA # <CJK>
-0x76CD # <CJK>
-0x76D2 # <CJK>
-0x76D6 # <CJK>
-0x76D7 # <CJK>
-0x76DB # <CJK>
-0x76DC # <CJK>
-0x76DE # <CJK>
-0x76DF # <CJK>
-0x76E1 # <CJK>
-0x76E3 # <CJK>
-0x76E4 # <CJK>
-0x76E5 # <CJK>
-0x76E7 # <CJK>
-0x76EA # <CJK>
-0x76EE # <CJK>
-0x76F2 # <CJK>
-0x76F4 # <CJK>
-0x76F8 # <CJK>
-0x76FB # <CJK>
-0x76FE # <CJK>
-0x7701 # <CJK>
-0x7704 # <CJK>
-0x7707 # <CJK>
-0x7708 # <CJK>
-0x7709 # <CJK>
-0x770B # <CJK>
-0x770C # <CJK>
-0x771B # <CJK>
-0x771E # <CJK>
-0x771F # <CJK>
-0x7720 # <CJK>
-0x7724 # <CJK>
-0x7725 # <CJK>
-0x7726 # <CJK>
-0x7729 # <CJK>
-0x7737 # <CJK>
-0x7738 # <CJK>
-0x773A # <CJK>
-0x773C # <CJK>
-0x7740 # <CJK>
-0x7747 # <CJK>
-0x775A # <CJK>
-0x775B # <CJK>
-0x7761 # <CJK>
-0x7763 # <CJK>
-0x7765 # <CJK>
-0x7766 # <CJK>
-0x7768 # <CJK>
-0x776B # <CJK>
-0x7779 # <CJK>
-0x777E # <CJK>
-0x777F # <CJK>
-0x778B # <CJK>
-0x778E # <CJK>
-0x7791 # <CJK>
-0x779E # <CJK>
-0x77A0 # <CJK>
-0x77A5 # <CJK>
-0x77AC # <CJK>
-0x77AD # <CJK>
-0x77B0 # <CJK>
-0x77B3 # <CJK>
-0x77B6 # <CJK>
-0x77B9 # <CJK>
-0x77BB # <CJK>
-0x77BC # <CJK>
-0x77BD # <CJK>
-0x77BF # <CJK>
-0x77C7 # <CJK>
-0x77CD # <CJK>
-0x77D7 # <CJK>
-0x77DA # <CJK>
-0x77DB # <CJK>
-0x77DC # <CJK>
-0x77E2 # <CJK>
-0x77E3 # <CJK>
-0x77E5 # <CJK>
-0x77E7 # <CJK>
-0x77E9 # <CJK>
-0x77ED # <CJK>
-0x77EE # <CJK>
-0x77EF # <CJK>
-0x77F3 # <CJK>
-0x77FC # <CJK>
-0x7802 # <CJK>
-0x780C # <CJK>
-0x7812 # <CJK>
-0x7814 # <CJK>
-0x7815 # <CJK>
-0x7820 # <CJK>
-0x7825 # <CJK>
-0x7826 # <CJK>
-0x7827 # <CJK>
-0x7832 # <CJK>
-0x7834 # <CJK>
-0x783A # <CJK>
-0x783F # <CJK>
-0x7845 # <CJK>
-0x785D # <CJK>
-0x786B # <CJK>
-0x786C # <CJK>
-0x786F # <CJK>
-0x7872 # <CJK>
-0x7874 # <CJK>
-0x787C # <CJK>
-0x7881 # <CJK>
-0x7886 # <CJK>
-0x7887 # <CJK>
-0x788C # <CJK>
-0x788D # <CJK>
-0x788E # <CJK>
-0x7891 # <CJK>
-0x7893 # <CJK>
-0x7895 # <CJK>
-0x7897 # <CJK>
-0x789A # <CJK>
-0x78A3 # <CJK>
-0x78A7 # <CJK>
-0x78A9 # <CJK>
-0x78AA # <CJK>
-0x78AF # <CJK>
-0x78B5 # <CJK>
-0x78BA # <CJK>
-0x78BC # <CJK>
-0x78BE # <CJK>
-0x78C1 # <CJK>
-0x78C5 # <CJK>
-0x78C6 # <CJK>
-0x78CA # <CJK>
-0x78CB # <CJK>
-0x78D0 # <CJK>
-0x78D1 # <CJK>
-0x78D4 # <CJK>
-0x78DA # <CJK>
-0x78E7 # <CJK>
-0x78E8 # <CJK>
-0x78EC # <CJK>
-0x78EF # <CJK>
-0x78F4 # <CJK>
-0x78FD # <CJK>
-0x7901 # <CJK>
-0x7907 # <CJK>
-0x790E # <CJK>
-0x7911 # <CJK>
-0x7912 # <CJK>
-0x7919 # <CJK>
-0x7926 # <CJK>
-0x792A # <CJK>
-0x792B # <CJK>
-0x792C # <CJK>
-0x793A # <CJK>
-0x793C # <CJK>
-0x793E # <CJK>
-0x7940 # <CJK>
-0x7941 # <CJK>
-0x7947 # <CJK>
-0x7948 # <CJK>
-0x7949 # <CJK>
-0x7950 # <CJK>
-0x7953 # <CJK>
-0x7955 # <CJK>
-0x7956 # <CJK>
-0x7957 # <CJK>
-0x795A # <CJK>
-0x795D # <CJK>
-0x795E # <CJK>
-0x795F # <CJK>
-0x7960 # <CJK>
-0x7962 # <CJK>
-0x7965 # <CJK>
-0x7968 # <CJK>
-0x796D # <CJK>
-0x7977 # <CJK>
-0x797A # <CJK>
-0x797F # <CJK>
-0x7980 # <CJK>
-0x7981 # <CJK>
-0x7984 # <CJK>
-0x7985 # <CJK>
-0x798A # <CJK>
-0x798D # <CJK>
-0x798E # <CJK>
-0x798F # <CJK>
-0x799D # <CJK>
-0x79A6 # <CJK>
-0x79A7 # <CJK>
-0x79AA # <CJK>
-0x79AE # <CJK>
-0x79B0 # <CJK>
-0x79B3 # <CJK>
-0x79B9 # <CJK>
-0x79BA # <CJK>
-0x79BD # <CJK>
-0x79BE # <CJK>
-0x79BF # <CJK>
-0x79C0 # <CJK>
-0x79C1 # <CJK>
-0x79C9 # <CJK>
-0x79CB # <CJK>
-0x79D1 # <CJK>
-0x79D2 # <CJK>
-0x79D5 # <CJK>
-0x79D8 # <CJK>
-0x79DF # <CJK>
-0x79E1 # <CJK>
-0x79E3 # <CJK>
-0x79E4 # <CJK>
-0x79E6 # <CJK>
-0x79E7 # <CJK>
-0x79E9 # <CJK>
-0x79EC # <CJK>
-0x79F0 # <CJK>
-0x79FB # <CJK>
-0x7A00 # <CJK>
-0x7A08 # <CJK>
-0x7A0B # <CJK>
-0x7A0D # <CJK>
-0x7A0E # <CJK>
-0x7A14 # <CJK>
-0x7A17 # <CJK>
-0x7A18 # <CJK>
-0x7A19 # <CJK>
-0x7A1A # <CJK>
-0x7A1C # <CJK>
-0x7A1F # <CJK>
-0x7A20 # <CJK>
-0x7A2E # <CJK>
-0x7A31 # <CJK>
-0x7A32 # <CJK>
-0x7A37 # <CJK>
-0x7A3B # <CJK>
-0x7A3C # <CJK>
-0x7A3D # <CJK>
-0x7A3E # <CJK>
-0x7A3F # <CJK>
-0x7A40 # <CJK>
-0x7A42 # <CJK>
-0x7A43 # <CJK>
-0x7A46 # <CJK>
-0x7A49 # <CJK>
-0x7A4D # <CJK>
-0x7A4E # <CJK>
-0x7A4F # <CJK>
-0x7A50 # <CJK>
-0x7A57 # <CJK>
-0x7A61 # <CJK>
-0x7A62 # <CJK>
-0x7A63 # <CJK>
-0x7A69 # <CJK>
-0x7A6B # <CJK>
-0x7A70 # <CJK>
-0x7A74 # <CJK>
-0x7A76 # <CJK>
-0x7A79 # <CJK>
-0x7A7A # <CJK>
-0x7A7D # <CJK>
-0x7A7F # <CJK>
-0x7A81 # <CJK>
-0x7A83 # <CJK>
-0x7A84 # <CJK>
-0x7A88 # <CJK>
-0x7A92 # <CJK>
-0x7A93 # <CJK>
-0x7A95 # <CJK>
-0x7A96 # <CJK>
-0x7A97 # <CJK>
-0x7A98 # <CJK>
-0x7A9F # <CJK>
-0x7AA9 # <CJK>
-0x7AAA # <CJK>
-0x7AAE # <CJK>
-0x7AAF # <CJK>
-0x7AB0 # <CJK>
-0x7AB6 # <CJK>
-0x7ABA # <CJK>
-0x7ABF # <CJK>
-0x7AC3 # <CJK>
-0x7AC4 # <CJK>
-0x7AC5 # <CJK>
-0x7AC7 # <CJK>
-0x7AC8 # <CJK>
-0x7ACA # <CJK>
-0x7ACB # <CJK>
-0x7ACD # <CJK>
-0x7ACF # <CJK>
-0x7AD2 # <CJK>
-0x7AD3 # <CJK>
-0x7AD5 # <CJK>
-0x7AD9 # <CJK>
-0x7ADA # <CJK>
-0x7ADC # <CJK>
-0x7ADD # <CJK>
-0x7ADF # <CJK>
-0x7AE0 # <CJK>
-0x7AE1 # <CJK>
-0x7AE2 # <CJK>
-0x7AE3 # <CJK>
-0x7AE5 # <CJK>
-0x7AE6 # <CJK>
-0x7AEA # <CJK>
-0x7AED # <CJK>
-0x7AEF # <CJK>
-0x7AF0 # <CJK>
-0x7AF6 # <CJK>
-0x7AF8 # <CJK>
-0x7AF9 # <CJK>
-0x7AFA # <CJK>
-0x7AFF # <CJK>
-0x7B02 # <CJK>
-0x7B04 # <CJK>
-0x7B06 # <CJK>
-0x7B08 # <CJK>
-0x7B0A # <CJK>
-0x7B0B # <CJK>
-0x7B0F # <CJK>
-0x7B11 # <CJK>
-0x7B18 # <CJK>
-0x7B19 # <CJK>
-0x7B1B # <CJK>
-0x7B1E # <CJK>
-0x7B20 # <CJK>
-0x7B25 # <CJK>
-0x7B26 # <CJK>
-0x7B28 # <CJK>
-0x7B2C # <CJK>
-0x7B33 # <CJK>
-0x7B35 # <CJK>
-0x7B36 # <CJK>
-0x7B39 # <CJK>
-0x7B45 # <CJK>
-0x7B46 # <CJK>
-0x7B48 # <CJK>
-0x7B49 # <CJK>
-0x7B4B # <CJK>
-0x7B4C # <CJK>
-0x7B4D # <CJK>
-0x7B4F # <CJK>
-0x7B50 # <CJK>
-0x7B51 # <CJK>
-0x7B52 # <CJK>
-0x7B54 # <CJK>
-0x7B56 # <CJK>
-0x7B5D # <CJK>
-0x7B65 # <CJK>
-0x7B67 # <CJK>
-0x7B6C # <CJK>
-0x7B6E # <CJK>
-0x7B70 # <CJK>
-0x7B71 # <CJK>
-0x7B74 # <CJK>
-0x7B75 # <CJK>
-0x7B7A # <CJK>
-0x7B86 # <CJK>
-0x7B87 # <CJK>
-0x7B8B # <CJK>
-0x7B8D # <CJK>
-0x7B8F # <CJK>
-0x7B92 # <CJK>
-0x7B94 # <CJK>
-0x7B95 # <CJK>
-0x7B97 # <CJK>
-0x7B98 # <CJK>
-0x7B99 # <CJK>
-0x7B9A # <CJK>
-0x7B9C # <CJK>
-0x7B9D # <CJK>
-0x7B9F # <CJK>
-0x7BA1 # <CJK>
-0x7BAA # <CJK>
-0x7BAD # <CJK>
-0x7BB1 # <CJK>
-0x7BB4 # <CJK>
-0x7BB8 # <CJK>
-0x7BC0 # <CJK>
-0x7BC1 # <CJK>
-0x7BC4 # <CJK>
-0x7BC6 # <CJK>
-0x7BC7 # <CJK>
-0x7BC9 # <CJK>
-0x7BCB # <CJK>
-0x7BCC # <CJK>
-0x7BCF # <CJK>
-0x7BDD # <CJK>
-0x7BE0 # <CJK>
-0x7BE4 # <CJK>
-0x7BE5 # <CJK>
-0x7BE6 # <CJK>
-0x7BE9 # <CJK>
-0x7BED # <CJK>
-0x7BF3 # <CJK>
-0x7BF6 # <CJK>
-0x7BF7 # <CJK>
-0x7C00 # <CJK>
-0x7C07 # <CJK>
-0x7C0D # <CJK>
-0x7C11 # <CJK>
-0x7C12 # <CJK>
-0x7C13 # <CJK>
-0x7C14 # <CJK>
-0x7C17 # <CJK>
-0x7C1F # <CJK>
-0x7C21 # <CJK>
-0x7C23 # <CJK>
-0x7C27 # <CJK>
-0x7C2A # <CJK>
-0x7C2B # <CJK>
-0x7C37 # <CJK>
-0x7C38 # <CJK>
-0x7C3D # <CJK>
-0x7C3E # <CJK>
-0x7C3F # <CJK>
-0x7C40 # <CJK>
-0x7C43 # <CJK>
-0x7C4C # <CJK>
-0x7C4D # <CJK>
-0x7C4F # <CJK>
-0x7C50 # <CJK>
-0x7C54 # <CJK>
-0x7C56 # <CJK>
-0x7C58 # <CJK>
-0x7C5F # <CJK>
-0x7C60 # <CJK>
-0x7C64 # <CJK>
-0x7C65 # <CJK>
-0x7C6C # <CJK>
-0x7C73 # <CJK>
-0x7C75 # <CJK>
-0x7C7E # <CJK>
-0x7C81 # <CJK>
-0x7C82 # <CJK>
-0x7C83 # <CJK>
-0x7C89 # <CJK>
-0x7C8B # <CJK>
-0x7C8D # <CJK>
-0x7C90 # <CJK>
-0x7C92 # <CJK>
-0x7C95 # <CJK>
-0x7C97 # <CJK>
-0x7C98 # <CJK>
-0x7C9B # <CJK>
-0x7C9F # <CJK>
-0x7CA1 # <CJK>
-0x7CA2 # <CJK>
-0x7CA4 # <CJK>
-0x7CA5 # <CJK>
-0x7CA7 # <CJK>
-0x7CA8 # <CJK>
-0x7CAB # <CJK>
-0x7CAD # <CJK>
-0x7CAE # <CJK>
-0x7CB1 # <CJK>
-0x7CB2 # <CJK>
-0x7CB3 # <CJK>
-0x7CB9 # <CJK>
-0x7CBD # <CJK>
-0x7CBE # <CJK>
-0x7CC0 # <CJK>
-0x7CC2 # <CJK>
-0x7CC5 # <CJK>
-0x7CCA # <CJK>
-0x7CCE # <CJK>
-0x7CD2 # <CJK>
-0x7CD6 # <CJK>
-0x7CD8 # <CJK>
-0x7CDC # <CJK>
-0x7CDE # <CJK>
-0x7CDF # <CJK>
-0x7CE0 # <CJK>
-0x7CE2 # <CJK>
-0x7CE7 # <CJK>
-0x7CEF # <CJK>
-0x7CF2 # <CJK>
-0x7CF4 # <CJK>
-0x7CF6 # <CJK>
-0x7CF8 # <CJK>
-0x7CFA # <CJK>
-0x7CFB # <CJK>
-0x7CFE # <CJK>
-0x7D00 # <CJK>
-0x7D02 # <CJK>
-0x7D04 # <CJK>
-0x7D05 # <CJK>
-0x7D06 # <CJK>
-0x7D0A # <CJK>
-0x7D0B # <CJK>
-0x7D0D # <CJK>
-0x7D10 # <CJK>
-0x7D14 # <CJK>
-0x7D15 # <CJK>
-0x7D17 # <CJK>
-0x7D18 # <CJK>
-0x7D19 # <CJK>
-0x7D1A # <CJK>
-0x7D1B # <CJK>
-0x7D1C # <CJK>
-0x7D20 # <CJK>
-0x7D21 # <CJK>
-0x7D22 # <CJK>
-0x7D2B # <CJK>
-0x7D2C # <CJK>
-0x7D2E # <CJK>
-0x7D2F # <CJK>
-0x7D30 # <CJK>
-0x7D32 # <CJK>
-0x7D33 # <CJK>
-0x7D35 # <CJK>
-0x7D39 # <CJK>
-0x7D3A # <CJK>
-0x7D3F # <CJK>
-0x7D42 # <CJK>
-0x7D43 # <CJK>
-0x7D44 # <CJK>
-0x7D45 # <CJK>
-0x7D46 # <CJK>
-0x7D4B # <CJK>
-0x7D4C # <CJK>
-0x7D4E # <CJK>
-0x7D4F # <CJK>
-0x7D50 # <CJK>
-0x7D56 # <CJK>
-0x7D5B # <CJK>
-0x7D5E # <CJK>
-0x7D61 # <CJK>
-0x7D62 # <CJK>
-0x7D63 # <CJK>
-0x7D66 # <CJK>
-0x7D68 # <CJK>
-0x7D6E # <CJK>
-0x7D71 # <CJK>
-0x7D72 # <CJK>
-0x7D73 # <CJK>
-0x7D75 # <CJK>
-0x7D76 # <CJK>
-0x7D79 # <CJK>
-0x7D7D # <CJK>
-0x7D89 # <CJK>
-0x7D8F # <CJK>
-0x7D93 # <CJK>
-0x7D99 # <CJK>
-0x7D9A # <CJK>
-0x7D9B # <CJK>
-0x7D9C # <CJK>
-0x7D9F # <CJK>
-0x7DA2 # <CJK>
-0x7DA3 # <CJK>
-0x7DAB # <CJK>
-0x7DAC # <CJK>
-0x7DAD # <CJK>
-0x7DAE # <CJK>
-0x7DAF # <CJK>
-0x7DB0 # <CJK>
-0x7DB1 # <CJK>
-0x7DB2 # <CJK>
-0x7DB4 # <CJK>
-0x7DB5 # <CJK>
-0x7DB8 # <CJK>
-0x7DBA # <CJK>
-0x7DBB # <CJK>
-0x7DBD # <CJK>
-0x7DBE # <CJK>
-0x7DBF # <CJK>
-0x7DC7 # <CJK>
-0x7DCA # <CJK>
-0x7DCB # <CJK>
-0x7DCF # <CJK>
-0x7DD1 # <CJK>
-0x7DD2 # <CJK>
-0x7DD5 # <CJK>
-0x7DD8 # <CJK>
-0x7DDA # <CJK>
-0x7DDC # <CJK>
-0x7DDD # <CJK>
-0x7DDE # <CJK>
-0x7DE0 # <CJK>
-0x7DE1 # <CJK>
-0x7DE4 # <CJK>
-0x7DE8 # <CJK>
-0x7DE9 # <CJK>
-0x7DEC # <CJK>
-0x7DEF # <CJK>
-0x7DF2 # <CJK>
-0x7DF4 # <CJK>
-0x7DFB # <CJK>
-0x7E01 # <CJK>
-0x7E04 # <CJK>
-0x7E05 # <CJK>
-0x7E09 # <CJK>
-0x7E0A # <CJK>
-0x7E0B # <CJK>
-0x7E12 # <CJK>
-0x7E1B # <CJK>
-0x7E1E # <CJK>
-0x7E1F # <CJK>
-0x7E21 # <CJK>
-0x7E22 # <CJK>
-0x7E23 # <CJK>
-0x7E26 # <CJK>
-0x7E2B # <CJK>
-0x7E2E # <CJK>
-0x7E31 # <CJK>
-0x7E32 # <CJK>
-0x7E35 # <CJK>
-0x7E37 # <CJK>
-0x7E39 # <CJK>
-0x7E3A # <CJK>
-0x7E3B # <CJK>
-0x7E3D # <CJK>
-0x7E3E # <CJK>
-0x7E41 # <CJK>
-0x7E43 # <CJK>
-0x7E46 # <CJK>
-0x7E4A # <CJK>
-0x7E4B # <CJK>
-0x7E4D # <CJK>
-0x7E54 # <CJK>
-0x7E55 # <CJK>
-0x7E56 # <CJK>
-0x7E59 # <CJK>
-0x7E5A # <CJK>
-0x7E5D # <CJK>
-0x7E5E # <CJK>
-0x7E66 # <CJK>
-0x7E67 # <CJK>
-0x7E69 # <CJK>
-0x7E6A # <CJK>
-0x7E6D # <CJK>
-0x7E70 # <CJK>
-0x7E79 # <CJK>
-0x7E7B # <CJK>
-0x7E7C # <CJK>
-0x7E7D # <CJK>
-0x7E7F # <CJK>
-0x7E82 # <CJK>
-0x7E83 # <CJK>
-0x7E88 # <CJK>
-0x7E89 # <CJK>
-0x7E8C # <CJK>
-0x7E8E # <CJK>
-0x7E8F # <CJK>
-0x7E90 # <CJK>
-0x7E92 # <CJK>
-0x7E93 # <CJK>
-0x7E94 # <CJK>
-0x7E96 # <CJK>
-0x7E9B # <CJK>
-0x7E9C # <CJK>
-0x7F36 # <CJK>
-0x7F38 # <CJK>
-0x7F3A # <CJK>
-0x7F45 # <CJK>
-0x7F4C # <CJK>
-0x7F4D # <CJK>
-0x7F4E # <CJK>
-0x7F50 # <CJK>
-0x7F51 # <CJK>
-0x7F54 # <CJK>
-0x7F55 # <CJK>
-0x7F58 # <CJK>
-0x7F5F # <CJK>
-0x7F60 # <CJK>
-0x7F67 # <CJK>
-0x7F68 # <CJK>
-0x7F69 # <CJK>
-0x7F6A # <CJK>
-0x7F6B # <CJK>
-0x7F6E # <CJK>
-0x7F70 # <CJK>
-0x7F72 # <CJK>
-0x7F75 # <CJK>
-0x7F77 # <CJK>
-0x7F78 # <CJK>
-0x7F79 # <CJK>
-0x7F82 # <CJK>
-0x7F83 # <CJK>
-0x7F85 # <CJK>
-0x7F86 # <CJK>
-0x7F87 # <CJK>
-0x7F88 # <CJK>
-0x7F8A # <CJK>
-0x7F8C # <CJK>
-0x7F8E # <CJK>
-0x7F94 # <CJK>
-0x7F9A # <CJK>
-0x7F9D # <CJK>
-0x7F9E # <CJK>
-0x7FA3 # <CJK>
-0x7FA4 # <CJK>
-0x7FA8 # <CJK>
-0x7FA9 # <CJK>
-0x7FAE # <CJK>
-0x7FAF # <CJK>
-0x7FB2 # <CJK>
-0x7FB6 # <CJK>
-0x7FB8 # <CJK>
-0x7FB9 # <CJK>
-0x7FBD # <CJK>
-0x7FC1 # <CJK>
-0x7FC5 # <CJK>
-0x7FC6 # <CJK>
-0x7FCA # <CJK>
-0x7FCC # <CJK>
-0x7FD2 # <CJK>
-0x7FD4 # <CJK>
-0x7FD5 # <CJK>
-0x7FE0 # <CJK>
-0x7FE1 # <CJK>
-0x7FE6 # <CJK>
-0x7FE9 # <CJK>
-0x7FEB # <CJK>
-0x7FF0 # <CJK>
-0x7FF3 # <CJK>
-0x7FF9 # <CJK>
-0x7FFB # <CJK>
-0x7FFC # <CJK>
-0x8000 # <CJK>
-0x8001 # <CJK>
-0x8003 # <CJK>
-0x8004 # <CJK>
-0x8005 # <CJK>
-0x8006 # <CJK>
-0x800B # <CJK>
-0x800C # <CJK>
-0x8010 # <CJK>
-0x8012 # <CJK>
-0x8015 # <CJK>
-0x8017 # <CJK>
-0x8018 # <CJK>
-0x8019 # <CJK>
-0x801C # <CJK>
-0x8021 # <CJK>
-0x8028 # <CJK>
-0x8033 # <CJK>
-0x8036 # <CJK>
-0x803B # <CJK>
-0x803D # <CJK>
-0x803F # <CJK>
-0x8046 # <CJK>
-0x804A # <CJK>
-0x8052 # <CJK>
-0x8056 # <CJK>
-0x8058 # <CJK>
-0x805A # <CJK>
-0x805E # <CJK>
-0x805F # <CJK>
-0x8061 # <CJK>
-0x8062 # <CJK>
-0x8068 # <CJK>
-0x806F # <CJK>
-0x8070 # <CJK>
-0x8072 # <CJK>
-0x8073 # <CJK>
-0x8074 # <CJK>
-0x8076 # <CJK>
-0x8077 # <CJK>
-0x8079 # <CJK>
-0x807D # <CJK>
-0x807E # <CJK>
-0x807F # <CJK>
-0x8084 # <CJK>
-0x8085 # <CJK>
-0x8086 # <CJK>
-0x8087 # <CJK>
-0x8089 # <CJK>
-0x808B # <CJK>
-0x808C # <CJK>
-0x8093 # <CJK>
-0x8096 # <CJK>
-0x8098 # <CJK>
-0x809A # <CJK>
-0x809B # <CJK>
-0x809D # <CJK>
-0x80A1 # <CJK>
-0x80A2 # <CJK>
-0x80A5 # <CJK>
-0x80A9 # <CJK>
-0x80AA # <CJK>
-0x80AC # <CJK>
-0x80AD # <CJK>
-0x80AF # <CJK>
-0x80B1 # <CJK>
-0x80B2 # <CJK>
-0x80B4 # <CJK>
-0x80BA # <CJK>
-0x80C3 # <CJK>
-0x80C4 # <CJK>
-0x80C6 # <CJK>
-0x80CC # <CJK>
-0x80CE # <CJK>
-0x80D6 # <CJK>
-0x80D9 # <CJK>
-0x80DA # <CJK>
-0x80DB # <CJK>
-0x80DD # <CJK>
-0x80DE # <CJK>
-0x80E1 # <CJK>
-0x80E4 # <CJK>
-0x80E5 # <CJK>
-0x80EF # <CJK>
-0x80F1 # <CJK>
-0x80F4 # <CJK>
-0x80F8 # <CJK>
-0x80FC # <CJK>
-0x80FD # <CJK>
-0x8102 # <CJK>
-0x8105 # <CJK>
-0x8106 # <CJK>
-0x8107 # <CJK>
-0x8108 # <CJK>
-0x8109 # <CJK>
-0x810A # <CJK>
-0x811A # <CJK>
-0x811B # <CJK>
-0x8123 # <CJK>
-0x8129 # <CJK>
-0x812F # <CJK>
-0x8131 # <CJK>
-0x8133 # <CJK>
-0x8139 # <CJK>
-0x813E # <CJK>
-0x8146 # <CJK>
-0x814B # <CJK>
-0x814E # <CJK>
-0x8150 # <CJK>
-0x8151 # <CJK>
-0x8153 # <CJK>
-0x8154 # <CJK>
-0x8155 # <CJK>
-0x815F # <CJK>
-0x8165 # <CJK>
-0x8166 # <CJK>
-0x816B # <CJK>
-0x816E # <CJK>
-0x8170 # <CJK>
-0x8171 # <CJK>
-0x8174 # <CJK>
-0x8178 # <CJK>
-0x8179 # <CJK>
-0x817A # <CJK>
-0x817F # <CJK>
-0x8180 # <CJK>
-0x8182 # <CJK>
-0x8183 # <CJK>
-0x8188 # <CJK>
-0x818A # <CJK>
-0x818F # <CJK>
-0x8193 # <CJK>
-0x8195 # <CJK>
-0x819A # <CJK>
-0x819C # <CJK>
-0x819D # <CJK>
-0x81A0 # <CJK>
-0x81A3 # <CJK>
-0x81A4 # <CJK>
-0x81A8 # <CJK>
-0x81A9 # <CJK>
-0x81B0 # <CJK>
-0x81B3 # <CJK>
-0x81B5 # <CJK>
-0x81B8 # <CJK>
-0x81BA # <CJK>
-0x81BD # <CJK>
-0x81BE # <CJK>
-0x81BF # <CJK>
-0x81C0 # <CJK>
-0x81C2 # <CJK>
-0x81C6 # <CJK>
-0x81C8 # <CJK>
-0x81C9 # <CJK>
-0x81CD # <CJK>
-0x81D1 # <CJK>
-0x81D3 # <CJK>
-0x81D8 # <CJK>
-0x81D9 # <CJK>
-0x81DA # <CJK>
-0x81DF # <CJK>
-0x81E0 # <CJK>
-0x81E3 # <CJK>
-0x81E5 # <CJK>
-0x81E7 # <CJK>
-0x81E8 # <CJK>
-0x81EA # <CJK>
-0x81ED # <CJK>
-0x81F3 # <CJK>
-0x81F4 # <CJK>
-0x81FA # <CJK>
-0x81FB # <CJK>
-0x81FC # <CJK>
-0x81FE # <CJK>
-0x8201 # <CJK>
-0x8202 # <CJK>
-0x8205 # <CJK>
-0x8207 # <CJK>
-0x8208 # <CJK>
-0x8209 # <CJK>
-0x820A # <CJK>
-0x820C # <CJK>
-0x820D # <CJK>
-0x820E # <CJK>
-0x8210 # <CJK>
-0x8212 # <CJK>
-0x8216 # <CJK>
-0x8217 # <CJK>
-0x8218 # <CJK>
-0x821B # <CJK>
-0x821C # <CJK>
-0x821E # <CJK>
-0x821F # <CJK>
-0x8229 # <CJK>
-0x822A # <CJK>
-0x822B # <CJK>
-0x822C # <CJK>
-0x822E # <CJK>
-0x8233 # <CJK>
-0x8235 # <CJK>
-0x8236 # <CJK>
-0x8237 # <CJK>
-0x8238 # <CJK>
-0x8239 # <CJK>
-0x8240 # <CJK>
-0x8247 # <CJK>
-0x8258 # <CJK>
-0x8259 # <CJK>
-0x825A # <CJK>
-0x825D # <CJK>
-0x825F # <CJK>
-0x8262 # <CJK>
-0x8264 # <CJK>
-0x8266 # <CJK>
-0x8268 # <CJK>
-0x826A # <CJK>
-0x826B # <CJK>
-0x826E # <CJK>
-0x826F # <CJK>
-0x8271 # <CJK>
-0x8272 # <CJK>
-0x8276 # <CJK>
-0x8277 # <CJK>
-0x8278 # <CJK>
-0x827E # <CJK>
-0x828B # <CJK>
-0x828D # <CJK>
-0x8292 # <CJK>
-0x8299 # <CJK>
-0x829D # <CJK>
-0x829F # <CJK>
-0x82A5 # <CJK>
-0x82A6 # <CJK>
-0x82AB # <CJK>
-0x82AC # <CJK>
-0x82AD # <CJK>
-0x82AF # <CJK>
-0x82B1 # <CJK>
-0x82B3 # <CJK>
-0x82B8 # <CJK>
-0x82B9 # <CJK>
-0x82BB # <CJK>
-0x82BD # <CJK>
-0x82C5 # <CJK>
-0x82D1 # <CJK>
-0x82D2 # <CJK>
-0x82D3 # <CJK>
-0x82D4 # <CJK>
-0x82D7 # <CJK>
-0x82D9 # <CJK>
-0x82DB # <CJK>
-0x82DC # <CJK>
-0x82DE # <CJK>
-0x82DF # <CJK>
-0x82E1 # <CJK>
-0x82E3 # <CJK>
-0x82E5 # <CJK>
-0x82E6 # <CJK>
-0x82E7 # <CJK>
-0x82EB # <CJK>
-0x82F1 # <CJK>
-0x82F3 # <CJK>
-0x82F4 # <CJK>
-0x82F9 # <CJK>
-0x82FA # <CJK>
-0x82FB # <CJK>
-0x8302 # <CJK>
-0x8303 # <CJK>
-0x8304 # <CJK>
-0x8305 # <CJK>
-0x8306 # <CJK>
-0x8309 # <CJK>
-0x830E # <CJK>
-0x8316 # <CJK>
-0x8317 # <CJK>
-0x8318 # <CJK>
-0x831C # <CJK>
-0x8323 # <CJK>
-0x8328 # <CJK>
-0x832B # <CJK>
-0x832F # <CJK>
-0x8331 # <CJK>
-0x8332 # <CJK>
-0x8334 # <CJK>
-0x8335 # <CJK>
-0x8336 # <CJK>
-0x8338 # <CJK>
-0x8339 # <CJK>
-0x8340 # <CJK>
-0x8345 # <CJK>
-0x8349 # <CJK>
-0x834A # <CJK>
-0x834F # <CJK>
-0x8350 # <CJK>
-0x8352 # <CJK>
-0x8358 # <CJK>
-0x8373 # <CJK>
-0x8375 # <CJK>
-0x8377 # <CJK>
-0x837B # <CJK>
-0x837C # <CJK>
-0x8385 # <CJK>
-0x8387 # <CJK>
-0x8389 # <CJK>
-0x838A # <CJK>
-0x838E # <CJK>
-0x8393 # <CJK>
-0x8396 # <CJK>
-0x839A # <CJK>
-0x839E # <CJK>
-0x839F # <CJK>
-0x83A0 # <CJK>
-0x83A2 # <CJK>
-0x83A8 # <CJK>
-0x83AA # <CJK>
-0x83AB # <CJK>
-0x83B1 # <CJK>
-0x83B5 # <CJK>
-0x83BD # <CJK>
-0x83C1 # <CJK>
-0x83C5 # <CJK>
-0x83CA # <CJK>
-0x83CC # <CJK>
-0x83CE # <CJK>
-0x83D3 # <CJK>
-0x83D6 # <CJK>
-0x83D8 # <CJK>
-0x83DC # <CJK>
-0x83DF # <CJK>
-0x83E0 # <CJK>
-0x83E9 # <CJK>
-0x83EB # <CJK>
-0x83EF # <CJK>
-0x83F0 # <CJK>
-0x83F1 # <CJK>
-0x83F2 # <CJK>
-0x83F4 # <CJK>
-0x83F7 # <CJK>
-0x83FB # <CJK>
-0x83FD # <CJK>
-0x8403 # <CJK>
-0x8404 # <CJK>
-0x8407 # <CJK>
-0x840B # <CJK>
-0x840C # <CJK>
-0x840D # <CJK>
-0x840E # <CJK>
-0x8413 # <CJK>
-0x8420 # <CJK>
-0x8422 # <CJK>
-0x8429 # <CJK>
-0x842A # <CJK>
-0x842C # <CJK>
-0x8431 # <CJK>
-0x8435 # <CJK>
-0x8438 # <CJK>
-0x843C # <CJK>
-0x843D # <CJK>
-0x8446 # <CJK>
-0x8449 # <CJK>
-0x844E # <CJK>
-0x8457 # <CJK>
-0x845B # <CJK>
-0x8461 # <CJK>
-0x8462 # <CJK>
-0x8463 # <CJK>
-0x8466 # <CJK>
-0x8469 # <CJK>
-0x846B # <CJK>
-0x846C # <CJK>
-0x846D # <CJK>
-0x846E # <CJK>
-0x846F # <CJK>
-0x8471 # <CJK>
-0x8475 # <CJK>
-0x8477 # <CJK>
-0x8479 # <CJK>
-0x847A # <CJK>
-0x8482 # <CJK>
-0x8484 # <CJK>
-0x848B # <CJK>
-0x8490 # <CJK>
-0x8494 # <CJK>
-0x8499 # <CJK>
-0x849C # <CJK>
-0x849F # <CJK>
-0x84A1 # <CJK>
-0x84AD # <CJK>
-0x84B2 # <CJK>
-0x84B8 # <CJK>
-0x84B9 # <CJK>
-0x84BB # <CJK>
-0x84BC # <CJK>
-0x84BF # <CJK>
-0x84C1 # <CJK>
-0x84C4 # <CJK>
-0x84C6 # <CJK>
-0x84C9 # <CJK>
-0x84CA # <CJK>
-0x84CB # <CJK>
-0x84CD # <CJK>
-0x84D0 # <CJK>
-0x84D1 # <CJK>
-0x84D6 # <CJK>
-0x84D9 # <CJK>
-0x84DA # <CJK>
-0x84EC # <CJK>
-0x84EE # <CJK>
-0x84F4 # <CJK>
-0x84FC # <CJK>
-0x84FF # <CJK>
-0x8500 # <CJK>
-0x8506 # <CJK>
-0x8511 # <CJK>
-0x8513 # <CJK>
-0x8514 # <CJK>
-0x8515 # <CJK>
-0x8517 # <CJK>
-0x8518 # <CJK>
-0x851A # <CJK>
-0x851F # <CJK>
-0x8521 # <CJK>
-0x8526 # <CJK>
-0x852C # <CJK>
-0x852D # <CJK>
-0x8535 # <CJK>
-0x853D # <CJK>
-0x8540 # <CJK>
-0x8541 # <CJK>
-0x8543 # <CJK>
-0x8548 # <CJK>
-0x8549 # <CJK>
-0x854A # <CJK>
-0x854B # <CJK>
-0x854E # <CJK>
-0x8555 # <CJK>
-0x8557 # <CJK>
-0x8558 # <CJK>
-0x855A # <CJK>
-0x8563 # <CJK>
-0x8568 # <CJK>
-0x8569 # <CJK>
-0x856A # <CJK>
-0x856D # <CJK>
-0x8577 # <CJK>
-0x857E # <CJK>
-0x8580 # <CJK>
-0x8584 # <CJK>
-0x8587 # <CJK>
-0x8588 # <CJK>
-0x858A # <CJK>
-0x8590 # <CJK>
-0x8591 # <CJK>
-0x8594 # <CJK>
-0x8597 # <CJK>
-0x8599 # <CJK>
-0x859B # <CJK>
-0x859C # <CJK>
-0x85A4 # <CJK>
-0x85A6 # <CJK>
-0x85A8 # <CJK>
-0x85A9 # <CJK>
-0x85AA # <CJK>
-0x85AB # <CJK>
-0x85AC # <CJK>
-0x85AE # <CJK>
-0x85AF # <CJK>
-0x85B9 # <CJK>
-0x85BA # <CJK>
-0x85C1 # <CJK>
-0x85C9 # <CJK>
-0x85CD # <CJK>
-0x85CF # <CJK>
-0x85D0 # <CJK>
-0x85D5 # <CJK>
-0x85DC # <CJK>
-0x85DD # <CJK>
-0x85E4 # <CJK>
-0x85E5 # <CJK>
-0x85E9 # <CJK>
-0x85EA # <CJK>
-0x85F7 # <CJK>
-0x85F9 # <CJK>
-0x85FA # <CJK>
-0x85FB # <CJK>
-0x85FE # <CJK>
-0x8602 # <CJK>
-0x8606 # <CJK>
-0x8607 # <CJK>
-0x860A # <CJK>
-0x860B # <CJK>
-0x8613 # <CJK>
-0x8616 # <CJK>
-0x8617 # <CJK>
-0x861A # <CJK>
-0x8622 # <CJK>
-0x862D # <CJK>
-0x862F # <CJK>
-0x8630 # <CJK>
-0x863F # <CJK>
-0x864D # <CJK>
-0x864E # <CJK>
-0x8650 # <CJK>
-0x8654 # <CJK>
-0x8655 # <CJK>
-0x865A # <CJK>
-0x865C # <CJK>
-0x865E # <CJK>
-0x865F # <CJK>
-0x8667 # <CJK>
-0x866B # <CJK>
-0x8671 # <CJK>
-0x8679 # <CJK>
-0x867B # <CJK>
-0x868A # <CJK>
-0x868B # <CJK>
-0x868C # <CJK>
-0x8693 # <CJK>
-0x8695 # <CJK>
-0x86A3 # <CJK>
-0x86A4 # <CJK>
-0x86A9 # <CJK>
-0x86AA # <CJK>
-0x86AB # <CJK>
-0x86AF # <CJK>
-0x86B0 # <CJK>
-0x86B6 # <CJK>
-0x86C4 # <CJK>
-0x86C6 # <CJK>
-0x86C7 # <CJK>
-0x86C9 # <CJK>
-0x86CB # <CJK>
-0x86CD # <CJK>
-0x86CE # <CJK>
-0x86D4 # <CJK>
-0x86D9 # <CJK>
-0x86DB # <CJK>
-0x86DE # <CJK>
-0x86DF # <CJK>
-0x86E4 # <CJK>
-0x86E9 # <CJK>
-0x86EC # <CJK>
-0x86ED # <CJK>
-0x86EE # <CJK>
-0x86EF # <CJK>
-0x86F8 # <CJK>
-0x86F9 # <CJK>
-0x86FB # <CJK>
-0x86FE # <CJK>
-0x8700 # <CJK>
-0x8702 # <CJK>
-0x8703 # <CJK>
-0x8706 # <CJK>
-0x8708 # <CJK>
-0x8709 # <CJK>
-0x870A # <CJK>
-0x870D # <CJK>
-0x8711 # <CJK>
-0x8712 # <CJK>
-0x8718 # <CJK>
-0x871A # <CJK>
-0x871C # <CJK>
-0x8725 # <CJK>
-0x8729 # <CJK>
-0x8734 # <CJK>
-0x8737 # <CJK>
-0x873B # <CJK>
-0x873F # <CJK>
-0x8749 # <CJK>
-0x874B # <CJK>
-0x874C # <CJK>
-0x874E # <CJK>
-0x8753 # <CJK>
-0x8755 # <CJK>
-0x8757 # <CJK>
-0x8759 # <CJK>
-0x875F # <CJK>
-0x8760 # <CJK>
-0x8763 # <CJK>
-0x8766 # <CJK>
-0x8768 # <CJK>
-0x876A # <CJK>
-0x876E # <CJK>
-0x8774 # <CJK>
-0x8776 # <CJK>
-0x8778 # <CJK>
-0x877F # <CJK>
-0x8782 # <CJK>
-0x878D # <CJK>
-0x879F # <CJK>
-0x87A2 # <CJK>
-0x87AB # <CJK>
-0x87AF # <CJK>
-0x87B3 # <CJK>
-0x87BA # <CJK>
-0x87BB # <CJK>
-0x87BD # <CJK>
-0x87C0 # <CJK>
-0x87C4 # <CJK>
-0x87C6 # <CJK>
-0x87C7 # <CJK>
-0x87CB # <CJK>
-0x87D0 # <CJK>
-0x87D2 # <CJK>
-0x87E0 # <CJK>
-0x87EF # <CJK>
-0x87F2 # <CJK>
-0x87F6 # <CJK>
-0x87F7 # <CJK>
-0x87F9 # <CJK>
-0x87FB # <CJK>
-0x87FE # <CJK>
-0x8805 # <CJK>
-0x880D # <CJK>
-0x880E # <CJK>
-0x880F # <CJK>
-0x8811 # <CJK>
-0x8815 # <CJK>
-0x8816 # <CJK>
-0x8821 # <CJK>
-0x8822 # <CJK>
-0x8823 # <CJK>
-0x8827 # <CJK>
-0x8831 # <CJK>
-0x8836 # <CJK>
-0x8839 # <CJK>
-0x883B # <CJK>
-0x8840 # <CJK>
-0x8842 # <CJK>
-0x8844 # <CJK>
-0x8846 # <CJK>
-0x884C # <CJK>
-0x884D # <CJK>
-0x8852 # <CJK>
-0x8853 # <CJK>
-0x8857 # <CJK>
-0x8859 # <CJK>
-0x885B # <CJK>
-0x885D # <CJK>
-0x885E # <CJK>
-0x8861 # <CJK>
-0x8862 # <CJK>
-0x8863 # <CJK>
-0x8868 # <CJK>
-0x886B # <CJK>
-0x8870 # <CJK>
-0x8872 # <CJK>
-0x8875 # <CJK>
-0x8877 # <CJK>
-0x887D # <CJK>
-0x887E # <CJK>
-0x887F # <CJK>
-0x8881 # <CJK>
-0x8882 # <CJK>
-0x8888 # <CJK>
-0x888B # <CJK>
-0x888D # <CJK>
-0x8892 # <CJK>
-0x8896 # <CJK>
-0x8897 # <CJK>
-0x8899 # <CJK>
-0x889E # <CJK>
-0x88A2 # <CJK>
-0x88A4 # <CJK>
-0x88AB # <CJK>
-0x88AE # <CJK>
-0x88B0 # <CJK>
-0x88B1 # <CJK>
-0x88B4 # <CJK>
-0x88B5 # <CJK>
-0x88B7 # <CJK>
-0x88BF # <CJK>
-0x88C1 # <CJK>
-0x88C2 # <CJK>
-0x88C3 # <CJK>
-0x88C4 # <CJK>
-0x88C5 # <CJK>
-0x88CF # <CJK>
-0x88D4 # <CJK>
-0x88D5 # <CJK>
-0x88D8 # <CJK>
-0x88D9 # <CJK>
-0x88DC # <CJK>
-0x88DD # <CJK>
-0x88DF # <CJK>
-0x88E1 # <CJK>
-0x88E8 # <CJK>
-0x88F2 # <CJK>
-0x88F3 # <CJK>
-0x88F4 # <CJK>
-0x88F8 # <CJK>
-0x88F9 # <CJK>
-0x88FC # <CJK>
-0x88FD # <CJK>
-0x88FE # <CJK>
-0x8902 # <CJK>
-0x8904 # <CJK>
-0x8907 # <CJK>
-0x890A # <CJK>
-0x890C # <CJK>
-0x8910 # <CJK>
-0x8912 # <CJK>
-0x8913 # <CJK>
-0x891D # <CJK>
-0x891E # <CJK>
-0x8925 # <CJK>
-0x892A # <CJK>
-0x892B # <CJK>
-0x8936 # <CJK>
-0x8938 # <CJK>
-0x893B # <CJK>
-0x8941 # <CJK>
-0x8943 # <CJK>
-0x8944 # <CJK>
-0x894C # <CJK>
-0x894D # <CJK>
-0x8956 # <CJK>
-0x895E # <CJK>
-0x895F # <CJK>
-0x8960 # <CJK>
-0x8964 # <CJK>
-0x8966 # <CJK>
-0x896A # <CJK>
-0x896D # <CJK>
-0x896F # <CJK>
-0x8972 # <CJK>
-0x8974 # <CJK>
-0x8977 # <CJK>
-0x897E # <CJK>
-0x897F # <CJK>
-0x8981 # <CJK>
-0x8983 # <CJK>
-0x8986 # <CJK>
-0x8987 # <CJK>
-0x8988 # <CJK>
-0x898A # <CJK>
-0x898B # <CJK>
-0x898F # <CJK>
-0x8993 # <CJK>
-0x8996 # <CJK>
-0x8997 # <CJK>
-0x8998 # <CJK>
-0x899A # <CJK>
-0x89A1 # <CJK>
-0x89A6 # <CJK>
-0x89A7 # <CJK>
-0x89A9 # <CJK>
-0x89AA # <CJK>
-0x89AC # <CJK>
-0x89AF # <CJK>
-0x89B2 # <CJK>
-0x89B3 # <CJK>
-0x89BA # <CJK>
-0x89BD # <CJK>
-0x89BF # <CJK>
-0x89C0 # <CJK>
-0x89D2 # <CJK>
-0x89DA # <CJK>
-0x89DC # <CJK>
-0x89DD # <CJK>
-0x89E3 # <CJK>
-0x89E6 # <CJK>
-0x89E7 # <CJK>
-0x89F4 # <CJK>
-0x89F8 # <CJK>
-0x8A00 # <CJK>
-0x8A02 # <CJK>
-0x8A03 # <CJK>
-0x8A08 # <CJK>
-0x8A0A # <CJK>
-0x8A0C # <CJK>
-0x8A0E # <CJK>
-0x8A10 # <CJK>
-0x8A13 # <CJK>
-0x8A16 # <CJK>
-0x8A17 # <CJK>
-0x8A18 # <CJK>
-0x8A1B # <CJK>
-0x8A1D # <CJK>
-0x8A1F # <CJK>
-0x8A23 # <CJK>
-0x8A25 # <CJK>
-0x8A2A # <CJK>
-0x8A2D # <CJK>
-0x8A31 # <CJK>
-0x8A33 # <CJK>
-0x8A34 # <CJK>
-0x8A36 # <CJK>
-0x8A3A # <CJK>
-0x8A3B # <CJK>
-0x8A3C # <CJK>
-0x8A41 # <CJK>
-0x8A46 # <CJK>
-0x8A48 # <CJK>
-0x8A50 # <CJK>
-0x8A51 # <CJK>
-0x8A52 # <CJK>
-0x8A54 # <CJK>
-0x8A55 # <CJK>
-0x8A5B # <CJK>
-0x8A5E # <CJK>
-0x8A60 # <CJK>
-0x8A62 # <CJK>
-0x8A63 # <CJK>
-0x8A66 # <CJK>
-0x8A69 # <CJK>
-0x8A6B # <CJK>
-0x8A6C # <CJK>
-0x8A6D # <CJK>
-0x8A6E # <CJK>
-0x8A70 # <CJK>
-0x8A71 # <CJK>
-0x8A72 # <CJK>
-0x8A73 # <CJK>
-0x8A7C # <CJK>
-0x8A82 # <CJK>
-0x8A84 # <CJK>
-0x8A85 # <CJK>
-0x8A87 # <CJK>
-0x8A89 # <CJK>
-0x8A8C # <CJK>
-0x8A8D # <CJK>
-0x8A91 # <CJK>
-0x8A93 # <CJK>
-0x8A95 # <CJK>
-0x8A98 # <CJK>
-0x8A9A # <CJK>
-0x8A9E # <CJK>
-0x8AA0 # <CJK>
-0x8AA1 # <CJK>
-0x8AA3 # <CJK>
-0x8AA4 # <CJK>
-0x8AA5 # <CJK>
-0x8AA6 # <CJK>
-0x8AA8 # <CJK>
-0x8AAC # <CJK>
-0x8AAD # <CJK>
-0x8AB0 # <CJK>
-0x8AB2 # <CJK>
-0x8AB9 # <CJK>
-0x8ABC # <CJK>
-0x8ABF # <CJK>
-0x8AC2 # <CJK>
-0x8AC4 # <CJK>
-0x8AC7 # <CJK>
-0x8ACB # <CJK>
-0x8ACC # <CJK>
-0x8ACD # <CJK>
-0x8ACF # <CJK>
-0x8AD2 # <CJK>
-0x8AD6 # <CJK>
-0x8ADA # <CJK>
-0x8ADB # <CJK>
-0x8ADC # <CJK>
-0x8ADE # <CJK>
-0x8AE0 # <CJK>
-0x8AE1 # <CJK>
-0x8AE2 # <CJK>
-0x8AE4 # <CJK>
-0x8AE6 # <CJK>
-0x8AE7 # <CJK>
-0x8AEB # <CJK>
-0x8AED # <CJK>
-0x8AEE # <CJK>
-0x8AF1 # <CJK>
-0x8AF3 # <CJK>
-0x8AF7 # <CJK>
-0x8AF8 # <CJK>
-0x8AFA # <CJK>
-0x8AFE # <CJK>
-0x8B00 # <CJK>
-0x8B01 # <CJK>
-0x8B02 # <CJK>
-0x8B04 # <CJK>
-0x8B07 # <CJK>
-0x8B0C # <CJK>
-0x8B0E # <CJK>
-0x8B10 # <CJK>
-0x8B14 # <CJK>
-0x8B16 # <CJK>
-0x8B17 # <CJK>
-0x8B19 # <CJK>
-0x8B1A # <CJK>
-0x8B1B # <CJK>
-0x8B1D # <CJK>
-0x8B20 # <CJK>
-0x8B21 # <CJK>
-0x8B26 # <CJK>
-0x8B28 # <CJK>
-0x8B2B # <CJK>
-0x8B2C # <CJK>
-0x8B33 # <CJK>
-0x8B39 # <CJK>
-0x8B3E # <CJK>
-0x8B41 # <CJK>
-0x8B49 # <CJK>
-0x8B4C # <CJK>
-0x8B4E # <CJK>
-0x8B4F # <CJK>
-0x8B56 # <CJK>
-0x8B58 # <CJK>
-0x8B5A # <CJK>
-0x8B5B # <CJK>
-0x8B5C # <CJK>
-0x8B5F # <CJK>
-0x8B66 # <CJK>
-0x8B6B # <CJK>
-0x8B6C # <CJK>
-0x8B6F # <CJK>
-0x8B70 # <CJK>
-0x8B71 # <CJK>
-0x8B72 # <CJK>
-0x8B74 # <CJK>
-0x8B77 # <CJK>
-0x8B7D # <CJK>
-0x8B80 # <CJK>
-0x8B83 # <CJK>
-0x8B8A # <CJK>
-0x8B8C # <CJK>
-0x8B8E # <CJK>
-0x8B90 # <CJK>
-0x8B92 # <CJK>
-0x8B93 # <CJK>
-0x8B96 # <CJK>
-0x8B99 # <CJK>
-0x8B9A # <CJK>
-0x8C37 # <CJK>
-0x8C3A # <CJK>
-0x8C3F # <CJK>
-0x8C41 # <CJK>
-0x8C46 # <CJK>
-0x8C48 # <CJK>
-0x8C4A # <CJK>
-0x8C4C # <CJK>
-0x8C4E # <CJK>
-0x8C50 # <CJK>
-0x8C55 # <CJK>
-0x8C5A # <CJK>
-0x8C61 # <CJK>
-0x8C62 # <CJK>
-0x8C6A # <CJK>
-0x8C6B # <CJK>
-0x8C6C # <CJK>
-0x8C78 # <CJK>
-0x8C79 # <CJK>
-0x8C7A # <CJK>
-0x8C7C # <CJK>
-0x8C82 # <CJK>
-0x8C85 # <CJK>
-0x8C89 # <CJK>
-0x8C8A # <CJK>
-0x8C8C # <CJK>
-0x8C8D # <CJK>
-0x8C8E # <CJK>
-0x8C94 # <CJK>
-0x8C98 # <CJK>
-0x8C9D # <CJK>
-0x8C9E # <CJK>
-0x8CA0 # <CJK>
-0x8CA1 # <CJK>
-0x8CA2 # <CJK>
-0x8CA7 # <CJK>
-0x8CA8 # <CJK>
-0x8CA9 # <CJK>
-0x8CAA # <CJK>
-0x8CAB # <CJK>
-0x8CAC # <CJK>
-0x8CAD # <CJK>
-0x8CAE # <CJK>
-0x8CAF # <CJK>
-0x8CB0 # <CJK>
-0x8CB2 # <CJK>
-0x8CB3 # <CJK>
-0x8CB4 # <CJK>
-0x8CB6 # <CJK>
-0x8CB7 # <CJK>
-0x8CB8 # <CJK>
-0x8CBB # <CJK>
-0x8CBC # <CJK>
-0x8CBD # <CJK>
-0x8CBF # <CJK>
-0x8CC0 # <CJK>
-0x8CC1 # <CJK>
-0x8CC2 # <CJK>
-0x8CC3 # <CJK>
-0x8CC4 # <CJK>
-0x8CC7 # <CJK>
-0x8CC8 # <CJK>
-0x8CCA # <CJK>
-0x8CCD # <CJK>
-0x8CCE # <CJK>
-0x8CD1 # <CJK>
-0x8CD3 # <CJK>
-0x8CDA # <CJK>
-0x8CDB # <CJK>
-0x8CDC # <CJK>
-0x8CDE # <CJK>
-0x8CE0 # <CJK>
-0x8CE2 # <CJK>
-0x8CE3 # <CJK>
-0x8CE4 # <CJK>
-0x8CE6 # <CJK>
-0x8CEA # <CJK>
-0x8CED # <CJK>
-0x8CFA # <CJK>
-0x8CFB # <CJK>
-0x8CFC # <CJK>
-0x8CFD # <CJK>
-0x8D04 # <CJK>
-0x8D05 # <CJK>
-0x8D07 # <CJK>
-0x8D08 # <CJK>
-0x8D0A # <CJK>
-0x8D0B # <CJK>
-0x8D0D # <CJK>
-0x8D0F # <CJK>
-0x8D10 # <CJK>
-0x8D13 # <CJK>
-0x8D14 # <CJK>
-0x8D16 # <CJK>
-0x8D64 # <CJK>
-0x8D66 # <CJK>
-0x8D67 # <CJK>
-0x8D6B # <CJK>
-0x8D6D # <CJK>
-0x8D70 # <CJK>
-0x8D71 # <CJK>
-0x8D73 # <CJK>
-0x8D74 # <CJK>
-0x8D77 # <CJK>
-0x8D81 # <CJK>
-0x8D85 # <CJK>
-0x8D8A # <CJK>
-0x8D99 # <CJK>
-0x8DA3 # <CJK>
-0x8DA8 # <CJK>
-0x8DB3 # <CJK>
-0x8DBA # <CJK>
-0x8DBE # <CJK>
-0x8DC2 # <CJK>
-0x8DCB # <CJK>
-0x8DCC # <CJK>
-0x8DCF # <CJK>
-0x8DD6 # <CJK>
-0x8DDA # <CJK>
-0x8DDB # <CJK>
-0x8DDD # <CJK>
-0x8DDF # <CJK>
-0x8DE1 # <CJK>
-0x8DE3 # <CJK>
-0x8DE8 # <CJK>
-0x8DEA # <CJK>
-0x8DEB # <CJK>
-0x8DEF # <CJK>
-0x8DF3 # <CJK>
-0x8DF5 # <CJK>
-0x8DFC # <CJK>
-0x8DFF # <CJK>
-0x8E08 # <CJK>
-0x8E09 # <CJK>
-0x8E0A # <CJK>
-0x8E0F # <CJK>
-0x8E10 # <CJK>
-0x8E1D # <CJK>
-0x8E1E # <CJK>
-0x8E1F # <CJK>
-0x8E2A # <CJK>
-0x8E30 # <CJK>
-0x8E34 # <CJK>
-0x8E35 # <CJK>
-0x8E42 # <CJK>
-0x8E44 # <CJK>
-0x8E47 # <CJK>
-0x8E48 # <CJK>
-0x8E49 # <CJK>
-0x8E4A # <CJK>
-0x8E4C # <CJK>
-0x8E50 # <CJK>
-0x8E55 # <CJK>
-0x8E59 # <CJK>
-0x8E5F # <CJK>
-0x8E60 # <CJK>
-0x8E63 # <CJK>
-0x8E64 # <CJK>
-0x8E72 # <CJK>
-0x8E74 # <CJK>
-0x8E76 # <CJK>
-0x8E7C # <CJK>
-0x8E81 # <CJK>
-0x8E84 # <CJK>
-0x8E85 # <CJK>
-0x8E87 # <CJK>
-0x8E8A # <CJK>
-0x8E8B # <CJK>
-0x8E8D # <CJK>
-0x8E91 # <CJK>
-0x8E93 # <CJK>
-0x8E94 # <CJK>
-0x8E99 # <CJK>
-0x8EA1 # <CJK>
-0x8EAA # <CJK>
-0x8EAB # <CJK>
-0x8EAC # <CJK>
-0x8EAF # <CJK>
-0x8EB0 # <CJK>
-0x8EB1 # <CJK>
-0x8EBE # <CJK>
-0x8EC5 # <CJK>
-0x8EC6 # <CJK>
-0x8EC8 # <CJK>
-0x8ECA # <CJK>
-0x8ECB # <CJK>
-0x8ECC # <CJK>
-0x8ECD # <CJK>
-0x8ED2 # <CJK>
-0x8EDB # <CJK>
-0x8EDF # <CJK>
-0x8EE2 # <CJK>
-0x8EE3 # <CJK>
-0x8EEB # <CJK>
-0x8EF8 # <CJK>
-0x8EFB # <CJK>
-0x8EFC # <CJK>
-0x8EFD # <CJK>
-0x8EFE # <CJK>
-0x8F03 # <CJK>
-0x8F05 # <CJK>
-0x8F09 # <CJK>
-0x8F0A # <CJK>
-0x8F0C # <CJK>
-0x8F12 # <CJK>
-0x8F13 # <CJK>
-0x8F14 # <CJK>
-0x8F15 # <CJK>
-0x8F19 # <CJK>
-0x8F1B # <CJK>
-0x8F1C # <CJK>
-0x8F1D # <CJK>
-0x8F1F # <CJK>
-0x8F26 # <CJK>
-0x8F29 # <CJK>
-0x8F2A # <CJK>
-0x8F2F # <CJK>
-0x8F33 # <CJK>
-0x8F38 # <CJK>
-0x8F39 # <CJK>
-0x8F3B # <CJK>
-0x8F3E # <CJK>
-0x8F3F # <CJK>
-0x8F42 # <CJK>
-0x8F44 # <CJK>
-0x8F45 # <CJK>
-0x8F46 # <CJK>
-0x8F49 # <CJK>
-0x8F4C # <CJK>
-0x8F4D # <CJK>
-0x8F4E # <CJK>
-0x8F57 # <CJK>
-0x8F5C # <CJK>
-0x8F5F # <CJK>
-0x8F61 # <CJK>
-0x8F62 # <CJK>
-0x8F63 # <CJK>
-0x8F64 # <CJK>
-0x8F9B # <CJK>
-0x8F9C # <CJK>
-0x8F9E # <CJK>
-0x8F9F # <CJK>
-0x8FA3 # <CJK>
-0x8FA7 # <CJK>
-0x8FA8 # <CJK>
-0x8FAD # <CJK>
-0x8FAE # <CJK>
-0x8FAF # <CJK>
-0x8FB0 # <CJK>
-0x8FB1 # <CJK>
-0x8FB2 # <CJK>
-0x8FB7 # <CJK>
-0x8FBA # <CJK>
-0x8FBB # <CJK>
-0x8FBC # <CJK>
-0x8FBF # <CJK>
-0x8FC2 # <CJK>
-0x8FC4 # <CJK>
-0x8FC5 # <CJK>
-0x8FCE # <CJK>
-0x8FD1 # <CJK>
-0x8FD4 # <CJK>
-0x8FDA # <CJK>
-0x8FE2 # <CJK>
-0x8FE5 # <CJK>
-0x8FE6 # <CJK>
-0x8FE9 # <CJK>
-0x8FEA # <CJK>
-0x8FEB # <CJK>
-0x8FED # <CJK>
-0x8FEF # <CJK>
-0x8FF0 # <CJK>
-0x8FF4 # <CJK>
-0x8FF7 # <CJK>
-0x8FF8 # <CJK>
-0x8FF9 # <CJK>
-0x8FFA # <CJK>
-0x8FFD # <CJK>
-0x9000 # <CJK>
-0x9001 # <CJK>
-0x9003 # <CJK>
-0x9005 # <CJK>
-0x9006 # <CJK>
-0x900B # <CJK>
-0x900D # <CJK>
-0x900E # <CJK>
-0x900F # <CJK>
-0x9010 # <CJK>
-0x9011 # <CJK>
-0x9013 # <CJK>
-0x9014 # <CJK>
-0x9015 # <CJK>
-0x9016 # <CJK>
-0x9017 # <CJK>
-0x9019 # <CJK>
-0x901A # <CJK>
-0x901D # <CJK>
-0x901E # <CJK>
-0x901F # <CJK>
-0x9020 # <CJK>
-0x9021 # <CJK>
-0x9022 # <CJK>
-0x9023 # <CJK>
-0x9027 # <CJK>
-0x902E # <CJK>
-0x9031 # <CJK>
-0x9032 # <CJK>
-0x9035 # <CJK>
-0x9036 # <CJK>
-0x9038 # <CJK>
-0x9039 # <CJK>
-0x903C # <CJK>
-0x903E # <CJK>
-0x9041 # <CJK>
-0x9042 # <CJK>
-0x9045 # <CJK>
-0x9047 # <CJK>
-0x9049 # <CJK>
-0x904A # <CJK>
-0x904B # <CJK>
-0x904D # <CJK>
-0x904E # <CJK>
-0x904F # <CJK>
-0x9050 # <CJK>
-0x9051 # <CJK>
-0x9052 # <CJK>
-0x9053 # <CJK>
-0x9054 # <CJK>
-0x9055 # <CJK>
-0x9056 # <CJK>
-0x9058 # <CJK>
-0x9059 # <CJK>
-0x905C # <CJK>
-0x905E # <CJK>
-0x9060 # <CJK>
-0x9061 # <CJK>
-0x9063 # <CJK>
-0x9065 # <CJK>
-0x9068 # <CJK>
-0x9069 # <CJK>
-0x906D # <CJK>
-0x906E # <CJK>
-0x906F # <CJK>
-0x9072 # <CJK>
-0x9075 # <CJK>
-0x9076 # <CJK>
-0x9077 # <CJK>
-0x9078 # <CJK>
-0x907A # <CJK>
-0x907C # <CJK>
-0x907D # <CJK>
-0x907F # <CJK>
-0x9080 # <CJK>
-0x9081 # <CJK>
-0x9082 # <CJK>
-0x9083 # <CJK>
-0x9084 # <CJK>
-0x9087 # <CJK>
-0x9089 # <CJK>
-0x908A # <CJK>
-0x908F # <CJK>
-0x9091 # <CJK>
-0x90A3 # <CJK>
-0x90A6 # <CJK>
-0x90A8 # <CJK>
-0x90AA # <CJK>
-0x90AF # <CJK>
-0x90B1 # <CJK>
-0x90B5 # <CJK>
-0x90B8 # <CJK>
-0x90C1 # <CJK>
-0x90CA # <CJK>
-0x90CE # <CJK>
-0x90DB # <CJK>
-0x90E1 # <CJK>
-0x90E2 # <CJK>
-0x90E4 # <CJK>
-0x90E8 # <CJK>
-0x90ED # <CJK>
-0x90F5 # <CJK>
-0x90F7 # <CJK>
-0x90FD # <CJK>
-0x9102 # <CJK>
-0x9112 # <CJK>
-0x9119 # <CJK>
-0x912D # <CJK>
-0x9130 # <CJK>
-0x9132 # <CJK>
-0x9149 # <CJK>
-0x914A # <CJK>
-0x914B # <CJK>
-0x914C # <CJK>
-0x914D # <CJK>
-0x914E # <CJK>
-0x9152 # <CJK>
-0x9154 # <CJK>
-0x9156 # <CJK>
-0x9158 # <CJK>
-0x9162 # <CJK>
-0x9163 # <CJK>
-0x9165 # <CJK>
-0x9169 # <CJK>
-0x916A # <CJK>
-0x916C # <CJK>
-0x9172 # <CJK>
-0x9173 # <CJK>
-0x9175 # <CJK>
-0x9177 # <CJK>
-0x9178 # <CJK>
-0x9182 # <CJK>
-0x9187 # <CJK>
-0x9189 # <CJK>
-0x918B # <CJK>
-0x918D # <CJK>
-0x9190 # <CJK>
-0x9192 # <CJK>
-0x9197 # <CJK>
-0x919C # <CJK>
-0x91A2 # <CJK>
-0x91A4 # <CJK>
-0x91AA # <CJK>
-0x91AB # <CJK>
-0x91AF # <CJK>
-0x91B4 # <CJK>
-0x91B5 # <CJK>
-0x91B8 # <CJK>
-0x91BA # <CJK>
-0x91C0 # <CJK>
-0x91C1 # <CJK>
-0x91C6 # <CJK>
-0x91C7 # <CJK>
-0x91C8 # <CJK>
-0x91C9 # <CJK>
-0x91CB # <CJK>
-0x91CC # <CJK>
-0x91CD # <CJK>
-0x91CE # <CJK>
-0x91CF # <CJK>
-0x91D0 # <CJK>
-0x91D1 # <CJK>
-0x91D6 # <CJK>
-0x91D8 # <CJK>
-0x91DB # <CJK>
-0x91DC # <CJK>
-0x91DD # <CJK>
-0x91DF # <CJK>
-0x91E1 # <CJK>
-0x91E3 # <CJK>
-0x91E6 # <CJK>
-0x91E7 # <CJK>
-0x91F5 # <CJK>
-0x91F6 # <CJK>
-0x91FC # <CJK>
-0x91FF # <CJK>
-0x920D # <CJK>
-0x920E # <CJK>
-0x9211 # <CJK>
-0x9214 # <CJK>
-0x9215 # <CJK>
-0x921E # <CJK>
-0x9229 # <CJK>
-0x922C # <CJK>
-0x9234 # <CJK>
-0x9237 # <CJK>
-0x923F # <CJK>
-0x9244 # <CJK>
-0x9245 # <CJK>
-0x9248 # <CJK>
-0x9249 # <CJK>
-0x924B # <CJK>
-0x9250 # <CJK>
-0x9257 # <CJK>
-0x925A # <CJK>
-0x925B # <CJK>
-0x925E # <CJK>
-0x9262 # <CJK>
-0x9264 # <CJK>
-0x9266 # <CJK>
-0x9271 # <CJK>
-0x927E # <CJK>
-0x9280 # <CJK>
-0x9283 # <CJK>
-0x9285 # <CJK>
-0x9291 # <CJK>
-0x9293 # <CJK>
-0x9295 # <CJK>
-0x9296 # <CJK>
-0x9298 # <CJK>
-0x929A # <CJK>
-0x929B # <CJK>
-0x929C # <CJK>
-0x92AD # <CJK>
-0x92B7 # <CJK>
-0x92B9 # <CJK>
-0x92CF # <CJK>
-0x92D2 # <CJK>
-0x92E4 # <CJK>
-0x92E9 # <CJK>
-0x92EA # <CJK>
-0x92ED # <CJK>
-0x92F2 # <CJK>
-0x92F3 # <CJK>
-0x92F8 # <CJK>
-0x92FA # <CJK>
-0x92FC # <CJK>
-0x9306 # <CJK>
-0x930F # <CJK>
-0x9310 # <CJK>
-0x9318 # <CJK>
-0x9319 # <CJK>
-0x931A # <CJK>
-0x9320 # <CJK>
-0x9322 # <CJK>
-0x9323 # <CJK>
-0x9326 # <CJK>
-0x9328 # <CJK>
-0x932B # <CJK>
-0x932C # <CJK>
-0x932E # <CJK>
-0x932F # <CJK>
-0x9332 # <CJK>
-0x9335 # <CJK>
-0x933A # <CJK>
-0x933B # <CJK>
-0x9344 # <CJK>
-0x934B # <CJK>
-0x934D # <CJK>
-0x9354 # <CJK>
-0x9356 # <CJK>
-0x935B # <CJK>
-0x935C # <CJK>
-0x9360 # <CJK>
-0x936C # <CJK>
-0x936E # <CJK>
-0x9375 # <CJK>
-0x937C # <CJK>
-0x937E # <CJK>
-0x938C # <CJK>
-0x9394 # <CJK>
-0x9396 # <CJK>
-0x9397 # <CJK>
-0x939A # <CJK>
-0x93A7 # <CJK>
-0x93AC # <CJK>
-0x93AD # <CJK>
-0x93AE # <CJK>
-0x93B0 # <CJK>
-0x93B9 # <CJK>
-0x93C3 # <CJK>
-0x93C8 # <CJK>
-0x93D0 # <CJK>
-0x93D1 # <CJK>
-0x93D6 # <CJK>
-0x93D7 # <CJK>
-0x93D8 # <CJK>
-0x93DD # <CJK>
-0x93E1 # <CJK>
-0x93E4 # <CJK>
-0x93E5 # <CJK>
-0x93E8 # <CJK>
-0x9403 # <CJK>
-0x9407 # <CJK>
-0x9410 # <CJK>
-0x9413 # <CJK>
-0x9414 # <CJK>
-0x9418 # <CJK>
-0x9419 # <CJK>
-0x941A # <CJK>
-0x9421 # <CJK>
-0x942B # <CJK>
-0x9435 # <CJK>
-0x9436 # <CJK>
-0x9438 # <CJK>
-0x943A # <CJK>
-0x9441 # <CJK>
-0x9444 # <CJK>
-0x9451 # <CJK>
-0x9452 # <CJK>
-0x9453 # <CJK>
-0x945A # <CJK>
-0x945B # <CJK>
-0x945E # <CJK>
-0x9460 # <CJK>
-0x9462 # <CJK>
-0x946A # <CJK>
-0x9470 # <CJK>
-0x9475 # <CJK>
-0x9477 # <CJK>
-0x947C # <CJK>
-0x947D # <CJK>
-0x947E # <CJK>
-0x947F # <CJK>
-0x9481 # <CJK>
-0x9577 # <CJK>
-0x9580 # <CJK>
-0x9582 # <CJK>
-0x9583 # <CJK>
-0x9587 # <CJK>
-0x9589 # <CJK>
-0x958A # <CJK>
-0x958B # <CJK>
-0x958F # <CJK>
-0x9591 # <CJK>
-0x9593 # <CJK>
-0x9594 # <CJK>
-0x9596 # <CJK>
-0x9598 # <CJK>
-0x9599 # <CJK>
-0x95A0 # <CJK>
-0x95A2 # <CJK>
-0x95A3 # <CJK>
-0x95A4 # <CJK>
-0x95A5 # <CJK>
-0x95A7 # <CJK>
-0x95A8 # <CJK>
-0x95AD # <CJK>
-0x95B2 # <CJK>
-0x95B9 # <CJK>
-0x95BB # <CJK>
-0x95BC # <CJK>
-0x95BE # <CJK>
-0x95C3 # <CJK>
-0x95C7 # <CJK>
-0x95CA # <CJK>
-0x95CC # <CJK>
-0x95CD # <CJK>
-0x95D4 # <CJK>
-0x95D5 # <CJK>
-0x95D6 # <CJK>
-0x95D8 # <CJK>
-0x95DC # <CJK>
-0x95E1 # <CJK>
-0x95E2 # <CJK>
-0x95E5 # <CJK>
-0x961C # <CJK>
-0x9621 # <CJK>
-0x9628 # <CJK>
-0x962A # <CJK>
-0x962E # <CJK>
-0x962F # <CJK>
-0x9632 # <CJK>
-0x963B # <CJK>
-0x963F # <CJK>
-0x9640 # <CJK>
-0x9642 # <CJK>
-0x9644 # <CJK>
-0x964B # <CJK>
-0x964C # <CJK>
-0x964D # <CJK>
-0x964F # <CJK>
-0x9650 # <CJK>
-0x965B # <CJK>
-0x965C # <CJK>
-0x965D # <CJK>
-0x965E # <CJK>
-0x965F # <CJK>
-0x9662 # <CJK>
-0x9663 # <CJK>
-0x9664 # <CJK>
-0x9665 # <CJK>
-0x9666 # <CJK>
-0x966A # <CJK>
-0x966C # <CJK>
-0x9670 # <CJK>
-0x9672 # <CJK>
-0x9673 # <CJK>
-0x9675 # <CJK>
-0x9676 # <CJK>
-0x9677 # <CJK>
-0x9678 # <CJK>
-0x967A # <CJK>
-0x967D # <CJK>
-0x9685 # <CJK>
-0x9686 # <CJK>
-0x9688 # <CJK>
-0x968A # <CJK>
-0x968B # <CJK>
-0x968D # <CJK>
-0x968E # <CJK>
-0x968F # <CJK>
-0x9694 # <CJK>
-0x9695 # <CJK>
-0x9697 # <CJK>
-0x9698 # <CJK>
-0x9699 # <CJK>
-0x969B # <CJK>
-0x969C # <CJK>
-0x96A0 # <CJK>
-0x96A3 # <CJK>
-0x96A7 # <CJK>
-0x96A8 # <CJK>
-0x96AA # <CJK>
-0x96B0 # <CJK>
-0x96B1 # <CJK>
-0x96B2 # <CJK>
-0x96B4 # <CJK>
-0x96B6 # <CJK>
-0x96B7 # <CJK>
-0x96B8 # <CJK>
-0x96B9 # <CJK>
-0x96BB # <CJK>
-0x96BC # <CJK>
-0x96C0 # <CJK>
-0x96C1 # <CJK>
-0x96C4 # <CJK>
-0x96C5 # <CJK>
-0x96C6 # <CJK>
-0x96C7 # <CJK>
-0x96C9 # <CJK>
-0x96CB # <CJK>
-0x96CC # <CJK>
-0x96CD # <CJK>
-0x96CE # <CJK>
-0x96D1 # <CJK>
-0x96D5 # <CJK>
-0x96D6 # <CJK>
-0x96D9 # <CJK>
-0x96DB # <CJK>
-0x96DC # <CJK>
-0x96E2 # <CJK>
-0x96E3 # <CJK>
-0x96E8 # <CJK>
-0x96EA # <CJK>
-0x96EB # <CJK>
-0x96F0 # <CJK>
-0x96F2 # <CJK>
-0x96F6 # <CJK>
-0x96F7 # <CJK>
-0x96F9 # <CJK>
-0x96FB # <CJK>
-0x9700 # <CJK>
-0x9704 # <CJK>
-0x9706 # <CJK>
-0x9707 # <CJK>
-0x9708 # <CJK>
-0x970A # <CJK>
-0x970D # <CJK>
-0x970E # <CJK>
-0x970F # <CJK>
-0x9711 # <CJK>
-0x9713 # <CJK>
-0x9716 # <CJK>
-0x9719 # <CJK>
-0x971C # <CJK>
-0x971E # <CJK>
-0x9724 # <CJK>
-0x9727 # <CJK>
-0x972A # <CJK>
-0x9730 # <CJK>
-0x9732 # <CJK>
-0x9738 # <CJK>
-0x9739 # <CJK>
-0x973D # <CJK>
-0x973E # <CJK>
-0x9742 # <CJK>
-0x9744 # <CJK>
-0x9746 # <CJK>
-0x9748 # <CJK>
-0x9749 # <CJK>
-0x9752 # <CJK>
-0x9756 # <CJK>
-0x9759 # <CJK>
-0x975C # <CJK>
-0x975E # <CJK>
-0x9760 # <CJK>
-0x9761 # <CJK>
-0x9762 # <CJK>
-0x9764 # <CJK>
-0x9766 # <CJK>
-0x9768 # <CJK>
-0x9769 # <CJK>
-0x976B # <CJK>
-0x976D # <CJK>
-0x9771 # <CJK>
-0x9774 # <CJK>
-0x9779 # <CJK>
-0x977A # <CJK>
-0x977C # <CJK>
-0x9781 # <CJK>
-0x9784 # <CJK>
-0x9785 # <CJK>
-0x9786 # <CJK>
-0x978B # <CJK>
-0x978D # <CJK>
-0x978F # <CJK>
-0x9790 # <CJK>
-0x9798 # <CJK>
-0x979C # <CJK>
-0x97A0 # <CJK>
-0x97A3 # <CJK>
-0x97A6 # <CJK>
-0x97A8 # <CJK>
-0x97AB # <CJK>
-0x97AD # <CJK>
-0x97B3 # <CJK>
-0x97B4 # <CJK>
-0x97C3 # <CJK>
-0x97C6 # <CJK>
-0x97C8 # <CJK>
-0x97CB # <CJK>
-0x97D3 # <CJK>
-0x97DC # <CJK>
-0x97ED # <CJK>
-0x97EE # <CJK>
-0x97F2 # <CJK>
-0x97F3 # <CJK>
-0x97F5 # <CJK>
-0x97F6 # <CJK>
-0x97FB # <CJK>
-0x97FF # <CJK>
-0x9801 # <CJK>
-0x9802 # <CJK>
-0x9803 # <CJK>
-0x9805 # <CJK>
-0x9806 # <CJK>
-0x9808 # <CJK>
-0x980C # <CJK>
-0x980F # <CJK>
-0x9810 # <CJK>
-0x9811 # <CJK>
-0x9812 # <CJK>
-0x9813 # <CJK>
-0x9817 # <CJK>
-0x9818 # <CJK>
-0x981A # <CJK>
-0x9821 # <CJK>
-0x9824 # <CJK>
-0x982C # <CJK>
-0x982D # <CJK>
-0x9834 # <CJK>
-0x9837 # <CJK>
-0x9838 # <CJK>
-0x983B # <CJK>
-0x983C # <CJK>
-0x983D # <CJK>
-0x9846 # <CJK>
-0x984B # <CJK>
-0x984C # <CJK>
-0x984D # <CJK>
-0x984E # <CJK>
-0x984F # <CJK>
-0x9854 # <CJK>
-0x9855 # <CJK>
-0x9858 # <CJK>
-0x985B # <CJK>
-0x985E # <CJK>
-0x9867 # <CJK>
-0x986B # <CJK>
-0x986F # <CJK>
-0x9870 # <CJK>
-0x9871 # <CJK>
-0x9873 # <CJK>
-0x9874 # <CJK>
-0x98A8 # <CJK>
-0x98AA # <CJK>
-0x98AF # <CJK>
-0x98B1 # <CJK>
-0x98B6 # <CJK>
-0x98C3 # <CJK>
-0x98C4 # <CJK>
-0x98C6 # <CJK>
-0x98DB # <CJK>
-0x98DC # <CJK>
-0x98DF # <CJK>
-0x98E2 # <CJK>
-0x98E9 # <CJK>
-0x98EB # <CJK>
-0x98ED # <CJK>
-0x98EE # <CJK>
-0x98EF # <CJK>
-0x98F2 # <CJK>
-0x98F4 # <CJK>
-0x98FC # <CJK>
-0x98FD # <CJK>
-0x98FE # <CJK>
-0x9903 # <CJK>
-0x9905 # <CJK>
-0x9909 # <CJK>
-0x990A # <CJK>
-0x990C # <CJK>
-0x9910 # <CJK>
-0x9912 # <CJK>
-0x9913 # <CJK>
-0x9914 # <CJK>
-0x9918 # <CJK>
-0x991D # <CJK>
-0x991E # <CJK>
-0x9920 # <CJK>
-0x9921 # <CJK>
-0x9924 # <CJK>
-0x9928 # <CJK>
-0x992C # <CJK>
-0x992E # <CJK>
-0x993D # <CJK>
-0x993E # <CJK>
-0x9942 # <CJK>
-0x9945 # <CJK>
-0x9949 # <CJK>
-0x994B # <CJK>
-0x994C # <CJK>
-0x9950 # <CJK>
-0x9951 # <CJK>
-0x9952 # <CJK>
-0x9955 # <CJK>
-0x9957 # <CJK>
-0x9996 # <CJK>
-0x9997 # <CJK>
-0x9998 # <CJK>
-0x9999 # <CJK>
-0x99A5 # <CJK>
-0x99A8 # <CJK>
-0x99AC # <CJK>
-0x99AD # <CJK>
-0x99AE # <CJK>
-0x99B3 # <CJK>
-0x99B4 # <CJK>
-0x99BC # <CJK>
-0x99C1 # <CJK>
-0x99C4 # <CJK>
-0x99C5 # <CJK>
-0x99C6 # <CJK>
-0x99C8 # <CJK>
-0x99D0 # <CJK>
-0x99D1 # <CJK>
-0x99D2 # <CJK>
-0x99D5 # <CJK>
-0x99D8 # <CJK>
-0x99DB # <CJK>
-0x99DD # <CJK>
-0x99DF # <CJK>
-0x99E2 # <CJK>
-0x99ED # <CJK>
-0x99EE # <CJK>
-0x99F1 # <CJK>
-0x99F2 # <CJK>
-0x99F8 # <CJK>
-0x99FB # <CJK>
-0x99FF # <CJK>
-0x9A01 # <CJK>
-0x9A05 # <CJK>
-0x9A0E # <CJK>
-0x9A0F # <CJK>
-0x9A12 # <CJK>
-0x9A13 # <CJK>
-0x9A19 # <CJK>
-0x9A28 # <CJK>
-0x9A2B # <CJK>
-0x9A30 # <CJK>
-0x9A37 # <CJK>
-0x9A3E # <CJK>
-0x9A40 # <CJK>
-0x9A42 # <CJK>
-0x9A43 # <CJK>
-0x9A45 # <CJK>
-0x9A4D # <CJK>
-0x9A55 # <CJK>
-0x9A57 # <CJK>
-0x9A5A # <CJK>
-0x9A5B # <CJK>
-0x9A5F # <CJK>
-0x9A62 # <CJK>
-0x9A64 # <CJK>
-0x9A65 # <CJK>
-0x9A69 # <CJK>
-0x9A6A # <CJK>
-0x9A6B # <CJK>
-0x9AA8 # <CJK>
-0x9AAD # <CJK>
-0x9AB0 # <CJK>
-0x9AB8 # <CJK>
-0x9ABC # <CJK>
-0x9AC0 # <CJK>
-0x9AC4 # <CJK>
-0x9ACF # <CJK>
-0x9AD1 # <CJK>
-0x9AD3 # <CJK>
-0x9AD4 # <CJK>
-0x9AD8 # <CJK>
-0x9ADE # <CJK>
-0x9ADF # <CJK>
-0x9AE2 # <CJK>
-0x9AE3 # <CJK>
-0x9AE6 # <CJK>
-0x9AEA # <CJK>
-0x9AEB # <CJK>
-0x9AED # <CJK>
-0x9AEE # <CJK>
-0x9AEF # <CJK>
-0x9AF1 # <CJK>
-0x9AF4 # <CJK>
-0x9AF7 # <CJK>
-0x9AFB # <CJK>
-0x9B06 # <CJK>
-0x9B18 # <CJK>
-0x9B1A # <CJK>
-0x9B1F # <CJK>
-0x9B22 # <CJK>
-0x9B23 # <CJK>
-0x9B25 # <CJK>
-0x9B27 # <CJK>
-0x9B28 # <CJK>
-0x9B29 # <CJK>
-0x9B2A # <CJK>
-0x9B2E # <CJK>
-0x9B2F # <CJK>
-0x9B31 # <CJK>
-0x9B32 # <CJK>
-0x9B3B # <CJK>
-0x9B3C # <CJK>
-0x9B41 # <CJK>
-0x9B42 # <CJK>
-0x9B43 # <CJK>
-0x9B44 # <CJK>
-0x9B45 # <CJK>
-0x9B4D # <CJK>
-0x9B4E # <CJK>
-0x9B4F # <CJK>
-0x9B51 # <CJK>
-0x9B54 # <CJK>
-0x9B58 # <CJK>
-0x9B5A # <CJK>
-0x9B6F # <CJK>
-0x9B74 # <CJK>
-0x9B83 # <CJK>
-0x9B8E # <CJK>
-0x9B91 # <CJK>
-0x9B92 # <CJK>
-0x9B93 # <CJK>
-0x9B96 # <CJK>
-0x9B97 # <CJK>
-0x9B9F # <CJK>
-0x9BA0 # <CJK>
-0x9BA8 # <CJK>
-0x9BAA # <CJK>
-0x9BAB # <CJK>
-0x9BAD # <CJK>
-0x9BAE # <CJK>
-0x9BB4 # <CJK>
-0x9BB9 # <CJK>
-0x9BC0 # <CJK>
-0x9BC6 # <CJK>
-0x9BC9 # <CJK>
-0x9BCA # <CJK>
-0x9BCF # <CJK>
-0x9BD1 # <CJK>
-0x9BD2 # <CJK>
-0x9BD4 # <CJK>
-0x9BD6 # <CJK>
-0x9BDB # <CJK>
-0x9BE1 # <CJK>
-0x9BE2 # <CJK>
-0x9BE3 # <CJK>
-0x9BE4 # <CJK>
-0x9BE8 # <CJK>
-0x9BF0 # <CJK>
-0x9BF1 # <CJK>
-0x9BF2 # <CJK>
-0x9BF5 # <CJK>
-0x9C04 # <CJK>
-0x9C06 # <CJK>
-0x9C08 # <CJK>
-0x9C09 # <CJK>
-0x9C0A # <CJK>
-0x9C0C # <CJK>
-0x9C0D # <CJK>
-0x9C10 # <CJK>
-0x9C12 # <CJK>
-0x9C13 # <CJK>
-0x9C14 # <CJK>
-0x9C15 # <CJK>
-0x9C1B # <CJK>
-0x9C21 # <CJK>
-0x9C24 # <CJK>
-0x9C25 # <CJK>
-0x9C2D # <CJK>
-0x9C2E # <CJK>
-0x9C2F # <CJK>
-0x9C30 # <CJK>
-0x9C32 # <CJK>
-0x9C39 # <CJK>
-0x9C3A # <CJK>
-0x9C3B # <CJK>
-0x9C3E # <CJK>
-0x9C46 # <CJK>
-0x9C47 # <CJK>
-0x9C48 # <CJK>
-0x9C52 # <CJK>
-0x9C57 # <CJK>
-0x9C5A # <CJK>
-0x9C60 # <CJK>
-0x9C67 # <CJK>
-0x9C76 # <CJK>
-0x9C78 # <CJK>
-0x9CE5 # <CJK>
-0x9CE7 # <CJK>
-0x9CE9 # <CJK>
-0x9CEB # <CJK>
-0x9CEC # <CJK>
-0x9CF0 # <CJK>
-0x9CF3 # <CJK>
-0x9CF4 # <CJK>
-0x9CF6 # <CJK>
-0x9D03 # <CJK>
-0x9D06 # <CJK>
-0x9D07 # <CJK>
-0x9D08 # <CJK>
-0x9D09 # <CJK>
-0x9D0E # <CJK>
-0x9D12 # <CJK>
-0x9D15 # <CJK>
-0x9D1B # <CJK>
-0x9D1F # <CJK>
-0x9D23 # <CJK>
-0x9D26 # <CJK>
-0x9D28 # <CJK>
-0x9D2A # <CJK>
-0x9D2B # <CJK>
-0x9D2C # <CJK>
-0x9D3B # <CJK>
-0x9D3E # <CJK>
-0x9D3F # <CJK>
-0x9D41 # <CJK>
-0x9D44 # <CJK>
-0x9D46 # <CJK>
-0x9D48 # <CJK>
-0x9D50 # <CJK>
-0x9D51 # <CJK>
-0x9D59 # <CJK>
-0x9D5C # <CJK>
-0x9D5D # <CJK>
-0x9D5E # <CJK>
-0x9D60 # <CJK>
-0x9D61 # <CJK>
-0x9D64 # <CJK>
-0x9D6C # <CJK>
-0x9D6F # <CJK>
-0x9D72 # <CJK>
-0x9D7A # <CJK>
-0x9D87 # <CJK>
-0x9D89 # <CJK>
-0x9D8F # <CJK>
-0x9D9A # <CJK>
-0x9DA4 # <CJK>
-0x9DA9 # <CJK>
-0x9DAB # <CJK>
-0x9DAF # <CJK>
-0x9DB2 # <CJK>
-0x9DB4 # <CJK>
-0x9DB8 # <CJK>
-0x9DBA # <CJK>
-0x9DBB # <CJK>
-0x9DC1 # <CJK>
-0x9DC2 # <CJK>
-0x9DC4 # <CJK>
-0x9DC6 # <CJK>
-0x9DCF # <CJK>
-0x9DD3 # <CJK>
-0x9DD9 # <CJK>
-0x9DE6 # <CJK>
-0x9DED # <CJK>
-0x9DEF # <CJK>
-0x9DF2 # <CJK>
-0x9DF8 # <CJK>
-0x9DF9 # <CJK>
-0x9DFA # <CJK>
-0x9DFD # <CJK>
-0x9E1A # <CJK>
-0x9E1B # <CJK>
-0x9E1E # <CJK>
-0x9E75 # <CJK>
-0x9E78 # <CJK>
-0x9E79 # <CJK>
-0x9E7D # <CJK>
-0x9E7F # <CJK>
-0x9E81 # <CJK>
-0x9E88 # <CJK>
-0x9E8B # <CJK>
-0x9E8C # <CJK>
-0x9E91 # <CJK>
-0x9E92 # <CJK>
-0x9E93 # <CJK>
-0x9E95 # <CJK>
-0x9E97 # <CJK>
-0x9E9D # <CJK>
-0x9E9F # <CJK>
-0x9EA5 # <CJK>
-0x9EA6 # <CJK>
-0x9EA9 # <CJK>
-0x9EAA # <CJK>
-0x9EAD # <CJK>
-0x9EB8 # <CJK>
-0x9EB9 # <CJK>
-0x9EBA # <CJK>
-0x9EBB # <CJK>
-0x9EBC # <CJK>
-0x9EBE # <CJK>
-0x9EBF # <CJK>
-0x9EC4 # <CJK>
-0x9ECC # <CJK>
-0x9ECD # <CJK>
-0x9ECE # <CJK>
-0x9ECF # <CJK>
-0x9ED0 # <CJK>
-0x9ED2 # <CJK>
-0x9ED4 # <CJK>
-0x9ED8 # <CJK>
-0x9ED9 # <CJK>
-0x9EDB # <CJK>
-0x9EDC # <CJK>
-0x9EDD # <CJK>
-0x9EDE # <CJK>
-0x9EE0 # <CJK>
-0x9EE5 # <CJK>
-0x9EE8 # <CJK>
-0x9EEF # <CJK>
-0x9EF4 # <CJK>
-0x9EF6 # <CJK>
-0x9EF7 # <CJK>
-0x9EF9 # <CJK>
-0x9EFB # <CJK>
-0x9EFC # <CJK>
-0x9EFD # <CJK>
-0x9F07 # <CJK>
-0x9F08 # <CJK>
-0x9F0E # <CJK>
-0x9F13 # <CJK>
-0x9F15 # <CJK>
-0x9F20 # <CJK>
-0x9F21 # <CJK>
-0x9F2C # <CJK>
-0x9F3B # <CJK>
-0x9F3E # <CJK>
-0x9F4A # <CJK>
-0x9F4B # <CJK>
-0x9F4E # <CJK>
-0x9F4F # <CJK>
-0x9F52 # <CJK>
-0x9F54 # <CJK>
-0x9F5F # <CJK>
-0x9F60 # <CJK>
-0x9F61 # <CJK>
-0x9F62 # <CJK>
-0x9F63 # <CJK>
-0x9F66 # <CJK>
-0x9F67 # <CJK>
-0x9F6A # <CJK>
-0x9F6C # <CJK>
-0x9F72 # <CJK>
-0x9F76 # <CJK>
-0x9F77 # <CJK>
-0x9F8D # <CJK>
-0x9F95 # <CJK>
-0x9F9C # <CJK>
-0x9F9D # <CJK>
-0x9FA0 # <CJK>
-#0xFFE5 # FULLWIDTH YEN SIGN
+# +# fontconfig/fc-lang/ja.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage from JIS X 0208 (1990) +# +0x3000 # IDEOGRAPHIC SPACE +0x3001 # IDEOGRAPHIC COMMA +0x3002 # IDEOGRAPHIC FULL STOP +0x3005 # IDEOGRAPHIC ITERATION MARK +0x3006 # IDEOGRAPHIC CLOSING MARK +0x3007 # IDEOGRAPHIC NUMBER ZERO +0x3041 # HIRAGANA LETTER SMALL A +0x3042 # HIRAGANA LETTER A +0x3043 # HIRAGANA LETTER SMALL I +0x3044 # HIRAGANA LETTER I +0x3045 # HIRAGANA LETTER SMALL U +0x3046 # HIRAGANA LETTER U +0x3047 # HIRAGANA LETTER SMALL E +0x3048 # HIRAGANA LETTER E +0x3049 # HIRAGANA LETTER SMALL O +0x304A # HIRAGANA LETTER O +0x304B # HIRAGANA LETTER KA +0x304C # HIRAGANA LETTER GA +0x304D # HIRAGANA LETTER KI +0x304E # HIRAGANA LETTER GI +0x304F # HIRAGANA LETTER KU +0x3050 # HIRAGANA LETTER GU +0x3051 # HIRAGANA LETTER KE +0x3052 # HIRAGANA LETTER GE +0x3053 # HIRAGANA LETTER KO +0x3054 # HIRAGANA LETTER GO +0x3055 # HIRAGANA LETTER SA +0x3056 # HIRAGANA LETTER ZA +0x3057 # HIRAGANA LETTER SI +0x3058 # HIRAGANA LETTER ZI +0x3059 # HIRAGANA LETTER SU +0x305A # HIRAGANA LETTER ZU +0x305B # HIRAGANA LETTER SE +0x305C # HIRAGANA LETTER ZE +0x305D # HIRAGANA LETTER SO +0x305E # HIRAGANA LETTER ZO +0x305F # HIRAGANA LETTER TA +0x3060 # HIRAGANA LETTER DA +0x3061 # HIRAGANA LETTER TI +0x3062 # HIRAGANA LETTER DI +0x3063 # HIRAGANA LETTER SMALL TU +0x3064 # HIRAGANA LETTER TU +0x3065 # HIRAGANA LETTER DU +0x3066 # HIRAGANA LETTER TE +0x3067 # HIRAGANA LETTER DE +0x3068 # HIRAGANA LETTER TO +0x3069 # HIRAGANA LETTER DO +0x306A # HIRAGANA LETTER NA +0x306B # HIRAGANA LETTER NI +0x306C # HIRAGANA LETTER NU +0x306D # HIRAGANA LETTER NE +0x306E # HIRAGANA LETTER NO +0x306F # HIRAGANA LETTER HA +0x3070 # HIRAGANA LETTER BA +0x3071 # HIRAGANA LETTER PA +0x3072 # HIRAGANA LETTER HI +0x3073 # HIRAGANA LETTER BI +0x3074 # HIRAGANA LETTER PI +0x3075 # HIRAGANA LETTER HU +0x3076 # HIRAGANA LETTER BU +0x3077 # HIRAGANA LETTER PU +0x3078 # HIRAGANA LETTER HE +0x3079 # HIRAGANA LETTER BE +0x307A # HIRAGANA LETTER PE +0x307B # HIRAGANA LETTER HO +0x307C # HIRAGANA LETTER BO +0x307D # HIRAGANA LETTER PO +0x307E # HIRAGANA LETTER MA +0x307F # HIRAGANA LETTER MI +0x3080 # HIRAGANA LETTER MU +0x3081 # HIRAGANA LETTER ME +0x3082 # HIRAGANA LETTER MO +0x3083 # HIRAGANA LETTER SMALL YA +0x3084 # HIRAGANA LETTER YA +0x3085 # HIRAGANA LETTER SMALL YU +0x3086 # HIRAGANA LETTER YU +0x3087 # HIRAGANA LETTER SMALL YO +0x3088 # HIRAGANA LETTER YO +0x3089 # HIRAGANA LETTER RA +0x308A # HIRAGANA LETTER RI +0x308B # HIRAGANA LETTER RU +0x308C # HIRAGANA LETTER RE +0x308D # HIRAGANA LETTER RO +0x308E # HIRAGANA LETTER SMALL WA +0x308F # HIRAGANA LETTER WA +0x3090 # HIRAGANA LETTER WI +0x3091 # HIRAGANA LETTER WE +0x3092 # HIRAGANA LETTER WO +0x3093 # HIRAGANA LETTER N +0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK +0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK +0x309D # HIRAGANA ITERATION MARK +0x309E # HIRAGANA VOICED ITERATION MARK +0x30A1 # KATAKANA LETTER SMALL A +0x30A2 # KATAKANA LETTER A +0x30A3 # KATAKANA LETTER SMALL I +0x30A4 # KATAKANA LETTER I +0x30A5 # KATAKANA LETTER SMALL U +0x30A6 # KATAKANA LETTER U +0x30A7 # KATAKANA LETTER SMALL E +0x30A8 # KATAKANA LETTER E +0x30A9 # KATAKANA LETTER SMALL O +0x30AA # KATAKANA LETTER O +0x30AB # KATAKANA LETTER KA +0x30AC # KATAKANA LETTER GA +0x30AD # KATAKANA LETTER KI +0x30AE # KATAKANA LETTER GI +0x30AF # KATAKANA LETTER KU +0x30B0 # KATAKANA LETTER GU +0x30B1 # KATAKANA LETTER KE +0x30B2 # KATAKANA LETTER GE +0x30B3 # KATAKANA LETTER KO +0x30B4 # KATAKANA LETTER GO +0x30B5 # KATAKANA LETTER SA +0x30B6 # KATAKANA LETTER ZA +0x30B7 # KATAKANA LETTER SI +0x30B8 # KATAKANA LETTER ZI +0x30B9 # KATAKANA LETTER SU +0x30BA # KATAKANA LETTER ZU +0x30BB # KATAKANA LETTER SE +0x30BC # KATAKANA LETTER ZE +0x30BD # KATAKANA LETTER SO +0x30BE # KATAKANA LETTER ZO +0x30BF # KATAKANA LETTER TA +0x30C0 # KATAKANA LETTER DA +0x30C1 # KATAKANA LETTER TI +0x30C2 # KATAKANA LETTER DI +0x30C3 # KATAKANA LETTER SMALL TU +0x30C4 # KATAKANA LETTER TU +0x30C5 # KATAKANA LETTER DU +0x30C6 # KATAKANA LETTER TE +0x30C7 # KATAKANA LETTER DE +0x30C8 # KATAKANA LETTER TO +0x30C9 # KATAKANA LETTER DO +0x30CA # KATAKANA LETTER NA +0x30CB # KATAKANA LETTER NI +0x30CC # KATAKANA LETTER NU +0x30CD # KATAKANA LETTER NE +0x30CE # KATAKANA LETTER NO +0x30CF # KATAKANA LETTER HA +0x30D0 # KATAKANA LETTER BA +0x30D1 # KATAKANA LETTER PA +0x30D2 # KATAKANA LETTER HI +0x30D3 # KATAKANA LETTER BI +0x30D4 # KATAKANA LETTER PI +0x30D5 # KATAKANA LETTER HU +0x30D6 # KATAKANA LETTER BU +0x30D7 # KATAKANA LETTER PU +0x30D8 # KATAKANA LETTER HE +0x30D9 # KATAKANA LETTER BE +0x30DA # KATAKANA LETTER PE +0x30DB # KATAKANA LETTER HO +0x30DC # KATAKANA LETTER BO +0x30DD # KATAKANA LETTER PO +0x30DE # KATAKANA LETTER MA +0x30DF # KATAKANA LETTER MI +0x30E0 # KATAKANA LETTER MU +0x30E1 # KATAKANA LETTER ME +0x30E2 # KATAKANA LETTER MO +0x30E3 # KATAKANA LETTER SMALL YA +0x30E4 # KATAKANA LETTER YA +0x30E5 # KATAKANA LETTER SMALL YU +0x30E6 # KATAKANA LETTER YU +0x30E7 # KATAKANA LETTER SMALL YO +0x30E8 # KATAKANA LETTER YO +0x30E9 # KATAKANA LETTER RA +0x30EA # KATAKANA LETTER RI +0x30EB # KATAKANA LETTER RU +0x30EC # KATAKANA LETTER RE +0x30ED # KATAKANA LETTER RO +0x30EE # KATAKANA LETTER SMALL WA +0x30EF # KATAKANA LETTER WA +0x30F0 # KATAKANA LETTER WI +0x30F1 # KATAKANA LETTER WE +0x30F2 # KATAKANA LETTER WO +0x30F3 # KATAKANA LETTER N +0x30F4 # KATAKANA LETTER VU +0x30F5 # KATAKANA LETTER SMALL KA +0x30F6 # KATAKANA LETTER SMALL KE +0x30FB # KATAKANA MIDDLE DOT +0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK +0x30FD # KATAKANA ITERATION MARK +0x30FE # KATAKANA VOICED ITERATION MARK +0x4E00 # <CJK> +0x4E01 # <CJK> +0x4E03 # <CJK> +0x4E07 # <CJK> +0x4E08 # <CJK> +0x4E09 # <CJK> +0x4E0A # <CJK> +0x4E0B # <CJK> +0x4E0D # <CJK> +0x4E0E # <CJK> +0x4E10 # <CJK> +0x4E11 # <CJK> +0x4E14 # <CJK> +0x4E15 # <CJK> +0x4E16 # <CJK> +0x4E17 # <CJK> +0x4E18 # <CJK> +0x4E19 # <CJK> +0x4E1E # <CJK> +0x4E21 # <CJK> +0x4E26 # <CJK> +0x4E2A # <CJK> +0x4E2D # <CJK> +0x4E31 # <CJK> +0x4E32 # <CJK> +0x4E36 # <CJK> +0x4E38 # <CJK> +0x4E39 # <CJK> +0x4E3B # <CJK> +0x4E3C # <CJK> +0x4E3F # <CJK> +0x4E42 # <CJK> +0x4E43 # <CJK> +0x4E45 # <CJK> +0x4E4B # <CJK> +0x4E4D # <CJK> +0x4E4E # <CJK> +0x4E4F # <CJK> +0x4E55 # <CJK> +0x4E56 # <CJK> +0x4E57 # <CJK> +0x4E58 # <CJK> +0x4E59 # <CJK> +0x4E5D # <CJK> +0x4E5E # <CJK> +0x4E5F # <CJK> +0x4E62 # <CJK> +0x4E71 # <CJK> +0x4E73 # <CJK> +0x4E7E # <CJK> +0x4E80 # <CJK> +0x4E82 # <CJK> +0x4E85 # <CJK> +0x4E86 # <CJK> +0x4E88 # <CJK> +0x4E89 # <CJK> +0x4E8A # <CJK> +0x4E8B # <CJK> +0x4E8C # <CJK> +0x4E8E # <CJK> +0x4E91 # <CJK> +0x4E92 # <CJK> +0x4E94 # <CJK> +0x4E95 # <CJK> +0x4E98 # <CJK> +0x4E99 # <CJK> +0x4E9B # <CJK> +0x4E9C # <CJK> +0x4E9E # <CJK> +0x4E9F # <CJK> +0x4EA0 # <CJK> +0x4EA1 # <CJK> +0x4EA2 # <CJK> +0x4EA4 # <CJK> +0x4EA5 # <CJK> +0x4EA6 # <CJK> +0x4EA8 # <CJK> +0x4EAB # <CJK> +0x4EAC # <CJK> +0x4EAD # <CJK> +0x4EAE # <CJK> +0x4EB0 # <CJK> +0x4EB3 # <CJK> +0x4EB6 # <CJK> +0x4EBA # <CJK> +0x4EC0 # <CJK> +0x4EC1 # <CJK> +0x4EC2 # <CJK> +0x4EC4 # <CJK> +0x4EC6 # <CJK> +0x4EC7 # <CJK> +0x4ECA # <CJK> +0x4ECB # <CJK> +0x4ECD # <CJK> +0x4ECE # <CJK> +0x4ECF # <CJK> +0x4ED4 # <CJK> +0x4ED5 # <CJK> +0x4ED6 # <CJK> +0x4ED7 # <CJK> +0x4ED8 # <CJK> +0x4ED9 # <CJK> +0x4EDD # <CJK> +0x4EDE # <CJK> +0x4EDF # <CJK> +0x4EE3 # <CJK> +0x4EE4 # <CJK> +0x4EE5 # <CJK> +0x4EED # <CJK> +0x4EEE # <CJK> +0x4EF0 # <CJK> +0x4EF2 # <CJK> +0x4EF6 # <CJK> +0x4EF7 # <CJK> +0x4EFB # <CJK> +0x4F01 # <CJK> +0x4F09 # <CJK> +0x4F0A # <CJK> +0x4F0D # <CJK> +0x4F0E # <CJK> +0x4F0F # <CJK> +0x4F10 # <CJK> +0x4F11 # <CJK> +0x4F1A # <CJK> +0x4F1C # <CJK> +0x4F1D # <CJK> +0x4F2F # <CJK> +0x4F30 # <CJK> +0x4F34 # <CJK> +0x4F36 # <CJK> +0x4F38 # <CJK> +0x4F3A # <CJK> +0x4F3C # <CJK> +0x4F3D # <CJK> +0x4F43 # <CJK> +0x4F46 # <CJK> +0x4F47 # <CJK> +0x4F4D # <CJK> +0x4F4E # <CJK> +0x4F4F # <CJK> +0x4F50 # <CJK> +0x4F51 # <CJK> +0x4F53 # <CJK> +0x4F55 # <CJK> +0x4F57 # <CJK> +0x4F59 # <CJK> +0x4F5A # <CJK> +0x4F5B # <CJK> +0x4F5C # <CJK> +0x4F5D # <CJK> +0x4F5E # <CJK> +0x4F69 # <CJK> +0x4F6F # <CJK> +0x4F70 # <CJK> +0x4F73 # <CJK> +0x4F75 # <CJK> +0x4F76 # <CJK> +0x4F7B # <CJK> +0x4F7C # <CJK> +0x4F7F # <CJK> +0x4F83 # <CJK> +0x4F86 # <CJK> +0x4F88 # <CJK> +0x4F8B # <CJK> +0x4F8D # <CJK> +0x4F8F # <CJK> +0x4F91 # <CJK> +0x4F96 # <CJK> +0x4F98 # <CJK> +0x4F9B # <CJK> +0x4F9D # <CJK> +0x4FA0 # <CJK> +0x4FA1 # <CJK> +0x4FAB # <CJK> +0x4FAD # <CJK> +0x4FAE # <CJK> +0x4FAF # <CJK> +0x4FB5 # <CJK> +0x4FB6 # <CJK> +0x4FBF # <CJK> +0x4FC2 # <CJK> +0x4FC3 # <CJK> +0x4FC4 # <CJK> +0x4FCA # <CJK> +0x4FCE # <CJK> +0x4FD0 # <CJK> +0x4FD1 # <CJK> +0x4FD4 # <CJK> +0x4FD7 # <CJK> +0x4FD8 # <CJK> +0x4FDA # <CJK> +0x4FDB # <CJK> +0x4FDD # <CJK> +0x4FDF # <CJK> +0x4FE1 # <CJK> +0x4FE3 # <CJK> +0x4FE4 # <CJK> +0x4FE5 # <CJK> +0x4FEE # <CJK> +0x4FEF # <CJK> +0x4FF3 # <CJK> +0x4FF5 # <CJK> +0x4FF6 # <CJK> +0x4FF8 # <CJK> +0x4FFA # <CJK> +0x4FFE # <CJK> +0x5005 # <CJK> +0x5006 # <CJK> +0x5009 # <CJK> +0x500B # <CJK> +0x500D # <CJK> +0x500F # <CJK> +0x5011 # <CJK> +0x5012 # <CJK> +0x5014 # <CJK> +0x5016 # <CJK> +0x5019 # <CJK> +0x501A # <CJK> +0x501F # <CJK> +0x5021 # <CJK> +0x5023 # <CJK> +0x5024 # <CJK> +0x5025 # <CJK> +0x5026 # <CJK> +0x5028 # <CJK> +0x5029 # <CJK> +0x502A # <CJK> +0x502B # <CJK> +0x502C # <CJK> +0x502D # <CJK> +0x5036 # <CJK> +0x5039 # <CJK> +0x5043 # <CJK> +0x5047 # <CJK> +0x5048 # <CJK> +0x5049 # <CJK> +0x504F # <CJK> +0x5050 # <CJK> +0x5055 # <CJK> +0x5056 # <CJK> +0x505A # <CJK> +0x505C # <CJK> +0x5065 # <CJK> +0x506C # <CJK> +0x5072 # <CJK> +0x5074 # <CJK> +0x5075 # <CJK> +0x5076 # <CJK> +0x5078 # <CJK> +0x507D # <CJK> +0x5080 # <CJK> +0x5085 # <CJK> +0x508D # <CJK> +0x5091 # <CJK> +0x5098 # <CJK> +0x5099 # <CJK> +0x509A # <CJK> +0x50AC # <CJK> +0x50AD # <CJK> +0x50B2 # <CJK> +0x50B3 # <CJK> +0x50B4 # <CJK> +0x50B5 # <CJK> +0x50B7 # <CJK> +0x50BE # <CJK> +0x50C2 # <CJK> +0x50C5 # <CJK> +0x50C9 # <CJK> +0x50CA # <CJK> +0x50CD # <CJK> +0x50CF # <CJK> +0x50D1 # <CJK> +0x50D5 # <CJK> +0x50D6 # <CJK> +0x50DA # <CJK> +0x50DE # <CJK> +0x50E3 # <CJK> +0x50E5 # <CJK> +0x50E7 # <CJK> +0x50ED # <CJK> +0x50EE # <CJK> +0x50F5 # <CJK> +0x50F9 # <CJK> +0x50FB # <CJK> +0x5100 # <CJK> +0x5101 # <CJK> +0x5102 # <CJK> +0x5104 # <CJK> +0x5109 # <CJK> +0x5112 # <CJK> +0x5114 # <CJK> +0x5115 # <CJK> +0x5116 # <CJK> +0x5118 # <CJK> +0x511A # <CJK> +0x511F # <CJK> +0x5121 # <CJK> +0x512A # <CJK> +0x5132 # <CJK> +0x5137 # <CJK> +0x513A # <CJK> +0x513B # <CJK> +0x513C # <CJK> +0x513F # <CJK> +0x5140 # <CJK> +0x5141 # <CJK> +0x5143 # <CJK> +0x5144 # <CJK> +0x5145 # <CJK> +0x5146 # <CJK> +0x5147 # <CJK> +0x5148 # <CJK> +0x5149 # <CJK> +0x514B # <CJK> +0x514C # <CJK> +0x514D # <CJK> +0x514E # <CJK> +0x5150 # <CJK> +0x5152 # <CJK> +0x5154 # <CJK> +0x515A # <CJK> +0x515C # <CJK> +0x5162 # <CJK> +0x5165 # <CJK> +0x5168 # <CJK> +0x5169 # <CJK> +0x516A # <CJK> +0x516B # <CJK> +0x516C # <CJK> +0x516D # <CJK> +0x516E # <CJK> +0x5171 # <CJK> +0x5175 # <CJK> +0x5176 # <CJK> +0x5177 # <CJK> +0x5178 # <CJK> +0x517C # <CJK> +0x5180 # <CJK> +0x5182 # <CJK> +0x5185 # <CJK> +0x5186 # <CJK> +0x5189 # <CJK> +0x518A # <CJK> +0x518C # <CJK> +0x518D # <CJK> +0x518F # <CJK> +0x5190 # <CJK> +0x5191 # <CJK> +0x5192 # <CJK> +0x5193 # <CJK> +0x5195 # <CJK> +0x5196 # <CJK> +0x5197 # <CJK> +0x5199 # <CJK> +0x51A0 # <CJK> +0x51A2 # <CJK> +0x51A4 # <CJK> +0x51A5 # <CJK> +0x51A6 # <CJK> +0x51A8 # <CJK> +0x51A9 # <CJK> +0x51AA # <CJK> +0x51AB # <CJK> +0x51AC # <CJK> +0x51B0 # <CJK> +0x51B1 # <CJK> +0x51B2 # <CJK> +0x51B3 # <CJK> +0x51B4 # <CJK> +0x51B5 # <CJK> +0x51B6 # <CJK> +0x51B7 # <CJK> +0x51BD # <CJK> +0x51C4 # <CJK> +0x51C5 # <CJK> +0x51C6 # <CJK> +0x51C9 # <CJK> +0x51CB # <CJK> +0x51CC # <CJK> +0x51CD # <CJK> +0x51D6 # <CJK> +0x51DB # <CJK> +#0x51DC # <CJK> # not in kochi fonts +0x51DD # <CJK> +0x51E0 # <CJK> +0x51E1 # <CJK> +0x51E6 # <CJK> +0x51E7 # <CJK> +0x51E9 # <CJK> +0x51EA # <CJK> +0x51ED # <CJK> +0x51F0 # <CJK> +0x51F1 # <CJK> +0x51F5 # <CJK> +0x51F6 # <CJK> +0x51F8 # <CJK> +0x51F9 # <CJK> +0x51FA # <CJK> +0x51FD # <CJK> +0x51FE # <CJK> +0x5200 # <CJK> +0x5203 # <CJK> +0x5204 # <CJK> +0x5206 # <CJK> +0x5207 # <CJK> +0x5208 # <CJK> +0x520A # <CJK> +0x520B # <CJK> +0x520E # <CJK> +0x5211 # <CJK> +0x5214 # <CJK> +0x5217 # <CJK> +0x521D # <CJK> +0x5224 # <CJK> +0x5225 # <CJK> +0x5227 # <CJK> +0x5229 # <CJK> +0x522A # <CJK> +0x522E # <CJK> +0x5230 # <CJK> +0x5233 # <CJK> +0x5236 # <CJK> +0x5237 # <CJK> +0x5238 # <CJK> +0x5239 # <CJK> +0x523A # <CJK> +0x523B # <CJK> +0x5243 # <CJK> +0x5244 # <CJK> +0x5247 # <CJK> +0x524A # <CJK> +0x524B # <CJK> +0x524C # <CJK> +0x524D # <CJK> +0x524F # <CJK> +0x5254 # <CJK> +0x5256 # <CJK> +0x525B # <CJK> +0x525E # <CJK> +0x5263 # <CJK> +0x5264 # <CJK> +0x5265 # <CJK> +0x5269 # <CJK> +0x526A # <CJK> +0x526F # <CJK> +0x5270 # <CJK> +0x5271 # <CJK> +0x5272 # <CJK> +0x5273 # <CJK> +0x5274 # <CJK> +0x5275 # <CJK> +0x527D # <CJK> +0x527F # <CJK> +0x5283 # <CJK> +0x5287 # <CJK> +0x5288 # <CJK> +0x5289 # <CJK> +0x528D # <CJK> +0x5291 # <CJK> +0x5292 # <CJK> +0x5294 # <CJK> +0x529B # <CJK> +0x529F # <CJK> +0x52A0 # <CJK> +0x52A3 # <CJK> +0x52A9 # <CJK> +0x52AA # <CJK> +0x52AB # <CJK> +0x52AC # <CJK> +0x52AD # <CJK> +0x52B1 # <CJK> +0x52B4 # <CJK> +0x52B5 # <CJK> +0x52B9 # <CJK> +0x52BC # <CJK> +0x52BE # <CJK> +0x52C1 # <CJK> +0x52C3 # <CJK> +0x52C5 # <CJK> +0x52C7 # <CJK> +0x52C9 # <CJK> +0x52CD # <CJK> +0x52D2 # <CJK> +0x52D5 # <CJK> +0x52D7 # <CJK> +0x52D8 # <CJK> +0x52D9 # <CJK> +0x52DD # <CJK> +0x52DE # <CJK> +0x52DF # <CJK> +0x52E0 # <CJK> +0x52E2 # <CJK> +0x52E3 # <CJK> +0x52E4 # <CJK> +0x52E6 # <CJK> +0x52E7 # <CJK> +0x52F2 # <CJK> +0x52F3 # <CJK> +0x52F5 # <CJK> +0x52F8 # <CJK> +0x52F9 # <CJK> +0x52FA # <CJK> +0x52FE # <CJK> +0x52FF # <CJK> +0x5301 # <CJK> +0x5302 # <CJK> +0x5305 # <CJK> +0x5306 # <CJK> +0x5308 # <CJK> +0x530D # <CJK> +0x530F # <CJK> +0x5310 # <CJK> +0x5315 # <CJK> +0x5316 # <CJK> +0x5317 # <CJK> +0x5319 # <CJK> +0x531A # <CJK> +0x531D # <CJK> +0x5320 # <CJK> +0x5321 # <CJK> +0x5323 # <CJK> +0x532A # <CJK> +0x532F # <CJK> +0x5331 # <CJK> +0x5333 # <CJK> +0x5338 # <CJK> +0x5339 # <CJK> +0x533A # <CJK> +0x533B # <CJK> +0x533F # <CJK> +0x5340 # <CJK> +0x5341 # <CJK> +0x5343 # <CJK> +0x5345 # <CJK> +0x5346 # <CJK> +0x5347 # <CJK> +0x5348 # <CJK> +0x5349 # <CJK> +0x534A # <CJK> +0x534D # <CJK> +0x5351 # <CJK> +0x5352 # <CJK> +0x5353 # <CJK> +0x5354 # <CJK> +0x5357 # <CJK> +0x5358 # <CJK> +0x535A # <CJK> +0x535C # <CJK> +0x535E # <CJK> +0x5360 # <CJK> +0x5366 # <CJK> +0x5369 # <CJK> +0x536E # <CJK> +0x536F # <CJK> +0x5370 # <CJK> +0x5371 # <CJK> +0x5373 # <CJK> +0x5374 # <CJK> +0x5375 # <CJK> +0x5377 # <CJK> +0x5378 # <CJK> +0x537B # <CJK> +0x537F # <CJK> +0x5382 # <CJK> +0x5384 # <CJK> +0x5396 # <CJK> +0x5398 # <CJK> +0x539A # <CJK> +0x539F # <CJK> +0x53A0 # <CJK> +0x53A5 # <CJK> +0x53A6 # <CJK> +0x53A8 # <CJK> +0x53A9 # <CJK> +0x53AD # <CJK> +0x53AE # <CJK> +0x53B0 # <CJK> +0x53B3 # <CJK> +0x53B6 # <CJK> +0x53BB # <CJK> +0x53C2 # <CJK> +0x53C3 # <CJK> +0x53C8 # <CJK> +0x53C9 # <CJK> +0x53CA # <CJK> +0x53CB # <CJK> +0x53CC # <CJK> +0x53CD # <CJK> +0x53CE # <CJK> +0x53D4 # <CJK> +0x53D6 # <CJK> +0x53D7 # <CJK> +0x53D9 # <CJK> +0x53DB # <CJK> +0x53DF # <CJK> +0x53E1 # <CJK> +0x53E2 # <CJK> +0x53E3 # <CJK> +0x53E4 # <CJK> +0x53E5 # <CJK> +0x53E8 # <CJK> +0x53E9 # <CJK> +0x53EA # <CJK> +0x53EB # <CJK> +0x53EC # <CJK> +0x53ED # <CJK> +0x53EE # <CJK> +0x53EF # <CJK> +0x53F0 # <CJK> +0x53F1 # <CJK> +0x53F2 # <CJK> +0x53F3 # <CJK> +0x53F6 # <CJK> +0x53F7 # <CJK> +0x53F8 # <CJK> +0x53FA # <CJK> +0x5401 # <CJK> +0x5403 # <CJK> +0x5404 # <CJK> +0x5408 # <CJK> +0x5409 # <CJK> +0x540A # <CJK> +0x540B # <CJK> +0x540C # <CJK> +0x540D # <CJK> +0x540E # <CJK> +0x540F # <CJK> +0x5410 # <CJK> +0x5411 # <CJK> +0x541B # <CJK> +0x541D # <CJK> +0x541F # <CJK> +0x5420 # <CJK> +0x5426 # <CJK> +0x5429 # <CJK> +0x542B # <CJK> +0x542C # <CJK> +0x542D # <CJK> +0x542E # <CJK> +0x5436 # <CJK> +0x5438 # <CJK> +0x5439 # <CJK> +0x543B # <CJK> +0x543C # <CJK> +0x543D # <CJK> +0x543E # <CJK> +0x5440 # <CJK> +0x5442 # <CJK> +0x5446 # <CJK> +0x5448 # <CJK> +0x5449 # <CJK> +0x544A # <CJK> +0x544E # <CJK> +0x5451 # <CJK> +0x545F # <CJK> +0x5468 # <CJK> +0x546A # <CJK> +0x5470 # <CJK> +0x5471 # <CJK> +0x5473 # <CJK> +0x5475 # <CJK> +0x5476 # <CJK> +0x5477 # <CJK> +0x547B # <CJK> +0x547C # <CJK> +0x547D # <CJK> +0x5480 # <CJK> +0x5484 # <CJK> +0x5486 # <CJK> +0x548B # <CJK> +0x548C # <CJK> +0x548E # <CJK> +0x548F # <CJK> +0x5490 # <CJK> +0x5492 # <CJK> +0x54A2 # <CJK> +0x54A4 # <CJK> +0x54A5 # <CJK> +0x54A8 # <CJK> +0x54AB # <CJK> +0x54AC # <CJK> +0x54AF # <CJK> +0x54B2 # <CJK> +0x54B3 # <CJK> +0x54B8 # <CJK> +0x54BC # <CJK> +0x54BD # <CJK> +0x54BE # <CJK> +0x54C0 # <CJK> +0x54C1 # <CJK> +0x54C2 # <CJK> +0x54C4 # <CJK> +0x54C7 # <CJK> +0x54C8 # <CJK> +0x54C9 # <CJK> +0x54D8 # <CJK> +0x54E1 # <CJK> +0x54E2 # <CJK> +0x54E5 # <CJK> +0x54E6 # <CJK> +0x54E8 # <CJK> +0x54E9 # <CJK> +0x54ED # <CJK> +0x54EE # <CJK> +0x54F2 # <CJK> +0x54FA # <CJK> +0x54FD # <CJK> +0x5504 # <CJK> +0x5506 # <CJK> +0x5507 # <CJK> +0x550F # <CJK> +0x5510 # <CJK> +0x5514 # <CJK> +0x5516 # <CJK> +0x552E # <CJK> +0x552F # <CJK> +0x5531 # <CJK> +0x5533 # <CJK> +0x5538 # <CJK> +0x5539 # <CJK> +0x553E # <CJK> +0x5540 # <CJK> +0x5544 # <CJK> +0x5545 # <CJK> +0x5546 # <CJK> +0x554C # <CJK> +0x554F # <CJK> +0x5553 # <CJK> +0x5556 # <CJK> +0x5557 # <CJK> +0x555C # <CJK> +0x555D # <CJK> +0x5563 # <CJK> +0x557B # <CJK> +0x557C # <CJK> +0x557E # <CJK> +0x5580 # <CJK> +0x5583 # <CJK> +0x5584 # <CJK> +0x5587 # <CJK> +0x5589 # <CJK> +0x558A # <CJK> +0x558B # <CJK> +0x5598 # <CJK> +0x5599 # <CJK> +0x559A # <CJK> +0x559C # <CJK> +0x559D # <CJK> +0x559E # <CJK> +0x559F # <CJK> +0x55A7 # <CJK> +0x55A8 # <CJK> +0x55A9 # <CJK> +0x55AA # <CJK> +0x55AB # <CJK> +0x55AC # <CJK> +0x55AE # <CJK> +0x55B0 # <CJK> +0x55B6 # <CJK> +0x55C4 # <CJK> +0x55C5 # <CJK> +0x55C7 # <CJK> +0x55D4 # <CJK> +0x55DA # <CJK> +0x55DC # <CJK> +0x55DF # <CJK> +0x55E3 # <CJK> +0x55E4 # <CJK> +0x55F7 # <CJK> +0x55F9 # <CJK> +0x55FD # <CJK> +0x55FE # <CJK> +0x5606 # <CJK> +0x5609 # <CJK> +0x5614 # <CJK> +0x5616 # <CJK> +0x5617 # <CJK> +0x5618 # <CJK> +0x561B # <CJK> +0x5629 # <CJK> +0x562F # <CJK> +0x5631 # <CJK> +0x5632 # <CJK> +0x5634 # <CJK> +0x5636 # <CJK> +0x5638 # <CJK> +0x5642 # <CJK> +0x564C # <CJK> +0x564E # <CJK> +0x5650 # <CJK> +0x565B # <CJK> +0x5664 # <CJK> +0x5668 # <CJK> +0x566A # <CJK> +0x566B # <CJK> +0x566C # <CJK> +0x5674 # <CJK> +0x5678 # <CJK> +0x567A # <CJK> +0x5680 # <CJK> +0x5686 # <CJK> +0x5687 # <CJK> +0x568A # <CJK> +0x568F # <CJK> +0x5694 # <CJK> +0x56A0 # <CJK> +0x56A2 # <CJK> +0x56A5 # <CJK> +0x56AE # <CJK> +0x56B4 # <CJK> +0x56B6 # <CJK> +0x56BC # <CJK> +0x56C0 # <CJK> +0x56C1 # <CJK> +0x56C2 # <CJK> +0x56C3 # <CJK> +0x56C8 # <CJK> +0x56CE # <CJK> +0x56D1 # <CJK> +0x56D3 # <CJK> +0x56D7 # <CJK> +0x56D8 # <CJK> +0x56DA # <CJK> +0x56DB # <CJK> +0x56DE # <CJK> +0x56E0 # <CJK> +0x56E3 # <CJK> +0x56EE # <CJK> +0x56F0 # <CJK> +0x56F2 # <CJK> +0x56F3 # <CJK> +0x56F9 # <CJK> +0x56FA # <CJK> +0x56FD # <CJK> +0x56FF # <CJK> +0x5700 # <CJK> +0x5703 # <CJK> +0x5704 # <CJK> +0x5708 # <CJK> +0x5709 # <CJK> +0x570B # <CJK> +0x570D # <CJK> +0x570F # <CJK> +0x5712 # <CJK> +0x5713 # <CJK> +0x5716 # <CJK> +0x5718 # <CJK> +0x571C # <CJK> +0x571F # <CJK> +0x5726 # <CJK> +0x5727 # <CJK> +0x5728 # <CJK> +0x572D # <CJK> +0x5730 # <CJK> +0x5737 # <CJK> +0x5738 # <CJK> +0x573B # <CJK> +0x5740 # <CJK> +0x5742 # <CJK> +0x5747 # <CJK> +0x574A # <CJK> +0x574E # <CJK> +0x574F # <CJK> +0x5750 # <CJK> +0x5751 # <CJK> +0x5761 # <CJK> +0x5764 # <CJK> +0x5766 # <CJK> +0x5769 # <CJK> +0x576A # <CJK> +0x577F # <CJK> +0x5782 # <CJK> +0x5788 # <CJK> +0x5789 # <CJK> +0x578B # <CJK> +0x5793 # <CJK> +0x57A0 # <CJK> +0x57A2 # <CJK> +0x57A3 # <CJK> +0x57A4 # <CJK> +0x57AA # <CJK> +0x57B0 # <CJK> +0x57B3 # <CJK> +0x57C0 # <CJK> +0x57C3 # <CJK> +0x57C6 # <CJK> +0x57CB # <CJK> +0x57CE # <CJK> +0x57D2 # <CJK> +0x57D3 # <CJK> +0x57D4 # <CJK> +0x57D6 # <CJK> +0x57DC # <CJK> +0x57DF # <CJK> +0x57E0 # <CJK> +0x57E3 # <CJK> +0x57F4 # <CJK> +0x57F7 # <CJK> +0x57F9 # <CJK> +0x57FA # <CJK> +0x57FC # <CJK> +0x5800 # <CJK> +0x5802 # <CJK> +0x5805 # <CJK> +0x5806 # <CJK> +0x580A # <CJK> +0x580B # <CJK> +0x5815 # <CJK> +0x5819 # <CJK> +0x581D # <CJK> +0x5821 # <CJK> +0x5824 # <CJK> +0x582A # <CJK> +0x582F # <CJK> +0x5830 # <CJK> +0x5831 # <CJK> +0x5834 # <CJK> +0x5835 # <CJK> +0x583A # <CJK> +0x583D # <CJK> +0x5840 # <CJK> +0x5841 # <CJK> +0x584A # <CJK> +0x584B # <CJK> +0x5851 # <CJK> +0x5852 # <CJK> +0x5854 # <CJK> +0x5857 # <CJK> +0x5858 # <CJK> +0x5859 # <CJK> +0x585A # <CJK> +0x585E # <CJK> +0x5862 # <CJK> +0x5869 # <CJK> +0x586B # <CJK> +0x5870 # <CJK> +0x5872 # <CJK> +0x5875 # <CJK> +0x5879 # <CJK> +0x587E # <CJK> +0x5883 # <CJK> +0x5885 # <CJK> +0x5893 # <CJK> +0x5897 # <CJK> +0x589C # <CJK> +0x589F # <CJK> +0x58A8 # <CJK> +0x58AB # <CJK> +0x58AE # <CJK> +0x58B3 # <CJK> +0x58B8 # <CJK> +0x58B9 # <CJK> +0x58BA # <CJK> +0x58BB # <CJK> +0x58BE # <CJK> +0x58C1 # <CJK> +0x58C5 # <CJK> +0x58C7 # <CJK> +0x58CA # <CJK> +0x58CC # <CJK> +0x58D1 # <CJK> +0x58D3 # <CJK> +0x58D5 # <CJK> +0x58D7 # <CJK> +0x58D8 # <CJK> +0x58D9 # <CJK> +0x58DC # <CJK> +0x58DE # <CJK> +0x58DF # <CJK> +0x58E4 # <CJK> +0x58E5 # <CJK> +0x58EB # <CJK> +0x58EC # <CJK> +0x58EE # <CJK> +0x58EF # <CJK> +0x58F0 # <CJK> +0x58F1 # <CJK> +0x58F2 # <CJK> +0x58F7 # <CJK> +0x58F9 # <CJK> +0x58FA # <CJK> +0x58FB # <CJK> +0x58FC # <CJK> +0x58FD # <CJK> +0x5902 # <CJK> +0x5909 # <CJK> +0x590A # <CJK> +0x590F # <CJK> +0x5910 # <CJK> +0x5915 # <CJK> +0x5916 # <CJK> +0x5918 # <CJK> +0x5919 # <CJK> +0x591A # <CJK> +0x591B # <CJK> +0x591C # <CJK> +0x5922 # <CJK> +0x5925 # <CJK> +0x5927 # <CJK> +0x5929 # <CJK> +0x592A # <CJK> +0x592B # <CJK> +0x592C # <CJK> +0x592D # <CJK> +0x592E # <CJK> +0x5931 # <CJK> +0x5932 # <CJK> +0x5937 # <CJK> +0x5938 # <CJK> +0x593E # <CJK> +0x5944 # <CJK> +0x5947 # <CJK> +0x5948 # <CJK> +0x5949 # <CJK> +0x594E # <CJK> +0x594F # <CJK> +0x5950 # <CJK> +0x5951 # <CJK> +0x5954 # <CJK> +0x5955 # <CJK> +0x5957 # <CJK> +0x5958 # <CJK> +0x595A # <CJK> +0x5960 # <CJK> +0x5962 # <CJK> +0x5965 # <CJK> +0x5967 # <CJK> +0x5968 # <CJK> +0x5969 # <CJK> +0x596A # <CJK> +0x596C # <CJK> +0x596E # <CJK> +0x5973 # <CJK> +0x5974 # <CJK> +0x5978 # <CJK> +0x597D # <CJK> +0x5981 # <CJK> +0x5982 # <CJK> +0x5983 # <CJK> +0x5984 # <CJK> +0x598A # <CJK> +0x598D # <CJK> +0x5993 # <CJK> +0x5996 # <CJK> +0x5999 # <CJK> +0x599B # <CJK> +0x599D # <CJK> +0x59A3 # <CJK> +0x59A5 # <CJK> +0x59A8 # <CJK> +0x59AC # <CJK> +0x59B2 # <CJK> +0x59B9 # <CJK> +0x59BB # <CJK> +0x59BE # <CJK> +0x59C6 # <CJK> +0x59C9 # <CJK> +0x59CB # <CJK> +0x59D0 # <CJK> +0x59D1 # <CJK> +0x59D3 # <CJK> +0x59D4 # <CJK> +0x59D9 # <CJK> +0x59DA # <CJK> +0x59DC # <CJK> +0x59E5 # <CJK> +0x59E6 # <CJK> +0x59E8 # <CJK> +0x59EA # <CJK> +0x59EB # <CJK> +0x59F6 # <CJK> +0x59FB # <CJK> +0x59FF # <CJK> +0x5A01 # <CJK> +0x5A03 # <CJK> +0x5A09 # <CJK> +0x5A11 # <CJK> +0x5A18 # <CJK> +0x5A1A # <CJK> +0x5A1C # <CJK> +0x5A1F # <CJK> +0x5A20 # <CJK> +0x5A25 # <CJK> +0x5A29 # <CJK> +0x5A2F # <CJK> +0x5A35 # <CJK> +0x5A36 # <CJK> +0x5A3C # <CJK> +0x5A40 # <CJK> +0x5A41 # <CJK> +0x5A46 # <CJK> +0x5A49 # <CJK> +0x5A5A # <CJK> +0x5A62 # <CJK> +0x5A66 # <CJK> +0x5A6A # <CJK> +0x5A6C # <CJK> +0x5A7F # <CJK> +0x5A92 # <CJK> +0x5A9A # <CJK> +0x5A9B # <CJK> +0x5ABC # <CJK> +0x5ABD # <CJK> +0x5ABE # <CJK> +0x5AC1 # <CJK> +0x5AC2 # <CJK> +0x5AC9 # <CJK> +0x5ACB # <CJK> +0x5ACC # <CJK> +0x5AD0 # <CJK> +0x5AD6 # <CJK> +0x5AD7 # <CJK> +0x5AE1 # <CJK> +0x5AE3 # <CJK> +0x5AE6 # <CJK> +0x5AE9 # <CJK> +0x5AFA # <CJK> +0x5AFB # <CJK> +0x5B09 # <CJK> +0x5B0B # <CJK> +0x5B0C # <CJK> +0x5B16 # <CJK> +0x5B22 # <CJK> +0x5B2A # <CJK> +0x5B2C # <CJK> +0x5B30 # <CJK> +0x5B32 # <CJK> +0x5B36 # <CJK> +0x5B3E # <CJK> +0x5B40 # <CJK> +0x5B43 # <CJK> +0x5B45 # <CJK> +0x5B50 # <CJK> +0x5B51 # <CJK> +0x5B54 # <CJK> +0x5B55 # <CJK> +0x5B57 # <CJK> +0x5B58 # <CJK> +0x5B5A # <CJK> +0x5B5B # <CJK> +0x5B5C # <CJK> +0x5B5D # <CJK> +0x5B5F # <CJK> +0x5B63 # <CJK> +0x5B64 # <CJK> +0x5B65 # <CJK> +0x5B66 # <CJK> +0x5B69 # <CJK> +0x5B6B # <CJK> +0x5B70 # <CJK> +0x5B71 # <CJK> +0x5B73 # <CJK> +0x5B75 # <CJK> +0x5B78 # <CJK> +0x5B7A # <CJK> +0x5B80 # <CJK> +0x5B83 # <CJK> +0x5B85 # <CJK> +0x5B87 # <CJK> +0x5B88 # <CJK> +0x5B89 # <CJK> +0x5B8B # <CJK> +0x5B8C # <CJK> +0x5B8D # <CJK> +0x5B8F # <CJK> +0x5B95 # <CJK> +0x5B97 # <CJK> +0x5B98 # <CJK> +0x5B99 # <CJK> +0x5B9A # <CJK> +0x5B9B # <CJK> +0x5B9C # <CJK> +0x5B9D # <CJK> +0x5B9F # <CJK> +0x5BA2 # <CJK> +0x5BA3 # <CJK> +0x5BA4 # <CJK> +0x5BA5 # <CJK> +0x5BA6 # <CJK> +0x5BAE # <CJK> +0x5BB0 # <CJK> +0x5BB3 # <CJK> +0x5BB4 # <CJK> +0x5BB5 # <CJK> +0x5BB6 # <CJK> +0x5BB8 # <CJK> +0x5BB9 # <CJK> +0x5BBF # <CJK> +0x5BC2 # <CJK> +0x5BC3 # <CJK> +0x5BC4 # <CJK> +0x5BC5 # <CJK> +0x5BC6 # <CJK> +0x5BC7 # <CJK> +0x5BC9 # <CJK> +0x5BCC # <CJK> +0x5BD0 # <CJK> +0x5BD2 # <CJK> +0x5BD3 # <CJK> +0x5BD4 # <CJK> +0x5BDB # <CJK> +0x5BDD # <CJK> +0x5BDE # <CJK> +0x5BDF # <CJK> +0x5BE1 # <CJK> +0x5BE2 # <CJK> +0x5BE4 # <CJK> +0x5BE5 # <CJK> +0x5BE6 # <CJK> +0x5BE7 # <CJK> +0x5BE8 # <CJK> +0x5BE9 # <CJK> +0x5BEB # <CJK> +0x5BEE # <CJK> +0x5BF0 # <CJK> +0x5BF3 # <CJK> +0x5BF5 # <CJK> +0x5BF6 # <CJK> +0x5BF8 # <CJK> +0x5BFA # <CJK> +0x5BFE # <CJK> +0x5BFF # <CJK> +0x5C01 # <CJK> +0x5C02 # <CJK> +0x5C04 # <CJK> +0x5C05 # <CJK> +0x5C06 # <CJK> +0x5C07 # <CJK> +0x5C08 # <CJK> +0x5C09 # <CJK> +0x5C0A # <CJK> +0x5C0B # <CJK> +0x5C0D # <CJK> +0x5C0E # <CJK> +0x5C0F # <CJK> +0x5C11 # <CJK> +0x5C13 # <CJK> +0x5C16 # <CJK> +0x5C1A # <CJK> +0x5C20 # <CJK> +0x5C22 # <CJK> +0x5C24 # <CJK> +0x5C28 # <CJK> +0x5C2D # <CJK> +0x5C31 # <CJK> +0x5C38 # <CJK> +0x5C39 # <CJK> +0x5C3A # <CJK> +0x5C3B # <CJK> +0x5C3C # <CJK> +0x5C3D # <CJK> +0x5C3E # <CJK> +0x5C3F # <CJK> +0x5C40 # <CJK> +0x5C41 # <CJK> +0x5C45 # <CJK> +0x5C46 # <CJK> +0x5C48 # <CJK> +0x5C4A # <CJK> +0x5C4B # <CJK> +0x5C4D # <CJK> +0x5C4E # <CJK> +0x5C4F # <CJK> +0x5C50 # <CJK> +0x5C51 # <CJK> +0x5C53 # <CJK> +0x5C55 # <CJK> +0x5C5E # <CJK> +0x5C60 # <CJK> +0x5C61 # <CJK> +0x5C64 # <CJK> +0x5C65 # <CJK> +0x5C6C # <CJK> +0x5C6E # <CJK> +0x5C6F # <CJK> +0x5C71 # <CJK> +0x5C76 # <CJK> +0x5C79 # <CJK> +0x5C8C # <CJK> +0x5C90 # <CJK> +0x5C91 # <CJK> +0x5C94 # <CJK> +0x5CA1 # <CJK> +0x5CA8 # <CJK> +0x5CA9 # <CJK> +0x5CAB # <CJK> +0x5CAC # <CJK> +0x5CB1 # <CJK> +0x5CB3 # <CJK> +0x5CB6 # <CJK> +0x5CB7 # <CJK> +0x5CB8 # <CJK> +0x5CBB # <CJK> +0x5CBC # <CJK> +0x5CBE # <CJK> +0x5CC5 # <CJK> +0x5CC7 # <CJK> +0x5CD9 # <CJK> +0x5CE0 # <CJK> +0x5CE1 # <CJK> +0x5CE8 # <CJK> +0x5CE9 # <CJK> +0x5CEA # <CJK> +0x5CED # <CJK> +0x5CEF # <CJK> +0x5CF0 # <CJK> +0x5CF6 # <CJK> +0x5CFA # <CJK> +0x5CFB # <CJK> +0x5CFD # <CJK> +0x5D07 # <CJK> +0x5D0B # <CJK> +0x5D0E # <CJK> +0x5D11 # <CJK> +0x5D14 # <CJK> +0x5D15 # <CJK> +0x5D16 # <CJK> +0x5D17 # <CJK> +0x5D18 # <CJK> +0x5D19 # <CJK> +0x5D1A # <CJK> +0x5D1B # <CJK> +0x5D1F # <CJK> +0x5D22 # <CJK> +0x5D29 # <CJK> +0x5D4B # <CJK> +0x5D4C # <CJK> +0x5D4E # <CJK> +0x5D50 # <CJK> +0x5D52 # <CJK> +0x5D5C # <CJK> +0x5D69 # <CJK> +0x5D6C # <CJK> +0x5D6F # <CJK> +0x5D73 # <CJK> +0x5D76 # <CJK> +0x5D82 # <CJK> +0x5D84 # <CJK> +0x5D87 # <CJK> +0x5D8B # <CJK> +0x5D8C # <CJK> +0x5D90 # <CJK> +0x5D9D # <CJK> +0x5DA2 # <CJK> +0x5DAC # <CJK> +0x5DAE # <CJK> +0x5DB7 # <CJK> +0x5DBA # <CJK> +0x5DBC # <CJK> +0x5DBD # <CJK> +0x5DC9 # <CJK> +0x5DCC # <CJK> +0x5DCD # <CJK> +0x5DD2 # <CJK> +0x5DD3 # <CJK> +0x5DD6 # <CJK> +0x5DDB # <CJK> +0x5DDD # <CJK> +0x5DDE # <CJK> +0x5DE1 # <CJK> +0x5DE3 # <CJK> +0x5DE5 # <CJK> +0x5DE6 # <CJK> +0x5DE7 # <CJK> +0x5DE8 # <CJK> +0x5DEB # <CJK> +0x5DEE # <CJK> +0x5DF1 # <CJK> +0x5DF2 # <CJK> +0x5DF3 # <CJK> +0x5DF4 # <CJK> +0x5DF5 # <CJK> +0x5DF7 # <CJK> +0x5DFB # <CJK> +0x5DFD # <CJK> +0x5DFE # <CJK> +0x5E02 # <CJK> +0x5E03 # <CJK> +0x5E06 # <CJK> +0x5E0B # <CJK> +0x5E0C # <CJK> +0x5E11 # <CJK> +0x5E16 # <CJK> +0x5E19 # <CJK> +0x5E1A # <CJK> +0x5E1B # <CJK> +0x5E1D # <CJK> +0x5E25 # <CJK> +0x5E2B # <CJK> +0x5E2D # <CJK> +0x5E2F # <CJK> +0x5E30 # <CJK> +0x5E33 # <CJK> +0x5E36 # <CJK> +0x5E37 # <CJK> +0x5E38 # <CJK> +0x5E3D # <CJK> +0x5E40 # <CJK> +0x5E43 # <CJK> +0x5E44 # <CJK> +0x5E45 # <CJK> +0x5E47 # <CJK> +0x5E4C # <CJK> +0x5E4E # <CJK> +0x5E54 # <CJK> +0x5E55 # <CJK> +0x5E57 # <CJK> +0x5E5F # <CJK> +0x5E61 # <CJK> +0x5E62 # <CJK> +0x5E63 # <CJK> +0x5E64 # <CJK> +0x5E72 # <CJK> +0x5E73 # <CJK> +0x5E74 # <CJK> +0x5E75 # <CJK> +0x5E76 # <CJK> +0x5E78 # <CJK> +0x5E79 # <CJK> +0x5E7A # <CJK> +0x5E7B # <CJK> +0x5E7C # <CJK> +0x5E7D # <CJK> +0x5E7E # <CJK> +0x5E7F # <CJK> +0x5E81 # <CJK> +0x5E83 # <CJK> +0x5E84 # <CJK> +0x5E87 # <CJK> +0x5E8A # <CJK> +0x5E8F # <CJK> +0x5E95 # <CJK> +0x5E96 # <CJK> +0x5E97 # <CJK> +0x5E9A # <CJK> +0x5E9C # <CJK> +0x5EA0 # <CJK> +0x5EA6 # <CJK> +0x5EA7 # <CJK> +0x5EAB # <CJK> +0x5EAD # <CJK> +0x5EB5 # <CJK> +0x5EB6 # <CJK> +0x5EB7 # <CJK> +0x5EB8 # <CJK> +0x5EC1 # <CJK> +0x5EC2 # <CJK> +0x5EC3 # <CJK> +0x5EC8 # <CJK> +0x5EC9 # <CJK> +0x5ECA # <CJK> +0x5ECF # <CJK> +0x5ED0 # <CJK> +0x5ED3 # <CJK> +0x5ED6 # <CJK> +0x5EDA # <CJK> +0x5EDB # <CJK> +0x5EDD # <CJK> +0x5EDF # <CJK> +0x5EE0 # <CJK> +0x5EE1 # <CJK> +0x5EE2 # <CJK> +0x5EE3 # <CJK> +0x5EE8 # <CJK> +0x5EE9 # <CJK> +0x5EEC # <CJK> +0x5EF0 # <CJK> +0x5EF1 # <CJK> +0x5EF3 # <CJK> +0x5EF4 # <CJK> +0x5EF6 # <CJK> +0x5EF7 # <CJK> +0x5EF8 # <CJK> +0x5EFA # <CJK> +0x5EFB # <CJK> +0x5EFC # <CJK> +0x5EFE # <CJK> +0x5EFF # <CJK> +0x5F01 # <CJK> +0x5F03 # <CJK> +0x5F04 # <CJK> +0x5F09 # <CJK> +0x5F0A # <CJK> +0x5F0B # <CJK> +0x5F0C # <CJK> +0x5F0D # <CJK> +0x5F0F # <CJK> +0x5F10 # <CJK> +0x5F11 # <CJK> +0x5F13 # <CJK> +0x5F14 # <CJK> +0x5F15 # <CJK> +0x5F16 # <CJK> +0x5F17 # <CJK> +0x5F18 # <CJK> +0x5F1B # <CJK> +0x5F1F # <CJK> +0x5F25 # <CJK> +0x5F26 # <CJK> +0x5F27 # <CJK> +0x5F29 # <CJK> +0x5F2D # <CJK> +0x5F2F # <CJK> +0x5F31 # <CJK> +0x5F35 # <CJK> +0x5F37 # <CJK> +0x5F38 # <CJK> +0x5F3C # <CJK> +0x5F3E # <CJK> +0x5F41 # <CJK> +0x5F48 # <CJK> +0x5F4A # <CJK> +0x5F4C # <CJK> +0x5F4E # <CJK> +0x5F51 # <CJK> +0x5F53 # <CJK> +0x5F56 # <CJK> +0x5F57 # <CJK> +0x5F59 # <CJK> +0x5F5C # <CJK> +0x5F5D # <CJK> +0x5F61 # <CJK> +0x5F62 # <CJK> +0x5F66 # <CJK> +0x5F69 # <CJK> +0x5F6A # <CJK> +0x5F6B # <CJK> +0x5F6C # <CJK> +0x5F6D # <CJK> +0x5F70 # <CJK> +0x5F71 # <CJK> +0x5F73 # <CJK> +0x5F77 # <CJK> +0x5F79 # <CJK> +0x5F7C # <CJK> +0x5F7F # <CJK> +0x5F80 # <CJK> +0x5F81 # <CJK> +0x5F82 # <CJK> +0x5F83 # <CJK> +0x5F84 # <CJK> +0x5F85 # <CJK> +0x5F87 # <CJK> +0x5F88 # <CJK> +0x5F8A # <CJK> +0x5F8B # <CJK> +0x5F8C # <CJK> +0x5F90 # <CJK> +0x5F91 # <CJK> +0x5F92 # <CJK> +0x5F93 # <CJK> +0x5F97 # <CJK> +0x5F98 # <CJK> +0x5F99 # <CJK> +0x5F9E # <CJK> +0x5FA0 # <CJK> +0x5FA1 # <CJK> +0x5FA8 # <CJK> +0x5FA9 # <CJK> +0x5FAA # <CJK> +0x5FAD # <CJK> +0x5FAE # <CJK> +0x5FB3 # <CJK> +0x5FB4 # <CJK> +0x5FB9 # <CJK> +0x5FBC # <CJK> +0x5FBD # <CJK> +0x5FC3 # <CJK> +0x5FC5 # <CJK> +0x5FCC # <CJK> +0x5FCD # <CJK> +0x5FD6 # <CJK> +0x5FD7 # <CJK> +0x5FD8 # <CJK> +0x5FD9 # <CJK> +0x5FDC # <CJK> +0x5FDD # <CJK> +0x5FE0 # <CJK> +0x5FE4 # <CJK> +0x5FEB # <CJK> +0x5FF0 # <CJK> +0x5FF1 # <CJK> +0x5FF5 # <CJK> +0x5FF8 # <CJK> +0x5FFB # <CJK> +0x5FFD # <CJK> +0x5FFF # <CJK> +0x600E # <CJK> +0x600F # <CJK> +0x6010 # <CJK> +0x6012 # <CJK> +0x6015 # <CJK> +0x6016 # <CJK> +0x6019 # <CJK> +0x601B # <CJK> +0x601C # <CJK> +0x601D # <CJK> +0x6020 # <CJK> +0x6021 # <CJK> +0x6025 # <CJK> +0x6026 # <CJK> +0x6027 # <CJK> +0x6028 # <CJK> +0x6029 # <CJK> +0x602A # <CJK> +0x602B # <CJK> +0x602F # <CJK> +0x6031 # <CJK> +0x603A # <CJK> +0x6041 # <CJK> +0x6042 # <CJK> +0x6043 # <CJK> +0x6046 # <CJK> +0x604A # <CJK> +0x604B # <CJK> +0x604D # <CJK> +0x6050 # <CJK> +0x6052 # <CJK> +0x6055 # <CJK> +0x6059 # <CJK> +0x605A # <CJK> +0x605F # <CJK> +0x6060 # <CJK> +0x6062 # <CJK> +0x6063 # <CJK> +0x6064 # <CJK> +0x6065 # <CJK> +0x6068 # <CJK> +0x6069 # <CJK> +0x606A # <CJK> +0x606B # <CJK> +0x606C # <CJK> +0x606D # <CJK> +0x606F # <CJK> +0x6070 # <CJK> +0x6075 # <CJK> +0x6077 # <CJK> +0x6081 # <CJK> +0x6083 # <CJK> +0x6084 # <CJK> +0x6089 # <CJK> +0x608B # <CJK> +0x608C # <CJK> +0x608D # <CJK> +0x6092 # <CJK> +0x6094 # <CJK> +0x6096 # <CJK> +0x6097 # <CJK> +0x609A # <CJK> +0x609B # <CJK> +0x609F # <CJK> +0x60A0 # <CJK> +0x60A3 # <CJK> +0x60A6 # <CJK> +0x60A7 # <CJK> +0x60A9 # <CJK> +0x60AA # <CJK> +0x60B2 # <CJK> +0x60B3 # <CJK> +0x60B4 # <CJK> +0x60B5 # <CJK> +0x60B6 # <CJK> +0x60B8 # <CJK> +0x60BC # <CJK> +0x60BD # <CJK> +0x60C5 # <CJK> +0x60C6 # <CJK> +0x60C7 # <CJK> +0x60D1 # <CJK> +0x60D3 # <CJK> +0x60D8 # <CJK> +0x60DA # <CJK> +0x60DC # <CJK> +0x60DF # <CJK> +0x60E0 # <CJK> +0x60E1 # <CJK> +0x60E3 # <CJK> +0x60E7 # <CJK> +0x60E8 # <CJK> +0x60F0 # <CJK> +0x60F1 # <CJK> +0x60F3 # <CJK> +0x60F4 # <CJK> +0x60F6 # <CJK> +0x60F7 # <CJK> +0x60F9 # <CJK> +0x60FA # <CJK> +0x60FB # <CJK> +0x6100 # <CJK> +0x6101 # <CJK> +0x6103 # <CJK> +0x6106 # <CJK> +0x6108 # <CJK> +0x6109 # <CJK> +0x610D # <CJK> +0x610E # <CJK> +0x610F # <CJK> +0x6115 # <CJK> +0x611A # <CJK> +0x611B # <CJK> +0x611F # <CJK> +0x6121 # <CJK> +0x6127 # <CJK> +0x6128 # <CJK> +0x612C # <CJK> +0x6134 # <CJK> +0x613C # <CJK> +0x613D # <CJK> +0x613E # <CJK> +0x613F # <CJK> +0x6142 # <CJK> +0x6144 # <CJK> +0x6147 # <CJK> +0x6148 # <CJK> +0x614A # <CJK> +0x614B # <CJK> +0x614C # <CJK> +0x614D # <CJK> +0x614E # <CJK> +0x6153 # <CJK> +0x6155 # <CJK> +0x6158 # <CJK> +0x6159 # <CJK> +0x615A # <CJK> +0x615D # <CJK> +0x615F # <CJK> +0x6162 # <CJK> +0x6163 # <CJK> +0x6165 # <CJK> +0x6167 # <CJK> +0x6168 # <CJK> +0x616B # <CJK> +0x616E # <CJK> +0x616F # <CJK> +0x6170 # <CJK> +0x6171 # <CJK> +0x6173 # <CJK> +0x6174 # <CJK> +0x6175 # <CJK> +0x6176 # <CJK> +0x6177 # <CJK> +0x617E # <CJK> +0x6182 # <CJK> +0x6187 # <CJK> +0x618A # <CJK> +0x618E # <CJK> +0x6190 # <CJK> +0x6191 # <CJK> +0x6194 # <CJK> +0x6196 # <CJK> +0x6199 # <CJK> +0x619A # <CJK> +0x61A4 # <CJK> +0x61A7 # <CJK> +0x61A9 # <CJK> +0x61AB # <CJK> +0x61AC # <CJK> +0x61AE # <CJK> +0x61B2 # <CJK> +0x61B6 # <CJK> +0x61BA # <CJK> +0x61BE # <CJK> +0x61C3 # <CJK> +0x61C6 # <CJK> +0x61C7 # <CJK> +0x61C8 # <CJK> +0x61C9 # <CJK> +0x61CA # <CJK> +0x61CB # <CJK> +0x61CC # <CJK> +0x61CD # <CJK> +0x61D0 # <CJK> +0x61E3 # <CJK> +0x61E6 # <CJK> +0x61F2 # <CJK> +0x61F4 # <CJK> +0x61F6 # <CJK> +0x61F7 # <CJK> +0x61F8 # <CJK> +0x61FA # <CJK> +0x61FC # <CJK> +0x61FD # <CJK> +0x61FE # <CJK> +0x61FF # <CJK> +0x6200 # <CJK> +0x6208 # <CJK> +0x6209 # <CJK> +0x620A # <CJK> +0x620C # <CJK> +0x620D # <CJK> +0x620E # <CJK> +0x6210 # <CJK> +0x6211 # <CJK> +0x6212 # <CJK> +0x6214 # <CJK> +0x6216 # <CJK> +0x621A # <CJK> +0x621B # <CJK> +0x621D # <CJK> +0x621E # <CJK> +0x621F # <CJK> +0x6221 # <CJK> +0x6226 # <CJK> +0x622A # <CJK> +0x622E # <CJK> +0x622F # <CJK> +0x6230 # <CJK> +0x6232 # <CJK> +0x6233 # <CJK> +0x6234 # <CJK> +0x6238 # <CJK> +0x623B # <CJK> +0x623F # <CJK> +0x6240 # <CJK> +0x6241 # <CJK> +0x6247 # <CJK> +0x6248 # <CJK> +0x6249 # <CJK> +0x624B # <CJK> +0x624D # <CJK> +0x624E # <CJK> +0x6253 # <CJK> +0x6255 # <CJK> +0x6258 # <CJK> +0x625B # <CJK> +0x625E # <CJK> +0x6260 # <CJK> +0x6263 # <CJK> +0x6268 # <CJK> +0x626E # <CJK> +0x6271 # <CJK> +0x6276 # <CJK> +0x6279 # <CJK> +0x627C # <CJK> +0x627E # <CJK> +0x627F # <CJK> +0x6280 # <CJK> +0x6282 # <CJK> +0x6283 # <CJK> +0x6284 # <CJK> +0x6289 # <CJK> +0x628A # <CJK> +0x6291 # <CJK> +0x6292 # <CJK> +0x6293 # <CJK> +0x6294 # <CJK> +0x6295 # <CJK> +0x6296 # <CJK> +0x6297 # <CJK> +0x6298 # <CJK> +0x629B # <CJK> +0x629C # <CJK> +0x629E # <CJK> +0x62AB # <CJK> +0x62AC # <CJK> +0x62B1 # <CJK> +0x62B5 # <CJK> +0x62B9 # <CJK> +0x62BB # <CJK> +0x62BC # <CJK> +0x62BD # <CJK> +0x62C2 # <CJK> +0x62C5 # <CJK> +0x62C6 # <CJK> +0x62C7 # <CJK> +0x62C8 # <CJK> +0x62C9 # <CJK> +0x62CA # <CJK> +0x62CC # <CJK> +0x62CD # <CJK> +0x62CF # <CJK> +0x62D0 # <CJK> +0x62D1 # <CJK> +0x62D2 # <CJK> +0x62D3 # <CJK> +0x62D4 # <CJK> +0x62D7 # <CJK> +0x62D8 # <CJK> +0x62D9 # <CJK> +0x62DB # <CJK> +0x62DC # <CJK> +0x62DD # <CJK> +0x62E0 # <CJK> +0x62E1 # <CJK> +0x62EC # <CJK> +0x62ED # <CJK> +0x62EE # <CJK> +0x62EF # <CJK> +0x62F1 # <CJK> +0x62F3 # <CJK> +0x62F5 # <CJK> +0x62F6 # <CJK> +0x62F7 # <CJK> +0x62FE # <CJK> +0x62FF # <CJK> +0x6301 # <CJK> +0x6302 # <CJK> +0x6307 # <CJK> +0x6308 # <CJK> +0x6309 # <CJK> +0x630C # <CJK> +0x6311 # <CJK> +0x6319 # <CJK> +0x631F # <CJK> +0x6327 # <CJK> +0x6328 # <CJK> +0x632B # <CJK> +0x632F # <CJK> +0x633A # <CJK> +0x633D # <CJK> +0x633E # <CJK> +0x633F # <CJK> +0x6349 # <CJK> +0x634C # <CJK> +0x634D # <CJK> +0x634F # <CJK> +0x6350 # <CJK> +0x6355 # <CJK> +0x6357 # <CJK> +0x635C # <CJK> +0x6367 # <CJK> +0x6368 # <CJK> +0x6369 # <CJK> +0x636B # <CJK> +0x636E # <CJK> +0x6372 # <CJK> +0x6376 # <CJK> +0x6377 # <CJK> +0x637A # <CJK> +0x637B # <CJK> +0x6380 # <CJK> +0x6383 # <CJK> +0x6388 # <CJK> +0x6389 # <CJK> +0x638C # <CJK> +0x638E # <CJK> +0x638F # <CJK> +0x6392 # <CJK> +0x6396 # <CJK> +0x6398 # <CJK> +0x639B # <CJK> +0x639F # <CJK> +0x63A0 # <CJK> +0x63A1 # <CJK> +0x63A2 # <CJK> +0x63A3 # <CJK> +0x63A5 # <CJK> +0x63A7 # <CJK> +0x63A8 # <CJK> +0x63A9 # <CJK> +0x63AA # <CJK> +0x63AB # <CJK> +0x63AC # <CJK> +0x63B2 # <CJK> +0x63B4 # <CJK> +0x63B5 # <CJK> +0x63BB # <CJK> +0x63BE # <CJK> +0x63C0 # <CJK> +0x63C3 # <CJK> +0x63C4 # <CJK> +0x63C6 # <CJK> +0x63C9 # <CJK> +0x63CF # <CJK> +0x63D0 # <CJK> +0x63D2 # <CJK> +0x63D6 # <CJK> +0x63DA # <CJK> +0x63DB # <CJK> +0x63E1 # <CJK> +0x63E3 # <CJK> +0x63E9 # <CJK> +0x63EE # <CJK> +0x63F4 # <CJK> +0x63F6 # <CJK> +0x63FA # <CJK> +0x6406 # <CJK> +0x640D # <CJK> +0x640F # <CJK> +0x6413 # <CJK> +0x6416 # <CJK> +0x6417 # <CJK> +0x641C # <CJK> +0x6426 # <CJK> +0x6428 # <CJK> +0x642C # <CJK> +0x642D # <CJK> +0x6434 # <CJK> +0x6436 # <CJK> +0x643A # <CJK> +0x643E # <CJK> +0x6442 # <CJK> +0x644E # <CJK> +0x6458 # <CJK> +0x6467 # <CJK> +0x6469 # <CJK> +0x646F # <CJK> +0x6476 # <CJK> +0x6478 # <CJK> +0x647A # <CJK> +0x6483 # <CJK> +0x6488 # <CJK> +0x6492 # <CJK> +0x6493 # <CJK> +0x6495 # <CJK> +0x649A # <CJK> +0x649E # <CJK> +0x64A4 # <CJK> +0x64A5 # <CJK> +0x64A9 # <CJK> +0x64AB # <CJK> +0x64AD # <CJK> +0x64AE # <CJK> +0x64B0 # <CJK> +0x64B2 # <CJK> +0x64B9 # <CJK> +0x64BB # <CJK> +0x64BC # <CJK> +0x64C1 # <CJK> +0x64C2 # <CJK> +0x64C5 # <CJK> +0x64C7 # <CJK> +0x64CD # <CJK> +0x64D2 # <CJK> +0x64D4 # <CJK> +0x64D8 # <CJK> +0x64DA # <CJK> +0x64E0 # <CJK> +0x64E1 # <CJK> +0x64E2 # <CJK> +0x64E3 # <CJK> +0x64E6 # <CJK> +0x64E7 # <CJK> +0x64EC # <CJK> +0x64EF # <CJK> +0x64F1 # <CJK> +0x64F2 # <CJK> +0x64F4 # <CJK> +0x64F6 # <CJK> +0x64FA # <CJK> +0x64FD # <CJK> +0x64FE # <CJK> +0x6500 # <CJK> +0x6505 # <CJK> +0x6518 # <CJK> +0x651C # <CJK> +0x651D # <CJK> +0x6523 # <CJK> +0x6524 # <CJK> +0x652A # <CJK> +0x652B # <CJK> +0x652C # <CJK> +0x652F # <CJK> +0x6534 # <CJK> +0x6535 # <CJK> +0x6536 # <CJK> +0x6537 # <CJK> +0x6538 # <CJK> +0x6539 # <CJK> +0x653B # <CJK> +0x653E # <CJK> +0x653F # <CJK> +0x6545 # <CJK> +0x6548 # <CJK> +0x654D # <CJK> +0x654F # <CJK> +0x6551 # <CJK> +0x6555 # <CJK> +0x6556 # <CJK> +0x6557 # <CJK> +0x6558 # <CJK> +0x6559 # <CJK> +0x655D # <CJK> +0x655E # <CJK> +0x6562 # <CJK> +0x6563 # <CJK> +0x6566 # <CJK> +0x656C # <CJK> +0x6570 # <CJK> +0x6572 # <CJK> +0x6574 # <CJK> +0x6575 # <CJK> +0x6577 # <CJK> +0x6578 # <CJK> +0x6582 # <CJK> +0x6583 # <CJK> +0x6587 # <CJK> +0x6588 # <CJK> +0x6589 # <CJK> +0x658C # <CJK> +0x658E # <CJK> +0x6590 # <CJK> +0x6591 # <CJK> +0x6597 # <CJK> +0x6599 # <CJK> +0x659B # <CJK> +0x659C # <CJK> +0x659F # <CJK> +0x65A1 # <CJK> +0x65A4 # <CJK> +0x65A5 # <CJK> +0x65A7 # <CJK> +0x65AB # <CJK> +0x65AC # <CJK> +0x65AD # <CJK> +0x65AF # <CJK> +0x65B0 # <CJK> +0x65B7 # <CJK> +0x65B9 # <CJK> +0x65BC # <CJK> +0x65BD # <CJK> +0x65C1 # <CJK> +0x65C3 # <CJK> +0x65C4 # <CJK> +0x65C5 # <CJK> +0x65C6 # <CJK> +0x65CB # <CJK> +0x65CC # <CJK> +0x65CF # <CJK> +0x65D2 # <CJK> +0x65D7 # <CJK> +0x65D9 # <CJK> +0x65DB # <CJK> +0x65E0 # <CJK> +0x65E1 # <CJK> +0x65E2 # <CJK> +0x65E5 # <CJK> +0x65E6 # <CJK> +0x65E7 # <CJK> +0x65E8 # <CJK> +0x65E9 # <CJK> +0x65EC # <CJK> +0x65ED # <CJK> +0x65F1 # <CJK> +0x65FA # <CJK> +0x65FB # <CJK> +0x6602 # <CJK> +0x6603 # <CJK> +0x6606 # <CJK> +0x6607 # <CJK> +0x660A # <CJK> +0x660C # <CJK> +0x660E # <CJK> +0x660F # <CJK> +0x6613 # <CJK> +0x6614 # <CJK> +0x661C # <CJK> +0x661F # <CJK> +0x6620 # <CJK> +0x6625 # <CJK> +0x6627 # <CJK> +0x6628 # <CJK> +0x662D # <CJK> +0x662F # <CJK> +0x6634 # <CJK> +0x6635 # <CJK> +0x6636 # <CJK> +0x663C # <CJK> +0x663F # <CJK> +0x6641 # <CJK> +0x6642 # <CJK> +0x6643 # <CJK> +0x6644 # <CJK> +0x6649 # <CJK> +0x664B # <CJK> +0x664F # <CJK> +0x6652 # <CJK> +0x665D # <CJK> +0x665E # <CJK> +0x665F # <CJK> +0x6662 # <CJK> +0x6664 # <CJK> +0x6666 # <CJK> +0x6667 # <CJK> +0x6668 # <CJK> +0x6669 # <CJK> +0x666E # <CJK> +0x666F # <CJK> +0x6670 # <CJK> +0x6674 # <CJK> +0x6676 # <CJK> +0x667A # <CJK> +0x6681 # <CJK> +0x6683 # <CJK> +0x6684 # <CJK> +0x6687 # <CJK> +0x6688 # <CJK> +0x6689 # <CJK> +0x668E # <CJK> +0x6691 # <CJK> +0x6696 # <CJK> +0x6697 # <CJK> +0x6698 # <CJK> +0x669D # <CJK> +0x66A2 # <CJK> +0x66A6 # <CJK> +0x66AB # <CJK> +0x66AE # <CJK> +0x66B4 # <CJK> +0x66B8 # <CJK> +0x66B9 # <CJK> +0x66BC # <CJK> +0x66BE # <CJK> +0x66C1 # <CJK> +0x66C4 # <CJK> +0x66C7 # <CJK> +0x66C9 # <CJK> +0x66D6 # <CJK> +0x66D9 # <CJK> +0x66DA # <CJK> +0x66DC # <CJK> +0x66DD # <CJK> +0x66E0 # <CJK> +0x66E6 # <CJK> +0x66E9 # <CJK> +0x66F0 # <CJK> +0x66F2 # <CJK> +0x66F3 # <CJK> +0x66F4 # <CJK> +0x66F5 # <CJK> +0x66F7 # <CJK> +0x66F8 # <CJK> +0x66F9 # <CJK> +0x66FC # <CJK> +0x66FD # <CJK> +0x66FE # <CJK> +0x66FF # <CJK> +0x6700 # <CJK> +0x6703 # <CJK> +0x6708 # <CJK> +0x6709 # <CJK> +0x670B # <CJK> +0x670D # <CJK> +0x670F # <CJK> +0x6714 # <CJK> +0x6715 # <CJK> +0x6716 # <CJK> +0x6717 # <CJK> +0x671B # <CJK> +0x671D # <CJK> +0x671E # <CJK> +0x671F # <CJK> +0x6726 # <CJK> +0x6727 # <CJK> +0x6728 # <CJK> +0x672A # <CJK> +0x672B # <CJK> +0x672C # <CJK> +0x672D # <CJK> +0x672E # <CJK> +0x6731 # <CJK> +0x6734 # <CJK> +0x6736 # <CJK> +0x6737 # <CJK> +0x6738 # <CJK> +0x673A # <CJK> +0x673D # <CJK> +0x673F # <CJK> +0x6741 # <CJK> +0x6746 # <CJK> +0x6749 # <CJK> +0x674E # <CJK> +0x674F # <CJK> +0x6750 # <CJK> +0x6751 # <CJK> +0x6753 # <CJK> +0x6756 # <CJK> +0x6759 # <CJK> +0x675C # <CJK> +0x675E # <CJK> +0x675F # <CJK> +0x6760 # <CJK> +0x6761 # <CJK> +0x6762 # <CJK> +0x6763 # <CJK> +0x6764 # <CJK> +0x6765 # <CJK> +0x676A # <CJK> +0x676D # <CJK> +0x676F # <CJK> +0x6770 # <CJK> +0x6771 # <CJK> +0x6772 # <CJK> +0x6773 # <CJK> +0x6775 # <CJK> +0x6777 # <CJK> +0x677C # <CJK> +0x677E # <CJK> +0x677F # <CJK> +0x6785 # <CJK> +0x6787 # <CJK> +0x6789 # <CJK> +0x678B # <CJK> +0x678C # <CJK> +0x6790 # <CJK> +0x6795 # <CJK> +0x6797 # <CJK> +0x679A # <CJK> +0x679C # <CJK> +0x679D # <CJK> +0x67A0 # <CJK> +0x67A1 # <CJK> +0x67A2 # <CJK> +0x67A6 # <CJK> +0x67A9 # <CJK> +0x67AF # <CJK> +0x67B3 # <CJK> +0x67B4 # <CJK> +0x67B6 # <CJK> +0x67B7 # <CJK> +0x67B8 # <CJK> +0x67B9 # <CJK> +0x67C1 # <CJK> +0x67C4 # <CJK> +0x67C6 # <CJK> +0x67CA # <CJK> +0x67CE # <CJK> +0x67CF # <CJK> +0x67D0 # <CJK> +0x67D1 # <CJK> +0x67D3 # <CJK> +0x67D4 # <CJK> +0x67D8 # <CJK> +0x67DA # <CJK> +0x67DD # <CJK> +0x67DE # <CJK> +0x67E2 # <CJK> +0x67E4 # <CJK> +0x67E7 # <CJK> +0x67E9 # <CJK> +0x67EC # <CJK> +0x67EE # <CJK> +0x67EF # <CJK> +0x67F1 # <CJK> +0x67F3 # <CJK> +0x67F4 # <CJK> +0x67F5 # <CJK> +0x67FB # <CJK> +0x67FE # <CJK> +0x67FF # <CJK> +0x6802 # <CJK> +0x6803 # <CJK> +0x6804 # <CJK> +0x6813 # <CJK> +0x6816 # <CJK> +0x6817 # <CJK> +0x681E # <CJK> +0x6821 # <CJK> +0x6822 # <CJK> +0x6829 # <CJK> +0x682A # <CJK> +0x682B # <CJK> +0x6832 # <CJK> +0x6834 # <CJK> +0x6838 # <CJK> +0x6839 # <CJK> +0x683C # <CJK> +0x683D # <CJK> +0x6840 # <CJK> +0x6841 # <CJK> +0x6842 # <CJK> +0x6843 # <CJK> +0x6846 # <CJK> +0x6848 # <CJK> +0x684D # <CJK> +0x684E # <CJK> +0x6850 # <CJK> +0x6851 # <CJK> +0x6853 # <CJK> +0x6854 # <CJK> +0x6859 # <CJK> +0x685C # <CJK> +0x685D # <CJK> +0x685F # <CJK> +0x6863 # <CJK> +0x6867 # <CJK> +0x6874 # <CJK> +0x6876 # <CJK> +0x6877 # <CJK> +0x687E # <CJK> +0x687F # <CJK> +0x6881 # <CJK> +0x6883 # <CJK> +0x6885 # <CJK> +0x688D # <CJK> +0x688F # <CJK> +0x6893 # <CJK> +0x6894 # <CJK> +0x6897 # <CJK> +0x689B # <CJK> +0x689D # <CJK> +0x689F # <CJK> +0x68A0 # <CJK> +0x68A2 # <CJK> +0x68A6 # <CJK> +0x68A7 # <CJK> +0x68A8 # <CJK> +0x68AD # <CJK> +0x68AF # <CJK> +0x68B0 # <CJK> +0x68B1 # <CJK> +0x68B3 # <CJK> +0x68B5 # <CJK> +0x68B6 # <CJK> +0x68B9 # <CJK> +0x68BA # <CJK> +0x68BC # <CJK> +0x68C4 # <CJK> +0x68C6 # <CJK> +0x68C9 # <CJK> +0x68CA # <CJK> +0x68CB # <CJK> +0x68CD # <CJK> +0x68D2 # <CJK> +0x68D4 # <CJK> +0x68D5 # <CJK> +0x68D7 # <CJK> +0x68D8 # <CJK> +0x68DA # <CJK> +0x68DF # <CJK> +0x68E0 # <CJK> +0x68E1 # <CJK> +0x68E3 # <CJK> +0x68E7 # <CJK> +0x68EE # <CJK> +0x68EF # <CJK> +0x68F2 # <CJK> +0x68F9 # <CJK> +0x68FA # <CJK> +0x6900 # <CJK> +0x6901 # <CJK> +0x6904 # <CJK> +0x6905 # <CJK> +0x6908 # <CJK> +0x690B # <CJK> +0x690C # <CJK> +0x690D # <CJK> +0x690E # <CJK> +0x690F # <CJK> +0x6912 # <CJK> +0x6919 # <CJK> +0x691A # <CJK> +0x691B # <CJK> +0x691C # <CJK> +0x6921 # <CJK> +0x6922 # <CJK> +0x6923 # <CJK> +0x6925 # <CJK> +0x6926 # <CJK> +0x6928 # <CJK> +0x692A # <CJK> +0x6930 # <CJK> +0x6934 # <CJK> +0x6936 # <CJK> +0x6939 # <CJK> +0x693D # <CJK> +0x693F # <CJK> +0x694A # <CJK> +0x6953 # <CJK> +0x6954 # <CJK> +0x6955 # <CJK> +0x6959 # <CJK> +0x695A # <CJK> +0x695C # <CJK> +0x695D # <CJK> +0x695E # <CJK> +0x6960 # <CJK> +0x6961 # <CJK> +0x6962 # <CJK> +0x696A # <CJK> +0x696B # <CJK> +0x696D # <CJK> +0x696E # <CJK> +0x696F # <CJK> +0x6973 # <CJK> +0x6974 # <CJK> +0x6975 # <CJK> +0x6977 # <CJK> +0x6978 # <CJK> +0x6979 # <CJK> +0x697C # <CJK> +0x697D # <CJK> +0x697E # <CJK> +0x6981 # <CJK> +0x6982 # <CJK> +0x698A # <CJK> +0x698E # <CJK> +0x6991 # <CJK> +0x6994 # <CJK> +0x6995 # <CJK> +0x699B # <CJK> +0x699C # <CJK> +0x69A0 # <CJK> +0x69A7 # <CJK> +0x69AE # <CJK> +0x69B1 # <CJK> +0x69B2 # <CJK> +0x69B4 # <CJK> +0x69BB # <CJK> +0x69BE # <CJK> +0x69BF # <CJK> +0x69C1 # <CJK> +0x69C3 # <CJK> +0x69C7 # <CJK> +0x69CA # <CJK> +0x69CB # <CJK> +0x69CC # <CJK> +0x69CD # <CJK> +0x69CE # <CJK> +0x69D0 # <CJK> +0x69D3 # <CJK> +0x69D8 # <CJK> +0x69D9 # <CJK> +0x69DD # <CJK> +0x69DE # <CJK> +0x69E7 # <CJK> +0x69E8 # <CJK> +0x69EB # <CJK> +0x69ED # <CJK> +0x69F2 # <CJK> +0x69F9 # <CJK> +0x69FB # <CJK> +0x69FD # <CJK> +0x69FF # <CJK> +0x6A02 # <CJK> +0x6A05 # <CJK> +0x6A0A # <CJK> +0x6A0B # <CJK> +0x6A0C # <CJK> +0x6A12 # <CJK> +0x6A13 # <CJK> +0x6A14 # <CJK> +0x6A17 # <CJK> +0x6A19 # <CJK> +0x6A1B # <CJK> +0x6A1E # <CJK> +0x6A1F # <CJK> +0x6A21 # <CJK> +0x6A22 # <CJK> +0x6A23 # <CJK> +0x6A29 # <CJK> +0x6A2A # <CJK> +0x6A2B # <CJK> +0x6A2E # <CJK> +0x6A35 # <CJK> +0x6A36 # <CJK> +0x6A38 # <CJK> +0x6A39 # <CJK> +0x6A3A # <CJK> +0x6A3D # <CJK> +0x6A44 # <CJK> +0x6A47 # <CJK> +0x6A48 # <CJK> +0x6A4B # <CJK> +0x6A58 # <CJK> +0x6A59 # <CJK> +0x6A5F # <CJK> +0x6A61 # <CJK> +0x6A62 # <CJK> +0x6A66 # <CJK> +0x6A72 # <CJK> +0x6A78 # <CJK> +0x6A7F # <CJK> +0x6A80 # <CJK> +0x6A84 # <CJK> +0x6A8D # <CJK> +0x6A8E # <CJK> +0x6A90 # <CJK> +0x6A97 # <CJK> +0x6A9C # <CJK> +0x6AA0 # <CJK> +0x6AA2 # <CJK> +0x6AA3 # <CJK> +0x6AAA # <CJK> +0x6AAC # <CJK> +0x6AAE # <CJK> +0x6AB3 # <CJK> +0x6AB8 # <CJK> +0x6ABB # <CJK> +0x6AC1 # <CJK> +0x6AC2 # <CJK> +0x6AC3 # <CJK> +0x6AD1 # <CJK> +0x6AD3 # <CJK> +0x6ADA # <CJK> +0x6ADB # <CJK> +0x6ADE # <CJK> +0x6ADF # <CJK> +0x6AE8 # <CJK> +0x6AEA # <CJK> +0x6AFA # <CJK> +0x6AFB # <CJK> +0x6B04 # <CJK> +0x6B05 # <CJK> +0x6B0A # <CJK> +0x6B12 # <CJK> +0x6B16 # <CJK> +0x6B1D # <CJK> +0x6B1F # <CJK> +0x6B20 # <CJK> +0x6B21 # <CJK> +0x6B23 # <CJK> +0x6B27 # <CJK> +0x6B32 # <CJK> +0x6B37 # <CJK> +0x6B38 # <CJK> +0x6B39 # <CJK> +0x6B3A # <CJK> +0x6B3D # <CJK> +0x6B3E # <CJK> +0x6B43 # <CJK> +0x6B47 # <CJK> +0x6B49 # <CJK> +0x6B4C # <CJK> +0x6B4E # <CJK> +0x6B50 # <CJK> +0x6B53 # <CJK> +0x6B54 # <CJK> +0x6B59 # <CJK> +0x6B5B # <CJK> +0x6B5F # <CJK> +0x6B61 # <CJK> +0x6B62 # <CJK> +0x6B63 # <CJK> +0x6B64 # <CJK> +0x6B66 # <CJK> +0x6B69 # <CJK> +0x6B6A # <CJK> +0x6B6F # <CJK> +0x6B73 # <CJK> +0x6B74 # <CJK> +0x6B78 # <CJK> +0x6B79 # <CJK> +0x6B7B # <CJK> +0x6B7F # <CJK> +0x6B80 # <CJK> +0x6B83 # <CJK> +0x6B84 # <CJK> +0x6B86 # <CJK> +0x6B89 # <CJK> +0x6B8A # <CJK> +0x6B8B # <CJK> +0x6B8D # <CJK> +0x6B95 # <CJK> +0x6B96 # <CJK> +0x6B98 # <CJK> +0x6B9E # <CJK> +0x6BA4 # <CJK> +0x6BAA # <CJK> +0x6BAB # <CJK> +0x6BAF # <CJK> +0x6BB1 # <CJK> +0x6BB2 # <CJK> +0x6BB3 # <CJK> +0x6BB4 # <CJK> +0x6BB5 # <CJK> +0x6BB7 # <CJK> +0x6BBA # <CJK> +0x6BBB # <CJK> +0x6BBC # <CJK> +0x6BBF # <CJK> +0x6BC0 # <CJK> +0x6BC5 # <CJK> +0x6BC6 # <CJK> +0x6BCB # <CJK> +0x6BCD # <CJK> +0x6BCE # <CJK> +0x6BD2 # <CJK> +0x6BD3 # <CJK> +0x6BD4 # <CJK> +0x6BD8 # <CJK> +0x6BDB # <CJK> +0x6BDF # <CJK> +0x6BEB # <CJK> +0x6BEC # <CJK> +0x6BEF # <CJK> +0x6BF3 # <CJK> +0x6C08 # <CJK> +0x6C0F # <CJK> +0x6C11 # <CJK> +0x6C13 # <CJK> +0x6C14 # <CJK> +0x6C17 # <CJK> +0x6C1B # <CJK> +0x6C23 # <CJK> +0x6C24 # <CJK> +0x6C34 # <CJK> +0x6C37 # <CJK> +0x6C38 # <CJK> +0x6C3E # <CJK> +0x6C40 # <CJK> +0x6C41 # <CJK> +0x6C42 # <CJK> +0x6C4E # <CJK> +0x6C50 # <CJK> +0x6C55 # <CJK> +0x6C57 # <CJK> +0x6C5A # <CJK> +0x6C5D # <CJK> +0x6C5E # <CJK> +0x6C5F # <CJK> +0x6C60 # <CJK> +0x6C62 # <CJK> +0x6C68 # <CJK> +0x6C6A # <CJK> +0x6C70 # <CJK> +0x6C72 # <CJK> +0x6C73 # <CJK> +0x6C7A # <CJK> +0x6C7D # <CJK> +0x6C7E # <CJK> +0x6C81 # <CJK> +0x6C82 # <CJK> +0x6C83 # <CJK> +0x6C88 # <CJK> +0x6C8C # <CJK> +0x6C8D # <CJK> +0x6C90 # <CJK> +0x6C92 # <CJK> +0x6C93 # <CJK> +0x6C96 # <CJK> +0x6C99 # <CJK> +0x6C9A # <CJK> +0x6C9B # <CJK> +0x6CA1 # <CJK> +0x6CA2 # <CJK> +0x6CAB # <CJK> +0x6CAE # <CJK> +0x6CB1 # <CJK> +0x6CB3 # <CJK> +0x6CB8 # <CJK> +0x6CB9 # <CJK> +0x6CBA # <CJK> +0x6CBB # <CJK> +0x6CBC # <CJK> +0x6CBD # <CJK> +0x6CBE # <CJK> +0x6CBF # <CJK> +0x6CC1 # <CJK> +0x6CC4 # <CJK> +0x6CC5 # <CJK> +0x6CC9 # <CJK> +0x6CCA # <CJK> +0x6CCC # <CJK> +0x6CD3 # <CJK> +0x6CD5 # <CJK> +0x6CD7 # <CJK> +0x6CD9 # <CJK> +0x6CDB # <CJK> +0x6CDD # <CJK> +0x6CE1 # <CJK> +0x6CE2 # <CJK> +0x6CE3 # <CJK> +0x6CE5 # <CJK> +0x6CE8 # <CJK> +0x6CEA # <CJK> +0x6CEF # <CJK> +0x6CF0 # <CJK> +0x6CF1 # <CJK> +0x6CF3 # <CJK> +0x6D0B # <CJK> +0x6D0C # <CJK> +0x6D12 # <CJK> +0x6D17 # <CJK> +0x6D19 # <CJK> +0x6D1B # <CJK> +0x6D1E # <CJK> +0x6D1F # <CJK> +0x6D25 # <CJK> +0x6D29 # <CJK> +0x6D2A # <CJK> +0x6D2B # <CJK> +0x6D32 # <CJK> +0x6D33 # <CJK> +0x6D35 # <CJK> +0x6D36 # <CJK> +0x6D38 # <CJK> +0x6D3B # <CJK> +0x6D3D # <CJK> +0x6D3E # <CJK> +0x6D41 # <CJK> +0x6D44 # <CJK> +0x6D45 # <CJK> +0x6D59 # <CJK> +0x6D5A # <CJK> +0x6D5C # <CJK> +0x6D63 # <CJK> +0x6D64 # <CJK> +0x6D66 # <CJK> +0x6D69 # <CJK> +0x6D6A # <CJK> +0x6D6C # <CJK> +0x6D6E # <CJK> +0x6D74 # <CJK> +0x6D77 # <CJK> +0x6D78 # <CJK> +0x6D79 # <CJK> +0x6D85 # <CJK> +0x6D88 # <CJK> +0x6D8C # <CJK> +0x6D8E # <CJK> +0x6D93 # <CJK> +0x6D95 # <CJK> +0x6D99 # <CJK> +0x6D9B # <CJK> +0x6D9C # <CJK> +0x6DAF # <CJK> +0x6DB2 # <CJK> +0x6DB5 # <CJK> +0x6DB8 # <CJK> +0x6DBC # <CJK> +0x6DC0 # <CJK> +0x6DC5 # <CJK> +0x6DC6 # <CJK> +0x6DC7 # <CJK> +0x6DCB # <CJK> +0x6DCC # <CJK> +0x6DD1 # <CJK> +0x6DD2 # <CJK> +0x6DD5 # <CJK> +0x6DD8 # <CJK> +0x6DD9 # <CJK> +0x6DDE # <CJK> +0x6DE1 # <CJK> +0x6DE4 # <CJK> +0x6DE6 # <CJK> +0x6DE8 # <CJK> +0x6DEA # <CJK> +0x6DEB # <CJK> +0x6DEC # <CJK> +0x6DEE # <CJK> +0x6DF1 # <CJK> +0x6DF3 # <CJK> +0x6DF5 # <CJK> +0x6DF7 # <CJK> +0x6DF9 # <CJK> +0x6DFA # <CJK> +0x6DFB # <CJK> +0x6E05 # <CJK> +0x6E07 # <CJK> +0x6E08 # <CJK> +0x6E09 # <CJK> +0x6E0A # <CJK> +0x6E0B # <CJK> +0x6E13 # <CJK> +0x6E15 # <CJK> +0x6E19 # <CJK> +0x6E1A # <CJK> +0x6E1B # <CJK> +0x6E1D # <CJK> +0x6E1F # <CJK> +0x6E20 # <CJK> +0x6E21 # <CJK> +0x6E23 # <CJK> +0x6E24 # <CJK> +0x6E25 # <CJK> +0x6E26 # <CJK> +0x6E29 # <CJK> +0x6E2B # <CJK> +0x6E2C # <CJK> +0x6E2D # <CJK> +0x6E2E # <CJK> +0x6E2F # <CJK> +0x6E38 # <CJK> +0x6E3A # <CJK> +0x6E3E # <CJK> +0x6E43 # <CJK> +0x6E4A # <CJK> +0x6E4D # <CJK> +0x6E4E # <CJK> +0x6E56 # <CJK> +0x6E58 # <CJK> +0x6E5B # <CJK> +0x6E5F # <CJK> +0x6E67 # <CJK> +0x6E6B # <CJK> +0x6E6E # <CJK> +0x6E6F # <CJK> +0x6E72 # <CJK> +0x6E76 # <CJK> +0x6E7E # <CJK> +0x6E7F # <CJK> +0x6E80 # <CJK> +0x6E82 # <CJK> +0x6E8C # <CJK> +0x6E8F # <CJK> +0x6E90 # <CJK> +0x6E96 # <CJK> +0x6E98 # <CJK> +0x6E9C # <CJK> +0x6E9D # <CJK> +0x6E9F # <CJK> +0x6EA2 # <CJK> +0x6EA5 # <CJK> +0x6EAA # <CJK> +0x6EAF # <CJK> +0x6EB2 # <CJK> +0x6EB6 # <CJK> +0x6EB7 # <CJK> +0x6EBA # <CJK> +0x6EBD # <CJK> +0x6EC2 # <CJK> +0x6EC4 # <CJK> +0x6EC5 # <CJK> +0x6EC9 # <CJK> +0x6ECB # <CJK> +0x6ECC # <CJK> +0x6ED1 # <CJK> +0x6ED3 # <CJK> +0x6ED4 # <CJK> +0x6ED5 # <CJK> +0x6EDD # <CJK> +0x6EDE # <CJK> +0x6EEC # <CJK> +0x6EEF # <CJK> +0x6EF2 # <CJK> +0x6EF4 # <CJK> +0x6EF7 # <CJK> +0x6EF8 # <CJK> +0x6EFE # <CJK> +0x6EFF # <CJK> +0x6F01 # <CJK> +0x6F02 # <CJK> +0x6F06 # <CJK> +0x6F09 # <CJK> +0x6F0F # <CJK> +0x6F11 # <CJK> +0x6F13 # <CJK> +0x6F14 # <CJK> +0x6F15 # <CJK> +0x6F20 # <CJK> +0x6F22 # <CJK> +0x6F23 # <CJK> +0x6F2B # <CJK> +0x6F2C # <CJK> +0x6F31 # <CJK> +0x6F32 # <CJK> +0x6F38 # <CJK> +0x6F3E # <CJK> +0x6F3F # <CJK> +0x6F41 # <CJK> +0x6F45 # <CJK> +0x6F54 # <CJK> +0x6F58 # <CJK> +0x6F5B # <CJK> +0x6F5C # <CJK> +0x6F5F # <CJK> +0x6F64 # <CJK> +0x6F66 # <CJK> +0x6F6D # <CJK> +0x6F6E # <CJK> +0x6F6F # <CJK> +0x6F70 # <CJK> +0x6F74 # <CJK> +0x6F78 # <CJK> +0x6F7A # <CJK> +0x6F7C # <CJK> +0x6F80 # <CJK> +0x6F81 # <CJK> +0x6F82 # <CJK> +0x6F84 # <CJK> +0x6F86 # <CJK> +0x6F8E # <CJK> +0x6F91 # <CJK> +0x6F97 # <CJK> +0x6FA1 # <CJK> +0x6FA3 # <CJK> +0x6FA4 # <CJK> +0x6FAA # <CJK> +0x6FB1 # <CJK> +0x6FB3 # <CJK> +0x6FB9 # <CJK> +0x6FC0 # <CJK> +0x6FC1 # <CJK> +0x6FC2 # <CJK> +0x6FC3 # <CJK> +0x6FC6 # <CJK> +0x6FD4 # <CJK> +0x6FD5 # <CJK> +0x6FD8 # <CJK> +0x6FDB # <CJK> +0x6FDF # <CJK> +0x6FE0 # <CJK> +0x6FE1 # <CJK> +0x6FE4 # <CJK> +0x6FEB # <CJK> +0x6FEC # <CJK> +0x6FEE # <CJK> +0x6FEF # <CJK> +0x6FF1 # <CJK> +0x6FF3 # <CJK> +0x6FF6 # <CJK> +0x6FFA # <CJK> +0x6FFE # <CJK> +0x7001 # <CJK> +0x7009 # <CJK> +0x700B # <CJK> +0x700F # <CJK> +0x7011 # <CJK> +0x7015 # <CJK> +0x7018 # <CJK> +0x701A # <CJK> +0x701B # <CJK> +0x701D # <CJK> +0x701E # <CJK> +0x701F # <CJK> +0x7026 # <CJK> +0x7027 # <CJK> +0x702C # <CJK> +0x7030 # <CJK> +0x7032 # <CJK> +0x703E # <CJK> +0x704C # <CJK> +0x7051 # <CJK> +0x7058 # <CJK> +0x7063 # <CJK> +0x706B # <CJK> +0x706F # <CJK> +0x7070 # <CJK> +0x7078 # <CJK> +0x707C # <CJK> +0x707D # <CJK> +0x7089 # <CJK> +0x708A # <CJK> +0x708E # <CJK> +0x7092 # <CJK> +0x7099 # <CJK> +0x70AC # <CJK> +0x70AD # <CJK> +0x70AE # <CJK> +0x70AF # <CJK> +0x70B3 # <CJK> +0x70B8 # <CJK> +0x70B9 # <CJK> +0x70BA # <CJK> +0x70C8 # <CJK> +0x70CB # <CJK> +0x70CF # <CJK> +0x70D9 # <CJK> +0x70DD # <CJK> +0x70DF # <CJK> +0x70F1 # <CJK> +0x70F9 # <CJK> +0x70FD # <CJK> +0x7109 # <CJK> +0x7114 # <CJK> +0x7119 # <CJK> +0x711A # <CJK> +0x711C # <CJK> +0x7121 # <CJK> +0x7126 # <CJK> +0x7136 # <CJK> +0x713C # <CJK> +0x7149 # <CJK> +0x714C # <CJK> +0x714E # <CJK> +0x7155 # <CJK> +0x7156 # <CJK> +0x7159 # <CJK> +0x7162 # <CJK> +0x7164 # <CJK> +0x7165 # <CJK> +0x7166 # <CJK> +0x7167 # <CJK> +0x7169 # <CJK> +0x716C # <CJK> +0x716E # <CJK> +0x717D # <CJK> +0x7184 # <CJK> +0x7188 # <CJK> +0x718A # <CJK> +0x718F # <CJK> +0x7194 # <CJK> +0x7195 # <CJK> +#0x7199 # <CJK> # not in kochi fonts +0x719F # <CJK> +0x71A8 # <CJK> +0x71AC # <CJK> +0x71B1 # <CJK> +0x71B9 # <CJK> +0x71BE # <CJK> +0x71C3 # <CJK> +0x71C8 # <CJK> +0x71C9 # <CJK> +0x71CE # <CJK> +0x71D0 # <CJK> +0x71D2 # <CJK> +0x71D4 # <CJK> +0x71D5 # <CJK> +0x71D7 # <CJK> +0x71DF # <CJK> +0x71E0 # <CJK> +0x71E5 # <CJK> +0x71E6 # <CJK> +0x71E7 # <CJK> +0x71EC # <CJK> +0x71ED # <CJK> +0x71EE # <CJK> +0x71F5 # <CJK> +0x71F9 # <CJK> +0x71FB # <CJK> +0x71FC # <CJK> +0x71FF # <CJK> +0x7206 # <CJK> +0x720D # <CJK> +0x7210 # <CJK> +0x721B # <CJK> +0x7228 # <CJK> +0x722A # <CJK> +0x722C # <CJK> +0x722D # <CJK> +0x7230 # <CJK> +0x7232 # <CJK> +0x7235 # <CJK> +0x7236 # <CJK> +0x723A # <CJK> +0x723B # <CJK> +0x723C # <CJK> +0x723D # <CJK> +0x723E # <CJK> +0x723F # <CJK> +0x7240 # <CJK> +0x7246 # <CJK> +0x7247 # <CJK> +0x7248 # <CJK> +0x724B # <CJK> +0x724C # <CJK> +0x7252 # <CJK> +0x7258 # <CJK> +0x7259 # <CJK> +0x725B # <CJK> +0x725D # <CJK> +0x725F # <CJK> +0x7261 # <CJK> +0x7262 # <CJK> +0x7267 # <CJK> +0x7269 # <CJK> +0x7272 # <CJK> +0x7274 # <CJK> +0x7279 # <CJK> +0x727D # <CJK> +0x727E # <CJK> +0x7280 # <CJK> +0x7281 # <CJK> +0x7282 # <CJK> +0x7287 # <CJK> +0x7292 # <CJK> +0x7296 # <CJK> +0x72A0 # <CJK> +0x72A2 # <CJK> +0x72A7 # <CJK> +0x72AC # <CJK> +0x72AF # <CJK> +0x72B2 # <CJK> +0x72B6 # <CJK> +0x72B9 # <CJK> +0x72C2 # <CJK> +0x72C3 # <CJK> +0x72C4 # <CJK> +0x72C6 # <CJK> +0x72CE # <CJK> +0x72D0 # <CJK> +0x72D2 # <CJK> +0x72D7 # <CJK> +0x72D9 # <CJK> +0x72DB # <CJK> +0x72E0 # <CJK> +0x72E1 # <CJK> +0x72E2 # <CJK> +0x72E9 # <CJK> +0x72EC # <CJK> +0x72ED # <CJK> +0x72F7 # <CJK> +0x72F8 # <CJK> +0x72F9 # <CJK> +0x72FC # <CJK> +0x72FD # <CJK> +0x730A # <CJK> +0x7316 # <CJK> +0x7317 # <CJK> +0x731B # <CJK> +0x731C # <CJK> +0x731D # <CJK> +0x731F # <CJK> +0x7325 # <CJK> +0x7329 # <CJK> +0x732A # <CJK> +0x732B # <CJK> +0x732E # <CJK> +0x732F # <CJK> +0x7334 # <CJK> +0x7336 # <CJK> +0x7337 # <CJK> +0x733E # <CJK> +0x733F # <CJK> +0x7344 # <CJK> +0x7345 # <CJK> +0x734E # <CJK> +0x734F # <CJK> +0x7357 # <CJK> +0x7363 # <CJK> +0x7368 # <CJK> +0x736A # <CJK> +0x7370 # <CJK> +0x7372 # <CJK> +0x7375 # <CJK> +0x7378 # <CJK> +0x737A # <CJK> +0x737B # <CJK> +0x7384 # <CJK> +0x7387 # <CJK> +0x7389 # <CJK> +0x738B # <CJK> +0x7396 # <CJK> +0x73A9 # <CJK> +0x73B2 # <CJK> +0x73B3 # <CJK> +0x73BB # <CJK> +0x73C0 # <CJK> +0x73C2 # <CJK> +0x73C8 # <CJK> +0x73CA # <CJK> +0x73CD # <CJK> +0x73CE # <CJK> +0x73DE # <CJK> +0x73E0 # <CJK> +0x73E5 # <CJK> +0x73EA # <CJK> +0x73ED # <CJK> +0x73EE # <CJK> +0x73F1 # <CJK> +0x73F8 # <CJK> +0x73FE # <CJK> +0x7403 # <CJK> +0x7405 # <CJK> +0x7406 # <CJK> +0x7409 # <CJK> +0x7422 # <CJK> +0x7425 # <CJK> +0x7432 # <CJK> +0x7433 # <CJK> +0x7434 # <CJK> +0x7435 # <CJK> +0x7436 # <CJK> +0x743A # <CJK> +0x743F # <CJK> +0x7441 # <CJK> +0x7455 # <CJK> +0x7459 # <CJK> +0x745A # <CJK> +0x745B # <CJK> +0x745C # <CJK> +0x745E # <CJK> +0x745F # <CJK> +0x7460 # <CJK> +0x7463 # <CJK> +0x7464 # <CJK> +0x7469 # <CJK> +0x746A # <CJK> +0x746F # <CJK> +0x7470 # <CJK> +0x7473 # <CJK> +0x7476 # <CJK> +0x747E # <CJK> +0x7483 # <CJK> +0x748B # <CJK> +0x749E # <CJK> +0x74A2 # <CJK> +0x74A7 # <CJK> +0x74B0 # <CJK> +0x74BD # <CJK> +0x74CA # <CJK> +0x74CF # <CJK> +0x74D4 # <CJK> +0x74DC # <CJK> +0x74E0 # <CJK> +0x74E2 # <CJK> +0x74E3 # <CJK> +0x74E6 # <CJK> +0x74E7 # <CJK> +0x74E9 # <CJK> +0x74EE # <CJK> +0x74F0 # <CJK> +0x74F1 # <CJK> +0x74F2 # <CJK> +0x74F6 # <CJK> +0x74F7 # <CJK> +0x74F8 # <CJK> +0x7503 # <CJK> +0x7504 # <CJK> +0x7505 # <CJK> +0x750C # <CJK> +0x750D # <CJK> +0x750E # <CJK> +0x7511 # <CJK> +0x7513 # <CJK> +0x7515 # <CJK> +0x7518 # <CJK> +0x751A # <CJK> +0x751C # <CJK> +0x751E # <CJK> +0x751F # <CJK> +0x7523 # <CJK> +0x7525 # <CJK> +0x7526 # <CJK> +0x7528 # <CJK> +0x752B # <CJK> +0x752C # <CJK> +0x7530 # <CJK> +0x7531 # <CJK> +0x7532 # <CJK> +0x7533 # <CJK> +0x7537 # <CJK> +0x7538 # <CJK> +0x753A # <CJK> +0x753B # <CJK> +0x753C # <CJK> +0x7544 # <CJK> +0x7546 # <CJK> +0x7549 # <CJK> +0x754A # <CJK> +0x754B # <CJK> +0x754C # <CJK> +0x754D # <CJK> +0x754F # <CJK> +0x7551 # <CJK> +0x7554 # <CJK> +0x7559 # <CJK> +0x755A # <CJK> +0x755B # <CJK> +0x755C # <CJK> +0x755D # <CJK> +0x7560 # <CJK> +0x7562 # <CJK> +0x7564 # <CJK> +0x7565 # <CJK> +0x7566 # <CJK> +0x7567 # <CJK> +0x7569 # <CJK> +0x756A # <CJK> +0x756B # <CJK> +0x756D # <CJK> +0x7570 # <CJK> +0x7573 # <CJK> +0x7574 # <CJK> +0x7576 # <CJK> +0x7577 # <CJK> +0x7578 # <CJK> +0x757F # <CJK> +0x7582 # <CJK> +0x7586 # <CJK> +0x7587 # <CJK> +0x7589 # <CJK> +0x758A # <CJK> +0x758B # <CJK> +0x758E # <CJK> +0x758F # <CJK> +0x7591 # <CJK> +0x7594 # <CJK> +0x759A # <CJK> +0x759D # <CJK> +0x75A3 # <CJK> +0x75A5 # <CJK> +0x75AB # <CJK> +0x75B1 # <CJK> +0x75B2 # <CJK> +0x75B3 # <CJK> +0x75B5 # <CJK> +0x75B8 # <CJK> +0x75B9 # <CJK> +0x75BC # <CJK> +0x75BD # <CJK> +0x75BE # <CJK> +0x75C2 # <CJK> +0x75C3 # <CJK> +0x75C5 # <CJK> +0x75C7 # <CJK> +0x75CA # <CJK> +0x75CD # <CJK> +0x75D2 # <CJK> +0x75D4 # <CJK> +0x75D5 # <CJK> +0x75D8 # <CJK> +0x75D9 # <CJK> +0x75DB # <CJK> +0x75DE # <CJK> +0x75E2 # <CJK> +0x75E3 # <CJK> +0x75E9 # <CJK> +0x75F0 # <CJK> +0x75F2 # <CJK> +0x75F3 # <CJK> +0x75F4 # <CJK> +0x75FA # <CJK> +0x75FC # <CJK> +0x75FE # <CJK> +0x75FF # <CJK> +0x7601 # <CJK> +0x7609 # <CJK> +0x760B # <CJK> +0x760D # <CJK> +0x761F # <CJK> +0x7620 # <CJK> +0x7621 # <CJK> +0x7622 # <CJK> +0x7624 # <CJK> +0x7627 # <CJK> +0x7630 # <CJK> +0x7634 # <CJK> +0x763B # <CJK> +0x7642 # <CJK> +0x7646 # <CJK> +0x7647 # <CJK> +0x7648 # <CJK> +0x764C # <CJK> +0x7652 # <CJK> +0x7656 # <CJK> +0x7658 # <CJK> +0x765C # <CJK> +0x7661 # <CJK> +0x7662 # <CJK> +0x7667 # <CJK> +0x7668 # <CJK> +0x7669 # <CJK> +0x766A # <CJK> +0x766C # <CJK> +0x7670 # <CJK> +0x7672 # <CJK> +0x7676 # <CJK> +0x7678 # <CJK> +0x767A # <CJK> +0x767B # <CJK> +0x767C # <CJK> +0x767D # <CJK> +0x767E # <CJK> +0x7680 # <CJK> +0x7683 # <CJK> +0x7684 # <CJK> +0x7686 # <CJK> +0x7687 # <CJK> +0x7688 # <CJK> +0x768B # <CJK> +0x768E # <CJK> +0x7690 # <CJK> +0x7693 # <CJK> +0x7696 # <CJK> +0x7699 # <CJK> +0x769A # <CJK> +0x76AE # <CJK> +0x76B0 # <CJK> +0x76B4 # <CJK> +0x76B7 # <CJK> +0x76B8 # <CJK> +0x76B9 # <CJK> +0x76BA # <CJK> +0x76BF # <CJK> +0x76C2 # <CJK> +0x76C3 # <CJK> +0x76C6 # <CJK> +0x76C8 # <CJK> +0x76CA # <CJK> +0x76CD # <CJK> +0x76D2 # <CJK> +0x76D6 # <CJK> +0x76D7 # <CJK> +0x76DB # <CJK> +0x76DC # <CJK> +0x76DE # <CJK> +0x76DF # <CJK> +0x76E1 # <CJK> +0x76E3 # <CJK> +0x76E4 # <CJK> +0x76E5 # <CJK> +0x76E7 # <CJK> +0x76EA # <CJK> +0x76EE # <CJK> +0x76F2 # <CJK> +0x76F4 # <CJK> +0x76F8 # <CJK> +0x76FB # <CJK> +0x76FE # <CJK> +0x7701 # <CJK> +0x7704 # <CJK> +0x7707 # <CJK> +0x7708 # <CJK> +0x7709 # <CJK> +0x770B # <CJK> +0x770C # <CJK> +0x771B # <CJK> +0x771E # <CJK> +0x771F # <CJK> +0x7720 # <CJK> +0x7724 # <CJK> +0x7725 # <CJK> +0x7726 # <CJK> +0x7729 # <CJK> +0x7737 # <CJK> +0x7738 # <CJK> +0x773A # <CJK> +0x773C # <CJK> +0x7740 # <CJK> +0x7747 # <CJK> +0x775A # <CJK> +0x775B # <CJK> +0x7761 # <CJK> +0x7763 # <CJK> +0x7765 # <CJK> +0x7766 # <CJK> +0x7768 # <CJK> +0x776B # <CJK> +0x7779 # <CJK> +0x777E # <CJK> +0x777F # <CJK> +0x778B # <CJK> +0x778E # <CJK> +0x7791 # <CJK> +0x779E # <CJK> +0x77A0 # <CJK> +0x77A5 # <CJK> +0x77AC # <CJK> +0x77AD # <CJK> +0x77B0 # <CJK> +0x77B3 # <CJK> +0x77B6 # <CJK> +0x77B9 # <CJK> +0x77BB # <CJK> +0x77BC # <CJK> +0x77BD # <CJK> +0x77BF # <CJK> +0x77C7 # <CJK> +0x77CD # <CJK> +0x77D7 # <CJK> +0x77DA # <CJK> +0x77DB # <CJK> +0x77DC # <CJK> +0x77E2 # <CJK> +0x77E3 # <CJK> +0x77E5 # <CJK> +0x77E7 # <CJK> +0x77E9 # <CJK> +0x77ED # <CJK> +0x77EE # <CJK> +0x77EF # <CJK> +0x77F3 # <CJK> +0x77FC # <CJK> +0x7802 # <CJK> +0x780C # <CJK> +0x7812 # <CJK> +0x7814 # <CJK> +0x7815 # <CJK> +0x7820 # <CJK> +0x7825 # <CJK> +0x7826 # <CJK> +0x7827 # <CJK> +0x7832 # <CJK> +0x7834 # <CJK> +0x783A # <CJK> +0x783F # <CJK> +0x7845 # <CJK> +0x785D # <CJK> +0x786B # <CJK> +0x786C # <CJK> +0x786F # <CJK> +0x7872 # <CJK> +0x7874 # <CJK> +0x787C # <CJK> +0x7881 # <CJK> +0x7886 # <CJK> +0x7887 # <CJK> +0x788C # <CJK> +0x788D # <CJK> +0x788E # <CJK> +0x7891 # <CJK> +0x7893 # <CJK> +0x7895 # <CJK> +0x7897 # <CJK> +0x789A # <CJK> +0x78A3 # <CJK> +0x78A7 # <CJK> +0x78A9 # <CJK> +0x78AA # <CJK> +0x78AF # <CJK> +0x78B5 # <CJK> +0x78BA # <CJK> +0x78BC # <CJK> +0x78BE # <CJK> +0x78C1 # <CJK> +0x78C5 # <CJK> +0x78C6 # <CJK> +0x78CA # <CJK> +0x78CB # <CJK> +0x78D0 # <CJK> +0x78D1 # <CJK> +0x78D4 # <CJK> +0x78DA # <CJK> +0x78E7 # <CJK> +0x78E8 # <CJK> +0x78EC # <CJK> +0x78EF # <CJK> +0x78F4 # <CJK> +0x78FD # <CJK> +0x7901 # <CJK> +0x7907 # <CJK> +0x790E # <CJK> +0x7911 # <CJK> +0x7912 # <CJK> +0x7919 # <CJK> +0x7926 # <CJK> +0x792A # <CJK> +0x792B # <CJK> +0x792C # <CJK> +0x793A # <CJK> +0x793C # <CJK> +0x793E # <CJK> +0x7940 # <CJK> +0x7941 # <CJK> +0x7947 # <CJK> +0x7948 # <CJK> +0x7949 # <CJK> +0x7950 # <CJK> +0x7953 # <CJK> +0x7955 # <CJK> +0x7956 # <CJK> +0x7957 # <CJK> +0x795A # <CJK> +0x795D # <CJK> +0x795E # <CJK> +0x795F # <CJK> +0x7960 # <CJK> +0x7962 # <CJK> +0x7965 # <CJK> +0x7968 # <CJK> +0x796D # <CJK> +0x7977 # <CJK> +0x797A # <CJK> +0x797F # <CJK> +0x7980 # <CJK> +0x7981 # <CJK> +0x7984 # <CJK> +0x7985 # <CJK> +0x798A # <CJK> +0x798D # <CJK> +0x798E # <CJK> +0x798F # <CJK> +0x799D # <CJK> +0x79A6 # <CJK> +0x79A7 # <CJK> +0x79AA # <CJK> +0x79AE # <CJK> +0x79B0 # <CJK> +0x79B3 # <CJK> +0x79B9 # <CJK> +0x79BA # <CJK> +0x79BD # <CJK> +0x79BE # <CJK> +0x79BF # <CJK> +0x79C0 # <CJK> +0x79C1 # <CJK> +0x79C9 # <CJK> +0x79CB # <CJK> +0x79D1 # <CJK> +0x79D2 # <CJK> +0x79D5 # <CJK> +0x79D8 # <CJK> +0x79DF # <CJK> +0x79E1 # <CJK> +0x79E3 # <CJK> +0x79E4 # <CJK> +0x79E6 # <CJK> +0x79E7 # <CJK> +0x79E9 # <CJK> +0x79EC # <CJK> +0x79F0 # <CJK> +0x79FB # <CJK> +0x7A00 # <CJK> +0x7A08 # <CJK> +0x7A0B # <CJK> +0x7A0D # <CJK> +0x7A0E # <CJK> +0x7A14 # <CJK> +0x7A17 # <CJK> +0x7A18 # <CJK> +0x7A19 # <CJK> +0x7A1A # <CJK> +0x7A1C # <CJK> +0x7A1F # <CJK> +0x7A20 # <CJK> +0x7A2E # <CJK> +0x7A31 # <CJK> +0x7A32 # <CJK> +0x7A37 # <CJK> +0x7A3B # <CJK> +0x7A3C # <CJK> +0x7A3D # <CJK> +0x7A3E # <CJK> +0x7A3F # <CJK> +0x7A40 # <CJK> +0x7A42 # <CJK> +0x7A43 # <CJK> +0x7A46 # <CJK> +0x7A49 # <CJK> +0x7A4D # <CJK> +0x7A4E # <CJK> +0x7A4F # <CJK> +0x7A50 # <CJK> +0x7A57 # <CJK> +0x7A61 # <CJK> +0x7A62 # <CJK> +0x7A63 # <CJK> +0x7A69 # <CJK> +0x7A6B # <CJK> +0x7A70 # <CJK> +0x7A74 # <CJK> +0x7A76 # <CJK> +0x7A79 # <CJK> +0x7A7A # <CJK> +0x7A7D # <CJK> +0x7A7F # <CJK> +0x7A81 # <CJK> +0x7A83 # <CJK> +0x7A84 # <CJK> +0x7A88 # <CJK> +0x7A92 # <CJK> +0x7A93 # <CJK> +0x7A95 # <CJK> +0x7A96 # <CJK> +0x7A97 # <CJK> +0x7A98 # <CJK> +0x7A9F # <CJK> +0x7AA9 # <CJK> +0x7AAA # <CJK> +0x7AAE # <CJK> +0x7AAF # <CJK> +0x7AB0 # <CJK> +0x7AB6 # <CJK> +0x7ABA # <CJK> +0x7ABF # <CJK> +0x7AC3 # <CJK> +0x7AC4 # <CJK> +0x7AC5 # <CJK> +0x7AC7 # <CJK> +0x7AC8 # <CJK> +0x7ACA # <CJK> +0x7ACB # <CJK> +0x7ACD # <CJK> +0x7ACF # <CJK> +0x7AD2 # <CJK> +0x7AD3 # <CJK> +0x7AD5 # <CJK> +0x7AD9 # <CJK> +0x7ADA # <CJK> +0x7ADC # <CJK> +0x7ADD # <CJK> +0x7ADF # <CJK> +0x7AE0 # <CJK> +0x7AE1 # <CJK> +0x7AE2 # <CJK> +0x7AE3 # <CJK> +0x7AE5 # <CJK> +0x7AE6 # <CJK> +0x7AEA # <CJK> +0x7AED # <CJK> +0x7AEF # <CJK> +0x7AF0 # <CJK> +0x7AF6 # <CJK> +0x7AF8 # <CJK> +0x7AF9 # <CJK> +0x7AFA # <CJK> +0x7AFF # <CJK> +0x7B02 # <CJK> +0x7B04 # <CJK> +0x7B06 # <CJK> +0x7B08 # <CJK> +0x7B0A # <CJK> +0x7B0B # <CJK> +0x7B0F # <CJK> +0x7B11 # <CJK> +0x7B18 # <CJK> +0x7B19 # <CJK> +0x7B1B # <CJK> +0x7B1E # <CJK> +0x7B20 # <CJK> +0x7B25 # <CJK> +0x7B26 # <CJK> +0x7B28 # <CJK> +0x7B2C # <CJK> +0x7B33 # <CJK> +0x7B35 # <CJK> +0x7B36 # <CJK> +0x7B39 # <CJK> +0x7B45 # <CJK> +0x7B46 # <CJK> +0x7B48 # <CJK> +0x7B49 # <CJK> +0x7B4B # <CJK> +0x7B4C # <CJK> +0x7B4D # <CJK> +0x7B4F # <CJK> +0x7B50 # <CJK> +0x7B51 # <CJK> +0x7B52 # <CJK> +0x7B54 # <CJK> +0x7B56 # <CJK> +0x7B5D # <CJK> +0x7B65 # <CJK> +0x7B67 # <CJK> +0x7B6C # <CJK> +0x7B6E # <CJK> +0x7B70 # <CJK> +0x7B71 # <CJK> +0x7B74 # <CJK> +0x7B75 # <CJK> +0x7B7A # <CJK> +0x7B86 # <CJK> +0x7B87 # <CJK> +0x7B8B # <CJK> +0x7B8D # <CJK> +0x7B8F # <CJK> +0x7B92 # <CJK> +0x7B94 # <CJK> +0x7B95 # <CJK> +0x7B97 # <CJK> +0x7B98 # <CJK> +0x7B99 # <CJK> +0x7B9A # <CJK> +0x7B9C # <CJK> +0x7B9D # <CJK> +0x7B9F # <CJK> +0x7BA1 # <CJK> +0x7BAA # <CJK> +0x7BAD # <CJK> +0x7BB1 # <CJK> +0x7BB4 # <CJK> +0x7BB8 # <CJK> +0x7BC0 # <CJK> +0x7BC1 # <CJK> +0x7BC4 # <CJK> +0x7BC6 # <CJK> +0x7BC7 # <CJK> +0x7BC9 # <CJK> +0x7BCB # <CJK> +0x7BCC # <CJK> +0x7BCF # <CJK> +0x7BDD # <CJK> +0x7BE0 # <CJK> +0x7BE4 # <CJK> +0x7BE5 # <CJK> +0x7BE6 # <CJK> +0x7BE9 # <CJK> +0x7BED # <CJK> +0x7BF3 # <CJK> +0x7BF6 # <CJK> +0x7BF7 # <CJK> +0x7C00 # <CJK> +0x7C07 # <CJK> +0x7C0D # <CJK> +0x7C11 # <CJK> +0x7C12 # <CJK> +0x7C13 # <CJK> +0x7C14 # <CJK> +0x7C17 # <CJK> +0x7C1F # <CJK> +0x7C21 # <CJK> +0x7C23 # <CJK> +0x7C27 # <CJK> +0x7C2A # <CJK> +0x7C2B # <CJK> +0x7C37 # <CJK> +0x7C38 # <CJK> +0x7C3D # <CJK> +0x7C3E # <CJK> +0x7C3F # <CJK> +0x7C40 # <CJK> +0x7C43 # <CJK> +0x7C4C # <CJK> +0x7C4D # <CJK> +0x7C4F # <CJK> +0x7C50 # <CJK> +0x7C54 # <CJK> +0x7C56 # <CJK> +0x7C58 # <CJK> +0x7C5F # <CJK> +0x7C60 # <CJK> +0x7C64 # <CJK> +0x7C65 # <CJK> +0x7C6C # <CJK> +0x7C73 # <CJK> +0x7C75 # <CJK> +0x7C7E # <CJK> +0x7C81 # <CJK> +0x7C82 # <CJK> +0x7C83 # <CJK> +0x7C89 # <CJK> +0x7C8B # <CJK> +0x7C8D # <CJK> +0x7C90 # <CJK> +0x7C92 # <CJK> +0x7C95 # <CJK> +0x7C97 # <CJK> +0x7C98 # <CJK> +0x7C9B # <CJK> +0x7C9F # <CJK> +0x7CA1 # <CJK> +0x7CA2 # <CJK> +0x7CA4 # <CJK> +0x7CA5 # <CJK> +0x7CA7 # <CJK> +0x7CA8 # <CJK> +0x7CAB # <CJK> +0x7CAD # <CJK> +0x7CAE # <CJK> +0x7CB1 # <CJK> +0x7CB2 # <CJK> +0x7CB3 # <CJK> +0x7CB9 # <CJK> +0x7CBD # <CJK> +0x7CBE # <CJK> +0x7CC0 # <CJK> +0x7CC2 # <CJK> +0x7CC5 # <CJK> +0x7CCA # <CJK> +0x7CCE # <CJK> +0x7CD2 # <CJK> +0x7CD6 # <CJK> +0x7CD8 # <CJK> +0x7CDC # <CJK> +0x7CDE # <CJK> +0x7CDF # <CJK> +0x7CE0 # <CJK> +0x7CE2 # <CJK> +0x7CE7 # <CJK> +0x7CEF # <CJK> +0x7CF2 # <CJK> +0x7CF4 # <CJK> +0x7CF6 # <CJK> +0x7CF8 # <CJK> +0x7CFA # <CJK> +0x7CFB # <CJK> +0x7CFE # <CJK> +0x7D00 # <CJK> +0x7D02 # <CJK> +0x7D04 # <CJK> +0x7D05 # <CJK> +0x7D06 # <CJK> +0x7D0A # <CJK> +0x7D0B # <CJK> +0x7D0D # <CJK> +0x7D10 # <CJK> +0x7D14 # <CJK> +0x7D15 # <CJK> +0x7D17 # <CJK> +0x7D18 # <CJK> +0x7D19 # <CJK> +0x7D1A # <CJK> +0x7D1B # <CJK> +0x7D1C # <CJK> +0x7D20 # <CJK> +0x7D21 # <CJK> +0x7D22 # <CJK> +0x7D2B # <CJK> +0x7D2C # <CJK> +0x7D2E # <CJK> +0x7D2F # <CJK> +0x7D30 # <CJK> +0x7D32 # <CJK> +0x7D33 # <CJK> +0x7D35 # <CJK> +0x7D39 # <CJK> +0x7D3A # <CJK> +0x7D3F # <CJK> +0x7D42 # <CJK> +0x7D43 # <CJK> +0x7D44 # <CJK> +0x7D45 # <CJK> +0x7D46 # <CJK> +0x7D4B # <CJK> +0x7D4C # <CJK> +0x7D4E # <CJK> +0x7D4F # <CJK> +0x7D50 # <CJK> +0x7D56 # <CJK> +0x7D5B # <CJK> +0x7D5E # <CJK> +0x7D61 # <CJK> +0x7D62 # <CJK> +0x7D63 # <CJK> +0x7D66 # <CJK> +0x7D68 # <CJK> +0x7D6E # <CJK> +0x7D71 # <CJK> +0x7D72 # <CJK> +0x7D73 # <CJK> +0x7D75 # <CJK> +0x7D76 # <CJK> +0x7D79 # <CJK> +0x7D7D # <CJK> +0x7D89 # <CJK> +0x7D8F # <CJK> +0x7D93 # <CJK> +0x7D99 # <CJK> +0x7D9A # <CJK> +0x7D9B # <CJK> +0x7D9C # <CJK> +0x7D9F # <CJK> +0x7DA2 # <CJK> +0x7DA3 # <CJK> +0x7DAB # <CJK> +0x7DAC # <CJK> +0x7DAD # <CJK> +0x7DAE # <CJK> +0x7DAF # <CJK> +0x7DB0 # <CJK> +0x7DB1 # <CJK> +0x7DB2 # <CJK> +0x7DB4 # <CJK> +0x7DB5 # <CJK> +0x7DB8 # <CJK> +0x7DBA # <CJK> +0x7DBB # <CJK> +0x7DBD # <CJK> +0x7DBE # <CJK> +0x7DBF # <CJK> +0x7DC7 # <CJK> +0x7DCA # <CJK> +0x7DCB # <CJK> +0x7DCF # <CJK> +0x7DD1 # <CJK> +0x7DD2 # <CJK> +0x7DD5 # <CJK> +0x7DD8 # <CJK> +0x7DDA # <CJK> +0x7DDC # <CJK> +0x7DDD # <CJK> +0x7DDE # <CJK> +0x7DE0 # <CJK> +0x7DE1 # <CJK> +0x7DE4 # <CJK> +0x7DE8 # <CJK> +0x7DE9 # <CJK> +0x7DEC # <CJK> +0x7DEF # <CJK> +0x7DF2 # <CJK> +0x7DF4 # <CJK> +0x7DFB # <CJK> +0x7E01 # <CJK> +0x7E04 # <CJK> +0x7E05 # <CJK> +0x7E09 # <CJK> +0x7E0A # <CJK> +0x7E0B # <CJK> +0x7E12 # <CJK> +0x7E1B # <CJK> +0x7E1E # <CJK> +0x7E1F # <CJK> +0x7E21 # <CJK> +0x7E22 # <CJK> +0x7E23 # <CJK> +0x7E26 # <CJK> +0x7E2B # <CJK> +0x7E2E # <CJK> +0x7E31 # <CJK> +0x7E32 # <CJK> +0x7E35 # <CJK> +0x7E37 # <CJK> +0x7E39 # <CJK> +0x7E3A # <CJK> +0x7E3B # <CJK> +0x7E3D # <CJK> +0x7E3E # <CJK> +0x7E41 # <CJK> +0x7E43 # <CJK> +0x7E46 # <CJK> +0x7E4A # <CJK> +0x7E4B # <CJK> +0x7E4D # <CJK> +0x7E54 # <CJK> +0x7E55 # <CJK> +0x7E56 # <CJK> +0x7E59 # <CJK> +0x7E5A # <CJK> +0x7E5D # <CJK> +0x7E5E # <CJK> +0x7E66 # <CJK> +0x7E67 # <CJK> +0x7E69 # <CJK> +0x7E6A # <CJK> +0x7E6D # <CJK> +0x7E70 # <CJK> +0x7E79 # <CJK> +0x7E7B # <CJK> +0x7E7C # <CJK> +0x7E7D # <CJK> +0x7E7F # <CJK> +0x7E82 # <CJK> +0x7E83 # <CJK> +0x7E88 # <CJK> +0x7E89 # <CJK> +0x7E8C # <CJK> +0x7E8E # <CJK> +0x7E8F # <CJK> +0x7E90 # <CJK> +0x7E92 # <CJK> +0x7E93 # <CJK> +0x7E94 # <CJK> +0x7E96 # <CJK> +0x7E9B # <CJK> +0x7E9C # <CJK> +0x7F36 # <CJK> +0x7F38 # <CJK> +0x7F3A # <CJK> +0x7F45 # <CJK> +0x7F4C # <CJK> +0x7F4D # <CJK> +0x7F4E # <CJK> +0x7F50 # <CJK> +0x7F51 # <CJK> +0x7F54 # <CJK> +0x7F55 # <CJK> +0x7F58 # <CJK> +0x7F5F # <CJK> +0x7F60 # <CJK> +0x7F67 # <CJK> +0x7F68 # <CJK> +0x7F69 # <CJK> +0x7F6A # <CJK> +0x7F6B # <CJK> +0x7F6E # <CJK> +0x7F70 # <CJK> +0x7F72 # <CJK> +0x7F75 # <CJK> +0x7F77 # <CJK> +0x7F78 # <CJK> +0x7F79 # <CJK> +0x7F82 # <CJK> +0x7F83 # <CJK> +0x7F85 # <CJK> +0x7F86 # <CJK> +0x7F87 # <CJK> +0x7F88 # <CJK> +0x7F8A # <CJK> +0x7F8C # <CJK> +0x7F8E # <CJK> +0x7F94 # <CJK> +0x7F9A # <CJK> +0x7F9D # <CJK> +0x7F9E # <CJK> +0x7FA3 # <CJK> +0x7FA4 # <CJK> +0x7FA8 # <CJK> +0x7FA9 # <CJK> +0x7FAE # <CJK> +0x7FAF # <CJK> +0x7FB2 # <CJK> +0x7FB6 # <CJK> +0x7FB8 # <CJK> +0x7FB9 # <CJK> +0x7FBD # <CJK> +0x7FC1 # <CJK> +0x7FC5 # <CJK> +0x7FC6 # <CJK> +0x7FCA # <CJK> +0x7FCC # <CJK> +0x7FD2 # <CJK> +0x7FD4 # <CJK> +0x7FD5 # <CJK> +0x7FE0 # <CJK> +0x7FE1 # <CJK> +0x7FE6 # <CJK> +0x7FE9 # <CJK> +0x7FEB # <CJK> +0x7FF0 # <CJK> +0x7FF3 # <CJK> +0x7FF9 # <CJK> +0x7FFB # <CJK> +0x7FFC # <CJK> +0x8000 # <CJK> +0x8001 # <CJK> +0x8003 # <CJK> +0x8004 # <CJK> +0x8005 # <CJK> +0x8006 # <CJK> +0x800B # <CJK> +0x800C # <CJK> +0x8010 # <CJK> +0x8012 # <CJK> +0x8015 # <CJK> +0x8017 # <CJK> +0x8018 # <CJK> +0x8019 # <CJK> +0x801C # <CJK> +0x8021 # <CJK> +0x8028 # <CJK> +0x8033 # <CJK> +0x8036 # <CJK> +0x803B # <CJK> +0x803D # <CJK> +0x803F # <CJK> +0x8046 # <CJK> +0x804A # <CJK> +0x8052 # <CJK> +0x8056 # <CJK> +0x8058 # <CJK> +0x805A # <CJK> +0x805E # <CJK> +0x805F # <CJK> +0x8061 # <CJK> +0x8062 # <CJK> +0x8068 # <CJK> +0x806F # <CJK> +0x8070 # <CJK> +0x8072 # <CJK> +0x8073 # <CJK> +0x8074 # <CJK> +0x8076 # <CJK> +0x8077 # <CJK> +0x8079 # <CJK> +0x807D # <CJK> +0x807E # <CJK> +0x807F # <CJK> +0x8084 # <CJK> +0x8085 # <CJK> +0x8086 # <CJK> +0x8087 # <CJK> +0x8089 # <CJK> +0x808B # <CJK> +0x808C # <CJK> +0x8093 # <CJK> +0x8096 # <CJK> +0x8098 # <CJK> +0x809A # <CJK> +0x809B # <CJK> +0x809D # <CJK> +0x80A1 # <CJK> +0x80A2 # <CJK> +0x80A5 # <CJK> +0x80A9 # <CJK> +0x80AA # <CJK> +0x80AC # <CJK> +0x80AD # <CJK> +0x80AF # <CJK> +0x80B1 # <CJK> +0x80B2 # <CJK> +0x80B4 # <CJK> +0x80BA # <CJK> +0x80C3 # <CJK> +0x80C4 # <CJK> +0x80C6 # <CJK> +0x80CC # <CJK> +0x80CE # <CJK> +0x80D6 # <CJK> +0x80D9 # <CJK> +0x80DA # <CJK> +0x80DB # <CJK> +0x80DD # <CJK> +0x80DE # <CJK> +0x80E1 # <CJK> +0x80E4 # <CJK> +0x80E5 # <CJK> +0x80EF # <CJK> +0x80F1 # <CJK> +0x80F4 # <CJK> +0x80F8 # <CJK> +0x80FC # <CJK> +0x80FD # <CJK> +0x8102 # <CJK> +0x8105 # <CJK> +0x8106 # <CJK> +0x8107 # <CJK> +0x8108 # <CJK> +0x8109 # <CJK> +0x810A # <CJK> +0x811A # <CJK> +0x811B # <CJK> +0x8123 # <CJK> +0x8129 # <CJK> +0x812F # <CJK> +0x8131 # <CJK> +0x8133 # <CJK> +0x8139 # <CJK> +0x813E # <CJK> +0x8146 # <CJK> +0x814B # <CJK> +0x814E # <CJK> +0x8150 # <CJK> +0x8151 # <CJK> +0x8153 # <CJK> +0x8154 # <CJK> +0x8155 # <CJK> +0x815F # <CJK> +0x8165 # <CJK> +0x8166 # <CJK> +0x816B # <CJK> +0x816E # <CJK> +0x8170 # <CJK> +0x8171 # <CJK> +0x8174 # <CJK> +0x8178 # <CJK> +0x8179 # <CJK> +0x817A # <CJK> +0x817F # <CJK> +0x8180 # <CJK> +0x8182 # <CJK> +0x8183 # <CJK> +0x8188 # <CJK> +0x818A # <CJK> +0x818F # <CJK> +0x8193 # <CJK> +0x8195 # <CJK> +0x819A # <CJK> +0x819C # <CJK> +0x819D # <CJK> +0x81A0 # <CJK> +0x81A3 # <CJK> +0x81A4 # <CJK> +0x81A8 # <CJK> +0x81A9 # <CJK> +0x81B0 # <CJK> +0x81B3 # <CJK> +0x81B5 # <CJK> +0x81B8 # <CJK> +0x81BA # <CJK> +0x81BD # <CJK> +0x81BE # <CJK> +0x81BF # <CJK> +0x81C0 # <CJK> +0x81C2 # <CJK> +0x81C6 # <CJK> +0x81C8 # <CJK> +0x81C9 # <CJK> +0x81CD # <CJK> +0x81D1 # <CJK> +0x81D3 # <CJK> +0x81D8 # <CJK> +0x81D9 # <CJK> +0x81DA # <CJK> +0x81DF # <CJK> +0x81E0 # <CJK> +0x81E3 # <CJK> +0x81E5 # <CJK> +0x81E7 # <CJK> +0x81E8 # <CJK> +0x81EA # <CJK> +0x81ED # <CJK> +0x81F3 # <CJK> +0x81F4 # <CJK> +0x81FA # <CJK> +0x81FB # <CJK> +0x81FC # <CJK> +0x81FE # <CJK> +0x8201 # <CJK> +0x8202 # <CJK> +0x8205 # <CJK> +0x8207 # <CJK> +0x8208 # <CJK> +0x8209 # <CJK> +0x820A # <CJK> +0x820C # <CJK> +0x820D # <CJK> +0x820E # <CJK> +0x8210 # <CJK> +0x8212 # <CJK> +0x8216 # <CJK> +0x8217 # <CJK> +0x8218 # <CJK> +0x821B # <CJK> +0x821C # <CJK> +0x821E # <CJK> +0x821F # <CJK> +0x8229 # <CJK> +0x822A # <CJK> +0x822B # <CJK> +0x822C # <CJK> +0x822E # <CJK> +0x8233 # <CJK> +0x8235 # <CJK> +0x8236 # <CJK> +0x8237 # <CJK> +0x8238 # <CJK> +0x8239 # <CJK> +0x8240 # <CJK> +0x8247 # <CJK> +0x8258 # <CJK> +0x8259 # <CJK> +0x825A # <CJK> +0x825D # <CJK> +0x825F # <CJK> +0x8262 # <CJK> +0x8264 # <CJK> +0x8266 # <CJK> +0x8268 # <CJK> +0x826A # <CJK> +0x826B # <CJK> +0x826E # <CJK> +0x826F # <CJK> +0x8271 # <CJK> +0x8272 # <CJK> +0x8276 # <CJK> +0x8277 # <CJK> +0x8278 # <CJK> +0x827E # <CJK> +0x828B # <CJK> +0x828D # <CJK> +0x8292 # <CJK> +0x8299 # <CJK> +0x829D # <CJK> +0x829F # <CJK> +0x82A5 # <CJK> +0x82A6 # <CJK> +0x82AB # <CJK> +0x82AC # <CJK> +0x82AD # <CJK> +0x82AF # <CJK> +0x82B1 # <CJK> +0x82B3 # <CJK> +0x82B8 # <CJK> +0x82B9 # <CJK> +0x82BB # <CJK> +0x82BD # <CJK> +0x82C5 # <CJK> +0x82D1 # <CJK> +0x82D2 # <CJK> +0x82D3 # <CJK> +0x82D4 # <CJK> +0x82D7 # <CJK> +0x82D9 # <CJK> +0x82DB # <CJK> +0x82DC # <CJK> +0x82DE # <CJK> +0x82DF # <CJK> +0x82E1 # <CJK> +0x82E3 # <CJK> +0x82E5 # <CJK> +0x82E6 # <CJK> +0x82E7 # <CJK> +0x82EB # <CJK> +0x82F1 # <CJK> +0x82F3 # <CJK> +0x82F4 # <CJK> +0x82F9 # <CJK> +0x82FA # <CJK> +0x82FB # <CJK> +0x8302 # <CJK> +0x8303 # <CJK> +0x8304 # <CJK> +0x8305 # <CJK> +0x8306 # <CJK> +0x8309 # <CJK> +0x830E # <CJK> +0x8316 # <CJK> +0x8317 # <CJK> +0x8318 # <CJK> +0x831C # <CJK> +0x8323 # <CJK> +0x8328 # <CJK> +0x832B # <CJK> +0x832F # <CJK> +0x8331 # <CJK> +0x8332 # <CJK> +0x8334 # <CJK> +0x8335 # <CJK> +0x8336 # <CJK> +0x8338 # <CJK> +0x8339 # <CJK> +0x8340 # <CJK> +0x8345 # <CJK> +0x8349 # <CJK> +0x834A # <CJK> +0x834F # <CJK> +0x8350 # <CJK> +0x8352 # <CJK> +0x8358 # <CJK> +0x8373 # <CJK> +0x8375 # <CJK> +0x8377 # <CJK> +0x837B # <CJK> +0x837C # <CJK> +0x8385 # <CJK> +0x8387 # <CJK> +0x8389 # <CJK> +0x838A # <CJK> +0x838E # <CJK> +0x8393 # <CJK> +0x8396 # <CJK> +0x839A # <CJK> +0x839E # <CJK> +0x839F # <CJK> +0x83A0 # <CJK> +0x83A2 # <CJK> +0x83A8 # <CJK> +0x83AA # <CJK> +0x83AB # <CJK> +0x83B1 # <CJK> +0x83B5 # <CJK> +0x83BD # <CJK> +0x83C1 # <CJK> +0x83C5 # <CJK> +0x83CA # <CJK> +0x83CC # <CJK> +0x83CE # <CJK> +0x83D3 # <CJK> +0x83D6 # <CJK> +0x83D8 # <CJK> +0x83DC # <CJK> +0x83DF # <CJK> +0x83E0 # <CJK> +0x83E9 # <CJK> +0x83EB # <CJK> +0x83EF # <CJK> +0x83F0 # <CJK> +0x83F1 # <CJK> +0x83F2 # <CJK> +0x83F4 # <CJK> +0x83F7 # <CJK> +0x83FB # <CJK> +0x83FD # <CJK> +0x8403 # <CJK> +0x8404 # <CJK> +0x8407 # <CJK> +0x840B # <CJK> +0x840C # <CJK> +0x840D # <CJK> +0x840E # <CJK> +0x8413 # <CJK> +0x8420 # <CJK> +0x8422 # <CJK> +0x8429 # <CJK> +0x842A # <CJK> +0x842C # <CJK> +0x8431 # <CJK> +0x8435 # <CJK> +0x8438 # <CJK> +0x843C # <CJK> +0x843D # <CJK> +0x8446 # <CJK> +0x8449 # <CJK> +0x844E # <CJK> +0x8457 # <CJK> +0x845B # <CJK> +0x8461 # <CJK> +0x8462 # <CJK> +0x8463 # <CJK> +0x8466 # <CJK> +0x8469 # <CJK> +0x846B # <CJK> +0x846C # <CJK> +0x846D # <CJK> +0x846E # <CJK> +0x846F # <CJK> +0x8471 # <CJK> +0x8475 # <CJK> +0x8477 # <CJK> +0x8479 # <CJK> +0x847A # <CJK> +0x8482 # <CJK> +0x8484 # <CJK> +0x848B # <CJK> +0x8490 # <CJK> +0x8494 # <CJK> +0x8499 # <CJK> +0x849C # <CJK> +0x849F # <CJK> +0x84A1 # <CJK> +0x84AD # <CJK> +0x84B2 # <CJK> +0x84B8 # <CJK> +0x84B9 # <CJK> +0x84BB # <CJK> +0x84BC # <CJK> +0x84BF # <CJK> +0x84C1 # <CJK> +0x84C4 # <CJK> +0x84C6 # <CJK> +0x84C9 # <CJK> +0x84CA # <CJK> +0x84CB # <CJK> +0x84CD # <CJK> +0x84D0 # <CJK> +0x84D1 # <CJK> +0x84D6 # <CJK> +0x84D9 # <CJK> +0x84DA # <CJK> +0x84EC # <CJK> +0x84EE # <CJK> +0x84F4 # <CJK> +0x84FC # <CJK> +0x84FF # <CJK> +0x8500 # <CJK> +0x8506 # <CJK> +0x8511 # <CJK> +0x8513 # <CJK> +0x8514 # <CJK> +0x8515 # <CJK> +0x8517 # <CJK> +0x8518 # <CJK> +0x851A # <CJK> +0x851F # <CJK> +0x8521 # <CJK> +0x8526 # <CJK> +0x852C # <CJK> +0x852D # <CJK> +0x8535 # <CJK> +0x853D # <CJK> +0x8540 # <CJK> +0x8541 # <CJK> +0x8543 # <CJK> +0x8548 # <CJK> +0x8549 # <CJK> +0x854A # <CJK> +0x854B # <CJK> +0x854E # <CJK> +0x8555 # <CJK> +0x8557 # <CJK> +0x8558 # <CJK> +0x855A # <CJK> +0x8563 # <CJK> +0x8568 # <CJK> +0x8569 # <CJK> +0x856A # <CJK> +0x856D # <CJK> +0x8577 # <CJK> +0x857E # <CJK> +0x8580 # <CJK> +0x8584 # <CJK> +0x8587 # <CJK> +0x8588 # <CJK> +0x858A # <CJK> +0x8590 # <CJK> +0x8591 # <CJK> +0x8594 # <CJK> +0x8597 # <CJK> +0x8599 # <CJK> +0x859B # <CJK> +0x859C # <CJK> +0x85A4 # <CJK> +0x85A6 # <CJK> +0x85A8 # <CJK> +0x85A9 # <CJK> +0x85AA # <CJK> +0x85AB # <CJK> +0x85AC # <CJK> +0x85AE # <CJK> +0x85AF # <CJK> +0x85B9 # <CJK> +0x85BA # <CJK> +0x85C1 # <CJK> +0x85C9 # <CJK> +0x85CD # <CJK> +0x85CF # <CJK> +0x85D0 # <CJK> +0x85D5 # <CJK> +0x85DC # <CJK> +0x85DD # <CJK> +0x85E4 # <CJK> +0x85E5 # <CJK> +0x85E9 # <CJK> +0x85EA # <CJK> +0x85F7 # <CJK> +0x85F9 # <CJK> +0x85FA # <CJK> +0x85FB # <CJK> +0x85FE # <CJK> +0x8602 # <CJK> +0x8606 # <CJK> +0x8607 # <CJK> +0x860A # <CJK> +0x860B # <CJK> +0x8613 # <CJK> +0x8616 # <CJK> +0x8617 # <CJK> +0x861A # <CJK> +0x8622 # <CJK> +0x862D # <CJK> +0x862F # <CJK> +0x8630 # <CJK> +0x863F # <CJK> +0x864D # <CJK> +0x864E # <CJK> +0x8650 # <CJK> +0x8654 # <CJK> +0x8655 # <CJK> +0x865A # <CJK> +0x865C # <CJK> +0x865E # <CJK> +0x865F # <CJK> +0x8667 # <CJK> +0x866B # <CJK> +0x8671 # <CJK> +0x8679 # <CJK> +0x867B # <CJK> +0x868A # <CJK> +0x868B # <CJK> +0x868C # <CJK> +0x8693 # <CJK> +0x8695 # <CJK> +0x86A3 # <CJK> +0x86A4 # <CJK> +0x86A9 # <CJK> +0x86AA # <CJK> +0x86AB # <CJK> +0x86AF # <CJK> +0x86B0 # <CJK> +0x86B6 # <CJK> +0x86C4 # <CJK> +0x86C6 # <CJK> +0x86C7 # <CJK> +0x86C9 # <CJK> +0x86CB # <CJK> +0x86CD # <CJK> +0x86CE # <CJK> +0x86D4 # <CJK> +0x86D9 # <CJK> +0x86DB # <CJK> +0x86DE # <CJK> +0x86DF # <CJK> +0x86E4 # <CJK> +0x86E9 # <CJK> +0x86EC # <CJK> +0x86ED # <CJK> +0x86EE # <CJK> +0x86EF # <CJK> +0x86F8 # <CJK> +0x86F9 # <CJK> +0x86FB # <CJK> +0x86FE # <CJK> +0x8700 # <CJK> +0x8702 # <CJK> +0x8703 # <CJK> +0x8706 # <CJK> +0x8708 # <CJK> +0x8709 # <CJK> +0x870A # <CJK> +0x870D # <CJK> +0x8711 # <CJK> +0x8712 # <CJK> +0x8718 # <CJK> +0x871A # <CJK> +0x871C # <CJK> +0x8725 # <CJK> +0x8729 # <CJK> +0x8734 # <CJK> +0x8737 # <CJK> +0x873B # <CJK> +0x873F # <CJK> +0x8749 # <CJK> +0x874B # <CJK> +0x874C # <CJK> +0x874E # <CJK> +0x8753 # <CJK> +0x8755 # <CJK> +0x8757 # <CJK> +0x8759 # <CJK> +0x875F # <CJK> +0x8760 # <CJK> +0x8763 # <CJK> +0x8766 # <CJK> +0x8768 # <CJK> +0x876A # <CJK> +0x876E # <CJK> +0x8774 # <CJK> +0x8776 # <CJK> +0x8778 # <CJK> +0x877F # <CJK> +0x8782 # <CJK> +0x878D # <CJK> +0x879F # <CJK> +0x87A2 # <CJK> +0x87AB # <CJK> +0x87AF # <CJK> +0x87B3 # <CJK> +0x87BA # <CJK> +0x87BB # <CJK> +0x87BD # <CJK> +0x87C0 # <CJK> +0x87C4 # <CJK> +0x87C6 # <CJK> +0x87C7 # <CJK> +0x87CB # <CJK> +0x87D0 # <CJK> +0x87D2 # <CJK> +0x87E0 # <CJK> +0x87EF # <CJK> +0x87F2 # <CJK> +0x87F6 # <CJK> +0x87F7 # <CJK> +0x87F9 # <CJK> +0x87FB # <CJK> +0x87FE # <CJK> +0x8805 # <CJK> +0x880D # <CJK> +0x880E # <CJK> +0x880F # <CJK> +0x8811 # <CJK> +0x8815 # <CJK> +0x8816 # <CJK> +0x8821 # <CJK> +0x8822 # <CJK> +0x8823 # <CJK> +0x8827 # <CJK> +0x8831 # <CJK> +0x8836 # <CJK> +0x8839 # <CJK> +0x883B # <CJK> +0x8840 # <CJK> +0x8842 # <CJK> +0x8844 # <CJK> +0x8846 # <CJK> +0x884C # <CJK> +0x884D # <CJK> +0x8852 # <CJK> +0x8853 # <CJK> +0x8857 # <CJK> +0x8859 # <CJK> +0x885B # <CJK> +0x885D # <CJK> +0x885E # <CJK> +0x8861 # <CJK> +0x8862 # <CJK> +0x8863 # <CJK> +0x8868 # <CJK> +0x886B # <CJK> +0x8870 # <CJK> +0x8872 # <CJK> +0x8875 # <CJK> +0x8877 # <CJK> +0x887D # <CJK> +0x887E # <CJK> +0x887F # <CJK> +0x8881 # <CJK> +0x8882 # <CJK> +0x8888 # <CJK> +0x888B # <CJK> +0x888D # <CJK> +0x8892 # <CJK> +0x8896 # <CJK> +0x8897 # <CJK> +0x8899 # <CJK> +0x889E # <CJK> +0x88A2 # <CJK> +0x88A4 # <CJK> +0x88AB # <CJK> +0x88AE # <CJK> +0x88B0 # <CJK> +0x88B1 # <CJK> +0x88B4 # <CJK> +0x88B5 # <CJK> +0x88B7 # <CJK> +0x88BF # <CJK> +0x88C1 # <CJK> +0x88C2 # <CJK> +0x88C3 # <CJK> +0x88C4 # <CJK> +0x88C5 # <CJK> +0x88CF # <CJK> +0x88D4 # <CJK> +0x88D5 # <CJK> +0x88D8 # <CJK> +0x88D9 # <CJK> +0x88DC # <CJK> +0x88DD # <CJK> +0x88DF # <CJK> +0x88E1 # <CJK> +0x88E8 # <CJK> +0x88F2 # <CJK> +0x88F3 # <CJK> +0x88F4 # <CJK> +0x88F8 # <CJK> +0x88F9 # <CJK> +0x88FC # <CJK> +0x88FD # <CJK> +0x88FE # <CJK> +0x8902 # <CJK> +0x8904 # <CJK> +0x8907 # <CJK> +0x890A # <CJK> +0x890C # <CJK> +0x8910 # <CJK> +0x8912 # <CJK> +0x8913 # <CJK> +0x891D # <CJK> +0x891E # <CJK> +0x8925 # <CJK> +0x892A # <CJK> +0x892B # <CJK> +0x8936 # <CJK> +0x8938 # <CJK> +0x893B # <CJK> +0x8941 # <CJK> +0x8943 # <CJK> +0x8944 # <CJK> +0x894C # <CJK> +0x894D # <CJK> +0x8956 # <CJK> +0x895E # <CJK> +0x895F # <CJK> +0x8960 # <CJK> +0x8964 # <CJK> +0x8966 # <CJK> +0x896A # <CJK> +0x896D # <CJK> +0x896F # <CJK> +0x8972 # <CJK> +0x8974 # <CJK> +0x8977 # <CJK> +0x897E # <CJK> +0x897F # <CJK> +0x8981 # <CJK> +0x8983 # <CJK> +0x8986 # <CJK> +0x8987 # <CJK> +0x8988 # <CJK> +0x898A # <CJK> +0x898B # <CJK> +0x898F # <CJK> +0x8993 # <CJK> +0x8996 # <CJK> +0x8997 # <CJK> +0x8998 # <CJK> +0x899A # <CJK> +0x89A1 # <CJK> +0x89A6 # <CJK> +0x89A7 # <CJK> +0x89A9 # <CJK> +0x89AA # <CJK> +0x89AC # <CJK> +0x89AF # <CJK> +0x89B2 # <CJK> +0x89B3 # <CJK> +0x89BA # <CJK> +0x89BD # <CJK> +0x89BF # <CJK> +0x89C0 # <CJK> +0x89D2 # <CJK> +0x89DA # <CJK> +0x89DC # <CJK> +0x89DD # <CJK> +0x89E3 # <CJK> +0x89E6 # <CJK> +0x89E7 # <CJK> +0x89F4 # <CJK> +0x89F8 # <CJK> +0x8A00 # <CJK> +0x8A02 # <CJK> +0x8A03 # <CJK> +0x8A08 # <CJK> +0x8A0A # <CJK> +0x8A0C # <CJK> +0x8A0E # <CJK> +0x8A10 # <CJK> +0x8A13 # <CJK> +0x8A16 # <CJK> +0x8A17 # <CJK> +0x8A18 # <CJK> +0x8A1B # <CJK> +0x8A1D # <CJK> +0x8A1F # <CJK> +0x8A23 # <CJK> +0x8A25 # <CJK> +0x8A2A # <CJK> +0x8A2D # <CJK> +0x8A31 # <CJK> +0x8A33 # <CJK> +0x8A34 # <CJK> +0x8A36 # <CJK> +0x8A3A # <CJK> +0x8A3B # <CJK> +0x8A3C # <CJK> +0x8A41 # <CJK> +0x8A46 # <CJK> +0x8A48 # <CJK> +0x8A50 # <CJK> +0x8A51 # <CJK> +0x8A52 # <CJK> +0x8A54 # <CJK> +0x8A55 # <CJK> +0x8A5B # <CJK> +0x8A5E # <CJK> +0x8A60 # <CJK> +0x8A62 # <CJK> +0x8A63 # <CJK> +0x8A66 # <CJK> +0x8A69 # <CJK> +0x8A6B # <CJK> +0x8A6C # <CJK> +0x8A6D # <CJK> +0x8A6E # <CJK> +0x8A70 # <CJK> +0x8A71 # <CJK> +0x8A72 # <CJK> +0x8A73 # <CJK> +0x8A7C # <CJK> +0x8A82 # <CJK> +0x8A84 # <CJK> +0x8A85 # <CJK> +0x8A87 # <CJK> +0x8A89 # <CJK> +0x8A8C # <CJK> +0x8A8D # <CJK> +0x8A91 # <CJK> +0x8A93 # <CJK> +0x8A95 # <CJK> +0x8A98 # <CJK> +0x8A9A # <CJK> +0x8A9E # <CJK> +0x8AA0 # <CJK> +0x8AA1 # <CJK> +0x8AA3 # <CJK> +0x8AA4 # <CJK> +0x8AA5 # <CJK> +0x8AA6 # <CJK> +0x8AA8 # <CJK> +0x8AAC # <CJK> +0x8AAD # <CJK> +0x8AB0 # <CJK> +0x8AB2 # <CJK> +0x8AB9 # <CJK> +0x8ABC # <CJK> +0x8ABF # <CJK> +0x8AC2 # <CJK> +0x8AC4 # <CJK> +0x8AC7 # <CJK> +0x8ACB # <CJK> +0x8ACC # <CJK> +0x8ACD # <CJK> +0x8ACF # <CJK> +0x8AD2 # <CJK> +0x8AD6 # <CJK> +0x8ADA # <CJK> +0x8ADB # <CJK> +0x8ADC # <CJK> +0x8ADE # <CJK> +0x8AE0 # <CJK> +0x8AE1 # <CJK> +0x8AE2 # <CJK> +0x8AE4 # <CJK> +0x8AE6 # <CJK> +0x8AE7 # <CJK> +0x8AEB # <CJK> +0x8AED # <CJK> +0x8AEE # <CJK> +0x8AF1 # <CJK> +0x8AF3 # <CJK> +0x8AF7 # <CJK> +0x8AF8 # <CJK> +0x8AFA # <CJK> +0x8AFE # <CJK> +0x8B00 # <CJK> +0x8B01 # <CJK> +0x8B02 # <CJK> +0x8B04 # <CJK> +0x8B07 # <CJK> +0x8B0C # <CJK> +0x8B0E # <CJK> +0x8B10 # <CJK> +0x8B14 # <CJK> +0x8B16 # <CJK> +0x8B17 # <CJK> +0x8B19 # <CJK> +0x8B1A # <CJK> +0x8B1B # <CJK> +0x8B1D # <CJK> +0x8B20 # <CJK> +0x8B21 # <CJK> +0x8B26 # <CJK> +0x8B28 # <CJK> +0x8B2B # <CJK> +0x8B2C # <CJK> +0x8B33 # <CJK> +0x8B39 # <CJK> +0x8B3E # <CJK> +0x8B41 # <CJK> +0x8B49 # <CJK> +0x8B4C # <CJK> +0x8B4E # <CJK> +0x8B4F # <CJK> +0x8B56 # <CJK> +0x8B58 # <CJK> +0x8B5A # <CJK> +0x8B5B # <CJK> +0x8B5C # <CJK> +0x8B5F # <CJK> +0x8B66 # <CJK> +0x8B6B # <CJK> +0x8B6C # <CJK> +0x8B6F # <CJK> +0x8B70 # <CJK> +0x8B71 # <CJK> +0x8B72 # <CJK> +0x8B74 # <CJK> +0x8B77 # <CJK> +0x8B7D # <CJK> +0x8B80 # <CJK> +0x8B83 # <CJK> +0x8B8A # <CJK> +0x8B8C # <CJK> +0x8B8E # <CJK> +0x8B90 # <CJK> +0x8B92 # <CJK> +0x8B93 # <CJK> +0x8B96 # <CJK> +0x8B99 # <CJK> +0x8B9A # <CJK> +0x8C37 # <CJK> +0x8C3A # <CJK> +0x8C3F # <CJK> +0x8C41 # <CJK> +0x8C46 # <CJK> +0x8C48 # <CJK> +0x8C4A # <CJK> +0x8C4C # <CJK> +0x8C4E # <CJK> +0x8C50 # <CJK> +0x8C55 # <CJK> +0x8C5A # <CJK> +0x8C61 # <CJK> +0x8C62 # <CJK> +0x8C6A # <CJK> +0x8C6B # <CJK> +0x8C6C # <CJK> +0x8C78 # <CJK> +0x8C79 # <CJK> +0x8C7A # <CJK> +0x8C7C # <CJK> +0x8C82 # <CJK> +0x8C85 # <CJK> +0x8C89 # <CJK> +0x8C8A # <CJK> +0x8C8C # <CJK> +0x8C8D # <CJK> +0x8C8E # <CJK> +0x8C94 # <CJK> +0x8C98 # <CJK> +0x8C9D # <CJK> +0x8C9E # <CJK> +0x8CA0 # <CJK> +0x8CA1 # <CJK> +0x8CA2 # <CJK> +0x8CA7 # <CJK> +0x8CA8 # <CJK> +0x8CA9 # <CJK> +0x8CAA # <CJK> +0x8CAB # <CJK> +0x8CAC # <CJK> +0x8CAD # <CJK> +0x8CAE # <CJK> +0x8CAF # <CJK> +0x8CB0 # <CJK> +0x8CB2 # <CJK> +0x8CB3 # <CJK> +0x8CB4 # <CJK> +0x8CB6 # <CJK> +0x8CB7 # <CJK> +0x8CB8 # <CJK> +0x8CBB # <CJK> +0x8CBC # <CJK> +0x8CBD # <CJK> +0x8CBF # <CJK> +0x8CC0 # <CJK> +0x8CC1 # <CJK> +0x8CC2 # <CJK> +0x8CC3 # <CJK> +0x8CC4 # <CJK> +0x8CC7 # <CJK> +0x8CC8 # <CJK> +0x8CCA # <CJK> +0x8CCD # <CJK> +0x8CCE # <CJK> +0x8CD1 # <CJK> +0x8CD3 # <CJK> +0x8CDA # <CJK> +0x8CDB # <CJK> +0x8CDC # <CJK> +0x8CDE # <CJK> +0x8CE0 # <CJK> +0x8CE2 # <CJK> +0x8CE3 # <CJK> +0x8CE4 # <CJK> +0x8CE6 # <CJK> +0x8CEA # <CJK> +0x8CED # <CJK> +0x8CFA # <CJK> +0x8CFB # <CJK> +0x8CFC # <CJK> +0x8CFD # <CJK> +0x8D04 # <CJK> +0x8D05 # <CJK> +0x8D07 # <CJK> +0x8D08 # <CJK> +0x8D0A # <CJK> +0x8D0B # <CJK> +0x8D0D # <CJK> +0x8D0F # <CJK> +0x8D10 # <CJK> +0x8D13 # <CJK> +0x8D14 # <CJK> +0x8D16 # <CJK> +0x8D64 # <CJK> +0x8D66 # <CJK> +0x8D67 # <CJK> +0x8D6B # <CJK> +0x8D6D # <CJK> +0x8D70 # <CJK> +0x8D71 # <CJK> +0x8D73 # <CJK> +0x8D74 # <CJK> +0x8D77 # <CJK> +0x8D81 # <CJK> +0x8D85 # <CJK> +0x8D8A # <CJK> +0x8D99 # <CJK> +0x8DA3 # <CJK> +0x8DA8 # <CJK> +0x8DB3 # <CJK> +0x8DBA # <CJK> +0x8DBE # <CJK> +0x8DC2 # <CJK> +0x8DCB # <CJK> +0x8DCC # <CJK> +0x8DCF # <CJK> +0x8DD6 # <CJK> +0x8DDA # <CJK> +0x8DDB # <CJK> +0x8DDD # <CJK> +0x8DDF # <CJK> +0x8DE1 # <CJK> +0x8DE3 # <CJK> +0x8DE8 # <CJK> +0x8DEA # <CJK> +0x8DEB # <CJK> +0x8DEF # <CJK> +0x8DF3 # <CJK> +0x8DF5 # <CJK> +0x8DFC # <CJK> +0x8DFF # <CJK> +0x8E08 # <CJK> +0x8E09 # <CJK> +0x8E0A # <CJK> +0x8E0F # <CJK> +0x8E10 # <CJK> +0x8E1D # <CJK> +0x8E1E # <CJK> +0x8E1F # <CJK> +0x8E2A # <CJK> +0x8E30 # <CJK> +0x8E34 # <CJK> +0x8E35 # <CJK> +0x8E42 # <CJK> +0x8E44 # <CJK> +0x8E47 # <CJK> +0x8E48 # <CJK> +0x8E49 # <CJK> +0x8E4A # <CJK> +0x8E4C # <CJK> +0x8E50 # <CJK> +0x8E55 # <CJK> +0x8E59 # <CJK> +0x8E5F # <CJK> +0x8E60 # <CJK> +0x8E63 # <CJK> +0x8E64 # <CJK> +0x8E72 # <CJK> +0x8E74 # <CJK> +0x8E76 # <CJK> +0x8E7C # <CJK> +0x8E81 # <CJK> +0x8E84 # <CJK> +0x8E85 # <CJK> +0x8E87 # <CJK> +0x8E8A # <CJK> +0x8E8B # <CJK> +0x8E8D # <CJK> +0x8E91 # <CJK> +0x8E93 # <CJK> +0x8E94 # <CJK> +0x8E99 # <CJK> +0x8EA1 # <CJK> +0x8EAA # <CJK> +0x8EAB # <CJK> +0x8EAC # <CJK> +0x8EAF # <CJK> +0x8EB0 # <CJK> +0x8EB1 # <CJK> +0x8EBE # <CJK> +0x8EC5 # <CJK> +0x8EC6 # <CJK> +0x8EC8 # <CJK> +0x8ECA # <CJK> +0x8ECB # <CJK> +0x8ECC # <CJK> +0x8ECD # <CJK> +0x8ED2 # <CJK> +0x8EDB # <CJK> +0x8EDF # <CJK> +0x8EE2 # <CJK> +0x8EE3 # <CJK> +0x8EEB # <CJK> +0x8EF8 # <CJK> +0x8EFB # <CJK> +0x8EFC # <CJK> +0x8EFD # <CJK> +0x8EFE # <CJK> +0x8F03 # <CJK> +0x8F05 # <CJK> +0x8F09 # <CJK> +0x8F0A # <CJK> +0x8F0C # <CJK> +0x8F12 # <CJK> +0x8F13 # <CJK> +0x8F14 # <CJK> +0x8F15 # <CJK> +0x8F19 # <CJK> +0x8F1B # <CJK> +0x8F1C # <CJK> +0x8F1D # <CJK> +0x8F1F # <CJK> +0x8F26 # <CJK> +0x8F29 # <CJK> +0x8F2A # <CJK> +0x8F2F # <CJK> +0x8F33 # <CJK> +0x8F38 # <CJK> +0x8F39 # <CJK> +0x8F3B # <CJK> +0x8F3E # <CJK> +0x8F3F # <CJK> +0x8F42 # <CJK> +0x8F44 # <CJK> +0x8F45 # <CJK> +0x8F46 # <CJK> +0x8F49 # <CJK> +0x8F4C # <CJK> +0x8F4D # <CJK> +0x8F4E # <CJK> +0x8F57 # <CJK> +0x8F5C # <CJK> +0x8F5F # <CJK> +0x8F61 # <CJK> +0x8F62 # <CJK> +0x8F63 # <CJK> +0x8F64 # <CJK> +0x8F9B # <CJK> +0x8F9C # <CJK> +0x8F9E # <CJK> +0x8F9F # <CJK> +0x8FA3 # <CJK> +0x8FA7 # <CJK> +0x8FA8 # <CJK> +0x8FAD # <CJK> +0x8FAE # <CJK> +0x8FAF # <CJK> +0x8FB0 # <CJK> +0x8FB1 # <CJK> +0x8FB2 # <CJK> +0x8FB7 # <CJK> +0x8FBA # <CJK> +0x8FBB # <CJK> +0x8FBC # <CJK> +0x8FBF # <CJK> +0x8FC2 # <CJK> +0x8FC4 # <CJK> +0x8FC5 # <CJK> +0x8FCE # <CJK> +0x8FD1 # <CJK> +0x8FD4 # <CJK> +0x8FDA # <CJK> +0x8FE2 # <CJK> +0x8FE5 # <CJK> +0x8FE6 # <CJK> +0x8FE9 # <CJK> +0x8FEA # <CJK> +0x8FEB # <CJK> +0x8FED # <CJK> +0x8FEF # <CJK> +0x8FF0 # <CJK> +0x8FF4 # <CJK> +0x8FF7 # <CJK> +0x8FF8 # <CJK> +0x8FF9 # <CJK> +0x8FFA # <CJK> +0x8FFD # <CJK> +0x9000 # <CJK> +0x9001 # <CJK> +0x9003 # <CJK> +0x9005 # <CJK> +0x9006 # <CJK> +0x900B # <CJK> +0x900D # <CJK> +0x900E # <CJK> +0x900F # <CJK> +0x9010 # <CJK> +0x9011 # <CJK> +0x9013 # <CJK> +0x9014 # <CJK> +0x9015 # <CJK> +0x9016 # <CJK> +0x9017 # <CJK> +0x9019 # <CJK> +0x901A # <CJK> +0x901D # <CJK> +0x901E # <CJK> +0x901F # <CJK> +0x9020 # <CJK> +0x9021 # <CJK> +0x9022 # <CJK> +0x9023 # <CJK> +0x9027 # <CJK> +0x902E # <CJK> +0x9031 # <CJK> +0x9032 # <CJK> +0x9035 # <CJK> +0x9036 # <CJK> +0x9038 # <CJK> +0x9039 # <CJK> +0x903C # <CJK> +0x903E # <CJK> +0x9041 # <CJK> +0x9042 # <CJK> +0x9045 # <CJK> +0x9047 # <CJK> +0x9049 # <CJK> +0x904A # <CJK> +0x904B # <CJK> +0x904D # <CJK> +0x904E # <CJK> +0x904F # <CJK> +0x9050 # <CJK> +0x9051 # <CJK> +0x9052 # <CJK> +0x9053 # <CJK> +0x9054 # <CJK> +0x9055 # <CJK> +0x9056 # <CJK> +0x9058 # <CJK> +0x9059 # <CJK> +0x905C # <CJK> +0x905E # <CJK> +0x9060 # <CJK> +0x9061 # <CJK> +0x9063 # <CJK> +0x9065 # <CJK> +0x9068 # <CJK> +0x9069 # <CJK> +0x906D # <CJK> +0x906E # <CJK> +0x906F # <CJK> +0x9072 # <CJK> +0x9075 # <CJK> +0x9076 # <CJK> +0x9077 # <CJK> +0x9078 # <CJK> +0x907A # <CJK> +0x907C # <CJK> +0x907D # <CJK> +0x907F # <CJK> +0x9080 # <CJK> +0x9081 # <CJK> +0x9082 # <CJK> +0x9083 # <CJK> +0x9084 # <CJK> +0x9087 # <CJK> +0x9089 # <CJK> +0x908A # <CJK> +0x908F # <CJK> +0x9091 # <CJK> +0x90A3 # <CJK> +0x90A6 # <CJK> +0x90A8 # <CJK> +0x90AA # <CJK> +0x90AF # <CJK> +0x90B1 # <CJK> +0x90B5 # <CJK> +0x90B8 # <CJK> +0x90C1 # <CJK> +0x90CA # <CJK> +0x90CE # <CJK> +0x90DB # <CJK> +0x90E1 # <CJK> +0x90E2 # <CJK> +0x90E4 # <CJK> +0x90E8 # <CJK> +0x90ED # <CJK> +0x90F5 # <CJK> +0x90F7 # <CJK> +0x90FD # <CJK> +0x9102 # <CJK> +0x9112 # <CJK> +0x9119 # <CJK> +0x912D # <CJK> +0x9130 # <CJK> +0x9132 # <CJK> +0x9149 # <CJK> +0x914A # <CJK> +0x914B # <CJK> +0x914C # <CJK> +0x914D # <CJK> +0x914E # <CJK> +0x9152 # <CJK> +0x9154 # <CJK> +0x9156 # <CJK> +0x9158 # <CJK> +0x9162 # <CJK> +0x9163 # <CJK> +0x9165 # <CJK> +0x9169 # <CJK> +0x916A # <CJK> +0x916C # <CJK> +0x9172 # <CJK> +0x9173 # <CJK> +0x9175 # <CJK> +0x9177 # <CJK> +0x9178 # <CJK> +0x9182 # <CJK> +0x9187 # <CJK> +0x9189 # <CJK> +0x918B # <CJK> +0x918D # <CJK> +0x9190 # <CJK> +0x9192 # <CJK> +0x9197 # <CJK> +0x919C # <CJK> +0x91A2 # <CJK> +0x91A4 # <CJK> +0x91AA # <CJK> +0x91AB # <CJK> +0x91AF # <CJK> +0x91B4 # <CJK> +0x91B5 # <CJK> +0x91B8 # <CJK> +0x91BA # <CJK> +0x91C0 # <CJK> +0x91C1 # <CJK> +0x91C6 # <CJK> +0x91C7 # <CJK> +0x91C8 # <CJK> +0x91C9 # <CJK> +0x91CB # <CJK> +0x91CC # <CJK> +0x91CD # <CJK> +0x91CE # <CJK> +0x91CF # <CJK> +0x91D0 # <CJK> +0x91D1 # <CJK> +0x91D6 # <CJK> +0x91D8 # <CJK> +0x91DB # <CJK> +0x91DC # <CJK> +0x91DD # <CJK> +0x91DF # <CJK> +0x91E1 # <CJK> +0x91E3 # <CJK> +0x91E6 # <CJK> +0x91E7 # <CJK> +0x91F5 # <CJK> +0x91F6 # <CJK> +0x91FC # <CJK> +0x91FF # <CJK> +0x920D # <CJK> +0x920E # <CJK> +0x9211 # <CJK> +0x9214 # <CJK> +0x9215 # <CJK> +0x921E # <CJK> +0x9229 # <CJK> +0x922C # <CJK> +0x9234 # <CJK> +0x9237 # <CJK> +0x923F # <CJK> +0x9244 # <CJK> +0x9245 # <CJK> +0x9248 # <CJK> +0x9249 # <CJK> +0x924B # <CJK> +0x9250 # <CJK> +0x9257 # <CJK> +0x925A # <CJK> +0x925B # <CJK> +0x925E # <CJK> +0x9262 # <CJK> +0x9264 # <CJK> +0x9266 # <CJK> +0x9271 # <CJK> +0x927E # <CJK> +0x9280 # <CJK> +0x9283 # <CJK> +0x9285 # <CJK> +0x9291 # <CJK> +0x9293 # <CJK> +0x9295 # <CJK> +0x9296 # <CJK> +0x9298 # <CJK> +0x929A # <CJK> +0x929B # <CJK> +0x929C # <CJK> +0x92AD # <CJK> +0x92B7 # <CJK> +0x92B9 # <CJK> +0x92CF # <CJK> +0x92D2 # <CJK> +0x92E4 # <CJK> +0x92E9 # <CJK> +0x92EA # <CJK> +0x92ED # <CJK> +0x92F2 # <CJK> +0x92F3 # <CJK> +0x92F8 # <CJK> +0x92FA # <CJK> +0x92FC # <CJK> +0x9306 # <CJK> +0x930F # <CJK> +0x9310 # <CJK> +0x9318 # <CJK> +0x9319 # <CJK> +0x931A # <CJK> +0x9320 # <CJK> +0x9322 # <CJK> +0x9323 # <CJK> +0x9326 # <CJK> +0x9328 # <CJK> +0x932B # <CJK> +0x932C # <CJK> +0x932E # <CJK> +0x932F # <CJK> +0x9332 # <CJK> +0x9335 # <CJK> +0x933A # <CJK> +0x933B # <CJK> +0x9344 # <CJK> +0x934B # <CJK> +0x934D # <CJK> +0x9354 # <CJK> +0x9356 # <CJK> +0x935B # <CJK> +0x935C # <CJK> +0x9360 # <CJK> +0x936C # <CJK> +0x936E # <CJK> +0x9375 # <CJK> +0x937C # <CJK> +0x937E # <CJK> +0x938C # <CJK> +0x9394 # <CJK> +0x9396 # <CJK> +0x9397 # <CJK> +0x939A # <CJK> +0x93A7 # <CJK> +0x93AC # <CJK> +0x93AD # <CJK> +0x93AE # <CJK> +0x93B0 # <CJK> +0x93B9 # <CJK> +0x93C3 # <CJK> +0x93C8 # <CJK> +0x93D0 # <CJK> +0x93D1 # <CJK> +0x93D6 # <CJK> +0x93D7 # <CJK> +0x93D8 # <CJK> +0x93DD # <CJK> +0x93E1 # <CJK> +0x93E4 # <CJK> +0x93E5 # <CJK> +0x93E8 # <CJK> +0x9403 # <CJK> +0x9407 # <CJK> +0x9410 # <CJK> +0x9413 # <CJK> +0x9414 # <CJK> +0x9418 # <CJK> +0x9419 # <CJK> +0x941A # <CJK> +0x9421 # <CJK> +0x942B # <CJK> +0x9435 # <CJK> +0x9436 # <CJK> +0x9438 # <CJK> +0x943A # <CJK> +0x9441 # <CJK> +0x9444 # <CJK> +0x9451 # <CJK> +0x9452 # <CJK> +0x9453 # <CJK> +0x945A # <CJK> +0x945B # <CJK> +0x945E # <CJK> +0x9460 # <CJK> +0x9462 # <CJK> +0x946A # <CJK> +0x9470 # <CJK> +0x9475 # <CJK> +0x9477 # <CJK> +0x947C # <CJK> +0x947D # <CJK> +0x947E # <CJK> +0x947F # <CJK> +0x9481 # <CJK> +0x9577 # <CJK> +0x9580 # <CJK> +0x9582 # <CJK> +0x9583 # <CJK> +0x9587 # <CJK> +0x9589 # <CJK> +0x958A # <CJK> +0x958B # <CJK> +0x958F # <CJK> +0x9591 # <CJK> +0x9593 # <CJK> +0x9594 # <CJK> +0x9596 # <CJK> +0x9598 # <CJK> +0x9599 # <CJK> +0x95A0 # <CJK> +0x95A2 # <CJK> +0x95A3 # <CJK> +0x95A4 # <CJK> +0x95A5 # <CJK> +0x95A7 # <CJK> +0x95A8 # <CJK> +0x95AD # <CJK> +0x95B2 # <CJK> +0x95B9 # <CJK> +0x95BB # <CJK> +0x95BC # <CJK> +0x95BE # <CJK> +0x95C3 # <CJK> +0x95C7 # <CJK> +0x95CA # <CJK> +0x95CC # <CJK> +0x95CD # <CJK> +0x95D4 # <CJK> +0x95D5 # <CJK> +0x95D6 # <CJK> +0x95D8 # <CJK> +0x95DC # <CJK> +0x95E1 # <CJK> +0x95E2 # <CJK> +0x95E5 # <CJK> +0x961C # <CJK> +0x9621 # <CJK> +0x9628 # <CJK> +0x962A # <CJK> +0x962E # <CJK> +0x962F # <CJK> +0x9632 # <CJK> +0x963B # <CJK> +0x963F # <CJK> +0x9640 # <CJK> +0x9642 # <CJK> +0x9644 # <CJK> +0x964B # <CJK> +0x964C # <CJK> +0x964D # <CJK> +0x964F # <CJK> +0x9650 # <CJK> +0x965B # <CJK> +0x965C # <CJK> +0x965D # <CJK> +0x965E # <CJK> +0x965F # <CJK> +0x9662 # <CJK> +0x9663 # <CJK> +0x9664 # <CJK> +0x9665 # <CJK> +0x9666 # <CJK> +0x966A # <CJK> +0x966C # <CJK> +0x9670 # <CJK> +0x9672 # <CJK> +0x9673 # <CJK> +0x9675 # <CJK> +0x9676 # <CJK> +0x9677 # <CJK> +0x9678 # <CJK> +0x967A # <CJK> +0x967D # <CJK> +0x9685 # <CJK> +0x9686 # <CJK> +0x9688 # <CJK> +0x968A # <CJK> +0x968B # <CJK> +0x968D # <CJK> +0x968E # <CJK> +0x968F # <CJK> +0x9694 # <CJK> +0x9695 # <CJK> +0x9697 # <CJK> +0x9698 # <CJK> +0x9699 # <CJK> +0x969B # <CJK> +0x969C # <CJK> +0x96A0 # <CJK> +0x96A3 # <CJK> +0x96A7 # <CJK> +0x96A8 # <CJK> +0x96AA # <CJK> +0x96B0 # <CJK> +0x96B1 # <CJK> +0x96B2 # <CJK> +0x96B4 # <CJK> +0x96B6 # <CJK> +0x96B7 # <CJK> +0x96B8 # <CJK> +0x96B9 # <CJK> +0x96BB # <CJK> +0x96BC # <CJK> +0x96C0 # <CJK> +0x96C1 # <CJK> +0x96C4 # <CJK> +0x96C5 # <CJK> +0x96C6 # <CJK> +0x96C7 # <CJK> +0x96C9 # <CJK> +0x96CB # <CJK> +0x96CC # <CJK> +0x96CD # <CJK> +0x96CE # <CJK> +0x96D1 # <CJK> +0x96D5 # <CJK> +0x96D6 # <CJK> +0x96D9 # <CJK> +0x96DB # <CJK> +0x96DC # <CJK> +0x96E2 # <CJK> +0x96E3 # <CJK> +0x96E8 # <CJK> +0x96EA # <CJK> +0x96EB # <CJK> +0x96F0 # <CJK> +0x96F2 # <CJK> +0x96F6 # <CJK> +0x96F7 # <CJK> +0x96F9 # <CJK> +0x96FB # <CJK> +0x9700 # <CJK> +0x9704 # <CJK> +0x9706 # <CJK> +0x9707 # <CJK> +0x9708 # <CJK> +0x970A # <CJK> +0x970D # <CJK> +0x970E # <CJK> +0x970F # <CJK> +0x9711 # <CJK> +0x9713 # <CJK> +0x9716 # <CJK> +0x9719 # <CJK> +0x971C # <CJK> +0x971E # <CJK> +0x9724 # <CJK> +0x9727 # <CJK> +0x972A # <CJK> +0x9730 # <CJK> +0x9732 # <CJK> +0x9738 # <CJK> +0x9739 # <CJK> +0x973D # <CJK> +0x973E # <CJK> +0x9742 # <CJK> +0x9744 # <CJK> +0x9746 # <CJK> +0x9748 # <CJK> +0x9749 # <CJK> +0x9752 # <CJK> +0x9756 # <CJK> +0x9759 # <CJK> +0x975C # <CJK> +0x975E # <CJK> +0x9760 # <CJK> +0x9761 # <CJK> +0x9762 # <CJK> +0x9764 # <CJK> +0x9766 # <CJK> +0x9768 # <CJK> +0x9769 # <CJK> +0x976B # <CJK> +0x976D # <CJK> +0x9771 # <CJK> +0x9774 # <CJK> +0x9779 # <CJK> +0x977A # <CJK> +0x977C # <CJK> +0x9781 # <CJK> +0x9784 # <CJK> +0x9785 # <CJK> +0x9786 # <CJK> +0x978B # <CJK> +0x978D # <CJK> +0x978F # <CJK> +0x9790 # <CJK> +0x9798 # <CJK> +0x979C # <CJK> +0x97A0 # <CJK> +0x97A3 # <CJK> +0x97A6 # <CJK> +0x97A8 # <CJK> +0x97AB # <CJK> +0x97AD # <CJK> +0x97B3 # <CJK> +0x97B4 # <CJK> +0x97C3 # <CJK> +0x97C6 # <CJK> +0x97C8 # <CJK> +0x97CB # <CJK> +0x97D3 # <CJK> +0x97DC # <CJK> +0x97ED # <CJK> +0x97EE # <CJK> +0x97F2 # <CJK> +0x97F3 # <CJK> +0x97F5 # <CJK> +0x97F6 # <CJK> +0x97FB # <CJK> +0x97FF # <CJK> +0x9801 # <CJK> +0x9802 # <CJK> +0x9803 # <CJK> +0x9805 # <CJK> +0x9806 # <CJK> +0x9808 # <CJK> +0x980C # <CJK> +0x980F # <CJK> +0x9810 # <CJK> +0x9811 # <CJK> +0x9812 # <CJK> +0x9813 # <CJK> +0x9817 # <CJK> +0x9818 # <CJK> +0x981A # <CJK> +0x9821 # <CJK> +0x9824 # <CJK> +0x982C # <CJK> +0x982D # <CJK> +0x9834 # <CJK> +0x9837 # <CJK> +0x9838 # <CJK> +0x983B # <CJK> +0x983C # <CJK> +0x983D # <CJK> +0x9846 # <CJK> +0x984B # <CJK> +0x984C # <CJK> +0x984D # <CJK> +0x984E # <CJK> +0x984F # <CJK> +0x9854 # <CJK> +0x9855 # <CJK> +0x9858 # <CJK> +0x985B # <CJK> +0x985E # <CJK> +0x9867 # <CJK> +0x986B # <CJK> +0x986F # <CJK> +0x9870 # <CJK> +0x9871 # <CJK> +0x9873 # <CJK> +0x9874 # <CJK> +0x98A8 # <CJK> +0x98AA # <CJK> +0x98AF # <CJK> +0x98B1 # <CJK> +0x98B6 # <CJK> +0x98C3 # <CJK> +0x98C4 # <CJK> +0x98C6 # <CJK> +0x98DB # <CJK> +0x98DC # <CJK> +0x98DF # <CJK> +0x98E2 # <CJK> +0x98E9 # <CJK> +0x98EB # <CJK> +0x98ED # <CJK> +0x98EE # <CJK> +0x98EF # <CJK> +0x98F2 # <CJK> +0x98F4 # <CJK> +0x98FC # <CJK> +0x98FD # <CJK> +0x98FE # <CJK> +0x9903 # <CJK> +0x9905 # <CJK> +0x9909 # <CJK> +0x990A # <CJK> +0x990C # <CJK> +0x9910 # <CJK> +0x9912 # <CJK> +0x9913 # <CJK> +0x9914 # <CJK> +0x9918 # <CJK> +0x991D # <CJK> +0x991E # <CJK> +0x9920 # <CJK> +0x9921 # <CJK> +0x9924 # <CJK> +0x9928 # <CJK> +0x992C # <CJK> +0x992E # <CJK> +0x993D # <CJK> +0x993E # <CJK> +0x9942 # <CJK> +0x9945 # <CJK> +0x9949 # <CJK> +0x994B # <CJK> +0x994C # <CJK> +0x9950 # <CJK> +0x9951 # <CJK> +0x9952 # <CJK> +0x9955 # <CJK> +0x9957 # <CJK> +0x9996 # <CJK> +0x9997 # <CJK> +0x9998 # <CJK> +0x9999 # <CJK> +0x99A5 # <CJK> +0x99A8 # <CJK> +0x99AC # <CJK> +0x99AD # <CJK> +0x99AE # <CJK> +0x99B3 # <CJK> +0x99B4 # <CJK> +0x99BC # <CJK> +0x99C1 # <CJK> +0x99C4 # <CJK> +0x99C5 # <CJK> +0x99C6 # <CJK> +0x99C8 # <CJK> +0x99D0 # <CJK> +0x99D1 # <CJK> +0x99D2 # <CJK> +0x99D5 # <CJK> +0x99D8 # <CJK> +0x99DB # <CJK> +0x99DD # <CJK> +0x99DF # <CJK> +0x99E2 # <CJK> +0x99ED # <CJK> +0x99EE # <CJK> +0x99F1 # <CJK> +0x99F2 # <CJK> +0x99F8 # <CJK> +0x99FB # <CJK> +0x99FF # <CJK> +0x9A01 # <CJK> +0x9A05 # <CJK> +0x9A0E # <CJK> +0x9A0F # <CJK> +0x9A12 # <CJK> +0x9A13 # <CJK> +0x9A19 # <CJK> +0x9A28 # <CJK> +0x9A2B # <CJK> +0x9A30 # <CJK> +0x9A37 # <CJK> +0x9A3E # <CJK> +0x9A40 # <CJK> +0x9A42 # <CJK> +0x9A43 # <CJK> +0x9A45 # <CJK> +0x9A4D # <CJK> +0x9A55 # <CJK> +0x9A57 # <CJK> +0x9A5A # <CJK> +0x9A5B # <CJK> +0x9A5F # <CJK> +0x9A62 # <CJK> +0x9A64 # <CJK> +0x9A65 # <CJK> +0x9A69 # <CJK> +0x9A6A # <CJK> +0x9A6B # <CJK> +0x9AA8 # <CJK> +0x9AAD # <CJK> +0x9AB0 # <CJK> +0x9AB8 # <CJK> +0x9ABC # <CJK> +0x9AC0 # <CJK> +0x9AC4 # <CJK> +0x9ACF # <CJK> +0x9AD1 # <CJK> +0x9AD3 # <CJK> +0x9AD4 # <CJK> +0x9AD8 # <CJK> +0x9ADE # <CJK> +0x9ADF # <CJK> +0x9AE2 # <CJK> +0x9AE3 # <CJK> +0x9AE6 # <CJK> +0x9AEA # <CJK> +0x9AEB # <CJK> +0x9AED # <CJK> +0x9AEE # <CJK> +0x9AEF # <CJK> +0x9AF1 # <CJK> +0x9AF4 # <CJK> +0x9AF7 # <CJK> +0x9AFB # <CJK> +0x9B06 # <CJK> +0x9B18 # <CJK> +0x9B1A # <CJK> +0x9B1F # <CJK> +0x9B22 # <CJK> +0x9B23 # <CJK> +0x9B25 # <CJK> +0x9B27 # <CJK> +0x9B28 # <CJK> +0x9B29 # <CJK> +0x9B2A # <CJK> +0x9B2E # <CJK> +0x9B2F # <CJK> +0x9B31 # <CJK> +0x9B32 # <CJK> +0x9B3B # <CJK> +0x9B3C # <CJK> +0x9B41 # <CJK> +0x9B42 # <CJK> +0x9B43 # <CJK> +0x9B44 # <CJK> +0x9B45 # <CJK> +0x9B4D # <CJK> +0x9B4E # <CJK> +0x9B4F # <CJK> +0x9B51 # <CJK> +0x9B54 # <CJK> +0x9B58 # <CJK> +0x9B5A # <CJK> +0x9B6F # <CJK> +0x9B74 # <CJK> +0x9B83 # <CJK> +0x9B8E # <CJK> +0x9B91 # <CJK> +0x9B92 # <CJK> +0x9B93 # <CJK> +0x9B96 # <CJK> +0x9B97 # <CJK> +0x9B9F # <CJK> +0x9BA0 # <CJK> +0x9BA8 # <CJK> +0x9BAA # <CJK> +0x9BAB # <CJK> +0x9BAD # <CJK> +0x9BAE # <CJK> +0x9BB4 # <CJK> +0x9BB9 # <CJK> +0x9BC0 # <CJK> +0x9BC6 # <CJK> +0x9BC9 # <CJK> +0x9BCA # <CJK> +0x9BCF # <CJK> +0x9BD1 # <CJK> +0x9BD2 # <CJK> +0x9BD4 # <CJK> +0x9BD6 # <CJK> +0x9BDB # <CJK> +0x9BE1 # <CJK> +0x9BE2 # <CJK> +0x9BE3 # <CJK> +0x9BE4 # <CJK> +0x9BE8 # <CJK> +0x9BF0 # <CJK> +0x9BF1 # <CJK> +0x9BF2 # <CJK> +0x9BF5 # <CJK> +0x9C04 # <CJK> +0x9C06 # <CJK> +0x9C08 # <CJK> +0x9C09 # <CJK> +0x9C0A # <CJK> +0x9C0C # <CJK> +0x9C0D # <CJK> +0x9C10 # <CJK> +0x9C12 # <CJK> +0x9C13 # <CJK> +0x9C14 # <CJK> +0x9C15 # <CJK> +0x9C1B # <CJK> +0x9C21 # <CJK> +0x9C24 # <CJK> +0x9C25 # <CJK> +0x9C2D # <CJK> +0x9C2E # <CJK> +0x9C2F # <CJK> +0x9C30 # <CJK> +0x9C32 # <CJK> +0x9C39 # <CJK> +0x9C3A # <CJK> +0x9C3B # <CJK> +0x9C3E # <CJK> +0x9C46 # <CJK> +0x9C47 # <CJK> +0x9C48 # <CJK> +0x9C52 # <CJK> +0x9C57 # <CJK> +0x9C5A # <CJK> +0x9C60 # <CJK> +0x9C67 # <CJK> +0x9C76 # <CJK> +0x9C78 # <CJK> +0x9CE5 # <CJK> +0x9CE7 # <CJK> +0x9CE9 # <CJK> +0x9CEB # <CJK> +0x9CEC # <CJK> +0x9CF0 # <CJK> +0x9CF3 # <CJK> +0x9CF4 # <CJK> +0x9CF6 # <CJK> +0x9D03 # <CJK> +0x9D06 # <CJK> +0x9D07 # <CJK> +0x9D08 # <CJK> +0x9D09 # <CJK> +0x9D0E # <CJK> +0x9D12 # <CJK> +0x9D15 # <CJK> +0x9D1B # <CJK> +0x9D1F # <CJK> +0x9D23 # <CJK> +0x9D26 # <CJK> +0x9D28 # <CJK> +0x9D2A # <CJK> +0x9D2B # <CJK> +0x9D2C # <CJK> +0x9D3B # <CJK> +0x9D3E # <CJK> +0x9D3F # <CJK> +0x9D41 # <CJK> +0x9D44 # <CJK> +0x9D46 # <CJK> +0x9D48 # <CJK> +0x9D50 # <CJK> +0x9D51 # <CJK> +0x9D59 # <CJK> +0x9D5C # <CJK> +0x9D5D # <CJK> +0x9D5E # <CJK> +0x9D60 # <CJK> +0x9D61 # <CJK> +0x9D64 # <CJK> +0x9D6C # <CJK> +0x9D6F # <CJK> +0x9D72 # <CJK> +0x9D7A # <CJK> +0x9D87 # <CJK> +0x9D89 # <CJK> +0x9D8F # <CJK> +0x9D9A # <CJK> +0x9DA4 # <CJK> +0x9DA9 # <CJK> +0x9DAB # <CJK> +0x9DAF # <CJK> +0x9DB2 # <CJK> +0x9DB4 # <CJK> +0x9DB8 # <CJK> +0x9DBA # <CJK> +0x9DBB # <CJK> +0x9DC1 # <CJK> +0x9DC2 # <CJK> +0x9DC4 # <CJK> +0x9DC6 # <CJK> +0x9DCF # <CJK> +0x9DD3 # <CJK> +0x9DD9 # <CJK> +0x9DE6 # <CJK> +0x9DED # <CJK> +0x9DEF # <CJK> +0x9DF2 # <CJK> +0x9DF8 # <CJK> +0x9DF9 # <CJK> +0x9DFA # <CJK> +0x9DFD # <CJK> +0x9E1A # <CJK> +0x9E1B # <CJK> +0x9E1E # <CJK> +0x9E75 # <CJK> +0x9E78 # <CJK> +0x9E79 # <CJK> +0x9E7D # <CJK> +0x9E7F # <CJK> +0x9E81 # <CJK> +0x9E88 # <CJK> +0x9E8B # <CJK> +0x9E8C # <CJK> +0x9E91 # <CJK> +0x9E92 # <CJK> +0x9E93 # <CJK> +0x9E95 # <CJK> +0x9E97 # <CJK> +0x9E9D # <CJK> +0x9E9F # <CJK> +0x9EA5 # <CJK> +0x9EA6 # <CJK> +0x9EA9 # <CJK> +0x9EAA # <CJK> +0x9EAD # <CJK> +0x9EB8 # <CJK> +0x9EB9 # <CJK> +0x9EBA # <CJK> +0x9EBB # <CJK> +0x9EBC # <CJK> +0x9EBE # <CJK> +0x9EBF # <CJK> +0x9EC4 # <CJK> +0x9ECC # <CJK> +0x9ECD # <CJK> +0x9ECE # <CJK> +0x9ECF # <CJK> +0x9ED0 # <CJK> +0x9ED2 # <CJK> +0x9ED4 # <CJK> +0x9ED8 # <CJK> +0x9ED9 # <CJK> +0x9EDB # <CJK> +0x9EDC # <CJK> +0x9EDD # <CJK> +0x9EDE # <CJK> +0x9EE0 # <CJK> +0x9EE5 # <CJK> +0x9EE8 # <CJK> +0x9EEF # <CJK> +0x9EF4 # <CJK> +0x9EF6 # <CJK> +0x9EF7 # <CJK> +0x9EF9 # <CJK> +0x9EFB # <CJK> +0x9EFC # <CJK> +0x9EFD # <CJK> +0x9F07 # <CJK> +0x9F08 # <CJK> +0x9F0E # <CJK> +0x9F13 # <CJK> +0x9F15 # <CJK> +0x9F20 # <CJK> +0x9F21 # <CJK> +0x9F2C # <CJK> +0x9F3B # <CJK> +0x9F3E # <CJK> +0x9F4A # <CJK> +0x9F4B # <CJK> +0x9F4E # <CJK> +0x9F4F # <CJK> +0x9F52 # <CJK> +0x9F54 # <CJK> +0x9F5F # <CJK> +0x9F60 # <CJK> +0x9F61 # <CJK> +0x9F62 # <CJK> +0x9F63 # <CJK> +0x9F66 # <CJK> +0x9F67 # <CJK> +0x9F6A # <CJK> +0x9F6C # <CJK> +0x9F72 # <CJK> +0x9F76 # <CJK> +0x9F77 # <CJK> +0x9F8D # <CJK> +0x9F95 # <CJK> +0x9F9C # <CJK> +0x9F9D # <CJK> +0x9FA0 # <CJK> +#0xFFE5 # FULLWIDTH YEN SIGN diff --git a/fontconfig/fc-lang/ka.orth b/fontconfig/fc-lang/ka.orth index 3f5e17747..f135f3bc5 100644 --- a/fontconfig/fc-lang/ka.orth +++ b/fontconfig/fc-lang/ka.orth @@ -1,34 +1,34 @@ -#
-# fontconfig/fc-lang/ka.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Georgian (KA)
-# 0589 # Armenian full stop (vertsaket)
-#10a0-10c5 # capital letters, not used in normal writing
-10d0-10f0
-#10f1-10f6 # Archaic letters not included in modern fonts
-#10f7-10f8 # additional letters for Mingrelian and Svan
-#10fb # Ancient Georgian paragraph separator
-#2018 # single quote
-#201a # single quote
-#201c # double quote
-#201e # double quote
+# +# fontconfig/fc-lang/ka.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Georgian (KA) +# 0589 # Armenian full stop (vertsaket) +#10a0-10c5 # capital letters, not used in normal writing +10d0-10f0 +#10f1-10f6 # Archaic letters not included in modern fonts +#10f7-10f8 # additional letters for Mingrelian and Svan +#10fb # Ancient Georgian paragraph separator +#2018 # single quote +#201a # single quote +#201c # double quote +#201e # double quote diff --git a/fontconfig/fc-lang/kaa.orth b/fontconfig/fc-lang/kaa.orth index 4c2253434..b5ee6315c 100644 --- a/fontconfig/fc-lang/kaa.orth +++ b/fontconfig/fc-lang/kaa.orth @@ -1,110 +1,110 @@ -#
-# fontconfig/fc-lang/kaa.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Kara-Kalpak (Karakalpak) (KAA)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
-#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
-0492
-0493
-049a
-049b
-04a2
-04a3
-04ae
-04af
-04b2
-04b3
-04d8
-04d9
+# +# fontconfig/fc-lang/kaa.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Kara-Kalpak (Karakalpak) (KAA) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) +#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) +0492 +0493 +049a +049b +04a2 +04a3 +04ae +04af +04b2 +04b3 +04d8 +04d9 diff --git a/fontconfig/fc-lang/ki.orth b/fontconfig/fc-lang/ki.orth index 0d3e054ad..6de49253c 100644 --- a/fontconfig/fc-lang/ki.orth +++ b/fontconfig/fc-lang/ki.orth @@ -1,33 +1,33 @@ -#
-# fontconfig/fc-lang/ki.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kikuyu (KI)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
-0128 # LATIN CAPITAL LETTER I WITH TILDE
-0129 # LATIN SMALL LETTER I WITH TILDE
-0168 # LATIN CAPITAL LETTER U WITH TILDE
-0169 # LATIN SMALL LETTER U WITH TILDE
+# +# fontconfig/fc-lang/ki.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kikuyu (KI) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a +0128 # LATIN CAPITAL LETTER I WITH TILDE +0129 # LATIN SMALL LETTER I WITH TILDE +0168 # LATIN CAPITAL LETTER U WITH TILDE +0169 # LATIN SMALL LETTER U WITH TILDE diff --git a/fontconfig/fc-lang/kk.orth b/fontconfig/fc-lang/kk.orth index 9b59e2c39..8fbe803ad 100644 --- a/fontconfig/fc-lang/kk.orth +++ b/fontconfig/fc-lang/kk.orth @@ -1,45 +1,45 @@ -#
-# fontconfig/fc-lang/kk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kazakh (KK)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab
-#00bb
-#0401
-#0406
-0410-044f
-#0451
-0456
-0492-0493
-049a-049b
-04a2-04a3
-#04ae-04af
-#04b0-04b1
-04ba-04bb
-04d8-04d9
-04e8-04e9
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/kk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kazakh (KK) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab +#00bb +#0401 +#0406 +0410-044f +#0451 +0456 +0492-0493 +049a-049b +04a2-04a3 +#04ae-04af +#04b0-04b1 +04ba-04bb +04d8-04d9 +04e8-04e9 +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/kl.orth b/fontconfig/fc-lang/kl.orth index a6b818a6d..a32d926ce 100644 --- a/fontconfig/fc-lang/kl.orth +++ b/fontconfig/fc-lang/kl.orth @@ -1,63 +1,63 @@ -#
-# fontconfig/fc-lang/kl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Greenlandic (KL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00ab
-#00bb
-00c1
-00c2
-00c3
-00c5
-00c6
-#00c9
-00ca
-00cd
-00ce
-00d4
-00d8
-00da
-00db
-00e1
-00e2
-00e3
-00e5
-00e6
-#00e9
-00ea
-00ed
-00ee
-00f4
-00f8
-00fa
-00fb
-0128-0129
-0138
-0168-0169
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/kl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Greenlandic (KL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00ab +#00bb +00c1 +00c2 +00c3 +00c5 +00c6 +#00c9 +00ca +00cd +00ce +00d4 +00d8 +00da +00db +00e1 +00e2 +00e3 +00e5 +00e6 +#00e9 +00ea +00ed +00ee +00f4 +00f8 +00fa +00fb +0128-0129 +0138 +0168-0169 +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/kn.orth b/fontconfig/fc-lang/kn.orth index 8366a44bf..781d775d7 100644 --- a/fontconfig/fc-lang/kn.orth +++ b/fontconfig/fc-lang/kn.orth @@ -1,40 +1,40 @@ -#
-# fontconfig/fc-lang/kn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kannada (kn)
-#
-# Taken from the Unicode coverage of this language
-#
-0c82-0c83
-0c85-0c8c
-0c8e-0c90
-0c92-0ca8
-0caa-0cb3
-0cb5-0cb9
-0cbe-0cc4
-0cc6-0cc8
-0cca-0ccd
-0cd5-0cd6
-0cde
-0ce0-0ce1
-#0ce6-0cef # Digits
+# +# fontconfig/fc-lang/kn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kannada (kn) +# +# Taken from the Unicode coverage of this language +# +0c82-0c83 +0c85-0c8c +0c8e-0c90 +0c92-0ca8 +0caa-0cb3 +0cb5-0cb9 +0cbe-0cc4 +0cc6-0cc8 +0cca-0ccd +0cd5-0cd6 +0cde +0ce0-0ce1 +#0ce6-0cef # Digits diff --git a/fontconfig/fc-lang/ko.orth b/fontconfig/fc-lang/ko.orth index e2af7651a..39114a5af 100644 --- a/fontconfig/fc-lang/ko.orth +++ b/fontconfig/fc-lang/ko.orth @@ -1,2538 +1,2538 @@ -#
-# fontconfig/fc-lang/ko.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Korean (KO)
-#
-# Coverage from KS X 1001
-#
-# Does not include any Han characters as many Korean fonts
-# don't cover them, and modern Korean usage is moving away from them
-#
-# Tor Andersson <tor.andersson@gmail.com>
-#
-#0x3000 # IDEOGRAPHIC SPACE
-#0x3001 # IDEOGRAPHIC COMMA
-#0x3002 # IDEOGRAPHIC FULL STOP
-#0x327F # KOREAN STANDARD SYMBOL
-#0xFFE6 # FULLWIDTH WON SIGN
-0x3131 # HANGUL LETTER KIYEOK
-0x3132 # HANGUL LETTER SSANGKIYEOK
-0x3133 # HANGUL LETTER KIYEOK-SIOS
-0x3134 # HANGUL LETTER NIEUN
-0x3135 # HANGUL LETTER NIEUN-CIEUC
-0x3136 # HANGUL LETTER NIEUN-HIEUH
-0x3137 # HANGUL LETTER TIKEUT
-0x3138 # HANGUL LETTER SSANGTIKEUT
-0x3139 # HANGUL LETTER RIEUL
-0x313A # HANGUL LETTER RIEUL-KIYEOK
-0x313B # HANGUL LETTER RIEUL-MIEUM
-0x313C # HANGUL LETTER RIEUL-PIEUP
-0x313D # HANGUL LETTER RIEUL-SIOS
-0x313E # HANGUL LETTER RIEUL-THIEUTH
-0x313F # HANGUL LETTER RIEUL-PHIEUPH
-0x3140 # HANGUL LETTER RIEUL-HIEUH
-0x3141 # HANGUL LETTER MIEUM
-0x3142 # HANGUL LETTER PIEUP
-0x3143 # HANGUL LETTER SSANGPIEUP
-0x3144 # HANGUL LETTER PIEUP-SIOS
-0x3145 # HANGUL LETTER SIOS
-0x3146 # HANGUL LETTER SSANGSIOS
-0x3147 # HANGUL LETTER IEUNG
-0x3148 # HANGUL LETTER CIEUC
-0x3149 # HANGUL LETTER SSANGCIEUC
-0x314A # HANGUL LETTER CHIEUCH
-0x314B # HANGUL LETTER KHIEUKH
-0x314C # HANGUL LETTER THIEUTH
-0x314D # HANGUL LETTER PHIEUPH
-0x314E # HANGUL LETTER HIEUH
-0x314F # HANGUL LETTER A
-0x3150 # HANGUL LETTER AE
-0x3151 # HANGUL LETTER YA
-0x3152 # HANGUL LETTER YAE
-0x3153 # HANGUL LETTER EO
-0x3154 # HANGUL LETTER E
-0x3155 # HANGUL LETTER YEO
-0x3156 # HANGUL LETTER YE
-0x3157 # HANGUL LETTER O
-0x3158 # HANGUL LETTER WA
-0x3159 # HANGUL LETTER WAE
-0x315A # HANGUL LETTER OE
-0x315B # HANGUL LETTER YO
-0x315C # HANGUL LETTER U
-0x315D # HANGUL LETTER WEO
-0x315E # HANGUL LETTER WE
-0x315F # HANGUL LETTER WI
-0x3160 # HANGUL LETTER YU
-0x3161 # HANGUL LETTER EU
-0x3162 # HANGUL LETTER YI
-0x3163 # HANGUL LETTER I
-0x3164 # HANGUL FILLER
-0x3165 # HANGUL LETTER SSANGNIEUN
-0x3166 # HANGUL LETTER NIEUN-TIKEUT
-0x3167 # HANGUL LETTER NIEUN-SIOS
-0x3168 # HANGUL LETTER NIEUN-PANSIOS
-0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS
-0x316A # HANGUL LETTER RIEUL-TIKEUT
-0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS
-0x316C # HANGUL LETTER RIEUL-PANSIOS
-0x316D # HANGUL LETTER RIEUL-YEORINHIEUH
-0x316E # HANGUL LETTER MIEUM-PIEUP
-0x316F # HANGUL LETTER MIEUM-SIOS
-0x3170 # HANGUL LETTER MIEUM-PANSIOS
-0x3171 # HANGUL LETTER KAPYEOUNMIEUM
-0x3172 # HANGUL LETTER PIEUP-KIYEOK
-0x3173 # HANGUL LETTER PIEUP-TIKEUT
-0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK
-0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT
-0x3176 # HANGUL LETTER PIEUP-CIEUC
-0x3177 # HANGUL LETTER PIEUP-THIEUTH
-0x3178 # HANGUL LETTER KAPYEOUNPIEUP
-0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP
-0x317A # HANGUL LETTER SIOS-KIYEOK
-0x317B # HANGUL LETTER SIOS-NIEUN
-0x317C # HANGUL LETTER SIOS-TIKEUT
-0x317D # HANGUL LETTER SIOS-PIEUP
-0x317E # HANGUL LETTER SIOS-CIEUC
-0x317F # HANGUL LETTER PANSIOS
-0x3180 # HANGUL LETTER SSANGIEUNG
-0x3181 # HANGUL LETTER YESIEUNG
-0x3182 # HANGUL LETTER YESIEUNG-SIOS
-0x3183 # HANGUL LETTER YESIEUNG-PANSIOS
-0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH
-0x3185 # HANGUL LETTER SSANGHIEUH
-0x3186 # HANGUL LETTER YEORINHIEUH
-0x3187 # HANGUL LETTER YO-YA
-0x3188 # HANGUL LETTER YO-YAE
-0x3189 # HANGUL LETTER YO-I
-0x318A # HANGUL LETTER YU-YEO
-0x318B # HANGUL LETTER YU-YE
-0x318C # HANGUL LETTER YU-I
-0x318D # HANGUL LETTER ARAEA
-0x318E # HANGUL LETTER ARAEAE
-#0x3260 # CIRCLED HANGUL KIYEOK
-#0x3261 # CIRCLED HANGUL NIEUN
-#0x3262 # CIRCLED HANGUL TIKEUT
-#0x3263 # CIRCLED HANGUL RIEUL
-#0x3264 # CIRCLED HANGUL MIEUM
-#0x3265 # CIRCLED HANGUL PIEUP
-#0x3266 # CIRCLED HANGUL SIOS
-#0x3267 # CIRCLED HANGUL IEUNG
-#0x3268 # CIRCLED HANGUL CIEUC
-#0x3269 # CIRCLED HANGUL CHIEUCH
-#0x326A # CIRCLED HANGUL KHIEUKH
-#0x326B # CIRCLED HANGUL THIEUTH
-#0x326C # CIRCLED HANGUL PHIEUPH
-#0x326D # CIRCLED HANGUL HIEUH
-#0x326E # CIRCLED HANGUL KIYEOK A
-#0x326F # CIRCLED HANGUL NIEUN A
-#0x3270 # CIRCLED HANGUL TIKEUT A
-#0x3271 # CIRCLED HANGUL RIEUL A
-#0x3272 # CIRCLED HANGUL MIEUM A
-#0x3273 # CIRCLED HANGUL PIEUP A
-#0x3274 # CIRCLED HANGUL SIOS A
-#0x3275 # CIRCLED HANGUL IEUNG A
-#0x3276 # CIRCLED HANGUL CIEUC A
-#0x3277 # CIRCLED HANGUL CHIEUCH A
-#0x3278 # CIRCLED HANGUL KHIEUKH A
-#0x3279 # CIRCLED HANGUL THIEUTH A
-#0x327A # CIRCLED HANGUL PHIEUPH A
-#0x327B # CIRCLED HANGUL HIEUH A
-#0x3200 # PARENTHESIZED HANGUL KIYEOK
-#0x3201 # PARENTHESIZED HANGUL NIEUN
-#0x3202 # PARENTHESIZED HANGUL TIKEUT
-#0x3203 # PARENTHESIZED HANGUL RIEUL
-#0x3204 # PARENTHESIZED HANGUL MIEUM
-#0x3205 # PARENTHESIZED HANGUL PIEUP
-#0x3206 # PARENTHESIZED HANGUL SIOS
-#0x3207 # PARENTHESIZED HANGUL IEUNG
-#0x3208 # PARENTHESIZED HANGUL CIEUC
-#0x3209 # PARENTHESIZED HANGUL CHIEUCH
-#0x320A # PARENTHESIZED HANGUL KHIEUKH
-#0x320B # PARENTHESIZED HANGUL THIEUTH
-#0x320C # PARENTHESIZED HANGUL PHIEUPH
-#0x320D # PARENTHESIZED HANGUL HIEUH
-#0x320E # PARENTHESIZED HANGUL KIYEOK A
-#0x320F # PARENTHESIZED HANGUL NIEUN A
-#0x3210 # PARENTHESIZED HANGUL TIKEUT A
-#0x3211 # PARENTHESIZED HANGUL RIEUL A
-#0x3212 # PARENTHESIZED HANGUL MIEUM A
-#0x3213 # PARENTHESIZED HANGUL PIEUP A
-#0x3214 # PARENTHESIZED HANGUL SIOS A
-#0x3215 # PARENTHESIZED HANGUL IEUNG A
-#0x3216 # PARENTHESIZED HANGUL CIEUC A
-#0x3217 # PARENTHESIZED HANGUL CHIEUCH A
-#0x3218 # PARENTHESIZED HANGUL KHIEUKH A
-#0x3219 # PARENTHESIZED HANGUL THIEUTH A
-#0x321A # PARENTHESIZED HANGUL PHIEUPH A
-#0x321B # PARENTHESIZED HANGUL HIEUH A
-#0x321C # PARENTHESIZED HANGUL CIEUC U
-0xAC00 # HANGUL SYLLABLE KIYEOK-A
-0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK
-0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN
-0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT
-0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL
-0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK
-0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM
-0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM
-0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP
-0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS
-0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS
-0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS
-0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG
-0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC
-0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH
-0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH
-0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH
-0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH
-0xAC1C # HANGUL SYLLABLE KIYEOK-AE
-0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK
-0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN
-0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL
-0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM
-0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP
-0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS
-0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS
-0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG
-0xAC38 # HANGUL SYLLABLE KIYEOK-YA
-0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK
-0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN
-0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL
-0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS
-0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG
-0xAC54 # HANGUL SYLLABLE KIYEOK-YAE
-0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN
-0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL
-0xAC70 # HANGUL SYLLABLE KIYEOK-EO
-0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK
-0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN
-0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT
-0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL
-0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM
-0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM
-0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP
-0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS
-0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS
-0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG
-0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC
-0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH
-0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH
-0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH
-0xAC8C # HANGUL SYLLABLE KIYEOK-E
-0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN
-0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL
-0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM
-0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP
-0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS
-0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS
-0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG
-0xACA8 # HANGUL SYLLABLE KIYEOK-YEO
-0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK
-0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK
-0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN
-0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT
-0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL
-0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM
-0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP
-0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS
-0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS
-0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG
-0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH
-0xACC4 # HANGUL SYLLABLE KIYEOK-YE
-0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN
-0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL
-0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP
-0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS
-0xACE0 # HANGUL SYLLABLE KIYEOK-O
-0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK
-0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN
-0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT
-0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL
-0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM
-0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS
-0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH
-0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM
-0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP
-0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS
-0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG
-0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC
-0xACFC # HANGUL SYLLABLE KIYEOK-WA
-0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK
-0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN
-0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL
-0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM
-0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM
-0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP
-0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS
-0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG
-0xAD18 # HANGUL SYLLABLE KIYEOK-WAE
-0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN
-0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL
-0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP
-0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS
-0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG
-0xAD34 # HANGUL SYLLABLE KIYEOK-OE
-0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK
-0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN
-0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL
-0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM
-0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP
-0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS
-0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG
-0xAD50 # HANGUL SYLLABLE KIYEOK-YO
-0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN
-0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL
-0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP
-0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS
-0xAD6C # HANGUL SYLLABLE KIYEOK-U
-0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK
-0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN
-0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT
-0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL
-0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK
-0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM
-0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH
-0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM
-0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP
-0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS
-0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG
-0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC
-0xAD88 # HANGUL SYLLABLE KIYEOK-WEO
-0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK
-0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN
-0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL
-0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS
-0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG
-0xADA4 # HANGUL SYLLABLE KIYEOK-WE
-0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS
-0xADC0 # HANGUL SYLLABLE KIYEOK-WI
-0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK
-0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN
-0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL
-0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM
-0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP
-0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS
-0xADDC # HANGUL SYLLABLE KIYEOK-YU
-0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN
-0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL
-0xADF8 # HANGUL SYLLABLE KIYEOK-EU
-0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK
-0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN
-0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT
-0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL
-0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK
-0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM
-0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP
-0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS
-0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG
-0xAE14 # HANGUL SYLLABLE KIYEOK-YI
-0xAE30 # HANGUL SYLLABLE KIYEOK-I
-0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK
-0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN
-0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT
-0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL
-0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM
-0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM
-0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP
-0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS
-0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG
-0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC
-0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH
-0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A
-0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK
-0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK
-0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN
-0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL
-0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM
-0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM
-0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP
-0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS
-0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS
-0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG
-0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH
-0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE
-0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK
-0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN
-0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL
-0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM
-0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP
-0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS
-0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS
-0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG
-0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA
-0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK
-0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL
-0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO
-0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK
-0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK
-0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN
-0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL
-0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM
-0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP
-0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS
-0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS
-0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG
-0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E
-0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK
-0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN
-0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM
-0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS
-0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG
-0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO
-0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN
-0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL
-0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS
-0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS
-0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH
-0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE
-0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O
-0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK
-0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN
-0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH
-0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL
-0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM
-0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP
-0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS
-0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG
-0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC
-0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH
-0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA
-0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK
-0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL
-0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS
-0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG
-0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE
-0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK
-0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG
-0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE
-0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN
-0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL
-0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM
-0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP
-0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG
-0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO
-0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U
-0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK
-0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN
-0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL
-0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH
-0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM
-0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP
-0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS
-0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG
-0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC
-0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO
-0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL
-0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS
-0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG
-0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE
-0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK
-0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN
-0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL
-0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM
-0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP
-0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS
-0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI
-0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN
-0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL
-0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM
-0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP
-0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU
-0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU
-0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK
-0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN
-0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH
-0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL
-0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM
-0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH
-0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM
-0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP
-0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS
-0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG
-0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH
-0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I
-0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK
-0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN
-0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL
-0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM
-0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP
-0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS
-0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG
-0xB098 # HANGUL SYLLABLE NIEUN-A
-0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK
-0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK
-0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN
-0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT
-0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL
-0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK
-0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM
-0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM
-0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP
-0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS
-0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS
-0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG
-0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC
-0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH
-0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH
-0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH
-0xB0B4 # HANGUL SYLLABLE NIEUN-AE
-0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK
-0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN
-0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL
-0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM
-0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP
-0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS
-0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS
-0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG
-0xB0D0 # HANGUL SYLLABLE NIEUN-YA
-0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK
-0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN
-0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL
-0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM
-0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG
-0xB108 # HANGUL SYLLABLE NIEUN-EO
-0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK
-0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS
-0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN
-0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL
-0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM
-0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP
-0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM
-0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP
-0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS
-0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS
-0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG
-0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH
-0xB124 # HANGUL SYLLABLE NIEUN-E
-0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK
-0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN
-0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL
-0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM
-0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP
-0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS
-0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS
-0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG
-0xB140 # HANGUL SYLLABLE NIEUN-YEO
-0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK
-0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN
-0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL
-0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM
-0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP
-0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS
-0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG
-0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH
-0xB15C # HANGUL SYLLABLE NIEUN-YE
-0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN
-0xB178 # HANGUL SYLLABLE NIEUN-O
-0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK
-0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN
-0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL
-0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM
-0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM
-0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP
-0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS
-0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG
-0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH
-0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH
-0xB194 # HANGUL SYLLABLE NIEUN-WA
-0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN
-0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL
-0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS
-0xB1CC # HANGUL SYLLABLE NIEUN-OE
-0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN
-0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL
-0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM
-0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP
-0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS
-0xB1E8 # HANGUL SYLLABLE NIEUN-YO
-0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK
-0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN
-0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL
-0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP
-0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS
-0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG
-0xB204 # HANGUL SYLLABLE NIEUN-U
-0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK
-0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN
-0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT
-0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL
-0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM
-0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP
-0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS
-0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG
-0xB220 # HANGUL SYLLABLE NIEUN-WEO
-0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS
-0xB23C # HANGUL SYLLABLE NIEUN-WE
-0xB258 # HANGUL SYLLABLE NIEUN-WI
-0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN
-0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL
-0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM
-0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP
-0xB274 # HANGUL SYLLABLE NIEUN-YU
-0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK
-0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL
-0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM
-0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP
-0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG
-0xB290 # HANGUL SYLLABLE NIEUN-EU
-0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK
-0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN
-0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL
-0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK
-0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM
-0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM
-0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP
-0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS
-0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG
-0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC
-0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH
-0xB2AC # HANGUL SYLLABLE NIEUN-YI
-0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN
-0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL
-0xB2C8 # HANGUL SYLLABLE NIEUN-I
-0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK
-0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN
-0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL
-0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95>
-0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM
-0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP
-0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS
-0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG
-0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH
-0xB2E4 # HANGUL SYLLABLE TIKEUT-A
-0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK
-0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK
-0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN
-0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT
-0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL
-0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK
-0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM
-0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP
-0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH
-0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM
-0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP
-0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS
-0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS
-0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG
-0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC
-0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH
-0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH
-0xB300 # HANGUL SYLLABLE TIKEUT-AE
-0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK
-0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN
-0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL
-0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM
-0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP
-0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS
-0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS
-0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG
-0xB31C # HANGUL SYLLABLE TIKEUT-YA
-0xB354 # HANGUL SYLLABLE TIKEUT-EO
-0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK
-0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK
-0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN
-0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT
-0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL
-0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM
-0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP
-0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM
-0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP
-0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS
-0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG
-0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH
-0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH
-0xB370 # HANGUL SYLLABLE TIKEUT-E
-0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK
-0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN
-0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL
-0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM
-0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP
-0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS
-0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS
-0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG
-0xB38C # HANGUL SYLLABLE TIKEUT-YEO
-0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN
-0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL
-0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS
-0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG
-0xB3A8 # HANGUL SYLLABLE TIKEUT-YE
-0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN
-0xB3C4 # HANGUL SYLLABLE TIKEUT-O
-0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK
-0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN
-0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT
-0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL
-0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM
-0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS
-0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM
-0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP
-0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS
-0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG
-0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH
-0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH
-0xB3E0 # HANGUL SYLLABLE TIKEUT-WA
-0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN
-0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL
-0xB3FC # HANGUL SYLLABLE TIKEUT-WAE
-0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS
-0xB418 # HANGUL SYLLABLE TIKEUT-OE
-0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN
-0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL
-0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM
-0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP
-0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS
-0xB434 # HANGUL SYLLABLE TIKEUT-YO
-0xB450 # HANGUL SYLLABLE TIKEUT-U
-0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK
-0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN
-0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL
-0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM
-0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP
-0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS
-0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG
-0xB46C # HANGUL SYLLABLE TIKEUT-WEO
-0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS
-0xB488 # HANGUL SYLLABLE TIKEUT-WE
-0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG
-0xB4A4 # HANGUL SYLLABLE TIKEUT-WI
-0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN
-0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL
-0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP
-0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS
-0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG
-0xB4C0 # HANGUL SYLLABLE TIKEUT-YU
-0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN
-0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL
-0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM
-0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG
-0xB4DC # HANGUL SYLLABLE TIKEUT-EU
-0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK
-0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN
-0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT
-0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL
-0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM
-0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM
-0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP
-0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS
-0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG
-0xB4F8 # HANGUL SYLLABLE TIKEUT-YI
-0xB514 # HANGUL SYLLABLE TIKEUT-I
-0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK
-0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN
-0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT
-0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL
-0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM
-0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP
-0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS
-0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS
-0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG
-0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC
-0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A
-0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK
-0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN
-0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL
-0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM
-0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP
-0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS
-0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS
-0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG
-0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH
-0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE
-0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK
-0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN
-0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL
-0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM
-0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP
-0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS
-0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS
-0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG
-0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO
-0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK
-0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN
-0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL
-0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM
-0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP
-0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM
-0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP
-0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS
-0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS
-0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG
-0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH
-0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E
-0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK
-0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN
-0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL
-0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM
-0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP
-0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS
-0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS
-0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG
-0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO
-0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS
-0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O
-0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK
-0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN
-0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL
-0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG
-0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA
-0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL
-0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE
-0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE
-0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN
-0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U
-0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK
-0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN
-0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL
-0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH
-0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM
-0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG
-0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE
-0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI
-0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN
-0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL
-0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM
-0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP
-0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG
-0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU
-0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK
-0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN
-0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT
-0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL
-0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM
-0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP
-0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS
-0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI
-0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN
-0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL
-0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM
-0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP
-0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I
-0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN
-0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL
-0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM
-0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP
-0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS
-0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG
-0xB77C # HANGUL SYLLABLE RIEUL-A
-0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK
-0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN
-0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL
-0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM
-0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP
-0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS
-0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS
-0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG
-0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC
-0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH
-0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH
-0xB798 # HANGUL SYLLABLE RIEUL-AE
-0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK
-0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN
-0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL
-0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM
-0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP
-0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS
-0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS
-0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG
-0xB7B4 # HANGUL SYLLABLE RIEUL-YA
-0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK
-0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN
-0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS
-0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG
-0xB7EC # HANGUL SYLLABLE RIEUL-EO
-0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK
-0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN
-0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL
-0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM
-0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP
-0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS
-0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS
-0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG
-0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH
-0xB808 # HANGUL SYLLABLE RIEUL-E
-0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK
-0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN
-0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL
-0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM
-0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP
-0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS
-0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG
-0xB824 # HANGUL SYLLABLE RIEUL-YEO
-0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK
-0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN
-0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL
-0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM
-0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP
-0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS
-0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS
-0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG
-0xB840 # HANGUL SYLLABLE RIEUL-YE
-0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN
-0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP
-0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS
-0xB85C # HANGUL SYLLABLE RIEUL-O
-0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK
-0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN
-0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL
-0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM
-0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP
-0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS
-0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG
-0xB878 # HANGUL SYLLABLE RIEUL-WA
-0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN
-0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG
-0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS
-0xB8B0 # HANGUL SYLLABLE RIEUL-OE
-0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN
-0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL
-0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM
-0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP
-0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS
-0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG
-0xB8CC # HANGUL SYLLABLE RIEUL-YO
-0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN
-0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL
-0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP
-0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS
-0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG
-0xB8E8 # HANGUL SYLLABLE RIEUL-U
-0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK
-0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN
-0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL
-0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM
-0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP
-0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS
-0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG
-0xB904 # HANGUL SYLLABLE RIEUL-WEO
-0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS
-0xB920 # HANGUL SYLLABLE RIEUL-WE
-0xB93C # HANGUL SYLLABLE RIEUL-WI
-0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK
-0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN
-0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL
-0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM
-0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS
-0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG
-0xB958 # HANGUL SYLLABLE RIEUL-YU
-0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK
-0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN
-0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL
-0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM
-0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP
-0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS
-0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG
-0xB974 # HANGUL SYLLABLE RIEUL-EU
-0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK
-0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN
-0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL
-0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM
-0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP
-0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS
-0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG
-0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC
-0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH
-0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH
-0xB9AC # HANGUL SYLLABLE RIEUL-I
-0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK
-0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN
-0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL
-0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM
-0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP
-0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS
-0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG
-0xB9C8 # HANGUL SYLLABLE MIEUM-A
-0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK
-0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN
-0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH
-0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT
-0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL
-0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK
-0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM
-0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM
-0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP
-0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS
-0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG
-0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC
-0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH
-0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH
-0xB9E4 # HANGUL SYLLABLE MIEUM-AE
-0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK
-0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN
-0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL
-0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM
-0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP
-0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS
-0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS
-0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG
-0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC
-0xBA00 # HANGUL SYLLABLE MIEUM-YA
-0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK
-0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL
-0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG
-0xBA38 # HANGUL SYLLABLE MIEUM-EO
-0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK
-0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN
-0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL
-0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM
-0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM
-0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP
-0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS
-0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG
-0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC
-0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH
-0xBA54 # HANGUL SYLLABLE MIEUM-E
-0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK
-0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN
-0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL
-0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM
-0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP
-0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS
-0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS
-0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG
-0xBA70 # HANGUL SYLLABLE MIEUM-YEO
-0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK
-0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN
-0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL
-0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS
-0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS
-0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG
-0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH
-0xBA8C # HANGUL SYLLABLE MIEUM-YE
-0xBAA8 # HANGUL SYLLABLE MIEUM-O
-0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK
-0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS
-0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN
-0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL
-0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM
-0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM
-0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP
-0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS
-0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG
-0xBAC4 # HANGUL SYLLABLE MIEUM-WA
-0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN
-0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS
-0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG
-0xBAFC # HANGUL SYLLABLE MIEUM-OE
-0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN
-0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL
-0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP
-0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS
-0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG
-0xBB18 # HANGUL SYLLABLE MIEUM-YO
-0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN
-0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL
-0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP
-0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS
-0xBB34 # HANGUL SYLLABLE MIEUM-U
-0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK
-0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK
-0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN
-0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT
-0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL
-0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK
-0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM
-0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM
-0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP
-0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS
-0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG
-0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH
-0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH
-0xBB50 # HANGUL SYLLABLE MIEUM-WEO
-0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN
-0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL
-0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP
-0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS
-0xBB6C # HANGUL SYLLABLE MIEUM-WE
-0xBB88 # HANGUL SYLLABLE MIEUM-WI
-0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN
-0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL
-0xBBA4 # HANGUL SYLLABLE MIEUM-YU
-0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN
-0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL
-0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM
-0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS
-0xBBC0 # HANGUL SYLLABLE MIEUM-EU
-0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN
-0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL
-0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM
-0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS
-0xBBF8 # HANGUL SYLLABLE MIEUM-I
-0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK
-0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN
-0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT
-0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL
-0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM
-0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM
-0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP
-0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS
-0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS
-0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG
-0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH
-0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH
-0xBC14 # HANGUL SYLLABLE PIEUP-A
-0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK
-0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK
-0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS
-0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN
-0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT
-0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL
-0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK
-0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM
-0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP
-0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM
-0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP
-0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS
-0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG
-0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH
-0xBC30 # HANGUL SYLLABLE PIEUP-AE
-0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK
-0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN
-0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL
-0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM
-0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP
-0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS
-0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS
-0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG
-0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH
-0xBC4C # HANGUL SYLLABLE PIEUP-YA
-0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK
-0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN
-0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP
-0xBC84 # HANGUL SYLLABLE PIEUP-EO
-0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK
-0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN
-0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT
-0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL
-0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM
-0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM
-0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP
-0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS
-0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG
-0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC
-0xBCA0 # HANGUL SYLLABLE PIEUP-E
-0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK
-0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN
-0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT
-0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL
-0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM
-0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP
-0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS
-0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS
-0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG
-0xBCBC # HANGUL SYLLABLE PIEUP-YEO
-0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK
-0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN
-0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL
-0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP
-0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS
-0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS
-0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG
-0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH
-0xBCD8 # HANGUL SYLLABLE PIEUP-YE
-0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN
-0xBCF4 # HANGUL SYLLABLE PIEUP-O
-0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK
-0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK
-0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN
-0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL
-0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM
-0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP
-0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS
-0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG
-0xBD10 # HANGUL SYLLABLE PIEUP-WA
-0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN
-0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS
-0xBD2C # HANGUL SYLLABLE PIEUP-WAE
-0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS
-0xBD48 # HANGUL SYLLABLE PIEUP-OE
-0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK
-0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN
-0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL
-0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM
-0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP
-0xBD64 # HANGUL SYLLABLE PIEUP-YO
-0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN
-0xBD80 # HANGUL SYLLABLE PIEUP-U
-0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK
-0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN
-0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT
-0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL
-0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK
-0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM
-0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM
-0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP
-0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS
-0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG
-0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH
-0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH
-0xBD9C # HANGUL SYLLABLE PIEUP-WEO
-0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL
-0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS
-0xBDB8 # HANGUL SYLLABLE PIEUP-WE
-0xBDD4 # HANGUL SYLLABLE PIEUP-WI
-0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK
-0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN
-0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL
-0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG
-0xBDF0 # HANGUL SYLLABLE PIEUP-YU
-0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN
-0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL
-0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM
-0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS
-0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG
-0xBE0C # HANGUL SYLLABLE PIEUP-EU
-0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK
-0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN
-0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL
-0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM
-0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP
-0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS
-0xBE44 # HANGUL SYLLABLE PIEUP-I
-0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK
-0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN
-0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL
-0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM
-0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM
-0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP
-0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS
-0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG
-0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC
-0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH
-0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A
-0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK
-0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN
-0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL
-0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM
-0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM
-0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP
-0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS
-0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS
-0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG
-0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH
-0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE
-0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK
-0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN
-0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL
-0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM
-0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP
-0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS
-0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS
-0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG
-0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA
-0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK
-0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM
-0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO
-0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK
-0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN
-0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT
-0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL
-0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM
-0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS
-0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS
-0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG
-0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E
-0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG
-0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO
-0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK
-0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM
-0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP
-0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS
-0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS
-0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG
-0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O
-0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK
-0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN
-0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL
-0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM
-0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP
-0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG
-0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE
-0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO
-0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG
-0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U
-0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK
-0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN
-0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL
-0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM
-0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS
-0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG
-0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU
-0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG
-0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU
-0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN
-0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL
-0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM
-0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP
-0xC090 # HANGUL SYLLABLE SSANGPIEUP-I
-0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK
-0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN
-0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL
-0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM
-0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP
-0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS
-0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG
-0xC0AC # HANGUL SYLLABLE SIOS-A
-0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK
-0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS
-0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN
-0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT
-0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL
-0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK
-0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM
-0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM
-0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP
-0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS
-0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS
-0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG
-0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH
-0xC0C8 # HANGUL SYLLABLE SIOS-AE
-0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK
-0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN
-0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL
-0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM
-0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP
-0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS
-0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS
-0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG
-0xC0E4 # HANGUL SYLLABLE SIOS-YA
-0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK
-0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN
-0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL
-0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM
-0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP
-0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS
-0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG
-0xC100 # HANGUL SYLLABLE SIOS-YAE
-0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN
-0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL
-0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM
-0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG
-0xC11C # HANGUL SYLLABLE SIOS-EO
-0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK
-0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK
-0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS
-0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN
-0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT
-0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL
-0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM
-0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP
-0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM
-0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP
-0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS
-0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS
-0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG
-0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH
-0xC138 # HANGUL SYLLABLE SIOS-E
-0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK
-0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN
-0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL
-0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM
-0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP
-0xC14B # HANGUL SYLLABLE SIOS-E-SIOS
-0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS
-0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG
-0xC154 # HANGUL SYLLABLE SIOS-YEO
-0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK
-0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN
-0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL
-0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM
-0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP
-0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS
-0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS
-0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG
-0xC170 # HANGUL SYLLABLE SIOS-YE
-0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN
-0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL
-0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG
-0xC18C # HANGUL SYLLABLE SIOS-O
-0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK
-0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK
-0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN
-0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL
-0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM
-0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM
-0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP
-0xC19F # HANGUL SYLLABLE SIOS-O-SIOS
-0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG
-0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH
-0xC1A8 # HANGUL SYLLABLE SIOS-WA
-0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK
-0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN
-0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL
-0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG
-0xC1C4 # HANGUL SYLLABLE SIOS-WAE
-0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN
-0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL
-0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM
-0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS
-0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS
-0xC1E0 # HANGUL SYLLABLE SIOS-OE
-0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN
-0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL
-0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM
-0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP
-0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS
-0xC1FC # HANGUL SYLLABLE SIOS-YO
-0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK
-0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN
-0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL
-0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM
-0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP
-0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS
-0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG
-0xC218 # HANGUL SYLLABLE SIOS-U
-0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK
-0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN
-0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT
-0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL
-0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM
-0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP
-0xC22B # HANGUL SYLLABLE SIOS-U-SIOS
-0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG
-0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH
-0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH
-0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH
-0xC234 # HANGUL SYLLABLE SIOS-WEO
-0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS
-0xC250 # HANGUL SYLLABLE SIOS-WE
-0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK
-0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN
-0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL
-0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM
-0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG
-0xC26C # HANGUL SYLLABLE SIOS-WI
-0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK
-0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN
-0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL
-0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM
-0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP
-0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS
-0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG
-0xC288 # HANGUL SYLLABLE SIOS-YU
-0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK
-0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL
-0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM
-0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS
-0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG
-0xC2A4 # HANGUL SYLLABLE SIOS-EU
-0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK
-0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN
-0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL
-0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK
-0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM
-0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP
-0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS
-0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG
-0xC2DC # HANGUL SYLLABLE SIOS-I
-0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK
-0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN
-0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT
-0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL
-0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH
-0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM
-0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP
-0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS
-0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG
-0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH
-0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A
-0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK
-0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS
-0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN
-0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL
-0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM
-0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP
-0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS
-0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG
-0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH
-0xC314 # HANGUL SYLLABLE SSANGSIOS-AE
-0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK
-0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN
-0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL
-0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM
-0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP
-0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS
-0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG
-0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG
-0xC368 # HANGUL SYLLABLE SSANGSIOS-EO
-0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK
-0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN
-0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL
-0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM
-0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM
-0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP
-0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS
-0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG
-0xC384 # HANGUL SYLLABLE SSANGSIOS-E
-0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN
-0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL
-# 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN # (dotum.ttf, hline.ttf)
-0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O
-0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK
-0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN
-0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT
-0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL
-0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM
-0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM
-0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP
-0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG
-0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA
-0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK
-0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN
-0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS
-0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE
-0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS
-0xC42C # HANGUL SYLLABLE SSANGSIOS-OE
-0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN
-0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL
-0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM
-0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP
-0xC448 # HANGUL SYLLABLE SSANGSIOS-YO
-0xC464 # HANGUL SYLLABLE SSANGSIOS-U
-0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK
-0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN
-0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL
-0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM
-0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP
-0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG
-0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO
-0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS
-0xC49C # HANGUL SYLLABLE SSANGSIOS-WE
-0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI
-0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN
-0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG
-0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU
-0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK
-0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN
-0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL
-0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM
-0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH
-0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM
-0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP
-0xC50C # HANGUL SYLLABLE SSANGSIOS-YI
-0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN
-0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL
-0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM
-0xC528 # HANGUL SYLLABLE SSANGSIOS-I
-0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK
-0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN
-0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL
-0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM
-0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP
-0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS
-0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG
-0xC544 # HANGUL SYLLABLE IEUNG-A
-0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK
-0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN
-0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC
-0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH
-0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL
-0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK
-0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM
-0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH
-0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM
-0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP
-0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS
-0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS
-0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG
-0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH
-0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH
-0xC560 # HANGUL SYLLABLE IEUNG-AE
-0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK
-0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN
-0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL
-0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM
-0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP
-0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS
-0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS
-0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG
-0xC57C # HANGUL SYLLABLE IEUNG-YA
-0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK
-0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN
-0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL
-0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP
-0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM
-0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP
-0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS
-0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG
-0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH
-0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH
-0xC598 # HANGUL SYLLABLE IEUNG-YAE
-0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN
-0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL
-0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP
-0xC5B4 # HANGUL SYLLABLE IEUNG-EO
-0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK
-0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN
-0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC
-0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT
-0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL
-0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK
-0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM
-0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM
-0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP
-0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS
-0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS
-0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS
-0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG
-0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC
-0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH
-0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH
-0xC5D0 # HANGUL SYLLABLE IEUNG-E
-0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK
-0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN
-0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL
-0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM
-0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP
-0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS
-0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG
-0xC5EC # HANGUL SYLLABLE IEUNG-YEO
-0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK
-0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK
-0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN
-0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL
-0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM
-0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP
-0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM
-0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP
-0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS
-0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS
-0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS
-0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG
-0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH
-0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH
-0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH
-0xC608 # HANGUL SYLLABLE IEUNG-YE
-0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN
-0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL
-0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM
-0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP
-0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS
-0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS
-0xC624 # HANGUL SYLLABLE IEUNG-O
-0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK
-0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN
-0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL
-0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK
-0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM
-0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS
-0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH
-0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM
-0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP
-0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS
-0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG
-0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH
-0xC640 # HANGUL SYLLABLE IEUNG-WA
-0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK
-0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN
-0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL
-0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM
-0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP
-0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS
-0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS
-0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG
-0xC65C # HANGUL SYLLABLE IEUNG-WAE
-0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK
-0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN
-0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM
-0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS
-0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG
-0xC678 # HANGUL SYLLABLE IEUNG-OE
-0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK
-0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN
-0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL
-0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM
-0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP
-0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS
-0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG
-0xC694 # HANGUL SYLLABLE IEUNG-YO
-0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK
-0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN
-0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL
-0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM
-0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP
-0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS
-0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG
-0xC6B0 # HANGUL SYLLABLE IEUNG-U
-0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK
-0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN
-0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL
-0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK
-0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM
-0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM
-0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP
-0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS
-0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG
-0xC6CC # HANGUL SYLLABLE IEUNG-WEO
-0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK
-0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN
-0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL
-0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM
-0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP
-0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS
-0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG
-0xC6E8 # HANGUL SYLLABLE IEUNG-WE
-0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK
-0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN
-0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL
-0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM
-0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP
-0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG
-0xC704 # HANGUL SYLLABLE IEUNG-WI
-0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK
-0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN
-0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL
-0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM
-0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP
-0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS
-0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG
-0xC720 # HANGUL SYLLABLE IEUNG-YU
-0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK
-0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN
-0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL
-0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM
-0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP
-0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS
-0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG
-0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH
-0xC73C # HANGUL SYLLABLE IEUNG-EU
-0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK
-0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN
-0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL
-0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH
-0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM
-0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP
-0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS
-0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG
-0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC
-0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH
-0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH
-0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH
-0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH
-0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH
-0xC758 # HANGUL SYLLABLE IEUNG-YI
-0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN
-0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL
-0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM
-0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS
-0xC774 # HANGUL SYLLABLE IEUNG-I
-0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK
-0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN
-0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL
-0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK
-0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM
-0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH
-0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM
-0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP
-0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS
-0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS
-0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG
-0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC
-0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH
-0xC790 # HANGUL SYLLABLE CIEUC-A
-0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK
-0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN
-0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH
-0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT
-0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL
-0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM
-0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM
-0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP
-0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS
-0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS
-0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG
-0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC
-0xC7AC # HANGUL SYLLABLE CIEUC-AE
-0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK
-0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN
-0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL
-0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM
-0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP
-0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS
-0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS
-0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG
-0xC7C8 # HANGUL SYLLABLE CIEUC-YA
-0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK
-0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN
-0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH
-0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL
-0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM
-0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG
-0xC7E4 # HANGUL SYLLABLE CIEUC-YAE
-0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN
-0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL
-0xC800 # HANGUL SYLLABLE CIEUC-EO
-0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK
-0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN
-0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL
-0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM
-0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM
-0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP
-0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS
-0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG
-0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC
-0xC81C # HANGUL SYLLABLE CIEUC-E
-0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK
-0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN
-0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL
-0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM
-0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP
-0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS
-0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG
-0xC838 # HANGUL SYLLABLE CIEUC-YEO
-0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN
-0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL
-0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM
-0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP
-0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS
-0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG
-0xC854 # HANGUL SYLLABLE CIEUC-YE
-0xC870 # HANGUL SYLLABLE CIEUC-O
-0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK
-0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN
-0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL
-0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM
-0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM
-0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP
-0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS
-0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG
-0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC
-0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH
-0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH
-0xC88C # HANGUL SYLLABLE CIEUC-WA
-0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK
-0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL
-0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP
-0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS
-0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG
-0xC8A8 # HANGUL SYLLABLE CIEUC-WAE
-0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS
-0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG
-0xC8C4 # HANGUL SYLLABLE CIEUC-OE
-0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN
-0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL
-0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM
-0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP
-0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS
-0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG
-0xC8E0 # HANGUL SYLLABLE CIEUC-YO
-0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK
-0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN
-0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG
-0xC8FC # HANGUL SYLLABLE CIEUC-U
-0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK
-0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN
-0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL
-0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK
-0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM
-0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM
-0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP
-0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS
-0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG
-0xC918 # HANGUL SYLLABLE CIEUC-WEO
-0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS
-0xC934 # HANGUL SYLLABLE CIEUC-WE
-0xC950 # HANGUL SYLLABLE CIEUC-WI
-0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK
-0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN
-0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL
-0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM
-0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP
-0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS
-0xC96C # HANGUL SYLLABLE CIEUC-YU
-0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN
-0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL
-0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM
-0xC988 # HANGUL SYLLABLE CIEUC-EU
-0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK
-0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN
-0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL
-0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM
-0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP
-0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS
-0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG
-0xC9C0 # HANGUL SYLLABLE CIEUC-I
-0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK
-0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN
-0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT
-0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL
-0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM
-0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM
-0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP
-0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS
-0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG
-0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC
-0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH
-0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH
-0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A
-0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK
-0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN
-0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH
-0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL
-0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP
-0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM
-0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP
-0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS
-0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS
-0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG
-0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE
-0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK
-0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN
-0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL
-0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM
-0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP
-0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS
-0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS
-0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG
-0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA
-0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN
-0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG
-0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO
-0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK
-0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN
-0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL
-0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM
-0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP
-0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS
-0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS
-0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG
-0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E
-0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG
-0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO
-0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS
-0xCABC # HANGUL SYLLABLE SSANGCIEUC-O
-0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK
-0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN
-0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL
-0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM
-0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP
-0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS
-0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG
-0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH
-0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA
-0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK
-0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL
-0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS
-0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE
-0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS
-0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE
-0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN
-0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL
-0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM
-0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP
-0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG
-0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U
-0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK
-0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN
-0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL
-0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM
-0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP
-0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG
-0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO
-0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS
-0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG
-0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI
-0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU
-0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU
-0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM
-0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS
-0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG
-0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I
-0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK
-0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN
-0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL
-0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM
-0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP
-0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG
-0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC
-0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH
-0xCC28 # HANGUL SYLLABLE CHIEUCH-A
-0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK
-0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN
-0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH
-0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL
-0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM
-0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP
-0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS
-0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS
-0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG
-0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC
-0xCC44 # HANGUL SYLLABLE CHIEUCH-AE
-0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK
-0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN
-0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL
-0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM
-0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP
-0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS
-0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS
-0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG
-0xCC60 # HANGUL SYLLABLE CHIEUCH-YA
-0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN
-0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH
-0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL
-0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM
-0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG
-0xCC98 # HANGUL SYLLABLE CHIEUCH-EO
-0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK
-0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN
-0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL
-0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM
-0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP
-0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS
-0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS
-0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG
-0xCCB4 # HANGUL SYLLABLE CHIEUCH-E
-0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK
-0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN
-0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL
-0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM
-0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP
-0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS
-0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG
-0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO
-0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN
-0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS
-0xCCEC # HANGUL SYLLABLE CHIEUCH-YE
-0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN
-0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG
-0xCD08 # HANGUL SYLLABLE CHIEUCH-O
-0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK
-0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN
-0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL
-0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM
-0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP
-0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS
-0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG
-0xCD24 # HANGUL SYLLABLE CHIEUCH-WA
-0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN
-0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL
-0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG
-0xCD5C # HANGUL SYLLABLE CHIEUCH-OE
-0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN
-0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL
-0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM
-0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP
-0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS
-0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG
-0xCD78 # HANGUL SYLLABLE CHIEUCH-YO
-0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM
-0xCD94 # HANGUL SYLLABLE CHIEUCH-U
-0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK
-0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN
-0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL
-0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM
-0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP
-0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS
-0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG
-0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO
-0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS
-0xCDCC # HANGUL SYLLABLE CHIEUCH-WE
-0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN
-0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI
-0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN
-0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL
-0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM
-0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP
-0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS
-0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG
-0xCE04 # HANGUL SYLLABLE CHIEUCH-YU
-0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN
-0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL
-0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM
-0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG
-0xCE20 # HANGUL SYLLABLE CHIEUCH-EU
-0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK
-0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN
-0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL
-0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM
-0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP
-0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS
-0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG
-0xCE58 # HANGUL SYLLABLE CHIEUCH-I
-0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK
-0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN
-0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT
-0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL
-0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK
-0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM
-0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP
-0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS
-0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG
-0xCE74 # HANGUL SYLLABLE KHIEUKH-A
-0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK
-0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN
-0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL
-0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM
-0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP
-0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS
-0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG
-0xCE90 # HANGUL SYLLABLE KHIEUKH-AE
-0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK
-0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN
-0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL
-0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM
-0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP
-0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS
-0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS
-0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG
-0xCEAC # HANGUL SYLLABLE KHIEUKH-YA
-0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK
-0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG
-0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO
-0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK
-0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN
-0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT
-0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL
-0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM
-0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP
-0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS
-0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS
-0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG
-0xCF00 # HANGUL SYLLABLE KHIEUKH-E
-0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK
-0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN
-0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL
-0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM
-0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP
-0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS
-0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG
-0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO
-0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN
-0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL
-0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM
-0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP
-0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS
-0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS
-0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG
-0xCF38 # HANGUL SYLLABLE KHIEUKH-YE
-0xCF54 # HANGUL SYLLABLE KHIEUKH-O
-0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK
-0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN
-0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL
-0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM
-0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP
-0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS
-0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG
-0xCF70 # HANGUL SYLLABLE KHIEUKH-WA
-0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK
-0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN
-0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL
-0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM
-0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG
-0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE
-0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG
-0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE
-0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL
-0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO
-0xCFE0 # HANGUL SYLLABLE KHIEUKH-U
-0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK
-0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN
-0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL
-0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM
-0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP
-0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS
-0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG
-0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO
-0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN
-0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL
-0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG
-0xD018 # HANGUL SYLLABLE KHIEUKH-WE
-0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG
-0xD034 # HANGUL SYLLABLE KHIEUKH-WI
-0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK
-0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN
-0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL
-0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM
-0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP
-0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS
-0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG
-0xD050 # HANGUL SYLLABLE KHIEUKH-YU
-0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN
-0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL
-0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM
-0xD06C # HANGUL SYLLABLE KHIEUKH-EU
-0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK
-0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN
-0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL
-0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM
-0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP
-0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG
-0xD0A4 # HANGUL SYLLABLE KHIEUKH-I
-0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK
-0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN
-0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL
-0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM
-0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP
-0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS
-0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG
-0xD0C0 # HANGUL SYLLABLE THIEUTH-A
-0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK
-0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN
-0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL
-0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK
-0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM
-0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP
-0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS
-0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS
-0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG
-0xD0DC # HANGUL SYLLABLE THIEUTH-AE
-0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK
-0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN
-0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL
-0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM
-0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP
-0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS
-0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS
-0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG
-0xD0F8 # HANGUL SYLLABLE THIEUTH-YA
-0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG
-0xD130 # HANGUL SYLLABLE THIEUTH-EO
-0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK
-0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN
-0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL
-0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM
-0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM
-0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP
-0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS
-0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS
-0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG
-0xD14C # HANGUL SYLLABLE THIEUTH-E
-0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK
-0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN
-0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL
-0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM
-0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP
-0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS
-0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG
-0xD168 # HANGUL SYLLABLE THIEUTH-YEO
-0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN
-0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS
-0xD184 # HANGUL SYLLABLE THIEUTH-YE
-0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN
-0xD1A0 # HANGUL SYLLABLE THIEUTH-O
-0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK
-0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN
-0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL
-0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM
-0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP
-0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS
-0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG
-0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH
-0xD1BC # HANGUL SYLLABLE THIEUTH-WA
-0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN
-0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE
-0xD1F4 # HANGUL SYLLABLE THIEUTH-OE
-0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN
-0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS
-0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG
-0xD210 # HANGUL SYLLABLE THIEUTH-YO
-0xD22C # HANGUL SYLLABLE THIEUTH-U
-0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK
-0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN
-0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL
-0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM
-0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP
-0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS
-0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG
-0xD248 # HANGUL SYLLABLE THIEUTH-WEO
-0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS
-0xD264 # HANGUL SYLLABLE THIEUTH-WE
-0xD280 # HANGUL SYLLABLE THIEUTH-WI
-0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK
-0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN
-0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL
-0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM
-0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP
-0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG
-0xD29C # HANGUL SYLLABLE THIEUTH-YU
-0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN
-0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL
-0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM
-0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG
-0xD2B8 # HANGUL SYLLABLE THIEUTH-EU
-0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK
-0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN
-0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT
-0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL
-0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM
-0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM
-0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP
-0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS
-0xD2D4 # HANGUL SYLLABLE THIEUTH-YI
-0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN
-0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL
-0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM
-0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP
-0xD2F0 # HANGUL SYLLABLE THIEUTH-I
-0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK
-0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN
-0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL
-0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM
-0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP
-0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS
-0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG
-0xD30C # HANGUL SYLLABLE PHIEUPH-A
-0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK
-0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK
-0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN
-0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL
-0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM
-0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM
-0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP
-0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS
-0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS
-0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG
-0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH
-0xD328 # HANGUL SYLLABLE PHIEUPH-AE
-0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK
-0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN
-0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL
-0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM
-0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP
-0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS
-0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS
-0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG
-0xD344 # HANGUL SYLLABLE PHIEUPH-YA
-0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK
-0xD37C # HANGUL SYLLABLE PHIEUPH-EO
-0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK
-0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN
-0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL
-0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM
-0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP
-0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS
-0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS
-0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG
-0xD398 # HANGUL SYLLABLE PHIEUPH-E
-0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK
-0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN
-0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL
-0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM
-0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP
-0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS
-0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG
-0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO
-0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN
-0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL
-0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM
-0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP
-0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS
-0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG
-0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE
-0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL
-0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP
-0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS
-0xD3EC # HANGUL SYLLABLE PHIEUPH-O
-0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK
-0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN
-0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL
-0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM
-0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP
-0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS
-0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG
-0xD408 # HANGUL SYLLABLE PHIEUPH-WA
-0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG
-0xD440 # HANGUL SYLLABLE PHIEUPH-OE
-0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN
-0xD45C # HANGUL SYLLABLE PHIEUPH-YO
-0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN
-0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL
-0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP
-0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS
-0xD478 # HANGUL SYLLABLE PHIEUPH-U
-0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK
-0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN
-0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT
-0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL
-0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM
-0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM
-0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP
-0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS
-0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG
-0xD494 # HANGUL SYLLABLE PHIEUPH-WEO
-0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG
-0xD4CC # HANGUL SYLLABLE PHIEUPH-WI
-0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN
-0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL
-0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM
-0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS
-0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU
-0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN
-0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL
-0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM
-0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS
-0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG
-0xD504 # HANGUL SYLLABLE PHIEUPH-EU
-0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN
-0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL
-0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM
-0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP
-0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS
-0xD53C # HANGUL SYLLABLE PHIEUPH-I
-0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK
-0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN
-0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL
-0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM
-0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP
-0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS
-0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG
-0xD558 # HANGUL SYLLABLE HIEUH-A
-0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK
-0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN
-0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL
-0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH
-0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM
-0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP
-0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS
-0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG
-0xD574 # HANGUL SYLLABLE HIEUH-AE
-0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK
-0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN
-0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL
-0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM
-0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP
-0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS
-0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS
-0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG
-0xD590 # HANGUL SYLLABLE HIEUH-YA
-0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG
-0xD5C8 # HANGUL SYLLABLE HIEUH-EO
-0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK
-0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN
-0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL
-0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM
-0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM
-0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP
-0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS
-0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG
-0xD5E4 # HANGUL SYLLABLE HIEUH-E
-0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK
-0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN
-0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL
-0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM
-0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP
-0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS
-0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG
-0xD600 # HANGUL SYLLABLE HIEUH-YEO
-0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK
-0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN
-0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL
-0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM
-0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP
-0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS
-0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS
-0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG
-0xD61C # HANGUL SYLLABLE HIEUH-YE
-0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN
-0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL
-0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP
-0xD638 # HANGUL SYLLABLE HIEUH-O
-0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK
-0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN
-0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL
-0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH
-0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM
-0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP
-0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS
-0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG
-0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH
-0xD654 # HANGUL SYLLABLE HIEUH-WA
-0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK
-0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN
-0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL
-0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS
-0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG
-0xD670 # HANGUL SYLLABLE HIEUH-WAE
-0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK
-0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN
-0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS
-0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG
-0xD68C # HANGUL SYLLABLE HIEUH-OE
-0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK
-0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN
-0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL
-0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP
-0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS
-0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG
-0xD6A8 # HANGUL SYLLABLE HIEUH-YO
-0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN
-0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL
-0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP
-0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS
-0xD6C4 # HANGUL SYLLABLE HIEUH-U
-0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK
-0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN
-0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL
-0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH
-0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM
-0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS
-0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG
-0xD6E0 # HANGUL SYLLABLE HIEUH-WEO
-0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN
-0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL
-0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM
-0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG
-0xD6FC # HANGUL SYLLABLE HIEUH-WE
-0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK
-0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN
-0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL
-0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG
-0xD718 # HANGUL SYLLABLE HIEUH-WI
-0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK
-0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN
-0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL
-0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM
-0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP
-0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS
-0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG
-0xD734 # HANGUL SYLLABLE HIEUH-YU
-0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK
-0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN
-0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL
-0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM
-0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS
-0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG
-0xD750 # HANGUL SYLLABLE HIEUH-EU
-0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK
-0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN
-0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH
-0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT
-0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL
-0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK
-0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM
-0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP
-0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS
-0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG
-0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH
-0xD76C # HANGUL SYLLABLE HIEUH-YI
-0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN
-0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL
-0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM
-0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP
-0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG
-0xD788 # HANGUL SYLLABLE HIEUH-I
-0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK
-0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN
-0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL
-0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM
-0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP
-0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS
-0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG
+# +# fontconfig/fc-lang/ko.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Korean (KO) +# +# Coverage from KS X 1001 +# +# Does not include any Han characters as many Korean fonts +# don't cover them, and modern Korean usage is moving away from them +# +# Tor Andersson <tor.andersson@gmail.com> +# +#0x3000 # IDEOGRAPHIC SPACE +#0x3001 # IDEOGRAPHIC COMMA +#0x3002 # IDEOGRAPHIC FULL STOP +#0x327F # KOREAN STANDARD SYMBOL +#0xFFE6 # FULLWIDTH WON SIGN +0x3131 # HANGUL LETTER KIYEOK +0x3132 # HANGUL LETTER SSANGKIYEOK +0x3133 # HANGUL LETTER KIYEOK-SIOS +0x3134 # HANGUL LETTER NIEUN +0x3135 # HANGUL LETTER NIEUN-CIEUC +0x3136 # HANGUL LETTER NIEUN-HIEUH +0x3137 # HANGUL LETTER TIKEUT +0x3138 # HANGUL LETTER SSANGTIKEUT +0x3139 # HANGUL LETTER RIEUL +0x313A # HANGUL LETTER RIEUL-KIYEOK +0x313B # HANGUL LETTER RIEUL-MIEUM +0x313C # HANGUL LETTER RIEUL-PIEUP +0x313D # HANGUL LETTER RIEUL-SIOS +0x313E # HANGUL LETTER RIEUL-THIEUTH +0x313F # HANGUL LETTER RIEUL-PHIEUPH +0x3140 # HANGUL LETTER RIEUL-HIEUH +0x3141 # HANGUL LETTER MIEUM +0x3142 # HANGUL LETTER PIEUP +0x3143 # HANGUL LETTER SSANGPIEUP +0x3144 # HANGUL LETTER PIEUP-SIOS +0x3145 # HANGUL LETTER SIOS +0x3146 # HANGUL LETTER SSANGSIOS +0x3147 # HANGUL LETTER IEUNG +0x3148 # HANGUL LETTER CIEUC +0x3149 # HANGUL LETTER SSANGCIEUC +0x314A # HANGUL LETTER CHIEUCH +0x314B # HANGUL LETTER KHIEUKH +0x314C # HANGUL LETTER THIEUTH +0x314D # HANGUL LETTER PHIEUPH +0x314E # HANGUL LETTER HIEUH +0x314F # HANGUL LETTER A +0x3150 # HANGUL LETTER AE +0x3151 # HANGUL LETTER YA +0x3152 # HANGUL LETTER YAE +0x3153 # HANGUL LETTER EO +0x3154 # HANGUL LETTER E +0x3155 # HANGUL LETTER YEO +0x3156 # HANGUL LETTER YE +0x3157 # HANGUL LETTER O +0x3158 # HANGUL LETTER WA +0x3159 # HANGUL LETTER WAE +0x315A # HANGUL LETTER OE +0x315B # HANGUL LETTER YO +0x315C # HANGUL LETTER U +0x315D # HANGUL LETTER WEO +0x315E # HANGUL LETTER WE +0x315F # HANGUL LETTER WI +0x3160 # HANGUL LETTER YU +0x3161 # HANGUL LETTER EU +0x3162 # HANGUL LETTER YI +0x3163 # HANGUL LETTER I +0x3164 # HANGUL FILLER +0x3165 # HANGUL LETTER SSANGNIEUN +0x3166 # HANGUL LETTER NIEUN-TIKEUT +0x3167 # HANGUL LETTER NIEUN-SIOS +0x3168 # HANGUL LETTER NIEUN-PANSIOS +0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS +0x316A # HANGUL LETTER RIEUL-TIKEUT +0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS +0x316C # HANGUL LETTER RIEUL-PANSIOS +0x316D # HANGUL LETTER RIEUL-YEORINHIEUH +0x316E # HANGUL LETTER MIEUM-PIEUP +0x316F # HANGUL LETTER MIEUM-SIOS +0x3170 # HANGUL LETTER MIEUM-PANSIOS +0x3171 # HANGUL LETTER KAPYEOUNMIEUM +0x3172 # HANGUL LETTER PIEUP-KIYEOK +0x3173 # HANGUL LETTER PIEUP-TIKEUT +0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK +0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT +0x3176 # HANGUL LETTER PIEUP-CIEUC +0x3177 # HANGUL LETTER PIEUP-THIEUTH +0x3178 # HANGUL LETTER KAPYEOUNPIEUP +0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP +0x317A # HANGUL LETTER SIOS-KIYEOK +0x317B # HANGUL LETTER SIOS-NIEUN +0x317C # HANGUL LETTER SIOS-TIKEUT +0x317D # HANGUL LETTER SIOS-PIEUP +0x317E # HANGUL LETTER SIOS-CIEUC +0x317F # HANGUL LETTER PANSIOS +0x3180 # HANGUL LETTER SSANGIEUNG +0x3181 # HANGUL LETTER YESIEUNG +0x3182 # HANGUL LETTER YESIEUNG-SIOS +0x3183 # HANGUL LETTER YESIEUNG-PANSIOS +0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH +0x3185 # HANGUL LETTER SSANGHIEUH +0x3186 # HANGUL LETTER YEORINHIEUH +0x3187 # HANGUL LETTER YO-YA +0x3188 # HANGUL LETTER YO-YAE +0x3189 # HANGUL LETTER YO-I +0x318A # HANGUL LETTER YU-YEO +0x318B # HANGUL LETTER YU-YE +0x318C # HANGUL LETTER YU-I +0x318D # HANGUL LETTER ARAEA +0x318E # HANGUL LETTER ARAEAE +#0x3260 # CIRCLED HANGUL KIYEOK +#0x3261 # CIRCLED HANGUL NIEUN +#0x3262 # CIRCLED HANGUL TIKEUT +#0x3263 # CIRCLED HANGUL RIEUL +#0x3264 # CIRCLED HANGUL MIEUM +#0x3265 # CIRCLED HANGUL PIEUP +#0x3266 # CIRCLED HANGUL SIOS +#0x3267 # CIRCLED HANGUL IEUNG +#0x3268 # CIRCLED HANGUL CIEUC +#0x3269 # CIRCLED HANGUL CHIEUCH +#0x326A # CIRCLED HANGUL KHIEUKH +#0x326B # CIRCLED HANGUL THIEUTH +#0x326C # CIRCLED HANGUL PHIEUPH +#0x326D # CIRCLED HANGUL HIEUH +#0x326E # CIRCLED HANGUL KIYEOK A +#0x326F # CIRCLED HANGUL NIEUN A +#0x3270 # CIRCLED HANGUL TIKEUT A +#0x3271 # CIRCLED HANGUL RIEUL A +#0x3272 # CIRCLED HANGUL MIEUM A +#0x3273 # CIRCLED HANGUL PIEUP A +#0x3274 # CIRCLED HANGUL SIOS A +#0x3275 # CIRCLED HANGUL IEUNG A +#0x3276 # CIRCLED HANGUL CIEUC A +#0x3277 # CIRCLED HANGUL CHIEUCH A +#0x3278 # CIRCLED HANGUL KHIEUKH A +#0x3279 # CIRCLED HANGUL THIEUTH A +#0x327A # CIRCLED HANGUL PHIEUPH A +#0x327B # CIRCLED HANGUL HIEUH A +#0x3200 # PARENTHESIZED HANGUL KIYEOK +#0x3201 # PARENTHESIZED HANGUL NIEUN +#0x3202 # PARENTHESIZED HANGUL TIKEUT +#0x3203 # PARENTHESIZED HANGUL RIEUL +#0x3204 # PARENTHESIZED HANGUL MIEUM +#0x3205 # PARENTHESIZED HANGUL PIEUP +#0x3206 # PARENTHESIZED HANGUL SIOS +#0x3207 # PARENTHESIZED HANGUL IEUNG +#0x3208 # PARENTHESIZED HANGUL CIEUC +#0x3209 # PARENTHESIZED HANGUL CHIEUCH +#0x320A # PARENTHESIZED HANGUL KHIEUKH +#0x320B # PARENTHESIZED HANGUL THIEUTH +#0x320C # PARENTHESIZED HANGUL PHIEUPH +#0x320D # PARENTHESIZED HANGUL HIEUH +#0x320E # PARENTHESIZED HANGUL KIYEOK A +#0x320F # PARENTHESIZED HANGUL NIEUN A +#0x3210 # PARENTHESIZED HANGUL TIKEUT A +#0x3211 # PARENTHESIZED HANGUL RIEUL A +#0x3212 # PARENTHESIZED HANGUL MIEUM A +#0x3213 # PARENTHESIZED HANGUL PIEUP A +#0x3214 # PARENTHESIZED HANGUL SIOS A +#0x3215 # PARENTHESIZED HANGUL IEUNG A +#0x3216 # PARENTHESIZED HANGUL CIEUC A +#0x3217 # PARENTHESIZED HANGUL CHIEUCH A +#0x3218 # PARENTHESIZED HANGUL KHIEUKH A +#0x3219 # PARENTHESIZED HANGUL THIEUTH A +#0x321A # PARENTHESIZED HANGUL PHIEUPH A +#0x321B # PARENTHESIZED HANGUL HIEUH A +#0x321C # PARENTHESIZED HANGUL CIEUC U +0xAC00 # HANGUL SYLLABLE KIYEOK-A +0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK +0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN +0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT +0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL +0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK +0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM +0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM +0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP +0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS +0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS +0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS +0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG +0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC +0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH +0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH +0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH +0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH +0xAC1C # HANGUL SYLLABLE KIYEOK-AE +0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK +0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN +0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL +0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM +0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP +0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS +0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS +0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG +0xAC38 # HANGUL SYLLABLE KIYEOK-YA +0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK +0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN +0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL +0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS +0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG +0xAC54 # HANGUL SYLLABLE KIYEOK-YAE +0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN +0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL +0xAC70 # HANGUL SYLLABLE KIYEOK-EO +0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK +0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN +0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT +0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL +0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM +0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM +0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP +0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS +0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS +0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG +0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC +0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH +0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH +0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH +0xAC8C # HANGUL SYLLABLE KIYEOK-E +0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN +0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL +0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM +0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP +0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS +0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS +0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG +0xACA8 # HANGUL SYLLABLE KIYEOK-YEO +0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK +0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK +0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN +0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT +0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL +0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM +0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP +0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS +0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS +0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG +0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH +0xACC4 # HANGUL SYLLABLE KIYEOK-YE +0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN +0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL +0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP +0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS +0xACE0 # HANGUL SYLLABLE KIYEOK-O +0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK +0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN +0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT +0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL +0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM +0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS +0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH +0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM +0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP +0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS +0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG +0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC +0xACFC # HANGUL SYLLABLE KIYEOK-WA +0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK +0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN +0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL +0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM +0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM +0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP +0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS +0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG +0xAD18 # HANGUL SYLLABLE KIYEOK-WAE +0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN +0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL +0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP +0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS +0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG +0xAD34 # HANGUL SYLLABLE KIYEOK-OE +0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK +0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN +0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL +0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM +0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP +0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS +0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG +0xAD50 # HANGUL SYLLABLE KIYEOK-YO +0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN +0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL +0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP +0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS +0xAD6C # HANGUL SYLLABLE KIYEOK-U +0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK +0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN +0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT +0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL +0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK +0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM +0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH +0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM +0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP +0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS +0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG +0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC +0xAD88 # HANGUL SYLLABLE KIYEOK-WEO +0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK +0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN +0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL +0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS +0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG +0xADA4 # HANGUL SYLLABLE KIYEOK-WE +0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS +0xADC0 # HANGUL SYLLABLE KIYEOK-WI +0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK +0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN +0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL +0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM +0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP +0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS +0xADDC # HANGUL SYLLABLE KIYEOK-YU +0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN +0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL +0xADF8 # HANGUL SYLLABLE KIYEOK-EU +0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK +0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN +0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT +0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL +0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK +0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM +0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP +0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS +0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG +0xAE14 # HANGUL SYLLABLE KIYEOK-YI +0xAE30 # HANGUL SYLLABLE KIYEOK-I +0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK +0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN +0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT +0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL +0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM +0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM +0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP +0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS +0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG +0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC +0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH +0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A +0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK +0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK +0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN +0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL +0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM +0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM +0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP +0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS +0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS +0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG +0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH +0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE +0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK +0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN +0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL +0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM +0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP +0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS +0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS +0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG +0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA +0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK +0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL +0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO +0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK +0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK +0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN +0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL +0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM +0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP +0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS +0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS +0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG +0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E +0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK +0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN +0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM +0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS +0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG +0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO +0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN +0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL +0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS +0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS +0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH +0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE +0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O +0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK +0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN +0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH +0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL +0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM +0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP +0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS +0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG +0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC +0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH +0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA +0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK +0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL +0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS +0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG +0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE +0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK +0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG +0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE +0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN +0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL +0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM +0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP +0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG +0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO +0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U +0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK +0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN +0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL +0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH +0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM +0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP +0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS +0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG +0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC +0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO +0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL +0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS +0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG +0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE +0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK +0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN +0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL +0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM +0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP +0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS +0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI +0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN +0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL +0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM +0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP +0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU +0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU +0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK +0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN +0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH +0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL +0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM +0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH +0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM +0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP +0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS +0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG +0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH +0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I +0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK +0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN +0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL +0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM +0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP +0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS +0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG +0xB098 # HANGUL SYLLABLE NIEUN-A +0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK +0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK +0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN +0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT +0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL +0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK +0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM +0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM +0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP +0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS +0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS +0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG +0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC +0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH +0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH +0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH +0xB0B4 # HANGUL SYLLABLE NIEUN-AE +0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK +0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN +0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL +0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM +0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP +0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS +0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS +0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG +0xB0D0 # HANGUL SYLLABLE NIEUN-YA +0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK +0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN +0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL +0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM +0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG +0xB108 # HANGUL SYLLABLE NIEUN-EO +0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK +0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS +0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN +0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL +0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM +0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP +0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM +0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP +0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS +0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS +0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG +0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH +0xB124 # HANGUL SYLLABLE NIEUN-E +0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK +0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN +0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL +0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM +0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP +0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS +0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS +0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG +0xB140 # HANGUL SYLLABLE NIEUN-YEO +0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK +0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN +0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL +0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM +0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP +0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS +0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG +0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH +0xB15C # HANGUL SYLLABLE NIEUN-YE +0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN +0xB178 # HANGUL SYLLABLE NIEUN-O +0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK +0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN +0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL +0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM +0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM +0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP +0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS +0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG +0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH +0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH +0xB194 # HANGUL SYLLABLE NIEUN-WA +0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN +0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL +0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS +0xB1CC # HANGUL SYLLABLE NIEUN-OE +0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN +0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL +0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM +0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP +0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS +0xB1E8 # HANGUL SYLLABLE NIEUN-YO +0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK +0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN +0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL +0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP +0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS +0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG +0xB204 # HANGUL SYLLABLE NIEUN-U +0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK +0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN +0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT +0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL +0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM +0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP +0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS +0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG +0xB220 # HANGUL SYLLABLE NIEUN-WEO +0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS +0xB23C # HANGUL SYLLABLE NIEUN-WE +0xB258 # HANGUL SYLLABLE NIEUN-WI +0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN +0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL +0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM +0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP +0xB274 # HANGUL SYLLABLE NIEUN-YU +0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK +0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL +0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM +0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP +0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG +0xB290 # HANGUL SYLLABLE NIEUN-EU +0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK +0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN +0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL +0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK +0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM +0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM +0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP +0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS +0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG +0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC +0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH +0xB2AC # HANGUL SYLLABLE NIEUN-YI +0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN +0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL +0xB2C8 # HANGUL SYLLABLE NIEUN-I +0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK +0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN +0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL +0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95> +0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM +0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP +0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS +0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG +0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH +0xB2E4 # HANGUL SYLLABLE TIKEUT-A +0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK +0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK +0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN +0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT +0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL +0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK +0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM +0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP +0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH +0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM +0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP +0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS +0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS +0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG +0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC +0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH +0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH +0xB300 # HANGUL SYLLABLE TIKEUT-AE +0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK +0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN +0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL +0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM +0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP +0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS +0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS +0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG +0xB31C # HANGUL SYLLABLE TIKEUT-YA +0xB354 # HANGUL SYLLABLE TIKEUT-EO +0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK +0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK +0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN +0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT +0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL +0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM +0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP +0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM +0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP +0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS +0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG +0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH +0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH +0xB370 # HANGUL SYLLABLE TIKEUT-E +0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK +0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN +0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL +0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM +0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP +0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS +0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS +0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG +0xB38C # HANGUL SYLLABLE TIKEUT-YEO +0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN +0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL +0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS +0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG +0xB3A8 # HANGUL SYLLABLE TIKEUT-YE +0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN +0xB3C4 # HANGUL SYLLABLE TIKEUT-O +0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK +0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN +0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT +0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL +0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM +0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS +0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM +0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP +0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS +0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG +0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH +0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH +0xB3E0 # HANGUL SYLLABLE TIKEUT-WA +0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN +0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL +0xB3FC # HANGUL SYLLABLE TIKEUT-WAE +0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS +0xB418 # HANGUL SYLLABLE TIKEUT-OE +0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN +0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL +0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM +0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP +0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS +0xB434 # HANGUL SYLLABLE TIKEUT-YO +0xB450 # HANGUL SYLLABLE TIKEUT-U +0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK +0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN +0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL +0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM +0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP +0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS +0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG +0xB46C # HANGUL SYLLABLE TIKEUT-WEO +0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS +0xB488 # HANGUL SYLLABLE TIKEUT-WE +0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG +0xB4A4 # HANGUL SYLLABLE TIKEUT-WI +0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN +0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL +0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP +0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS +0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG +0xB4C0 # HANGUL SYLLABLE TIKEUT-YU +0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN +0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL +0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM +0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG +0xB4DC # HANGUL SYLLABLE TIKEUT-EU +0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK +0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN +0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT +0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL +0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM +0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM +0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP +0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS +0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG +0xB4F8 # HANGUL SYLLABLE TIKEUT-YI +0xB514 # HANGUL SYLLABLE TIKEUT-I +0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK +0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN +0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT +0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL +0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM +0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP +0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS +0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS +0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG +0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC +0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A +0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK +0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN +0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL +0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM +0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP +0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS +0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS +0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG +0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH +0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE +0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK +0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN +0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL +0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM +0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP +0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS +0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS +0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG +0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO +0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK +0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN +0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL +0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM +0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP +0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM +0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP +0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS +0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS +0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG +0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH +0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E +0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK +0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN +0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL +0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM +0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP +0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS +0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS +0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG +0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO +0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS +0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O +0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK +0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN +0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL +0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG +0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA +0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL +0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE +0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE +0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN +0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U +0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK +0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN +0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL +0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH +0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM +0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG +0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE +0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI +0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN +0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL +0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM +0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP +0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG +0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU +0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK +0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN +0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT +0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL +0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM +0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP +0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS +0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI +0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN +0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL +0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM +0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP +0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I +0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN +0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL +0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM +0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP +0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS +0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG +0xB77C # HANGUL SYLLABLE RIEUL-A +0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK +0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN +0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL +0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM +0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP +0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS +0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS +0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG +0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC +0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH +0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH +0xB798 # HANGUL SYLLABLE RIEUL-AE +0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK +0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN +0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL +0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM +0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP +0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS +0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS +0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG +0xB7B4 # HANGUL SYLLABLE RIEUL-YA +0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK +0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN +0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS +0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG +0xB7EC # HANGUL SYLLABLE RIEUL-EO +0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK +0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN +0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL +0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM +0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP +0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS +0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS +0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG +0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH +0xB808 # HANGUL SYLLABLE RIEUL-E +0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK +0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN +0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL +0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM +0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP +0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS +0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG +0xB824 # HANGUL SYLLABLE RIEUL-YEO +0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK +0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN +0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL +0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM +0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP +0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS +0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS +0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG +0xB840 # HANGUL SYLLABLE RIEUL-YE +0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN +0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP +0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS +0xB85C # HANGUL SYLLABLE RIEUL-O +0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK +0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN +0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL +0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM +0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP +0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS +0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG +0xB878 # HANGUL SYLLABLE RIEUL-WA +0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN +0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG +0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS +0xB8B0 # HANGUL SYLLABLE RIEUL-OE +0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN +0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL +0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM +0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP +0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS +0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG +0xB8CC # HANGUL SYLLABLE RIEUL-YO +0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN +0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL +0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP +0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS +0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG +0xB8E8 # HANGUL SYLLABLE RIEUL-U +0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK +0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN +0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL +0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM +0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP +0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS +0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG +0xB904 # HANGUL SYLLABLE RIEUL-WEO +0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS +0xB920 # HANGUL SYLLABLE RIEUL-WE +0xB93C # HANGUL SYLLABLE RIEUL-WI +0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK +0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN +0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL +0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM +0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS +0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG +0xB958 # HANGUL SYLLABLE RIEUL-YU +0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK +0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN +0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL +0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM +0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP +0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS +0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG +0xB974 # HANGUL SYLLABLE RIEUL-EU +0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK +0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN +0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL +0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM +0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP +0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS +0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG +0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC +0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH +0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH +0xB9AC # HANGUL SYLLABLE RIEUL-I +0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK +0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN +0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL +0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM +0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP +0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS +0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG +0xB9C8 # HANGUL SYLLABLE MIEUM-A +0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK +0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN +0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH +0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT +0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL +0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK +0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM +0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM +0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP +0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS +0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG +0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC +0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH +0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH +0xB9E4 # HANGUL SYLLABLE MIEUM-AE +0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK +0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN +0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL +0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM +0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP +0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS +0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS +0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG +0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC +0xBA00 # HANGUL SYLLABLE MIEUM-YA +0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK +0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL +0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG +0xBA38 # HANGUL SYLLABLE MIEUM-EO +0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK +0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN +0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL +0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM +0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM +0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP +0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS +0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG +0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC +0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH +0xBA54 # HANGUL SYLLABLE MIEUM-E +0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK +0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN +0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL +0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM +0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP +0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS +0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS +0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG +0xBA70 # HANGUL SYLLABLE MIEUM-YEO +0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK +0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN +0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL +0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS +0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS +0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG +0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH +0xBA8C # HANGUL SYLLABLE MIEUM-YE +0xBAA8 # HANGUL SYLLABLE MIEUM-O +0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK +0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS +0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN +0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL +0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM +0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM +0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP +0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS +0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG +0xBAC4 # HANGUL SYLLABLE MIEUM-WA +0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN +0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS +0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG +0xBAFC # HANGUL SYLLABLE MIEUM-OE +0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN +0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL +0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP +0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS +0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG +0xBB18 # HANGUL SYLLABLE MIEUM-YO +0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN +0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL +0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP +0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS +0xBB34 # HANGUL SYLLABLE MIEUM-U +0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK +0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK +0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN +0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT +0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL +0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK +0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM +0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM +0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP +0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS +0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG +0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH +0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH +0xBB50 # HANGUL SYLLABLE MIEUM-WEO +0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN +0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL +0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP +0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS +0xBB6C # HANGUL SYLLABLE MIEUM-WE +0xBB88 # HANGUL SYLLABLE MIEUM-WI +0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN +0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL +0xBBA4 # HANGUL SYLLABLE MIEUM-YU +0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN +0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL +0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM +0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS +0xBBC0 # HANGUL SYLLABLE MIEUM-EU +0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN +0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL +0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM +0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS +0xBBF8 # HANGUL SYLLABLE MIEUM-I +0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK +0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN +0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT +0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL +0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM +0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM +0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP +0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS +0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS +0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG +0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH +0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH +0xBC14 # HANGUL SYLLABLE PIEUP-A +0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK +0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK +0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS +0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN +0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT +0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL +0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK +0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM +0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP +0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM +0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP +0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS +0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG +0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH +0xBC30 # HANGUL SYLLABLE PIEUP-AE +0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK +0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN +0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL +0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM +0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP +0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS +0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS +0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG +0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH +0xBC4C # HANGUL SYLLABLE PIEUP-YA +0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK +0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN +0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP +0xBC84 # HANGUL SYLLABLE PIEUP-EO +0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK +0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN +0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT +0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL +0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM +0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM +0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP +0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS +0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG +0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC +0xBCA0 # HANGUL SYLLABLE PIEUP-E +0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK +0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN +0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT +0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL +0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM +0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP +0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS +0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS +0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG +0xBCBC # HANGUL SYLLABLE PIEUP-YEO +0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK +0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN +0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL +0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP +0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS +0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS +0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG +0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH +0xBCD8 # HANGUL SYLLABLE PIEUP-YE +0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN +0xBCF4 # HANGUL SYLLABLE PIEUP-O +0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK +0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK +0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN +0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL +0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM +0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP +0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS +0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG +0xBD10 # HANGUL SYLLABLE PIEUP-WA +0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN +0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS +0xBD2C # HANGUL SYLLABLE PIEUP-WAE +0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS +0xBD48 # HANGUL SYLLABLE PIEUP-OE +0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK +0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN +0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL +0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM +0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP +0xBD64 # HANGUL SYLLABLE PIEUP-YO +0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN +0xBD80 # HANGUL SYLLABLE PIEUP-U +0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK +0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN +0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT +0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL +0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK +0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM +0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM +0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP +0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS +0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG +0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH +0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH +0xBD9C # HANGUL SYLLABLE PIEUP-WEO +0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL +0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS +0xBDB8 # HANGUL SYLLABLE PIEUP-WE +0xBDD4 # HANGUL SYLLABLE PIEUP-WI +0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK +0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN +0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL +0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG +0xBDF0 # HANGUL SYLLABLE PIEUP-YU +0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN +0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL +0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM +0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS +0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG +0xBE0C # HANGUL SYLLABLE PIEUP-EU +0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK +0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN +0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL +0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM +0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP +0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS +0xBE44 # HANGUL SYLLABLE PIEUP-I +0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK +0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN +0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL +0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM +0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM +0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP +0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS +0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG +0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC +0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH +0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A +0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK +0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN +0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL +0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM +0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM +0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP +0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS +0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS +0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG +0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH +0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE +0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK +0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN +0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL +0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM +0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP +0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS +0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS +0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG +0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA +0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK +0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM +0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO +0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK +0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN +0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT +0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL +0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM +0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS +0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS +0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG +0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E +0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG +0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO +0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK +0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM +0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP +0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS +0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS +0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG +0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O +0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK +0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN +0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL +0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM +0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP +0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG +0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE +0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO +0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG +0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U +0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK +0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN +0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL +0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM +0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS +0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG +0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU +0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG +0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU +0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN +0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL +0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM +0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP +0xC090 # HANGUL SYLLABLE SSANGPIEUP-I +0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK +0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN +0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL +0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM +0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP +0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS +0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG +0xC0AC # HANGUL SYLLABLE SIOS-A +0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK +0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS +0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN +0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT +0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL +0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK +0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM +0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM +0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP +0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS +0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS +0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG +0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH +0xC0C8 # HANGUL SYLLABLE SIOS-AE +0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK +0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN +0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL +0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM +0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP +0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS +0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS +0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG +0xC0E4 # HANGUL SYLLABLE SIOS-YA +0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK +0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN +0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL +0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM +0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP +0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS +0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG +0xC100 # HANGUL SYLLABLE SIOS-YAE +0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN +0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL +0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM +0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG +0xC11C # HANGUL SYLLABLE SIOS-EO +0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK +0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK +0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS +0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN +0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT +0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL +0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM +0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP +0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM +0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP +0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS +0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS +0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG +0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH +0xC138 # HANGUL SYLLABLE SIOS-E +0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK +0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN +0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL +0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM +0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP +0xC14B # HANGUL SYLLABLE SIOS-E-SIOS +0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS +0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG +0xC154 # HANGUL SYLLABLE SIOS-YEO +0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK +0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN +0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL +0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM +0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP +0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS +0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS +0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG +0xC170 # HANGUL SYLLABLE SIOS-YE +0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN +0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL +0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG +0xC18C # HANGUL SYLLABLE SIOS-O +0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK +0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK +0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN +0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL +0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM +0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM +0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP +0xC19F # HANGUL SYLLABLE SIOS-O-SIOS +0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG +0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH +0xC1A8 # HANGUL SYLLABLE SIOS-WA +0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK +0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN +0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL +0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG +0xC1C4 # HANGUL SYLLABLE SIOS-WAE +0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN +0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL +0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM +0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS +0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS +0xC1E0 # HANGUL SYLLABLE SIOS-OE +0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN +0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL +0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM +0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP +0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS +0xC1FC # HANGUL SYLLABLE SIOS-YO +0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK +0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN +0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL +0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM +0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP +0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS +0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG +0xC218 # HANGUL SYLLABLE SIOS-U +0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK +0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN +0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT +0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL +0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM +0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP +0xC22B # HANGUL SYLLABLE SIOS-U-SIOS +0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG +0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH +0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH +0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH +0xC234 # HANGUL SYLLABLE SIOS-WEO +0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS +0xC250 # HANGUL SYLLABLE SIOS-WE +0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK +0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN +0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL +0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM +0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG +0xC26C # HANGUL SYLLABLE SIOS-WI +0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK +0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN +0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL +0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM +0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP +0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS +0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG +0xC288 # HANGUL SYLLABLE SIOS-YU +0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK +0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL +0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM +0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS +0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG +0xC2A4 # HANGUL SYLLABLE SIOS-EU +0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK +0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN +0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL +0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK +0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM +0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP +0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS +0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG +0xC2DC # HANGUL SYLLABLE SIOS-I +0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK +0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN +0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT +0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL +0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH +0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM +0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP +0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS +0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG +0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH +0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A +0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK +0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS +0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN +0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL +0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM +0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP +0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS +0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG +0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH +0xC314 # HANGUL SYLLABLE SSANGSIOS-AE +0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK +0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN +0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL +0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM +0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP +0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS +0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG +0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG +0xC368 # HANGUL SYLLABLE SSANGSIOS-EO +0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK +0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN +0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL +0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM +0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM +0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP +0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS +0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG +0xC384 # HANGUL SYLLABLE SSANGSIOS-E +0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN +0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL +# 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN # (dotum.ttf, hline.ttf) +0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O +0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK +0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN +0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT +0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL +0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM +0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM +0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP +0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG +0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA +0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK +0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN +0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS +0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE +0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS +0xC42C # HANGUL SYLLABLE SSANGSIOS-OE +0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN +0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL +0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM +0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP +0xC448 # HANGUL SYLLABLE SSANGSIOS-YO +0xC464 # HANGUL SYLLABLE SSANGSIOS-U +0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK +0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN +0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL +0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM +0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP +0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG +0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO +0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS +0xC49C # HANGUL SYLLABLE SSANGSIOS-WE +0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI +0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN +0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG +0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU +0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK +0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN +0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL +0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM +0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH +0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM +0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP +0xC50C # HANGUL SYLLABLE SSANGSIOS-YI +0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN +0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL +0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM +0xC528 # HANGUL SYLLABLE SSANGSIOS-I +0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK +0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN +0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL +0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM +0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP +0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS +0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG +0xC544 # HANGUL SYLLABLE IEUNG-A +0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK +0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN +0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC +0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH +0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL +0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK +0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM +0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH +0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM +0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP +0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS +0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS +0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG +0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH +0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH +0xC560 # HANGUL SYLLABLE IEUNG-AE +0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK +0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN +0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL +0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM +0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP +0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS +0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS +0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG +0xC57C # HANGUL SYLLABLE IEUNG-YA +0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK +0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN +0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL +0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP +0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM +0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP +0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS +0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG +0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH +0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH +0xC598 # HANGUL SYLLABLE IEUNG-YAE +0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN +0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL +0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP +0xC5B4 # HANGUL SYLLABLE IEUNG-EO +0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK +0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN +0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC +0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT +0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL +0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK +0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM +0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM +0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP +0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS +0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS +0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS +0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG +0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC +0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH +0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH +0xC5D0 # HANGUL SYLLABLE IEUNG-E +0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK +0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN +0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL +0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM +0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP +0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS +0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG +0xC5EC # HANGUL SYLLABLE IEUNG-YEO +0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK +0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK +0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN +0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL +0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM +0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP +0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM +0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP +0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS +0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS +0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS +0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG +0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH +0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH +0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH +0xC608 # HANGUL SYLLABLE IEUNG-YE +0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN +0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL +0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM +0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP +0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS +0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS +0xC624 # HANGUL SYLLABLE IEUNG-O +0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK +0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN +0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL +0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK +0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM +0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS +0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH +0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM +0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP +0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS +0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG +0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH +0xC640 # HANGUL SYLLABLE IEUNG-WA +0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK +0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN +0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL +0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM +0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP +0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS +0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS +0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG +0xC65C # HANGUL SYLLABLE IEUNG-WAE +0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK +0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN +0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM +0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS +0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG +0xC678 # HANGUL SYLLABLE IEUNG-OE +0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK +0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN +0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL +0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM +0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP +0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS +0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG +0xC694 # HANGUL SYLLABLE IEUNG-YO +0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK +0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN +0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL +0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM +0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP +0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS +0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG +0xC6B0 # HANGUL SYLLABLE IEUNG-U +0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK +0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN +0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL +0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK +0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM +0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM +0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP +0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS +0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG +0xC6CC # HANGUL SYLLABLE IEUNG-WEO +0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK +0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN +0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL +0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM +0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP +0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS +0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG +0xC6E8 # HANGUL SYLLABLE IEUNG-WE +0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK +0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN +0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL +0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM +0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP +0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG +0xC704 # HANGUL SYLLABLE IEUNG-WI +0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK +0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN +0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL +0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM +0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP +0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS +0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG +0xC720 # HANGUL SYLLABLE IEUNG-YU +0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK +0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN +0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL +0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM +0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP +0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS +0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG +0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH +0xC73C # HANGUL SYLLABLE IEUNG-EU +0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK +0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN +0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL +0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH +0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM +0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP +0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS +0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG +0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC +0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH +0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH +0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH +0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH +0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH +0xC758 # HANGUL SYLLABLE IEUNG-YI +0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN +0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL +0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM +0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS +0xC774 # HANGUL SYLLABLE IEUNG-I +0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK +0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN +0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL +0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK +0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM +0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH +0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM +0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP +0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS +0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS +0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG +0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC +0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH +0xC790 # HANGUL SYLLABLE CIEUC-A +0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK +0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN +0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH +0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT +0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL +0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM +0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM +0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP +0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS +0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS +0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG +0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC +0xC7AC # HANGUL SYLLABLE CIEUC-AE +0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK +0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN +0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL +0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM +0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP +0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS +0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS +0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG +0xC7C8 # HANGUL SYLLABLE CIEUC-YA +0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK +0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN +0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH +0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL +0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM +0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG +0xC7E4 # HANGUL SYLLABLE CIEUC-YAE +0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN +0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL +0xC800 # HANGUL SYLLABLE CIEUC-EO +0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK +0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN +0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL +0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM +0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM +0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP +0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS +0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG +0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC +0xC81C # HANGUL SYLLABLE CIEUC-E +0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK +0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN +0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL +0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM +0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP +0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS +0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG +0xC838 # HANGUL SYLLABLE CIEUC-YEO +0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN +0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL +0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM +0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP +0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS +0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG +0xC854 # HANGUL SYLLABLE CIEUC-YE +0xC870 # HANGUL SYLLABLE CIEUC-O +0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK +0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN +0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL +0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM +0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM +0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP +0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS +0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG +0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC +0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH +0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH +0xC88C # HANGUL SYLLABLE CIEUC-WA +0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK +0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL +0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP +0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS +0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG +0xC8A8 # HANGUL SYLLABLE CIEUC-WAE +0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS +0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG +0xC8C4 # HANGUL SYLLABLE CIEUC-OE +0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN +0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL +0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM +0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP +0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS +0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG +0xC8E0 # HANGUL SYLLABLE CIEUC-YO +0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK +0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN +0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG +0xC8FC # HANGUL SYLLABLE CIEUC-U +0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK +0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN +0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL +0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK +0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM +0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM +0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP +0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS +0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG +0xC918 # HANGUL SYLLABLE CIEUC-WEO +0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS +0xC934 # HANGUL SYLLABLE CIEUC-WE +0xC950 # HANGUL SYLLABLE CIEUC-WI +0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK +0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN +0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL +0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM +0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP +0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS +0xC96C # HANGUL SYLLABLE CIEUC-YU +0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN +0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL +0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM +0xC988 # HANGUL SYLLABLE CIEUC-EU +0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK +0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN +0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL +0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM +0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP +0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS +0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG +0xC9C0 # HANGUL SYLLABLE CIEUC-I +0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK +0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN +0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT +0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL +0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM +0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM +0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP +0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS +0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG +0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC +0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH +0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH +0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A +0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK +0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN +0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH +0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL +0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP +0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM +0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP +0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS +0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS +0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG +0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE +0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK +0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN +0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL +0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM +0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP +0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS +0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS +0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG +0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA +0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN +0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG +0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO +0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK +0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN +0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL +0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM +0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP +0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS +0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS +0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG +0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E +0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG +0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO +0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS +0xCABC # HANGUL SYLLABLE SSANGCIEUC-O +0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK +0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN +0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL +0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM +0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP +0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS +0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG +0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH +0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA +0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK +0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL +0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS +0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE +0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS +0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE +0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN +0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL +0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM +0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP +0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG +0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U +0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK +0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN +0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL +0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM +0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP +0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG +0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO +0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS +0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG +0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI +0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU +0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU +0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM +0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS +0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG +0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I +0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK +0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN +0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL +0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM +0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP +0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG +0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC +0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH +0xCC28 # HANGUL SYLLABLE CHIEUCH-A +0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK +0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN +0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH +0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL +0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM +0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP +0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS +0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS +0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG +0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC +0xCC44 # HANGUL SYLLABLE CHIEUCH-AE +0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK +0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN +0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL +0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM +0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP +0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS +0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS +0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG +0xCC60 # HANGUL SYLLABLE CHIEUCH-YA +0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN +0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH +0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL +0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM +0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG +0xCC98 # HANGUL SYLLABLE CHIEUCH-EO +0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK +0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN +0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL +0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM +0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP +0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS +0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS +0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG +0xCCB4 # HANGUL SYLLABLE CHIEUCH-E +0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK +0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN +0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL +0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM +0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP +0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS +0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG +0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO +0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN +0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS +0xCCEC # HANGUL SYLLABLE CHIEUCH-YE +0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN +0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG +0xCD08 # HANGUL SYLLABLE CHIEUCH-O +0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK +0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN +0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL +0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM +0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP +0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS +0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG +0xCD24 # HANGUL SYLLABLE CHIEUCH-WA +0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN +0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL +0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG +0xCD5C # HANGUL SYLLABLE CHIEUCH-OE +0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN +0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL +0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM +0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP +0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS +0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG +0xCD78 # HANGUL SYLLABLE CHIEUCH-YO +0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM +0xCD94 # HANGUL SYLLABLE CHIEUCH-U +0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK +0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN +0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL +0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM +0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP +0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS +0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG +0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO +0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS +0xCDCC # HANGUL SYLLABLE CHIEUCH-WE +0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN +0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI +0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN +0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL +0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM +0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP +0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS +0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG +0xCE04 # HANGUL SYLLABLE CHIEUCH-YU +0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN +0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL +0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM +0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG +0xCE20 # HANGUL SYLLABLE CHIEUCH-EU +0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK +0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN +0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL +0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM +0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP +0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS +0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG +0xCE58 # HANGUL SYLLABLE CHIEUCH-I +0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK +0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN +0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT +0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL +0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK +0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM +0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP +0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS +0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG +0xCE74 # HANGUL SYLLABLE KHIEUKH-A +0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK +0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN +0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL +0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM +0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP +0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS +0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG +0xCE90 # HANGUL SYLLABLE KHIEUKH-AE +0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK +0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN +0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL +0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM +0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP +0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS +0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS +0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG +0xCEAC # HANGUL SYLLABLE KHIEUKH-YA +0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK +0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG +0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO +0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK +0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN +0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT +0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL +0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM +0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP +0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS +0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS +0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG +0xCF00 # HANGUL SYLLABLE KHIEUKH-E +0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK +0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN +0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL +0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM +0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP +0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS +0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG +0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO +0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN +0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL +0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM +0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP +0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS +0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS +0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG +0xCF38 # HANGUL SYLLABLE KHIEUKH-YE +0xCF54 # HANGUL SYLLABLE KHIEUKH-O +0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK +0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN +0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL +0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM +0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP +0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS +0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG +0xCF70 # HANGUL SYLLABLE KHIEUKH-WA +0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK +0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN +0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL +0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM +0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG +0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE +0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG +0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE +0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL +0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO +0xCFE0 # HANGUL SYLLABLE KHIEUKH-U +0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK +0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN +0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL +0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM +0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP +0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS +0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG +0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO +0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN +0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL +0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG +0xD018 # HANGUL SYLLABLE KHIEUKH-WE +0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG +0xD034 # HANGUL SYLLABLE KHIEUKH-WI +0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK +0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN +0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL +0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM +0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP +0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS +0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG +0xD050 # HANGUL SYLLABLE KHIEUKH-YU +0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN +0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL +0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM +0xD06C # HANGUL SYLLABLE KHIEUKH-EU +0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK +0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN +0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL +0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM +0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP +0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG +0xD0A4 # HANGUL SYLLABLE KHIEUKH-I +0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK +0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN +0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL +0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM +0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP +0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS +0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG +0xD0C0 # HANGUL SYLLABLE THIEUTH-A +0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK +0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN +0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL +0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK +0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM +0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP +0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS +0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS +0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG +0xD0DC # HANGUL SYLLABLE THIEUTH-AE +0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK +0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN +0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL +0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM +0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP +0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS +0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS +0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG +0xD0F8 # HANGUL SYLLABLE THIEUTH-YA +0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG +0xD130 # HANGUL SYLLABLE THIEUTH-EO +0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK +0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN +0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL +0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM +0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM +0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP +0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS +0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS +0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG +0xD14C # HANGUL SYLLABLE THIEUTH-E +0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK +0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN +0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL +0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM +0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP +0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS +0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG +0xD168 # HANGUL SYLLABLE THIEUTH-YEO +0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN +0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS +0xD184 # HANGUL SYLLABLE THIEUTH-YE +0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN +0xD1A0 # HANGUL SYLLABLE THIEUTH-O +0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK +0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN +0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL +0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM +0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP +0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS +0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG +0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH +0xD1BC # HANGUL SYLLABLE THIEUTH-WA +0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN +0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE +0xD1F4 # HANGUL SYLLABLE THIEUTH-OE +0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN +0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS +0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG +0xD210 # HANGUL SYLLABLE THIEUTH-YO +0xD22C # HANGUL SYLLABLE THIEUTH-U +0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK +0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN +0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL +0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM +0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP +0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS +0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG +0xD248 # HANGUL SYLLABLE THIEUTH-WEO +0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS +0xD264 # HANGUL SYLLABLE THIEUTH-WE +0xD280 # HANGUL SYLLABLE THIEUTH-WI +0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK +0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN +0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL +0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM +0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP +0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG +0xD29C # HANGUL SYLLABLE THIEUTH-YU +0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN +0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL +0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM +0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG +0xD2B8 # HANGUL SYLLABLE THIEUTH-EU +0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK +0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN +0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT +0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL +0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM +0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM +0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP +0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS +0xD2D4 # HANGUL SYLLABLE THIEUTH-YI +0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN +0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL +0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM +0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP +0xD2F0 # HANGUL SYLLABLE THIEUTH-I +0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK +0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN +0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL +0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM +0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP +0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS +0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG +0xD30C # HANGUL SYLLABLE PHIEUPH-A +0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK +0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK +0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN +0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL +0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM +0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM +0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP +0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS +0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS +0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG +0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH +0xD328 # HANGUL SYLLABLE PHIEUPH-AE +0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK +0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN +0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL +0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM +0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP +0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS +0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS +0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG +0xD344 # HANGUL SYLLABLE PHIEUPH-YA +0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK +0xD37C # HANGUL SYLLABLE PHIEUPH-EO +0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK +0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN +0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL +0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM +0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP +0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS +0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS +0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG +0xD398 # HANGUL SYLLABLE PHIEUPH-E +0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK +0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN +0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL +0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM +0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP +0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS +0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG +0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO +0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN +0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL +0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM +0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP +0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS +0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG +0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE +0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL +0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP +0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS +0xD3EC # HANGUL SYLLABLE PHIEUPH-O +0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK +0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN +0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL +0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM +0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP +0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS +0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG +0xD408 # HANGUL SYLLABLE PHIEUPH-WA +0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG +0xD440 # HANGUL SYLLABLE PHIEUPH-OE +0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN +0xD45C # HANGUL SYLLABLE PHIEUPH-YO +0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN +0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL +0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP +0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS +0xD478 # HANGUL SYLLABLE PHIEUPH-U +0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK +0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN +0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT +0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL +0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM +0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM +0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP +0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS +0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG +0xD494 # HANGUL SYLLABLE PHIEUPH-WEO +0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG +0xD4CC # HANGUL SYLLABLE PHIEUPH-WI +0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN +0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL +0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM +0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS +0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU +0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN +0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL +0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM +0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS +0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG +0xD504 # HANGUL SYLLABLE PHIEUPH-EU +0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN +0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL +0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM +0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP +0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS +0xD53C # HANGUL SYLLABLE PHIEUPH-I +0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK +0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN +0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL +0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM +0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP +0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS +0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG +0xD558 # HANGUL SYLLABLE HIEUH-A +0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK +0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN +0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL +0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH +0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM +0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP +0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS +0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG +0xD574 # HANGUL SYLLABLE HIEUH-AE +0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK +0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN +0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL +0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM +0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP +0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS +0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS +0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG +0xD590 # HANGUL SYLLABLE HIEUH-YA +0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG +0xD5C8 # HANGUL SYLLABLE HIEUH-EO +0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK +0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN +0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL +0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM +0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM +0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP +0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS +0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG +0xD5E4 # HANGUL SYLLABLE HIEUH-E +0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK +0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN +0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL +0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM +0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP +0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS +0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG +0xD600 # HANGUL SYLLABLE HIEUH-YEO +0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK +0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN +0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL +0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM +0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP +0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS +0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS +0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG +0xD61C # HANGUL SYLLABLE HIEUH-YE +0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN +0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL +0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP +0xD638 # HANGUL SYLLABLE HIEUH-O +0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK +0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN +0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL +0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH +0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM +0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP +0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS +0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG +0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH +0xD654 # HANGUL SYLLABLE HIEUH-WA +0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK +0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN +0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL +0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS +0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG +0xD670 # HANGUL SYLLABLE HIEUH-WAE +0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK +0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN +0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS +0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG +0xD68C # HANGUL SYLLABLE HIEUH-OE +0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK +0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN +0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL +0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP +0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS +0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG +0xD6A8 # HANGUL SYLLABLE HIEUH-YO +0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN +0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL +0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP +0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS +0xD6C4 # HANGUL SYLLABLE HIEUH-U +0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK +0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN +0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL +0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH +0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM +0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS +0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG +0xD6E0 # HANGUL SYLLABLE HIEUH-WEO +0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN +0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL +0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM +0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG +0xD6FC # HANGUL SYLLABLE HIEUH-WE +0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK +0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN +0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL +0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG +0xD718 # HANGUL SYLLABLE HIEUH-WI +0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK +0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN +0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL +0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM +0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP +0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS +0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG +0xD734 # HANGUL SYLLABLE HIEUH-YU +0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK +0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN +0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL +0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM +0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS +0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG +0xD750 # HANGUL SYLLABLE HIEUH-EU +0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK +0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN +0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH +0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT +0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL +0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK +0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM +0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP +0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS +0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG +0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH +0xD76C # HANGUL SYLLABLE HIEUH-YI +0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN +0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL +0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM +0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP +0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG +0xD788 # HANGUL SYLLABLE HIEUH-I +0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK +0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN +0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL +0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM +0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP +0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS +0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG diff --git a/fontconfig/fc-lang/kok.orth b/fontconfig/fc-lang/kok.orth index e5cbe8703..f7661e923 100644 --- a/fontconfig/fc-lang/kok.orth +++ b/fontconfig/fc-lang/kok.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/kok.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kokani (Devanagari script) (KOK)
-include hi.orth
+# +# fontconfig/fc-lang/kok.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kokani (Devanagari script) (KOK) +include hi.orth diff --git a/fontconfig/fc-lang/ku_am.orth b/fontconfig/fc-lang/ku_am.orth index 15a565966..c9f482100 100644 --- a/fontconfig/fc-lang/ku_am.orth +++ b/fontconfig/fc-lang/ku_am.orth @@ -1,91 +1,91 @@ -#
-# fontconfig/fc-lang/ku_am.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Kurdish in Armenia (ku-AM)
-#
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0427
-0428
-0429
-042a
-042d
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0447
-0448
-0449
-044a
-044d
-04ba
-04bb
-04d8
-04d9
-04e6
-04e7
-051a-051d
+# +# fontconfig/fc-lang/ku_am.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Kurdish in Armenia (ku-AM) +# +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0427 +0428 +0429 +042a +042d +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0447 +0448 +0449 +044a +044d +04ba +04bb +04d8 +04d9 +04e6 +04e7 +051a-051d diff --git a/fontconfig/fc-lang/ku_ir.orth b/fontconfig/fc-lang/ku_ir.orth index 407502f5a..233b4aab6 100644 --- a/fontconfig/fc-lang/ku_ir.orth +++ b/fontconfig/fc-lang/ku_ir.orth @@ -1,49 +1,49 @@ -#
-# fontconfig/fc-lang/ku_ir.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Kurdish in Iran (KU-IR)
-#
-# Data from Roozbeh Pournader <roozbeh@sharif.edu>
-#
-# Since the Unicode Presentation Forms don't contain some of the Kurdish
-# letters, we are going with the general forms instead of the Presentation
-# forms, unlike Arabic, Persian, or Urdu.
-#
-0626-0628
-062a
-062c-062f
-0631-0634
-0639-063a
-0641-0642
-0644-0648
-067e
-0686
-0692
-0698
-06a4
-06a9
-06af
-06b5
-06c6
-06cc
-06ce
+# +# fontconfig/fc-lang/ku_ir.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kurdish in Iran (KU-IR) +# +# Data from Roozbeh Pournader <roozbeh@sharif.edu> +# +# Since the Unicode Presentation Forms don't contain some of the Kurdish +# letters, we are going with the general forms instead of the Presentation +# forms, unlike Arabic, Persian, or Urdu. +# +0626-0628 +062a +062c-062f +0631-0634 +0639-063a +0641-0642 +0644-0648 +067e +0686 +0692 +0698 +06a4 +06a9 +06af +06b5 +06c6 +06cc +06ce diff --git a/fontconfig/fc-lang/kum.orth b/fontconfig/fc-lang/kum.orth index cb6b470c4..20f0b51b6 100644 --- a/fontconfig/fc-lang/kum.orth +++ b/fontconfig/fc-lang/kum.orth @@ -1,96 +1,96 @@ -#
-# fontconfig/fc-lang/kum.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Kumyk (KUM)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+# +# fontconfig/fc-lang/kum.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Kumyk (KUM) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/kv.orth b/fontconfig/fc-lang/kv.orth index cb2b02614..5dbb28bb6 100644 --- a/fontconfig/fc-lang/kv.orth +++ b/fontconfig/fc-lang/kv.orth @@ -1,101 +1,101 @@ -#
-# fontconfig/fc-lang/kv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Komi (Komi-Permyak/Komi-Siryan) (KV)
-#
-# I've taken Komi-Permyak as it contains two extra codepoints
-0401
-0406
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-0456
-04e6
-04e7
+# +# fontconfig/fc-lang/kv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Komi (Komi-Permyak/Komi-Siryan) (KV) +# +# I've taken Komi-Permyak as it contains two extra codepoints +0401 +0406 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +0456 +04e6 +04e7 diff --git a/fontconfig/fc-lang/kw.orth b/fontconfig/fc-lang/kw.orth index df6eac36a..3933a6801 100644 --- a/fontconfig/fc-lang/kw.orth +++ b/fontconfig/fc-lang/kw.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/kw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Cornish (KW)
-#
-# Orthography from http://www.evertype.com/alphabets/cornish.pdf
-#
-0041-005a
-0061-007a
-0100-0101
-0112-0113
-012a-012b
-014c-014d
-016a-016b
-0232-0233
+# +# fontconfig/fc-lang/kw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Cornish (KW) +# +# Orthography from http://www.evertype.com/alphabets/cornish.pdf +# +0041-005a +0061-007a +0100-0101 +0112-0113 +012a-012b +014c-014d +016a-016b +0232-0233 diff --git a/fontconfig/fc-lang/ky.orth b/fontconfig/fc-lang/ky.orth index a7fd3d437..bf7dbe0d2 100644 --- a/fontconfig/fc-lang/ky.orth +++ b/fontconfig/fc-lang/ky.orth @@ -1,102 +1,102 @@ -#
-# fontconfig/fc-lang/ky.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Kirgiz (KY)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter)
-#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter)
-04a2
-04a3
-04ae
-04af
+# +# fontconfig/fc-lang/ky.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Kirgiz (KY) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) +#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) +04a2 +04a3 +04ae +04af diff --git a/fontconfig/fc-lang/la.orth b/fontconfig/fc-lang/la.orth index 1c1a1291c..359b36be7 100644 --- a/fontconfig/fc-lang/la.orth +++ b/fontconfig/fc-lang/la.orth @@ -1,31 +1,31 @@ -#
-# fontconfig/fc-lang/la.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Latin (LA)
-0041-005a
-0061-007a
-0100-0101
-0112-0113
-012a-012d
-014c-014f
-016a-016d
+# +# fontconfig/fc-lang/la.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Latin (LA) +0041-005a +0061-007a +0100-0101 +0112-0113 +012a-012d +014c-014f +016a-016d diff --git a/fontconfig/fc-lang/lb.orth b/fontconfig/fc-lang/lb.orth index ba299af61..51cbcc5d5 100644 --- a/fontconfig/fc-lang/lb.orth +++ b/fontconfig/fc-lang/lb.orth @@ -1,62 +1,62 @@ -#
-# fontconfig/fc-lang/lb.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Luxembourgish (Letzeburgesch) (LB)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#
-# Required characters
-#
-00c4
-00e4
-00c9
-00e9
-00cb
-00eb
-00d6
-00f6
-00dc
-00fc
-#
-# Important characters
-#
-00c2
-00e2
-00c8
-00e8
-00ca
-00ea
-00ce
-00ee
-#e006 # LATIN CAPITAL LETTER M WITH CIRCUMFLEX (no UCS)
-#e007 # LATIN SMALL LETTER M WITH CIRCUMFLEX (no UCS)
-#e008 # LATIN CAPITAL LETTER N WITH CIRCUMFLEX (no UCS)
-#e009 # LATIN SMALL LETTER N WITH CIRCUMFLEX (no UCS)
-00d4
-00f4
-00db
-00fb
-00df
+# +# fontconfig/fc-lang/lb.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Luxembourgish (Letzeburgesch) (LB) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +# +# Required characters +# +00c4 +00e4 +00c9 +00e9 +00cb +00eb +00d6 +00f6 +00dc +00fc +# +# Important characters +# +00c2 +00e2 +00c8 +00e8 +00ca +00ea +00ce +00ee +#e006 # LATIN CAPITAL LETTER M WITH CIRCUMFLEX (no UCS) +#e007 # LATIN SMALL LETTER M WITH CIRCUMFLEX (no UCS) +#e008 # LATIN CAPITAL LETTER N WITH CIRCUMFLEX (no UCS) +#e009 # LATIN SMALL LETTER N WITH CIRCUMFLEX (no UCS) +00d4 +00f4 +00db +00fb +00df diff --git a/fontconfig/fc-lang/lez.orth b/fontconfig/fc-lang/lez.orth index 1f2ac70a3..541d2faa6 100644 --- a/fontconfig/fc-lang/lez.orth +++ b/fontconfig/fc-lang/lez.orth @@ -1,97 +1,97 @@ -#
-# fontconfig/fc-lang/lez.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Lezghian (Lezgian) (LEZ)
-#
-0401
-0406
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+# +# fontconfig/fc-lang/lez.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Lezghian (Lezgian) (LEZ) +# +0401 +0406 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/ln.orth b/fontconfig/fc-lang/ln.orth index 49575ced4..659e2be20 100644 --- a/fontconfig/fc-lang/ln.orth +++ b/fontconfig/fc-lang/ln.orth @@ -1,43 +1,43 @@ -#
-# fontconfig/fc-lang/ln.orth
-#
-# Copyright © 2006 Danis Jacquerye
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Lingala (LN)
-0041-005a # r used in borrowed words, x and q unused.
-0061-007a
-00c1-00c2 # tonal orthography
-00c9-00ca
-00cd-00ce
-00d3-00d4
-00da-00db
-00e1-00e2
-00e9-00ea
-00ed-00ee
-00f3-00f4
-00fa-00fb
-011a-011b
-0186
-0190
-0254
-025b
-0301-0302 # combining diacritics for accented 0186, 0190, 0254, 025b
-030c
+# +# fontconfig/fc-lang/ln.orth +# +# Copyright © 2006 Danis Jacquerye +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Lingala (LN) +0041-005a # r used in borrowed words, x and q unused. +0061-007a +00c1-00c2 # tonal orthography +00c9-00ca +00cd-00ce +00d3-00d4 +00da-00db +00e1-00e2 +00e9-00ea +00ed-00ee +00f3-00f4 +00fa-00fb +011a-011b +0186 +0190 +0254 +025b +0301-0302 # combining diacritics for accented 0186, 0190, 0254, 025b +030c diff --git a/fontconfig/fc-lang/lo.orth b/fontconfig/fc-lang/lo.orth index 6b6333bc2..42cfaeb3b 100644 --- a/fontconfig/fc-lang/lo.orth +++ b/fontconfig/fc-lang/lo.orth @@ -1,45 +1,45 @@ -#
-# fontconfig/fc-lang/lo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Lao (lo)
-#
-# Taken from the Unicode coverage of this language
-#
-0e81-0e82
-0e84
-0e87-0e88
-0e8a
-0e8d
-0e94-0e97
-0e99-0e9f
-0ea1-0ea3
-0ea5
-0ea7
-0eaa-0eab
-0ead-0eb9
-0ebb-0ebd
-0ec0-0ec4
-0ec6
-0ec8-0ecd
-#0ed0-0ed9 # Digits
-0edc-0edd
+# +# fontconfig/fc-lang/lo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Lao (lo) +# +# Taken from the Unicode coverage of this language +# +0e81-0e82 +0e84 +0e87-0e88 +0e8a +0e8d +0e94-0e97 +0e99-0e9f +0ea1-0ea3 +0ea5 +0ea7 +0eaa-0eab +0ead-0eb9 +0ebb-0ebd +0ec0-0ec4 +0ec6 +0ec8-0ecd +#0ed0-0ed9 # Digits +0edc-0edd diff --git a/fontconfig/fc-lang/lt.orth b/fontconfig/fc-lang/lt.orth index 946ba19a2..582300a55 100644 --- a/fontconfig/fc-lang/lt.orth +++ b/fontconfig/fc-lang/lt.orth @@ -1,43 +1,43 @@ -#
-# fontconfig/fc-lang/lt.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Lithuanian (LT)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0104-0105
-010c-010d
-#0106-0109
-0116-0117
-0118-0119
-012e-012f
-0160-0161
-016a-016b
-0172-0173
-017d-017e
-#2019-201a # single quotes
-#201d-201e # double quotes
+# +# fontconfig/fc-lang/lt.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Lithuanian (LT) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +0104-0105 +010c-010d +#0106-0109 +0116-0117 +0118-0119 +012e-012f +0160-0161 +016a-016b +0172-0173 +017d-017e +#2019-201a # single quotes +#201d-201e # double quotes diff --git a/fontconfig/fc-lang/lv.orth b/fontconfig/fc-lang/lv.orth index 49b971055..e83cbd7d1 100644 --- a/fontconfig/fc-lang/lv.orth +++ b/fontconfig/fc-lang/lv.orth @@ -1,44 +1,44 @@ -#
-# fontconfig/fc-lang/lv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Latvian (LV)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0100-0101
-010c-010d
-0112-0113
-0122-0123
-012a-012b
-0136-0137
-013b-013c
-0145-0146
-014c-014d
-0156-0157
-0160-0161
-016a-016b
-017d-017e
+# +# fontconfig/fc-lang/lv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Latvian (LV) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +0100-0101 +010c-010d +0112-0113 +0122-0123 +012a-012b +0136-0137 +013b-013c +0145-0146 +014c-014d +0156-0157 +0160-0161 +016a-016b +017d-017e diff --git a/fontconfig/fc-lang/mai.orth b/fontconfig/fc-lang/mai.orth index e66119007..943e74801 100644 --- a/fontconfig/fc-lang/mai.orth +++ b/fontconfig/fc-lang/mai.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/mai.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Maithili (Devanagari script) (MAI)
-include hi.orth
+# +# fontconfig/fc-lang/mai.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Maithili (Devanagari script) (MAI) +include hi.orth diff --git a/fontconfig/fc-lang/mg.orth b/fontconfig/fc-lang/mg.orth index c79c9e030..99778b84e 100644 --- a/fontconfig/fc-lang/mg.orth +++ b/fontconfig/fc-lang/mg.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/mg.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Malagasy (MG)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-#e010 # LATIN CAPITAL LETTER N WITH DIAERESIS
-#e011 # LATIN SMALL LETTER N WITH DIAERESIS
-00d4
-00f4
+# +# fontconfig/fc-lang/mg.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Malagasy (MG) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +#e010 # LATIN CAPITAL LETTER N WITH DIAERESIS +#e011 # LATIN SMALL LETTER N WITH DIAERESIS +00d4 +00f4 diff --git a/fontconfig/fc-lang/mh.orth b/fontconfig/fc-lang/mh.orth index 5a0b1c93f..1ebf23b34 100644 --- a/fontconfig/fc-lang/mh.orth +++ b/fontconfig/fc-lang/mh.orth @@ -1,45 +1,45 @@ -#
-# fontconfig/fc-lang/mh.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Marshallese (MH)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0100
-0101
-013b
-013c
-#e00a # LATIN CAPITAL LETTER M WITH CEDILLA (no UCS)
-#e00b # LATIN SMALL LETTER M WITH CEDILLA (no UCS)
-#e00c # LATIN CAPITAL LETTER N WITH MACRON (no UCS)
-#e00d # LATIN SMALL LETTER N WITH MACRON (no UCS)
-0145
-0146
-014c
-014d
-#e00e # LATIN CAPITAL LETTER O WITH CEDILLA (no UCS)
-#e00f # LATIN SMALL LETTER O WITH CEDILLA (no UCS)
-016a
-016b
+# +# fontconfig/fc-lang/mh.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Marshallese (MH) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0100 +0101 +013b +013c +#e00a # LATIN CAPITAL LETTER M WITH CEDILLA (no UCS) +#e00b # LATIN SMALL LETTER M WITH CEDILLA (no UCS) +#e00c # LATIN CAPITAL LETTER N WITH MACRON (no UCS) +#e00d # LATIN SMALL LETTER N WITH MACRON (no UCS) +0145 +0146 +014c +014d +#e00e # LATIN CAPITAL LETTER O WITH CEDILLA (no UCS) +#e00f # LATIN SMALL LETTER O WITH CEDILLA (no UCS) +016a +016b diff --git a/fontconfig/fc-lang/mi.orth b/fontconfig/fc-lang/mi.orth index 81a5c02aa..a506c2b18 100644 --- a/fontconfig/fc-lang/mi.orth +++ b/fontconfig/fc-lang/mi.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/mi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Maori (MI)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0100-0101
-0112-0113
-012a-012b
-014c-014d
-016a-016b
-1e34-1e35 # Ngai Tahu specific
+# +# fontconfig/fc-lang/mi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Maori (MI) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0100-0101 +0112-0113 +012a-012b +014c-014d +016a-016b +1e34-1e35 # Ngai Tahu specific diff --git a/fontconfig/fc-lang/mk.orth b/fontconfig/fc-lang/mk.orth index 0705a9f75..908e5922c 100644 --- a/fontconfig/fc-lang/mk.orth +++ b/fontconfig/fc-lang/mk.orth @@ -1,40 +1,40 @@ -#
-# fontconfig/fc-lang/mk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Macedonian (MK)
-0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE
-0403
-0405
-0408-040a
-040c
-040d # CYRILLIC CAPITAL LETTER I WITH GRAVE
-040f
-0410-0418
-041a-0428
-0450 # CYRILLIC SMALL LETTER IE WITH GRAVE
-0453
-0455
-0458-045a
-045c
-045d # CYRILLIC SMALL LETTER I WITH GRAVE
-045f
+# +# fontconfig/fc-lang/mk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Macedonian (MK) +0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE +0403 +0405 +0408-040a +040c +040d # CYRILLIC CAPITAL LETTER I WITH GRAVE +040f +0410-0418 +041a-0428 +0450 # CYRILLIC SMALL LETTER IE WITH GRAVE +0453 +0455 +0458-045a +045c +045d # CYRILLIC SMALL LETTER I WITH GRAVE +045f diff --git a/fontconfig/fc-lang/ml.orth b/fontconfig/fc-lang/ml.orth index 46a25a750..2d62d65ea 100644 --- a/fontconfig/fc-lang/ml.orth +++ b/fontconfig/fc-lang/ml.orth @@ -1,38 +1,38 @@ -#
-# fontconfig/fc-lang/ml.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Malayalam (ml)
-#
-# Taken from the Unicode coverage of this language
-#
-0d02-0d03
-0d05-0d0c
-0d0e-0d10
-0d12-0d28
-0d2a-0d39
-0d3e-0d43
-0d46-0d48
-0d4a-0d4d
-0d57
-0d60-0d61
-#0d66-0d6f # Digits
+# +# fontconfig/fc-lang/ml.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Malayalam (ml) +# +# Taken from the Unicode coverage of this language +# +0d02-0d03 +0d05-0d0c +0d0e-0d10 +0d12-0d28 +0d2a-0d39 +0d3e-0d43 +0d46-0d48 +0d4a-0d4d +0d57 +0d60-0d61 +#0d66-0d6f # Digits diff --git a/fontconfig/fc-lang/mn_cn.orth b/fontconfig/fc-lang/mn_cn.orth index 1647dceb1..5c4a8af23 100644 --- a/fontconfig/fc-lang/mn_cn.orth +++ b/fontconfig/fc-lang/mn_cn.orth @@ -1,37 +1,37 @@ -#
-# fontconfig/fc-lang/mn_cn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Mongolian in China (mn-CN)
-#
-# Taken from the Unicode coverage of this language
-#
-# Basic letters
-1820-1842
-# Todo letters
-1843-185c
-# Sibe letters
-185d-1872
-# Manchu letters
-1873-1877
-# Extensions for Sanskrit and Tibetan
-1880-18a9
+# +# fontconfig/fc-lang/mn_cn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Mongolian in China (mn-CN) +# +# Taken from the Unicode coverage of this language +# +# Basic letters +1820-1842 +# Todo letters +1843-185c +# Sibe letters +185d-1872 +# Manchu letters +1873-1877 +# Extensions for Sanskrit and Tibetan +1880-18a9 diff --git a/fontconfig/fc-lang/mo.orth b/fontconfig/fc-lang/mo.orth index f76aeec5d..5b22c61f4 100644 --- a/fontconfig/fc-lang/mo.orth +++ b/fontconfig/fc-lang/mo.orth @@ -1,37 +1,37 @@ -#
-# fontconfig/fc-lang/mo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Moldavian (MO)
-0041-005a
-0061-007a
-00c2
-00ce
-00e2
-00ee
-0102-0103
-0218-021b # Comma below forms (preferred over cedilla)
-0401
-0410-044f
-0451
-#2019-201a # single quotes
-#201d-201e # double quotes
+# +# fontconfig/fc-lang/mo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Moldavian (MO) +0041-005a +0061-007a +00c2 +00ce +00e2 +00ee +0102-0103 +0218-021b # Comma below forms (preferred over cedilla) +0401 +0410-044f +0451 +#2019-201a # single quotes +#201d-201e # double quotes diff --git a/fontconfig/fc-lang/mr.orth b/fontconfig/fc-lang/mr.orth index d8f457d33..26399093f 100644 --- a/fontconfig/fc-lang/mr.orth +++ b/fontconfig/fc-lang/mr.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/mr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Marathi (Devanagari script) (MR)
-include hi.orth
+# +# fontconfig/fc-lang/mr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Marathi (Devanagari script) (MR) +include hi.orth diff --git a/fontconfig/fc-lang/mt.orth b/fontconfig/fc-lang/mt.orth index 1e8cbfed2..0172ad5e2 100644 --- a/fontconfig/fc-lang/mt.orth +++ b/fontconfig/fc-lang/mt.orth @@ -1,67 +1,67 @@ -#
-# fontconfig/fc-lang/mt.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Maltese (MT)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-#00c1
-#00c2
-00c8
-#00c9
-#00ca
-00cc
-#00cd
-00ce
-00d2
-#00d3
-#00d4
-00d9
-#00da
-#00db
-00e0
-#00e1
-#00e2
-00e8
-#00e9
-#00ea
-00ec
-#00ed
-00ee
-00f2
-#00f3
-#00f4
-00f9
-#00fa
-#00fb
-010a-010b
-0120-0121
-0126-0127
-017b-017c
-#02bc
-#
+# +# fontconfig/fc-lang/mt.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Maltese (MT) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +#00c1 +#00c2 +00c8 +#00c9 +#00ca +00cc +#00cd +00ce +00d2 +#00d3 +#00d4 +00d9 +#00da +#00db +00e0 +#00e1 +#00e2 +00e8 +#00e9 +#00ea +00ec +#00ed +00ee +00f2 +#00f3 +#00f4 +00f9 +#00fa +#00fb +010a-010b +0120-0121 +0126-0127 +017b-017c +#02bc +# diff --git a/fontconfig/fc-lang/my.orth b/fontconfig/fc-lang/my.orth index c660f7e22..3e3ecf890 100644 --- a/fontconfig/fc-lang/my.orth +++ b/fontconfig/fc-lang/my.orth @@ -1,37 +1,37 @@ -#
-# fontconfig/fc-lang/my.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Burmese (Myanmar) (MY)
-#
-# Orthography from Unicode range (U+1000-U+1059)
-#
-# Consonants
-1000-1020
-# Independent vowels
-1021
-1023-1027
-1029-102a
-# Dependent vowel signs
-102c-1032
-# Pali and Sanskrit extensions
-#1050-1059
+# +# fontconfig/fc-lang/my.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Burmese (Myanmar) (MY) +# +# Orthography from Unicode range (U+1000-U+1059) +# +# Consonants +1000-1020 +# Independent vowels +1021 +1023-1027 +1029-102a +# Dependent vowel signs +102c-1032 +# Pali and Sanskrit extensions +#1050-1059 diff --git a/fontconfig/fc-lang/nb.orth b/fontconfig/fc-lang/nb.orth index b904b05e5..1cac7f584 100644 --- a/fontconfig/fc-lang/nb.orth +++ b/fontconfig/fc-lang/nb.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/nb.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Norwegian Bokmål (nb)
-include no.orth
+# +# fontconfig/fc-lang/nb.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Norwegian Bokmål (nb) +include no.orth diff --git a/fontconfig/fc-lang/nds.orth b/fontconfig/fc-lang/nds.orth index 73188aa21..8a6546aa0 100644 --- a/fontconfig/fc-lang/nds.orth +++ b/fontconfig/fc-lang/nds.orth @@ -1,40 +1,40 @@ -#
-# fontconfig/fc-lang/nds.orth
-#
-# Copyright © 2004 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Low Saxon (NDS)
-#
-# Sources:
-# Kenneth Rohde Christiansen <kenneth@gnu.org>
-# ANS -
-# Algemeyne Neddersassische Schryvwys' (DE)
-# Algemeyne Nedersaksische Schryvwyse (NL)
-#
-0041-005a # LATIN CAPITAL LETTER A through Z
-0061-007a # LATIN SMALL LETTER A through Z
-00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS
-00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS
-00DC # LATIN CAPITAL LETTER U WITH DIAERESIS
-00DF # LATIN SMALL LETTER SHARP S (German)
-00E4 # LATIN SMALL LETTER A WITH DIAERESIS
-00F6 # LATIN SMALL LETTER O WITH DIAERESIS
-00FC # LATIN SMALL LETTER U WITH DIAERESIS
+# +# fontconfig/fc-lang/nds.orth +# +# Copyright © 2004 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Low Saxon (NDS) +# +# Sources: +# Kenneth Rohde Christiansen <kenneth@gnu.org> +# ANS - +# Algemeyne Neddersassische Schryvwys' (DE) +# Algemeyne Nedersaksische Schryvwyse (NL) +# +0041-005a # LATIN CAPITAL LETTER A through Z +0061-007a # LATIN SMALL LETTER A through Z +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00DF # LATIN SMALL LETTER SHARP S (German) +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00F6 # LATIN SMALL LETTER O WITH DIAERESIS +00FC # LATIN SMALL LETTER U WITH DIAERESIS diff --git a/fontconfig/fc-lang/ne.orth b/fontconfig/fc-lang/ne.orth index 782e7939a..246386f0b 100644 --- a/fontconfig/fc-lang/ne.orth +++ b/fontconfig/fc-lang/ne.orth @@ -1,26 +1,26 @@ -#
-# fontconfig/fc-lang/ne.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Nepali (Devanagari script) (NE)
-include hi.orth
--090C-090E # See bug 30685
+# +# fontconfig/fc-lang/ne.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Nepali (Devanagari script) (NE) +include hi.orth +-090C-090E # See bug 30685 diff --git a/fontconfig/fc-lang/nl.orth b/fontconfig/fc-lang/nl.orth index f694963c0..ea896fb51 100644 --- a/fontconfig/fc-lang/nl.orth +++ b/fontconfig/fc-lang/nl.orth @@ -1,63 +1,63 @@ -#
-# fontconfig/fc-lang/nl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Dutch (NL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00c2
-00c4
-00c8
-00c9
-00ca
-00cb
-00cd
-00cf
-00d3
-00d4
-00d6
-00da
-00db
-00dc
-00e1
-00e2
-00e4
-00e8
-00e9
-00ea
-00eb
-00ed
-00ef
-00f3
-00f4
-00f6
-00fa
-00fb
-00fc
-#0132-0133 # IJ and ij ligatures
-
+# +# fontconfig/fc-lang/nl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Dutch (NL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00c2 +00c4 +00c8 +00c9 +00ca +00cb +00cd +00cf +00d3 +00d4 +00d6 +00da +00db +00dc +00e1 +00e2 +00e4 +00e8 +00e9 +00ea +00eb +00ed +00ef +00f3 +00f4 +00f6 +00fa +00fb +00fc +#0132-0133 # IJ and ij ligatures + diff --git a/fontconfig/fc-lang/nn.orth b/fontconfig/fc-lang/nn.orth index 01d325da9..3e9224d50 100644 --- a/fontconfig/fc-lang/nn.orth +++ b/fontconfig/fc-lang/nn.orth @@ -1,43 +1,43 @@ -#
-# fontconfig/fc-lang/nn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Norwegian Nynorsk (NN)
-0041-005a
-0061-007a
-#00ab # double angle quotes
-#00bb # double angle quotes
-00c0
-00c4-00c6
-00c9-00ca
-00d2-00d4
-00d6
-00d8
-00dc
-00e0
-00e4-00e6
-00e9-00ea
-00f2-00f4
-00f6
-00f8
-00fc
-#2039-203a # single quotes
+# +# fontconfig/fc-lang/nn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Norwegian Nynorsk (NN) +0041-005a +0061-007a +#00ab # double angle quotes +#00bb # double angle quotes +00c0 +00c4-00c6 +00c9-00ca +00d2-00d4 +00d6 +00d8 +00dc +00e0 +00e4-00e6 +00e9-00ea +00f2-00f4 +00f6 +00f8 +00fc +#2039-203a # single quotes diff --git a/fontconfig/fc-lang/no.orth b/fontconfig/fc-lang/no.orth index 3b00143d8..67e0ae9ac 100644 --- a/fontconfig/fc-lang/no.orth +++ b/fontconfig/fc-lang/no.orth @@ -1,68 +1,68 @@ -#
-# fontconfig/fc-lang/no.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Norwegian (Bokmål) (NO)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00ab
-#00bb
-00c0
-#00c1
-#00c2
-#00c4
-00c5
-00c6
-#00c7
-#00c8
-00c9
-00ca
-#00cb
-00d2
-00d3
-00d4
-#00d6
-00d8
-#00dc
-00e0
-#00e1
-#00e2
-#00e4
-00e5
-00e6
-#00e7
-#00e8
-00e9
-00ea
-#00eb
-00f2
-00f3
-00f4
-#00f6
-00f8
-#00fc
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/no.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Norwegian (Bokmål) (NO) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00ab +#00bb +00c0 +#00c1 +#00c2 +#00c4 +00c5 +00c6 +#00c7 +#00c8 +00c9 +00ca +#00cb +00d2 +00d3 +00d4 +#00d6 +00d8 +#00dc +00e0 +#00e1 +#00e2 +#00e4 +00e5 +00e6 +#00e7 +#00e8 +00e9 +00ea +#00eb +00f2 +00f3 +00f4 +#00f6 +00f8 +#00fc +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/ny.orth b/fontconfig/fc-lang/ny.orth index e168da566..6ffacd956 100644 --- a/fontconfig/fc-lang/ny.orth +++ b/fontconfig/fc-lang/ny.orth @@ -1,30 +1,30 @@ -#
-# fontconfig/fc-lang/ny.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chichewa (NY)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0174-0175
+# +# fontconfig/fc-lang/ny.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chichewa (NY) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0174-0175 diff --git a/fontconfig/fc-lang/oc.orth b/fontconfig/fc-lang/oc.orth index eb4bb8795..07822e758 100644 --- a/fontconfig/fc-lang/oc.orth +++ b/fontconfig/fc-lang/oc.orth @@ -1,53 +1,53 @@ -#
-# fontconfig/fc-lang/oc.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Occitan (OC)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00c1
-00c7
-00c8
-00c9
-#00cb
-00cd
-#00cf
-00d2
-00d3
-00da
-00e0
-00e1
-00e7
-00e8
-00e9
-#00eb
-00ed
-#00ef
-00f2
-00f3
-00fa
+# +# fontconfig/fc-lang/oc.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Occitan (OC) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00c1 +00c7 +00c8 +00c9 +#00cb +00cd +#00cf +00d2 +00d3 +00da +00e0 +00e1 +00e7 +00e8 +00e9 +#00eb +00ed +#00ef +00f2 +00f3 +00fa diff --git a/fontconfig/fc-lang/om.orth b/fontconfig/fc-lang/om.orth index 3f7eb7d93..21422bf55 100644 --- a/fontconfig/fc-lang/om.orth +++ b/fontconfig/fc-lang/om.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/om.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Oromo or Galla (OM)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a # Oromo doesn't use v or z
-0061-007a
+# +# fontconfig/fc-lang/om.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Oromo or Galla (OM) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a # Oromo doesn't use v or z +0061-007a diff --git a/fontconfig/fc-lang/or.orth b/fontconfig/fc-lang/or.orth index fc4a774bb..eeb1dbe84 100644 --- a/fontconfig/fc-lang/or.orth +++ b/fontconfig/fc-lang/or.orth @@ -1,42 +1,42 @@ -#
-# fontconfig/fc-lang/or.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Oriya (or)
-#
-# Taken from the Unicode coverage of this language
-#
-0b01-0b03
-0b05-0b0c
-0b0f-0b10
-0b13-0b28
-0b2a-0b30
-0b32-0b33
-0b36-0b39
-0b3c-0b43
-0b47-0b48
-0b4b-0b4d
-0b56-0b57
-0b5c-0b5d
-0b5f-0b61
-#0b66-0b6f # Digits
-#0b70 # Symbol
+# +# fontconfig/fc-lang/or.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Oriya (or) +# +# Taken from the Unicode coverage of this language +# +0b01-0b03 +0b05-0b0c +0b0f-0b10 +0b13-0b28 +0b2a-0b30 +0b32-0b33 +0b36-0b39 +0b3c-0b43 +0b47-0b48 +0b4b-0b4d +0b56-0b57 +0b5c-0b5d +0b5f-0b61 +#0b66-0b6f # Digits +#0b70 # Symbol diff --git a/fontconfig/fc-lang/os.orth b/fontconfig/fc-lang/os.orth index 7f771cc92..e689d908f 100644 --- a/fontconfig/fc-lang/os.orth +++ b/fontconfig/fc-lang/os.orth @@ -1,96 +1,96 @@ -#
-# fontconfig/fc-lang/os.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Ossetic (OS)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+# +# fontconfig/fc-lang/os.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Ossetic (OS) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/pes.orth b/fontconfig/fc-lang/pes.orth index 9700cc52a..0c160f9b4 100644 --- a/fontconfig/fc-lang/pes.orth +++ b/fontconfig/fc-lang/pes.orth @@ -1,26 +1,26 @@ -#
-# fontconfig/fc-lang/pes.orth
-#
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Western Farsi (pes)
-#
-include fa.orth
+# +# fontconfig/fc-lang/pes.orth +# +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Western Farsi (pes) +# +include fa.orth diff --git a/fontconfig/fc-lang/pl.orth b/fontconfig/fc-lang/pl.orth index 1858395b2..4b069dfbb 100644 --- a/fontconfig/fc-lang/pl.orth +++ b/fontconfig/fc-lang/pl.orth @@ -1,41 +1,41 @@ -#
-# fontconfig/fc-lang/pl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Polish (PL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00d3
-00f3
-0104-0105
-0106-0107
-0118-0119
-0141-0142
-0143-0144
-015a-015b
-0179-017a
-017b-017c
+# +# fontconfig/fc-lang/pl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Polish (PL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00d3 +00f3 +0104-0105 +0106-0107 +0118-0119 +0141-0142 +0143-0144 +015a-015b +0179-017a +017b-017c diff --git a/fontconfig/fc-lang/prs.orth b/fontconfig/fc-lang/prs.orth index edb3bca31..b6a2ef5bf 100644 --- a/fontconfig/fc-lang/prs.orth +++ b/fontconfig/fc-lang/prs.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/prs.orth
-#
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Dari/Eastern Farsi (prs)
-#
-# We assume that Afghan Persian uses the same orthography as Iranian
-# Persian, although the actual orthography is probably less strict than that
-# of the Iranian Academy of Persian Language and Literature.
-include fa.orth
+# +# fontconfig/fc-lang/prs.orth +# +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Dari/Eastern Farsi (prs) +# +# We assume that Afghan Persian uses the same orthography as Iranian +# Persian, although the actual orthography is probably less strict than that +# of the Iranian Academy of Persian Language and Literature. +include fa.orth diff --git a/fontconfig/fc-lang/ps_af.orth b/fontconfig/fc-lang/ps_af.orth index 3fabdf3c1..47c19dda9 100644 --- a/fontconfig/fc-lang/ps_af.orth +++ b/fontconfig/fc-lang/ps_af.orth @@ -1,52 +1,52 @@ -#
-# fontconfig/fc-lang/ps_af.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Pashto in Afghanistan (PS-AF)
-#
-# Data from Roozbeh Pournader <roozbeh@sharif.edu>
-#
-# Since the Unicode Presentation Forms don't contain any of the
-# Pashto-specific letters (that is Pashto letters not in Persian), we are
-# going with the general forms instead of the Presentation forms, unlike
-# Arabic, Persian, or Urdu.
-#
-0621-0624
-0626-063a
-0641-0642
-0644-0648
-064a
-067c
-067e
-0681
-0685-0686
-0689
-0693
-0696
-0698
-069a
-06a9
-06ab
-06bc
-06cc
-06cd
-06d0
+# +# fontconfig/fc-lang/ps_af.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Pashto in Afghanistan (PS-AF) +# +# Data from Roozbeh Pournader <roozbeh@sharif.edu> +# +# Since the Unicode Presentation Forms don't contain any of the +# Pashto-specific letters (that is Pashto letters not in Persian), we are +# going with the general forms instead of the Presentation forms, unlike +# Arabic, Persian, or Urdu. +# +0621-0624 +0626-063a +0641-0642 +0644-0648 +064a +067c +067e +0681 +0685-0686 +0689 +0693 +0696 +0698 +069a +06a9 +06ab +06bc +06cc +06cd +06d0 diff --git a/fontconfig/fc-lang/ps_pk.orth b/fontconfig/fc-lang/ps_pk.orth index c0d982441..659f4fb0e 100644 --- a/fontconfig/fc-lang/ps_pk.orth +++ b/fontconfig/fc-lang/ps_pk.orth @@ -1,52 +1,52 @@ -#
-# fontconfig/fc-lang/ps_pk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Pashto in Pakistan (PS-PK)
-#
-# Data from Roozbeh Pournader <roozbeh@sharif.edu>
-#
-# Since the Unicode Presentation Forms don't contain any of the
-# Pashto-specific letters (that is Pashto letters not in Persian), we are
-# going with the general forms instead of the Presentation forms, unlike
-# Arabic, Persian, or Urdu.
-#
-0621-0624
-0626-063a
-0641-0642
-0644-0648
-064a
-067c
-067e
-0681
-0685-0686
-0689
-0693
-0696
-0698
-069a
-06a9
-06ab
-06bc
-06cd
-06d0
-06d2
+# +# fontconfig/fc-lang/ps_pk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Pashto in Pakistan (PS-PK) +# +# Data from Roozbeh Pournader <roozbeh@sharif.edu> +# +# Since the Unicode Presentation Forms don't contain any of the +# Pashto-specific letters (that is Pashto letters not in Persian), we are +# going with the general forms instead of the Presentation forms, unlike +# Arabic, Persian, or Urdu. +# +0621-0624 +0626-063a +0641-0642 +0644-0648 +064a +067c +067e +0681 +0685-0686 +0689 +0693 +0696 +0698 +069a +06a9 +06ab +06bc +06cd +06d0 +06d2 diff --git a/fontconfig/fc-lang/pt.orth b/fontconfig/fc-lang/pt.orth index 862d82f1d..07aa83d76 100644 --- a/fontconfig/fc-lang/pt.orth +++ b/fontconfig/fc-lang/pt.orth @@ -1,64 +1,64 @@ -#
-# fontconfig/fc-lang/pt.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Portuguese (PT)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#00bb
-00c0
-00c1
-00c2
-00c3
-00c7
-00c8
-00c9
-00ca
-00cd
-00d2
-00d3
-00d4
-00d5
-00da
-00dc
-00e0
-00e1
-00e2
-00e3
-00e7
-00e8
-00e9
-00ea
-00ed
-00f2
-00f3
-00f4
-00f5
-00fa
-00fc
-##203a # angle quote
-#
+# +# fontconfig/fc-lang/pt.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Portuguese (PT) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00bb +00c0 +00c1 +00c2 +00c3 +00c7 +00c8 +00c9 +00ca +00cd +00d2 +00d3 +00d4 +00d5 +00da +00dc +00e0 +00e1 +00e2 +00e3 +00e7 +00e8 +00e9 +00ea +00ed +00f2 +00f3 +00f4 +00f5 +00fa +00fc +##203a # angle quote +# diff --git a/fontconfig/fc-lang/rm.orth b/fontconfig/fc-lang/rm.orth index 20948ea7e..9a54d879e 100644 --- a/fontconfig/fc-lang/rm.orth +++ b/fontconfig/fc-lang/rm.orth @@ -1,45 +1,45 @@ -#
-# fontconfig/fc-lang/rm.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Rhaeto-Romance (Romansch) (RM)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00c8
-00c9
-00cc
-00ce
-00d2
-00d9
-00e0
-00e8
-00e9
-00ec
-00ee
-00f2
-00f9
+# +# fontconfig/fc-lang/rm.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Rhaeto-Romance (Romansch) (RM) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00c8 +00c9 +00cc +00ce +00d2 +00d9 +00e0 +00e8 +00e9 +00ec +00ee +00f2 +00f9 diff --git a/fontconfig/fc-lang/ro.orth b/fontconfig/fc-lang/ro.orth index a2f887b71..0433de951 100644 --- a/fontconfig/fc-lang/ro.orth +++ b/fontconfig/fc-lang/ro.orth @@ -1,38 +1,38 @@ -#
-# fontconfig/fc-lang/ro.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Romanian (RO)
-#
-# Sources:
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c2
-00ce
-00e2
-00ee
-0102-0103
-0218-021b # comma-below forms (preferred over cedilla)
-#2019-201a # single quotes
-#201d-201e # double quotes
+# +# fontconfig/fc-lang/ro.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Romanian (RO) +# +# Sources: +# www.eki.ee/letter +# +0041-005a +0061-007a +00c2 +00ce +00e2 +00ee +0102-0103 +0218-021b # comma-below forms (preferred over cedilla) +#2019-201a # single quotes +#201d-201e # double quotes diff --git a/fontconfig/fc-lang/ru.orth b/fontconfig/fc-lang/ru.orth index e6eb3501b..d4391f33a 100644 --- a/fontconfig/fc-lang/ru.orth +++ b/fontconfig/fc-lang/ru.orth @@ -1,38 +1,38 @@ -#
-# fontconfig/fc-lang/ru.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Russian (RU)
-#00ab
-#00bb
-0401
-#0406 # eliminated in 1918 in favor of 418
-0410-044f
-0451
-#0456 # eliminated in 1918 in favor of 438
-#0462 # CYRILLIC CAPITAL LETTER YAT
-#0463 # CYRILLIC SMALL LETTER YAT
-#0472 # CYRILLIC CAPITAL LETTER FITA
-#0473 # CYRILLIC SMALL LETTER FITA
-#0474 # CYRILLIC CAPITAL LETTER IZHITSA
-#0475 # CYRILLIC SMALL LETTER IZHITSA
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/ru.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Russian (RU) +#00ab +#00bb +0401 +#0406 # eliminated in 1918 in favor of 418 +0410-044f +0451 +#0456 # eliminated in 1918 in favor of 438 +#0462 # CYRILLIC CAPITAL LETTER YAT +#0463 # CYRILLIC SMALL LETTER YAT +#0472 # CYRILLIC CAPITAL LETTER FITA +#0473 # CYRILLIC SMALL LETTER FITA +#0474 # CYRILLIC CAPITAL LETTER IZHITSA +#0475 # CYRILLIC SMALL LETTER IZHITSA +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/sa.orth b/fontconfig/fc-lang/sa.orth index 7d17bd1cf..9b8e399da 100644 --- a/fontconfig/fc-lang/sa.orth +++ b/fontconfig/fc-lang/sa.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/sa.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Sanskrit (Devanagari script) (SA)
-include hi.orth
+# +# fontconfig/fc-lang/sa.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Sanskrit (Devanagari script) (SA) +include hi.orth diff --git a/fontconfig/fc-lang/sah.orth b/fontconfig/fc-lang/sah.orth index 928b8070f..f22317d4d 100644 --- a/fontconfig/fc-lang/sah.orth +++ b/fontconfig/fc-lang/sah.orth @@ -1,108 +1,108 @@ -#
-# fontconfig/fc-lang/sah.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Yakut (SAH)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA
-#0473 # CYRILLIC SMALL LETTER FITA
-0494
-0495
-04a4
-04a5
-04ae
-04af
-04ba
-04bb
-04d8
-04d9
+# +# fontconfig/fc-lang/sah.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Yakut (SAH) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA +#0473 # CYRILLIC SMALL LETTER FITA +0494 +0495 +04a4 +04a5 +04ae +04af +04ba +04bb +04d8 +04d9 diff --git a/fontconfig/fc-lang/sco.orth b/fontconfig/fc-lang/sco.orth index e515ca27c..11022e164 100644 --- a/fontconfig/fc-lang/sco.orth +++ b/fontconfig/fc-lang/sco.orth @@ -1,32 +1,32 @@ -#
-# fontconfig/fc-lang/sco.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Scots (CU)
-#
-# Orthography from http://www.evertype.com/alphabets/scots.pdf
-#
-0041-005a
-0061-007a
-01b7
-021c-021d
-0292
+# +# fontconfig/fc-lang/sco.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Scots (CU) +# +# Orthography from http://www.evertype.com/alphabets/scots.pdf +# +0041-005a +0061-007a +01b7 +021c-021d +0292 diff --git a/fontconfig/fc-lang/se.orth b/fontconfig/fc-lang/se.orth index d67da376c..6ed02f888 100644 --- a/fontconfig/fc-lang/se.orth +++ b/fontconfig/fc-lang/se.orth @@ -1,37 +1,37 @@ -#
-# fontconfig/fc-lang/se.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# North Sámi (SE)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-010c-010d
-0110-0111
-014a-014b
-0160-0161
-0166-0167
-017d-017e
+# +# fontconfig/fc-lang/se.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# North Sámi (SE) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +010c-010d +0110-0111 +014a-014b +0160-0161 +0166-0167 +017d-017e diff --git a/fontconfig/fc-lang/sel.orth b/fontconfig/fc-lang/sel.orth index 0bc87b874..ba8fe5981 100644 --- a/fontconfig/fc-lang/sel.orth +++ b/fontconfig/fc-lang/sel.orth @@ -1,96 +1,96 @@ -#
-# fontconfig/fc-lang/sel.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Selkup (Ostyak-Samoyed) (SEL)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
+# +# fontconfig/fc-lang/sel.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Selkup (Ostyak-Samoyed) (SEL) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/sk.orth b/fontconfig/fc-lang/sk.orth index 08b639818..c2a36f0d3 100644 --- a/fontconfig/fc-lang/sk.orth +++ b/fontconfig/fc-lang/sk.orth @@ -1,63 +1,63 @@ -#
-# fontconfig/fc-lang/sk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Slovak (SK)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00c4
-00c9
-00cd
-00d3
-00d4
-#00d6 # evertype.com
-00da
-#00dc # evertype.com
-00dd
-00e1
-00e4
-00e9
-00ed
-00f3
-00f4
-#00f6 # evertype.com
-00fa
-#00fc # evertype.com
-00fd
-010c-010d
-010e-010f
-0139-013a
-013d-013e
-0147-0148
-#0150-0151 # evertype.com
-0154-0155
-0160-0161
-0164-0165
-#0170-0171 # evertype.com
-017d-017e
-#
+# +# fontconfig/fc-lang/sk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Slovak (SK) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00c4 +00c9 +00cd +00d3 +00d4 +#00d6 # evertype.com +00da +#00dc # evertype.com +00dd +00e1 +00e4 +00e9 +00ed +00f3 +00f4 +#00f6 # evertype.com +00fa +#00fc # evertype.com +00fd +010c-010d +010e-010f +0139-013a +013d-013e +0147-0148 +#0150-0151 # evertype.com +0154-0155 +0160-0161 +0164-0165 +#0170-0171 # evertype.com +017d-017e +# diff --git a/fontconfig/fc-lang/sl.orth b/fontconfig/fc-lang/sl.orth index 0a53eda90..ea28aa376 100644 --- a/fontconfig/fc-lang/sl.orth +++ b/fontconfig/fc-lang/sl.orth @@ -1,88 +1,88 @@ -#
-# fontconfig/fc-lang/sl.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Slovenian (SL)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-#
-# Included in eki.ee
-#
-#00C4 LATIN CAPITAL LETTER A WITH DIAERESIS
-#00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
-#00DC LATIN CAPITAL LETTER U WITH DIAERESIS
-#00E4 LATIN SMALL LETTER A WITH DIAERESIS
-#00F6 LATIN SMALL LETTER O WITH DIAERESIS
-#00FC LATIN SMALL LETTER U WITH DIAERESIS
-0106 LATIN CAPITAL LETTER C WITH ACUTE
-0107 LATIN SMALL LETTER C WITH ACUTE
-010C LATIN CAPITAL LETTER C WITH CARON
-010D LATIN SMALL LETTER C WITH CARON
-0110 LATIN CAPITAL LETTER D WITH STROKE
-0111 LATIN SMALL LETTER D WITH STROKE
-0160 LATIN CAPITAL LETTER S WITH CARON
-0161 LATIN SMALL LETTER S WITH CARON
-017D LATIN CAPITAL LETTER Z WITH CARON
-017E LATIN SMALL LETTER Z WITH CARON
-#
-# According to evertype.com:
-#
-# In slovenian, these letters are often used to transliterate
-# Serbian and Macedonian letters
-#
-#01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON
-#01C6 LATIN SMALL LETTER DZ WITH CARON
-#01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J
-#01C9 LATIN SMALL LETTER LJ
-#01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J
-#01CC LATIN SMALL LETTER NJ
-#01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z
-#01F3 LATIN SMALL LETTER DZ
-#01F4 LATIN CAPITAL LETTER G WITH ACUTE
-#01F5 LATIN SMALL LETTER G WITH ACUTE
-#1E30 LATIN CAPITAL LETTER K WITH ACUTE
-#1E31 LATIN SMALL LETTER K WITH ACUTE
-#
-# These are the transliteration target letters which are
-# not used in Slovenian at all
-#
-#0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian)
-#0403 CYRILLIC CAPITAL LETTER GJE
-#0405 CYRILLIC CAPITAL LETTER DZE
-#0409 CYRILLIC CAPITAL LETTER LJE
-#040A CYRILLIC CAPITAL LETTER NJE
-#040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian)
-#040C CYRILLIC CAPITAL LETTER KJE
-#040F CYRILLIC CAPITAL LETTER DZHE
-#0452 CYRILLIC SMALL LETTER DJE (Serbocroatian)
-#0453 CYRILLIC SMALL LETTER GJE
-#0455 CYRILLIC SMALL LETTER DZE
-#0459 CYRILLIC SMALL LETTER LJE
-#045A CYRILLIC SMALL LETTER NJE
-#045B CYRILLIC SMALL LETTER TSHE (Serbocroatian)
-#045C CYRILLIC SMALL LETTER KJE
-#045F CYRILLIC SMALL LETTER DZHE
+# +# fontconfig/fc-lang/sl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Slovenian (SL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +# +# Included in eki.ee +# +#00C4 LATIN CAPITAL LETTER A WITH DIAERESIS +#00D6 LATIN CAPITAL LETTER O WITH DIAERESIS +#00DC LATIN CAPITAL LETTER U WITH DIAERESIS +#00E4 LATIN SMALL LETTER A WITH DIAERESIS +#00F6 LATIN SMALL LETTER O WITH DIAERESIS +#00FC LATIN SMALL LETTER U WITH DIAERESIS +0106 LATIN CAPITAL LETTER C WITH ACUTE +0107 LATIN SMALL LETTER C WITH ACUTE +010C LATIN CAPITAL LETTER C WITH CARON +010D LATIN SMALL LETTER C WITH CARON +0110 LATIN CAPITAL LETTER D WITH STROKE +0111 LATIN SMALL LETTER D WITH STROKE +0160 LATIN CAPITAL LETTER S WITH CARON +0161 LATIN SMALL LETTER S WITH CARON +017D LATIN CAPITAL LETTER Z WITH CARON +017E LATIN SMALL LETTER Z WITH CARON +# +# According to evertype.com: +# +# In slovenian, these letters are often used to transliterate +# Serbian and Macedonian letters +# +#01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +#01C6 LATIN SMALL LETTER DZ WITH CARON +#01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J +#01C9 LATIN SMALL LETTER LJ +#01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J +#01CC LATIN SMALL LETTER NJ +#01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z +#01F3 LATIN SMALL LETTER DZ +#01F4 LATIN CAPITAL LETTER G WITH ACUTE +#01F5 LATIN SMALL LETTER G WITH ACUTE +#1E30 LATIN CAPITAL LETTER K WITH ACUTE +#1E31 LATIN SMALL LETTER K WITH ACUTE +# +# These are the transliteration target letters which are +# not used in Slovenian at all +# +#0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian) +#0403 CYRILLIC CAPITAL LETTER GJE +#0405 CYRILLIC CAPITAL LETTER DZE +#0409 CYRILLIC CAPITAL LETTER LJE +#040A CYRILLIC CAPITAL LETTER NJE +#040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) +#040C CYRILLIC CAPITAL LETTER KJE +#040F CYRILLIC CAPITAL LETTER DZHE +#0452 CYRILLIC SMALL LETTER DJE (Serbocroatian) +#0453 CYRILLIC SMALL LETTER GJE +#0455 CYRILLIC SMALL LETTER DZE +#0459 CYRILLIC SMALL LETTER LJE +#045A CYRILLIC SMALL LETTER NJE +#045B CYRILLIC SMALL LETTER TSHE (Serbocroatian) +#045C CYRILLIC SMALL LETTER KJE +#045F CYRILLIC SMALL LETTER DZHE diff --git a/fontconfig/fc-lang/sm.orth b/fontconfig/fc-lang/sm.orth index f2c663ed6..e8dc63ab3 100644 --- a/fontconfig/fc-lang/sm.orth +++ b/fontconfig/fc-lang/sm.orth @@ -1,30 +1,30 @@ -#
-# fontconfig/fc-lang/sm.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Samoan (AF)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-02bb
+# +# fontconfig/fc-lang/sm.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Samoan (AF) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +02bb diff --git a/fontconfig/fc-lang/sma.orth b/fontconfig/fc-lang/sma.orth index 6d6bc4048..4292ec7c5 100644 --- a/fontconfig/fc-lang/sma.orth +++ b/fontconfig/fc-lang/sma.orth @@ -1,37 +1,37 @@ -#
-# fontconfig/fc-lang/sma.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# South Sámi (SMA)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c4
-00e4
-00c5
-00e5
-00d6
-00f6
-00cf
-00ef
+# +# fontconfig/fc-lang/sma.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# South Sámi (SMA) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c4 +00e4 +00c5 +00e5 +00d6 +00f6 +00cf +00ef diff --git a/fontconfig/fc-lang/smj.orth b/fontconfig/fc-lang/smj.orth index 9488bccbc..3d466fdda 100644 --- a/fontconfig/fc-lang/smj.orth +++ b/fontconfig/fc-lang/smj.orth @@ -1,37 +1,37 @@ -#
-# fontconfig/fc-lang/smj.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Lule Sámi (SMJ)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-00c4
-00e4
-00c5
-00e5
-00d1
-00f1
+# +# fontconfig/fc-lang/smj.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Lule Sámi (SMJ) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +00c4 +00e4 +00c5 +00e5 +00d1 +00f1 diff --git a/fontconfig/fc-lang/smn.orth b/fontconfig/fc-lang/smn.orth index 330de638b..54ac9cef7 100644 --- a/fontconfig/fc-lang/smn.orth +++ b/fontconfig/fc-lang/smn.orth @@ -1,40 +1,40 @@ -#
-# fontconfig/fc-lang/smn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Inari Sámi (SMN)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c1
-00e1
-00c2
-00e2
-00c4
-00e4
-010c-010d
-0110-0111
-014a-014b
-0160-0161
-017d-017e
+# +# fontconfig/fc-lang/smn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Inari Sámi (SMN) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +00c2 +00e2 +00c4 +00e4 +010c-010d +0110-0111 +014a-014b +0160-0161 +017d-017e diff --git a/fontconfig/fc-lang/sms.orth b/fontconfig/fc-lang/sms.orth index cf92fe0c5..b9391ae42 100644 --- a/fontconfig/fc-lang/sms.orth +++ b/fontconfig/fc-lang/sms.orth @@ -1,48 +1,48 @@ -#
-# fontconfig/fc-lang/sms.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Skolt Sámi (SMJ)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c2
-00e2
-00c4
-00e4
-00c5
-00e5
-010c-010d
-0110-0111
-01b7
-0292
-01ee-01ef
-01e6-01e7
-01e4-01e5
-01e8-01e9
-014a-014b
-00d5
-00f5
-0160-0161
-017d-017e
+# +# fontconfig/fc-lang/sms.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Skolt Sámi (SMJ) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c2 +00e2 +00c4 +00e4 +00c5 +00e5 +010c-010d +0110-0111 +01b7 +0292 +01ee-01ef +01e6-01e7 +01e4-01e5 +01e8-01e9 +014a-014b +00d5 +00f5 +0160-0161 +017d-017e diff --git a/fontconfig/fc-lang/so.orth b/fontconfig/fc-lang/so.orth index 0df2d91c0..0867a4595 100644 --- a/fontconfig/fc-lang/so.orth +++ b/fontconfig/fc-lang/so.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/so.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Somali (SO)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a # Somali doesn't use p, v or z
-0061-007a
+# +# fontconfig/fc-lang/so.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Somali (SO) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a # Somali doesn't use p, v or z +0061-007a diff --git a/fontconfig/fc-lang/sq.orth b/fontconfig/fc-lang/sq.orth index 01d7db0b6..21c885acf 100644 --- a/fontconfig/fc-lang/sq.orth +++ b/fontconfig/fc-lang/sq.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/sq.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Albanian (SQ)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c7
-00cb
-00e7
-00eb
+# +# fontconfig/fc-lang/sq.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Albanian (SQ) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c7 +00cb +00e7 +00eb diff --git a/fontconfig/fc-lang/sr.orth b/fontconfig/fc-lang/sr.orth index f3e65f13d..0350a687c 100644 --- a/fontconfig/fc-lang/sr.orth +++ b/fontconfig/fc-lang/sr.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/sr.orth
-#
-# Copyright © 2008 Danilo Šegan
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Serbian (SR)
-#
-0402
-0408-040b
-040f
-0410-0418
-041a-0428
-0430-0438
-043a-0448
-0452
-0458-045b
-045f
+# +# fontconfig/fc-lang/sr.orth +# +# Copyright © 2008 Danilo Šegan +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Serbian (SR) +# +0402 +0408-040b +040f +0410-0418 +041a-0428 +0430-0438 +043a-0448 +0452 +0458-045b +045f diff --git a/fontconfig/fc-lang/sv.orth b/fontconfig/fc-lang/sv.orth index 35645c3de..4f40fff33 100644 --- a/fontconfig/fc-lang/sv.orth +++ b/fontconfig/fc-lang/sv.orth @@ -1,100 +1,100 @@ -#
-# fontconfig/fc-lang/sv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Swedish (SV)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-# evertype.com includes a large number of additional precomposed letters
-# not marked by eki.ee; I've left those commented out here
-#
-0041-005a
-0061-007a
-#00bb
-00c0
-00c1
-#00c2
-#00c3
-00c4
-00c5
-#00c6
-#00c7
-#00c8
-00c9
-#00ca
-00cb
-#00cc
-#00cd
-#00ce
-#00cf
-#00d0
-#00d1
-#00d2
-#00d3
-#00d4
-00d6
-#00d7
-#00d8
-#00d9
-#00da
-#00db
-00dc
-#00dd
-00e0
-00e1
-#00e2
-#00e3
-00e4
-00e5
-#00e6
-#00e7
-#00e8
-00e9
-#00ea
-00eb
-#00ec
-#00ed
-#00ee
-#00ef
-#00f0
-#00f1
-#00f2
-#00f3
-#00f4
-00f6
-#00f8
-#00f9
-#00fa
-#00fb
-00fc
-#00fd
-#0106-0107 # C, c with acute
-#010c-010d # C, c with caron
-#0141-0144 # L, l with stroke N, n with acute
-#0158-015b # R, r with caron S, s with acute
-#0160-0161 # S, s with caron
-#2019 # single quote
-#201d # double quote
-#203a # angle quote
+# +# fontconfig/fc-lang/sv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Swedish (SV) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +# evertype.com includes a large number of additional precomposed letters +# not marked by eki.ee; I've left those commented out here +# +0041-005a +0061-007a +#00bb +00c0 +00c1 +#00c2 +#00c3 +00c4 +00c5 +#00c6 +#00c7 +#00c8 +00c9 +#00ca +00cb +#00cc +#00cd +#00ce +#00cf +#00d0 +#00d1 +#00d2 +#00d3 +#00d4 +00d6 +#00d7 +#00d8 +#00d9 +#00da +#00db +00dc +#00dd +00e0 +00e1 +#00e2 +#00e3 +00e4 +00e5 +#00e6 +#00e7 +#00e8 +00e9 +#00ea +00eb +#00ec +#00ed +#00ee +#00ef +#00f0 +#00f1 +#00f2 +#00f3 +#00f4 +00f6 +#00f8 +#00f9 +#00fa +#00fb +00fc +#00fd +#0106-0107 # C, c with acute +#010c-010d # C, c with caron +#0141-0144 # L, l with stroke N, n with acute +#0158-015b # R, r with caron S, s with acute +#0160-0161 # S, s with caron +#2019 # single quote +#201d # double quote +#203a # angle quote diff --git a/fontconfig/fc-lang/sw.orth b/fontconfig/fc-lang/sw.orth index c2988a96e..f4bff3d19 100644 --- a/fontconfig/fc-lang/sw.orth +++ b/fontconfig/fc-lang/sw.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/sw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Swahili (SW)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a # Swahili doesn't use f, q or x and uses r only for loan words
-0061-007a
+# +# fontconfig/fc-lang/sw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Swahili (SW) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a # Swahili doesn't use f, q or x and uses r only for loan words +0061-007a diff --git a/fontconfig/fc-lang/syr.orth b/fontconfig/fc-lang/syr.orth index 88366a459..97d6edc48 100644 --- a/fontconfig/fc-lang/syr.orth +++ b/fontconfig/fc-lang/syr.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/syr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Syriac (SYR)
-#
-# Coverage given by Emil Soleyman-Zomalan <emil@nishra.com>
-#
-0710-072c # Syriac letters
-0730-073f # Syriac points (vowels)
+# +# fontconfig/fc-lang/syr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Syriac (SYR) +# +# Coverage given by Emil Soleyman-Zomalan <emil@nishra.com> +# +0710-072c # Syriac letters +0730-073f # Syriac points (vowels) diff --git a/fontconfig/fc-lang/ta.orth b/fontconfig/fc-lang/ta.orth index 995a3c84b..52a6f1d58 100644 --- a/fontconfig/fc-lang/ta.orth +++ b/fontconfig/fc-lang/ta.orth @@ -1,46 +1,46 @@ -#
-# fontconfig/fc-lang/ta.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tamil (TA)
-#
-# Taken from the Unicode coverage of this language
-#
-# updates from Jungshik Shin <jshin@mailaps.org>
-#
-#0b82 # not present in many Tamil fonts
-0b83
-0b85-0b8a
-0b8e-0b90
-0b92-0b95
-0b99-0b9a
-0b9c
-0b9e-0b9f
-0ba3-0ba4
-0ba8-0baa
-0bae-0bb5
-0bb7-0bb9
-0bbe-0bc2
-0bc6-0bc8
-0bca-0bcd
-0bd7
-#0be7-0bf2 # Tamil digits and numbers
+# +# fontconfig/fc-lang/ta.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tamil (TA) +# +# Taken from the Unicode coverage of this language +# +# updates from Jungshik Shin <jshin@mailaps.org> +# +#0b82 # not present in many Tamil fonts +0b83 +0b85-0b8a +0b8e-0b90 +0b92-0b95 +0b99-0b9a +0b9c +0b9e-0b9f +0ba3-0ba4 +0ba8-0baa +0bae-0bb5 +0bb7-0bb9 +0bbe-0bc2 +0bc6-0bc8 +0bca-0bcd +0bd7 +#0be7-0bf2 # Tamil digits and numbers diff --git a/fontconfig/fc-lang/te.orth b/fontconfig/fc-lang/te.orth index 162029156..141c932ed 100644 --- a/fontconfig/fc-lang/te.orth +++ b/fontconfig/fc-lang/te.orth @@ -1,39 +1,39 @@ -#
-# fontconfig/fc-lang/te.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Telugu (te)
-#
-# Taken from the Unicode coverage of this language
-#
-0c01-0c03
-0c05-0c0c
-0c0e-0c10
-0c12-0c28
-0c2a-0c33
-0c35-0c39
-0c3e-0c44
-0c46-0c48
-0c4a-0c4d
-0c55-0c56
-0c60-0c61
-#0c66-0c6f # Digits
+# +# fontconfig/fc-lang/te.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Telugu (te) +# +# Taken from the Unicode coverage of this language +# +0c01-0c03 +0c05-0c0c +0c0e-0c10 +0c12-0c28 +0c2a-0c33 +0c35-0c39 +0c3e-0c44 +0c46-0c48 +0c4a-0c4d +0c55-0c56 +0c60-0c61 +#0c66-0c6f # Digits diff --git a/fontconfig/fc-lang/tg.orth b/fontconfig/fc-lang/tg.orth index 800dd7579..fc99ab1da 100644 --- a/fontconfig/fc-lang/tg.orth +++ b/fontconfig/fc-lang/tg.orth @@ -1,108 +1,108 @@ -#
-# fontconfig/fc-lang/tg.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Tajik (TG)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-0492
-0493
-049a
-049b
-04b2
-04b3
-04b6
-04b7
-04e2
-04e3
-04ee
-04ef
+# +# fontconfig/fc-lang/tg.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Tajik (TG) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +0492 +0493 +049a +049b +04b2 +04b3 +04b6 +04b7 +04e2 +04e3 +04ee +04ef diff --git a/fontconfig/fc-lang/th.orth b/fontconfig/fc-lang/th.orth index 1f2f51208..03c3c32ea 100644 --- a/fontconfig/fc-lang/th.orth +++ b/fontconfig/fc-lang/th.orth @@ -1,30 +1,30 @@ -#
-# fontconfig/fc-lang/th.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Thai (th)
-#
-0e01-0e3a
-0e3f-0e4e
-#0e4f # Punctuation
-#0e50-0e59 # Digits
-#0e5a-0e5b # Punctuation
+# +# fontconfig/fc-lang/th.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Thai (th) +# +0e01-0e3a +0e3f-0e4e +#0e4f # Punctuation +#0e50-0e59 # Digits +#0e5a-0e5b # Punctuation diff --git a/fontconfig/fc-lang/ti_er.orth b/fontconfig/fc-lang/ti_er.orth index 9438bd07e..91b37acc5 100644 --- a/fontconfig/fc-lang/ti_er.orth +++ b/fontconfig/fc-lang/ti_er.orth @@ -1,56 +1,56 @@ -#
-# fontconfig/fc-lang/ti_er.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Eritrean Tigrinya (TI-ER) Ethiopic Convention
-#
-# Taken from Unicode coverage (1200-137f)
-#
-# Sylables
-1200-1206 # he-ho
-1208-1216 # le-Ho, skip HWa
-1218-121f # me-mWa
-1228-1230 # re-sWa
-1238-1246 # re-qo
-1248 # qWe
-124a-124d # qWi-qW
-1250-1256 # Qe-Qo
-1258 # QWe
-125a-125d # QWi-QW
-1260-126e # be-vo
-1270-127f # te-cWa
-1290-12a7 # ne-o
-12a8-12ae # ke-ko
-12b0 # kWe
-12b2-12b5 # kWi-kW
-12c8-12ce # Ke-Ko
-12c0 # KWe
-12c2-12c5 # KWi-KW
-12c8-12ce # we-wo
-12d0-12d6 # `e-`o
-12d8-12ee # ze-yo
-12f0-12f7 # de-dWa
-1300-130e # je-go
-1310 # gWe
-1312-1315 # gWi-gW
-1320-133f # Te-SWa
-1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
+# +# fontconfig/fc-lang/ti_er.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Eritrean Tigrinya (TI-ER) Ethiopic Convention +# +# Taken from Unicode coverage (1200-137f) +# +# Sylables +1200-1206 # he-ho +1208-1216 # le-Ho, skip HWa +1218-121f # me-mWa +1228-1230 # re-sWa +1238-1246 # re-qo +1248 # qWe +124a-124d # qWi-qW +1250-1256 # Qe-Qo +1258 # QWe +125a-125d # QWi-QW +1260-126e # be-vo +1270-127f # te-cWa +1290-12a7 # ne-o +12a8-12ae # ke-ko +12b0 # kWe +12b2-12b5 # kWi-kW +12c8-12ce # Ke-Ko +12c0 # KWe +12c2-12c5 # KWi-KW +12c8-12ce # we-wo +12d0-12d6 # `e-`o +12d8-12ee # ze-yo +12f0-12f7 # de-dWa +1300-130e # je-go +1310 # gWe +1312-1315 # gWi-gW +1320-133f # Te-SWa +1348-1356 # fe-po, skip pWa, rYa, mYa, fYa diff --git a/fontconfig/fc-lang/ti_et.orth b/fontconfig/fc-lang/ti_et.orth index a9f123521..b80be9915 100644 --- a/fontconfig/fc-lang/ti_et.orth +++ b/fontconfig/fc-lang/ti_et.orth @@ -1,33 +1,33 @@ -#
-# fontconfig/fc-lang/ti_et.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Ethiopian Tigrinya (TI-ET) Ethiopic Convention
-#
-# The same as Ethiopic
-#
-include ti_er.orth
-1220-1226 # `se-`so
-1280-1286 # `he-`ho
-1288 # hWe
-128a-128d # hWi-hW
-1340-1346 # `Se-`So
+# +# fontconfig/fc-lang/ti_et.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Ethiopian Tigrinya (TI-ET) Ethiopic Convention +# +# The same as Ethiopic +# +include ti_er.orth +1220-1226 # `se-`so +1280-1286 # `he-`ho +1288 # hWe +128a-128d # hWi-hW +1340-1346 # `Se-`So diff --git a/fontconfig/fc-lang/tig.orth b/fontconfig/fc-lang/tig.orth index c569e9300..d731ebc2b 100644 --- a/fontconfig/fc-lang/tig.orth +++ b/fontconfig/fc-lang/tig.orth @@ -1,52 +1,52 @@ -#
-# fontconfig/fc-lang/tig.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tigre (TIG) Ethiopic Convention
-#
-# Taken from Unicode coverage (1200-137f)
-#
-# Sylables
-1200-1206 # he-ho
-1208-1216 # le-Ho, skip HWa
-1218-121f # me-mWa
-1228-1230 # re-sWa
-1238-1246 # re-qo
-1248 # qWe
-124a-124d # qWi-qW
-1260-126e # be-vo
-1270-127f # te-cWa
-1290-1297 # ne-nWa
-12a0-12a6 # a-o
-12a8-12ae # ke-ko
-12b0 # kWe
-12b2-12b5 # kWi-kW
-12c8-12ce # we-wo
-12d0-12d6 # `e-`o
-12d8-12df # ze-zWa
-12e8-12ee # ye-yo
-12f0-12f7 # de-dWa
-1300-130e # je-go
-1310 # gWe
-1312-1315 # gWi-gW
-1320-133f # Te-SWa
-1348-1356 # fe-po, skip pWa, rYa, mYa, fYa
+# +# fontconfig/fc-lang/tig.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tigre (TIG) Ethiopic Convention +# +# Taken from Unicode coverage (1200-137f) +# +# Sylables +1200-1206 # he-ho +1208-1216 # le-Ho, skip HWa +1218-121f # me-mWa +1228-1230 # re-sWa +1238-1246 # re-qo +1248 # qWe +124a-124d # qWi-qW +1260-126e # be-vo +1270-127f # te-cWa +1290-1297 # ne-nWa +12a0-12a6 # a-o +12a8-12ae # ke-ko +12b0 # kWe +12b2-12b5 # kWi-kW +12c8-12ce # we-wo +12d0-12d6 # `e-`o +12d8-12df # ze-zWa +12e8-12ee # ye-yo +12f0-12f7 # de-dWa +1300-130e # je-go +1310 # gWe +1312-1315 # gWi-gW +1320-133f # Te-SWa +1348-1356 # fe-po, skip pWa, rYa, mYa, fYa diff --git a/fontconfig/fc-lang/tn.orth b/fontconfig/fc-lang/tn.orth index 16f607311..2a1510a82 100644 --- a/fontconfig/fc-lang/tn.orth +++ b/fontconfig/fc-lang/tn.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/tn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tswana (TN)
-#
-# Orthography from http://www.eki.ee/letter
-# and http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml
-#
-0041-005a
-0061-007a
-00ca
-00ea
-00d4
-00f4
-0160-0161
+# +# fontconfig/fc-lang/tn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tswana (TN) +# +# Orthography from http://www.eki.ee/letter +# and http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml +# +0041-005a +0061-007a +00ca +00ea +00d4 +00f4 +0160-0161 diff --git a/fontconfig/fc-lang/to.orth b/fontconfig/fc-lang/to.orth index 4e1cd03aa..2a5f73670 100644 --- a/fontconfig/fc-lang/to.orth +++ b/fontconfig/fc-lang/to.orth @@ -1,30 +1,30 @@ -#
-# fontconfig/fc-lang/to.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tonga (TO)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-02bb
+# +# fontconfig/fc-lang/to.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tonga (TO) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +02bb diff --git a/fontconfig/fc-lang/tr.orth b/fontconfig/fc-lang/tr.orth index f14b75a65..11031bb4e 100644 --- a/fontconfig/fc-lang/tr.orth +++ b/fontconfig/fc-lang/tr.orth @@ -1,49 +1,49 @@ -#
-# fontconfig/fc-lang/tr.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Turkish (TR)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX
-00C7 LATIN CAPITAL LETTER C WITH CEDILLA
-00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX
-00D6 LATIN CAPITAL LETTER O WITH DIAERESIS
-00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX
-00DC LATIN CAPITAL LETTER U WITH DIAERESIS
-00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX
-00E7 LATIN SMALL LETTER C WITH CEDILLA
-00EE LATIN SMALL LETTER I WITH CIRCUMFLEX
-00F6 LATIN SMALL LETTER O WITH DIAERESIS
-00FB LATIN SMALL LETTER U WITH CIRCUMFLEX
-00FC LATIN SMALL LETTER U WITH DIAERESIS
-011E LATIN CAPITAL LETTER G WITH BREVE
-011F LATIN SMALL LETTER G WITH BREVE
-0130 LATIN CAPITAL LETTER I WITH DOT ABOVE
-0131 LATIN SMALL LETTER DOTLESS I
-015E LATIN CAPITAL LETTER S WITH CEDILLA *
-015F LATIN SMALL LETTER S WITH CEDILLA *
+# +# fontconfig/fc-lang/tr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Turkish (TR) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C7 LATIN CAPITAL LETTER C WITH CEDILLA +00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00D6 LATIN CAPITAL LETTER O WITH DIAERESIS +00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC LATIN CAPITAL LETTER U WITH DIAERESIS +00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX +00E7 LATIN SMALL LETTER C WITH CEDILLA +00EE LATIN SMALL LETTER I WITH CIRCUMFLEX +00F6 LATIN SMALL LETTER O WITH DIAERESIS +00FB LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC LATIN SMALL LETTER U WITH DIAERESIS +011E LATIN CAPITAL LETTER G WITH BREVE +011F LATIN SMALL LETTER G WITH BREVE +0130 LATIN CAPITAL LETTER I WITH DOT ABOVE +0131 LATIN SMALL LETTER DOTLESS I +015E LATIN CAPITAL LETTER S WITH CEDILLA * +015F LATIN SMALL LETTER S WITH CEDILLA * diff --git a/fontconfig/fc-lang/ts.orth b/fontconfig/fc-lang/ts.orth index 1226dd842..ade4e3bbf 100644 --- a/fontconfig/fc-lang/ts.orth +++ b/fontconfig/fc-lang/ts.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/ts.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Tsonga (TS)
-#
-# Orthography taken from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
+# +# fontconfig/fc-lang/ts.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tsonga (TS) +# +# Orthography taken from http://www.eki.ee/letter +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/tt.orth b/fontconfig/fc-lang/tt.orth index 588b2c444..0292d1ff0 100644 --- a/fontconfig/fc-lang/tt.orth +++ b/fontconfig/fc-lang/tt.orth @@ -1,108 +1,108 @@ -#
-# fontconfig/fc-lang/tt.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Tatar (TT)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA
-#0473 # CYRILLIC SMALL LETTER FITA
-0496
-0497
-04a2
-04a3
-04ae
-04af
-04ba
-04bb
-04d8
-04d9
+# +# fontconfig/fc-lang/tt.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Tatar (TT) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA +#0473 # CYRILLIC SMALL LETTER FITA +0496 +0497 +04a2 +04a3 +04ae +04af +04ba +04bb +04d8 +04d9 diff --git a/fontconfig/fc-lang/tw.orth b/fontconfig/fc-lang/tw.orth index f89379cc4..4cee88b63 100644 --- a/fontconfig/fc-lang/tw.orth +++ b/fontconfig/fc-lang/tw.orth @@ -1,50 +1,50 @@ -#
-# fontconfig/fc-lang/tw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Twi (tw)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
-00C3 # LATIN CAPITAL LETTER A WITH TILDE
-00E3 # LATIN SMALL LETTER A WITH TILDE
-00D1 # LATIN CAPITAL LETTER N WITH TILDE
-00D5 # LATIN CAPITAL LETTER O WITH TILDE
-00F1 # LATIN SMALL LETTER N WITH TILDE
-00F5 # LATIN SMALL LETTER O WITH TILDE
-0128 # LATIN CAPITAL LETTER I WITH TILDE
-0129 # LATIN SMALL LETTER I WITH TILDE
-0168 # LATIN CAPITAL LETTER U WITH TILDE
-0169 # LATIN SMALL LETTER U WITH TILDE
-0186 # LATIN CAPITAL LETTER OPEN O
-0254 # LATIN SMALL LETTER OPEN O
-0190 # LATIN CAPITAL LETTER OPEN E
-025B # LATIN SMALL LETTER OPEN E
-0303 # COMBINING TILDE
-0306 # COMBINING BREVE (Vrachy)
-0329 # COMBINING VERTICAL LINE BELOW
-1EBC # LATIN CAPITAL LETTER E WITH TILDE
-1EBD # LATIN SMALL LETTER E WITH TILDE
-1EF8 # LATIN CAPITAL LETTER Y WITH TILDE
-1EF9 # LATIN SMALL LETTER Y WITH TILDE
+# +# fontconfig/fc-lang/tw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Twi (tw) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a +00C3 # LATIN CAPITAL LETTER A WITH TILDE +00E3 # LATIN SMALL LETTER A WITH TILDE +00D1 # LATIN CAPITAL LETTER N WITH TILDE +00D5 # LATIN CAPITAL LETTER O WITH TILDE +00F1 # LATIN SMALL LETTER N WITH TILDE +00F5 # LATIN SMALL LETTER O WITH TILDE +0128 # LATIN CAPITAL LETTER I WITH TILDE +0129 # LATIN SMALL LETTER I WITH TILDE +0168 # LATIN CAPITAL LETTER U WITH TILDE +0169 # LATIN SMALL LETTER U WITH TILDE +0186 # LATIN CAPITAL LETTER OPEN O +0254 # LATIN SMALL LETTER OPEN O +0190 # LATIN CAPITAL LETTER OPEN E +025B # LATIN SMALL LETTER OPEN E +0303 # COMBINING TILDE +0306 # COMBINING BREVE (Vrachy) +0329 # COMBINING VERTICAL LINE BELOW +1EBC # LATIN CAPITAL LETTER E WITH TILDE +1EBD # LATIN SMALL LETTER E WITH TILDE +1EF8 # LATIN CAPITAL LETTER Y WITH TILDE +1EF9 # LATIN SMALL LETTER Y WITH TILDE diff --git a/fontconfig/fc-lang/tyv.orth b/fontconfig/fc-lang/tyv.orth index 7926a6768..9498541f9 100644 --- a/fontconfig/fc-lang/tyv.orth +++ b/fontconfig/fc-lang/tyv.orth @@ -1,102 +1,102 @@ -#
-# fontconfig/fc-lang/tyv.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Coverage taken from TITUS (Thesaurus Indogermanischer Text und
-# Sprachmaterialien)
-#
-# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm
-#
-# Tuvinian (TYV)
-#
-0401
-0410
-0411
-0412
-0413
-0414
-0415
-0416
-0417
-0418
-0419
-041a
-041b
-041c
-041d
-041e
-041f
-0420
-0421
-0422
-0423
-0424
-0425
-0426
-0427
-0428
-0429
-042a
-042b
-042c
-042d
-042e
-042f
-0430
-0431
-0432
-0433
-0434
-0435
-0436
-0437
-0438
-0439
-043a
-043b
-043c
-043d
-043e
-043f
-0440
-0441
-0442
-0443
-0444
-0445
-0446
-0447
-0448
-0449
-044a
-044b
-044c
-044d
-044e
-044f
-0451
-#0472 # CYRILLIC CAPITAL LETTER FITA
-#0473 # CYRILLIC SMALL LETTER FITA
-04a2
-04a3
-04ae
-04af
+# +# fontconfig/fc-lang/tyv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Tuvinian (TYV) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA +#0473 # CYRILLIC SMALL LETTER FITA +04a2 +04a3 +04ae +04af diff --git a/fontconfig/fc-lang/ug.orth b/fontconfig/fc-lang/ug.orth index 6b97b9a04..1a6f28d99 100644 --- a/fontconfig/fc-lang/ug.orth +++ b/fontconfig/fc-lang/ug.orth @@ -1,50 +1,50 @@ -#
-# fontconfig/fc-lang/ug.orth
-#
-# Copyright © 2010
-# UKIJ - Uyghur Computer Science Association (http://www.ukij.org/)
-# Ubuntu Uyghur Translation Team (https://launchpad.net/~ubuntu-l10n-ug)
-# Kenjisoft (http://kenjisoft.homelinux.com/)
-# Bilik (http://www.bilik.cn/)
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors makes no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Uyghur (UG)
-#
-# Uyghur is written in a modified Persian-Arabic script. For detailed
-# information, refer to http://en.wikipedia.org/wiki/Uyghur_language
-#
-0626-0628
-062A
-062C
-062E-062F
-0631-0634
-063A
-0641-0646
-0648-064A
-067E
-0686
-0698
-06AD
-06AF
-06BE
-06C6-06C8
-06CB
-06D0
-06D5
+# +# fontconfig/fc-lang/ug.orth +# +# Copyright © 2010 +# UKIJ - Uyghur Computer Science Association (http://www.ukij.org/) +# Ubuntu Uyghur Translation Team (https://launchpad.net/~ubuntu-l10n-ug) +# Kenjisoft (http://kenjisoft.homelinux.com/) +# Bilik (http://www.bilik.cn/) +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors makes no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Uyghur (UG) +# +# Uyghur is written in a modified Persian-Arabic script. For detailed +# information, refer to http://en.wikipedia.org/wiki/Uyghur_language +# +0626-0628 +062A +062C +062E-062F +0631-0634 +063A +0641-0646 +0648-064A +067E +0686 +0698 +06AD +06AF +06BE +06C6-06C8 +06CB +06D0 +06D5 diff --git a/fontconfig/fc-lang/uk.orth b/fontconfig/fc-lang/uk.orth index 639593360..d1dc05b46 100644 --- a/fontconfig/fc-lang/uk.orth +++ b/fontconfig/fc-lang/uk.orth @@ -1,43 +1,43 @@ -#
-# fontconfig/fc-lang/uk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Ukrainian (UK)
-#
-# Sources:
-# www.evertype.com
-# www.eki.ee/letter
-#
-#00ab
-#00bb
-#0401 # evertype.com
-0404
-0406
-0407
-0410-044f
-#0451 # evertype.com
-0454
-0456
-0457
-0490
-0491
-#2039-203a # angle quotes
+# +# fontconfig/fc-lang/uk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Ukrainian (UK) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab +#00bb +#0401 # evertype.com +0404 +0406 +0407 +0410-044f +#0451 # evertype.com +0454 +0456 +0457 +0490 +0491 +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/ur.orth b/fontconfig/fc-lang/ur.orth index 5b7b5e656..57f724d10 100644 --- a/fontconfig/fc-lang/ur.orth +++ b/fontconfig/fc-lang/ur.orth @@ -1,65 +1,65 @@ -#
-# fontconfig/fc-lang/ur.orth
-#
-# Copyright © 2002 Keith Packard
-# Copyright © 2009 Roozbeh Pournader
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Urdu (ur)
-#
-# We are assuming that:
-# * Most fonts that claim to support an Arabic letter actually do so;
-# * Most modern text rendering software use OpenType tables, instead of
-# directly using presentation forms.
-# * Some good Arabic fonts do not support codepoints for Arabic presentation
-# forms.
-# Thus, we are switching to general forms of Arabic letters.
-#
-# General forms:
-0621-0624
-0626-063a
-0641-0642
-0644-0648
-0679
-067e
-0686
-0688
-0691
-0698
-06a9
-06af
-06ba
-06be
-06cc
-06d2
-# Presentations forms:
-#fb56-fb59
-#fb66-fb69
-#fb7a-fb7d
-#fb88-fb8d
-#fb8e-fb95
-#fb9e-fb9f
-#fbfc-fbff
-#fbaa-fbaf
-#fe80-fe86
-#fe89-fed8
-#fedd-feee
-##fef5-fef8 # These four happen very rarely
-#fefb-fefc
+# +# fontconfig/fc-lang/ur.orth +# +# Copyright © 2002 Keith Packard +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Urdu (ur) +# +# We are assuming that: +# * Most fonts that claim to support an Arabic letter actually do so; +# * Most modern text rendering software use OpenType tables, instead of +# directly using presentation forms. +# * Some good Arabic fonts do not support codepoints for Arabic presentation +# forms. +# Thus, we are switching to general forms of Arabic letters. +# +# General forms: +0621-0624 +0626-063a +0641-0642 +0644-0648 +0679 +067e +0686 +0688 +0691 +0698 +06a9 +06af +06ba +06be +06cc +06d2 +# Presentations forms: +#fb56-fb59 +#fb66-fb69 +#fb7a-fb7d +#fb88-fb8d +#fb8e-fb95 +#fb9e-fb9f +#fbfc-fbff +#fbaa-fbaf +#fe80-fe86 +#fe89-fed8 +#fedd-feee +##fef5-fef8 # These four happen very rarely +#fefb-fefc diff --git a/fontconfig/fc-lang/ve.orth b/fontconfig/fc-lang/ve.orth index 96d9af3e2..173cbf5a6 100644 --- a/fontconfig/fc-lang/ve.orth +++ b/fontconfig/fc-lang/ve.orth @@ -1,34 +1,34 @@ -#
-# fontconfig/fc-lang/ve.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Venda (ve)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-1e12-1e13
-1e3c-1e3d
-1e44-1e45
-1e4a-1e4b
-1e70-1e71
+# +# fontconfig/fc-lang/ve.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Venda (ve) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +1e12-1e13 +1e3c-1e3d +1e44-1e45 +1e4a-1e4b +1e70-1e71 diff --git a/fontconfig/fc-lang/vi.orth b/fontconfig/fc-lang/vi.orth index 8255c3d68..96c51a95d 100644 --- a/fontconfig/fc-lang/vi.orth +++ b/fontconfig/fc-lang/vi.orth @@ -1,58 +1,58 @@ -#
-# fontconfig/fc-lang/vi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Vietnamese (VI)
-#
-# Information extracted from email sent by Markus Kuhn about the
-# standard Vietnamese character set (TCVN 6909:2001)
-#
-0041-005a
-0061-007a
-00c0-00c3
-00c8-00ca
-00cc-00cd
-00d2-00d5
-00d9-00da
-00dd
-00e0-00e3
-00e8-00ea
-00ec-00ed
-00f2-00f5
-00f9-00fa
-00fd
-0102-0103
-0110-0111
-0128-0129
-0168-0169
-01a0-01a1
-01af-01b0
-# diacritical marks
-0300-0303
-0306
-0309
-031b
-0323
-# more precomposed latin
-1ea0-1ef9
-# double quote marks
-#201c-201d
+# +# fontconfig/fc-lang/vi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Vietnamese (VI) +# +# Information extracted from email sent by Markus Kuhn about the +# standard Vietnamese character set (TCVN 6909:2001) +# +0041-005a +0061-007a +00c0-00c3 +00c8-00ca +00cc-00cd +00d2-00d5 +00d9-00da +00dd +00e0-00e3 +00e8-00ea +00ec-00ed +00f2-00f5 +00f9-00fa +00fd +0102-0103 +0110-0111 +0128-0129 +0168-0169 +01a0-01a1 +01af-01b0 +# diacritical marks +0300-0303 +0306 +0309 +031b +0323 +# more precomposed latin +1ea0-1ef9 +# double quote marks +#201c-201d diff --git a/fontconfig/fc-lang/vo.orth b/fontconfig/fc-lang/vo.orth index fe2b34946..52dcb1899 100644 --- a/fontconfig/fc-lang/vo.orth +++ b/fontconfig/fc-lang/vo.orth @@ -1,36 +1,36 @@ -#
-# fontconfig/fc-lang/vo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Volapük (VO)
-0041-0050
-0052-0056
-0058-005a
-0061-0070
-0072-0076
-0078-007a
-00c4
-00d6
-00dc
-00e4
-00f6
-00fc
+# +# fontconfig/fc-lang/vo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Volapük (VO) +0041-0050 +0052-0056 +0058-005a +0061-0070 +0072-0076 +0078-007a +00c4 +00d6 +00dc +00e4 +00f6 +00fc diff --git a/fontconfig/fc-lang/vot.orth b/fontconfig/fc-lang/vot.orth index 2bfafdba2..b31b22fb1 100644 --- a/fontconfig/fc-lang/vot.orth +++ b/fontconfig/fc-lang/vot.orth @@ -1,40 +1,40 @@ -#
-# fontconfig/fc-lang/vot.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Orthography from http://www.everytype.com/alphabets/votic.pdf
-#
-# Votic (VOT)
-#
-# Sources:
-# www.evertype.com
-#
-0041-005a
-0061-007a
-00c4
-00d6
-00dc
-00e4
-00f6
-00fc
-0160-0161
-017d-017e
+# +# fontconfig/fc-lang/vot.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Orthography from http://www.everytype.com/alphabets/votic.pdf +# +# Votic (VOT) +# +# Sources: +# www.evertype.com +# +0041-005a +0061-007a +00c4 +00d6 +00dc +00e4 +00f6 +00fc +0160-0161 +017d-017e diff --git a/fontconfig/fc-lang/wa.orth b/fontconfig/fc-lang/wa.orth index bb854343e..25e6ff54e 100644 --- a/fontconfig/fc-lang/wa.orth +++ b/fontconfig/fc-lang/wa.orth @@ -1,47 +1,47 @@ -#
-# fontconfig/fc-lang/wa.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Walloon (WA)
-#
-# Data from private communication with Pablo Saratxaga <pablo@mandrakesoft.com>
-#
-0041-005a
-0061-007a
-00c2 # A circumflex
-00c5 # A ring
-00c7 # C cedilla
-00c8 # E grave
-00c9 # E acute
-00ca # E circumflex
-00ce # I circumflex
-00d4 # O circumflex
-00db # U circumflex
-00e2 # a circumflex
-00e5 # a ring
-00e7 # c cedilla
-00e8 # e grave
-00e9 # e acute
-00ea # e circumflex
-00ee # i circumflex
-00f4 # o circumflex
-00fb # u circumflex
+# +# fontconfig/fc-lang/wa.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Walloon (WA) +# +# Data from private communication with Pablo Saratxaga <pablo@mandrakesoft.com> +# +0041-005a +0061-007a +00c2 # A circumflex +00c5 # A ring +00c7 # C cedilla +00c8 # E grave +00c9 # E acute +00ca # E circumflex +00ce # I circumflex +00d4 # O circumflex +00db # U circumflex +00e2 # a circumflex +00e5 # a ring +00e7 # c cedilla +00e8 # e grave +00e9 # e acute +00ea # e circumflex +00ee # i circumflex +00f4 # o circumflex +00fb # u circumflex diff --git a/fontconfig/fc-lang/wen.orth b/fontconfig/fc-lang/wen.orth index b17f6508c..d53dd12a4 100644 --- a/fontconfig/fc-lang/wen.orth +++ b/fontconfig/fc-lang/wen.orth @@ -1,42 +1,42 @@ -#
-# fontconfig/fc-lang/wen.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Sorbian languages (lower and upper) (WEN)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-0106-0107
-010c-010d
-011a-011b
-0141-0142
-0143-0144
-00d3
-00f3
-0154-0155
-0158-0159
-015a-015b
-0160-0161
-0179-017a
-017d-017e
+# +# fontconfig/fc-lang/wen.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Sorbian languages (lower and upper) (WEN) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0106-0107 +010c-010d +011a-011b +0141-0142 +0143-0144 +00d3 +00f3 +0154-0155 +0158-0159 +015a-015b +0160-0161 +0179-017a +017d-017e diff --git a/fontconfig/fc-lang/wo.orth b/fontconfig/fc-lang/wo.orth index e11500452..8e94e218e 100644 --- a/fontconfig/fc-lang/wo.orth +++ b/fontconfig/fc-lang/wo.orth @@ -1,42 +1,42 @@ -#
-# fontconfig/fc-lang/wo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Wolof (WO)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00e0
-00c3
-00e3
-00c9
-00e9
-00cb
-00eb
-00d1
-00f1
-014a-014b
-00d3
-00f3
+# +# fontconfig/fc-lang/wo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Wolof (WO) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00e0 +00c3 +00e3 +00c9 +00e9 +00cb +00eb +00d1 +00f1 +014a-014b +00d3 +00f3 diff --git a/fontconfig/fc-lang/xh.orth b/fontconfig/fc-lang/xh.orth index 4a8aaa2c4..c6dddac4e 100644 --- a/fontconfig/fc-lang/xh.orth +++ b/fontconfig/fc-lang/xh.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/xh.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Xhosa (XH)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
+# +# fontconfig/fc-lang/xh.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Xhosa (XH) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/yap.orth b/fontconfig/fc-lang/yap.orth index 35979cdde..5aedf0ef9 100644 --- a/fontconfig/fc-lang/yap.orth +++ b/fontconfig/fc-lang/yap.orth @@ -1,35 +1,35 @@ -#
-# fontconfig/fc-lang/yap.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Yapese (YAP)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c4
-00e4
-00cb
-00eb
-00d6
-00f6
+# +# fontconfig/fc-lang/yap.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Yapese (YAP) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c4 +00e4 +00cb +00eb +00d6 +00f6 diff --git a/fontconfig/fc-lang/yi.orth b/fontconfig/fc-lang/yi.orth index 1f799fcbf..51d6ca329 100644 --- a/fontconfig/fc-lang/yi.orth +++ b/fontconfig/fc-lang/yi.orth @@ -1,25 +1,25 @@ -#
-# fontconfig/fc-lang/yi.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Yiddish (YI)
-include he.orth
+# +# fontconfig/fc-lang/yi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Yiddish (YI) +include he.orth diff --git a/fontconfig/fc-lang/yo.orth b/fontconfig/fc-lang/yo.orth index aa98b419e..77c5eca25 100644 --- a/fontconfig/fc-lang/yo.orth +++ b/fontconfig/fc-lang/yo.orth @@ -1,86 +1,86 @@ -#
-# fontconfig/fc-lang/yo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Yoruba (YO)
-#
-# Orthography from http://www.eki.ee/letter
-#
-0041-005a
-0061-007a
-00c0
-00c1
-00c2
-00c3
-00c8
-00c9
-00ca
-00cc
-00cd
-00ce
-00d2
-00d3
-00d4
-00d5
-00d9
-00da
-00db
-00e0
-00e1
-00e2
-00e3
-00e8
-00e9
-00ea
-00ec
-00ed
-00ee
-00f2
-00f3
-00f4
-00f5
-00f9
-00fa
-00fb
-011a-011b
-0128-0129
-0143-0144
-0168-0169
-01cd-01ce
-01cf-01d0
-01d1-01d2
-01d3-01d4
-01f8-01f9 # LATIN LETTER N WITH GRAVE
-0300
-0301
-0302
-0303
-030c
-1e3e-1e3f
-1e62-1e63
-1eb8-1eb9
-1ebc-1ebd
-1ecc-1ecd
-# LATIN CAPTIAL LETTER M WITH MACRON (no UCS code)
-# LATIN CAPTIAL LETTER N WITH MACRON (no UCS code)
-# LATIN SMALL LETTER M WITH MACRON (no UCS code)
-# LATIN SMALL LETTER N WITH MACRON (no UCS code)
+# +# fontconfig/fc-lang/yo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Yoruba (YO) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00c1 +00c2 +00c3 +00c8 +00c9 +00ca +00cc +00cd +00ce +00d2 +00d3 +00d4 +00d5 +00d9 +00da +00db +00e0 +00e1 +00e2 +00e3 +00e8 +00e9 +00ea +00ec +00ed +00ee +00f2 +00f3 +00f4 +00f5 +00f9 +00fa +00fb +011a-011b +0128-0129 +0143-0144 +0168-0169 +01cd-01ce +01cf-01d0 +01d1-01d2 +01d3-01d4 +01f8-01f9 # LATIN LETTER N WITH GRAVE +0300 +0301 +0302 +0303 +030c +1e3e-1e3f +1e62-1e63 +1eb8-1eb9 +1ebc-1ebd +1ecc-1ecd +# LATIN CAPTIAL LETTER M WITH MACRON (no UCS code) +# LATIN CAPTIAL LETTER N WITH MACRON (no UCS code) +# LATIN SMALL LETTER M WITH MACRON (no UCS code) +# LATIN SMALL LETTER N WITH MACRON (no UCS code) diff --git a/fontconfig/fc-lang/zh_cn.orth b/fontconfig/fc-lang/zh_cn.orth index 357af6c51..135c0ea93 100644 --- a/fontconfig/fc-lang/zh_cn.orth +++ b/fontconfig/fc-lang/zh_cn.orth @@ -1,6792 +1,6792 @@ -#
-# fontconfig/fc-lang/zh_cn.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese (simplified) (ZH-CN)
-#
-# Coverage computed from GB2312
-#
-0x02C7 # CARON (Mandarin Chinese third tone)
-0x02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone)
-0x4E00 # <CJK>
-0x4E01 # <CJK>
-0x4E03 # <CJK>
-0x4E07 # <CJK>
-0x4E08 # <CJK>
-0x4E09 # <CJK>
-0x4E0A # <CJK>
-0x4E0B # <CJK>
-0x4E0C # <CJK>
-0x4E0D # <CJK>
-0x4E0E # <CJK>
-0x4E10 # <CJK>
-0x4E11 # <CJK>
-0x4E13 # <CJK>
-0x4E14 # <CJK>
-0x4E15 # <CJK>
-0x4E16 # <CJK>
-0x4E18 # <CJK>
-0x4E19 # <CJK>
-0x4E1A # <CJK>
-0x4E1B # <CJK>
-0x4E1C # <CJK>
-0x4E1D # <CJK>
-0x4E1E # <CJK>
-0x4E22 # <CJK>
-0x4E24 # <CJK>
-0x4E25 # <CJK>
-0x4E27 # <CJK>
-0x4E28 # <CJK>
-0x4E2A # <CJK>
-0x4E2B # <CJK>
-0x4E2C # <CJK>
-0x4E2D # <CJK>
-0x4E30 # <CJK>
-0x4E32 # <CJK>
-0x4E34 # <CJK>
-0x4E36 # <CJK>
-0x4E38 # <CJK>
-0x4E39 # <CJK>
-0x4E3A # <CJK>
-0x4E3B # <CJK>
-0x4E3D # <CJK>
-0x4E3E # <CJK>
-0x4E3F # <CJK>
-0x4E43 # <CJK>
-0x4E45 # <CJK>
-0x4E47 # <CJK>
-0x4E48 # <CJK>
-0x4E49 # <CJK>
-0x4E4B # <CJK>
-0x4E4C # <CJK>
-0x4E4D # <CJK>
-0x4E4E # <CJK>
-0x4E4F # <CJK>
-0x4E50 # <CJK>
-0x4E52 # <CJK>
-0x4E53 # <CJK>
-0x4E54 # <CJK>
-0x4E56 # <CJK>
-0x4E58 # <CJK>
-0x4E59 # <CJK>
-0x4E5C # <CJK>
-0x4E5D # <CJK>
-0x4E5E # <CJK>
-0x4E5F # <CJK>
-0x4E60 # <CJK>
-0x4E61 # <CJK>
-0x4E66 # <CJK>
-0x4E69 # <CJK>
-0x4E70 # <CJK>
-0x4E71 # <CJK>
-0x4E73 # <CJK>
-0x4E7E # <CJK>
-0x4E86 # <CJK>
-0x4E88 # <CJK>
-0x4E89 # <CJK>
-0x4E8B # <CJK>
-0x4E8C # <CJK>
-0x4E8D # <CJK>
-0x4E8E # <CJK>
-0x4E8F # <CJK>
-0x4E91 # <CJK>
-0x4E92 # <CJK>
-0x4E93 # <CJK>
-0x4E94 # <CJK>
-0x4E95 # <CJK>
-0x4E98 # <CJK>
-0x4E9A # <CJK>
-0x4E9B # <CJK>
-0x4E9F # <CJK>
-0x4EA0 # <CJK>
-0x4EA1 # <CJK>
-0x4EA2 # <CJK>
-0x4EA4 # <CJK>
-0x4EA5 # <CJK>
-0x4EA6 # <CJK>
-0x4EA7 # <CJK>
-0x4EA8 # <CJK>
-0x4EA9 # <CJK>
-0x4EAB # <CJK>
-0x4EAC # <CJK>
-0x4EAD # <CJK>
-0x4EAE # <CJK>
-0x4EB2 # <CJK>
-0x4EB3 # <CJK>
-0x4EB5 # <CJK>
-0x4EBA # <CJK>
-0x4EBB # <CJK>
-0x4EBF # <CJK>
-0x4EC0 # <CJK>
-0x4EC1 # <CJK>
-0x4EC2 # <CJK>
-0x4EC3 # <CJK>
-0x4EC4 # <CJK>
-0x4EC5 # <CJK>
-0x4EC6 # <CJK>
-0x4EC7 # <CJK>
-0x4EC9 # <CJK>
-0x4ECA # <CJK>
-0x4ECB # <CJK>
-0x4ECD # <CJK>
-0x4ECE # <CJK>
-0x4ED1 # <CJK>
-0x4ED3 # <CJK>
-0x4ED4 # <CJK>
-0x4ED5 # <CJK>
-0x4ED6 # <CJK>
-0x4ED7 # <CJK>
-0x4ED8 # <CJK>
-0x4ED9 # <CJK>
-0x4EDD # <CJK>
-0x4EDE # <CJK>
-0x4EDF # <CJK>
-0x4EE1 # <CJK>
-0x4EE3 # <CJK>
-0x4EE4 # <CJK>
-0x4EE5 # <CJK>
-0x4EE8 # <CJK>
-0x4EEA # <CJK>
-0x4EEB # <CJK>
-0x4EEC # <CJK>
-0x4EF0 # <CJK>
-0x4EF2 # <CJK>
-0x4EF3 # <CJK>
-0x4EF5 # <CJK>
-0x4EF6 # <CJK>
-0x4EF7 # <CJK>
-0x4EFB # <CJK>
-0x4EFD # <CJK>
-0x4EFF # <CJK>
-0x4F01 # <CJK>
-0x4F09 # <CJK>
-0x4F0A # <CJK>
-0x4F0D # <CJK>
-0x4F0E # <CJK>
-0x4F0F # <CJK>
-0x4F10 # <CJK>
-0x4F11 # <CJK>
-0x4F17 # <CJK>
-0x4F18 # <CJK>
-0x4F19 # <CJK>
-0x4F1A # <CJK>
-0x4F1B # <CJK>
-0x4F1E # <CJK>
-0x4F1F # <CJK>
-0x4F20 # <CJK>
-0x4F22 # <CJK>
-0x4F24 # <CJK>
-0x4F25 # <CJK>
-0x4F26 # <CJK>
-0x4F27 # <CJK>
-0x4F2A # <CJK>
-0x4F2B # <CJK>
-0x4F2F # <CJK>
-0x4F30 # <CJK>
-0x4F32 # <CJK>
-0x4F34 # <CJK>
-0x4F36 # <CJK>
-0x4F38 # <CJK>
-0x4F3A # <CJK>
-0x4F3C # <CJK>
-0x4F3D # <CJK>
-0x4F43 # <CJK>
-0x4F46 # <CJK>
-0x4F4D # <CJK>
-0x4F4E # <CJK>
-0x4F4F # <CJK>
-0x4F50 # <CJK>
-0x4F51 # <CJK>
-0x4F53 # <CJK>
-0x4F55 # <CJK>
-0x4F57 # <CJK>
-0x4F58 # <CJK>
-0x4F59 # <CJK>
-0x4F5A # <CJK>
-0x4F5B # <CJK>
-0x4F5C # <CJK>
-0x4F5D # <CJK>
-0x4F5E # <CJK>
-0x4F5F # <CJK>
-0x4F60 # <CJK>
-0x4F63 # <CJK>
-0x4F64 # <CJK>
-0x4F65 # <CJK>
-0x4F67 # <CJK>
-0x4F69 # <CJK>
-0x4F6C # <CJK>
-0x4F6F # <CJK>
-0x4F70 # <CJK>
-0x4F73 # <CJK>
-0x4F74 # <CJK>
-0x4F76 # <CJK>
-0x4F7B # <CJK>
-0x4F7C # <CJK>
-0x4F7E # <CJK>
-0x4F7F # <CJK>
-0x4F83 # <CJK>
-0x4F84 # <CJK>
-0x4F88 # <CJK>
-0x4F89 # <CJK>
-0x4F8B # <CJK>
-0x4F8D # <CJK>
-0x4F8F # <CJK>
-0x4F91 # <CJK>
-0x4F94 # <CJK>
-0x4F97 # <CJK>
-0x4F9B # <CJK>
-0x4F9D # <CJK>
-0x4FA0 # <CJK>
-0x4FA3 # <CJK>
-0x4FA5 # <CJK>
-0x4FA6 # <CJK>
-0x4FA7 # <CJK>
-0x4FA8 # <CJK>
-0x4FA9 # <CJK>
-0x4FAA # <CJK>
-0x4FAC # <CJK>
-0x4FAE # <CJK>
-0x4FAF # <CJK>
-0x4FB5 # <CJK>
-0x4FBF # <CJK>
-0x4FC3 # <CJK>
-0x4FC4 # <CJK>
-0x4FC5 # <CJK>
-0x4FCA # <CJK>
-0x4FCE # <CJK>
-0x4FCF # <CJK>
-0x4FD0 # <CJK>
-0x4FD1 # <CJK>
-0x4FD7 # <CJK>
-0x4FD8 # <CJK>
-0x4FDA # <CJK>
-0x4FDC # <CJK>
-0x4FDD # <CJK>
-0x4FDE # <CJK>
-0x4FDF # <CJK>
-0x4FE1 # <CJK>
-0x4FE3 # <CJK>
-0x4FE6 # <CJK>
-0x4FE8 # <CJK>
-0x4FE9 # <CJK>
-0x4FEA # <CJK>
-0x4FED # <CJK>
-0x4FEE # <CJK>
-0x4FEF # <CJK>
-0x4FF1 # <CJK>
-0x4FF3 # <CJK>
-0x4FF8 # <CJK>
-0x4FFA # <CJK>
-0x4FFE # <CJK>
-0x500C # <CJK>
-0x500D # <CJK>
-0x500F # <CJK>
-0x5012 # <CJK>
-0x5014 # <CJK>
-0x5018 # <CJK>
-0x5019 # <CJK>
-0x501A # <CJK>
-0x501C # <CJK>
-0x501F # <CJK>
-0x5021 # <CJK>
-0x5025 # <CJK>
-0x5026 # <CJK>
-0x5028 # <CJK>
-0x5029 # <CJK>
-0x502A # <CJK>
-0x502C # <CJK>
-0x502D # <CJK>
-0x502E # <CJK>
-0x503A # <CJK>
-0x503C # <CJK>
-0x503E # <CJK>
-0x5043 # <CJK>
-0x5047 # <CJK>
-0x5048 # <CJK>
-0x504C # <CJK>
-0x504E # <CJK>
-0x504F # <CJK>
-0x5055 # <CJK>
-0x505A # <CJK>
-0x505C # <CJK>
-0x5065 # <CJK>
-0x506C # <CJK>
-0x5076 # <CJK>
-0x5077 # <CJK>
-0x507B # <CJK>
-0x507E # <CJK>
-0x507F # <CJK>
-0x5080 # <CJK>
-0x5085 # <CJK>
-0x5088 # <CJK>
-0x508D # <CJK>
-0x50A3 # <CJK>
-0x50A5 # <CJK>
-0x50A7 # <CJK>
-0x50A8 # <CJK>
-0x50A9 # <CJK>
-0x50AC # <CJK>
-0x50B2 # <CJK>
-0x50BA # <CJK>
-0x50BB # <CJK>
-0x50CF # <CJK>
-0x50D6 # <CJK>
-0x50DA # <CJK>
-0x50E6 # <CJK>
-0x50E7 # <CJK>
-0x50EC # <CJK>
-0x50ED # <CJK>
-0x50EE # <CJK>
-0x50F3 # <CJK>
-0x50F5 # <CJK>
-0x50FB # <CJK>
-0x5106 # <CJK>
-0x5107 # <CJK>
-0x510B # <CJK>
-0x5112 # <CJK>
-0x5121 # <CJK>
-0x513F # <CJK>
-0x5140 # <CJK>
-0x5141 # <CJK>
-0x5143 # <CJK>
-0x5144 # <CJK>
-0x5145 # <CJK>
-0x5146 # <CJK>
-0x5148 # <CJK>
-0x5149 # <CJK>
-0x514B # <CJK>
-0x514D # <CJK>
-0x5151 # <CJK>
-0x5154 # <CJK>
-0x5155 # <CJK>
-0x5156 # <CJK>
-0x515A # <CJK>
-0x515C # <CJK>
-0x5162 # <CJK>
-0x5165 # <CJK>
-0x5168 # <CJK>
-0x516B # <CJK>
-0x516C # <CJK>
-0x516D # <CJK>
-0x516E # <CJK>
-0x5170 # <CJK>
-0x5171 # <CJK>
-0x5173 # <CJK>
-0x5174 # <CJK>
-0x5175 # <CJK>
-0x5176 # <CJK>
-0x5177 # <CJK>
-0x5178 # <CJK>
-0x5179 # <CJK>
-0x517B # <CJK>
-0x517C # <CJK>
-0x517D # <CJK>
-0x5180 # <CJK>
-0x5181 # <CJK>
-0x5182 # <CJK>
-0x5185 # <CJK>
-0x5188 # <CJK>
-0x5189 # <CJK>
-0x518C # <CJK>
-0x518D # <CJK>
-0x5192 # <CJK>
-0x5195 # <CJK>
-0x5196 # <CJK>
-0x5197 # <CJK>
-0x5199 # <CJK>
-0x519B # <CJK>
-0x519C # <CJK>
-0x51A0 # <CJK>
-0x51A2 # <CJK>
-0x51A4 # <CJK>
-0x51A5 # <CJK>
-0x51AB # <CJK>
-0x51AC # <CJK>
-0x51AF # <CJK>
-0x51B0 # <CJK>
-0x51B1 # <CJK>
-0x51B2 # <CJK>
-0x51B3 # <CJK>
-0x51B5 # <CJK>
-0x51B6 # <CJK>
-0x51B7 # <CJK>
-0x51BB # <CJK>
-0x51BC # <CJK>
-0x51BD # <CJK>
-0x51C0 # <CJK>
-0x51C4 # <CJK>
-0x51C6 # <CJK>
-0x51C7 # <CJK>
-0x51C9 # <CJK>
-0x51CB # <CJK>
-0x51CC # <CJK>
-0x51CF # <CJK>
-0x51D1 # <CJK>
-0x51DB # <CJK>
-0x51DD # <CJK>
-0x51E0 # <CJK>
-0x51E1 # <CJK>
-0x51E4 # <CJK>
-0x51EB # <CJK>
-0x51ED # <CJK>
-0x51EF # <CJK>
-0x51F0 # <CJK>
-0x51F3 # <CJK>
-0x51F5 # <CJK>
-0x51F6 # <CJK>
-0x51F8 # <CJK>
-0x51F9 # <CJK>
-0x51FA # <CJK>
-0x51FB # <CJK>
-0x51FC # <CJK>
-0x51FD # <CJK>
-0x51FF # <CJK>
-0x5200 # <CJK>
-0x5201 # <CJK>
-0x5202 # <CJK>
-0x5203 # <CJK>
-0x5206 # <CJK>
-0x5207 # <CJK>
-0x5208 # <CJK>
-0x520A # <CJK>
-0x520D # <CJK>
-0x520E # <CJK>
-0x5211 # <CJK>
-0x5212 # <CJK>
-0x5216 # <CJK>
-0x5217 # <CJK>
-0x5218 # <CJK>
-0x5219 # <CJK>
-0x521A # <CJK>
-0x521B # <CJK>
-0x521D # <CJK>
-0x5220 # <CJK>
-0x5224 # <CJK>
-0x5228 # <CJK>
-0x5229 # <CJK>
-0x522B # <CJK>
-0x522D # <CJK>
-0x522E # <CJK>
-0x5230 # <CJK>
-0x5233 # <CJK>
-0x5236 # <CJK>
-0x5237 # <CJK>
-0x5238 # <CJK>
-0x5239 # <CJK>
-0x523A # <CJK>
-0x523B # <CJK>
-0x523D # <CJK>
-0x523F # <CJK>
-0x5240 # <CJK>
-0x5241 # <CJK>
-0x5242 # <CJK>
-0x5243 # <CJK>
-0x524A # <CJK>
-0x524C # <CJK>
-0x524D # <CJK>
-0x5250 # <CJK>
-0x5251 # <CJK>
-0x5254 # <CJK>
-0x5256 # <CJK>
-0x525C # <CJK>
-0x525E # <CJK>
-0x5261 # <CJK>
-0x5265 # <CJK>
-0x5267 # <CJK>
-0x5269 # <CJK>
-0x526A # <CJK>
-0x526F # <CJK>
-0x5272 # <CJK>
-0x527D # <CJK>
-0x527F # <CJK>
-0x5281 # <CJK>
-0x5282 # <CJK>
-0x5288 # <CJK>
-0x5290 # <CJK>
-0x5293 # <CJK>
-0x529B # <CJK>
-0x529D # <CJK>
-0x529E # <CJK>
-0x529F # <CJK>
-0x52A0 # <CJK>
-0x52A1 # <CJK>
-0x52A2 # <CJK>
-0x52A3 # <CJK>
-0x52A8 # <CJK>
-0x52A9 # <CJK>
-0x52AA # <CJK>
-0x52AB # <CJK>
-0x52AC # <CJK>
-0x52AD # <CJK>
-0x52B1 # <CJK>
-0x52B2 # <CJK>
-0x52B3 # <CJK>
-0x52BE # <CJK>
-0x52BF # <CJK>
-0x52C3 # <CJK>
-0x52C7 # <CJK>
-0x52C9 # <CJK>
-0x52CB # <CJK>
-0x52D0 # <CJK>
-0x52D2 # <CJK>
-0x52D6 # <CJK>
-0x52D8 # <CJK>
-0x52DF # <CJK>
-0x52E4 # <CJK>
-0x52F0 # <CJK>
-0x52F9 # <CJK>
-0x52FA # <CJK>
-0x52FE # <CJK>
-0x52FF # <CJK>
-0x5300 # <CJK>
-0x5305 # <CJK>
-0x5306 # <CJK>
-0x5308 # <CJK>
-0x530D # <CJK>
-0x530F # <CJK>
-0x5310 # <CJK>
-0x5315 # <CJK>
-0x5316 # <CJK>
-0x5317 # <CJK>
-0x5319 # <CJK>
-0x531A # <CJK>
-0x531D # <CJK>
-0x5320 # <CJK>
-0x5321 # <CJK>
-0x5323 # <CJK>
-0x5326 # <CJK>
-0x532A # <CJK>
-0x532E # <CJK>
-0x5339 # <CJK>
-0x533A # <CJK>
-0x533B # <CJK>
-0x533E # <CJK>
-0x533F # <CJK>
-0x5341 # <CJK>
-0x5343 # <CJK>
-0x5345 # <CJK>
-0x5347 # <CJK>
-0x5348 # <CJK>
-0x5349 # <CJK>
-0x534A # <CJK>
-0x534E # <CJK>
-0x534F # <CJK>
-0x5351 # <CJK>
-0x5352 # <CJK>
-0x5353 # <CJK>
-0x5355 # <CJK>
-0x5356 # <CJK>
-0x5357 # <CJK>
-0x535A # <CJK>
-0x535C # <CJK>
-0x535E # <CJK>
-0x535F # <CJK>
-0x5360 # <CJK>
-0x5361 # <CJK>
-0x5362 # <CJK>
-0x5363 # <CJK>
-0x5364 # <CJK>
-0x5366 # <CJK>
-0x5367 # <CJK>
-0x5369 # <CJK>
-0x536B # <CJK>
-0x536E # <CJK>
-0x536F # <CJK>
-0x5370 # <CJK>
-0x5371 # <CJK>
-0x5373 # <CJK>
-0x5374 # <CJK>
-0x5375 # <CJK>
-0x5377 # <CJK>
-0x5378 # <CJK>
-0x537A # <CJK>
-0x537F # <CJK>
-0x5382 # <CJK>
-0x5384 # <CJK>
-0x5385 # <CJK>
-0x5386 # <CJK>
-0x5389 # <CJK>
-0x538B # <CJK>
-0x538C # <CJK>
-0x538D # <CJK>
-0x5395 # <CJK>
-0x5398 # <CJK>
-0x539A # <CJK>
-0x539D # <CJK>
-0x539F # <CJK>
-0x53A2 # <CJK>
-0x53A3 # <CJK>
-0x53A5 # <CJK>
-0x53A6 # <CJK>
-0x53A8 # <CJK>
-0x53A9 # <CJK>
-0x53AE # <CJK>
-0x53B6 # <CJK>
-0x53BB # <CJK>
-0x53BF # <CJK>
-0x53C1 # <CJK>
-0x53C2 # <CJK>
-0x53C8 # <CJK>
-0x53C9 # <CJK>
-0x53CA # <CJK>
-0x53CB # <CJK>
-0x53CC # <CJK>
-0x53CD # <CJK>
-0x53D1 # <CJK>
-0x53D4 # <CJK>
-0x53D6 # <CJK>
-0x53D7 # <CJK>
-0x53D8 # <CJK>
-0x53D9 # <CJK>
-0x53DB # <CJK>
-0x53DF # <CJK>
-0x53E0 # <CJK>
-0x53E3 # <CJK>
-0x53E4 # <CJK>
-0x53E5 # <CJK>
-0x53E6 # <CJK>
-0x53E8 # <CJK>
-0x53E9 # <CJK>
-0x53EA # <CJK>
-0x53EB # <CJK>
-0x53EC # <CJK>
-0x53ED # <CJK>
-0x53EE # <CJK>
-0x53EF # <CJK>
-0x53F0 # <CJK>
-0x53F1 # <CJK>
-0x53F2 # <CJK>
-0x53F3 # <CJK>
-0x53F5 # <CJK>
-0x53F6 # <CJK>
-0x53F7 # <CJK>
-0x53F8 # <CJK>
-0x53F9 # <CJK>
-0x53FB # <CJK>
-0x53FC # <CJK>
-0x53FD # <CJK>
-0x5401 # <CJK>
-0x5403 # <CJK>
-0x5404 # <CJK>
-0x5406 # <CJK>
-0x5408 # <CJK>
-0x5409 # <CJK>
-0x540A # <CJK>
-0x540C # <CJK>
-0x540D # <CJK>
-0x540E # <CJK>
-0x540F # <CJK>
-0x5410 # <CJK>
-0x5411 # <CJK>
-0x5412 # <CJK>
-0x5413 # <CJK>
-0x5415 # <CJK>
-0x5416 # <CJK>
-0x5417 # <CJK>
-0x541B # <CJK>
-0x541D # <CJK>
-0x541E # <CJK>
-0x541F # <CJK>
-0x5420 # <CJK>
-0x5421 # <CJK>
-0x5423 # <CJK>
-0x5426 # <CJK>
-0x5427 # <CJK>
-0x5428 # <CJK>
-0x5429 # <CJK>
-0x542B # <CJK>
-0x542C # <CJK>
-0x542D # <CJK>
-0x542E # <CJK>
-0x542F # <CJK>
-0x5431 # <CJK>
-0x5432 # <CJK>
-0x5434 # <CJK>
-0x5435 # <CJK>
-0x5438 # <CJK>
-0x5439 # <CJK>
-0x543B # <CJK>
-0x543C # <CJK>
-0x543E # <CJK>
-0x5440 # <CJK>
-0x5443 # <CJK>
-0x5446 # <CJK>
-0x5448 # <CJK>
-0x544A # <CJK>
-0x544B # <CJK>
-0x5450 # <CJK>
-0x5452 # <CJK>
-0x5453 # <CJK>
-0x5454 # <CJK>
-0x5455 # <CJK>
-0x5456 # <CJK>
-0x5457 # <CJK>
-0x5458 # <CJK>
-0x5459 # <CJK>
-0x545B # <CJK>
-0x545C # <CJK>
-0x5462 # <CJK>
-0x5464 # <CJK>
-0x5466 # <CJK>
-0x5468 # <CJK>
-0x5471 # <CJK>
-0x5472 # <CJK>
-0x5473 # <CJK>
-0x5475 # <CJK>
-0x5476 # <CJK>
-0x5477 # <CJK>
-0x5478 # <CJK>
-0x547B # <CJK>
-0x547C # <CJK>
-0x547D # <CJK>
-0x5480 # <CJK>
-0x5482 # <CJK>
-0x5484 # <CJK>
-0x5486 # <CJK>
-0x548B # <CJK>
-0x548C # <CJK>
-0x548E # <CJK>
-0x548F # <CJK>
-0x5490 # <CJK>
-0x5492 # <CJK>
-0x5494 # <CJK>
-0x5495 # <CJK>
-0x5496 # <CJK>
-0x5499 # <CJK>
-0x549A # <CJK>
-0x549B # <CJK>
-0x549D # <CJK>
-0x54A3 # <CJK>
-0x54A4 # <CJK>
-0x54A6 # <CJK>
-0x54A7 # <CJK>
-0x54A8 # <CJK>
-0x54A9 # <CJK>
-0x54AA # <CJK>
-0x54AB # <CJK>
-0x54AC # <CJK>
-0x54AD # <CJK>
-0x54AF # <CJK>
-0x54B1 # <CJK>
-0x54B3 # <CJK>
-0x54B4 # <CJK>
-0x54B8 # <CJK>
-0x54BB # <CJK>
-0x54BD # <CJK>
-0x54BF # <CJK>
-0x54C0 # <CJK>
-0x54C1 # <CJK>
-0x54C2 # <CJK>
-0x54C4 # <CJK>
-0x54C6 # <CJK>
-0x54C7 # <CJK>
-0x54C8 # <CJK>
-0x54C9 # <CJK>
-0x54CC # <CJK>
-0x54CD # <CJK>
-0x54CE # <CJK>
-0x54CF # <CJK>
-0x54D0 # <CJK>
-0x54D1 # <CJK>
-0x54D2 # <CJK>
-0x54D3 # <CJK>
-0x54D4 # <CJK>
-0x54D5 # <CJK>
-0x54D7 # <CJK>
-0x54D9 # <CJK>
-0x54DA # <CJK>
-0x54DC # <CJK>
-0x54DD # <CJK>
-0x54DE # <CJK>
-0x54DF # <CJK>
-0x54E5 # <CJK>
-0x54E6 # <CJK>
-0x54E7 # <CJK>
-0x54E8 # <CJK>
-0x54E9 # <CJK>
-0x54EA # <CJK>
-0x54ED # <CJK>
-0x54EE # <CJK>
-0x54F2 # <CJK>
-0x54F3 # <CJK>
-0x54FA # <CJK>
-0x54FC # <CJK>
-0x54FD # <CJK>
-0x54FF # <CJK>
-0x5501 # <CJK>
-0x5506 # <CJK>
-0x5507 # <CJK>
-0x5509 # <CJK>
-0x550F # <CJK>
-0x5510 # <CJK>
-0x5511 # <CJK>
-0x5514 # <CJK>
-0x551B # <CJK>
-0x5520 # <CJK>
-0x5522 # <CJK>
-0x5523 # <CJK>
-0x5524 # <CJK>
-0x5527 # <CJK>
-0x552A # <CJK>
-0x552C # <CJK>
-0x552E # <CJK>
-0x552F # <CJK>
-0x5530 # <CJK>
-0x5531 # <CJK>
-0x5533 # <CJK>
-0x5537 # <CJK>
-0x553C # <CJK>
-0x553E # <CJK>
-0x553F # <CJK>
-0x5541 # <CJK>
-0x5543 # <CJK>
-0x5544 # <CJK>
-0x5546 # <CJK>
-0x5549 # <CJK>
-0x554A # <CJK>
-0x5550 # <CJK>
-0x5555 # <CJK>
-0x5556 # <CJK>
-0x555C # <CJK>
-0x5561 # <CJK>
-0x5564 # <CJK>
-0x5565 # <CJK>
-0x5566 # <CJK>
-0x5567 # <CJK>
-0x556A # <CJK>
-0x556C # <CJK>
-0x556D # <CJK>
-0x556E # <CJK>
-0x5575 # <CJK>
-0x5576 # <CJK>
-0x5577 # <CJK>
-0x5578 # <CJK>
-0x557B # <CJK>
-0x557C # <CJK>
-0x557E # <CJK>
-0x5580 # <CJK>
-0x5581 # <CJK>
-0x5582 # <CJK>
-0x5583 # <CJK>
-0x5584 # <CJK>
-0x5587 # <CJK>
-0x5588 # <CJK>
-0x5589 # <CJK>
-0x558A # <CJK>
-0x558B # <CJK>
-0x558F # <CJK>
-0x5591 # <CJK>
-0x5594 # <CJK>
-0x5598 # <CJK>
-0x5599 # <CJK>
-0x559C # <CJK>
-0x559D # <CJK>
-0x559F # <CJK>
-0x55A7 # <CJK>
-0x55B1 # <CJK>
-0x55B3 # <CJK>
-0x55B5 # <CJK>
-0x55B7 # <CJK>
-0x55B9 # <CJK>
-0x55BB # <CJK>
-0x55BD # <CJK>
-0x55BE # <CJK>
-0x55C4 # <CJK>
-0x55C5 # <CJK>
-0x55C9 # <CJK>
-0x55CC # <CJK>
-0x55CD # <CJK>
-0x55D1 # <CJK>
-0x55D2 # <CJK>
-0x55D3 # <CJK>
-0x55D4 # <CJK>
-0x55D6 # <CJK>
-0x55DC # <CJK>
-0x55DD # <CJK>
-0x55DF # <CJK>
-0x55E1 # <CJK>
-0x55E3 # <CJK>
-0x55E4 # <CJK>
-0x55E5 # <CJK>
-0x55E6 # <CJK>
-0x55E8 # <CJK>
-0x55EA # <CJK>
-0x55EB # <CJK>
-0x55EC # <CJK>
-0x55EF # <CJK>
-0x55F2 # <CJK>
-0x55F3 # <CJK>
-0x55F5 # <CJK>
-0x55F7 # <CJK>
-0x55FD # <CJK>
-0x55FE # <CJK>
-0x5600 # <CJK>
-0x5601 # <CJK>
-0x5608 # <CJK>
-0x5609 # <CJK>
-0x560C # <CJK>
-0x560E # <CJK>
-0x560F # <CJK>
-0x5618 # <CJK>
-0x561B # <CJK>
-0x561E # <CJK>
-0x561F # <CJK>
-0x5623 # <CJK>
-0x5624 # <CJK>
-0x5627 # <CJK>
-0x562C # <CJK>
-0x562D # <CJK>
-0x5631 # <CJK>
-0x5632 # <CJK>
-0x5634 # <CJK>
-0x5636 # <CJK>
-0x5639 # <CJK>
-0x563B # <CJK>
-0x563F # <CJK>
-0x564C # <CJK>
-0x564D # <CJK>
-0x564E # <CJK>
-0x5654 # <CJK>
-0x5657 # <CJK>
-0x5658 # <CJK>
-0x5659 # <CJK>
-0x565C # <CJK>
-0x5662 # <CJK>
-0x5664 # <CJK>
-0x5668 # <CJK>
-0x5669 # <CJK>
-0x566A # <CJK>
-0x566B # <CJK>
-0x566C # <CJK>
-0x5671 # <CJK>
-0x5676 # <CJK>
-0x567B # <CJK>
-0x567C # <CJK>
-0x5685 # <CJK>
-0x5686 # <CJK>
-0x568E # <CJK>
-0x568F # <CJK>
-0x5693 # <CJK>
-0x56A3 # <CJK>
-0x56AF # <CJK>
-0x56B7 # <CJK>
-0x56BC # <CJK>
-0x56CA # <CJK>
-0x56D4 # <CJK>
-0x56D7 # <CJK>
-0x56DA # <CJK>
-0x56DB # <CJK>
-0x56DD # <CJK>
-0x56DE # <CJK>
-0x56DF # <CJK>
-0x56E0 # <CJK>
-0x56E1 # <CJK>
-0x56E2 # <CJK>
-0x56E4 # <CJK>
-0x56EB # <CJK>
-0x56ED # <CJK>
-0x56F0 # <CJK>
-0x56F1 # <CJK>
-0x56F4 # <CJK>
-0x56F5 # <CJK>
-0x56F9 # <CJK>
-0x56FA # <CJK>
-0x56FD # <CJK>
-0x56FE # <CJK>
-0x56FF # <CJK>
-0x5703 # <CJK>
-0x5704 # <CJK>
-0x5706 # <CJK>
-0x5708 # <CJK>
-0x5709 # <CJK>
-0x570A # <CJK>
-0x571C # <CJK>
-0x571F # <CJK>
-0x5723 # <CJK>
-0x5728 # <CJK>
-0x5729 # <CJK>
-0x572A # <CJK>
-0x572C # <CJK>
-0x572D # <CJK>
-0x572E # <CJK>
-0x572F # <CJK>
-0x5730 # <CJK>
-0x5733 # <CJK>
-0x5739 # <CJK>
-0x573A # <CJK>
-0x573B # <CJK>
-0x573E # <CJK>
-0x5740 # <CJK>
-0x5742 # <CJK>
-0x5747 # <CJK>
-0x574A # <CJK>
-0x574C # <CJK>
-0x574D # <CJK>
-0x574E # <CJK>
-0x574F # <CJK>
-0x5750 # <CJK>
-0x5751 # <CJK>
-0x5757 # <CJK>
-0x575A # <CJK>
-0x575B # <CJK>
-0x575C # <CJK>
-0x575D # <CJK>
-0x575E # <CJK>
-0x575F # <CJK>
-0x5760 # <CJK>
-0x5761 # <CJK>
-0x5764 # <CJK>
-0x5766 # <CJK>
-0x5768 # <CJK>
-0x5769 # <CJK>
-0x576A # <CJK>
-0x576B # <CJK>
-0x576D # <CJK>
-0x576F # <CJK>
-0x5773 # <CJK>
-0x5776 # <CJK>
-0x5777 # <CJK>
-0x577B # <CJK>
-0x577C # <CJK>
-0x5782 # <CJK>
-0x5783 # <CJK>
-0x5784 # <CJK>
-0x5785 # <CJK>
-0x5786 # <CJK>
-0x578B # <CJK>
-0x578C # <CJK>
-0x5792 # <CJK>
-0x5793 # <CJK>
-0x579B # <CJK>
-0x57A0 # <CJK>
-0x57A1 # <CJK>
-0x57A2 # <CJK>
-0x57A3 # <CJK>
-0x57A4 # <CJK>
-0x57A6 # <CJK>
-0x57A7 # <CJK>
-0x57A9 # <CJK>
-0x57AB # <CJK>
-0x57AD # <CJK>
-0x57AE # <CJK>
-0x57B2 # <CJK>
-0x57B4 # <CJK>
-0x57B8 # <CJK>
-0x57C2 # <CJK>
-0x57C3 # <CJK>
-0x57CB # <CJK>
-0x57CE # <CJK>
-0x57CF # <CJK>
-0x57D2 # <CJK>
-0x57D4 # <CJK>
-0x57D5 # <CJK>
-0x57D8 # <CJK>
-0x57D9 # <CJK>
-0x57DA # <CJK>
-0x57DD # <CJK>
-0x57DF # <CJK>
-0x57E0 # <CJK>
-0x57E4 # <CJK>
-0x57ED # <CJK>
-0x57EF # <CJK>
-0x57F4 # <CJK>
-0x57F8 # <CJK>
-0x57F9 # <CJK>
-0x57FA # <CJK>
-0x57FD # <CJK>
-0x5800 # <CJK>
-0x5802 # <CJK>
-0x5806 # <CJK>
-0x5807 # <CJK>
-0x580B # <CJK>
-0x580D # <CJK>
-0x5811 # <CJK>
-0x5815 # <CJK>
-0x5819 # <CJK>
-0x581E # <CJK>
-0x5820 # <CJK>
-0x5821 # <CJK>
-0x5824 # <CJK>
-0x582A # <CJK>
-0x5830 # <CJK>
-0x5835 # <CJK>
-0x5844 # <CJK>
-0x584C # <CJK>
-0x584D # <CJK>
-0x5851 # <CJK>
-0x5854 # <CJK>
-0x5858 # <CJK>
-0x585E # <CJK>
-0x5865 # <CJK>
-0x586B # <CJK>
-0x586C # <CJK>
-0x587E # <CJK>
-0x5880 # <CJK>
-0x5881 # <CJK>
-0x5883 # <CJK>
-0x5885 # <CJK>
-0x5889 # <CJK>
-0x5892 # <CJK>
-0x5893 # <CJK>
-0x5899 # <CJK>
-0x589A # <CJK>
-0x589E # <CJK>
-0x589F # <CJK>
-0x58A8 # <CJK>
-0x58A9 # <CJK>
-0x58BC # <CJK>
-0x58C1 # <CJK>
-0x58C5 # <CJK>
-0x58D1 # <CJK>
-0x58D5 # <CJK>
-0x58E4 # <CJK>
-0x58EB # <CJK>
-0x58EC # <CJK>
-0x58EE # <CJK>
-0x58F0 # <CJK>
-0x58F3 # <CJK>
-0x58F6 # <CJK>
-0x58F9 # <CJK>
-0x5902 # <CJK>
-0x5904 # <CJK>
-0x5907 # <CJK>
-0x590D # <CJK>
-0x590F # <CJK>
-0x5914 # <CJK>
-0x5915 # <CJK>
-0x5916 # <CJK>
-0x5919 # <CJK>
-0x591A # <CJK>
-0x591C # <CJK>
-0x591F # <CJK>
-0x5924 # <CJK>
-0x5925 # <CJK>
-0x5927 # <CJK>
-0x5929 # <CJK>
-0x592A # <CJK>
-0x592B # <CJK>
-0x592D # <CJK>
-0x592E # <CJK>
-0x592F # <CJK>
-0x5931 # <CJK>
-0x5934 # <CJK>
-0x5937 # <CJK>
-0x5938 # <CJK>
-0x5939 # <CJK>
-0x593A # <CJK>
-0x593C # <CJK>
-0x5941 # <CJK>
-0x5942 # <CJK>
-0x5944 # <CJK>
-0x5947 # <CJK>
-0x5948 # <CJK>
-0x5949 # <CJK>
-0x594B # <CJK>
-0x594E # <CJK>
-0x594F # <CJK>
-0x5951 # <CJK>
-0x5954 # <CJK>
-0x5955 # <CJK>
-0x5956 # <CJK>
-0x5957 # <CJK>
-0x5958 # <CJK>
-0x595A # <CJK>
-0x5960 # <CJK>
-0x5962 # <CJK>
-0x5965 # <CJK>
-0x5973 # <CJK>
-0x5974 # <CJK>
-0x5976 # <CJK>
-0x5978 # <CJK>
-0x5979 # <CJK>
-0x597D # <CJK>
-0x5981 # <CJK>
-0x5982 # <CJK>
-0x5983 # <CJK>
-0x5984 # <CJK>
-0x5986 # <CJK>
-0x5987 # <CJK>
-0x5988 # <CJK>
-0x598A # <CJK>
-0x598D # <CJK>
-0x5992 # <CJK>
-0x5993 # <CJK>
-0x5996 # <CJK>
-0x5997 # <CJK>
-0x5999 # <CJK>
-0x599E # <CJK>
-0x59A3 # <CJK>
-0x59A4 # <CJK>
-0x59A5 # <CJK>
-0x59A8 # <CJK>
-0x59A9 # <CJK>
-0x59AA # <CJK>
-0x59AB # <CJK>
-0x59AE # <CJK>
-0x59AF # <CJK>
-0x59B2 # <CJK>
-0x59B9 # <CJK>
-0x59BB # <CJK>
-0x59BE # <CJK>
-0x59C6 # <CJK>
-0x59CA # <CJK>
-0x59CB # <CJK>
-0x59D0 # <CJK>
-0x59D1 # <CJK>
-0x59D2 # <CJK>
-0x59D3 # <CJK>
-0x59D4 # <CJK>
-0x59D7 # <CJK>
-0x59D8 # <CJK>
-0x59DA # <CJK>
-0x59DC # <CJK>
-0x59DD # <CJK>
-0x59E3 # <CJK>
-0x59E5 # <CJK>
-0x59E8 # <CJK>
-0x59EC # <CJK>
-0x59F9 # <CJK>
-0x59FB # <CJK>
-0x59FF # <CJK>
-0x5A01 # <CJK>
-0x5A03 # <CJK>
-0x5A04 # <CJK>
-0x5A05 # <CJK>
-0x5A06 # <CJK>
-0x5A07 # <CJK>
-0x5A08 # <CJK>
-0x5A09 # <CJK>
-0x5A0C # <CJK>
-0x5A11 # <CJK>
-0x5A13 # <CJK>
-0x5A18 # <CJK>
-0x5A1C # <CJK>
-0x5A1F # <CJK>
-0x5A20 # <CJK>
-0x5A23 # <CJK>
-0x5A25 # <CJK>
-0x5A29 # <CJK>
-0x5A31 # <CJK>
-0x5A32 # <CJK>
-0x5A34 # <CJK>
-0x5A36 # <CJK>
-0x5A3C # <CJK>
-0x5A40 # <CJK>
-0x5A46 # <CJK>
-0x5A49 # <CJK>
-0x5A4A # <CJK>
-0x5A55 # <CJK>
-0x5A5A # <CJK>
-0x5A62 # <CJK>
-0x5A67 # <CJK>
-0x5A6A # <CJK>
-0x5A74 # <CJK>
-0x5A75 # <CJK>
-0x5A76 # <CJK>
-0x5A77 # <CJK>
-0x5A7A # <CJK>
-0x5A7F # <CJK>
-0x5A92 # <CJK>
-0x5A9A # <CJK>
-0x5A9B # <CJK>
-0x5AAA # <CJK>
-0x5AB2 # <CJK>
-0x5AB3 # <CJK>
-0x5AB5 # <CJK>
-0x5AB8 # <CJK>
-0x5ABE # <CJK>
-0x5AC1 # <CJK>
-0x5AC2 # <CJK>
-0x5AC9 # <CJK>
-0x5ACC # <CJK>
-0x5AD2 # <CJK>
-0x5AD4 # <CJK>
-0x5AD6 # <CJK>
-0x5AD8 # <CJK>
-0x5ADC # <CJK>
-0x5AE0 # <CJK>
-0x5AE1 # <CJK>
-0x5AE3 # <CJK>
-0x5AE6 # <CJK>
-0x5AE9 # <CJK>
-0x5AEB # <CJK>
-0x5AF1 # <CJK>
-0x5B09 # <CJK>
-0x5B16 # <CJK>
-0x5B17 # <CJK>
-0x5B32 # <CJK>
-0x5B34 # <CJK>
-0x5B37 # <CJK>
-0x5B40 # <CJK>
-0x5B50 # <CJK>
-0x5B51 # <CJK>
-0x5B53 # <CJK>
-0x5B54 # <CJK>
-0x5B55 # <CJK>
-0x5B57 # <CJK>
-0x5B58 # <CJK>
-0x5B59 # <CJK>
-0x5B5A # <CJK>
-0x5B5B # <CJK>
-0x5B5C # <CJK>
-0x5B5D # <CJK>
-0x5B5F # <CJK>
-0x5B62 # <CJK>
-0x5B63 # <CJK>
-0x5B64 # <CJK>
-0x5B65 # <CJK>
-0x5B66 # <CJK>
-0x5B69 # <CJK>
-0x5B6A # <CJK>
-0x5B6C # <CJK>
-0x5B70 # <CJK>
-0x5B71 # <CJK>
-0x5B73 # <CJK>
-0x5B75 # <CJK>
-0x5B7A # <CJK>
-0x5B7D # <CJK>
-0x5B80 # <CJK>
-0x5B81 # <CJK>
-0x5B83 # <CJK>
-0x5B84 # <CJK>
-0x5B85 # <CJK>
-0x5B87 # <CJK>
-0x5B88 # <CJK>
-0x5B89 # <CJK>
-0x5B8B # <CJK>
-0x5B8C # <CJK>
-0x5B8F # <CJK>
-0x5B93 # <CJK>
-0x5B95 # <CJK>
-0x5B97 # <CJK>
-0x5B98 # <CJK>
-0x5B99 # <CJK>
-0x5B9A # <CJK>
-0x5B9B # <CJK>
-0x5B9C # <CJK>
-0x5B9D # <CJK>
-0x5B9E # <CJK>
-0x5BA0 # <CJK>
-0x5BA1 # <CJK>
-0x5BA2 # <CJK>
-0x5BA3 # <CJK>
-0x5BA4 # <CJK>
-0x5BA5 # <CJK>
-0x5BA6 # <CJK>
-0x5BAA # <CJK>
-0x5BAB # <CJK>
-0x5BB0 # <CJK>
-0x5BB3 # <CJK>
-0x5BB4 # <CJK>
-0x5BB5 # <CJK>
-0x5BB6 # <CJK>
-0x5BB8 # <CJK>
-0x5BB9 # <CJK>
-0x5BBD # <CJK>
-0x5BBE # <CJK>
-0x5BBF # <CJK>
-0x5BC2 # <CJK>
-0x5BC4 # <CJK>
-0x5BC5 # <CJK>
-0x5BC6 # <CJK>
-0x5BC7 # <CJK>
-0x5BCC # <CJK>
-0x5BD0 # <CJK>
-0x5BD2 # <CJK>
-0x5BD3 # <CJK>
-0x5BDD # <CJK>
-0x5BDE # <CJK>
-0x5BDF # <CJK>
-0x5BE1 # <CJK>
-0x5BE4 # <CJK>
-0x5BE5 # <CJK>
-0x5BE8 # <CJK>
-0x5BEE # <CJK>
-0x5BF0 # <CJK>
-0x5BF8 # <CJK>
-0x5BF9 # <CJK>
-0x5BFA # <CJK>
-0x5BFB # <CJK>
-0x5BFC # <CJK>
-0x5BFF # <CJK>
-0x5C01 # <CJK>
-0x5C04 # <CJK>
-0x5C06 # <CJK>
-0x5C09 # <CJK>
-0x5C0A # <CJK>
-0x5C0F # <CJK>
-0x5C11 # <CJK>
-0x5C14 # <CJK>
-0x5C15 # <CJK>
-0x5C16 # <CJK>
-0x5C18 # <CJK>
-0x5C1A # <CJK>
-0x5C1C # <CJK>
-0x5C1D # <CJK>
-0x5C22 # <CJK>
-0x5C24 # <CJK>
-0x5C25 # <CJK>
-0x5C27 # <CJK>
-0x5C2C # <CJK>
-0x5C31 # <CJK>
-0x5C34 # <CJK>
-0x5C38 # <CJK>
-0x5C39 # <CJK>
-0x5C3A # <CJK>
-0x5C3B # <CJK>
-0x5C3C # <CJK>
-0x5C3D # <CJK>
-0x5C3E # <CJK>
-0x5C3F # <CJK>
-0x5C40 # <CJK>
-0x5C41 # <CJK>
-0x5C42 # <CJK>
-0x5C45 # <CJK>
-0x5C48 # <CJK>
-0x5C49 # <CJK>
-0x5C4A # <CJK>
-0x5C4B # <CJK>
-0x5C4E # <CJK>
-0x5C4F # <CJK>
-0x5C50 # <CJK>
-0x5C51 # <CJK>
-0x5C55 # <CJK>
-0x5C59 # <CJK>
-0x5C5E # <CJK>
-0x5C60 # <CJK>
-0x5C61 # <CJK>
-0x5C63 # <CJK>
-0x5C65 # <CJK>
-0x5C66 # <CJK>
-0x5C6E # <CJK>
-0x5C6F # <CJK>
-0x5C71 # <CJK>
-0x5C79 # <CJK>
-0x5C7A # <CJK>
-0x5C7F # <CJK>
-0x5C81 # <CJK>
-0x5C82 # <CJK>
-0x5C88 # <CJK>
-0x5C8C # <CJK>
-0x5C8D # <CJK>
-0x5C90 # <CJK>
-0x5C91 # <CJK>
-0x5C94 # <CJK>
-0x5C96 # <CJK>
-0x5C97 # <CJK>
-0x5C98 # <CJK>
-0x5C99 # <CJK>
-0x5C9A # <CJK>
-0x5C9B # <CJK>
-0x5C9C # <CJK>
-0x5CA2 # <CJK>
-0x5CA3 # <CJK>
-0x5CA9 # <CJK>
-0x5CAB # <CJK>
-0x5CAC # <CJK>
-0x5CAD # <CJK>
-0x5CB1 # <CJK>
-0x5CB3 # <CJK>
-0x5CB5 # <CJK>
-0x5CB7 # <CJK>
-0x5CB8 # <CJK>
-0x5CBD # <CJK>
-0x5CBF # <CJK>
-0x5CC1 # <CJK>
-0x5CC4 # <CJK>
-0x5CCB # <CJK>
-0x5CD2 # <CJK>
-0x5CD9 # <CJK>
-0x5CE1 # <CJK>
-0x5CE4 # <CJK>
-0x5CE5 # <CJK>
-0x5CE6 # <CJK>
-0x5CE8 # <CJK>
-0x5CEA # <CJK>
-0x5CED # <CJK>
-0x5CF0 # <CJK>
-0x5CFB # <CJK>
-0x5D02 # <CJK>
-0x5D03 # <CJK>
-0x5D06 # <CJK>
-0x5D07 # <CJK>
-0x5D0E # <CJK>
-0x5D14 # <CJK>
-0x5D16 # <CJK>
-0x5D1B # <CJK>
-0x5D1E # <CJK>
-0x5D24 # <CJK>
-0x5D26 # <CJK>
-0x5D27 # <CJK>
-0x5D29 # <CJK>
-0x5D2D # <CJK>
-0x5D2E # <CJK>
-0x5D34 # <CJK>
-0x5D3D # <CJK>
-0x5D3E # <CJK>
-0x5D47 # <CJK>
-0x5D4A # <CJK>
-0x5D4B # <CJK>
-0x5D4C # <CJK>
-0x5D58 # <CJK>
-0x5D5B # <CJK>
-0x5D5D # <CJK>
-0x5D69 # <CJK>
-0x5D6B # <CJK>
-0x5D6C # <CJK>
-0x5D6F # <CJK>
-0x5D74 # <CJK>
-0x5D82 # <CJK>
-0x5D99 # <CJK>
-0x5D9D # <CJK>
-0x5DB7 # <CJK>
-0x5DC5 # <CJK>
-0x5DCD # <CJK>
-0x5DDB # <CJK>
-0x5DDD # <CJK>
-0x5DDE # <CJK>
-0x5DE1 # <CJK>
-0x5DE2 # <CJK>
-0x5DE5 # <CJK>
-0x5DE6 # <CJK>
-0x5DE7 # <CJK>
-0x5DE8 # <CJK>
-0x5DE9 # <CJK>
-0x5DEB # <CJK>
-0x5DEE # <CJK>
-0x5DEF # <CJK>
-0x5DF1 # <CJK>
-0x5DF2 # <CJK>
-0x5DF3 # <CJK>
-0x5DF4 # <CJK>
-0x5DF7 # <CJK>
-0x5DFD # <CJK>
-0x5DFE # <CJK>
-0x5E01 # <CJK>
-0x5E02 # <CJK>
-0x5E03 # <CJK>
-0x5E05 # <CJK>
-0x5E06 # <CJK>
-0x5E08 # <CJK>
-0x5E0C # <CJK>
-0x5E0F # <CJK>
-0x5E10 # <CJK>
-0x5E11 # <CJK>
-0x5E14 # <CJK>
-0x5E15 # <CJK>
-0x5E16 # <CJK>
-0x5E18 # <CJK>
-0x5E19 # <CJK>
-0x5E1A # <CJK>
-0x5E1B # <CJK>
-0x5E1C # <CJK>
-0x5E1D # <CJK>
-0x5E26 # <CJK>
-0x5E27 # <CJK>
-0x5E2D # <CJK>
-0x5E2E # <CJK>
-0x5E31 # <CJK>
-0x5E37 # <CJK>
-0x5E38 # <CJK>
-0x5E3B # <CJK>
-0x5E3C # <CJK>
-0x5E3D # <CJK>
-0x5E42 # <CJK>
-0x5E44 # <CJK>
-0x5E45 # <CJK>
-0x5E4C # <CJK>
-0x5E54 # <CJK>
-0x5E55 # <CJK>
-0x5E5B # <CJK>
-0x5E5E # <CJK>
-0x5E61 # <CJK>
-0x5E62 # <CJK>
-0x5E72 # <CJK>
-0x5E73 # <CJK>
-0x5E74 # <CJK>
-0x5E76 # <CJK>
-0x5E78 # <CJK>
-0x5E7A # <CJK>
-0x5E7B # <CJK>
-0x5E7C # <CJK>
-0x5E7D # <CJK>
-0x5E7F # <CJK>
-0x5E80 # <CJK>
-0x5E84 # <CJK>
-0x5E86 # <CJK>
-0x5E87 # <CJK>
-0x5E8A # <CJK>
-0x5E8B # <CJK>
-0x5E8F # <CJK>
-0x5E90 # <CJK>
-0x5E91 # <CJK>
-0x5E93 # <CJK>
-0x5E94 # <CJK>
-0x5E95 # <CJK>
-0x5E96 # <CJK>
-0x5E97 # <CJK>
-0x5E99 # <CJK>
-0x5E9A # <CJK>
-0x5E9C # <CJK>
-0x5E9E # <CJK>
-0x5E9F # <CJK>
-0x5EA0 # <CJK>
-0x5EA5 # <CJK>
-0x5EA6 # <CJK>
-0x5EA7 # <CJK>
-0x5EAD # <CJK>
-0x5EB3 # <CJK>
-0x5EB5 # <CJK>
-0x5EB6 # <CJK>
-0x5EB7 # <CJK>
-0x5EB8 # <CJK>
-0x5EB9 # <CJK>
-0x5EBE # <CJK>
-0x5EC9 # <CJK>
-0x5ECA # <CJK>
-0x5ED1 # <CJK>
-0x5ED2 # <CJK>
-0x5ED3 # <CJK>
-0x5ED6 # <CJK>
-0x5EDB # <CJK>
-0x5EE8 # <CJK>
-0x5EEA # <CJK>
-0x5EF4 # <CJK>
-0x5EF6 # <CJK>
-0x5EF7 # <CJK>
-0x5EFA # <CJK>
-0x5EFE # <CJK>
-0x5EFF # <CJK>
-0x5F00 # <CJK>
-0x5F01 # <CJK>
-0x5F02 # <CJK>
-0x5F03 # <CJK>
-0x5F04 # <CJK>
-0x5F08 # <CJK>
-0x5F0A # <CJK>
-0x5F0B # <CJK>
-0x5F0F # <CJK>
-0x5F11 # <CJK>
-0x5F13 # <CJK>
-0x5F15 # <CJK>
-0x5F17 # <CJK>
-0x5F18 # <CJK>
-0x5F1B # <CJK>
-0x5F1F # <CJK>
-0x5F20 # <CJK>
-0x5F25 # <CJK>
-0x5F26 # <CJK>
-0x5F27 # <CJK>
-0x5F29 # <CJK>
-0x5F2A # <CJK>
-0x5F2D # <CJK>
-0x5F2F # <CJK>
-0x5F31 # <CJK>
-0x5F39 # <CJK>
-0x5F3A # <CJK>
-0x5F3C # <CJK>
-0x5F40 # <CJK>
-0x5F50 # <CJK>
-0x5F52 # <CJK>
-0x5F53 # <CJK>
-0x5F55 # <CJK>
-0x5F56 # <CJK>
-0x5F57 # <CJK>
-0x5F58 # <CJK>
-0x5F5D # <CJK>
-0x5F61 # <CJK>
-0x5F62 # <CJK>
-0x5F64 # <CJK>
-0x5F66 # <CJK>
-0x5F69 # <CJK>
-0x5F6A # <CJK>
-0x5F6C # <CJK>
-0x5F6D # <CJK>
-0x5F70 # <CJK>
-0x5F71 # <CJK>
-0x5F73 # <CJK>
-0x5F77 # <CJK>
-0x5F79 # <CJK>
-0x5F7B # <CJK>
-0x5F7C # <CJK>
-0x5F80 # <CJK>
-0x5F81 # <CJK>
-0x5F82 # <CJK>
-0x5F84 # <CJK>
-0x5F85 # <CJK>
-0x5F87 # <CJK>
-0x5F88 # <CJK>
-0x5F89 # <CJK>
-0x5F8A # <CJK>
-0x5F8B # <CJK>
-0x5F8C # <CJK>
-0x5F90 # <CJK>
-0x5F92 # <CJK>
-0x5F95 # <CJK>
-0x5F97 # <CJK>
-0x5F98 # <CJK>
-0x5F99 # <CJK>
-0x5F9C # <CJK>
-0x5FA1 # <CJK>
-0x5FA8 # <CJK>
-0x5FAA # <CJK>
-0x5FAD # <CJK>
-0x5FAE # <CJK>
-0x5FB5 # <CJK>
-0x5FB7 # <CJK>
-0x5FBC # <CJK>
-0x5FBD # <CJK>
-0x5FC3 # <CJK>
-0x5FC4 # <CJK>
-0x5FC5 # <CJK>
-0x5FC6 # <CJK>
-0x5FC9 # <CJK>
-0x5FCC # <CJK>
-0x5FCD # <CJK>
-0x5FCF # <CJK>
-0x5FD0 # <CJK>
-0x5FD1 # <CJK>
-0x5FD2 # <CJK>
-0x5FD6 # <CJK>
-0x5FD7 # <CJK>
-0x5FD8 # <CJK>
-0x5FD9 # <CJK>
-0x5FDD # <CJK>
-0x5FE0 # <CJK>
-0x5FE1 # <CJK>
-0x5FE4 # <CJK>
-0x5FE7 # <CJK>
-0x5FEA # <CJK>
-0x5FEB # <CJK>
-0x5FED # <CJK>
-0x5FEE # <CJK>
-0x5FF1 # <CJK>
-0x5FF5 # <CJK>
-0x5FF8 # <CJK>
-0x5FFB # <CJK>
-0x5FFD # <CJK>
-0x5FFE # <CJK>
-0x5FFF # <CJK>
-0x6000 # <CJK>
-0x6001 # <CJK>
-0x6002 # <CJK>
-0x6003 # <CJK>
-0x6004 # <CJK>
-0x6005 # <CJK>
-0x6006 # <CJK>
-0x600A # <CJK>
-0x600D # <CJK>
-0x600E # <CJK>
-0x600F # <CJK>
-0x6012 # <CJK>
-0x6014 # <CJK>
-0x6015 # <CJK>
-0x6016 # <CJK>
-0x6019 # <CJK>
-0x601B # <CJK>
-0x601C # <CJK>
-0x601D # <CJK>
-0x6020 # <CJK>
-0x6021 # <CJK>
-0x6025 # <CJK>
-0x6026 # <CJK>
-0x6027 # <CJK>
-0x6028 # <CJK>
-0x6029 # <CJK>
-0x602A # <CJK>
-0x602B # <CJK>
-0x602F # <CJK>
-0x6035 # <CJK>
-0x603B # <CJK>
-0x603C # <CJK>
-0x603F # <CJK>
-0x6041 # <CJK>
-0x6042 # <CJK>
-0x6043 # <CJK>
-0x604B # <CJK>
-0x604D # <CJK>
-0x6050 # <CJK>
-0x6052 # <CJK>
-0x6055 # <CJK>
-0x6059 # <CJK>
-0x605A # <CJK>
-0x605D # <CJK>
-0x6062 # <CJK>
-0x6063 # <CJK>
-0x6064 # <CJK>
-0x6067 # <CJK>
-0x6068 # <CJK>
-0x6069 # <CJK>
-0x606A # <CJK>
-0x606B # <CJK>
-0x606C # <CJK>
-0x606D # <CJK>
-0x606F # <CJK>
-0x6070 # <CJK>
-0x6073 # <CJK>
-0x6076 # <CJK>
-0x6078 # <CJK>
-0x6079 # <CJK>
-0x607A # <CJK>
-0x607B # <CJK>
-0x607C # <CJK>
-0x607D # <CJK>
-0x607F # <CJK>
-0x6083 # <CJK>
-0x6084 # <CJK>
-0x6089 # <CJK>
-0x608C # <CJK>
-0x608D # <CJK>
-0x6092 # <CJK>
-0x6094 # <CJK>
-0x6096 # <CJK>
-0x609A # <CJK>
-0x609B # <CJK>
-0x609D # <CJK>
-0x609F # <CJK>
-0x60A0 # <CJK>
-0x60A3 # <CJK>
-0x60A6 # <CJK>
-0x60A8 # <CJK>
-0x60AB # <CJK>
-0x60AC # <CJK>
-0x60AD # <CJK>
-0x60AF # <CJK>
-0x60B1 # <CJK>
-0x60B2 # <CJK>
-0x60B4 # <CJK>
-0x60B8 # <CJK>
-0x60BB # <CJK>
-0x60BC # <CJK>
-0x60C5 # <CJK>
-0x60C6 # <CJK>
-0x60CA # <CJK>
-0x60CB # <CJK>
-0x60D1 # <CJK>
-0x60D5 # <CJK>
-0x60D8 # <CJK>
-0x60DA # <CJK>
-0x60DC # <CJK>
-0x60DD # <CJK>
-0x60DF # <CJK>
-0x60E0 # <CJK>
-0x60E6 # <CJK>
-0x60E7 # <CJK>
-0x60E8 # <CJK>
-0x60E9 # <CJK>
-0x60EB # <CJK>
-0x60EC # <CJK>
-0x60ED # <CJK>
-0x60EE # <CJK>
-0x60EF # <CJK>
-0x60F0 # <CJK>
-0x60F3 # <CJK>
-0x60F4 # <CJK>
-0x60F6 # <CJK>
-0x60F9 # <CJK>
-0x60FA # <CJK>
-0x6100 # <CJK>
-0x6101 # <CJK>
-0x6106 # <CJK>
-0x6108 # <CJK>
-0x6109 # <CJK>
-0x610D # <CJK>
-0x610E # <CJK>
-0x610F # <CJK>
-0x6115 # <CJK>
-0x611A # <CJK>
-0x611F # <CJK>
-0x6120 # <CJK>
-0x6123 # <CJK>
-0x6124 # <CJK>
-0x6126 # <CJK>
-0x6127 # <CJK>
-0x612B # <CJK>
-0x613F # <CJK>
-0x6148 # <CJK>
-0x614A # <CJK>
-0x614C # <CJK>
-0x614E # <CJK>
-0x6151 # <CJK>
-0x6155 # <CJK>
-0x615D # <CJK>
-0x6162 # <CJK>
-0x6167 # <CJK>
-0x6168 # <CJK>
-0x6170 # <CJK>
-0x6175 # <CJK>
-0x6177 # <CJK>
-0x618B # <CJK>
-0x618E # <CJK>
-0x6194 # <CJK>
-0x619D # <CJK>
-0x61A7 # <CJK>
-0x61A8 # <CJK>
-0x61A9 # <CJK>
-0x61AC # <CJK>
-0x61B7 # <CJK>
-0x61BE # <CJK>
-0x61C2 # <CJK>
-0x61C8 # <CJK>
-0x61CA # <CJK>
-0x61CB # <CJK>
-0x61D1 # <CJK>
-0x61D2 # <CJK>
-0x61D4 # <CJK>
-0x61E6 # <CJK>
-0x61F5 # <CJK>
-0x61FF # <CJK>
-0x6206 # <CJK>
-0x6208 # <CJK>
-0x620A # <CJK>
-0x620B # <CJK>
-0x620C # <CJK>
-0x620D # <CJK>
-0x620E # <CJK>
-0x620F # <CJK>
-0x6210 # <CJK>
-0x6211 # <CJK>
-0x6212 # <CJK>
-0x6215 # <CJK>
-0x6216 # <CJK>
-0x6217 # <CJK>
-0x6218 # <CJK>
-0x621A # <CJK>
-0x621B # <CJK>
-0x621F # <CJK>
-0x6221 # <CJK>
-0x6222 # <CJK>
-0x6224 # <CJK>
-0x6225 # <CJK>
-0x622A # <CJK>
-0x622C # <CJK>
-0x622E # <CJK>
-0x6233 # <CJK>
-0x6234 # <CJK>
-0x6237 # <CJK>
-0x623D # <CJK>
-0x623E # <CJK>
-0x623F # <CJK>
-0x6240 # <CJK>
-0x6241 # <CJK>
-0x6243 # <CJK>
-0x6247 # <CJK>
-0x6248 # <CJK>
-0x6249 # <CJK>
-0x624B # <CJK>
-0x624C # <CJK>
-0x624D # <CJK>
-0x624E # <CJK>
-0x6251 # <CJK>
-0x6252 # <CJK>
-0x6253 # <CJK>
-0x6254 # <CJK>
-0x6258 # <CJK>
-0x625B # <CJK>
-0x6263 # <CJK>
-0x6266 # <CJK>
-0x6267 # <CJK>
-0x6269 # <CJK>
-0x626A # <CJK>
-0x626B # <CJK>
-0x626C # <CJK>
-0x626D # <CJK>
-0x626E # <CJK>
-0x626F # <CJK>
-0x6270 # <CJK>
-0x6273 # <CJK>
-0x6276 # <CJK>
-0x6279 # <CJK>
-0x627C # <CJK>
-0x627E # <CJK>
-0x627F # <CJK>
-0x6280 # <CJK>
-0x6284 # <CJK>
-0x6289 # <CJK>
-0x628A # <CJK>
-0x6291 # <CJK>
-0x6292 # <CJK>
-0x6293 # <CJK>
-0x6295 # <CJK>
-0x6296 # <CJK>
-0x6297 # <CJK>
-0x6298 # <CJK>
-0x629A # <CJK>
-0x629B # <CJK>
-0x629F # <CJK>
-0x62A0 # <CJK>
-0x62A1 # <CJK>
-0x62A2 # <CJK>
-0x62A4 # <CJK>
-0x62A5 # <CJK>
-0x62A8 # <CJK>
-0x62AB # <CJK>
-0x62AC # <CJK>
-0x62B1 # <CJK>
-0x62B5 # <CJK>
-0x62B9 # <CJK>
-0x62BB # <CJK>
-0x62BC # <CJK>
-0x62BD # <CJK>
-0x62BF # <CJK>
-0x62C2 # <CJK>
-0x62C4 # <CJK>
-0x62C5 # <CJK>
-0x62C6 # <CJK>
-0x62C7 # <CJK>
-0x62C8 # <CJK>
-0x62C9 # <CJK>
-0x62CA # <CJK>
-0x62CC # <CJK>
-0x62CD # <CJK>
-0x62CE # <CJK>
-0x62D0 # <CJK>
-0x62D2 # <CJK>
-0x62D3 # <CJK>
-0x62D4 # <CJK>
-0x62D6 # <CJK>
-0x62D7 # <CJK>
-0x62D8 # <CJK>
-0x62D9 # <CJK>
-0x62DA # <CJK>
-0x62DB # <CJK>
-0x62DC # <CJK>
-0x62DF # <CJK>
-0x62E2 # <CJK>
-0x62E3 # <CJK>
-0x62E5 # <CJK>
-0x62E6 # <CJK>
-0x62E7 # <CJK>
-0x62E8 # <CJK>
-0x62E9 # <CJK>
-0x62EC # <CJK>
-0x62ED # <CJK>
-0x62EE # <CJK>
-0x62EF # <CJK>
-0x62F1 # <CJK>
-0x62F3 # <CJK>
-0x62F4 # <CJK>
-0x62F6 # <CJK>
-0x62F7 # <CJK>
-0x62FC # <CJK>
-0x62FD # <CJK>
-0x62FE # <CJK>
-0x62FF # <CJK>
-0x6301 # <CJK>
-0x6302 # <CJK>
-0x6307 # <CJK>
-0x6308 # <CJK>
-0x6309 # <CJK>
-0x630E # <CJK>
-0x6311 # <CJK>
-0x6316 # <CJK>
-0x631A # <CJK>
-0x631B # <CJK>
-0x631D # <CJK>
-0x631E # <CJK>
-0x631F # <CJK>
-0x6320 # <CJK>
-0x6321 # <CJK>
-0x6322 # <CJK>
-0x6323 # <CJK>
-0x6324 # <CJK>
-0x6325 # <CJK>
-0x6328 # <CJK>
-0x632A # <CJK>
-0x632B # <CJK>
-0x632F # <CJK>
-0x6332 # <CJK>
-0x6339 # <CJK>
-0x633A # <CJK>
-0x633D # <CJK>
-0x6342 # <CJK>
-0x6343 # <CJK>
-0x6345 # <CJK>
-0x6346 # <CJK>
-0x6349 # <CJK>
-0x634B # <CJK>
-0x634C # <CJK>
-0x634D # <CJK>
-0x634E # <CJK>
-0x634F # <CJK>
-0x6350 # <CJK>
-0x6355 # <CJK>
-0x635E # <CJK>
-0x635F # <CJK>
-0x6361 # <CJK>
-0x6362 # <CJK>
-0x6363 # <CJK>
-0x6367 # <CJK>
-0x6369 # <CJK>
-0x636D # <CJK>
-0x636E # <CJK>
-0x6371 # <CJK>
-0x6376 # <CJK>
-0x6377 # <CJK>
-0x637A # <CJK>
-0x637B # <CJK>
-0x6380 # <CJK>
-0x6382 # <CJK>
-0x6387 # <CJK>
-0x6388 # <CJK>
-0x6389 # <CJK>
-0x638A # <CJK>
-0x638C # <CJK>
-0x638E # <CJK>
-0x638F # <CJK>
-0x6390 # <CJK>
-0x6392 # <CJK>
-0x6396 # <CJK>
-0x6398 # <CJK>
-0x63A0 # <CJK>
-0x63A2 # <CJK>
-0x63A3 # <CJK>
-0x63A5 # <CJK>
-0x63A7 # <CJK>
-0x63A8 # <CJK>
-0x63A9 # <CJK>
-0x63AA # <CJK>
-0x63AC # <CJK>
-0x63AD # <CJK>
-0x63AE # <CJK>
-0x63B0 # <CJK>
-0x63B3 # <CJK>
-0x63B4 # <CJK>
-0x63B7 # <CJK>
-0x63B8 # <CJK>
-0x63BA # <CJK>
-0x63BC # <CJK>
-0x63BE # <CJK>
-0x63C4 # <CJK>
-0x63C6 # <CJK>
-0x63C9 # <CJK>
-0x63CD # <CJK>
-0x63CE # <CJK>
-0x63CF # <CJK>
-0x63D0 # <CJK>
-0x63D2 # <CJK>
-0x63D6 # <CJK>
-0x63DE # <CJK>
-0x63E0 # <CJK>
-0x63E1 # <CJK>
-0x63E3 # <CJK>
-0x63E9 # <CJK>
-0x63EA # <CJK>
-0x63ED # <CJK>
-0x63F2 # <CJK>
-0x63F4 # <CJK>
-0x63F6 # <CJK>
-0x63F8 # <CJK>
-0x63FD # <CJK>
-0x63FF # <CJK>
-0x6400 # <CJK>
-0x6401 # <CJK>
-0x6402 # <CJK>
-0x6405 # <CJK>
-0x640B # <CJK>
-0x640C # <CJK>
-0x640F # <CJK>
-0x6410 # <CJK>
-0x6413 # <CJK>
-0x6414 # <CJK>
-0x641B # <CJK>
-0x641C # <CJK>
-0x641E # <CJK>
-0x6420 # <CJK>
-0x6421 # <CJK>
-0x6426 # <CJK>
-0x642A # <CJK>
-0x642C # <CJK>
-0x642D # <CJK>
-0x6434 # <CJK>
-0x643A # <CJK>
-0x643D # <CJK>
-0x643F # <CJK>
-0x6441 # <CJK>
-0x6444 # <CJK>
-0x6445 # <CJK>
-0x6446 # <CJK>
-0x6447 # <CJK>
-0x6448 # <CJK>
-0x644A # <CJK>
-0x6452 # <CJK>
-0x6454 # <CJK>
-0x6458 # <CJK>
-0x645E # <CJK>
-0x6467 # <CJK>
-0x6469 # <CJK>
-0x646D # <CJK>
-0x6478 # <CJK>
-0x6479 # <CJK>
-0x647A # <CJK>
-0x6482 # <CJK>
-0x6484 # <CJK>
-0x6485 # <CJK>
-0x6487 # <CJK>
-0x6491 # <CJK>
-0x6492 # <CJK>
-0x6495 # <CJK>
-0x6496 # <CJK>
-0x6499 # <CJK>
-0x649E # <CJK>
-0x64A4 # <CJK>
-0x64A9 # <CJK>
-0x64AC # <CJK>
-0x64AD # <CJK>
-0x64AE # <CJK>
-0x64B0 # <CJK>
-0x64B5 # <CJK>
-0x64B7 # <CJK>
-0x64B8 # <CJK>
-0x64BA # <CJK>
-0x64BC # <CJK>
-0x64C0 # <CJK>
-0x64C2 # <CJK>
-0x64C5 # <CJK>
-0x64CD # <CJK>
-0x64CE # <CJK>
-0x64D0 # <CJK>
-0x64D2 # <CJK>
-0x64D7 # <CJK>
-0x64D8 # <CJK>
-0x64DE # <CJK>
-0x64E2 # <CJK>
-0x64E4 # <CJK>
-0x64E6 # <CJK>
-0x6500 # <CJK>
-0x6509 # <CJK>
-0x6512 # <CJK>
-0x6518 # <CJK>
-0x6525 # <CJK>
-0x652B # <CJK>
-0x652E # <CJK>
-0x652F # <CJK>
-0x6534 # <CJK>
-0x6535 # <CJK>
-0x6536 # <CJK>
-0x6538 # <CJK>
-0x6539 # <CJK>
-0x653B # <CJK>
-0x653E # <CJK>
-0x653F # <CJK>
-0x6545 # <CJK>
-0x6548 # <CJK>
-0x6549 # <CJK>
-0x654C # <CJK>
-0x654F # <CJK>
-0x6551 # <CJK>
-0x6555 # <CJK>
-0x6556 # <CJK>
-0x6559 # <CJK>
-0x655B # <CJK>
-0x655D # <CJK>
-0x655E # <CJK>
-0x6562 # <CJK>
-0x6563 # <CJK>
-0x6566 # <CJK>
-0x656B # <CJK>
-0x656C # <CJK>
-0x6570 # <CJK>
-0x6572 # <CJK>
-0x6574 # <CJK>
-0x6577 # <CJK>
-0x6587 # <CJK>
-0x658B # <CJK>
-0x658C # <CJK>
-0x6590 # <CJK>
-0x6591 # <CJK>
-0x6593 # <CJK>
-0x6597 # <CJK>
-0x6599 # <CJK>
-0x659B # <CJK>
-0x659C # <CJK>
-0x659F # <CJK>
-0x65A1 # <CJK>
-0x65A4 # <CJK>
-0x65A5 # <CJK>
-0x65A7 # <CJK>
-0x65A9 # <CJK>
-0x65AB # <CJK>
-0x65AD # <CJK>
-0x65AF # <CJK>
-0x65B0 # <CJK>
-0x65B9 # <CJK>
-0x65BC # <CJK>
-0x65BD # <CJK>
-0x65C1 # <CJK>
-0x65C3 # <CJK>
-0x65C4 # <CJK>
-0x65C5 # <CJK>
-0x65C6 # <CJK>
-0x65CB # <CJK>
-0x65CC # <CJK>
-0x65CE # <CJK>
-0x65CF # <CJK>
-0x65D2 # <CJK>
-0x65D6 # <CJK>
-0x65D7 # <CJK>
-0x65E0 # <CJK>
-0x65E2 # <CJK>
-0x65E5 # <CJK>
-0x65E6 # <CJK>
-0x65E7 # <CJK>
-0x65E8 # <CJK>
-0x65E9 # <CJK>
-0x65EC # <CJK>
-0x65ED # <CJK>
-0x65EE # <CJK>
-0x65EF # <CJK>
-0x65F0 # <CJK>
-0x65F1 # <CJK>
-0x65F6 # <CJK>
-0x65F7 # <CJK>
-0x65FA # <CJK>
-0x6600 # <CJK>
-0x6602 # <CJK>
-0x6603 # <CJK>
-0x6606 # <CJK>
-0x660A # <CJK>
-0x660C # <CJK>
-0x660E # <CJK>
-0x660F # <CJK>
-0x6613 # <CJK>
-0x6614 # <CJK>
-0x6615 # <CJK>
-0x6619 # <CJK>
-0x661D # <CJK>
-0x661F # <CJK>
-0x6620 # <CJK>
-0x6625 # <CJK>
-0x6627 # <CJK>
-0x6628 # <CJK>
-0x662D # <CJK>
-0x662F # <CJK>
-0x6631 # <CJK>
-0x6634 # <CJK>
-0x6635 # <CJK>
-0x6636 # <CJK>
-0x663C # <CJK>
-0x663E # <CJK>
-0x6641 # <CJK>
-0x6643 # <CJK>
-0x664B # <CJK>
-0x664C # <CJK>
-0x664F # <CJK>
-0x6652 # <CJK>
-0x6653 # <CJK>
-0x6654 # <CJK>
-0x6655 # <CJK>
-0x6656 # <CJK>
-0x6657 # <CJK>
-0x665A # <CJK>
-0x665F # <CJK>
-0x6661 # <CJK>
-0x6664 # <CJK>
-0x6666 # <CJK>
-0x6668 # <CJK>
-0x666E # <CJK>
-0x666F # <CJK>
-0x6670 # <CJK>
-0x6674 # <CJK>
-0x6676 # <CJK>
-0x6677 # <CJK>
-0x667A # <CJK>
-0x667E # <CJK>
-0x6682 # <CJK>
-0x6684 # <CJK>
-0x6687 # <CJK>
-0x668C # <CJK>
-0x6691 # <CJK>
-0x6696 # <CJK>
-0x6697 # <CJK>
-0x669D # <CJK>
-0x66A7 # <CJK>
-0x66A8 # <CJK>
-0x66AE # <CJK>
-0x66B4 # <CJK>
-0x66B9 # <CJK>
-0x66BE # <CJK>
-0x66D9 # <CJK>
-0x66DB # <CJK>
-0x66DC # <CJK>
-0x66DD # <CJK>
-0x66E6 # <CJK>
-0x66E9 # <CJK>
-0x66F0 # <CJK>
-0x66F2 # <CJK>
-0x66F3 # <CJK>
-0x66F4 # <CJK>
-0x66F7 # <CJK>
-0x66F9 # <CJK>
-0x66FC # <CJK>
-0x66FE # <CJK>
-0x66FF # <CJK>
-0x6700 # <CJK>
-0x6708 # <CJK>
-0x6709 # <CJK>
-0x670A # <CJK>
-0x670B # <CJK>
-0x670D # <CJK>
-0x6710 # <CJK>
-0x6714 # <CJK>
-0x6715 # <CJK>
-0x6717 # <CJK>
-0x671B # <CJK>
-0x671D # <CJK>
-0x671F # <CJK>
-0x6726 # <CJK>
-0x6728 # <CJK>
-0x672A # <CJK>
-0x672B # <CJK>
-0x672C # <CJK>
-0x672D # <CJK>
-0x672F # <CJK>
-0x6731 # <CJK>
-0x6734 # <CJK>
-0x6735 # <CJK>
-0x673A # <CJK>
-0x673D # <CJK>
-0x6740 # <CJK>
-0x6742 # <CJK>
-0x6743 # <CJK>
-0x6746 # <CJK>
-0x6748 # <CJK>
-0x6749 # <CJK>
-0x674C # <CJK>
-0x674E # <CJK>
-0x674F # <CJK>
-0x6750 # <CJK>
-0x6751 # <CJK>
-0x6753 # <CJK>
-0x6756 # <CJK>
-0x675C # <CJK>
-0x675E # <CJK>
-0x675F # <CJK>
-0x6760 # <CJK>
-0x6761 # <CJK>
-0x6765 # <CJK>
-0x6768 # <CJK>
-0x6769 # <CJK>
-0x676A # <CJK>
-0x676D # <CJK>
-0x676F # <CJK>
-0x6770 # <CJK>
-0x6772 # <CJK>
-0x6773 # <CJK>
-0x6775 # <CJK>
-0x6777 # <CJK>
-0x677C # <CJK>
-0x677E # <CJK>
-0x677F # <CJK>
-0x6781 # <CJK>
-0x6784 # <CJK>
-0x6787 # <CJK>
-0x6789 # <CJK>
-0x678B # <CJK>
-0x6790 # <CJK>
-0x6795 # <CJK>
-0x6797 # <CJK>
-0x6798 # <CJK>
-0x679A # <CJK>
-0x679C # <CJK>
-0x679D # <CJK>
-0x679E # <CJK>
-0x67A2 # <CJK>
-0x67A3 # <CJK>
-0x67A5 # <CJK>
-0x67A7 # <CJK>
-0x67A8 # <CJK>
-0x67AA # <CJK>
-0x67AB # <CJK>
-0x67AD # <CJK>
-0x67AF # <CJK>
-0x67B0 # <CJK>
-0x67B3 # <CJK>
-0x67B5 # <CJK>
-0x67B6 # <CJK>
-0x67B7 # <CJK>
-0x67B8 # <CJK>
-0x67C1 # <CJK>
-0x67C3 # <CJK>
-0x67C4 # <CJK>
-0x67CF # <CJK>
-0x67D0 # <CJK>
-0x67D1 # <CJK>
-0x67D2 # <CJK>
-0x67D3 # <CJK>
-0x67D4 # <CJK>
-0x67D8 # <CJK>
-0x67D9 # <CJK>
-0x67DA # <CJK>
-0x67DC # <CJK>
-0x67DD # <CJK>
-0x67DE # <CJK>
-0x67E0 # <CJK>
-0x67E2 # <CJK>
-0x67E5 # <CJK>
-0x67E9 # <CJK>
-0x67EC # <CJK>
-0x67EF # <CJK>
-0x67F0 # <CJK>
-0x67F1 # <CJK>
-0x67F3 # <CJK>
-0x67F4 # <CJK>
-0x67FD # <CJK>
-0x67FF # <CJK>
-0x6800 # <CJK>
-0x6805 # <CJK>
-0x6807 # <CJK>
-0x6808 # <CJK>
-0x6809 # <CJK>
-0x680A # <CJK>
-0x680B # <CJK>
-0x680C # <CJK>
-0x680E # <CJK>
-0x680F # <CJK>
-0x6811 # <CJK>
-0x6813 # <CJK>
-0x6816 # <CJK>
-0x6817 # <CJK>
-0x681D # <CJK>
-0x6821 # <CJK>
-0x6829 # <CJK>
-0x682A # <CJK>
-0x6832 # <CJK>
-0x6833 # <CJK>
-0x6837 # <CJK>
-0x6838 # <CJK>
-0x6839 # <CJK>
-0x683C # <CJK>
-0x683D # <CJK>
-0x683E # <CJK>
-0x6840 # <CJK>
-0x6841 # <CJK>
-0x6842 # <CJK>
-0x6843 # <CJK>
-0x6844 # <CJK>
-0x6845 # <CJK>
-0x6846 # <CJK>
-0x6848 # <CJK>
-0x6849 # <CJK>
-0x684A # <CJK>
-0x684C # <CJK>
-0x684E # <CJK>
-0x6850 # <CJK>
-0x6851 # <CJK>
-0x6853 # <CJK>
-0x6854 # <CJK>
-0x6855 # <CJK>
-0x6860 # <CJK>
-0x6861 # <CJK>
-0x6862 # <CJK>
-0x6863 # <CJK>
-0x6864 # <CJK>
-0x6865 # <CJK>
-0x6866 # <CJK>
-0x6867 # <CJK>
-0x6868 # <CJK>
-0x6869 # <CJK>
-0x686B # <CJK>
-0x6874 # <CJK>
-0x6876 # <CJK>
-0x6877 # <CJK>
-0x6881 # <CJK>
-0x6883 # <CJK>
-0x6885 # <CJK>
-0x6886 # <CJK>
-0x688F # <CJK>
-0x6893 # <CJK>
-0x6897 # <CJK>
-0x68A2 # <CJK>
-0x68A6 # <CJK>
-0x68A7 # <CJK>
-0x68A8 # <CJK>
-0x68AD # <CJK>
-0x68AF # <CJK>
-0x68B0 # <CJK>
-0x68B3 # <CJK>
-0x68B5 # <CJK>
-0x68C0 # <CJK>
-0x68C2 # <CJK>
-0x68C9 # <CJK>
-0x68CB # <CJK>
-0x68CD # <CJK>
-0x68D2 # <CJK>
-0x68D5 # <CJK>
-0x68D8 # <CJK>
-0x68DA # <CJK>
-0x68E0 # <CJK>
-0x68E3 # <CJK>
-0x68EE # <CJK>
-0x68F0 # <CJK>
-0x68F1 # <CJK>
-0x68F5 # <CJK>
-0x68F9 # <CJK>
-0x68FA # <CJK>
-0x68FC # <CJK>
-0x6901 # <CJK>
-0x6905 # <CJK>
-0x690B # <CJK>
-0x690D # <CJK>
-0x690E # <CJK>
-0x6910 # <CJK>
-0x6912 # <CJK>
-0x691F # <CJK>
-0x6920 # <CJK>
-0x6924 # <CJK>
-0x692D # <CJK>
-0x6930 # <CJK>
-0x6934 # <CJK>
-0x6939 # <CJK>
-0x693D # <CJK>
-0x693F # <CJK>
-0x6942 # <CJK>
-0x6954 # <CJK>
-0x6957 # <CJK>
-0x695A # <CJK>
-0x695D # <CJK>
-0x695E # <CJK>
-0x6960 # <CJK>
-0x6963 # <CJK>
-0x6966 # <CJK>
-0x696B # <CJK>
-0x696E # <CJK>
-0x6971 # <CJK>
-0x6977 # <CJK>
-0x6978 # <CJK>
-0x6979 # <CJK>
-0x697C # <CJK>
-0x6980 # <CJK>
-0x6982 # <CJK>
-0x6984 # <CJK>
-0x6986 # <CJK>
-0x6987 # <CJK>
-0x6988 # <CJK>
-0x6989 # <CJK>
-0x698D # <CJK>
-0x6994 # <CJK>
-0x6995 # <CJK>
-0x6998 # <CJK>
-0x699B # <CJK>
-0x699C # <CJK>
-0x69A7 # <CJK>
-0x69A8 # <CJK>
-0x69AB # <CJK>
-0x69AD # <CJK>
-0x69B1 # <CJK>
-0x69B4 # <CJK>
-0x69B7 # <CJK>
-0x69BB # <CJK>
-0x69C1 # <CJK>
-0x69CA # <CJK>
-0x69CC # <CJK>
-0x69CE # <CJK>
-0x69D0 # <CJK>
-0x69D4 # <CJK>
-0x69DB # <CJK>
-0x69DF # <CJK>
-0x69E0 # <CJK>
-0x69ED # <CJK>
-0x69F2 # <CJK>
-0x69FD # <CJK>
-0x69FF # <CJK>
-0x6A0A # <CJK>
-0x6A17 # <CJK>
-0x6A18 # <CJK>
-0x6A1F # <CJK>
-0x6A21 # <CJK>
-0x6A28 # <CJK>
-0x6A2A # <CJK>
-0x6A2F # <CJK>
-0x6A31 # <CJK>
-0x6A35 # <CJK>
-0x6A3D # <CJK>
-0x6A3E # <CJK>
-0x6A44 # <CJK>
-0x6A47 # <CJK>
-0x6A50 # <CJK>
-0x6A58 # <CJK>
-0x6A59 # <CJK>
-0x6A5B # <CJK>
-0x6A61 # <CJK>
-0x6A65 # <CJK>
-0x6A71 # <CJK>
-0x6A79 # <CJK>
-0x6A7C # <CJK>
-0x6A80 # <CJK>
-0x6A84 # <CJK>
-0x6A8E # <CJK>
-0x6A90 # <CJK>
-0x6A91 # <CJK>
-0x6A97 # <CJK>
-0x6AA0 # <CJK>
-0x6AA9 # <CJK>
-0x6AAB # <CJK>
-0x6AAC # <CJK>
-0x6B20 # <CJK>
-0x6B21 # <CJK>
-0x6B22 # <CJK>
-0x6B23 # <CJK>
-0x6B24 # <CJK>
-0x6B27 # <CJK>
-0x6B32 # <CJK>
-0x6B37 # <CJK>
-0x6B39 # <CJK>
-0x6B3A # <CJK>
-0x6B3E # <CJK>
-0x6B43 # <CJK>
-0x6B46 # <CJK>
-0x6B47 # <CJK>
-0x6B49 # <CJK>
-0x6B4C # <CJK>
-0x6B59 # <CJK>
-0x6B62 # <CJK>
-0x6B63 # <CJK>
-0x6B64 # <CJK>
-0x6B65 # <CJK>
-0x6B66 # <CJK>
-0x6B67 # <CJK>
-0x6B6A # <CJK>
-0x6B79 # <CJK>
-0x6B7B # <CJK>
-0x6B7C # <CJK>
-0x6B81 # <CJK>
-0x6B82 # <CJK>
-0x6B83 # <CJK>
-0x6B84 # <CJK>
-0x6B86 # <CJK>
-0x6B87 # <CJK>
-0x6B89 # <CJK>
-0x6B8A # <CJK>
-0x6B8B # <CJK>
-0x6B8D # <CJK>
-0x6B92 # <CJK>
-0x6B93 # <CJK>
-0x6B96 # <CJK>
-0x6B9A # <CJK>
-0x6B9B # <CJK>
-0x6BA1 # <CJK>
-0x6BAA # <CJK>
-0x6BB3 # <CJK>
-0x6BB4 # <CJK>
-0x6BB5 # <CJK>
-0x6BB7 # <CJK>
-0x6BBF # <CJK>
-0x6BC1 # <CJK>
-0x6BC2 # <CJK>
-0x6BC5 # <CJK>
-0x6BCB # <CJK>
-0x6BCD # <CJK>
-0x6BCF # <CJK>
-0x6BD2 # <CJK>
-0x6BD3 # <CJK>
-0x6BD4 # <CJK>
-0x6BD5 # <CJK>
-0x6BD6 # <CJK>
-0x6BD7 # <CJK>
-0x6BD9 # <CJK>
-0x6BDB # <CJK>
-0x6BE1 # <CJK>
-0x6BEA # <CJK>
-0x6BEB # <CJK>
-0x6BEF # <CJK>
-0x6BF3 # <CJK>
-0x6BF5 # <CJK>
-0x6BF9 # <CJK>
-0x6BFD # <CJK>
-0x6C05 # <CJK>
-0x6C06 # <CJK>
-0x6C07 # <CJK>
-0x6C0D # <CJK>
-0x6C0F # <CJK>
-0x6C10 # <CJK>
-0x6C11 # <CJK>
-0x6C13 # <CJK>
-0x6C14 # <CJK>
-0x6C15 # <CJK>
-0x6C16 # <CJK>
-0x6C18 # <CJK>
-0x6C19 # <CJK>
-0x6C1A # <CJK>
-0x6C1B # <CJK>
-0x6C1F # <CJK>
-0x6C21 # <CJK>
-0x6C22 # <CJK>
-0x6C24 # <CJK>
-0x6C26 # <CJK>
-0x6C27 # <CJK>
-0x6C28 # <CJK>
-0x6C29 # <CJK>
-0x6C2A # <CJK>
-0x6C2E # <CJK>
-0x6C2F # <CJK>
-0x6C30 # <CJK>
-0x6C32 # <CJK>
-0x6C34 # <CJK>
-0x6C35 # <CJK>
-0x6C38 # <CJK>
-0x6C3D # <CJK>
-0x6C40 # <CJK>
-0x6C41 # <CJK>
-0x6C42 # <CJK>
-0x6C46 # <CJK>
-0x6C47 # <CJK>
-0x6C49 # <CJK>
-0x6C4A # <CJK>
-0x6C50 # <CJK>
-0x6C54 # <CJK>
-0x6C55 # <CJK>
-0x6C57 # <CJK>
-0x6C5B # <CJK>
-0x6C5C # <CJK>
-0x6C5D # <CJK>
-0x6C5E # <CJK>
-0x6C5F # <CJK>
-0x6C60 # <CJK>
-0x6C61 # <CJK>
-0x6C64 # <CJK>
-0x6C68 # <CJK>
-0x6C69 # <CJK>
-0x6C6A # <CJK>
-0x6C70 # <CJK>
-0x6C72 # <CJK>
-0x6C74 # <CJK>
-0x6C76 # <CJK>
-0x6C79 # <CJK>
-0x6C7D # <CJK>
-0x6C7E # <CJK>
-0x6C81 # <CJK>
-0x6C82 # <CJK>
-0x6C83 # <CJK>
-0x6C85 # <CJK>
-0x6C86 # <CJK>
-0x6C88 # <CJK>
-0x6C89 # <CJK>
-0x6C8C # <CJK>
-0x6C8F # <CJK>
-0x6C90 # <CJK>
-0x6C93 # <CJK>
-0x6C94 # <CJK>
-0x6C99 # <CJK>
-0x6C9B # <CJK>
-0x6C9F # <CJK>
-0x6CA1 # <CJK>
-0x6CA3 # <CJK>
-0x6CA4 # <CJK>
-0x6CA5 # <CJK>
-0x6CA6 # <CJK>
-0x6CA7 # <CJK>
-0x6CA9 # <CJK>
-0x6CAA # <CJK>
-0x6CAB # <CJK>
-0x6CAD # <CJK>
-0x6CAE # <CJK>
-0x6CB1 # <CJK>
-0x6CB2 # <CJK>
-0x6CB3 # <CJK>
-0x6CB8 # <CJK>
-0x6CB9 # <CJK>
-0x6CBB # <CJK>
-0x6CBC # <CJK>
-0x6CBD # <CJK>
-0x6CBE # <CJK>
-0x6CBF # <CJK>
-0x6CC4 # <CJK>
-0x6CC5 # <CJK>
-0x6CC9 # <CJK>
-0x6CCA # <CJK>
-0x6CCC # <CJK>
-0x6CD0 # <CJK>
-0x6CD3 # <CJK>
-0x6CD4 # <CJK>
-0x6CD5 # <CJK>
-0x6CD6 # <CJK>
-0x6CD7 # <CJK>
-0x6CDB # <CJK>
-0x6CDE # <CJK>
-0x6CE0 # <CJK>
-0x6CE1 # <CJK>
-0x6CE2 # <CJK>
-0x6CE3 # <CJK>
-0x6CE5 # <CJK>
-0x6CE8 # <CJK>
-0x6CEA # <CJK>
-0x6CEB # <CJK>
-0x6CEE # <CJK>
-0x6CEF # <CJK>
-0x6CF0 # <CJK>
-0x6CF1 # <CJK>
-0x6CF3 # <CJK>
-0x6CF5 # <CJK>
-0x6CF6 # <CJK>
-0x6CF7 # <CJK>
-0x6CF8 # <CJK>
-0x6CFA # <CJK>
-0x6CFB # <CJK>
-0x6CFC # <CJK>
-0x6CFD # <CJK>
-0x6CFE # <CJK>
-0x6D01 # <CJK>
-0x6D04 # <CJK>
-0x6D07 # <CJK>
-0x6D0B # <CJK>
-0x6D0C # <CJK>
-0x6D0E # <CJK>
-0x6D12 # <CJK>
-0x6D17 # <CJK>
-0x6D19 # <CJK>
-0x6D1A # <CJK>
-0x6D1B # <CJK>
-0x6D1E # <CJK>
-0x6D25 # <CJK>
-0x6D27 # <CJK>
-0x6D2A # <CJK>
-0x6D2B # <CJK>
-0x6D2E # <CJK>
-0x6D31 # <CJK>
-0x6D32 # <CJK>
-0x6D33 # <CJK>
-0x6D35 # <CJK>
-0x6D39 # <CJK>
-0x6D3B # <CJK>
-0x6D3C # <CJK>
-0x6D3D # <CJK>
-0x6D3E # <CJK>
-0x6D41 # <CJK>
-0x6D43 # <CJK>
-0x6D45 # <CJK>
-0x6D46 # <CJK>
-0x6D47 # <CJK>
-0x6D48 # <CJK>
-0x6D4A # <CJK>
-0x6D4B # <CJK>
-0x6D4D # <CJK>
-0x6D4E # <CJK>
-0x6D4F # <CJK>
-0x6D51 # <CJK>
-0x6D52 # <CJK>
-0x6D53 # <CJK>
-0x6D54 # <CJK>
-0x6D59 # <CJK>
-0x6D5A # <CJK>
-0x6D5C # <CJK>
-0x6D5E # <CJK>
-0x6D60 # <CJK>
-0x6D63 # <CJK>
-0x6D66 # <CJK>
-0x6D69 # <CJK>
-0x6D6A # <CJK>
-0x6D6E # <CJK>
-0x6D6F # <CJK>
-0x6D74 # <CJK>
-0x6D77 # <CJK>
-0x6D78 # <CJK>
-0x6D7C # <CJK>
-0x6D82 # <CJK>
-0x6D85 # <CJK>
-0x6D88 # <CJK>
-0x6D89 # <CJK>
-0x6D8C # <CJK>
-0x6D8E # <CJK>
-0x6D91 # <CJK>
-0x6D93 # <CJK>
-0x6D94 # <CJK>
-0x6D95 # <CJK>
-0x6D9B # <CJK>
-0x6D9D # <CJK>
-0x6D9E # <CJK>
-0x6D9F # <CJK>
-0x6DA0 # <CJK>
-0x6DA1 # <CJK>
-0x6DA3 # <CJK>
-0x6DA4 # <CJK>
-0x6DA6 # <CJK>
-0x6DA7 # <CJK>
-0x6DA8 # <CJK>
-0x6DA9 # <CJK>
-0x6DAA # <CJK>
-0x6DAB # <CJK>
-0x6DAE # <CJK>
-0x6DAF # <CJK>
-0x6DB2 # <CJK>
-0x6DB5 # <CJK>
-0x6DB8 # <CJK>
-0x6DBF # <CJK>
-0x6DC0 # <CJK>
-0x6DC4 # <CJK>
-0x6DC5 # <CJK>
-0x6DC6 # <CJK>
-0x6DC7 # <CJK>
-0x6DCB # <CJK>
-0x6DCC # <CJK>
-0x6DD1 # <CJK>
-0x6DD6 # <CJK>
-0x6DD8 # <CJK>
-0x6DD9 # <CJK>
-0x6DDD # <CJK>
-0x6DDE # <CJK>
-0x6DE0 # <CJK>
-0x6DE1 # <CJK>
-0x6DE4 # <CJK>
-0x6DE6 # <CJK>
-0x6DEB # <CJK>
-0x6DEC # <CJK>
-0x6DEE # <CJK>
-0x6DF1 # <CJK>
-0x6DF3 # <CJK>
-0x6DF7 # <CJK>
-0x6DF9 # <CJK>
-0x6DFB # <CJK>
-0x6DFC # <CJK>
-0x6E05 # <CJK>
-0x6E0A # <CJK>
-0x6E0C # <CJK>
-0x6E0D # <CJK>
-0x6E0E # <CJK>
-0x6E10 # <CJK>
-0x6E11 # <CJK>
-0x6E14 # <CJK>
-0x6E16 # <CJK>
-0x6E17 # <CJK>
-0x6E1A # <CJK>
-0x6E1D # <CJK>
-0x6E20 # <CJK>
-0x6E21 # <CJK>
-0x6E23 # <CJK>
-0x6E24 # <CJK>
-0x6E25 # <CJK>
-0x6E29 # <CJK>
-0x6E2B # <CJK>
-0x6E2D # <CJK>
-0x6E2F # <CJK>
-0x6E32 # <CJK>
-0x6E34 # <CJK>
-0x6E38 # <CJK>
-0x6E3A # <CJK>
-0x6E43 # <CJK>
-0x6E44 # <CJK>
-0x6E4D # <CJK>
-0x6E4E # <CJK>
-0x6E53 # <CJK>
-0x6E54 # <CJK>
-0x6E56 # <CJK>
-0x6E58 # <CJK>
-0x6E5B # <CJK>
-0x6E5F # <CJK>
-0x6E6B # <CJK>
-0x6E6E # <CJK>
-0x6E7E # <CJK>
-0x6E7F # <CJK>
-0x6E83 # <CJK>
-0x6E85 # <CJK>
-0x6E86 # <CJK>
-0x6E89 # <CJK>
-0x6E8F # <CJK>
-0x6E90 # <CJK>
-0x6E98 # <CJK>
-0x6E9C # <CJK>
-0x6E9F # <CJK>
-0x6EA2 # <CJK>
-0x6EA5 # <CJK>
-0x6EA7 # <CJK>
-0x6EAA # <CJK>
-0x6EAF # <CJK>
-0x6EB1 # <CJK>
-0x6EB2 # <CJK>
-0x6EB4 # <CJK>
-0x6EB6 # <CJK>
-0x6EB7 # <CJK>
-0x6EBA # <CJK>
-0x6EBB # <CJK>
-0x6EBD # <CJK>
-0x6EC1 # <CJK>
-0x6EC2 # <CJK>
-0x6EC7 # <CJK>
-0x6ECB # <CJK>
-0x6ECF # <CJK>
-0x6ED1 # <CJK>
-0x6ED3 # <CJK>
-0x6ED4 # <CJK>
-0x6ED5 # <CJK>
-0x6ED7 # <CJK>
-0x6EDA # <CJK>
-0x6EDE # <CJK>
-0x6EDF # <CJK>
-0x6EE0 # <CJK>
-0x6EE1 # <CJK>
-0x6EE2 # <CJK>
-0x6EE4 # <CJK>
-0x6EE5 # <CJK>
-0x6EE6 # <CJK>
-0x6EE8 # <CJK>
-0x6EE9 # <CJK>
-0x6EF4 # <CJK>
-0x6EF9 # <CJK>
-0x6F02 # <CJK>
-0x6F06 # <CJK>
-0x6F09 # <CJK>
-0x6F0F # <CJK>
-0x6F13 # <CJK>
-0x6F14 # <CJK>
-0x6F15 # <CJK>
-0x6F20 # <CJK>
-0x6F24 # <CJK>
-0x6F29 # <CJK>
-0x6F2A # <CJK>
-0x6F2B # <CJK>
-0x6F2D # <CJK>
-0x6F2F # <CJK>
-0x6F31 # <CJK>
-0x6F33 # <CJK>
-0x6F36 # <CJK>
-0x6F3E # <CJK>
-0x6F46 # <CJK>
-0x6F47 # <CJK>
-0x6F4B # <CJK>
-0x6F4D # <CJK>
-0x6F58 # <CJK>
-0x6F5C # <CJK>
-0x6F5E # <CJK>
-0x6F62 # <CJK>
-0x6F66 # <CJK>
-0x6F6D # <CJK>
-0x6F6E # <CJK>
-0x6F72 # <CJK>
-0x6F74 # <CJK>
-0x6F78 # <CJK>
-0x6F7A # <CJK>
-0x6F7C # <CJK>
-0x6F84 # <CJK>
-0x6F88 # <CJK>
-0x6F89 # <CJK>
-0x6F8C # <CJK>
-0x6F8D # <CJK>
-0x6F8E # <CJK>
-0x6F9C # <CJK>
-0x6FA1 # <CJK>
-0x6FA7 # <CJK>
-0x6FB3 # <CJK>
-0x6FB6 # <CJK>
-0x6FB9 # <CJK>
-0x6FC0 # <CJK>
-0x6FC2 # <CJK>
-0x6FC9 # <CJK>
-0x6FD1 # <CJK>
-0x6FD2 # <CJK>
-0x6FDE # <CJK>
-0x6FE0 # <CJK>
-0x6FE1 # <CJK>
-0x6FEE # <CJK>
-0x6FEF # <CJK>
-0x7011 # <CJK>
-0x701A # <CJK>
-0x701B # <CJK>
-0x7023 # <CJK>
-0x7035 # <CJK>
-0x7039 # <CJK>
-0x704C # <CJK>
-0x704F # <CJK>
-0x705E # <CJK>
-0x706B # <CJK>
-0x706C # <CJK>
-0x706D # <CJK>
-0x706F # <CJK>
-0x7070 # <CJK>
-0x7075 # <CJK>
-0x7076 # <CJK>
-0x7078 # <CJK>
-0x707C # <CJK>
-0x707E # <CJK>
-0x707F # <CJK>
-0x7080 # <CJK>
-0x7085 # <CJK>
-0x7089 # <CJK>
-0x708A # <CJK>
-0x708E # <CJK>
-0x7092 # <CJK>
-0x7094 # <CJK>
-0x7095 # <CJK>
-0x7096 # <CJK>
-0x7099 # <CJK>
-0x709C # <CJK>
-0x709D # <CJK>
-0x70AB # <CJK>
-0x70AC # <CJK>
-0x70AD # <CJK>
-0x70AE # <CJK>
-0x70AF # <CJK>
-0x70B1 # <CJK>
-0x70B3 # <CJK>
-0x70B7 # <CJK>
-0x70B8 # <CJK>
-0x70B9 # <CJK>
-0x70BB # <CJK>
-0x70BC # <CJK>
-0x70BD # <CJK>
-0x70C0 # <CJK>
-0x70C1 # <CJK>
-0x70C2 # <CJK>
-0x70C3 # <CJK>
-0x70C8 # <CJK>
-0x70CA # <CJK>
-0x70D8 # <CJK>
-0x70D9 # <CJK>
-0x70DB # <CJK>
-0x70DF # <CJK>
-0x70E4 # <CJK>
-0x70E6 # <CJK>
-0x70E7 # <CJK>
-0x70E8 # <CJK>
-0x70E9 # <CJK>
-0x70EB # <CJK>
-0x70EC # <CJK>
-0x70ED # <CJK>
-0x70EF # <CJK>
-0x70F7 # <CJK>
-0x70F9 # <CJK>
-0x70FD # <CJK>
-0x7109 # <CJK>
-0x710A # <CJK>
-0x7110 # <CJK>
-0x7113 # <CJK>
-0x7115 # <CJK>
-0x7116 # <CJK>
-0x7118 # <CJK>
-0x7119 # <CJK>
-0x711A # <CJK>
-0x7126 # <CJK>
-0x712F # <CJK>
-0x7130 # <CJK>
-0x7131 # <CJK>
-0x7136 # <CJK>
-0x7145 # <CJK>
-0x714A # <CJK>
-0x714C # <CJK>
-0x714E # <CJK>
-0x715C # <CJK>
-0x715E # <CJK>
-0x7164 # <CJK>
-0x7166 # <CJK>
-0x7167 # <CJK>
-0x7168 # <CJK>
-0x716E # <CJK>
-0x7172 # <CJK>
-0x7173 # <CJK>
-0x7178 # <CJK>
-0x717A # <CJK>
-0x717D # <CJK>
-0x7184 # <CJK>
-0x718A # <CJK>
-0x718F # <CJK>
-0x7194 # <CJK>
-0x7198 # <CJK>
-0x7199 # <CJK>
-0x719F # <CJK>
-0x71A0 # <CJK>
-0x71A8 # <CJK>
-0x71AC # <CJK>
-0x71B3 # <CJK>
-0x71B5 # <CJK>
-0x71B9 # <CJK>
-0x71C3 # <CJK>
-0x71CE # <CJK>
-0x71D4 # <CJK>
-0x71D5 # <CJK>
-0x71E0 # <CJK>
-0x71E5 # <CJK>
-0x71E7 # <CJK>
-0x71EE # <CJK>
-0x71F9 # <CJK>
-0x7206 # <CJK>
-0x721D # <CJK>
-0x7228 # <CJK>
-0x722A # <CJK>
-0x722C # <CJK>
-0x7230 # <CJK>
-0x7231 # <CJK>
-0x7235 # <CJK>
-0x7236 # <CJK>
-0x7237 # <CJK>
-0x7238 # <CJK>
-0x7239 # <CJK>
-0x723B # <CJK>
-0x723D # <CJK>
-0x723F # <CJK>
-0x7247 # <CJK>
-0x7248 # <CJK>
-0x724C # <CJK>
-0x724D # <CJK>
-0x7252 # <CJK>
-0x7256 # <CJK>
-0x7259 # <CJK>
-0x725B # <CJK>
-0x725D # <CJK>
-0x725F # <CJK>
-0x7261 # <CJK>
-0x7262 # <CJK>
-0x7266 # <CJK>
-0x7267 # <CJK>
-0x7269 # <CJK>
-0x726E # <CJK>
-0x726F # <CJK>
-0x7272 # <CJK>
-0x7275 # <CJK>
-0x7279 # <CJK>
-0x727A # <CJK>
-0x727E # <CJK>
-0x727F # <CJK>
-0x7280 # <CJK>
-0x7281 # <CJK>
-0x7284 # <CJK>
-0x728A # <CJK>
-0x728B # <CJK>
-0x728D # <CJK>
-0x728F # <CJK>
-0x7292 # <CJK>
-0x729F # <CJK>
-0x72AC # <CJK>
-0x72AD # <CJK>
-0x72AF # <CJK>
-0x72B0 # <CJK>
-0x72B4 # <CJK>
-0x72B6 # <CJK>
-0x72B7 # <CJK>
-0x72B8 # <CJK>
-0x72B9 # <CJK>
-0x72C1 # <CJK>
-0x72C2 # <CJK>
-0x72C3 # <CJK>
-0x72C4 # <CJK>
-0x72C8 # <CJK>
-0x72CD # <CJK>
-0x72CE # <CJK>
-0x72D0 # <CJK>
-0x72D2 # <CJK>
-0x72D7 # <CJK>
-0x72D9 # <CJK>
-0x72DE # <CJK>
-0x72E0 # <CJK>
-0x72E1 # <CJK>
-0x72E8 # <CJK>
-0x72E9 # <CJK>
-0x72EC # <CJK>
-0x72ED # <CJK>
-0x72EE # <CJK>
-0x72EF # <CJK>
-0x72F0 # <CJK>
-0x72F1 # <CJK>
-0x72F2 # <CJK>
-0x72F3 # <CJK>
-0x72F4 # <CJK>
-0x72F7 # <CJK>
-0x72F8 # <CJK>
-0x72FA # <CJK>
-0x72FB # <CJK>
-0x72FC # <CJK>
-0x7301 # <CJK>
-0x7303 # <CJK>
-0x730A # <CJK>
-0x730E # <CJK>
-0x7313 # <CJK>
-0x7315 # <CJK>
-0x7316 # <CJK>
-0x7317 # <CJK>
-0x731B # <CJK>
-0x731C # <CJK>
-0x731D # <CJK>
-0x731E # <CJK>
-0x7321 # <CJK>
-0x7322 # <CJK>
-0x7325 # <CJK>
-0x7329 # <CJK>
-0x732A # <CJK>
-0x732B # <CJK>
-0x732C # <CJK>
-0x732E # <CJK>
-0x7331 # <CJK>
-0x7334 # <CJK>
-0x7337 # <CJK>
-0x7338 # <CJK>
-0x7339 # <CJK>
-0x733E # <CJK>
-0x733F # <CJK>
-0x734D # <CJK>
-0x7350 # <CJK>
-0x7352 # <CJK>
-0x7357 # <CJK>
-0x7360 # <CJK>
-0x736C # <CJK>
-0x736D # <CJK>
-0x736F # <CJK>
-0x737E # <CJK>
-0x7384 # <CJK>
-0x7387 # <CJK>
-0x7389 # <CJK>
-0x738B # <CJK>
-0x738E # <CJK>
-0x7391 # <CJK>
-0x7396 # <CJK>
-0x739B # <CJK>
-0x739F # <CJK>
-0x73A2 # <CJK>
-0x73A9 # <CJK>
-0x73AB # <CJK>
-0x73AE # <CJK>
-0x73AF # <CJK>
-0x73B0 # <CJK>
-0x73B2 # <CJK>
-0x73B3 # <CJK>
-0x73B7 # <CJK>
-0x73BA # <CJK>
-0x73BB # <CJK>
-0x73C0 # <CJK>
-0x73C2 # <CJK>
-0x73C8 # <CJK>
-0x73C9 # <CJK>
-0x73CA # <CJK>
-0x73CD # <CJK>
-0x73CF # <CJK>
-0x73D0 # <CJK>
-0x73D1 # <CJK>
-0x73D9 # <CJK>
-0x73DE # <CJK>
-0x73E0 # <CJK>
-0x73E5 # <CJK>
-0x73E7 # <CJK>
-0x73E9 # <CJK>
-0x73ED # <CJK>
-0x73F2 # <CJK>
-0x7403 # <CJK>
-0x7405 # <CJK>
-0x7406 # <CJK>
-0x7409 # <CJK>
-0x740A # <CJK>
-0x740F # <CJK>
-0x7410 # <CJK>
-0x741A # <CJK>
-0x741B # <CJK>
-0x7422 # <CJK>
-0x7425 # <CJK>
-0x7426 # <CJK>
-0x7428 # <CJK>
-0x742A # <CJK>
-0x742C # <CJK>
-0x742E # <CJK>
-0x7430 # <CJK>
-0x7433 # <CJK>
-0x7434 # <CJK>
-0x7435 # <CJK>
-0x7436 # <CJK>
-0x743C # <CJK>
-0x7441 # <CJK>
-0x7455 # <CJK>
-0x7457 # <CJK>
-0x7459 # <CJK>
-0x745A # <CJK>
-0x745B # <CJK>
-0x745C # <CJK>
-0x745E # <CJK>
-0x745F # <CJK>
-0x746D # <CJK>
-0x7470 # <CJK>
-0x7476 # <CJK>
-0x7477 # <CJK>
-0x747E # <CJK>
-0x7480 # <CJK>
-0x7481 # <CJK>
-0x7483 # <CJK>
-0x7487 # <CJK>
-0x748B # <CJK>
-0x748E # <CJK>
-0x7490 # <CJK>
-0x749C # <CJK>
-0x749E # <CJK>
-0x74A7 # <CJK>
-0x74A8 # <CJK>
-0x74A9 # <CJK>
-0x74BA # <CJK>
-0x74D2 # <CJK>
-0x74DC # <CJK>
-0x74DE # <CJK>
-0x74E0 # <CJK>
-0x74E2 # <CJK>
-0x74E3 # <CJK>
-0x74E4 # <CJK>
-0x74E6 # <CJK>
-0x74EE # <CJK>
-0x74EF # <CJK>
-0x74F4 # <CJK>
-0x74F6 # <CJK>
-0x74F7 # <CJK>
-0x74FF # <CJK>
-0x7504 # <CJK>
-0x750D # <CJK>
-0x750F # <CJK>
-0x7511 # <CJK>
-0x7513 # <CJK>
-0x7518 # <CJK>
-0x7519 # <CJK>
-0x751A # <CJK>
-0x751C # <CJK>
-0x751F # <CJK>
-0x7525 # <CJK>
-0x7528 # <CJK>
-0x7529 # <CJK>
-0x752B # <CJK>
-0x752C # <CJK>
-0x752D # <CJK>
-0x752F # <CJK>
-0x7530 # <CJK>
-0x7531 # <CJK>
-0x7532 # <CJK>
-0x7533 # <CJK>
-0x7535 # <CJK>
-0x7537 # <CJK>
-0x7538 # <CJK>
-0x753A # <CJK>
-0x753B # <CJK>
-0x753E # <CJK>
-0x7540 # <CJK>
-0x7545 # <CJK>
-0x7548 # <CJK>
-0x754B # <CJK>
-0x754C # <CJK>
-0x754E # <CJK>
-0x754F # <CJK>
-0x7554 # <CJK>
-0x7559 # <CJK>
-0x755A # <CJK>
-0x755B # <CJK>
-0x755C # <CJK>
-0x7565 # <CJK>
-0x7566 # <CJK>
-0x756A # <CJK>
-0x7572 # <CJK>
-0x7574 # <CJK>
-0x7578 # <CJK>
-0x7579 # <CJK>
-0x757F # <CJK>
-0x7583 # <CJK>
-0x7586 # <CJK>
-0x758B # <CJK>
-0x758F # <CJK>
-0x7591 # <CJK>
-0x7592 # <CJK>
-0x7594 # <CJK>
-0x7596 # <CJK>
-0x7597 # <CJK>
-0x7599 # <CJK>
-0x759A # <CJK>
-0x759D # <CJK>
-0x759F # <CJK>
-0x75A0 # <CJK>
-0x75A1 # <CJK>
-0x75A3 # <CJK>
-0x75A4 # <CJK>
-0x75A5 # <CJK>
-0x75AB # <CJK>
-0x75AC # <CJK>
-0x75AE # <CJK>
-0x75AF # <CJK>
-0x75B0 # <CJK>
-0x75B1 # <CJK>
-0x75B2 # <CJK>
-0x75B3 # <CJK>
-0x75B4 # <CJK>
-0x75B5 # <CJK>
-0x75B8 # <CJK>
-0x75B9 # <CJK>
-0x75BC # <CJK>
-0x75BD # <CJK>
-0x75BE # <CJK>
-0x75C2 # <CJK>
-0x75C3 # <CJK>
-0x75C4 # <CJK>
-0x75C5 # <CJK>
-0x75C7 # <CJK>
-0x75C8 # <CJK>
-0x75C9 # <CJK>
-0x75CA # <CJK>
-0x75CD # <CJK>
-0x75D2 # <CJK>
-0x75D4 # <CJK>
-0x75D5 # <CJK>
-0x75D6 # <CJK>
-0x75D8 # <CJK>
-0x75DB # <CJK>
-0x75DE # <CJK>
-0x75E2 # <CJK>
-0x75E3 # <CJK>
-0x75E4 # <CJK>
-0x75E6 # <CJK>
-0x75E7 # <CJK>
-0x75E8 # <CJK>
-0x75EA # <CJK>
-0x75EB # <CJK>
-0x75F0 # <CJK>
-0x75F1 # <CJK>
-0x75F4 # <CJK>
-0x75F9 # <CJK>
-0x75FC # <CJK>
-0x75FF # <CJK>
-0x7600 # <CJK>
-0x7601 # <CJK>
-0x7603 # <CJK>
-0x7605 # <CJK>
-0x760A # <CJK>
-0x760C # <CJK>
-0x7610 # <CJK>
-0x7615 # <CJK>
-0x7617 # <CJK>
-0x7618 # <CJK>
-0x7619 # <CJK>
-0x761B # <CJK>
-0x761F # <CJK>
-0x7620 # <CJK>
-0x7622 # <CJK>
-0x7624 # <CJK>
-0x7625 # <CJK>
-0x7626 # <CJK>
-0x7629 # <CJK>
-0x762A # <CJK>
-0x762B # <CJK>
-0x762D # <CJK>
-0x7630 # <CJK>
-0x7633 # <CJK>
-0x7634 # <CJK>
-0x7635 # <CJK>
-0x7638 # <CJK>
-0x763C # <CJK>
-0x763E # <CJK>
-0x763F # <CJK>
-0x7640 # <CJK>
-0x7643 # <CJK>
-0x764C # <CJK>
-0x764D # <CJK>
-0x7654 # <CJK>
-0x7656 # <CJK>
-0x765C # <CJK>
-0x765E # <CJK>
-0x7663 # <CJK>
-0x766B # <CJK>
-0x766F # <CJK>
-0x7678 # <CJK>
-0x767B # <CJK>
-0x767D # <CJK>
-0x767E # <CJK>
-0x7682 # <CJK>
-0x7684 # <CJK>
-0x7686 # <CJK>
-0x7687 # <CJK>
-0x7688 # <CJK>
-0x768B # <CJK>
-0x768E # <CJK>
-0x7691 # <CJK>
-0x7693 # <CJK>
-0x7696 # <CJK>
-0x7699 # <CJK>
-0x76A4 # <CJK>
-0x76AE # <CJK>
-0x76B1 # <CJK>
-0x76B2 # <CJK>
-0x76B4 # <CJK>
-0x76BF # <CJK>
-0x76C2 # <CJK>
-0x76C5 # <CJK>
-0x76C6 # <CJK>
-0x76C8 # <CJK>
-0x76CA # <CJK>
-0x76CD # <CJK>
-0x76CE # <CJK>
-0x76CF # <CJK>
-0x76D0 # <CJK>
-0x76D1 # <CJK>
-0x76D2 # <CJK>
-0x76D4 # <CJK>
-0x76D6 # <CJK>
-0x76D7 # <CJK>
-0x76D8 # <CJK>
-0x76DB # <CJK>
-0x76DF # <CJK>
-0x76E5 # <CJK>
-0x76EE # <CJK>
-0x76EF # <CJK>
-0x76F1 # <CJK>
-0x76F2 # <CJK>
-0x76F4 # <CJK>
-0x76F8 # <CJK>
-0x76F9 # <CJK>
-0x76FC # <CJK>
-0x76FE # <CJK>
-0x7701 # <CJK>
-0x7704 # <CJK>
-0x7707 # <CJK>
-0x7708 # <CJK>
-0x7709 # <CJK>
-0x770B # <CJK>
-0x770D # <CJK>
-0x7719 # <CJK>
-0x771A # <CJK>
-0x771F # <CJK>
-0x7720 # <CJK>
-0x7722 # <CJK>
-0x7726 # <CJK>
-0x7728 # <CJK>
-0x7729 # <CJK>
-0x772D # <CJK>
-0x772F # <CJK>
-0x7735 # <CJK>
-0x7736 # <CJK>
-0x7737 # <CJK>
-0x7738 # <CJK>
-0x773A # <CJK>
-0x773C # <CJK>
-0x7740 # <CJK>
-0x7741 # <CJK>
-0x7743 # <CJK>
-0x7747 # <CJK>
-0x7750 # <CJK>
-0x7751 # <CJK>
-0x775A # <CJK>
-0x775B # <CJK>
-0x7761 # <CJK>
-0x7762 # <CJK>
-0x7763 # <CJK>
-0x7765 # <CJK>
-0x7766 # <CJK>
-0x7768 # <CJK>
-0x776B # <CJK>
-0x776C # <CJK>
-0x7779 # <CJK>
-0x777D # <CJK>
-0x777E # <CJK>
-0x777F # <CJK>
-0x7780 # <CJK>
-0x7784 # <CJK>
-0x7785 # <CJK>
-0x778C # <CJK>
-0x778D # <CJK>
-0x778E # <CJK>
-0x7791 # <CJK>
-0x7792 # <CJK>
-0x779F # <CJK>
-0x77A0 # <CJK>
-0x77A2 # <CJK>
-0x77A5 # <CJK>
-0x77A7 # <CJK>
-0x77A9 # <CJK>
-0x77AA # <CJK>
-0x77AC # <CJK>
-0x77B0 # <CJK>
-0x77B3 # <CJK>
-0x77B5 # <CJK>
-0x77BB # <CJK>
-0x77BD # <CJK>
-0x77BF # <CJK>
-0x77CD # <CJK>
-0x77D7 # <CJK>
-0x77DB # <CJK>
-0x77DC # <CJK>
-0x77E2 # <CJK>
-0x77E3 # <CJK>
-0x77E5 # <CJK>
-0x77E7 # <CJK>
-0x77E9 # <CJK>
-0x77EB # <CJK>
-0x77EC # <CJK>
-0x77ED # <CJK>
-0x77EE # <CJK>
-0x77F3 # <CJK>
-0x77F6 # <CJK>
-0x77F8 # <CJK>
-0x77FD # <CJK>
-0x77FE # <CJK>
-0x77FF # <CJK>
-0x7800 # <CJK>
-0x7801 # <CJK>
-0x7802 # <CJK>
-0x7809 # <CJK>
-0x780C # <CJK>
-0x780D # <CJK>
-0x7811 # <CJK>
-0x7812 # <CJK>
-0x7814 # <CJK>
-0x7816 # <CJK>
-0x7817 # <CJK>
-0x7818 # <CJK>
-0x781A # <CJK>
-0x781C # <CJK>
-0x781D # <CJK>
-0x781F # <CJK>
-0x7823 # <CJK>
-0x7825 # <CJK>
-0x7826 # <CJK>
-0x7827 # <CJK>
-0x7829 # <CJK>
-0x782C # <CJK>
-0x782D # <CJK>
-0x7830 # <CJK>
-0x7834 # <CJK>
-0x7837 # <CJK>
-0x7838 # <CJK>
-0x7839 # <CJK>
-0x783A # <CJK>
-0x783B # <CJK>
-0x783C # <CJK>
-0x783E # <CJK>
-0x7840 # <CJK>
-0x7845 # <CJK>
-0x7847 # <CJK>
-0x784C # <CJK>
-0x784E # <CJK>
-0x7850 # <CJK>
-0x7852 # <CJK>
-0x7855 # <CJK>
-0x7856 # <CJK>
-0x7857 # <CJK>
-0x785D # <CJK>
-0x786A # <CJK>
-0x786B # <CJK>
-0x786C # <CJK>
-0x786D # <CJK>
-0x786E # <CJK>
-0x7877 # <CJK>
-0x787C # <CJK>
-0x7887 # <CJK>
-0x7889 # <CJK>
-0x788C # <CJK>
-0x788D # <CJK>
-0x788E # <CJK>
-0x7891 # <CJK>
-0x7893 # <CJK>
-0x7897 # <CJK>
-0x7898 # <CJK>
-0x789A # <CJK>
-0x789B # <CJK>
-0x789C # <CJK>
-0x789F # <CJK>
-0x78A1 # <CJK>
-0x78A3 # <CJK>
-0x78A5 # <CJK>
-0x78A7 # <CJK>
-0x78B0 # <CJK>
-0x78B1 # <CJK>
-0x78B2 # <CJK>
-0x78B3 # <CJK>
-0x78B4 # <CJK>
-0x78B9 # <CJK>
-0x78BE # <CJK>
-0x78C1 # <CJK>
-0x78C5 # <CJK>
-0x78C9 # <CJK>
-0x78CA # <CJK>
-0x78CB # <CJK>
-0x78D0 # <CJK>
-0x78D4 # <CJK>
-0x78D5 # <CJK>
-0x78D9 # <CJK>
-0x78E8 # <CJK>
-0x78EC # <CJK>
-0x78F2 # <CJK>
-0x78F4 # <CJK>
-0x78F7 # <CJK>
-0x78FA # <CJK>
-0x7901 # <CJK>
-0x7905 # <CJK>
-0x7913 # <CJK>
-0x791E # <CJK>
-0x7924 # <CJK>
-0x7934 # <CJK>
-0x793A # <CJK>
-0x793B # <CJK>
-0x793C # <CJK>
-0x793E # <CJK>
-0x7940 # <CJK>
-0x7941 # <CJK>
-0x7946 # <CJK>
-0x7948 # <CJK>
-0x7949 # <CJK>
-0x7953 # <CJK>
-0x7956 # <CJK>
-0x7957 # <CJK>
-0x795A # <CJK>
-0x795B # <CJK>
-0x795C # <CJK>
-0x795D # <CJK>
-0x795E # <CJK>
-0x795F # <CJK>
-0x7960 # <CJK>
-0x7962 # <CJK>
-0x7965 # <CJK>
-0x7967 # <CJK>
-0x7968 # <CJK>
-0x796D # <CJK>
-0x796F # <CJK>
-0x7977 # <CJK>
-0x7978 # <CJK>
-0x797A # <CJK>
-0x7980 # <CJK>
-0x7981 # <CJK>
-0x7984 # <CJK>
-0x7985 # <CJK>
-0x798A # <CJK>
-0x798F # <CJK>
-0x799A # <CJK>
-0x79A7 # <CJK>
-0x79B3 # <CJK>
-0x79B9 # <CJK>
-0x79BA # <CJK>
-0x79BB # <CJK>
-0x79BD # <CJK>
-0x79BE # <CJK>
-0x79C0 # <CJK>
-0x79C1 # <CJK>
-0x79C3 # <CJK>
-0x79C6 # <CJK>
-0x79C9 # <CJK>
-0x79CB # <CJK>
-0x79CD # <CJK>
-0x79D1 # <CJK>
-0x79D2 # <CJK>
-0x79D5 # <CJK>
-0x79D8 # <CJK>
-0x79DF # <CJK>
-0x79E3 # <CJK>
-0x79E4 # <CJK>
-0x79E6 # <CJK>
-0x79E7 # <CJK>
-0x79E9 # <CJK>
-0x79EB # <CJK>
-0x79ED # <CJK>
-0x79EF # <CJK>
-0x79F0 # <CJK>
-0x79F8 # <CJK>
-0x79FB # <CJK>
-0x79FD # <CJK>
-0x7A00 # <CJK>
-0x7A02 # <CJK>
-0x7A03 # <CJK>
-0x7A06 # <CJK>
-0x7A0B # <CJK>
-0x7A0D # <CJK>
-0x7A0E # <CJK>
-0x7A14 # <CJK>
-0x7A17 # <CJK>
-0x7A1A # <CJK>
-0x7A1E # <CJK>
-0x7A20 # <CJK>
-0x7A23 # <CJK>
-0x7A33 # <CJK>
-0x7A37 # <CJK>
-0x7A39 # <CJK>
-0x7A3B # <CJK>
-0x7A3C # <CJK>
-0x7A3D # <CJK>
-0x7A3F # <CJK>
-0x7A46 # <CJK>
-0x7A51 # <CJK>
-0x7A57 # <CJK>
-0x7A70 # <CJK>
-0x7A74 # <CJK>
-0x7A76 # <CJK>
-0x7A77 # <CJK>
-0x7A78 # <CJK>
-0x7A79 # <CJK>
-0x7A7A # <CJK>
-0x7A7F # <CJK>
-0x7A80 # <CJK>
-0x7A81 # <CJK>
-0x7A83 # <CJK>
-0x7A84 # <CJK>
-0x7A86 # <CJK>
-0x7A88 # <CJK>
-0x7A8D # <CJK>
-0x7A91 # <CJK>
-0x7A92 # <CJK>
-0x7A95 # <CJK>
-0x7A96 # <CJK>
-0x7A97 # <CJK>
-0x7A98 # <CJK>
-0x7A9C # <CJK>
-0x7A9D # <CJK>
-0x7A9F # <CJK>
-0x7AA0 # <CJK>
-0x7AA5 # <CJK>
-0x7AA6 # <CJK>
-0x7AA8 # <CJK>
-0x7AAC # <CJK>
-0x7AAD # <CJK>
-0x7AB3 # <CJK>
-0x7ABF # <CJK>
-0x7ACB # <CJK>
-0x7AD6 # <CJK>
-0x7AD9 # <CJK>
-0x7ADE # <CJK>
-0x7ADF # <CJK>
-0x7AE0 # <CJK>
-0x7AE3 # <CJK>
-0x7AE5 # <CJK>
-0x7AE6 # <CJK>
-0x7AED # <CJK>
-0x7AEF # <CJK>
-0x7AF9 # <CJK>
-0x7AFA # <CJK>
-0x7AFD # <CJK>
-0x7AFF # <CJK>
-0x7B03 # <CJK>
-0x7B04 # <CJK>
-0x7B06 # <CJK>
-0x7B08 # <CJK>
-0x7B0A # <CJK>
-0x7B0B # <CJK>
-0x7B0F # <CJK>
-0x7B11 # <CJK>
-0x7B14 # <CJK>
-0x7B15 # <CJK>
-0x7B19 # <CJK>
-0x7B1B # <CJK>
-0x7B1E # <CJK>
-0x7B20 # <CJK>
-0x7B24 # <CJK>
-0x7B25 # <CJK>
-0x7B26 # <CJK>
-0x7B28 # <CJK>
-0x7B2A # <CJK>
-0x7B2B # <CJK>
-0x7B2C # <CJK>
-0x7B2E # <CJK>
-0x7B31 # <CJK>
-0x7B33 # <CJK>
-0x7B38 # <CJK>
-0x7B3A # <CJK>
-0x7B3C # <CJK>
-0x7B3E # <CJK>
-0x7B45 # <CJK>
-0x7B47 # <CJK>
-0x7B49 # <CJK>
-0x7B4B # <CJK>
-0x7B4C # <CJK>
-0x7B4F # <CJK>
-0x7B50 # <CJK>
-0x7B51 # <CJK>
-0x7B52 # <CJK>
-0x7B54 # <CJK>
-0x7B56 # <CJK>
-0x7B58 # <CJK>
-0x7B5A # <CJK>
-0x7B5B # <CJK>
-0x7B5D # <CJK>
-0x7B60 # <CJK>
-0x7B62 # <CJK>
-0x7B6E # <CJK>
-0x7B71 # <CJK>
-0x7B72 # <CJK>
-0x7B75 # <CJK>
-0x7B77 # <CJK>
-0x7B79 # <CJK>
-0x7B7B # <CJK>
-0x7B7E # <CJK>
-0x7B80 # <CJK>
-0x7B85 # <CJK>
-0x7B8D # <CJK>
-0x7B90 # <CJK>
-0x7B94 # <CJK>
-0x7B95 # <CJK>
-0x7B97 # <CJK>
-0x7B9C # <CJK>
-0x7B9D # <CJK>
-0x7BA1 # <CJK>
-0x7BA2 # <CJK>
-0x7BA6 # <CJK>
-0x7BA7 # <CJK>
-0x7BA8 # <CJK>
-0x7BA9 # <CJK>
-0x7BAA # <CJK>
-0x7BAB # <CJK>
-0x7BAC # <CJK>
-0x7BAD # <CJK>
-0x7BB1 # <CJK>
-0x7BB4 # <CJK>
-0x7BB8 # <CJK>
-0x7BC1 # <CJK>
-0x7BC6 # <CJK>
-0x7BC7 # <CJK>
-0x7BCC # <CJK>
-0x7BD1 # <CJK>
-0x7BD3 # <CJK>
-0x7BD9 # <CJK>
-0x7BDA # <CJK>
-0x7BDD # <CJK>
-0x7BE1 # <CJK>
-0x7BE5 # <CJK>
-0x7BE6 # <CJK>
-0x7BEA # <CJK>
-0x7BEE # <CJK>
-0x7BF1 # <CJK>
-0x7BF7 # <CJK>
-0x7BFC # <CJK>
-0x7BFE # <CJK>
-0x7C07 # <CJK>
-0x7C0B # <CJK>
-0x7C0C # <CJK>
-0x7C0F # <CJK>
-0x7C16 # <CJK>
-0x7C1F # <CJK>
-0x7C26 # <CJK>
-0x7C27 # <CJK>
-0x7C2A # <CJK>
-0x7C38 # <CJK>
-0x7C3F # <CJK>
-0x7C40 # <CJK>
-0x7C41 # <CJK>
-0x7C4D # <CJK>
-0x7C73 # <CJK>
-0x7C74 # <CJK>
-0x7C7B # <CJK>
-0x7C7C # <CJK>
-0x7C7D # <CJK>
-0x7C89 # <CJK>
-0x7C91 # <CJK>
-0x7C92 # <CJK>
-0x7C95 # <CJK>
-0x7C97 # <CJK>
-0x7C98 # <CJK>
-0x7C9C # <CJK>
-0x7C9D # <CJK>
-0x7C9E # <CJK>
-0x7C9F # <CJK>
-0x7CA2 # <CJK>
-0x7CA4 # <CJK>
-0x7CA5 # <CJK>
-0x7CAA # <CJK>
-0x7CAE # <CJK>
-0x7CB1 # <CJK>
-0x7CB2 # <CJK>
-0x7CB3 # <CJK>
-0x7CB9 # <CJK>
-0x7CBC # <CJK>
-0x7CBD # <CJK>
-0x7CBE # <CJK>
-0x7CC1 # <CJK>
-0x7CC5 # <CJK>
-0x7CC7 # <CJK>
-0x7CC8 # <CJK>
-0x7CCA # <CJK>
-0x7CCC # <CJK>
-0x7CCD # <CJK>
-0x7CD5 # <CJK>
-0x7CD6 # <CJK>
-0x7CD7 # <CJK>
-0x7CD9 # <CJK>
-0x7CDC # <CJK>
-0x7CDF # <CJK>
-0x7CE0 # <CJK>
-0x7CE8 # <CJK>
-0x7CEF # <CJK>
-0x7CF8 # <CJK>
-0x7CFB # <CJK>
-0x7D0A # <CJK>
-0x7D20 # <CJK>
-0x7D22 # <CJK>
-0x7D27 # <CJK>
-0x7D2B # <CJK>
-0x7D2F # <CJK>
-0x7D6E # <CJK>
-0x7D77 # <CJK>
-0x7DA6 # <CJK>
-0x7DAE # <CJK>
-0x7E3B # <CJK>
-0x7E41 # <CJK>
-0x7E47 # <CJK>
-0x7E82 # <CJK>
-0x7E9B # <CJK>
-0x7E9F # <CJK>
-0x7EA0 # <CJK>
-0x7EA1 # <CJK>
-0x7EA2 # <CJK>
-0x7EA3 # <CJK>
-0x7EA4 # <CJK>
-0x7EA5 # <CJK>
-0x7EA6 # <CJK>
-0x7EA7 # <CJK>
-0x7EA8 # <CJK>
-0x7EA9 # <CJK>
-0x7EAA # <CJK>
-0x7EAB # <CJK>
-0x7EAC # <CJK>
-0x7EAD # <CJK>
-0x7EAF # <CJK>
-0x7EB0 # <CJK>
-0x7EB1 # <CJK>
-0x7EB2 # <CJK>
-0x7EB3 # <CJK>
-0x7EB5 # <CJK>
-0x7EB6 # <CJK>
-0x7EB7 # <CJK>
-0x7EB8 # <CJK>
-0x7EB9 # <CJK>
-0x7EBA # <CJK>
-0x7EBD # <CJK>
-0x7EBE # <CJK>
-0x7EBF # <CJK>
-0x7EC0 # <CJK>
-0x7EC1 # <CJK>
-0x7EC2 # <CJK>
-0x7EC3 # <CJK>
-0x7EC4 # <CJK>
-0x7EC5 # <CJK>
-0x7EC6 # <CJK>
-0x7EC7 # <CJK>
-0x7EC8 # <CJK>
-0x7EC9 # <CJK>
-0x7ECA # <CJK>
-0x7ECB # <CJK>
-0x7ECC # <CJK>
-0x7ECD # <CJK>
-0x7ECE # <CJK>
-0x7ECF # <CJK>
-0x7ED0 # <CJK>
-0x7ED1 # <CJK>
-0x7ED2 # <CJK>
-0x7ED3 # <CJK>
-0x7ED4 # <CJK>
-0x7ED5 # <CJK>
-0x7ED7 # <CJK>
-0x7ED8 # <CJK>
-0x7ED9 # <CJK>
-0x7EDA # <CJK>
-0x7EDB # <CJK>
-0x7EDC # <CJK>
-0x7EDD # <CJK>
-0x7EDE # <CJK>
-0x7EDF # <CJK>
-0x7EE0 # <CJK>
-0x7EE1 # <CJK>
-0x7EE2 # <CJK>
-0x7EE3 # <CJK>
-0x7EE5 # <CJK>
-0x7EE6 # <CJK>
-0x7EE7 # <CJK>
-0x7EE8 # <CJK>
-0x7EE9 # <CJK>
-0x7EEA # <CJK>
-0x7EEB # <CJK>
-0x7EED # <CJK>
-0x7EEE # <CJK>
-0x7EEF # <CJK>
-0x7EF0 # <CJK>
-0x7EF1 # <CJK>
-0x7EF2 # <CJK>
-0x7EF3 # <CJK>
-0x7EF4 # <CJK>
-0x7EF5 # <CJK>
-0x7EF6 # <CJK>
-0x7EF7 # <CJK>
-0x7EF8 # <CJK>
-0x7EFA # <CJK>
-0x7EFB # <CJK>
-0x7EFC # <CJK>
-0x7EFD # <CJK>
-0x7EFE # <CJK>
-0x7EFF # <CJK>
-0x7F00 # <CJK>
-0x7F01 # <CJK>
-0x7F02 # <CJK>
-0x7F03 # <CJK>
-0x7F04 # <CJK>
-0x7F05 # <CJK>
-0x7F06 # <CJK>
-0x7F07 # <CJK>
-0x7F08 # <CJK>
-0x7F09 # <CJK>
-0x7F0B # <CJK>
-0x7F0C # <CJK>
-0x7F0D # <CJK>
-0x7F0E # <CJK>
-0x7F0F # <CJK>
-0x7F11 # <CJK>
-0x7F12 # <CJK>
-0x7F13 # <CJK>
-0x7F14 # <CJK>
-0x7F15 # <CJK>
-0x7F16 # <CJK>
-0x7F17 # <CJK>
-0x7F18 # <CJK>
-0x7F19 # <CJK>
-0x7F1A # <CJK>
-0x7F1B # <CJK>
-0x7F1C # <CJK>
-0x7F1D # <CJK>
-0x7F1F # <CJK>
-0x7F20 # <CJK>
-0x7F21 # <CJK>
-0x7F22 # <CJK>
-0x7F23 # <CJK>
-0x7F24 # <CJK>
-0x7F25 # <CJK>
-0x7F26 # <CJK>
-0x7F27 # <CJK>
-0x7F28 # <CJK>
-0x7F29 # <CJK>
-0x7F2A # <CJK>
-0x7F2B # <CJK>
-0x7F2C # <CJK>
-0x7F2D # <CJK>
-0x7F2E # <CJK>
-0x7F2F # <CJK>
-0x7F30 # <CJK>
-0x7F31 # <CJK>
-0x7F32 # <CJK>
-0x7F33 # <CJK>
-0x7F34 # <CJK>
-0x7F35 # <CJK>
-0x7F36 # <CJK>
-0x7F38 # <CJK>
-0x7F3A # <CJK>
-0x7F42 # <CJK>
-0x7F44 # <CJK>
-0x7F45 # <CJK>
-0x7F50 # <CJK>
-0x7F51 # <CJK>
-0x7F54 # <CJK>
-0x7F55 # <CJK>
-0x7F57 # <CJK>
-0x7F58 # <CJK>
-0x7F5A # <CJK>
-0x7F5F # <CJK>
-0x7F61 # <CJK>
-0x7F62 # <CJK>
-0x7F68 # <CJK>
-0x7F69 # <CJK>
-0x7F6A # <CJK>
-0x7F6E # <CJK>
-0x7F71 # <CJK>
-0x7F72 # <CJK>
-0x7F74 # <CJK>
-0x7F79 # <CJK>
-0x7F7E # <CJK>
-0x7F81 # <CJK>
-0x7F8A # <CJK>
-0x7F8C # <CJK>
-0x7F8E # <CJK>
-0x7F94 # <CJK>
-0x7F9A # <CJK>
-0x7F9D # <CJK>
-0x7F9E # <CJK>
-0x7F9F # <CJK>
-0x7FA1 # <CJK>
-0x7FA4 # <CJK>
-0x7FA7 # <CJK>
-0x7FAF # <CJK>
-0x7FB0 # <CJK>
-0x7FB2 # <CJK>
-0x7FB8 # <CJK>
-0x7FB9 # <CJK>
-0x7FBC # <CJK>
-0x7FBD # <CJK>
-0x7FBF # <CJK>
-0x7FC1 # <CJK>
-0x7FC5 # <CJK>
-0x7FCA # <CJK>
-0x7FCC # <CJK>
-0x7FCE # <CJK>
-0x7FD4 # <CJK>
-0x7FD5 # <CJK>
-0x7FD8 # <CJK>
-0x7FDF # <CJK>
-0x7FE0 # <CJK>
-0x7FE1 # <CJK>
-0x7FE5 # <CJK>
-0x7FE6 # <CJK>
-0x7FE9 # <CJK>
-0x7FEE # <CJK>
-0x7FF0 # <CJK>
-0x7FF1 # <CJK>
-0x7FF3 # <CJK>
-0x7FFB # <CJK>
-0x7FFC # <CJK>
-0x8000 # <CJK>
-0x8001 # <CJK>
-0x8003 # <CJK>
-0x8004 # <CJK>
-0x8005 # <CJK>
-0x8006 # <CJK>
-0x800B # <CJK>
-0x800C # <CJK>
-0x800D # <CJK>
-0x8010 # <CJK>
-0x8012 # <CJK>
-0x8014 # <CJK>
-0x8015 # <CJK>
-0x8016 # <CJK>
-0x8017 # <CJK>
-0x8018 # <CJK>
-0x8019 # <CJK>
-0x801C # <CJK>
-0x8020 # <CJK>
-0x8022 # <CJK>
-0x8025 # <CJK>
-0x8026 # <CJK>
-0x8027 # <CJK>
-0x8028 # <CJK>
-0x8029 # <CJK>
-0x802A # <CJK>
-0x8031 # <CJK>
-0x8033 # <CJK>
-0x8035 # <CJK>
-0x8036 # <CJK>
-0x8037 # <CJK>
-0x8038 # <CJK>
-0x803B # <CJK>
-0x803D # <CJK>
-0x803F # <CJK>
-0x8042 # <CJK>
-0x8043 # <CJK>
-0x8046 # <CJK>
-0x804A # <CJK>
-0x804B # <CJK>
-0x804C # <CJK>
-0x804D # <CJK>
-0x8052 # <CJK>
-0x8054 # <CJK>
-0x8058 # <CJK>
-0x805A # <CJK>
-0x8069 # <CJK>
-0x806A # <CJK>
-0x8071 # <CJK>
-0x807F # <CJK>
-0x8080 # <CJK>
-0x8083 # <CJK>
-0x8084 # <CJK>
-0x8086 # <CJK>
-0x8087 # <CJK>
-0x8089 # <CJK>
-0x808B # <CJK>
-0x808C # <CJK>
-0x8093 # <CJK>
-0x8096 # <CJK>
-0x8098 # <CJK>
-0x809A # <CJK>
-0x809B # <CJK>
-0x809C # <CJK>
-0x809D # <CJK>
-0x809F # <CJK>
-0x80A0 # <CJK>
-0x80A1 # <CJK>
-0x80A2 # <CJK>
-0x80A4 # <CJK>
-0x80A5 # <CJK>
-0x80A9 # <CJK>
-0x80AA # <CJK>
-0x80AB # <CJK>
-0x80AD # <CJK>
-0x80AE # <CJK>
-0x80AF # <CJK>
-0x80B1 # <CJK>
-0x80B2 # <CJK>
-0x80B4 # <CJK>
-0x80B7 # <CJK>
-0x80BA # <CJK>
-0x80BC # <CJK>
-0x80BD # <CJK>
-0x80BE # <CJK>
-0x80BF # <CJK>
-0x80C0 # <CJK>
-0x80C1 # <CJK>
-0x80C2 # <CJK>
-0x80C3 # <CJK>
-0x80C4 # <CJK>
-0x80C6 # <CJK>
-0x80CC # <CJK>
-0x80CD # <CJK>
-0x80CE # <CJK>
-0x80D6 # <CJK>
-0x80D7 # <CJK>
-0x80D9 # <CJK>
-0x80DA # <CJK>
-0x80DB # <CJK>
-0x80DC # <CJK>
-0x80DD # <CJK>
-0x80DE # <CJK>
-0x80E1 # <CJK>
-0x80E4 # <CJK>
-0x80E5 # <CJK>
-0x80E7 # <CJK>
-0x80E8 # <CJK>
-0x80E9 # <CJK>
-0x80EA # <CJK>
-0x80EB # <CJK>
-0x80EC # <CJK>
-0x80ED # <CJK>
-0x80EF # <CJK>
-0x80F0 # <CJK>
-0x80F1 # <CJK>
-0x80F2 # <CJK>
-0x80F3 # <CJK>
-0x80F4 # <CJK>
-0x80F6 # <CJK>
-0x80F8 # <CJK>
-0x80FA # <CJK>
-0x80FC # <CJK>
-0x80FD # <CJK>
-0x8102 # <CJK>
-0x8106 # <CJK>
-0x8109 # <CJK>
-0x810A # <CJK>
-0x810D # <CJK>
-0x810E # <CJK>
-0x810F # <CJK>
-0x8110 # <CJK>
-0x8111 # <CJK>
-0x8112 # <CJK>
-0x8113 # <CJK>
-0x8114 # <CJK>
-0x8116 # <CJK>
-0x8118 # <CJK>
-0x811A # <CJK>
-0x811E # <CJK>
-0x812C # <CJK>
-0x812F # <CJK>
-0x8131 # <CJK>
-0x8132 # <CJK>
-0x8136 # <CJK>
-0x8138 # <CJK>
-0x813E # <CJK>
-0x8146 # <CJK>
-0x8148 # <CJK>
-0x814A # <CJK>
-0x814B # <CJK>
-0x814C # <CJK>
-0x8150 # <CJK>
-0x8151 # <CJK>
-0x8153 # <CJK>
-0x8154 # <CJK>
-0x8155 # <CJK>
-0x8159 # <CJK>
-0x815A # <CJK>
-0x8160 # <CJK>
-0x8165 # <CJK>
-0x8167 # <CJK>
-0x8169 # <CJK>
-0x816D # <CJK>
-0x816E # <CJK>
-0x8170 # <CJK>
-0x8171 # <CJK>
-0x8174 # <CJK>
-0x8179 # <CJK>
-0x817A # <CJK>
-0x817B # <CJK>
-0x817C # <CJK>
-0x817D # <CJK>
-0x817E # <CJK>
-0x817F # <CJK>
-0x8180 # <CJK>
-0x8182 # <CJK>
-0x8188 # <CJK>
-0x818A # <CJK>
-0x818F # <CJK>
-0x8191 # <CJK>
-0x8198 # <CJK>
-0x819B # <CJK>
-0x819C # <CJK>
-0x819D # <CJK>
-0x81A3 # <CJK>
-0x81A6 # <CJK>
-0x81A8 # <CJK>
-0x81AA # <CJK>
-0x81B3 # <CJK>
-0x81BA # <CJK>
-0x81BB # <CJK>
-0x81C0 # <CJK>
-0x81C1 # <CJK>
-0x81C2 # <CJK>
-0x81C3 # <CJK>
-0x81C6 # <CJK>
-0x81CA # <CJK>
-0x81CC # <CJK>
-0x81E3 # <CJK>
-0x81E7 # <CJK>
-0x81EA # <CJK>
-0x81EC # <CJK>
-0x81ED # <CJK>
-0x81F3 # <CJK>
-0x81F4 # <CJK>
-0x81FB # <CJK>
-0x81FC # <CJK>
-0x81FE # <CJK>
-0x8200 # <CJK>
-0x8201 # <CJK>
-0x8202 # <CJK>
-0x8204 # <CJK>
-0x8205 # <CJK>
-0x8206 # <CJK>
-0x820C # <CJK>
-0x820D # <CJK>
-0x8210 # <CJK>
-0x8212 # <CJK>
-0x8214 # <CJK>
-0x821B # <CJK>
-0x821C # <CJK>
-0x821E # <CJK>
-0x821F # <CJK>
-0x8221 # <CJK>
-0x8222 # <CJK>
-0x8223 # <CJK>
-0x8228 # <CJK>
-0x822A # <CJK>
-0x822B # <CJK>
-0x822C # <CJK>
-0x822D # <CJK>
-0x822F # <CJK>
-0x8230 # <CJK>
-0x8231 # <CJK>
-0x8233 # <CJK>
-0x8234 # <CJK>
-0x8235 # <CJK>
-0x8236 # <CJK>
-0x8237 # <CJK>
-0x8238 # <CJK>
-0x8239 # <CJK>
-0x823B # <CJK>
-0x823E # <CJK>
-0x8244 # <CJK>
-0x8247 # <CJK>
-0x8249 # <CJK>
-0x824B # <CJK>
-0x824F # <CJK>
-0x8258 # <CJK>
-0x825A # <CJK>
-0x825F # <CJK>
-0x8268 # <CJK>
-0x826E # <CJK>
-0x826F # <CJK>
-0x8270 # <CJK>
-0x8272 # <CJK>
-0x8273 # <CJK>
-0x8274 # <CJK>
-0x8279 # <CJK>
-0x827A # <CJK>
-0x827D # <CJK>
-0x827E # <CJK>
-0x827F # <CJK>
-0x8282 # <CJK>
-0x8284 # <CJK>
-0x8288 # <CJK>
-0x828A # <CJK>
-0x828B # <CJK>
-0x828D # <CJK>
-0x828E # <CJK>
-0x828F # <CJK>
-0x8291 # <CJK>
-0x8292 # <CJK>
-0x8297 # <CJK>
-0x8298 # <CJK>
-0x8299 # <CJK>
-0x829C # <CJK>
-0x829D # <CJK>
-0x829F # <CJK>
-0x82A1 # <CJK>
-0x82A4 # <CJK>
-0x82A5 # <CJK>
-0x82A6 # <CJK>
-0x82A8 # <CJK>
-0x82A9 # <CJK>
-0x82AA # <CJK>
-0x82AB # <CJK>
-0x82AC # <CJK>
-0x82AD # <CJK>
-0x82AE # <CJK>
-0x82AF # <CJK>
-0x82B0 # <CJK>
-0x82B1 # <CJK>
-0x82B3 # <CJK>
-0x82B4 # <CJK>
-0x82B7 # <CJK>
-0x82B8 # <CJK>
-0x82B9 # <CJK>
-0x82BD # <CJK>
-0x82BE # <CJK>
-0x82C1 # <CJK>
-0x82C4 # <CJK>
-0x82C7 # <CJK>
-0x82C8 # <CJK>
-0x82CA # <CJK>
-0x82CB # <CJK>
-0x82CC # <CJK>
-0x82CD # <CJK>
-0x82CE # <CJK>
-0x82CF # <CJK>
-0x82D1 # <CJK>
-0x82D2 # <CJK>
-0x82D3 # <CJK>
-0x82D4 # <CJK>
-0x82D5 # <CJK>
-0x82D7 # <CJK>
-0x82D8 # <CJK>
-0x82DB # <CJK>
-0x82DC # <CJK>
-0x82DE # <CJK>
-0x82DF # <CJK>
-0x82E0 # <CJK>
-0x82E1 # <CJK>
-0x82E3 # <CJK>
-0x82E4 # <CJK>
-0x82E5 # <CJK>
-0x82E6 # <CJK>
-0x82EB # <CJK>
-0x82EF # <CJK>
-0x82F1 # <CJK>
-0x82F4 # <CJK>
-0x82F7 # <CJK>
-0x82F9 # <CJK>
-0x82FB # <CJK>
-0x8301 # <CJK>
-0x8302 # <CJK>
-0x8303 # <CJK>
-0x8304 # <CJK>
-0x8305 # <CJK>
-0x8306 # <CJK>
-0x8307 # <CJK>
-0x8308 # <CJK>
-0x8309 # <CJK>
-0x830C # <CJK>
-0x830E # <CJK>
-0x830F # <CJK>
-0x8311 # <CJK>
-0x8314 # <CJK>
-0x8315 # <CJK>
-0x8317 # <CJK>
-0x831A # <CJK>
-0x831B # <CJK>
-0x831C # <CJK>
-0x8327 # <CJK>
-0x8328 # <CJK>
-0x832B # <CJK>
-0x832C # <CJK>
-0x832D # <CJK>
-0x832F # <CJK>
-0x8331 # <CJK>
-0x8333 # <CJK>
-0x8334 # <CJK>
-0x8335 # <CJK>
-0x8336 # <CJK>
-0x8338 # <CJK>
-0x8339 # <CJK>
-0x833A # <CJK>
-0x833C # <CJK>
-0x8340 # <CJK>
-0x8343 # <CJK>
-0x8346 # <CJK>
-0x8347 # <CJK>
-0x8349 # <CJK>
-0x834F # <CJK>
-0x8350 # <CJK>
-0x8351 # <CJK>
-0x8352 # <CJK>
-0x8354 # <CJK>
-0x835A # <CJK>
-0x835B # <CJK>
-0x835C # <CJK>
-0x835E # <CJK>
-0x835F # <CJK>
-0x8360 # <CJK>
-0x8361 # <CJK>
-0x8363 # <CJK>
-0x8364 # <CJK>
-0x8365 # <CJK>
-0x8366 # <CJK>
-0x8367 # <CJK>
-0x8368 # <CJK>
-0x8369 # <CJK>
-0x836A # <CJK>
-0x836B # <CJK>
-0x836C # <CJK>
-0x836D # <CJK>
-0x836E # <CJK>
-0x836F # <CJK>
-0x8377 # <CJK>
-0x8378 # <CJK>
-0x837B # <CJK>
-0x837C # <CJK>
-0x837D # <CJK>
-0x8385 # <CJK>
-0x8386 # <CJK>
-0x8389 # <CJK>
-0x838E # <CJK>
-0x8392 # <CJK>
-0x8393 # <CJK>
-0x8398 # <CJK>
-0x839B # <CJK>
-0x839C # <CJK>
-0x839E # <CJK>
-0x83A0 # <CJK>
-0x83A8 # <CJK>
-0x83A9 # <CJK>
-0x83AA # <CJK>
-0x83AB # <CJK>
-0x83B0 # <CJK>
-0x83B1 # <CJK>
-0x83B2 # <CJK>
-0x83B3 # <CJK>
-0x83B4 # <CJK>
-0x83B6 # <CJK>
-0x83B7 # <CJK>
-0x83B8 # <CJK>
-0x83B9 # <CJK>
-0x83BA # <CJK>
-0x83BC # <CJK>
-0x83BD # <CJK>
-0x83C0 # <CJK>
-0x83C1 # <CJK>
-0x83C5 # <CJK>
-0x83C7 # <CJK>
-0x83CA # <CJK>
-0x83CC # <CJK>
-0x83CF # <CJK>
-0x83D4 # <CJK>
-0x83D6 # <CJK>
-0x83D8 # <CJK>
-0x83DC # <CJK>
-0x83DD # <CJK>
-0x83DF # <CJK>
-0x83E0 # <CJK>
-0x83E1 # <CJK>
-0x83E5 # <CJK>
-0x83E9 # <CJK>
-0x83EA # <CJK>
-0x83F0 # <CJK>
-0x83F1 # <CJK>
-0x83F2 # <CJK>
-0x83F8 # <CJK>
-0x83F9 # <CJK>
-0x83FD # <CJK>
-0x8401 # <CJK>
-0x8403 # <CJK>
-0x8404 # <CJK>
-0x8406 # <CJK>
-0x840B # <CJK>
-0x840C # <CJK>
-0x840D # <CJK>
-0x840E # <CJK>
-0x840F # <CJK>
-0x8411 # <CJK>
-0x8418 # <CJK>
-0x841C # <CJK>
-0x841D # <CJK>
-0x8424 # <CJK>
-0x8425 # <CJK>
-0x8426 # <CJK>
-0x8427 # <CJK>
-0x8428 # <CJK>
-0x8431 # <CJK>
-0x8438 # <CJK>
-0x843C # <CJK>
-0x843D # <CJK>
-0x8446 # <CJK>
-0x8451 # <CJK>
-0x8457 # <CJK>
-0x8459 # <CJK>
-0x845A # <CJK>
-0x845B # <CJK>
-0x845C # <CJK>
-0x8461 # <CJK>
-0x8463 # <CJK>
-0x8469 # <CJK>
-0x846B # <CJK>
-0x846C # <CJK>
-0x846D # <CJK>
-0x8471 # <CJK>
-0x8473 # <CJK>
-0x8475 # <CJK>
-0x8476 # <CJK>
-0x8478 # <CJK>
-0x847A # <CJK>
-0x8482 # <CJK>
-0x8487 # <CJK>
-0x8488 # <CJK>
-0x8489 # <CJK>
-0x848B # <CJK>
-0x848C # <CJK>
-0x848E # <CJK>
-0x8497 # <CJK>
-0x8499 # <CJK>
-0x849C # <CJK>
-0x84A1 # <CJK>
-0x84AF # <CJK>
-0x84B2 # <CJK>
-0x84B4 # <CJK>
-0x84B8 # <CJK>
-0x84B9 # <CJK>
-0x84BA # <CJK>
-0x84BD # <CJK>
-0x84BF # <CJK>
-0x84C1 # <CJK>
-0x84C4 # <CJK>
-0x84C9 # <CJK>
-0x84CA # <CJK>
-0x84CD # <CJK>
-0x84D0 # <CJK>
-0x84D1 # <CJK>
-0x84D3 # <CJK>
-0x84D6 # <CJK>
-0x84DD # <CJK>
-0x84DF # <CJK>
-0x84E0 # <CJK>
-0x84E3 # <CJK>
-0x84E5 # <CJK>
-0x84E6 # <CJK>
-0x84EC # <CJK>
-0x84F0 # <CJK>
-0x84FC # <CJK>
-0x84FF # <CJK>
-0x850C # <CJK>
-0x8511 # <CJK>
-0x8513 # <CJK>
-0x8517 # <CJK>
-0x851A # <CJK>
-0x851F # <CJK>
-0x8521 # <CJK>
-0x852B # <CJK>
-0x852C # <CJK>
-0x8537 # <CJK>
-0x8538 # <CJK>
-0x8539 # <CJK>
-0x853A # <CJK>
-0x853B # <CJK>
-0x853C # <CJK>
-0x853D # <CJK>
-0x8543 # <CJK>
-0x8548 # <CJK>
-0x8549 # <CJK>
-0x854A # <CJK>
-0x8556 # <CJK>
-0x8559 # <CJK>
-0x855E # <CJK>
-0x8564 # <CJK>
-0x8568 # <CJK>
-0x8572 # <CJK>
-0x8574 # <CJK>
-0x8579 # <CJK>
-0x857A # <CJK>
-0x857B # <CJK>
-0x857E # <CJK>
-0x8584 # <CJK>
-0x8585 # <CJK>
-0x8587 # <CJK>
-0x858F # <CJK>
-0x859B # <CJK>
-0x859C # <CJK>
-0x85A4 # <CJK>
-0x85A8 # <CJK>
-0x85AA # <CJK>
-0x85AE # <CJK>
-0x85AF # <CJK>
-0x85B0 # <CJK>
-0x85B7 # <CJK>
-0x85B9 # <CJK>
-0x85C1 # <CJK>
-0x85C9 # <CJK>
-0x85CF # <CJK>
-0x85D0 # <CJK>
-0x85D3 # <CJK>
-0x85D5 # <CJK>
-0x85DC # <CJK>
-0x85E4 # <CJK>
-0x85E9 # <CJK>
-0x85FB # <CJK>
-0x85FF # <CJK>
-0x8605 # <CJK>
-0x8611 # <CJK>
-0x8616 # <CJK>
-0x8627 # <CJK>
-0x8629 # <CJK>
-0x8638 # <CJK>
-0x863C # <CJK>
-0x864D # <CJK>
-0x864E # <CJK>
-0x864F # <CJK>
-0x8650 # <CJK>
-0x8651 # <CJK>
-0x8654 # <CJK>
-0x865A # <CJK>
-0x865E # <CJK>
-0x8662 # <CJK>
-0x866B # <CJK>
-0x866C # <CJK>
-0x866E # <CJK>
-0x8671 # <CJK>
-0x8679 # <CJK>
-0x867A # <CJK>
-0x867B # <CJK>
-0x867C # <CJK>
-0x867D # <CJK>
-0x867E # <CJK>
-0x867F # <CJK>
-0x8680 # <CJK>
-0x8681 # <CJK>
-0x8682 # <CJK>
-0x868A # <CJK>
-0x868B # <CJK>
-0x868C # <CJK>
-0x868D # <CJK>
-0x8693 # <CJK>
-0x8695 # <CJK>
-0x869C # <CJK>
-0x869D # <CJK>
-0x86A3 # <CJK>
-0x86A4 # <CJK>
-0x86A7 # <CJK>
-0x86A8 # <CJK>
-0x86A9 # <CJK>
-0x86AA # <CJK>
-0x86AC # <CJK>
-0x86AF # <CJK>
-0x86B0 # <CJK>
-0x86B1 # <CJK>
-0x86B4 # <CJK>
-0x86B5 # <CJK>
-0x86B6 # <CJK>
-0x86BA # <CJK>
-0x86C0 # <CJK>
-0x86C4 # <CJK>
-0x86C6 # <CJK>
-0x86C7 # <CJK>
-0x86C9 # <CJK>
-0x86CA # <CJK>
-0x86CB # <CJK>
-0x86CE # <CJK>
-0x86CF # <CJK>
-0x86D0 # <CJK>
-0x86D1 # <CJK>
-0x86D4 # <CJK>
-0x86D8 # <CJK>
-0x86D9 # <CJK>
-0x86DB # <CJK>
-0x86DE # <CJK>
-0x86DF # <CJK>
-0x86E4 # <CJK>
-0x86E9 # <CJK>
-0x86ED # <CJK>
-0x86EE # <CJK>
-0x86F0 # <CJK>
-0x86F1 # <CJK>
-0x86F2 # <CJK>
-0x86F3 # <CJK>
-0x86F4 # <CJK>
-0x86F8 # <CJK>
-0x86F9 # <CJK>
-0x86FE # <CJK>
-0x8700 # <CJK>
-0x8702 # <CJK>
-0x8703 # <CJK>
-0x8707 # <CJK>
-0x8708 # <CJK>
-0x8709 # <CJK>
-0x870A # <CJK>
-0x870D # <CJK>
-0x8712 # <CJK>
-0x8713 # <CJK>
-0x8715 # <CJK>
-0x8717 # <CJK>
-0x8718 # <CJK>
-0x871A # <CJK>
-0x871C # <CJK>
-0x871E # <CJK>
-0x8721 # <CJK>
-0x8722 # <CJK>
-0x8723 # <CJK>
-0x8725 # <CJK>
-0x8729 # <CJK>
-0x872E # <CJK>
-0x8731 # <CJK>
-0x8734 # <CJK>
-0x8737 # <CJK>
-0x873B # <CJK>
-0x873E # <CJK>
-0x873F # <CJK>
-0x8747 # <CJK>
-0x8748 # <CJK>
-0x8749 # <CJK>
-0x874C # <CJK>
-0x874E # <CJK>
-0x8753 # <CJK>
-0x8757 # <CJK>
-0x8759 # <CJK>
-0x8760 # <CJK>
-0x8763 # <CJK>
-0x8764 # <CJK>
-0x8765 # <CJK>
-0x876E # <CJK>
-0x8770 # <CJK>
-0x8774 # <CJK>
-0x8776 # <CJK>
-0x877B # <CJK>
-0x877C # <CJK>
-0x877D # <CJK>
-0x877E # <CJK>
-0x8782 # <CJK>
-0x8783 # <CJK>
-0x8785 # <CJK>
-0x8788 # <CJK>
-0x878B # <CJK>
-0x878D # <CJK>
-0x8793 # <CJK>
-0x8797 # <CJK>
-0x879F # <CJK>
-0x87A8 # <CJK>
-0x87AB # <CJK>
-0x87AC # <CJK>
-0x87AD # <CJK>
-0x87AF # <CJK>
-0x87B3 # <CJK>
-0x87B5 # <CJK>
-0x87BA # <CJK>
-0x87BD # <CJK>
-0x87C0 # <CJK>
-0x87C6 # <CJK>
-0x87CA # <CJK>
-0x87CB # <CJK>
-0x87D1 # <CJK>
-0x87D2 # <CJK>
-0x87D3 # <CJK>
-0x87DB # <CJK>
-0x87E0 # <CJK>
-0x87E5 # <CJK>
-0x87EA # <CJK>
-0x87EE # <CJK>
-0x87F9 # <CJK>
-0x87FE # <CJK>
-0x8803 # <CJK>
-0x880A # <CJK>
-0x8813 # <CJK>
-0x8815 # <CJK>
-0x8816 # <CJK>
-0x881B # <CJK>
-0x8821 # <CJK>
-0x8822 # <CJK>
-0x8832 # <CJK>
-0x8839 # <CJK>
-0x883C # <CJK>
-0x8840 # <CJK>
-0x8844 # <CJK>
-0x8845 # <CJK>
-0x884C # <CJK>
-0x884D # <CJK>
-0x8854 # <CJK>
-0x8857 # <CJK>
-0x8859 # <CJK>
-0x8861 # <CJK>
-0x8862 # <CJK>
-0x8863 # <CJK>
-0x8864 # <CJK>
-0x8865 # <CJK>
-0x8868 # <CJK>
-0x8869 # <CJK>
-0x886B # <CJK>
-0x886C # <CJK>
-0x886E # <CJK>
-0x8870 # <CJK>
-0x8872 # <CJK>
-0x8877 # <CJK>
-0x887D # <CJK>
-0x887E # <CJK>
-0x887F # <CJK>
-0x8881 # <CJK>
-0x8882 # <CJK>
-0x8884 # <CJK>
-0x8885 # <CJK>
-0x8888 # <CJK>
-0x888B # <CJK>
-0x888D # <CJK>
-0x8892 # <CJK>
-0x8896 # <CJK>
-0x889C # <CJK>
-0x88A2 # <CJK>
-0x88A4 # <CJK>
-0x88AB # <CJK>
-0x88AD # <CJK>
-0x88B1 # <CJK>
-0x88B7 # <CJK>
-0x88BC # <CJK>
-0x88C1 # <CJK>
-0x88C2 # <CJK>
-0x88C5 # <CJK>
-0x88C6 # <CJK>
-0x88C9 # <CJK>
-0x88CE # <CJK>
-0x88D2 # <CJK>
-0x88D4 # <CJK>
-0x88D5 # <CJK>
-0x88D8 # <CJK>
-0x88D9 # <CJK>
-0x88DF # <CJK>
-0x88E2 # <CJK>
-0x88E3 # <CJK>
-0x88E4 # <CJK>
-0x88E5 # <CJK>
-0x88E8 # <CJK>
-0x88F0 # <CJK>
-0x88F1 # <CJK>
-0x88F3 # <CJK>
-0x88F4 # <CJK>
-0x88F8 # <CJK>
-0x88F9 # <CJK>
-0x88FC # <CJK>
-0x88FE # <CJK>
-0x8902 # <CJK>
-0x890A # <CJK>
-0x8910 # <CJK>
-0x8912 # <CJK>
-0x8913 # <CJK>
-0x8919 # <CJK>
-0x891A # <CJK>
-0x891B # <CJK>
-0x8921 # <CJK>
-0x8925 # <CJK>
-0x892A # <CJK>
-0x892B # <CJK>
-0x8930 # <CJK>
-0x8934 # <CJK>
-0x8936 # <CJK>
-0x8941 # <CJK>
-0x8944 # <CJK>
-0x895E # <CJK>
-0x895F # <CJK>
-0x8966 # <CJK>
-0x897B # <CJK>
-0x897F # <CJK>
-0x8981 # <CJK>
-0x8983 # <CJK>
-0x8986 # <CJK>
-0x89C1 # <CJK>
-0x89C2 # <CJK>
-0x89C4 # <CJK>
-0x89C5 # <CJK>
-0x89C6 # <CJK>
-0x89C7 # <CJK>
-0x89C8 # <CJK>
-0x89C9 # <CJK>
-0x89CA # <CJK>
-0x89CB # <CJK>
-0x89CC # <CJK>
-0x89CE # <CJK>
-0x89CF # <CJK>
-0x89D0 # <CJK>
-0x89D1 # <CJK>
-0x89D2 # <CJK>
-0x89D6 # <CJK>
-0x89DA # <CJK>
-0x89DC # <CJK>
-0x89DE # <CJK>
-0x89E3 # <CJK>
-0x89E5 # <CJK>
-0x89E6 # <CJK>
-0x89EB # <CJK>
-0x89EF # <CJK>
-0x89F3 # <CJK>
-0x8A00 # <CJK>
-0x8A07 # <CJK>
-0x8A3E # <CJK>
-0x8A48 # <CJK>
-0x8A79 # <CJK>
-0x8A89 # <CJK>
-0x8A8A # <CJK>
-0x8A93 # <CJK>
-0x8B07 # <CJK>
-0x8B26 # <CJK>
-0x8B66 # <CJK>
-0x8B6C # <CJK>
-0x8BA0 # <CJK>
-0x8BA1 # <CJK>
-0x8BA2 # <CJK>
-0x8BA3 # <CJK>
-0x8BA4 # <CJK>
-0x8BA5 # <CJK>
-0x8BA6 # <CJK>
-0x8BA7 # <CJK>
-0x8BA8 # <CJK>
-0x8BA9 # <CJK>
-0x8BAA # <CJK>
-0x8BAB # <CJK>
-0x8BAD # <CJK>
-0x8BAE # <CJK>
-0x8BAF # <CJK>
-0x8BB0 # <CJK>
-0x8BB2 # <CJK>
-0x8BB3 # <CJK>
-0x8BB4 # <CJK>
-0x8BB5 # <CJK>
-0x8BB6 # <CJK>
-0x8BB7 # <CJK>
-0x8BB8 # <CJK>
-0x8BB9 # <CJK>
-0x8BBA # <CJK>
-0x8BBC # <CJK>
-0x8BBD # <CJK>
-0x8BBE # <CJK>
-0x8BBF # <CJK>
-0x8BC0 # <CJK>
-0x8BC1 # <CJK>
-0x8BC2 # <CJK>
-0x8BC3 # <CJK>
-0x8BC4 # <CJK>
-0x8BC5 # <CJK>
-0x8BC6 # <CJK>
-0x8BC8 # <CJK>
-0x8BC9 # <CJK>
-0x8BCA # <CJK>
-0x8BCB # <CJK>
-0x8BCC # <CJK>
-0x8BCD # <CJK>
-0x8BCE # <CJK>
-0x8BCF # <CJK>
-0x8BD1 # <CJK>
-0x8BD2 # <CJK>
-0x8BD3 # <CJK>
-0x8BD4 # <CJK>
-0x8BD5 # <CJK>
-0x8BD6 # <CJK>
-0x8BD7 # <CJK>
-0x8BD8 # <CJK>
-0x8BD9 # <CJK>
-0x8BDA # <CJK>
-0x8BDB # <CJK>
-0x8BDC # <CJK>
-0x8BDD # <CJK>
-0x8BDE # <CJK>
-0x8BDF # <CJK>
-0x8BE0 # <CJK>
-0x8BE1 # <CJK>
-0x8BE2 # <CJK>
-0x8BE3 # <CJK>
-0x8BE4 # <CJK>
-0x8BE5 # <CJK>
-0x8BE6 # <CJK>
-0x8BE7 # <CJK>
-0x8BE8 # <CJK>
-0x8BE9 # <CJK>
-0x8BEB # <CJK>
-0x8BEC # <CJK>
-0x8BED # <CJK>
-0x8BEE # <CJK>
-0x8BEF # <CJK>
-0x8BF0 # <CJK>
-0x8BF1 # <CJK>
-0x8BF2 # <CJK>
-0x8BF3 # <CJK>
-0x8BF4 # <CJK>
-0x8BF5 # <CJK>
-0x8BF6 # <CJK>
-0x8BF7 # <CJK>
-0x8BF8 # <CJK>
-0x8BF9 # <CJK>
-0x8BFA # <CJK>
-0x8BFB # <CJK>
-0x8BFC # <CJK>
-0x8BFD # <CJK>
-0x8BFE # <CJK>
-0x8BFF # <CJK>
-0x8C00 # <CJK>
-0x8C01 # <CJK>
-0x8C02 # <CJK>
-0x8C03 # <CJK>
-0x8C04 # <CJK>
-0x8C05 # <CJK>
-0x8C06 # <CJK>
-0x8C07 # <CJK>
-0x8C08 # <CJK>
-0x8C0A # <CJK>
-0x8C0B # <CJK>
-0x8C0C # <CJK>
-0x8C0D # <CJK>
-0x8C0E # <CJK>
-0x8C0F # <CJK>
-0x8C10 # <CJK>
-0x8C11 # <CJK>
-0x8C12 # <CJK>
-0x8C13 # <CJK>
-0x8C14 # <CJK>
-0x8C15 # <CJK>
-0x8C16 # <CJK>
-0x8C17 # <CJK>
-0x8C18 # <CJK>
-0x8C19 # <CJK>
-0x8C1A # <CJK>
-0x8C1B # <CJK>
-0x8C1C # <CJK>
-0x8C1D # <CJK>
-0x8C1F # <CJK>
-0x8C20 # <CJK>
-0x8C21 # <CJK>
-0x8C22 # <CJK>
-0x8C23 # <CJK>
-0x8C24 # <CJK>
-0x8C25 # <CJK>
-0x8C26 # <CJK>
-0x8C27 # <CJK>
-0x8C28 # <CJK>
-0x8C29 # <CJK>
-0x8C2A # <CJK>
-0x8C2B # <CJK>
-0x8C2C # <CJK>
-0x8C2D # <CJK>
-0x8C2E # <CJK>
-0x8C2F # <CJK>
-0x8C30 # <CJK>
-0x8C31 # <CJK>
-0x8C32 # <CJK>
-0x8C33 # <CJK>
-0x8C34 # <CJK>
-0x8C35 # <CJK>
-0x8C36 # <CJK>
-0x8C37 # <CJK>
-0x8C41 # <CJK>
-0x8C46 # <CJK>
-0x8C47 # <CJK>
-0x8C49 # <CJK>
-0x8C4C # <CJK>
-0x8C55 # <CJK>
-0x8C5A # <CJK>
-0x8C61 # <CJK>
-0x8C62 # <CJK>
-0x8C6A # <CJK>
-0x8C6B # <CJK>
-0x8C73 # <CJK>
-0x8C78 # <CJK>
-0x8C79 # <CJK>
-0x8C7A # <CJK>
-0x8C82 # <CJK>
-0x8C85 # <CJK>
-0x8C89 # <CJK>
-0x8C8A # <CJK>
-0x8C8C # <CJK>
-0x8C94 # <CJK>
-0x8C98 # <CJK>
-0x8D1D # <CJK>
-0x8D1E # <CJK>
-0x8D1F # <CJK>
-0x8D21 # <CJK>
-0x8D22 # <CJK>
-0x8D23 # <CJK>
-0x8D24 # <CJK>
-0x8D25 # <CJK>
-0x8D26 # <CJK>
-0x8D27 # <CJK>
-0x8D28 # <CJK>
-0x8D29 # <CJK>
-0x8D2A # <CJK>
-0x8D2B # <CJK>
-0x8D2C # <CJK>
-0x8D2D # <CJK>
-0x8D2E # <CJK>
-0x8D2F # <CJK>
-0x8D30 # <CJK>
-0x8D31 # <CJK>
-0x8D32 # <CJK>
-0x8D33 # <CJK>
-0x8D34 # <CJK>
-0x8D35 # <CJK>
-0x8D36 # <CJK>
-0x8D37 # <CJK>
-0x8D38 # <CJK>
-0x8D39 # <CJK>
-0x8D3A # <CJK>
-0x8D3B # <CJK>
-0x8D3C # <CJK>
-0x8D3D # <CJK>
-0x8D3E # <CJK>
-0x8D3F # <CJK>
-0x8D40 # <CJK>
-0x8D41 # <CJK>
-0x8D42 # <CJK>
-0x8D43 # <CJK>
-0x8D44 # <CJK>
-0x8D45 # <CJK>
-0x8D46 # <CJK>
-0x8D47 # <CJK>
-0x8D48 # <CJK>
-0x8D49 # <CJK>
-0x8D4A # <CJK>
-0x8D4B # <CJK>
-0x8D4C # <CJK>
-0x8D4D # <CJK>
-0x8D4E # <CJK>
-0x8D4F # <CJK>
-0x8D50 # <CJK>
-0x8D53 # <CJK>
-0x8D54 # <CJK>
-0x8D55 # <CJK>
-0x8D56 # <CJK>
-0x8D58 # <CJK>
-0x8D59 # <CJK>
-0x8D5A # <CJK>
-0x8D5B # <CJK>
-0x8D5C # <CJK>
-0x8D5D # <CJK>
-0x8D5E # <CJK>
-0x8D60 # <CJK>
-0x8D61 # <CJK>
-0x8D62 # <CJK>
-0x8D63 # <CJK>
-0x8D64 # <CJK>
-0x8D66 # <CJK>
-0x8D67 # <CJK>
-0x8D6B # <CJK>
-0x8D6D # <CJK>
-0x8D70 # <CJK>
-0x8D73 # <CJK>
-0x8D74 # <CJK>
-0x8D75 # <CJK>
-0x8D76 # <CJK>
-0x8D77 # <CJK>
-0x8D81 # <CJK>
-0x8D84 # <CJK>
-0x8D85 # <CJK>
-0x8D8A # <CJK>
-0x8D8B # <CJK>
-0x8D91 # <CJK>
-0x8D94 # <CJK>
-0x8D9F # <CJK>
-0x8DA3 # <CJK>
-0x8DB1 # <CJK>
-0x8DB3 # <CJK>
-0x8DB4 # <CJK>
-0x8DB5 # <CJK>
-0x8DB8 # <CJK>
-0x8DBA # <CJK>
-0x8DBC # <CJK>
-0x8DBE # <CJK>
-0x8DBF # <CJK>
-0x8DC3 # <CJK>
-0x8DC4 # <CJK>
-0x8DC6 # <CJK>
-0x8DCB # <CJK>
-0x8DCC # <CJK>
-0x8DCE # <CJK>
-0x8DCF # <CJK>
-0x8DD1 # <CJK>
-0x8DD6 # <CJK>
-0x8DD7 # <CJK>
-0x8DDA # <CJK>
-0x8DDB # <CJK>
-0x8DDD # <CJK>
-0x8DDE # <CJK>
-0x8DDF # <CJK>
-0x8DE3 # <CJK>
-0x8DE4 # <CJK>
-0x8DE8 # <CJK>
-0x8DEA # <CJK>
-0x8DEB # <CJK>
-0x8DEC # <CJK>
-0x8DEF # <CJK>
-0x8DF3 # <CJK>
-0x8DF5 # <CJK>
-0x8DF7 # <CJK>
-0x8DF8 # <CJK>
-0x8DF9 # <CJK>
-0x8DFA # <CJK>
-0x8DFB # <CJK>
-0x8DFD # <CJK>
-0x8E05 # <CJK>
-0x8E09 # <CJK>
-0x8E0A # <CJK>
-0x8E0C # <CJK>
-0x8E0F # <CJK>
-0x8E14 # <CJK>
-0x8E1D # <CJK>
-0x8E1E # <CJK>
-0x8E1F # <CJK>
-0x8E22 # <CJK>
-0x8E23 # <CJK>
-0x8E29 # <CJK>
-0x8E2A # <CJK>
-0x8E2C # <CJK>
-0x8E2E # <CJK>
-0x8E2F # <CJK>
-0x8E31 # <CJK>
-0x8E35 # <CJK>
-0x8E39 # <CJK>
-0x8E3A # <CJK>
-0x8E3D # <CJK>
-0x8E40 # <CJK>
-0x8E41 # <CJK>
-0x8E42 # <CJK>
-0x8E44 # <CJK>
-0x8E47 # <CJK>
-0x8E48 # <CJK>
-0x8E49 # <CJK>
-0x8E4A # <CJK>
-0x8E4B # <CJK>
-0x8E51 # <CJK>
-0x8E52 # <CJK>
-0x8E59 # <CJK>
-0x8E66 # <CJK>
-0x8E69 # <CJK>
-0x8E6C # <CJK>
-0x8E6D # <CJK>
-0x8E6F # <CJK>
-0x8E70 # <CJK>
-0x8E72 # <CJK>
-0x8E74 # <CJK>
-0x8E76 # <CJK>
-0x8E7C # <CJK>
-0x8E7F # <CJK>
-0x8E81 # <CJK>
-0x8E85 # <CJK>
-0x8E87 # <CJK>
-0x8E8F # <CJK>
-0x8E90 # <CJK>
-0x8E94 # <CJK>
-0x8E9C # <CJK>
-0x8E9E # <CJK>
-0x8EAB # <CJK>
-0x8EAC # <CJK>
-0x8EAF # <CJK>
-0x8EB2 # <CJK>
-0x8EBA # <CJK>
-0x8ECE # <CJK>
-0x8F66 # <CJK>
-0x8F67 # <CJK>
-0x8F68 # <CJK>
-0x8F69 # <CJK>
-0x8F6B # <CJK>
-0x8F6C # <CJK>
-0x8F6D # <CJK>
-0x8F6E # <CJK>
-0x8F6F # <CJK>
-0x8F70 # <CJK>
-0x8F71 # <CJK>
-0x8F72 # <CJK>
-0x8F73 # <CJK>
-0x8F74 # <CJK>
-0x8F75 # <CJK>
-0x8F76 # <CJK>
-0x8F77 # <CJK>
-0x8F78 # <CJK>
-0x8F79 # <CJK>
-0x8F7A # <CJK>
-0x8F7B # <CJK>
-0x8F7C # <CJK>
-0x8F7D # <CJK>
-0x8F7E # <CJK>
-0x8F7F # <CJK>
-0x8F81 # <CJK>
-0x8F82 # <CJK>
-0x8F83 # <CJK>
-0x8F84 # <CJK>
-0x8F85 # <CJK>
-0x8F86 # <CJK>
-0x8F87 # <CJK>
-0x8F88 # <CJK>
-0x8F89 # <CJK>
-0x8F8A # <CJK>
-0x8F8B # <CJK>
-0x8F8D # <CJK>
-0x8F8E # <CJK>
-0x8F8F # <CJK>
-0x8F90 # <CJK>
-0x8F91 # <CJK>
-0x8F93 # <CJK>
-0x8F94 # <CJK>
-0x8F95 # <CJK>
-0x8F96 # <CJK>
-0x8F97 # <CJK>
-0x8F98 # <CJK>
-0x8F99 # <CJK>
-0x8F9A # <CJK>
-0x8F9B # <CJK>
-0x8F9C # <CJK>
-0x8F9E # <CJK>
-0x8F9F # <CJK>
-0x8FA3 # <CJK>
-0x8FA8 # <CJK>
-0x8FA9 # <CJK>
-0x8FAB # <CJK>
-0x8FB0 # <CJK>
-0x8FB1 # <CJK>
-0x8FB6 # <CJK>
-0x8FB9 # <CJK>
-0x8FBD # <CJK>
-0x8FBE # <CJK>
-0x8FC1 # <CJK>
-0x8FC2 # <CJK>
-0x8FC4 # <CJK>
-0x8FC5 # <CJK>
-0x8FC7 # <CJK>
-0x8FC8 # <CJK>
-0x8FCE # <CJK>
-0x8FD0 # <CJK>
-0x8FD1 # <CJK>
-0x8FD3 # <CJK>
-0x8FD4 # <CJK>
-0x8FD5 # <CJK>
-0x8FD8 # <CJK>
-0x8FD9 # <CJK>
-0x8FDB # <CJK>
-0x8FDC # <CJK>
-0x8FDD # <CJK>
-0x8FDE # <CJK>
-0x8FDF # <CJK>
-0x8FE2 # <CJK>
-0x8FE4 # <CJK>
-0x8FE5 # <CJK>
-0x8FE6 # <CJK>
-0x8FE8 # <CJK>
-0x8FE9 # <CJK>
-0x8FEA # <CJK>
-0x8FEB # <CJK>
-0x8FED # <CJK>
-0x8FEE # <CJK>
-0x8FF0 # <CJK>
-0x8FF3 # <CJK>
-0x8FF7 # <CJK>
-0x8FF8 # <CJK>
-0x8FF9 # <CJK>
-0x8FFD # <CJK>
-0x9000 # <CJK>
-0x9001 # <CJK>
-0x9002 # <CJK>
-0x9003 # <CJK>
-0x9004 # <CJK>
-0x9005 # <CJK>
-0x9006 # <CJK>
-0x9009 # <CJK>
-0x900A # <CJK>
-0x900B # <CJK>
-0x900D # <CJK>
-0x900F # <CJK>
-0x9010 # <CJK>
-0x9011 # <CJK>
-0x9012 # <CJK>
-0x9014 # <CJK>
-0x9016 # <CJK>
-0x9017 # <CJK>
-0x901A # <CJK>
-0x901B # <CJK>
-0x901D # <CJK>
-0x901E # <CJK>
-0x901F # <CJK>
-0x9020 # <CJK>
-0x9021 # <CJK>
-0x9022 # <CJK>
-0x9026 # <CJK>
-0x902D # <CJK>
-0x902E # <CJK>
-0x902F # <CJK>
-0x9035 # <CJK>
-0x9036 # <CJK>
-0x9038 # <CJK>
-0x903B # <CJK>
-0x903C # <CJK>
-0x903E # <CJK>
-0x9041 # <CJK>
-0x9042 # <CJK>
-0x9044 # <CJK>
-0x9047 # <CJK>
-0x904D # <CJK>
-0x904F # <CJK>
-0x9050 # <CJK>
-0x9051 # <CJK>
-0x9052 # <CJK>
-0x9053 # <CJK>
-0x9057 # <CJK>
-0x9058 # <CJK>
-0x905B # <CJK>
-0x9062 # <CJK>
-0x9063 # <CJK>
-0x9065 # <CJK>
-0x9068 # <CJK>
-0x906D # <CJK>
-0x906E # <CJK>
-0x9074 # <CJK>
-0x9075 # <CJK>
-0x907D # <CJK>
-0x907F # <CJK>
-0x9080 # <CJK>
-0x9082 # <CJK>
-0x9083 # <CJK>
-0x9088 # <CJK>
-0x908B # <CJK>
-0x9091 # <CJK>
-0x9093 # <CJK>
-0x9095 # <CJK>
-0x9097 # <CJK>
-0x9099 # <CJK>
-0x909B # <CJK>
-0x909D # <CJK>
-0x90A1 # <CJK>
-0x90A2 # <CJK>
-0x90A3 # <CJK>
-0x90A6 # <CJK>
-0x90AA # <CJK>
-0x90AC # <CJK>
-0x90AE # <CJK>
-0x90AF # <CJK>
-0x90B0 # <CJK>
-0x90B1 # <CJK>
-0x90B3 # <CJK>
-0x90B4 # <CJK>
-0x90B5 # <CJK>
-0x90B6 # <CJK>
-0x90B8 # <CJK>
-0x90B9 # <CJK>
-0x90BA # <CJK>
-0x90BB # <CJK>
-0x90BE # <CJK>
-0x90C1 # <CJK>
-0x90C4 # <CJK>
-0x90C5 # <CJK>
-0x90C7 # <CJK>
-0x90CA # <CJK>
-0x90CE # <CJK>
-0x90CF # <CJK>
-0x90D0 # <CJK>
-0x90D1 # <CJK>
-0x90D3 # <CJK>
-0x90D7 # <CJK>
-0x90DB # <CJK>
-0x90DC # <CJK>
-0x90DD # <CJK>
-0x90E1 # <CJK>
-0x90E2 # <CJK>
-0x90E6 # <CJK>
-0x90E7 # <CJK>
-0x90E8 # <CJK>
-0x90EB # <CJK>
-0x90ED # <CJK>
-0x90EF # <CJK>
-0x90F4 # <CJK>
-0x90F8 # <CJK>
-0x90FD # <CJK>
-0x90FE # <CJK>
-0x9102 # <CJK>
-0x9104 # <CJK>
-0x9119 # <CJK>
-0x911E # <CJK>
-0x9122 # <CJK>
-0x9123 # <CJK>
-0x912F # <CJK>
-0x9131 # <CJK>
-0x9139 # <CJK>
-0x9143 # <CJK>
-0x9146 # <CJK>
-0x9149 # <CJK>
-0x914A # <CJK>
-0x914B # <CJK>
-0x914C # <CJK>
-0x914D # <CJK>
-0x914E # <CJK>
-0x914F # <CJK>
-0x9150 # <CJK>
-0x9152 # <CJK>
-0x9157 # <CJK>
-0x915A # <CJK>
-0x915D # <CJK>
-0x915E # <CJK>
-0x9161 # <CJK>
-0x9162 # <CJK>
-0x9163 # <CJK>
-0x9164 # <CJK>
-0x9165 # <CJK>
-0x9169 # <CJK>
-0x916A # <CJK>
-0x916C # <CJK>
-0x916E # <CJK>
-0x916F # <CJK>
-0x9170 # <CJK>
-0x9171 # <CJK>
-0x9172 # <CJK>
-0x9174 # <CJK>
-0x9175 # <CJK>
-0x9176 # <CJK>
-0x9177 # <CJK>
-0x9178 # <CJK>
-0x9179 # <CJK>
-0x917D # <CJK>
-0x917E # <CJK>
-0x917F # <CJK>
-0x9185 # <CJK>
-0x9187 # <CJK>
-0x9189 # <CJK>
-0x918B # <CJK>
-0x918C # <CJK>
-0x918D # <CJK>
-0x9190 # <CJK>
-0x9191 # <CJK>
-0x9192 # <CJK>
-0x919A # <CJK>
-0x919B # <CJK>
-0x91A2 # <CJK>
-0x91A3 # <CJK>
-0x91AA # <CJK>
-0x91AD # <CJK>
-0x91AE # <CJK>
-0x91AF # <CJK>
-0x91B4 # <CJK>
-0x91B5 # <CJK>
-0x91BA # <CJK>
-0x91C7 # <CJK>
-0x91C9 # <CJK>
-0x91CA # <CJK>
-0x91CC # <CJK>
-0x91CD # <CJK>
-0x91CE # <CJK>
-0x91CF # <CJK>
-0x91D1 # <CJK>
-0x91DC # <CJK>
-0x9274 # <CJK>
-0x928E # <CJK>
-0x92AE # <CJK>
-0x92C8 # <CJK>
-0x933E # <CJK>
-0x936A # <CJK>
-0x938F # <CJK>
-0x93CA # <CJK>
-0x93D6 # <CJK>
-0x943E # <CJK>
-0x946B # <CJK>
-0x9485 # <CJK>
-0x9486 # <CJK>
-0x9487 # <CJK>
-0x9488 # <CJK>
-0x9489 # <CJK>
-0x948A # <CJK>
-0x948B # <CJK>
-0x948C # <CJK>
-0x948D # <CJK>
-0x948E # <CJK>
-0x948F # <CJK>
-0x9490 # <CJK>
-0x9492 # <CJK>
-0x9493 # <CJK>
-0x9494 # <CJK>
-0x9495 # <CJK>
-0x9497 # <CJK>
-0x9499 # <CJK>
-0x949A # <CJK>
-0x949B # <CJK>
-0x949C # <CJK>
-0x949D # <CJK>
-0x949E # <CJK>
-0x949F # <CJK>
-0x94A0 # <CJK>
-0x94A1 # <CJK>
-0x94A2 # <CJK>
-0x94A3 # <CJK>
-0x94A4 # <CJK>
-0x94A5 # <CJK>
-0x94A6 # <CJK>
-0x94A7 # <CJK>
-0x94A8 # <CJK>
-0x94A9 # <CJK>
-0x94AA # <CJK>
-0x94AB # <CJK>
-0x94AC # <CJK>
-0x94AD # <CJK>
-0x94AE # <CJK>
-0x94AF # <CJK>
-0x94B0 # <CJK>
-0x94B1 # <CJK>
-0x94B2 # <CJK>
-0x94B3 # <CJK>
-0x94B4 # <CJK>
-0x94B5 # <CJK>
-0x94B6 # <CJK>
-0x94B7 # <CJK>
-0x94B8 # <CJK>
-0x94B9 # <CJK>
-0x94BA # <CJK>
-0x94BB # <CJK>
-0x94BC # <CJK>
-0x94BD # <CJK>
-0x94BE # <CJK>
-0x94BF # <CJK>
-0x94C0 # <CJK>
-0x94C1 # <CJK>
-0x94C2 # <CJK>
-0x94C3 # <CJK>
-0x94C4 # <CJK>
-0x94C5 # <CJK>
-0x94C6 # <CJK>
-0x94C8 # <CJK>
-0x94C9 # <CJK>
-0x94CA # <CJK>
-0x94CB # <CJK>
-0x94CC # <CJK>
-0x94CD # <CJK>
-0x94CE # <CJK>
-0x94D0 # <CJK>
-0x94D1 # <CJK>
-0x94D2 # <CJK>
-0x94D5 # <CJK>
-0x94D6 # <CJK>
-0x94D7 # <CJK>
-0x94D8 # <CJK>
-0x94D9 # <CJK>
-0x94DB # <CJK>
-0x94DC # <CJK>
-0x94DD # <CJK>
-0x94DE # <CJK>
-0x94DF # <CJK>
-0x94E0 # <CJK>
-0x94E1 # <CJK>
-0x94E2 # <CJK>
-0x94E3 # <CJK>
-0x94E4 # <CJK>
-0x94E5 # <CJK>
-0x94E7 # <CJK>
-0x94E8 # <CJK>
-0x94E9 # <CJK>
-0x94EA # <CJK>
-0x94EB # <CJK>
-0x94EC # <CJK>
-0x94ED # <CJK>
-0x94EE # <CJK>
-0x94EF # <CJK>
-0x94F0 # <CJK>
-0x94F1 # <CJK>
-0x94F2 # <CJK>
-0x94F3 # <CJK>
-0x94F4 # <CJK>
-0x94F5 # <CJK>
-0x94F6 # <CJK>
-0x94F7 # <CJK>
-0x94F8 # <CJK>
-0x94F9 # <CJK>
-0x94FA # <CJK>
-0x94FC # <CJK>
-0x94FD # <CJK>
-0x94FE # <CJK>
-0x94FF # <CJK>
-0x9500 # <CJK>
-0x9501 # <CJK>
-0x9502 # <CJK>
-0x9503 # <CJK>
-0x9504 # <CJK>
-0x9505 # <CJK>
-0x9506 # <CJK>
-0x9507 # <CJK>
-0x9508 # <CJK>
-0x9509 # <CJK>
-0x950A # <CJK>
-0x950B # <CJK>
-0x950C # <CJK>
-0x950D # <CJK>
-0x950E # <CJK>
-0x950F # <CJK>
-0x9510 # <CJK>
-0x9511 # <CJK>
-0x9512 # <CJK>
-0x9513 # <CJK>
-0x9514 # <CJK>
-0x9515 # <CJK>
-0x9516 # <CJK>
-0x9517 # <CJK>
-0x9518 # <CJK>
-0x9519 # <CJK>
-0x951A # <CJK>
-0x951B # <CJK>
-0x951D # <CJK>
-0x951E # <CJK>
-0x951F # <CJK>
-0x9521 # <CJK>
-0x9522 # <CJK>
-0x9523 # <CJK>
-0x9524 # <CJK>
-0x9525 # <CJK>
-0x9526 # <CJK>
-0x9528 # <CJK>
-0x9529 # <CJK>
-0x952A # <CJK>
-0x952B # <CJK>
-0x952C # <CJK>
-0x952D # <CJK>
-0x952E # <CJK>
-0x952F # <CJK>
-0x9530 # <CJK>
-0x9531 # <CJK>
-0x9532 # <CJK>
-0x9534 # <CJK>
-0x9535 # <CJK>
-0x9536 # <CJK>
-0x9537 # <CJK>
-0x9538 # <CJK>
-0x9539 # <CJK>
-0x953A # <CJK>
-0x953B # <CJK>
-0x953C # <CJK>
-0x953E # <CJK>
-0x953F # <CJK>
-0x9540 # <CJK>
-0x9541 # <CJK>
-0x9542 # <CJK>
-0x9544 # <CJK>
-0x9545 # <CJK>
-0x9546 # <CJK>
-0x9547 # <CJK>
-0x9549 # <CJK>
-0x954A # <CJK>
-0x954C # <CJK>
-0x954D # <CJK>
-0x954E # <CJK>
-0x954F # <CJK>
-0x9550 # <CJK>
-0x9551 # <CJK>
-0x9552 # <CJK>
-0x9553 # <CJK>
-0x9554 # <CJK>
-0x9556 # <CJK>
-0x9557 # <CJK>
-0x9558 # <CJK>
-0x9559 # <CJK>
-0x955B # <CJK>
-0x955C # <CJK>
-0x955D # <CJK>
-0x955E # <CJK>
-0x955F # <CJK>
-0x9561 # <CJK>
-0x9562 # <CJK>
-0x9563 # <CJK>
-0x9564 # <CJK>
-0x9565 # <CJK>
-0x9566 # <CJK>
-0x9567 # <CJK>
-0x9568 # <CJK>
-0x9569 # <CJK>
-0x956A # <CJK>
-0x956B # <CJK>
-0x956C # <CJK>
-0x956D # <CJK>
-0x956F # <CJK>
-0x9570 # <CJK>
-0x9571 # <CJK>
-0x9572 # <CJK>
-0x9573 # <CJK>
-0x9576 # <CJK>
-0x957F # <CJK>
-0x95E8 # <CJK>
-0x95E9 # <CJK>
-0x95EA # <CJK>
-0x95EB # <CJK>
-0x95ED # <CJK>
-0x95EE # <CJK>
-0x95EF # <CJK>
-0x95F0 # <CJK>
-0x95F1 # <CJK>
-0x95F2 # <CJK>
-0x95F3 # <CJK>
-0x95F4 # <CJK>
-0x95F5 # <CJK>
-0x95F6 # <CJK>
-0x95F7 # <CJK>
-0x95F8 # <CJK>
-0x95F9 # <CJK>
-0x95FA # <CJK>
-0x95FB # <CJK>
-0x95FC # <CJK>
-0x95FD # <CJK>
-0x95FE # <CJK>
-0x9600 # <CJK>
-0x9601 # <CJK>
-0x9602 # <CJK>
-0x9603 # <CJK>
-0x9604 # <CJK>
-0x9605 # <CJK>
-0x9606 # <CJK>
-0x9608 # <CJK>
-0x9609 # <CJK>
-0x960A # <CJK>
-0x960B # <CJK>
-0x960C # <CJK>
-0x960D # <CJK>
-0x960E # <CJK>
-0x960F # <CJK>
-0x9610 # <CJK>
-0x9611 # <CJK>
-0x9612 # <CJK>
-0x9614 # <CJK>
-0x9615 # <CJK>
-0x9616 # <CJK>
-0x9617 # <CJK>
-0x9619 # <CJK>
-0x961A # <CJK>
-0x961C # <CJK>
-0x961D # <CJK>
-0x961F # <CJK>
-0x9621 # <CJK>
-0x9622 # <CJK>
-0x962A # <CJK>
-0x962E # <CJK>
-0x9631 # <CJK>
-0x9632 # <CJK>
-0x9633 # <CJK>
-0x9634 # <CJK>
-0x9635 # <CJK>
-0x9636 # <CJK>
-0x963B # <CJK>
-0x963C # <CJK>
-0x963D # <CJK>
-0x963F # <CJK>
-0x9640 # <CJK>
-0x9642 # <CJK>
-0x9644 # <CJK>
-0x9645 # <CJK>
-0x9646 # <CJK>
-0x9647 # <CJK>
-0x9648 # <CJK>
-0x9649 # <CJK>
-0x964B # <CJK>
-0x964C # <CJK>
-0x964D # <CJK>
-0x9650 # <CJK>
-0x9654 # <CJK>
-0x9655 # <CJK>
-0x965B # <CJK>
-0x965F # <CJK>
-0x9661 # <CJK>
-0x9662 # <CJK>
-0x9664 # <CJK>
-0x9667 # <CJK>
-0x9668 # <CJK>
-0x9669 # <CJK>
-0x966A # <CJK>
-0x966C # <CJK>
-0x9672 # <CJK>
-0x9674 # <CJK>
-0x9675 # <CJK>
-0x9676 # <CJK>
-0x9677 # <CJK>
-0x9685 # <CJK>
-0x9686 # <CJK>
-0x9688 # <CJK>
-0x968B # <CJK>
-0x968D # <CJK>
-0x968F # <CJK>
-0x9690 # <CJK>
-0x9694 # <CJK>
-0x9697 # <CJK>
-0x9698 # <CJK>
-0x9699 # <CJK>
-0x969C # <CJK>
-0x96A7 # <CJK>
-0x96B0 # <CJK>
-0x96B3 # <CJK>
-0x96B6 # <CJK>
-0x96B9 # <CJK>
-0x96BC # <CJK>
-0x96BD # <CJK>
-0x96BE # <CJK>
-0x96C0 # <CJK>
-0x96C1 # <CJK>
-0x96C4 # <CJK>
-0x96C5 # <CJK>
-0x96C6 # <CJK>
-0x96C7 # <CJK>
-0x96C9 # <CJK>
-0x96CC # <CJK>
-0x96CD # <CJK>
-0x96CE # <CJK>
-0x96CF # <CJK>
-0x96D2 # <CJK>
-0x96D5 # <CJK>
-0x96E0 # <CJK>
-0x96E8 # <CJK>
-0x96E9 # <CJK>
-0x96EA # <CJK>
-0x96EF # <CJK>
-0x96F3 # <CJK>
-0x96F6 # <CJK>
-0x96F7 # <CJK>
-0x96F9 # <CJK>
-0x96FE # <CJK>
-0x9700 # <CJK>
-0x9701 # <CJK>
-0x9704 # <CJK>
-0x9706 # <CJK>
-0x9707 # <CJK>
-0x9708 # <CJK>
-0x9709 # <CJK>
-0x970D # <CJK>
-0x970E # <CJK>
-0x970F # <CJK>
-0x9713 # <CJK>
-0x9716 # <CJK>
-0x971C # <CJK>
-0x971E # <CJK>
-0x972A # <CJK>
-0x972D # <CJK>
-0x9730 # <CJK>
-0x9732 # <CJK>
-0x9738 # <CJK>
-0x9739 # <CJK>
-0x973E # <CJK>
-0x9752 # <CJK>
-0x9753 # <CJK>
-0x9756 # <CJK>
-0x9759 # <CJK>
-0x975B # <CJK>
-0x975E # <CJK>
-0x9760 # <CJK>
-0x9761 # <CJK>
-0x9762 # <CJK>
-0x9765 # <CJK>
-0x9769 # <CJK>
-0x9773 # <CJK>
-0x9774 # <CJK>
-0x9776 # <CJK>
-0x977C # <CJK>
-0x9785 # <CJK>
-0x978B # <CJK>
-0x978D # <CJK>
-0x9791 # <CJK>
-0x9792 # <CJK>
-0x9794 # <CJK>
-0x9798 # <CJK>
-0x97A0 # <CJK>
-0x97A3 # <CJK>
-0x97AB # <CJK>
-0x97AD # <CJK>
-0x97AF # <CJK>
-0x97B2 # <CJK>
-0x97B4 # <CJK>
-0x97E6 # <CJK>
-0x97E7 # <CJK>
-0x97E9 # <CJK>
-0x97EA # <CJK>
-0x97EB # <CJK>
-0x97EC # <CJK>
-0x97ED # <CJK>
-0x97F3 # <CJK>
-0x97F5 # <CJK>
-0x97F6 # <CJK>
-0x9875 # <CJK>
-0x9876 # <CJK>
-0x9877 # <CJK>
-0x9878 # <CJK>
-0x9879 # <CJK>
-0x987A # <CJK>
-0x987B # <CJK>
-0x987C # <CJK>
-0x987D # <CJK>
-0x987E # <CJK>
-0x987F # <CJK>
-0x9880 # <CJK>
-0x9881 # <CJK>
-0x9882 # <CJK>
-0x9883 # <CJK>
-0x9884 # <CJK>
-0x9885 # <CJK>
-0x9886 # <CJK>
-0x9887 # <CJK>
-0x9888 # <CJK>
-0x9889 # <CJK>
-0x988A # <CJK>
-0x988C # <CJK>
-0x988D # <CJK>
-0x988F # <CJK>
-0x9890 # <CJK>
-0x9891 # <CJK>
-0x9893 # <CJK>
-0x9894 # <CJK>
-0x9896 # <CJK>
-0x9897 # <CJK>
-0x9898 # <CJK>
-0x989A # <CJK>
-0x989B # <CJK>
-0x989C # <CJK>
-0x989D # <CJK>
-0x989E # <CJK>
-0x989F # <CJK>
-0x98A0 # <CJK>
-0x98A1 # <CJK>
-0x98A2 # <CJK>
-0x98A4 # <CJK>
-0x98A5 # <CJK>
-0x98A6 # <CJK>
-0x98A7 # <CJK>
-0x98CE # <CJK>
-0x98D1 # <CJK>
-0x98D2 # <CJK>
-0x98D3 # <CJK>
-0x98D5 # <CJK>
-0x98D8 # <CJK>
-0x98D9 # <CJK>
-0x98DA # <CJK>
-0x98DE # <CJK>
-0x98DF # <CJK>
-0x98E7 # <CJK>
-0x98E8 # <CJK>
-0x990D # <CJK>
-0x9910 # <CJK>
-0x992E # <CJK>
-0x9954 # <CJK>
-0x9955 # <CJK>
-0x9963 # <CJK>
-0x9965 # <CJK>
-0x9967 # <CJK>
-0x9968 # <CJK>
-0x9969 # <CJK>
-0x996A # <CJK>
-0x996B # <CJK>
-0x996C # <CJK>
-0x996D # <CJK>
-0x996E # <CJK>
-0x996F # <CJK>
-0x9970 # <CJK>
-0x9971 # <CJK>
-0x9972 # <CJK>
-0x9974 # <CJK>
-0x9975 # <CJK>
-0x9976 # <CJK>
-0x9977 # <CJK>
-0x997A # <CJK>
-0x997C # <CJK>
-0x997D # <CJK>
-0x997F # <CJK>
-0x9980 # <CJK>
-0x9981 # <CJK>
-0x9984 # <CJK>
-0x9985 # <CJK>
-0x9986 # <CJK>
-0x9987 # <CJK>
-0x9988 # <CJK>
-0x998A # <CJK>
-0x998B # <CJK>
-0x998D # <CJK>
-0x998F # <CJK>
-0x9990 # <CJK>
-0x9991 # <CJK>
-0x9992 # <CJK>
-0x9993 # <CJK>
-0x9994 # <CJK>
-0x9995 # <CJK>
-0x9996 # <CJK>
-0x9997 # <CJK>
-0x9998 # <CJK>
-0x9999 # <CJK>
-0x99A5 # <CJK>
-0x99A8 # <CJK>
-0x9A6C # <CJK>
-0x9A6D # <CJK>
-0x9A6E # <CJK>
-0x9A6F # <CJK>
-0x9A70 # <CJK>
-0x9A71 # <CJK>
-0x9A73 # <CJK>
-0x9A74 # <CJK>
-0x9A75 # <CJK>
-0x9A76 # <CJK>
-0x9A77 # <CJK>
-0x9A78 # <CJK>
-0x9A79 # <CJK>
-0x9A7A # <CJK>
-0x9A7B # <CJK>
-0x9A7C # <CJK>
-0x9A7D # <CJK>
-0x9A7E # <CJK>
-0x9A7F # <CJK>
-0x9A80 # <CJK>
-0x9A81 # <CJK>
-0x9A82 # <CJK>
-0x9A84 # <CJK>
-0x9A85 # <CJK>
-0x9A86 # <CJK>
-0x9A87 # <CJK>
-0x9A88 # <CJK>
-0x9A8A # <CJK>
-0x9A8B # <CJK>
-0x9A8C # <CJK>
-0x9A8F # <CJK>
-0x9A90 # <CJK>
-0x9A91 # <CJK>
-0x9A92 # <CJK>
-0x9A93 # <CJK>
-0x9A96 # <CJK>
-0x9A97 # <CJK>
-0x9A98 # <CJK>
-0x9A9A # <CJK>
-0x9A9B # <CJK>
-0x9A9C # <CJK>
-0x9A9D # <CJK>
-0x9A9E # <CJK>
-0x9A9F # <CJK>
-0x9AA0 # <CJK>
-0x9AA1 # <CJK>
-0x9AA2 # <CJK>
-0x9AA3 # <CJK>
-0x9AA4 # <CJK>
-0x9AA5 # <CJK>
-0x9AA7 # <CJK>
-0x9AA8 # <CJK>
-0x9AB0 # <CJK>
-0x9AB1 # <CJK>
-0x9AB6 # <CJK>
-0x9AB7 # <CJK>
-0x9AB8 # <CJK>
-0x9ABA # <CJK>
-0x9ABC # <CJK>
-0x9AC0 # <CJK>
-0x9AC1 # <CJK>
-0x9AC2 # <CJK>
-0x9AC5 # <CJK>
-0x9ACB # <CJK>
-0x9ACC # <CJK>
-0x9AD1 # <CJK>
-0x9AD3 # <CJK>
-0x9AD8 # <CJK>
-0x9ADF # <CJK>
-0x9AE1 # <CJK>
-0x9AE6 # <CJK>
-0x9AEB # <CJK>
-0x9AED # <CJK>
-0x9AEF # <CJK>
-0x9AF9 # <CJK>
-0x9AFB # <CJK>
-0x9B03 # <CJK>
-0x9B08 # <CJK>
-0x9B0F # <CJK>
-0x9B13 # <CJK>
-0x9B1F # <CJK>
-0x9B23 # <CJK>
-0x9B2F # <CJK>
-0x9B32 # <CJK>
-0x9B3B # <CJK>
-0x9B3C # <CJK>
-0x9B41 # <CJK>
-0x9B42 # <CJK>
-0x9B43 # <CJK>
-0x9B44 # <CJK>
-0x9B45 # <CJK>
-0x9B47 # <CJK>
-0x9B48 # <CJK>
-0x9B49 # <CJK>
-0x9B4D # <CJK>
-0x9B4F # <CJK>
-0x9B51 # <CJK>
-0x9B54 # <CJK>
-0x9C7C # <CJK>
-0x9C7F # <CJK>
-0x9C81 # <CJK>
-0x9C82 # <CJK>
-0x9C85 # <CJK>
-0x9C86 # <CJK>
-0x9C87 # <CJK>
-0x9C88 # <CJK>
-0x9C8B # <CJK>
-0x9C8D # <CJK>
-0x9C8E # <CJK>
-0x9C90 # <CJK>
-0x9C91 # <CJK>
-0x9C92 # <CJK>
-0x9C94 # <CJK>
-0x9C95 # <CJK>
-0x9C9A # <CJK>
-0x9C9B # <CJK>
-0x9C9C # <CJK>
-0x9C9E # <CJK>
-0x9C9F # <CJK>
-0x9CA0 # <CJK>
-0x9CA1 # <CJK>
-0x9CA2 # <CJK>
-0x9CA3 # <CJK>
-0x9CA4 # <CJK>
-0x9CA5 # <CJK>
-0x9CA6 # <CJK>
-0x9CA7 # <CJK>
-0x9CA8 # <CJK>
-0x9CA9 # <CJK>
-0x9CAB # <CJK>
-0x9CAD # <CJK>
-0x9CAE # <CJK>
-0x9CB0 # <CJK>
-0x9CB1 # <CJK>
-0x9CB2 # <CJK>
-0x9CB3 # <CJK>
-0x9CB4 # <CJK>
-0x9CB5 # <CJK>
-0x9CB6 # <CJK>
-0x9CB7 # <CJK>
-0x9CB8 # <CJK>
-0x9CBA # <CJK>
-0x9CBB # <CJK>
-0x9CBC # <CJK>
-0x9CBD # <CJK>
-0x9CC3 # <CJK>
-0x9CC4 # <CJK>
-0x9CC5 # <CJK>
-0x9CC6 # <CJK>
-0x9CC7 # <CJK>
-0x9CCA # <CJK>
-0x9CCB # <CJK>
-0x9CCC # <CJK>
-0x9CCD # <CJK>
-0x9CCE # <CJK>
-0x9CCF # <CJK>
-0x9CD0 # <CJK>
-0x9CD3 # <CJK>
-0x9CD4 # <CJK>
-0x9CD5 # <CJK>
-0x9CD6 # <CJK>
-0x9CD7 # <CJK>
-0x9CD8 # <CJK>
-0x9CD9 # <CJK>
-0x9CDC # <CJK>
-0x9CDD # <CJK>
-0x9CDE # <CJK>
-0x9CDF # <CJK>
-0x9CE2 # <CJK>
-0x9E1F # <CJK>
-0x9E20 # <CJK>
-0x9E21 # <CJK>
-0x9E22 # <CJK>
-0x9E23 # <CJK>
-0x9E25 # <CJK>
-0x9E26 # <CJK>
-0x9E28 # <CJK>
-0x9E29 # <CJK>
-0x9E2A # <CJK>
-0x9E2B # <CJK>
-0x9E2C # <CJK>
-0x9E2D # <CJK>
-0x9E2F # <CJK>
-0x9E31 # <CJK>
-0x9E32 # <CJK>
-0x9E33 # <CJK>
-0x9E35 # <CJK>
-0x9E36 # <CJK>
-0x9E37 # <CJK>
-0x9E38 # <CJK>
-0x9E39 # <CJK>
-0x9E3A # <CJK>
-0x9E3D # <CJK>
-0x9E3E # <CJK>
-0x9E3F # <CJK>
-0x9E41 # <CJK>
-0x9E42 # <CJK>
-0x9E43 # <CJK>
-0x9E44 # <CJK>
-0x9E45 # <CJK>
-0x9E46 # <CJK>
-0x9E47 # <CJK>
-0x9E48 # <CJK>
-0x9E49 # <CJK>
-0x9E4A # <CJK>
-0x9E4B # <CJK>
-0x9E4C # <CJK>
-0x9E4E # <CJK>
-0x9E4F # <CJK>
-0x9E51 # <CJK>
-0x9E55 # <CJK>
-0x9E57 # <CJK>
-0x9E58 # <CJK>
-0x9E5A # <CJK>
-0x9E5B # <CJK>
-0x9E5C # <CJK>
-0x9E5E # <CJK>
-0x9E63 # <CJK>
-0x9E64 # <CJK>
-0x9E66 # <CJK>
-0x9E67 # <CJK>
-0x9E68 # <CJK>
-0x9E69 # <CJK>
-0x9E6A # <CJK>
-0x9E6B # <CJK>
-0x9E6C # <CJK>
-0x9E6D # <CJK>
-0x9E70 # <CJK>
-0x9E71 # <CJK>
-0x9E73 # <CJK>
-0x9E7E # <CJK>
-0x9E7F # <CJK>
-0x9E82 # <CJK>
-0x9E87 # <CJK>
-0x9E88 # <CJK>
-0x9E8B # <CJK>
-0x9E92 # <CJK>
-0x9E93 # <CJK>
-0x9E9D # <CJK>
-0x9E9F # <CJK>
-0x9EA6 # <CJK>
-0x9EB4 # <CJK>
-0x9EB8 # <CJK>
-0x9EBB # <CJK>
-0x9EBD # <CJK>
-0x9EBE # <CJK>
-0x9EC4 # <CJK>
-0x9EC9 # <CJK>
-0x9ECD # <CJK>
-0x9ECE # <CJK>
-0x9ECF # <CJK>
-0x9ED1 # <CJK>
-0x9ED4 # <CJK>
-0x9ED8 # <CJK>
-0x9EDB # <CJK>
-0x9EDC # <CJK>
-0x9EDD # <CJK>
-0x9EDF # <CJK>
-0x9EE0 # <CJK>
-0x9EE2 # <CJK>
-0x9EE5 # <CJK>
-0x9EE7 # <CJK>
-0x9EE9 # <CJK>
-0x9EEA # <CJK>
-0x9EEF # <CJK>
-0x9EF9 # <CJK>
-0x9EFB # <CJK>
-0x9EFC # <CJK>
-0x9EFE # <CJK>
-0x9F0B # <CJK>
-0x9F0D # <CJK>
-0x9F0E # <CJK>
-0x9F10 # <CJK>
-0x9F13 # <CJK>
-0x9F17 # <CJK>
-0x9F19 # <CJK>
-0x9F20 # <CJK>
-0x9F22 # <CJK>
-0x9F2C # <CJK>
-0x9F2F # <CJK>
-0x9F37 # <CJK>
-0x9F39 # <CJK>
-0x9F3B # <CJK>
-0x9F3D # <CJK>
-0x9F3E # <CJK>
-0x9F44 # <CJK>
-0x9F50 # <CJK>
-0x9F51 # <CJK>
-0x9F7F # <CJK>
-0x9F80 # <CJK>
-0x9F83 # <CJK>
-0x9F84 # <CJK>
-0x9F85 # <CJK>
-0x9F86 # <CJK>
-0x9F87 # <CJK>
-0x9F88 # <CJK>
-0x9F89 # <CJK>
-0x9F8A # <CJK>
-0x9F8B # <CJK>
-0x9F8C # <CJK>
-0x9F99 # <CJK>
-0x9F9A # <CJK>
-0x9F9B # <CJK>
-0x9F9F # <CJK>
-0x9FA0 # <CJK>
+# +# fontconfig/fc-lang/zh_cn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese (simplified) (ZH-CN) +# +# Coverage computed from GB2312 +# +0x02C7 # CARON (Mandarin Chinese third tone) +0x02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone) +0x4E00 # <CJK> +0x4E01 # <CJK> +0x4E03 # <CJK> +0x4E07 # <CJK> +0x4E08 # <CJK> +0x4E09 # <CJK> +0x4E0A # <CJK> +0x4E0B # <CJK> +0x4E0C # <CJK> +0x4E0D # <CJK> +0x4E0E # <CJK> +0x4E10 # <CJK> +0x4E11 # <CJK> +0x4E13 # <CJK> +0x4E14 # <CJK> +0x4E15 # <CJK> +0x4E16 # <CJK> +0x4E18 # <CJK> +0x4E19 # <CJK> +0x4E1A # <CJK> +0x4E1B # <CJK> +0x4E1C # <CJK> +0x4E1D # <CJK> +0x4E1E # <CJK> +0x4E22 # <CJK> +0x4E24 # <CJK> +0x4E25 # <CJK> +0x4E27 # <CJK> +0x4E28 # <CJK> +0x4E2A # <CJK> +0x4E2B # <CJK> +0x4E2C # <CJK> +0x4E2D # <CJK> +0x4E30 # <CJK> +0x4E32 # <CJK> +0x4E34 # <CJK> +0x4E36 # <CJK> +0x4E38 # <CJK> +0x4E39 # <CJK> +0x4E3A # <CJK> +0x4E3B # <CJK> +0x4E3D # <CJK> +0x4E3E # <CJK> +0x4E3F # <CJK> +0x4E43 # <CJK> +0x4E45 # <CJK> +0x4E47 # <CJK> +0x4E48 # <CJK> +0x4E49 # <CJK> +0x4E4B # <CJK> +0x4E4C # <CJK> +0x4E4D # <CJK> +0x4E4E # <CJK> +0x4E4F # <CJK> +0x4E50 # <CJK> +0x4E52 # <CJK> +0x4E53 # <CJK> +0x4E54 # <CJK> +0x4E56 # <CJK> +0x4E58 # <CJK> +0x4E59 # <CJK> +0x4E5C # <CJK> +0x4E5D # <CJK> +0x4E5E # <CJK> +0x4E5F # <CJK> +0x4E60 # <CJK> +0x4E61 # <CJK> +0x4E66 # <CJK> +0x4E69 # <CJK> +0x4E70 # <CJK> +0x4E71 # <CJK> +0x4E73 # <CJK> +0x4E7E # <CJK> +0x4E86 # <CJK> +0x4E88 # <CJK> +0x4E89 # <CJK> +0x4E8B # <CJK> +0x4E8C # <CJK> +0x4E8D # <CJK> +0x4E8E # <CJK> +0x4E8F # <CJK> +0x4E91 # <CJK> +0x4E92 # <CJK> +0x4E93 # <CJK> +0x4E94 # <CJK> +0x4E95 # <CJK> +0x4E98 # <CJK> +0x4E9A # <CJK> +0x4E9B # <CJK> +0x4E9F # <CJK> +0x4EA0 # <CJK> +0x4EA1 # <CJK> +0x4EA2 # <CJK> +0x4EA4 # <CJK> +0x4EA5 # <CJK> +0x4EA6 # <CJK> +0x4EA7 # <CJK> +0x4EA8 # <CJK> +0x4EA9 # <CJK> +0x4EAB # <CJK> +0x4EAC # <CJK> +0x4EAD # <CJK> +0x4EAE # <CJK> +0x4EB2 # <CJK> +0x4EB3 # <CJK> +0x4EB5 # <CJK> +0x4EBA # <CJK> +0x4EBB # <CJK> +0x4EBF # <CJK> +0x4EC0 # <CJK> +0x4EC1 # <CJK> +0x4EC2 # <CJK> +0x4EC3 # <CJK> +0x4EC4 # <CJK> +0x4EC5 # <CJK> +0x4EC6 # <CJK> +0x4EC7 # <CJK> +0x4EC9 # <CJK> +0x4ECA # <CJK> +0x4ECB # <CJK> +0x4ECD # <CJK> +0x4ECE # <CJK> +0x4ED1 # <CJK> +0x4ED3 # <CJK> +0x4ED4 # <CJK> +0x4ED5 # <CJK> +0x4ED6 # <CJK> +0x4ED7 # <CJK> +0x4ED8 # <CJK> +0x4ED9 # <CJK> +0x4EDD # <CJK> +0x4EDE # <CJK> +0x4EDF # <CJK> +0x4EE1 # <CJK> +0x4EE3 # <CJK> +0x4EE4 # <CJK> +0x4EE5 # <CJK> +0x4EE8 # <CJK> +0x4EEA # <CJK> +0x4EEB # <CJK> +0x4EEC # <CJK> +0x4EF0 # <CJK> +0x4EF2 # <CJK> +0x4EF3 # <CJK> +0x4EF5 # <CJK> +0x4EF6 # <CJK> +0x4EF7 # <CJK> +0x4EFB # <CJK> +0x4EFD # <CJK> +0x4EFF # <CJK> +0x4F01 # <CJK> +0x4F09 # <CJK> +0x4F0A # <CJK> +0x4F0D # <CJK> +0x4F0E # <CJK> +0x4F0F # <CJK> +0x4F10 # <CJK> +0x4F11 # <CJK> +0x4F17 # <CJK> +0x4F18 # <CJK> +0x4F19 # <CJK> +0x4F1A # <CJK> +0x4F1B # <CJK> +0x4F1E # <CJK> +0x4F1F # <CJK> +0x4F20 # <CJK> +0x4F22 # <CJK> +0x4F24 # <CJK> +0x4F25 # <CJK> +0x4F26 # <CJK> +0x4F27 # <CJK> +0x4F2A # <CJK> +0x4F2B # <CJK> +0x4F2F # <CJK> +0x4F30 # <CJK> +0x4F32 # <CJK> +0x4F34 # <CJK> +0x4F36 # <CJK> +0x4F38 # <CJK> +0x4F3A # <CJK> +0x4F3C # <CJK> +0x4F3D # <CJK> +0x4F43 # <CJK> +0x4F46 # <CJK> +0x4F4D # <CJK> +0x4F4E # <CJK> +0x4F4F # <CJK> +0x4F50 # <CJK> +0x4F51 # <CJK> +0x4F53 # <CJK> +0x4F55 # <CJK> +0x4F57 # <CJK> +0x4F58 # <CJK> +0x4F59 # <CJK> +0x4F5A # <CJK> +0x4F5B # <CJK> +0x4F5C # <CJK> +0x4F5D # <CJK> +0x4F5E # <CJK> +0x4F5F # <CJK> +0x4F60 # <CJK> +0x4F63 # <CJK> +0x4F64 # <CJK> +0x4F65 # <CJK> +0x4F67 # <CJK> +0x4F69 # <CJK> +0x4F6C # <CJK> +0x4F6F # <CJK> +0x4F70 # <CJK> +0x4F73 # <CJK> +0x4F74 # <CJK> +0x4F76 # <CJK> +0x4F7B # <CJK> +0x4F7C # <CJK> +0x4F7E # <CJK> +0x4F7F # <CJK> +0x4F83 # <CJK> +0x4F84 # <CJK> +0x4F88 # <CJK> +0x4F89 # <CJK> +0x4F8B # <CJK> +0x4F8D # <CJK> +0x4F8F # <CJK> +0x4F91 # <CJK> +0x4F94 # <CJK> +0x4F97 # <CJK> +0x4F9B # <CJK> +0x4F9D # <CJK> +0x4FA0 # <CJK> +0x4FA3 # <CJK> +0x4FA5 # <CJK> +0x4FA6 # <CJK> +0x4FA7 # <CJK> +0x4FA8 # <CJK> +0x4FA9 # <CJK> +0x4FAA # <CJK> +0x4FAC # <CJK> +0x4FAE # <CJK> +0x4FAF # <CJK> +0x4FB5 # <CJK> +0x4FBF # <CJK> +0x4FC3 # <CJK> +0x4FC4 # <CJK> +0x4FC5 # <CJK> +0x4FCA # <CJK> +0x4FCE # <CJK> +0x4FCF # <CJK> +0x4FD0 # <CJK> +0x4FD1 # <CJK> +0x4FD7 # <CJK> +0x4FD8 # <CJK> +0x4FDA # <CJK> +0x4FDC # <CJK> +0x4FDD # <CJK> +0x4FDE # <CJK> +0x4FDF # <CJK> +0x4FE1 # <CJK> +0x4FE3 # <CJK> +0x4FE6 # <CJK> +0x4FE8 # <CJK> +0x4FE9 # <CJK> +0x4FEA # <CJK> +0x4FED # <CJK> +0x4FEE # <CJK> +0x4FEF # <CJK> +0x4FF1 # <CJK> +0x4FF3 # <CJK> +0x4FF8 # <CJK> +0x4FFA # <CJK> +0x4FFE # <CJK> +0x500C # <CJK> +0x500D # <CJK> +0x500F # <CJK> +0x5012 # <CJK> +0x5014 # <CJK> +0x5018 # <CJK> +0x5019 # <CJK> +0x501A # <CJK> +0x501C # <CJK> +0x501F # <CJK> +0x5021 # <CJK> +0x5025 # <CJK> +0x5026 # <CJK> +0x5028 # <CJK> +0x5029 # <CJK> +0x502A # <CJK> +0x502C # <CJK> +0x502D # <CJK> +0x502E # <CJK> +0x503A # <CJK> +0x503C # <CJK> +0x503E # <CJK> +0x5043 # <CJK> +0x5047 # <CJK> +0x5048 # <CJK> +0x504C # <CJK> +0x504E # <CJK> +0x504F # <CJK> +0x5055 # <CJK> +0x505A # <CJK> +0x505C # <CJK> +0x5065 # <CJK> +0x506C # <CJK> +0x5076 # <CJK> +0x5077 # <CJK> +0x507B # <CJK> +0x507E # <CJK> +0x507F # <CJK> +0x5080 # <CJK> +0x5085 # <CJK> +0x5088 # <CJK> +0x508D # <CJK> +0x50A3 # <CJK> +0x50A5 # <CJK> +0x50A7 # <CJK> +0x50A8 # <CJK> +0x50A9 # <CJK> +0x50AC # <CJK> +0x50B2 # <CJK> +0x50BA # <CJK> +0x50BB # <CJK> +0x50CF # <CJK> +0x50D6 # <CJK> +0x50DA # <CJK> +0x50E6 # <CJK> +0x50E7 # <CJK> +0x50EC # <CJK> +0x50ED # <CJK> +0x50EE # <CJK> +0x50F3 # <CJK> +0x50F5 # <CJK> +0x50FB # <CJK> +0x5106 # <CJK> +0x5107 # <CJK> +0x510B # <CJK> +0x5112 # <CJK> +0x5121 # <CJK> +0x513F # <CJK> +0x5140 # <CJK> +0x5141 # <CJK> +0x5143 # <CJK> +0x5144 # <CJK> +0x5145 # <CJK> +0x5146 # <CJK> +0x5148 # <CJK> +0x5149 # <CJK> +0x514B # <CJK> +0x514D # <CJK> +0x5151 # <CJK> +0x5154 # <CJK> +0x5155 # <CJK> +0x5156 # <CJK> +0x515A # <CJK> +0x515C # <CJK> +0x5162 # <CJK> +0x5165 # <CJK> +0x5168 # <CJK> +0x516B # <CJK> +0x516C # <CJK> +0x516D # <CJK> +0x516E # <CJK> +0x5170 # <CJK> +0x5171 # <CJK> +0x5173 # <CJK> +0x5174 # <CJK> +0x5175 # <CJK> +0x5176 # <CJK> +0x5177 # <CJK> +0x5178 # <CJK> +0x5179 # <CJK> +0x517B # <CJK> +0x517C # <CJK> +0x517D # <CJK> +0x5180 # <CJK> +0x5181 # <CJK> +0x5182 # <CJK> +0x5185 # <CJK> +0x5188 # <CJK> +0x5189 # <CJK> +0x518C # <CJK> +0x518D # <CJK> +0x5192 # <CJK> +0x5195 # <CJK> +0x5196 # <CJK> +0x5197 # <CJK> +0x5199 # <CJK> +0x519B # <CJK> +0x519C # <CJK> +0x51A0 # <CJK> +0x51A2 # <CJK> +0x51A4 # <CJK> +0x51A5 # <CJK> +0x51AB # <CJK> +0x51AC # <CJK> +0x51AF # <CJK> +0x51B0 # <CJK> +0x51B1 # <CJK> +0x51B2 # <CJK> +0x51B3 # <CJK> +0x51B5 # <CJK> +0x51B6 # <CJK> +0x51B7 # <CJK> +0x51BB # <CJK> +0x51BC # <CJK> +0x51BD # <CJK> +0x51C0 # <CJK> +0x51C4 # <CJK> +0x51C6 # <CJK> +0x51C7 # <CJK> +0x51C9 # <CJK> +0x51CB # <CJK> +0x51CC # <CJK> +0x51CF # <CJK> +0x51D1 # <CJK> +0x51DB # <CJK> +0x51DD # <CJK> +0x51E0 # <CJK> +0x51E1 # <CJK> +0x51E4 # <CJK> +0x51EB # <CJK> +0x51ED # <CJK> +0x51EF # <CJK> +0x51F0 # <CJK> +0x51F3 # <CJK> +0x51F5 # <CJK> +0x51F6 # <CJK> +0x51F8 # <CJK> +0x51F9 # <CJK> +0x51FA # <CJK> +0x51FB # <CJK> +0x51FC # <CJK> +0x51FD # <CJK> +0x51FF # <CJK> +0x5200 # <CJK> +0x5201 # <CJK> +0x5202 # <CJK> +0x5203 # <CJK> +0x5206 # <CJK> +0x5207 # <CJK> +0x5208 # <CJK> +0x520A # <CJK> +0x520D # <CJK> +0x520E # <CJK> +0x5211 # <CJK> +0x5212 # <CJK> +0x5216 # <CJK> +0x5217 # <CJK> +0x5218 # <CJK> +0x5219 # <CJK> +0x521A # <CJK> +0x521B # <CJK> +0x521D # <CJK> +0x5220 # <CJK> +0x5224 # <CJK> +0x5228 # <CJK> +0x5229 # <CJK> +0x522B # <CJK> +0x522D # <CJK> +0x522E # <CJK> +0x5230 # <CJK> +0x5233 # <CJK> +0x5236 # <CJK> +0x5237 # <CJK> +0x5238 # <CJK> +0x5239 # <CJK> +0x523A # <CJK> +0x523B # <CJK> +0x523D # <CJK> +0x523F # <CJK> +0x5240 # <CJK> +0x5241 # <CJK> +0x5242 # <CJK> +0x5243 # <CJK> +0x524A # <CJK> +0x524C # <CJK> +0x524D # <CJK> +0x5250 # <CJK> +0x5251 # <CJK> +0x5254 # <CJK> +0x5256 # <CJK> +0x525C # <CJK> +0x525E # <CJK> +0x5261 # <CJK> +0x5265 # <CJK> +0x5267 # <CJK> +0x5269 # <CJK> +0x526A # <CJK> +0x526F # <CJK> +0x5272 # <CJK> +0x527D # <CJK> +0x527F # <CJK> +0x5281 # <CJK> +0x5282 # <CJK> +0x5288 # <CJK> +0x5290 # <CJK> +0x5293 # <CJK> +0x529B # <CJK> +0x529D # <CJK> +0x529E # <CJK> +0x529F # <CJK> +0x52A0 # <CJK> +0x52A1 # <CJK> +0x52A2 # <CJK> +0x52A3 # <CJK> +0x52A8 # <CJK> +0x52A9 # <CJK> +0x52AA # <CJK> +0x52AB # <CJK> +0x52AC # <CJK> +0x52AD # <CJK> +0x52B1 # <CJK> +0x52B2 # <CJK> +0x52B3 # <CJK> +0x52BE # <CJK> +0x52BF # <CJK> +0x52C3 # <CJK> +0x52C7 # <CJK> +0x52C9 # <CJK> +0x52CB # <CJK> +0x52D0 # <CJK> +0x52D2 # <CJK> +0x52D6 # <CJK> +0x52D8 # <CJK> +0x52DF # <CJK> +0x52E4 # <CJK> +0x52F0 # <CJK> +0x52F9 # <CJK> +0x52FA # <CJK> +0x52FE # <CJK> +0x52FF # <CJK> +0x5300 # <CJK> +0x5305 # <CJK> +0x5306 # <CJK> +0x5308 # <CJK> +0x530D # <CJK> +0x530F # <CJK> +0x5310 # <CJK> +0x5315 # <CJK> +0x5316 # <CJK> +0x5317 # <CJK> +0x5319 # <CJK> +0x531A # <CJK> +0x531D # <CJK> +0x5320 # <CJK> +0x5321 # <CJK> +0x5323 # <CJK> +0x5326 # <CJK> +0x532A # <CJK> +0x532E # <CJK> +0x5339 # <CJK> +0x533A # <CJK> +0x533B # <CJK> +0x533E # <CJK> +0x533F # <CJK> +0x5341 # <CJK> +0x5343 # <CJK> +0x5345 # <CJK> +0x5347 # <CJK> +0x5348 # <CJK> +0x5349 # <CJK> +0x534A # <CJK> +0x534E # <CJK> +0x534F # <CJK> +0x5351 # <CJK> +0x5352 # <CJK> +0x5353 # <CJK> +0x5355 # <CJK> +0x5356 # <CJK> +0x5357 # <CJK> +0x535A # <CJK> +0x535C # <CJK> +0x535E # <CJK> +0x535F # <CJK> +0x5360 # <CJK> +0x5361 # <CJK> +0x5362 # <CJK> +0x5363 # <CJK> +0x5364 # <CJK> +0x5366 # <CJK> +0x5367 # <CJK> +0x5369 # <CJK> +0x536B # <CJK> +0x536E # <CJK> +0x536F # <CJK> +0x5370 # <CJK> +0x5371 # <CJK> +0x5373 # <CJK> +0x5374 # <CJK> +0x5375 # <CJK> +0x5377 # <CJK> +0x5378 # <CJK> +0x537A # <CJK> +0x537F # <CJK> +0x5382 # <CJK> +0x5384 # <CJK> +0x5385 # <CJK> +0x5386 # <CJK> +0x5389 # <CJK> +0x538B # <CJK> +0x538C # <CJK> +0x538D # <CJK> +0x5395 # <CJK> +0x5398 # <CJK> +0x539A # <CJK> +0x539D # <CJK> +0x539F # <CJK> +0x53A2 # <CJK> +0x53A3 # <CJK> +0x53A5 # <CJK> +0x53A6 # <CJK> +0x53A8 # <CJK> +0x53A9 # <CJK> +0x53AE # <CJK> +0x53B6 # <CJK> +0x53BB # <CJK> +0x53BF # <CJK> +0x53C1 # <CJK> +0x53C2 # <CJK> +0x53C8 # <CJK> +0x53C9 # <CJK> +0x53CA # <CJK> +0x53CB # <CJK> +0x53CC # <CJK> +0x53CD # <CJK> +0x53D1 # <CJK> +0x53D4 # <CJK> +0x53D6 # <CJK> +0x53D7 # <CJK> +0x53D8 # <CJK> +0x53D9 # <CJK> +0x53DB # <CJK> +0x53DF # <CJK> +0x53E0 # <CJK> +0x53E3 # <CJK> +0x53E4 # <CJK> +0x53E5 # <CJK> +0x53E6 # <CJK> +0x53E8 # <CJK> +0x53E9 # <CJK> +0x53EA # <CJK> +0x53EB # <CJK> +0x53EC # <CJK> +0x53ED # <CJK> +0x53EE # <CJK> +0x53EF # <CJK> +0x53F0 # <CJK> +0x53F1 # <CJK> +0x53F2 # <CJK> +0x53F3 # <CJK> +0x53F5 # <CJK> +0x53F6 # <CJK> +0x53F7 # <CJK> +0x53F8 # <CJK> +0x53F9 # <CJK> +0x53FB # <CJK> +0x53FC # <CJK> +0x53FD # <CJK> +0x5401 # <CJK> +0x5403 # <CJK> +0x5404 # <CJK> +0x5406 # <CJK> +0x5408 # <CJK> +0x5409 # <CJK> +0x540A # <CJK> +0x540C # <CJK> +0x540D # <CJK> +0x540E # <CJK> +0x540F # <CJK> +0x5410 # <CJK> +0x5411 # <CJK> +0x5412 # <CJK> +0x5413 # <CJK> +0x5415 # <CJK> +0x5416 # <CJK> +0x5417 # <CJK> +0x541B # <CJK> +0x541D # <CJK> +0x541E # <CJK> +0x541F # <CJK> +0x5420 # <CJK> +0x5421 # <CJK> +0x5423 # <CJK> +0x5426 # <CJK> +0x5427 # <CJK> +0x5428 # <CJK> +0x5429 # <CJK> +0x542B # <CJK> +0x542C # <CJK> +0x542D # <CJK> +0x542E # <CJK> +0x542F # <CJK> +0x5431 # <CJK> +0x5432 # <CJK> +0x5434 # <CJK> +0x5435 # <CJK> +0x5438 # <CJK> +0x5439 # <CJK> +0x543B # <CJK> +0x543C # <CJK> +0x543E # <CJK> +0x5440 # <CJK> +0x5443 # <CJK> +0x5446 # <CJK> +0x5448 # <CJK> +0x544A # <CJK> +0x544B # <CJK> +0x5450 # <CJK> +0x5452 # <CJK> +0x5453 # <CJK> +0x5454 # <CJK> +0x5455 # <CJK> +0x5456 # <CJK> +0x5457 # <CJK> +0x5458 # <CJK> +0x5459 # <CJK> +0x545B # <CJK> +0x545C # <CJK> +0x5462 # <CJK> +0x5464 # <CJK> +0x5466 # <CJK> +0x5468 # <CJK> +0x5471 # <CJK> +0x5472 # <CJK> +0x5473 # <CJK> +0x5475 # <CJK> +0x5476 # <CJK> +0x5477 # <CJK> +0x5478 # <CJK> +0x547B # <CJK> +0x547C # <CJK> +0x547D # <CJK> +0x5480 # <CJK> +0x5482 # <CJK> +0x5484 # <CJK> +0x5486 # <CJK> +0x548B # <CJK> +0x548C # <CJK> +0x548E # <CJK> +0x548F # <CJK> +0x5490 # <CJK> +0x5492 # <CJK> +0x5494 # <CJK> +0x5495 # <CJK> +0x5496 # <CJK> +0x5499 # <CJK> +0x549A # <CJK> +0x549B # <CJK> +0x549D # <CJK> +0x54A3 # <CJK> +0x54A4 # <CJK> +0x54A6 # <CJK> +0x54A7 # <CJK> +0x54A8 # <CJK> +0x54A9 # <CJK> +0x54AA # <CJK> +0x54AB # <CJK> +0x54AC # <CJK> +0x54AD # <CJK> +0x54AF # <CJK> +0x54B1 # <CJK> +0x54B3 # <CJK> +0x54B4 # <CJK> +0x54B8 # <CJK> +0x54BB # <CJK> +0x54BD # <CJK> +0x54BF # <CJK> +0x54C0 # <CJK> +0x54C1 # <CJK> +0x54C2 # <CJK> +0x54C4 # <CJK> +0x54C6 # <CJK> +0x54C7 # <CJK> +0x54C8 # <CJK> +0x54C9 # <CJK> +0x54CC # <CJK> +0x54CD # <CJK> +0x54CE # <CJK> +0x54CF # <CJK> +0x54D0 # <CJK> +0x54D1 # <CJK> +0x54D2 # <CJK> +0x54D3 # <CJK> +0x54D4 # <CJK> +0x54D5 # <CJK> +0x54D7 # <CJK> +0x54D9 # <CJK> +0x54DA # <CJK> +0x54DC # <CJK> +0x54DD # <CJK> +0x54DE # <CJK> +0x54DF # <CJK> +0x54E5 # <CJK> +0x54E6 # <CJK> +0x54E7 # <CJK> +0x54E8 # <CJK> +0x54E9 # <CJK> +0x54EA # <CJK> +0x54ED # <CJK> +0x54EE # <CJK> +0x54F2 # <CJK> +0x54F3 # <CJK> +0x54FA # <CJK> +0x54FC # <CJK> +0x54FD # <CJK> +0x54FF # <CJK> +0x5501 # <CJK> +0x5506 # <CJK> +0x5507 # <CJK> +0x5509 # <CJK> +0x550F # <CJK> +0x5510 # <CJK> +0x5511 # <CJK> +0x5514 # <CJK> +0x551B # <CJK> +0x5520 # <CJK> +0x5522 # <CJK> +0x5523 # <CJK> +0x5524 # <CJK> +0x5527 # <CJK> +0x552A # <CJK> +0x552C # <CJK> +0x552E # <CJK> +0x552F # <CJK> +0x5530 # <CJK> +0x5531 # <CJK> +0x5533 # <CJK> +0x5537 # <CJK> +0x553C # <CJK> +0x553E # <CJK> +0x553F # <CJK> +0x5541 # <CJK> +0x5543 # <CJK> +0x5544 # <CJK> +0x5546 # <CJK> +0x5549 # <CJK> +0x554A # <CJK> +0x5550 # <CJK> +0x5555 # <CJK> +0x5556 # <CJK> +0x555C # <CJK> +0x5561 # <CJK> +0x5564 # <CJK> +0x5565 # <CJK> +0x5566 # <CJK> +0x5567 # <CJK> +0x556A # <CJK> +0x556C # <CJK> +0x556D # <CJK> +0x556E # <CJK> +0x5575 # <CJK> +0x5576 # <CJK> +0x5577 # <CJK> +0x5578 # <CJK> +0x557B # <CJK> +0x557C # <CJK> +0x557E # <CJK> +0x5580 # <CJK> +0x5581 # <CJK> +0x5582 # <CJK> +0x5583 # <CJK> +0x5584 # <CJK> +0x5587 # <CJK> +0x5588 # <CJK> +0x5589 # <CJK> +0x558A # <CJK> +0x558B # <CJK> +0x558F # <CJK> +0x5591 # <CJK> +0x5594 # <CJK> +0x5598 # <CJK> +0x5599 # <CJK> +0x559C # <CJK> +0x559D # <CJK> +0x559F # <CJK> +0x55A7 # <CJK> +0x55B1 # <CJK> +0x55B3 # <CJK> +0x55B5 # <CJK> +0x55B7 # <CJK> +0x55B9 # <CJK> +0x55BB # <CJK> +0x55BD # <CJK> +0x55BE # <CJK> +0x55C4 # <CJK> +0x55C5 # <CJK> +0x55C9 # <CJK> +0x55CC # <CJK> +0x55CD # <CJK> +0x55D1 # <CJK> +0x55D2 # <CJK> +0x55D3 # <CJK> +0x55D4 # <CJK> +0x55D6 # <CJK> +0x55DC # <CJK> +0x55DD # <CJK> +0x55DF # <CJK> +0x55E1 # <CJK> +0x55E3 # <CJK> +0x55E4 # <CJK> +0x55E5 # <CJK> +0x55E6 # <CJK> +0x55E8 # <CJK> +0x55EA # <CJK> +0x55EB # <CJK> +0x55EC # <CJK> +0x55EF # <CJK> +0x55F2 # <CJK> +0x55F3 # <CJK> +0x55F5 # <CJK> +0x55F7 # <CJK> +0x55FD # <CJK> +0x55FE # <CJK> +0x5600 # <CJK> +0x5601 # <CJK> +0x5608 # <CJK> +0x5609 # <CJK> +0x560C # <CJK> +0x560E # <CJK> +0x560F # <CJK> +0x5618 # <CJK> +0x561B # <CJK> +0x561E # <CJK> +0x561F # <CJK> +0x5623 # <CJK> +0x5624 # <CJK> +0x5627 # <CJK> +0x562C # <CJK> +0x562D # <CJK> +0x5631 # <CJK> +0x5632 # <CJK> +0x5634 # <CJK> +0x5636 # <CJK> +0x5639 # <CJK> +0x563B # <CJK> +0x563F # <CJK> +0x564C # <CJK> +0x564D # <CJK> +0x564E # <CJK> +0x5654 # <CJK> +0x5657 # <CJK> +0x5658 # <CJK> +0x5659 # <CJK> +0x565C # <CJK> +0x5662 # <CJK> +0x5664 # <CJK> +0x5668 # <CJK> +0x5669 # <CJK> +0x566A # <CJK> +0x566B # <CJK> +0x566C # <CJK> +0x5671 # <CJK> +0x5676 # <CJK> +0x567B # <CJK> +0x567C # <CJK> +0x5685 # <CJK> +0x5686 # <CJK> +0x568E # <CJK> +0x568F # <CJK> +0x5693 # <CJK> +0x56A3 # <CJK> +0x56AF # <CJK> +0x56B7 # <CJK> +0x56BC # <CJK> +0x56CA # <CJK> +0x56D4 # <CJK> +0x56D7 # <CJK> +0x56DA # <CJK> +0x56DB # <CJK> +0x56DD # <CJK> +0x56DE # <CJK> +0x56DF # <CJK> +0x56E0 # <CJK> +0x56E1 # <CJK> +0x56E2 # <CJK> +0x56E4 # <CJK> +0x56EB # <CJK> +0x56ED # <CJK> +0x56F0 # <CJK> +0x56F1 # <CJK> +0x56F4 # <CJK> +0x56F5 # <CJK> +0x56F9 # <CJK> +0x56FA # <CJK> +0x56FD # <CJK> +0x56FE # <CJK> +0x56FF # <CJK> +0x5703 # <CJK> +0x5704 # <CJK> +0x5706 # <CJK> +0x5708 # <CJK> +0x5709 # <CJK> +0x570A # <CJK> +0x571C # <CJK> +0x571F # <CJK> +0x5723 # <CJK> +0x5728 # <CJK> +0x5729 # <CJK> +0x572A # <CJK> +0x572C # <CJK> +0x572D # <CJK> +0x572E # <CJK> +0x572F # <CJK> +0x5730 # <CJK> +0x5733 # <CJK> +0x5739 # <CJK> +0x573A # <CJK> +0x573B # <CJK> +0x573E # <CJK> +0x5740 # <CJK> +0x5742 # <CJK> +0x5747 # <CJK> +0x574A # <CJK> +0x574C # <CJK> +0x574D # <CJK> +0x574E # <CJK> +0x574F # <CJK> +0x5750 # <CJK> +0x5751 # <CJK> +0x5757 # <CJK> +0x575A # <CJK> +0x575B # <CJK> +0x575C # <CJK> +0x575D # <CJK> +0x575E # <CJK> +0x575F # <CJK> +0x5760 # <CJK> +0x5761 # <CJK> +0x5764 # <CJK> +0x5766 # <CJK> +0x5768 # <CJK> +0x5769 # <CJK> +0x576A # <CJK> +0x576B # <CJK> +0x576D # <CJK> +0x576F # <CJK> +0x5773 # <CJK> +0x5776 # <CJK> +0x5777 # <CJK> +0x577B # <CJK> +0x577C # <CJK> +0x5782 # <CJK> +0x5783 # <CJK> +0x5784 # <CJK> +0x5785 # <CJK> +0x5786 # <CJK> +0x578B # <CJK> +0x578C # <CJK> +0x5792 # <CJK> +0x5793 # <CJK> +0x579B # <CJK> +0x57A0 # <CJK> +0x57A1 # <CJK> +0x57A2 # <CJK> +0x57A3 # <CJK> +0x57A4 # <CJK> +0x57A6 # <CJK> +0x57A7 # <CJK> +0x57A9 # <CJK> +0x57AB # <CJK> +0x57AD # <CJK> +0x57AE # <CJK> +0x57B2 # <CJK> +0x57B4 # <CJK> +0x57B8 # <CJK> +0x57C2 # <CJK> +0x57C3 # <CJK> +0x57CB # <CJK> +0x57CE # <CJK> +0x57CF # <CJK> +0x57D2 # <CJK> +0x57D4 # <CJK> +0x57D5 # <CJK> +0x57D8 # <CJK> +0x57D9 # <CJK> +0x57DA # <CJK> +0x57DD # <CJK> +0x57DF # <CJK> +0x57E0 # <CJK> +0x57E4 # <CJK> +0x57ED # <CJK> +0x57EF # <CJK> +0x57F4 # <CJK> +0x57F8 # <CJK> +0x57F9 # <CJK> +0x57FA # <CJK> +0x57FD # <CJK> +0x5800 # <CJK> +0x5802 # <CJK> +0x5806 # <CJK> +0x5807 # <CJK> +0x580B # <CJK> +0x580D # <CJK> +0x5811 # <CJK> +0x5815 # <CJK> +0x5819 # <CJK> +0x581E # <CJK> +0x5820 # <CJK> +0x5821 # <CJK> +0x5824 # <CJK> +0x582A # <CJK> +0x5830 # <CJK> +0x5835 # <CJK> +0x5844 # <CJK> +0x584C # <CJK> +0x584D # <CJK> +0x5851 # <CJK> +0x5854 # <CJK> +0x5858 # <CJK> +0x585E # <CJK> +0x5865 # <CJK> +0x586B # <CJK> +0x586C # <CJK> +0x587E # <CJK> +0x5880 # <CJK> +0x5881 # <CJK> +0x5883 # <CJK> +0x5885 # <CJK> +0x5889 # <CJK> +0x5892 # <CJK> +0x5893 # <CJK> +0x5899 # <CJK> +0x589A # <CJK> +0x589E # <CJK> +0x589F # <CJK> +0x58A8 # <CJK> +0x58A9 # <CJK> +0x58BC # <CJK> +0x58C1 # <CJK> +0x58C5 # <CJK> +0x58D1 # <CJK> +0x58D5 # <CJK> +0x58E4 # <CJK> +0x58EB # <CJK> +0x58EC # <CJK> +0x58EE # <CJK> +0x58F0 # <CJK> +0x58F3 # <CJK> +0x58F6 # <CJK> +0x58F9 # <CJK> +0x5902 # <CJK> +0x5904 # <CJK> +0x5907 # <CJK> +0x590D # <CJK> +0x590F # <CJK> +0x5914 # <CJK> +0x5915 # <CJK> +0x5916 # <CJK> +0x5919 # <CJK> +0x591A # <CJK> +0x591C # <CJK> +0x591F # <CJK> +0x5924 # <CJK> +0x5925 # <CJK> +0x5927 # <CJK> +0x5929 # <CJK> +0x592A # <CJK> +0x592B # <CJK> +0x592D # <CJK> +0x592E # <CJK> +0x592F # <CJK> +0x5931 # <CJK> +0x5934 # <CJK> +0x5937 # <CJK> +0x5938 # <CJK> +0x5939 # <CJK> +0x593A # <CJK> +0x593C # <CJK> +0x5941 # <CJK> +0x5942 # <CJK> +0x5944 # <CJK> +0x5947 # <CJK> +0x5948 # <CJK> +0x5949 # <CJK> +0x594B # <CJK> +0x594E # <CJK> +0x594F # <CJK> +0x5951 # <CJK> +0x5954 # <CJK> +0x5955 # <CJK> +0x5956 # <CJK> +0x5957 # <CJK> +0x5958 # <CJK> +0x595A # <CJK> +0x5960 # <CJK> +0x5962 # <CJK> +0x5965 # <CJK> +0x5973 # <CJK> +0x5974 # <CJK> +0x5976 # <CJK> +0x5978 # <CJK> +0x5979 # <CJK> +0x597D # <CJK> +0x5981 # <CJK> +0x5982 # <CJK> +0x5983 # <CJK> +0x5984 # <CJK> +0x5986 # <CJK> +0x5987 # <CJK> +0x5988 # <CJK> +0x598A # <CJK> +0x598D # <CJK> +0x5992 # <CJK> +0x5993 # <CJK> +0x5996 # <CJK> +0x5997 # <CJK> +0x5999 # <CJK> +0x599E # <CJK> +0x59A3 # <CJK> +0x59A4 # <CJK> +0x59A5 # <CJK> +0x59A8 # <CJK> +0x59A9 # <CJK> +0x59AA # <CJK> +0x59AB # <CJK> +0x59AE # <CJK> +0x59AF # <CJK> +0x59B2 # <CJK> +0x59B9 # <CJK> +0x59BB # <CJK> +0x59BE # <CJK> +0x59C6 # <CJK> +0x59CA # <CJK> +0x59CB # <CJK> +0x59D0 # <CJK> +0x59D1 # <CJK> +0x59D2 # <CJK> +0x59D3 # <CJK> +0x59D4 # <CJK> +0x59D7 # <CJK> +0x59D8 # <CJK> +0x59DA # <CJK> +0x59DC # <CJK> +0x59DD # <CJK> +0x59E3 # <CJK> +0x59E5 # <CJK> +0x59E8 # <CJK> +0x59EC # <CJK> +0x59F9 # <CJK> +0x59FB # <CJK> +0x59FF # <CJK> +0x5A01 # <CJK> +0x5A03 # <CJK> +0x5A04 # <CJK> +0x5A05 # <CJK> +0x5A06 # <CJK> +0x5A07 # <CJK> +0x5A08 # <CJK> +0x5A09 # <CJK> +0x5A0C # <CJK> +0x5A11 # <CJK> +0x5A13 # <CJK> +0x5A18 # <CJK> +0x5A1C # <CJK> +0x5A1F # <CJK> +0x5A20 # <CJK> +0x5A23 # <CJK> +0x5A25 # <CJK> +0x5A29 # <CJK> +0x5A31 # <CJK> +0x5A32 # <CJK> +0x5A34 # <CJK> +0x5A36 # <CJK> +0x5A3C # <CJK> +0x5A40 # <CJK> +0x5A46 # <CJK> +0x5A49 # <CJK> +0x5A4A # <CJK> +0x5A55 # <CJK> +0x5A5A # <CJK> +0x5A62 # <CJK> +0x5A67 # <CJK> +0x5A6A # <CJK> +0x5A74 # <CJK> +0x5A75 # <CJK> +0x5A76 # <CJK> +0x5A77 # <CJK> +0x5A7A # <CJK> +0x5A7F # <CJK> +0x5A92 # <CJK> +0x5A9A # <CJK> +0x5A9B # <CJK> +0x5AAA # <CJK> +0x5AB2 # <CJK> +0x5AB3 # <CJK> +0x5AB5 # <CJK> +0x5AB8 # <CJK> +0x5ABE # <CJK> +0x5AC1 # <CJK> +0x5AC2 # <CJK> +0x5AC9 # <CJK> +0x5ACC # <CJK> +0x5AD2 # <CJK> +0x5AD4 # <CJK> +0x5AD6 # <CJK> +0x5AD8 # <CJK> +0x5ADC # <CJK> +0x5AE0 # <CJK> +0x5AE1 # <CJK> +0x5AE3 # <CJK> +0x5AE6 # <CJK> +0x5AE9 # <CJK> +0x5AEB # <CJK> +0x5AF1 # <CJK> +0x5B09 # <CJK> +0x5B16 # <CJK> +0x5B17 # <CJK> +0x5B32 # <CJK> +0x5B34 # <CJK> +0x5B37 # <CJK> +0x5B40 # <CJK> +0x5B50 # <CJK> +0x5B51 # <CJK> +0x5B53 # <CJK> +0x5B54 # <CJK> +0x5B55 # <CJK> +0x5B57 # <CJK> +0x5B58 # <CJK> +0x5B59 # <CJK> +0x5B5A # <CJK> +0x5B5B # <CJK> +0x5B5C # <CJK> +0x5B5D # <CJK> +0x5B5F # <CJK> +0x5B62 # <CJK> +0x5B63 # <CJK> +0x5B64 # <CJK> +0x5B65 # <CJK> +0x5B66 # <CJK> +0x5B69 # <CJK> +0x5B6A # <CJK> +0x5B6C # <CJK> +0x5B70 # <CJK> +0x5B71 # <CJK> +0x5B73 # <CJK> +0x5B75 # <CJK> +0x5B7A # <CJK> +0x5B7D # <CJK> +0x5B80 # <CJK> +0x5B81 # <CJK> +0x5B83 # <CJK> +0x5B84 # <CJK> +0x5B85 # <CJK> +0x5B87 # <CJK> +0x5B88 # <CJK> +0x5B89 # <CJK> +0x5B8B # <CJK> +0x5B8C # <CJK> +0x5B8F # <CJK> +0x5B93 # <CJK> +0x5B95 # <CJK> +0x5B97 # <CJK> +0x5B98 # <CJK> +0x5B99 # <CJK> +0x5B9A # <CJK> +0x5B9B # <CJK> +0x5B9C # <CJK> +0x5B9D # <CJK> +0x5B9E # <CJK> +0x5BA0 # <CJK> +0x5BA1 # <CJK> +0x5BA2 # <CJK> +0x5BA3 # <CJK> +0x5BA4 # <CJK> +0x5BA5 # <CJK> +0x5BA6 # <CJK> +0x5BAA # <CJK> +0x5BAB # <CJK> +0x5BB0 # <CJK> +0x5BB3 # <CJK> +0x5BB4 # <CJK> +0x5BB5 # <CJK> +0x5BB6 # <CJK> +0x5BB8 # <CJK> +0x5BB9 # <CJK> +0x5BBD # <CJK> +0x5BBE # <CJK> +0x5BBF # <CJK> +0x5BC2 # <CJK> +0x5BC4 # <CJK> +0x5BC5 # <CJK> +0x5BC6 # <CJK> +0x5BC7 # <CJK> +0x5BCC # <CJK> +0x5BD0 # <CJK> +0x5BD2 # <CJK> +0x5BD3 # <CJK> +0x5BDD # <CJK> +0x5BDE # <CJK> +0x5BDF # <CJK> +0x5BE1 # <CJK> +0x5BE4 # <CJK> +0x5BE5 # <CJK> +0x5BE8 # <CJK> +0x5BEE # <CJK> +0x5BF0 # <CJK> +0x5BF8 # <CJK> +0x5BF9 # <CJK> +0x5BFA # <CJK> +0x5BFB # <CJK> +0x5BFC # <CJK> +0x5BFF # <CJK> +0x5C01 # <CJK> +0x5C04 # <CJK> +0x5C06 # <CJK> +0x5C09 # <CJK> +0x5C0A # <CJK> +0x5C0F # <CJK> +0x5C11 # <CJK> +0x5C14 # <CJK> +0x5C15 # <CJK> +0x5C16 # <CJK> +0x5C18 # <CJK> +0x5C1A # <CJK> +0x5C1C # <CJK> +0x5C1D # <CJK> +0x5C22 # <CJK> +0x5C24 # <CJK> +0x5C25 # <CJK> +0x5C27 # <CJK> +0x5C2C # <CJK> +0x5C31 # <CJK> +0x5C34 # <CJK> +0x5C38 # <CJK> +0x5C39 # <CJK> +0x5C3A # <CJK> +0x5C3B # <CJK> +0x5C3C # <CJK> +0x5C3D # <CJK> +0x5C3E # <CJK> +0x5C3F # <CJK> +0x5C40 # <CJK> +0x5C41 # <CJK> +0x5C42 # <CJK> +0x5C45 # <CJK> +0x5C48 # <CJK> +0x5C49 # <CJK> +0x5C4A # <CJK> +0x5C4B # <CJK> +0x5C4E # <CJK> +0x5C4F # <CJK> +0x5C50 # <CJK> +0x5C51 # <CJK> +0x5C55 # <CJK> +0x5C59 # <CJK> +0x5C5E # <CJK> +0x5C60 # <CJK> +0x5C61 # <CJK> +0x5C63 # <CJK> +0x5C65 # <CJK> +0x5C66 # <CJK> +0x5C6E # <CJK> +0x5C6F # <CJK> +0x5C71 # <CJK> +0x5C79 # <CJK> +0x5C7A # <CJK> +0x5C7F # <CJK> +0x5C81 # <CJK> +0x5C82 # <CJK> +0x5C88 # <CJK> +0x5C8C # <CJK> +0x5C8D # <CJK> +0x5C90 # <CJK> +0x5C91 # <CJK> +0x5C94 # <CJK> +0x5C96 # <CJK> +0x5C97 # <CJK> +0x5C98 # <CJK> +0x5C99 # <CJK> +0x5C9A # <CJK> +0x5C9B # <CJK> +0x5C9C # <CJK> +0x5CA2 # <CJK> +0x5CA3 # <CJK> +0x5CA9 # <CJK> +0x5CAB # <CJK> +0x5CAC # <CJK> +0x5CAD # <CJK> +0x5CB1 # <CJK> +0x5CB3 # <CJK> +0x5CB5 # <CJK> +0x5CB7 # <CJK> +0x5CB8 # <CJK> +0x5CBD # <CJK> +0x5CBF # <CJK> +0x5CC1 # <CJK> +0x5CC4 # <CJK> +0x5CCB # <CJK> +0x5CD2 # <CJK> +0x5CD9 # <CJK> +0x5CE1 # <CJK> +0x5CE4 # <CJK> +0x5CE5 # <CJK> +0x5CE6 # <CJK> +0x5CE8 # <CJK> +0x5CEA # <CJK> +0x5CED # <CJK> +0x5CF0 # <CJK> +0x5CFB # <CJK> +0x5D02 # <CJK> +0x5D03 # <CJK> +0x5D06 # <CJK> +0x5D07 # <CJK> +0x5D0E # <CJK> +0x5D14 # <CJK> +0x5D16 # <CJK> +0x5D1B # <CJK> +0x5D1E # <CJK> +0x5D24 # <CJK> +0x5D26 # <CJK> +0x5D27 # <CJK> +0x5D29 # <CJK> +0x5D2D # <CJK> +0x5D2E # <CJK> +0x5D34 # <CJK> +0x5D3D # <CJK> +0x5D3E # <CJK> +0x5D47 # <CJK> +0x5D4A # <CJK> +0x5D4B # <CJK> +0x5D4C # <CJK> +0x5D58 # <CJK> +0x5D5B # <CJK> +0x5D5D # <CJK> +0x5D69 # <CJK> +0x5D6B # <CJK> +0x5D6C # <CJK> +0x5D6F # <CJK> +0x5D74 # <CJK> +0x5D82 # <CJK> +0x5D99 # <CJK> +0x5D9D # <CJK> +0x5DB7 # <CJK> +0x5DC5 # <CJK> +0x5DCD # <CJK> +0x5DDB # <CJK> +0x5DDD # <CJK> +0x5DDE # <CJK> +0x5DE1 # <CJK> +0x5DE2 # <CJK> +0x5DE5 # <CJK> +0x5DE6 # <CJK> +0x5DE7 # <CJK> +0x5DE8 # <CJK> +0x5DE9 # <CJK> +0x5DEB # <CJK> +0x5DEE # <CJK> +0x5DEF # <CJK> +0x5DF1 # <CJK> +0x5DF2 # <CJK> +0x5DF3 # <CJK> +0x5DF4 # <CJK> +0x5DF7 # <CJK> +0x5DFD # <CJK> +0x5DFE # <CJK> +0x5E01 # <CJK> +0x5E02 # <CJK> +0x5E03 # <CJK> +0x5E05 # <CJK> +0x5E06 # <CJK> +0x5E08 # <CJK> +0x5E0C # <CJK> +0x5E0F # <CJK> +0x5E10 # <CJK> +0x5E11 # <CJK> +0x5E14 # <CJK> +0x5E15 # <CJK> +0x5E16 # <CJK> +0x5E18 # <CJK> +0x5E19 # <CJK> +0x5E1A # <CJK> +0x5E1B # <CJK> +0x5E1C # <CJK> +0x5E1D # <CJK> +0x5E26 # <CJK> +0x5E27 # <CJK> +0x5E2D # <CJK> +0x5E2E # <CJK> +0x5E31 # <CJK> +0x5E37 # <CJK> +0x5E38 # <CJK> +0x5E3B # <CJK> +0x5E3C # <CJK> +0x5E3D # <CJK> +0x5E42 # <CJK> +0x5E44 # <CJK> +0x5E45 # <CJK> +0x5E4C # <CJK> +0x5E54 # <CJK> +0x5E55 # <CJK> +0x5E5B # <CJK> +0x5E5E # <CJK> +0x5E61 # <CJK> +0x5E62 # <CJK> +0x5E72 # <CJK> +0x5E73 # <CJK> +0x5E74 # <CJK> +0x5E76 # <CJK> +0x5E78 # <CJK> +0x5E7A # <CJK> +0x5E7B # <CJK> +0x5E7C # <CJK> +0x5E7D # <CJK> +0x5E7F # <CJK> +0x5E80 # <CJK> +0x5E84 # <CJK> +0x5E86 # <CJK> +0x5E87 # <CJK> +0x5E8A # <CJK> +0x5E8B # <CJK> +0x5E8F # <CJK> +0x5E90 # <CJK> +0x5E91 # <CJK> +0x5E93 # <CJK> +0x5E94 # <CJK> +0x5E95 # <CJK> +0x5E96 # <CJK> +0x5E97 # <CJK> +0x5E99 # <CJK> +0x5E9A # <CJK> +0x5E9C # <CJK> +0x5E9E # <CJK> +0x5E9F # <CJK> +0x5EA0 # <CJK> +0x5EA5 # <CJK> +0x5EA6 # <CJK> +0x5EA7 # <CJK> +0x5EAD # <CJK> +0x5EB3 # <CJK> +0x5EB5 # <CJK> +0x5EB6 # <CJK> +0x5EB7 # <CJK> +0x5EB8 # <CJK> +0x5EB9 # <CJK> +0x5EBE # <CJK> +0x5EC9 # <CJK> +0x5ECA # <CJK> +0x5ED1 # <CJK> +0x5ED2 # <CJK> +0x5ED3 # <CJK> +0x5ED6 # <CJK> +0x5EDB # <CJK> +0x5EE8 # <CJK> +0x5EEA # <CJK> +0x5EF4 # <CJK> +0x5EF6 # <CJK> +0x5EF7 # <CJK> +0x5EFA # <CJK> +0x5EFE # <CJK> +0x5EFF # <CJK> +0x5F00 # <CJK> +0x5F01 # <CJK> +0x5F02 # <CJK> +0x5F03 # <CJK> +0x5F04 # <CJK> +0x5F08 # <CJK> +0x5F0A # <CJK> +0x5F0B # <CJK> +0x5F0F # <CJK> +0x5F11 # <CJK> +0x5F13 # <CJK> +0x5F15 # <CJK> +0x5F17 # <CJK> +0x5F18 # <CJK> +0x5F1B # <CJK> +0x5F1F # <CJK> +0x5F20 # <CJK> +0x5F25 # <CJK> +0x5F26 # <CJK> +0x5F27 # <CJK> +0x5F29 # <CJK> +0x5F2A # <CJK> +0x5F2D # <CJK> +0x5F2F # <CJK> +0x5F31 # <CJK> +0x5F39 # <CJK> +0x5F3A # <CJK> +0x5F3C # <CJK> +0x5F40 # <CJK> +0x5F50 # <CJK> +0x5F52 # <CJK> +0x5F53 # <CJK> +0x5F55 # <CJK> +0x5F56 # <CJK> +0x5F57 # <CJK> +0x5F58 # <CJK> +0x5F5D # <CJK> +0x5F61 # <CJK> +0x5F62 # <CJK> +0x5F64 # <CJK> +0x5F66 # <CJK> +0x5F69 # <CJK> +0x5F6A # <CJK> +0x5F6C # <CJK> +0x5F6D # <CJK> +0x5F70 # <CJK> +0x5F71 # <CJK> +0x5F73 # <CJK> +0x5F77 # <CJK> +0x5F79 # <CJK> +0x5F7B # <CJK> +0x5F7C # <CJK> +0x5F80 # <CJK> +0x5F81 # <CJK> +0x5F82 # <CJK> +0x5F84 # <CJK> +0x5F85 # <CJK> +0x5F87 # <CJK> +0x5F88 # <CJK> +0x5F89 # <CJK> +0x5F8A # <CJK> +0x5F8B # <CJK> +0x5F8C # <CJK> +0x5F90 # <CJK> +0x5F92 # <CJK> +0x5F95 # <CJK> +0x5F97 # <CJK> +0x5F98 # <CJK> +0x5F99 # <CJK> +0x5F9C # <CJK> +0x5FA1 # <CJK> +0x5FA8 # <CJK> +0x5FAA # <CJK> +0x5FAD # <CJK> +0x5FAE # <CJK> +0x5FB5 # <CJK> +0x5FB7 # <CJK> +0x5FBC # <CJK> +0x5FBD # <CJK> +0x5FC3 # <CJK> +0x5FC4 # <CJK> +0x5FC5 # <CJK> +0x5FC6 # <CJK> +0x5FC9 # <CJK> +0x5FCC # <CJK> +0x5FCD # <CJK> +0x5FCF # <CJK> +0x5FD0 # <CJK> +0x5FD1 # <CJK> +0x5FD2 # <CJK> +0x5FD6 # <CJK> +0x5FD7 # <CJK> +0x5FD8 # <CJK> +0x5FD9 # <CJK> +0x5FDD # <CJK> +0x5FE0 # <CJK> +0x5FE1 # <CJK> +0x5FE4 # <CJK> +0x5FE7 # <CJK> +0x5FEA # <CJK> +0x5FEB # <CJK> +0x5FED # <CJK> +0x5FEE # <CJK> +0x5FF1 # <CJK> +0x5FF5 # <CJK> +0x5FF8 # <CJK> +0x5FFB # <CJK> +0x5FFD # <CJK> +0x5FFE # <CJK> +0x5FFF # <CJK> +0x6000 # <CJK> +0x6001 # <CJK> +0x6002 # <CJK> +0x6003 # <CJK> +0x6004 # <CJK> +0x6005 # <CJK> +0x6006 # <CJK> +0x600A # <CJK> +0x600D # <CJK> +0x600E # <CJK> +0x600F # <CJK> +0x6012 # <CJK> +0x6014 # <CJK> +0x6015 # <CJK> +0x6016 # <CJK> +0x6019 # <CJK> +0x601B # <CJK> +0x601C # <CJK> +0x601D # <CJK> +0x6020 # <CJK> +0x6021 # <CJK> +0x6025 # <CJK> +0x6026 # <CJK> +0x6027 # <CJK> +0x6028 # <CJK> +0x6029 # <CJK> +0x602A # <CJK> +0x602B # <CJK> +0x602F # <CJK> +0x6035 # <CJK> +0x603B # <CJK> +0x603C # <CJK> +0x603F # <CJK> +0x6041 # <CJK> +0x6042 # <CJK> +0x6043 # <CJK> +0x604B # <CJK> +0x604D # <CJK> +0x6050 # <CJK> +0x6052 # <CJK> +0x6055 # <CJK> +0x6059 # <CJK> +0x605A # <CJK> +0x605D # <CJK> +0x6062 # <CJK> +0x6063 # <CJK> +0x6064 # <CJK> +0x6067 # <CJK> +0x6068 # <CJK> +0x6069 # <CJK> +0x606A # <CJK> +0x606B # <CJK> +0x606C # <CJK> +0x606D # <CJK> +0x606F # <CJK> +0x6070 # <CJK> +0x6073 # <CJK> +0x6076 # <CJK> +0x6078 # <CJK> +0x6079 # <CJK> +0x607A # <CJK> +0x607B # <CJK> +0x607C # <CJK> +0x607D # <CJK> +0x607F # <CJK> +0x6083 # <CJK> +0x6084 # <CJK> +0x6089 # <CJK> +0x608C # <CJK> +0x608D # <CJK> +0x6092 # <CJK> +0x6094 # <CJK> +0x6096 # <CJK> +0x609A # <CJK> +0x609B # <CJK> +0x609D # <CJK> +0x609F # <CJK> +0x60A0 # <CJK> +0x60A3 # <CJK> +0x60A6 # <CJK> +0x60A8 # <CJK> +0x60AB # <CJK> +0x60AC # <CJK> +0x60AD # <CJK> +0x60AF # <CJK> +0x60B1 # <CJK> +0x60B2 # <CJK> +0x60B4 # <CJK> +0x60B8 # <CJK> +0x60BB # <CJK> +0x60BC # <CJK> +0x60C5 # <CJK> +0x60C6 # <CJK> +0x60CA # <CJK> +0x60CB # <CJK> +0x60D1 # <CJK> +0x60D5 # <CJK> +0x60D8 # <CJK> +0x60DA # <CJK> +0x60DC # <CJK> +0x60DD # <CJK> +0x60DF # <CJK> +0x60E0 # <CJK> +0x60E6 # <CJK> +0x60E7 # <CJK> +0x60E8 # <CJK> +0x60E9 # <CJK> +0x60EB # <CJK> +0x60EC # <CJK> +0x60ED # <CJK> +0x60EE # <CJK> +0x60EF # <CJK> +0x60F0 # <CJK> +0x60F3 # <CJK> +0x60F4 # <CJK> +0x60F6 # <CJK> +0x60F9 # <CJK> +0x60FA # <CJK> +0x6100 # <CJK> +0x6101 # <CJK> +0x6106 # <CJK> +0x6108 # <CJK> +0x6109 # <CJK> +0x610D # <CJK> +0x610E # <CJK> +0x610F # <CJK> +0x6115 # <CJK> +0x611A # <CJK> +0x611F # <CJK> +0x6120 # <CJK> +0x6123 # <CJK> +0x6124 # <CJK> +0x6126 # <CJK> +0x6127 # <CJK> +0x612B # <CJK> +0x613F # <CJK> +0x6148 # <CJK> +0x614A # <CJK> +0x614C # <CJK> +0x614E # <CJK> +0x6151 # <CJK> +0x6155 # <CJK> +0x615D # <CJK> +0x6162 # <CJK> +0x6167 # <CJK> +0x6168 # <CJK> +0x6170 # <CJK> +0x6175 # <CJK> +0x6177 # <CJK> +0x618B # <CJK> +0x618E # <CJK> +0x6194 # <CJK> +0x619D # <CJK> +0x61A7 # <CJK> +0x61A8 # <CJK> +0x61A9 # <CJK> +0x61AC # <CJK> +0x61B7 # <CJK> +0x61BE # <CJK> +0x61C2 # <CJK> +0x61C8 # <CJK> +0x61CA # <CJK> +0x61CB # <CJK> +0x61D1 # <CJK> +0x61D2 # <CJK> +0x61D4 # <CJK> +0x61E6 # <CJK> +0x61F5 # <CJK> +0x61FF # <CJK> +0x6206 # <CJK> +0x6208 # <CJK> +0x620A # <CJK> +0x620B # <CJK> +0x620C # <CJK> +0x620D # <CJK> +0x620E # <CJK> +0x620F # <CJK> +0x6210 # <CJK> +0x6211 # <CJK> +0x6212 # <CJK> +0x6215 # <CJK> +0x6216 # <CJK> +0x6217 # <CJK> +0x6218 # <CJK> +0x621A # <CJK> +0x621B # <CJK> +0x621F # <CJK> +0x6221 # <CJK> +0x6222 # <CJK> +0x6224 # <CJK> +0x6225 # <CJK> +0x622A # <CJK> +0x622C # <CJK> +0x622E # <CJK> +0x6233 # <CJK> +0x6234 # <CJK> +0x6237 # <CJK> +0x623D # <CJK> +0x623E # <CJK> +0x623F # <CJK> +0x6240 # <CJK> +0x6241 # <CJK> +0x6243 # <CJK> +0x6247 # <CJK> +0x6248 # <CJK> +0x6249 # <CJK> +0x624B # <CJK> +0x624C # <CJK> +0x624D # <CJK> +0x624E # <CJK> +0x6251 # <CJK> +0x6252 # <CJK> +0x6253 # <CJK> +0x6254 # <CJK> +0x6258 # <CJK> +0x625B # <CJK> +0x6263 # <CJK> +0x6266 # <CJK> +0x6267 # <CJK> +0x6269 # <CJK> +0x626A # <CJK> +0x626B # <CJK> +0x626C # <CJK> +0x626D # <CJK> +0x626E # <CJK> +0x626F # <CJK> +0x6270 # <CJK> +0x6273 # <CJK> +0x6276 # <CJK> +0x6279 # <CJK> +0x627C # <CJK> +0x627E # <CJK> +0x627F # <CJK> +0x6280 # <CJK> +0x6284 # <CJK> +0x6289 # <CJK> +0x628A # <CJK> +0x6291 # <CJK> +0x6292 # <CJK> +0x6293 # <CJK> +0x6295 # <CJK> +0x6296 # <CJK> +0x6297 # <CJK> +0x6298 # <CJK> +0x629A # <CJK> +0x629B # <CJK> +0x629F # <CJK> +0x62A0 # <CJK> +0x62A1 # <CJK> +0x62A2 # <CJK> +0x62A4 # <CJK> +0x62A5 # <CJK> +0x62A8 # <CJK> +0x62AB # <CJK> +0x62AC # <CJK> +0x62B1 # <CJK> +0x62B5 # <CJK> +0x62B9 # <CJK> +0x62BB # <CJK> +0x62BC # <CJK> +0x62BD # <CJK> +0x62BF # <CJK> +0x62C2 # <CJK> +0x62C4 # <CJK> +0x62C5 # <CJK> +0x62C6 # <CJK> +0x62C7 # <CJK> +0x62C8 # <CJK> +0x62C9 # <CJK> +0x62CA # <CJK> +0x62CC # <CJK> +0x62CD # <CJK> +0x62CE # <CJK> +0x62D0 # <CJK> +0x62D2 # <CJK> +0x62D3 # <CJK> +0x62D4 # <CJK> +0x62D6 # <CJK> +0x62D7 # <CJK> +0x62D8 # <CJK> +0x62D9 # <CJK> +0x62DA # <CJK> +0x62DB # <CJK> +0x62DC # <CJK> +0x62DF # <CJK> +0x62E2 # <CJK> +0x62E3 # <CJK> +0x62E5 # <CJK> +0x62E6 # <CJK> +0x62E7 # <CJK> +0x62E8 # <CJK> +0x62E9 # <CJK> +0x62EC # <CJK> +0x62ED # <CJK> +0x62EE # <CJK> +0x62EF # <CJK> +0x62F1 # <CJK> +0x62F3 # <CJK> +0x62F4 # <CJK> +0x62F6 # <CJK> +0x62F7 # <CJK> +0x62FC # <CJK> +0x62FD # <CJK> +0x62FE # <CJK> +0x62FF # <CJK> +0x6301 # <CJK> +0x6302 # <CJK> +0x6307 # <CJK> +0x6308 # <CJK> +0x6309 # <CJK> +0x630E # <CJK> +0x6311 # <CJK> +0x6316 # <CJK> +0x631A # <CJK> +0x631B # <CJK> +0x631D # <CJK> +0x631E # <CJK> +0x631F # <CJK> +0x6320 # <CJK> +0x6321 # <CJK> +0x6322 # <CJK> +0x6323 # <CJK> +0x6324 # <CJK> +0x6325 # <CJK> +0x6328 # <CJK> +0x632A # <CJK> +0x632B # <CJK> +0x632F # <CJK> +0x6332 # <CJK> +0x6339 # <CJK> +0x633A # <CJK> +0x633D # <CJK> +0x6342 # <CJK> +0x6343 # <CJK> +0x6345 # <CJK> +0x6346 # <CJK> +0x6349 # <CJK> +0x634B # <CJK> +0x634C # <CJK> +0x634D # <CJK> +0x634E # <CJK> +0x634F # <CJK> +0x6350 # <CJK> +0x6355 # <CJK> +0x635E # <CJK> +0x635F # <CJK> +0x6361 # <CJK> +0x6362 # <CJK> +0x6363 # <CJK> +0x6367 # <CJK> +0x6369 # <CJK> +0x636D # <CJK> +0x636E # <CJK> +0x6371 # <CJK> +0x6376 # <CJK> +0x6377 # <CJK> +0x637A # <CJK> +0x637B # <CJK> +0x6380 # <CJK> +0x6382 # <CJK> +0x6387 # <CJK> +0x6388 # <CJK> +0x6389 # <CJK> +0x638A # <CJK> +0x638C # <CJK> +0x638E # <CJK> +0x638F # <CJK> +0x6390 # <CJK> +0x6392 # <CJK> +0x6396 # <CJK> +0x6398 # <CJK> +0x63A0 # <CJK> +0x63A2 # <CJK> +0x63A3 # <CJK> +0x63A5 # <CJK> +0x63A7 # <CJK> +0x63A8 # <CJK> +0x63A9 # <CJK> +0x63AA # <CJK> +0x63AC # <CJK> +0x63AD # <CJK> +0x63AE # <CJK> +0x63B0 # <CJK> +0x63B3 # <CJK> +0x63B4 # <CJK> +0x63B7 # <CJK> +0x63B8 # <CJK> +0x63BA # <CJK> +0x63BC # <CJK> +0x63BE # <CJK> +0x63C4 # <CJK> +0x63C6 # <CJK> +0x63C9 # <CJK> +0x63CD # <CJK> +0x63CE # <CJK> +0x63CF # <CJK> +0x63D0 # <CJK> +0x63D2 # <CJK> +0x63D6 # <CJK> +0x63DE # <CJK> +0x63E0 # <CJK> +0x63E1 # <CJK> +0x63E3 # <CJK> +0x63E9 # <CJK> +0x63EA # <CJK> +0x63ED # <CJK> +0x63F2 # <CJK> +0x63F4 # <CJK> +0x63F6 # <CJK> +0x63F8 # <CJK> +0x63FD # <CJK> +0x63FF # <CJK> +0x6400 # <CJK> +0x6401 # <CJK> +0x6402 # <CJK> +0x6405 # <CJK> +0x640B # <CJK> +0x640C # <CJK> +0x640F # <CJK> +0x6410 # <CJK> +0x6413 # <CJK> +0x6414 # <CJK> +0x641B # <CJK> +0x641C # <CJK> +0x641E # <CJK> +0x6420 # <CJK> +0x6421 # <CJK> +0x6426 # <CJK> +0x642A # <CJK> +0x642C # <CJK> +0x642D # <CJK> +0x6434 # <CJK> +0x643A # <CJK> +0x643D # <CJK> +0x643F # <CJK> +0x6441 # <CJK> +0x6444 # <CJK> +0x6445 # <CJK> +0x6446 # <CJK> +0x6447 # <CJK> +0x6448 # <CJK> +0x644A # <CJK> +0x6452 # <CJK> +0x6454 # <CJK> +0x6458 # <CJK> +0x645E # <CJK> +0x6467 # <CJK> +0x6469 # <CJK> +0x646D # <CJK> +0x6478 # <CJK> +0x6479 # <CJK> +0x647A # <CJK> +0x6482 # <CJK> +0x6484 # <CJK> +0x6485 # <CJK> +0x6487 # <CJK> +0x6491 # <CJK> +0x6492 # <CJK> +0x6495 # <CJK> +0x6496 # <CJK> +0x6499 # <CJK> +0x649E # <CJK> +0x64A4 # <CJK> +0x64A9 # <CJK> +0x64AC # <CJK> +0x64AD # <CJK> +0x64AE # <CJK> +0x64B0 # <CJK> +0x64B5 # <CJK> +0x64B7 # <CJK> +0x64B8 # <CJK> +0x64BA # <CJK> +0x64BC # <CJK> +0x64C0 # <CJK> +0x64C2 # <CJK> +0x64C5 # <CJK> +0x64CD # <CJK> +0x64CE # <CJK> +0x64D0 # <CJK> +0x64D2 # <CJK> +0x64D7 # <CJK> +0x64D8 # <CJK> +0x64DE # <CJK> +0x64E2 # <CJK> +0x64E4 # <CJK> +0x64E6 # <CJK> +0x6500 # <CJK> +0x6509 # <CJK> +0x6512 # <CJK> +0x6518 # <CJK> +0x6525 # <CJK> +0x652B # <CJK> +0x652E # <CJK> +0x652F # <CJK> +0x6534 # <CJK> +0x6535 # <CJK> +0x6536 # <CJK> +0x6538 # <CJK> +0x6539 # <CJK> +0x653B # <CJK> +0x653E # <CJK> +0x653F # <CJK> +0x6545 # <CJK> +0x6548 # <CJK> +0x6549 # <CJK> +0x654C # <CJK> +0x654F # <CJK> +0x6551 # <CJK> +0x6555 # <CJK> +0x6556 # <CJK> +0x6559 # <CJK> +0x655B # <CJK> +0x655D # <CJK> +0x655E # <CJK> +0x6562 # <CJK> +0x6563 # <CJK> +0x6566 # <CJK> +0x656B # <CJK> +0x656C # <CJK> +0x6570 # <CJK> +0x6572 # <CJK> +0x6574 # <CJK> +0x6577 # <CJK> +0x6587 # <CJK> +0x658B # <CJK> +0x658C # <CJK> +0x6590 # <CJK> +0x6591 # <CJK> +0x6593 # <CJK> +0x6597 # <CJK> +0x6599 # <CJK> +0x659B # <CJK> +0x659C # <CJK> +0x659F # <CJK> +0x65A1 # <CJK> +0x65A4 # <CJK> +0x65A5 # <CJK> +0x65A7 # <CJK> +0x65A9 # <CJK> +0x65AB # <CJK> +0x65AD # <CJK> +0x65AF # <CJK> +0x65B0 # <CJK> +0x65B9 # <CJK> +0x65BC # <CJK> +0x65BD # <CJK> +0x65C1 # <CJK> +0x65C3 # <CJK> +0x65C4 # <CJK> +0x65C5 # <CJK> +0x65C6 # <CJK> +0x65CB # <CJK> +0x65CC # <CJK> +0x65CE # <CJK> +0x65CF # <CJK> +0x65D2 # <CJK> +0x65D6 # <CJK> +0x65D7 # <CJK> +0x65E0 # <CJK> +0x65E2 # <CJK> +0x65E5 # <CJK> +0x65E6 # <CJK> +0x65E7 # <CJK> +0x65E8 # <CJK> +0x65E9 # <CJK> +0x65EC # <CJK> +0x65ED # <CJK> +0x65EE # <CJK> +0x65EF # <CJK> +0x65F0 # <CJK> +0x65F1 # <CJK> +0x65F6 # <CJK> +0x65F7 # <CJK> +0x65FA # <CJK> +0x6600 # <CJK> +0x6602 # <CJK> +0x6603 # <CJK> +0x6606 # <CJK> +0x660A # <CJK> +0x660C # <CJK> +0x660E # <CJK> +0x660F # <CJK> +0x6613 # <CJK> +0x6614 # <CJK> +0x6615 # <CJK> +0x6619 # <CJK> +0x661D # <CJK> +0x661F # <CJK> +0x6620 # <CJK> +0x6625 # <CJK> +0x6627 # <CJK> +0x6628 # <CJK> +0x662D # <CJK> +0x662F # <CJK> +0x6631 # <CJK> +0x6634 # <CJK> +0x6635 # <CJK> +0x6636 # <CJK> +0x663C # <CJK> +0x663E # <CJK> +0x6641 # <CJK> +0x6643 # <CJK> +0x664B # <CJK> +0x664C # <CJK> +0x664F # <CJK> +0x6652 # <CJK> +0x6653 # <CJK> +0x6654 # <CJK> +0x6655 # <CJK> +0x6656 # <CJK> +0x6657 # <CJK> +0x665A # <CJK> +0x665F # <CJK> +0x6661 # <CJK> +0x6664 # <CJK> +0x6666 # <CJK> +0x6668 # <CJK> +0x666E # <CJK> +0x666F # <CJK> +0x6670 # <CJK> +0x6674 # <CJK> +0x6676 # <CJK> +0x6677 # <CJK> +0x667A # <CJK> +0x667E # <CJK> +0x6682 # <CJK> +0x6684 # <CJK> +0x6687 # <CJK> +0x668C # <CJK> +0x6691 # <CJK> +0x6696 # <CJK> +0x6697 # <CJK> +0x669D # <CJK> +0x66A7 # <CJK> +0x66A8 # <CJK> +0x66AE # <CJK> +0x66B4 # <CJK> +0x66B9 # <CJK> +0x66BE # <CJK> +0x66D9 # <CJK> +0x66DB # <CJK> +0x66DC # <CJK> +0x66DD # <CJK> +0x66E6 # <CJK> +0x66E9 # <CJK> +0x66F0 # <CJK> +0x66F2 # <CJK> +0x66F3 # <CJK> +0x66F4 # <CJK> +0x66F7 # <CJK> +0x66F9 # <CJK> +0x66FC # <CJK> +0x66FE # <CJK> +0x66FF # <CJK> +0x6700 # <CJK> +0x6708 # <CJK> +0x6709 # <CJK> +0x670A # <CJK> +0x670B # <CJK> +0x670D # <CJK> +0x6710 # <CJK> +0x6714 # <CJK> +0x6715 # <CJK> +0x6717 # <CJK> +0x671B # <CJK> +0x671D # <CJK> +0x671F # <CJK> +0x6726 # <CJK> +0x6728 # <CJK> +0x672A # <CJK> +0x672B # <CJK> +0x672C # <CJK> +0x672D # <CJK> +0x672F # <CJK> +0x6731 # <CJK> +0x6734 # <CJK> +0x6735 # <CJK> +0x673A # <CJK> +0x673D # <CJK> +0x6740 # <CJK> +0x6742 # <CJK> +0x6743 # <CJK> +0x6746 # <CJK> +0x6748 # <CJK> +0x6749 # <CJK> +0x674C # <CJK> +0x674E # <CJK> +0x674F # <CJK> +0x6750 # <CJK> +0x6751 # <CJK> +0x6753 # <CJK> +0x6756 # <CJK> +0x675C # <CJK> +0x675E # <CJK> +0x675F # <CJK> +0x6760 # <CJK> +0x6761 # <CJK> +0x6765 # <CJK> +0x6768 # <CJK> +0x6769 # <CJK> +0x676A # <CJK> +0x676D # <CJK> +0x676F # <CJK> +0x6770 # <CJK> +0x6772 # <CJK> +0x6773 # <CJK> +0x6775 # <CJK> +0x6777 # <CJK> +0x677C # <CJK> +0x677E # <CJK> +0x677F # <CJK> +0x6781 # <CJK> +0x6784 # <CJK> +0x6787 # <CJK> +0x6789 # <CJK> +0x678B # <CJK> +0x6790 # <CJK> +0x6795 # <CJK> +0x6797 # <CJK> +0x6798 # <CJK> +0x679A # <CJK> +0x679C # <CJK> +0x679D # <CJK> +0x679E # <CJK> +0x67A2 # <CJK> +0x67A3 # <CJK> +0x67A5 # <CJK> +0x67A7 # <CJK> +0x67A8 # <CJK> +0x67AA # <CJK> +0x67AB # <CJK> +0x67AD # <CJK> +0x67AF # <CJK> +0x67B0 # <CJK> +0x67B3 # <CJK> +0x67B5 # <CJK> +0x67B6 # <CJK> +0x67B7 # <CJK> +0x67B8 # <CJK> +0x67C1 # <CJK> +0x67C3 # <CJK> +0x67C4 # <CJK> +0x67CF # <CJK> +0x67D0 # <CJK> +0x67D1 # <CJK> +0x67D2 # <CJK> +0x67D3 # <CJK> +0x67D4 # <CJK> +0x67D8 # <CJK> +0x67D9 # <CJK> +0x67DA # <CJK> +0x67DC # <CJK> +0x67DD # <CJK> +0x67DE # <CJK> +0x67E0 # <CJK> +0x67E2 # <CJK> +0x67E5 # <CJK> +0x67E9 # <CJK> +0x67EC # <CJK> +0x67EF # <CJK> +0x67F0 # <CJK> +0x67F1 # <CJK> +0x67F3 # <CJK> +0x67F4 # <CJK> +0x67FD # <CJK> +0x67FF # <CJK> +0x6800 # <CJK> +0x6805 # <CJK> +0x6807 # <CJK> +0x6808 # <CJK> +0x6809 # <CJK> +0x680A # <CJK> +0x680B # <CJK> +0x680C # <CJK> +0x680E # <CJK> +0x680F # <CJK> +0x6811 # <CJK> +0x6813 # <CJK> +0x6816 # <CJK> +0x6817 # <CJK> +0x681D # <CJK> +0x6821 # <CJK> +0x6829 # <CJK> +0x682A # <CJK> +0x6832 # <CJK> +0x6833 # <CJK> +0x6837 # <CJK> +0x6838 # <CJK> +0x6839 # <CJK> +0x683C # <CJK> +0x683D # <CJK> +0x683E # <CJK> +0x6840 # <CJK> +0x6841 # <CJK> +0x6842 # <CJK> +0x6843 # <CJK> +0x6844 # <CJK> +0x6845 # <CJK> +0x6846 # <CJK> +0x6848 # <CJK> +0x6849 # <CJK> +0x684A # <CJK> +0x684C # <CJK> +0x684E # <CJK> +0x6850 # <CJK> +0x6851 # <CJK> +0x6853 # <CJK> +0x6854 # <CJK> +0x6855 # <CJK> +0x6860 # <CJK> +0x6861 # <CJK> +0x6862 # <CJK> +0x6863 # <CJK> +0x6864 # <CJK> +0x6865 # <CJK> +0x6866 # <CJK> +0x6867 # <CJK> +0x6868 # <CJK> +0x6869 # <CJK> +0x686B # <CJK> +0x6874 # <CJK> +0x6876 # <CJK> +0x6877 # <CJK> +0x6881 # <CJK> +0x6883 # <CJK> +0x6885 # <CJK> +0x6886 # <CJK> +0x688F # <CJK> +0x6893 # <CJK> +0x6897 # <CJK> +0x68A2 # <CJK> +0x68A6 # <CJK> +0x68A7 # <CJK> +0x68A8 # <CJK> +0x68AD # <CJK> +0x68AF # <CJK> +0x68B0 # <CJK> +0x68B3 # <CJK> +0x68B5 # <CJK> +0x68C0 # <CJK> +0x68C2 # <CJK> +0x68C9 # <CJK> +0x68CB # <CJK> +0x68CD # <CJK> +0x68D2 # <CJK> +0x68D5 # <CJK> +0x68D8 # <CJK> +0x68DA # <CJK> +0x68E0 # <CJK> +0x68E3 # <CJK> +0x68EE # <CJK> +0x68F0 # <CJK> +0x68F1 # <CJK> +0x68F5 # <CJK> +0x68F9 # <CJK> +0x68FA # <CJK> +0x68FC # <CJK> +0x6901 # <CJK> +0x6905 # <CJK> +0x690B # <CJK> +0x690D # <CJK> +0x690E # <CJK> +0x6910 # <CJK> +0x6912 # <CJK> +0x691F # <CJK> +0x6920 # <CJK> +0x6924 # <CJK> +0x692D # <CJK> +0x6930 # <CJK> +0x6934 # <CJK> +0x6939 # <CJK> +0x693D # <CJK> +0x693F # <CJK> +0x6942 # <CJK> +0x6954 # <CJK> +0x6957 # <CJK> +0x695A # <CJK> +0x695D # <CJK> +0x695E # <CJK> +0x6960 # <CJK> +0x6963 # <CJK> +0x6966 # <CJK> +0x696B # <CJK> +0x696E # <CJK> +0x6971 # <CJK> +0x6977 # <CJK> +0x6978 # <CJK> +0x6979 # <CJK> +0x697C # <CJK> +0x6980 # <CJK> +0x6982 # <CJK> +0x6984 # <CJK> +0x6986 # <CJK> +0x6987 # <CJK> +0x6988 # <CJK> +0x6989 # <CJK> +0x698D # <CJK> +0x6994 # <CJK> +0x6995 # <CJK> +0x6998 # <CJK> +0x699B # <CJK> +0x699C # <CJK> +0x69A7 # <CJK> +0x69A8 # <CJK> +0x69AB # <CJK> +0x69AD # <CJK> +0x69B1 # <CJK> +0x69B4 # <CJK> +0x69B7 # <CJK> +0x69BB # <CJK> +0x69C1 # <CJK> +0x69CA # <CJK> +0x69CC # <CJK> +0x69CE # <CJK> +0x69D0 # <CJK> +0x69D4 # <CJK> +0x69DB # <CJK> +0x69DF # <CJK> +0x69E0 # <CJK> +0x69ED # <CJK> +0x69F2 # <CJK> +0x69FD # <CJK> +0x69FF # <CJK> +0x6A0A # <CJK> +0x6A17 # <CJK> +0x6A18 # <CJK> +0x6A1F # <CJK> +0x6A21 # <CJK> +0x6A28 # <CJK> +0x6A2A # <CJK> +0x6A2F # <CJK> +0x6A31 # <CJK> +0x6A35 # <CJK> +0x6A3D # <CJK> +0x6A3E # <CJK> +0x6A44 # <CJK> +0x6A47 # <CJK> +0x6A50 # <CJK> +0x6A58 # <CJK> +0x6A59 # <CJK> +0x6A5B # <CJK> +0x6A61 # <CJK> +0x6A65 # <CJK> +0x6A71 # <CJK> +0x6A79 # <CJK> +0x6A7C # <CJK> +0x6A80 # <CJK> +0x6A84 # <CJK> +0x6A8E # <CJK> +0x6A90 # <CJK> +0x6A91 # <CJK> +0x6A97 # <CJK> +0x6AA0 # <CJK> +0x6AA9 # <CJK> +0x6AAB # <CJK> +0x6AAC # <CJK> +0x6B20 # <CJK> +0x6B21 # <CJK> +0x6B22 # <CJK> +0x6B23 # <CJK> +0x6B24 # <CJK> +0x6B27 # <CJK> +0x6B32 # <CJK> +0x6B37 # <CJK> +0x6B39 # <CJK> +0x6B3A # <CJK> +0x6B3E # <CJK> +0x6B43 # <CJK> +0x6B46 # <CJK> +0x6B47 # <CJK> +0x6B49 # <CJK> +0x6B4C # <CJK> +0x6B59 # <CJK> +0x6B62 # <CJK> +0x6B63 # <CJK> +0x6B64 # <CJK> +0x6B65 # <CJK> +0x6B66 # <CJK> +0x6B67 # <CJK> +0x6B6A # <CJK> +0x6B79 # <CJK> +0x6B7B # <CJK> +0x6B7C # <CJK> +0x6B81 # <CJK> +0x6B82 # <CJK> +0x6B83 # <CJK> +0x6B84 # <CJK> +0x6B86 # <CJK> +0x6B87 # <CJK> +0x6B89 # <CJK> +0x6B8A # <CJK> +0x6B8B # <CJK> +0x6B8D # <CJK> +0x6B92 # <CJK> +0x6B93 # <CJK> +0x6B96 # <CJK> +0x6B9A # <CJK> +0x6B9B # <CJK> +0x6BA1 # <CJK> +0x6BAA # <CJK> +0x6BB3 # <CJK> +0x6BB4 # <CJK> +0x6BB5 # <CJK> +0x6BB7 # <CJK> +0x6BBF # <CJK> +0x6BC1 # <CJK> +0x6BC2 # <CJK> +0x6BC5 # <CJK> +0x6BCB # <CJK> +0x6BCD # <CJK> +0x6BCF # <CJK> +0x6BD2 # <CJK> +0x6BD3 # <CJK> +0x6BD4 # <CJK> +0x6BD5 # <CJK> +0x6BD6 # <CJK> +0x6BD7 # <CJK> +0x6BD9 # <CJK> +0x6BDB # <CJK> +0x6BE1 # <CJK> +0x6BEA # <CJK> +0x6BEB # <CJK> +0x6BEF # <CJK> +0x6BF3 # <CJK> +0x6BF5 # <CJK> +0x6BF9 # <CJK> +0x6BFD # <CJK> +0x6C05 # <CJK> +0x6C06 # <CJK> +0x6C07 # <CJK> +0x6C0D # <CJK> +0x6C0F # <CJK> +0x6C10 # <CJK> +0x6C11 # <CJK> +0x6C13 # <CJK> +0x6C14 # <CJK> +0x6C15 # <CJK> +0x6C16 # <CJK> +0x6C18 # <CJK> +0x6C19 # <CJK> +0x6C1A # <CJK> +0x6C1B # <CJK> +0x6C1F # <CJK> +0x6C21 # <CJK> +0x6C22 # <CJK> +0x6C24 # <CJK> +0x6C26 # <CJK> +0x6C27 # <CJK> +0x6C28 # <CJK> +0x6C29 # <CJK> +0x6C2A # <CJK> +0x6C2E # <CJK> +0x6C2F # <CJK> +0x6C30 # <CJK> +0x6C32 # <CJK> +0x6C34 # <CJK> +0x6C35 # <CJK> +0x6C38 # <CJK> +0x6C3D # <CJK> +0x6C40 # <CJK> +0x6C41 # <CJK> +0x6C42 # <CJK> +0x6C46 # <CJK> +0x6C47 # <CJK> +0x6C49 # <CJK> +0x6C4A # <CJK> +0x6C50 # <CJK> +0x6C54 # <CJK> +0x6C55 # <CJK> +0x6C57 # <CJK> +0x6C5B # <CJK> +0x6C5C # <CJK> +0x6C5D # <CJK> +0x6C5E # <CJK> +0x6C5F # <CJK> +0x6C60 # <CJK> +0x6C61 # <CJK> +0x6C64 # <CJK> +0x6C68 # <CJK> +0x6C69 # <CJK> +0x6C6A # <CJK> +0x6C70 # <CJK> +0x6C72 # <CJK> +0x6C74 # <CJK> +0x6C76 # <CJK> +0x6C79 # <CJK> +0x6C7D # <CJK> +0x6C7E # <CJK> +0x6C81 # <CJK> +0x6C82 # <CJK> +0x6C83 # <CJK> +0x6C85 # <CJK> +0x6C86 # <CJK> +0x6C88 # <CJK> +0x6C89 # <CJK> +0x6C8C # <CJK> +0x6C8F # <CJK> +0x6C90 # <CJK> +0x6C93 # <CJK> +0x6C94 # <CJK> +0x6C99 # <CJK> +0x6C9B # <CJK> +0x6C9F # <CJK> +0x6CA1 # <CJK> +0x6CA3 # <CJK> +0x6CA4 # <CJK> +0x6CA5 # <CJK> +0x6CA6 # <CJK> +0x6CA7 # <CJK> +0x6CA9 # <CJK> +0x6CAA # <CJK> +0x6CAB # <CJK> +0x6CAD # <CJK> +0x6CAE # <CJK> +0x6CB1 # <CJK> +0x6CB2 # <CJK> +0x6CB3 # <CJK> +0x6CB8 # <CJK> +0x6CB9 # <CJK> +0x6CBB # <CJK> +0x6CBC # <CJK> +0x6CBD # <CJK> +0x6CBE # <CJK> +0x6CBF # <CJK> +0x6CC4 # <CJK> +0x6CC5 # <CJK> +0x6CC9 # <CJK> +0x6CCA # <CJK> +0x6CCC # <CJK> +0x6CD0 # <CJK> +0x6CD3 # <CJK> +0x6CD4 # <CJK> +0x6CD5 # <CJK> +0x6CD6 # <CJK> +0x6CD7 # <CJK> +0x6CDB # <CJK> +0x6CDE # <CJK> +0x6CE0 # <CJK> +0x6CE1 # <CJK> +0x6CE2 # <CJK> +0x6CE3 # <CJK> +0x6CE5 # <CJK> +0x6CE8 # <CJK> +0x6CEA # <CJK> +0x6CEB # <CJK> +0x6CEE # <CJK> +0x6CEF # <CJK> +0x6CF0 # <CJK> +0x6CF1 # <CJK> +0x6CF3 # <CJK> +0x6CF5 # <CJK> +0x6CF6 # <CJK> +0x6CF7 # <CJK> +0x6CF8 # <CJK> +0x6CFA # <CJK> +0x6CFB # <CJK> +0x6CFC # <CJK> +0x6CFD # <CJK> +0x6CFE # <CJK> +0x6D01 # <CJK> +0x6D04 # <CJK> +0x6D07 # <CJK> +0x6D0B # <CJK> +0x6D0C # <CJK> +0x6D0E # <CJK> +0x6D12 # <CJK> +0x6D17 # <CJK> +0x6D19 # <CJK> +0x6D1A # <CJK> +0x6D1B # <CJK> +0x6D1E # <CJK> +0x6D25 # <CJK> +0x6D27 # <CJK> +0x6D2A # <CJK> +0x6D2B # <CJK> +0x6D2E # <CJK> +0x6D31 # <CJK> +0x6D32 # <CJK> +0x6D33 # <CJK> +0x6D35 # <CJK> +0x6D39 # <CJK> +0x6D3B # <CJK> +0x6D3C # <CJK> +0x6D3D # <CJK> +0x6D3E # <CJK> +0x6D41 # <CJK> +0x6D43 # <CJK> +0x6D45 # <CJK> +0x6D46 # <CJK> +0x6D47 # <CJK> +0x6D48 # <CJK> +0x6D4A # <CJK> +0x6D4B # <CJK> +0x6D4D # <CJK> +0x6D4E # <CJK> +0x6D4F # <CJK> +0x6D51 # <CJK> +0x6D52 # <CJK> +0x6D53 # <CJK> +0x6D54 # <CJK> +0x6D59 # <CJK> +0x6D5A # <CJK> +0x6D5C # <CJK> +0x6D5E # <CJK> +0x6D60 # <CJK> +0x6D63 # <CJK> +0x6D66 # <CJK> +0x6D69 # <CJK> +0x6D6A # <CJK> +0x6D6E # <CJK> +0x6D6F # <CJK> +0x6D74 # <CJK> +0x6D77 # <CJK> +0x6D78 # <CJK> +0x6D7C # <CJK> +0x6D82 # <CJK> +0x6D85 # <CJK> +0x6D88 # <CJK> +0x6D89 # <CJK> +0x6D8C # <CJK> +0x6D8E # <CJK> +0x6D91 # <CJK> +0x6D93 # <CJK> +0x6D94 # <CJK> +0x6D95 # <CJK> +0x6D9B # <CJK> +0x6D9D # <CJK> +0x6D9E # <CJK> +0x6D9F # <CJK> +0x6DA0 # <CJK> +0x6DA1 # <CJK> +0x6DA3 # <CJK> +0x6DA4 # <CJK> +0x6DA6 # <CJK> +0x6DA7 # <CJK> +0x6DA8 # <CJK> +0x6DA9 # <CJK> +0x6DAA # <CJK> +0x6DAB # <CJK> +0x6DAE # <CJK> +0x6DAF # <CJK> +0x6DB2 # <CJK> +0x6DB5 # <CJK> +0x6DB8 # <CJK> +0x6DBF # <CJK> +0x6DC0 # <CJK> +0x6DC4 # <CJK> +0x6DC5 # <CJK> +0x6DC6 # <CJK> +0x6DC7 # <CJK> +0x6DCB # <CJK> +0x6DCC # <CJK> +0x6DD1 # <CJK> +0x6DD6 # <CJK> +0x6DD8 # <CJK> +0x6DD9 # <CJK> +0x6DDD # <CJK> +0x6DDE # <CJK> +0x6DE0 # <CJK> +0x6DE1 # <CJK> +0x6DE4 # <CJK> +0x6DE6 # <CJK> +0x6DEB # <CJK> +0x6DEC # <CJK> +0x6DEE # <CJK> +0x6DF1 # <CJK> +0x6DF3 # <CJK> +0x6DF7 # <CJK> +0x6DF9 # <CJK> +0x6DFB # <CJK> +0x6DFC # <CJK> +0x6E05 # <CJK> +0x6E0A # <CJK> +0x6E0C # <CJK> +0x6E0D # <CJK> +0x6E0E # <CJK> +0x6E10 # <CJK> +0x6E11 # <CJK> +0x6E14 # <CJK> +0x6E16 # <CJK> +0x6E17 # <CJK> +0x6E1A # <CJK> +0x6E1D # <CJK> +0x6E20 # <CJK> +0x6E21 # <CJK> +0x6E23 # <CJK> +0x6E24 # <CJK> +0x6E25 # <CJK> +0x6E29 # <CJK> +0x6E2B # <CJK> +0x6E2D # <CJK> +0x6E2F # <CJK> +0x6E32 # <CJK> +0x6E34 # <CJK> +0x6E38 # <CJK> +0x6E3A # <CJK> +0x6E43 # <CJK> +0x6E44 # <CJK> +0x6E4D # <CJK> +0x6E4E # <CJK> +0x6E53 # <CJK> +0x6E54 # <CJK> +0x6E56 # <CJK> +0x6E58 # <CJK> +0x6E5B # <CJK> +0x6E5F # <CJK> +0x6E6B # <CJK> +0x6E6E # <CJK> +0x6E7E # <CJK> +0x6E7F # <CJK> +0x6E83 # <CJK> +0x6E85 # <CJK> +0x6E86 # <CJK> +0x6E89 # <CJK> +0x6E8F # <CJK> +0x6E90 # <CJK> +0x6E98 # <CJK> +0x6E9C # <CJK> +0x6E9F # <CJK> +0x6EA2 # <CJK> +0x6EA5 # <CJK> +0x6EA7 # <CJK> +0x6EAA # <CJK> +0x6EAF # <CJK> +0x6EB1 # <CJK> +0x6EB2 # <CJK> +0x6EB4 # <CJK> +0x6EB6 # <CJK> +0x6EB7 # <CJK> +0x6EBA # <CJK> +0x6EBB # <CJK> +0x6EBD # <CJK> +0x6EC1 # <CJK> +0x6EC2 # <CJK> +0x6EC7 # <CJK> +0x6ECB # <CJK> +0x6ECF # <CJK> +0x6ED1 # <CJK> +0x6ED3 # <CJK> +0x6ED4 # <CJK> +0x6ED5 # <CJK> +0x6ED7 # <CJK> +0x6EDA # <CJK> +0x6EDE # <CJK> +0x6EDF # <CJK> +0x6EE0 # <CJK> +0x6EE1 # <CJK> +0x6EE2 # <CJK> +0x6EE4 # <CJK> +0x6EE5 # <CJK> +0x6EE6 # <CJK> +0x6EE8 # <CJK> +0x6EE9 # <CJK> +0x6EF4 # <CJK> +0x6EF9 # <CJK> +0x6F02 # <CJK> +0x6F06 # <CJK> +0x6F09 # <CJK> +0x6F0F # <CJK> +0x6F13 # <CJK> +0x6F14 # <CJK> +0x6F15 # <CJK> +0x6F20 # <CJK> +0x6F24 # <CJK> +0x6F29 # <CJK> +0x6F2A # <CJK> +0x6F2B # <CJK> +0x6F2D # <CJK> +0x6F2F # <CJK> +0x6F31 # <CJK> +0x6F33 # <CJK> +0x6F36 # <CJK> +0x6F3E # <CJK> +0x6F46 # <CJK> +0x6F47 # <CJK> +0x6F4B # <CJK> +0x6F4D # <CJK> +0x6F58 # <CJK> +0x6F5C # <CJK> +0x6F5E # <CJK> +0x6F62 # <CJK> +0x6F66 # <CJK> +0x6F6D # <CJK> +0x6F6E # <CJK> +0x6F72 # <CJK> +0x6F74 # <CJK> +0x6F78 # <CJK> +0x6F7A # <CJK> +0x6F7C # <CJK> +0x6F84 # <CJK> +0x6F88 # <CJK> +0x6F89 # <CJK> +0x6F8C # <CJK> +0x6F8D # <CJK> +0x6F8E # <CJK> +0x6F9C # <CJK> +0x6FA1 # <CJK> +0x6FA7 # <CJK> +0x6FB3 # <CJK> +0x6FB6 # <CJK> +0x6FB9 # <CJK> +0x6FC0 # <CJK> +0x6FC2 # <CJK> +0x6FC9 # <CJK> +0x6FD1 # <CJK> +0x6FD2 # <CJK> +0x6FDE # <CJK> +0x6FE0 # <CJK> +0x6FE1 # <CJK> +0x6FEE # <CJK> +0x6FEF # <CJK> +0x7011 # <CJK> +0x701A # <CJK> +0x701B # <CJK> +0x7023 # <CJK> +0x7035 # <CJK> +0x7039 # <CJK> +0x704C # <CJK> +0x704F # <CJK> +0x705E # <CJK> +0x706B # <CJK> +0x706C # <CJK> +0x706D # <CJK> +0x706F # <CJK> +0x7070 # <CJK> +0x7075 # <CJK> +0x7076 # <CJK> +0x7078 # <CJK> +0x707C # <CJK> +0x707E # <CJK> +0x707F # <CJK> +0x7080 # <CJK> +0x7085 # <CJK> +0x7089 # <CJK> +0x708A # <CJK> +0x708E # <CJK> +0x7092 # <CJK> +0x7094 # <CJK> +0x7095 # <CJK> +0x7096 # <CJK> +0x7099 # <CJK> +0x709C # <CJK> +0x709D # <CJK> +0x70AB # <CJK> +0x70AC # <CJK> +0x70AD # <CJK> +0x70AE # <CJK> +0x70AF # <CJK> +0x70B1 # <CJK> +0x70B3 # <CJK> +0x70B7 # <CJK> +0x70B8 # <CJK> +0x70B9 # <CJK> +0x70BB # <CJK> +0x70BC # <CJK> +0x70BD # <CJK> +0x70C0 # <CJK> +0x70C1 # <CJK> +0x70C2 # <CJK> +0x70C3 # <CJK> +0x70C8 # <CJK> +0x70CA # <CJK> +0x70D8 # <CJK> +0x70D9 # <CJK> +0x70DB # <CJK> +0x70DF # <CJK> +0x70E4 # <CJK> +0x70E6 # <CJK> +0x70E7 # <CJK> +0x70E8 # <CJK> +0x70E9 # <CJK> +0x70EB # <CJK> +0x70EC # <CJK> +0x70ED # <CJK> +0x70EF # <CJK> +0x70F7 # <CJK> +0x70F9 # <CJK> +0x70FD # <CJK> +0x7109 # <CJK> +0x710A # <CJK> +0x7110 # <CJK> +0x7113 # <CJK> +0x7115 # <CJK> +0x7116 # <CJK> +0x7118 # <CJK> +0x7119 # <CJK> +0x711A # <CJK> +0x7126 # <CJK> +0x712F # <CJK> +0x7130 # <CJK> +0x7131 # <CJK> +0x7136 # <CJK> +0x7145 # <CJK> +0x714A # <CJK> +0x714C # <CJK> +0x714E # <CJK> +0x715C # <CJK> +0x715E # <CJK> +0x7164 # <CJK> +0x7166 # <CJK> +0x7167 # <CJK> +0x7168 # <CJK> +0x716E # <CJK> +0x7172 # <CJK> +0x7173 # <CJK> +0x7178 # <CJK> +0x717A # <CJK> +0x717D # <CJK> +0x7184 # <CJK> +0x718A # <CJK> +0x718F # <CJK> +0x7194 # <CJK> +0x7198 # <CJK> +0x7199 # <CJK> +0x719F # <CJK> +0x71A0 # <CJK> +0x71A8 # <CJK> +0x71AC # <CJK> +0x71B3 # <CJK> +0x71B5 # <CJK> +0x71B9 # <CJK> +0x71C3 # <CJK> +0x71CE # <CJK> +0x71D4 # <CJK> +0x71D5 # <CJK> +0x71E0 # <CJK> +0x71E5 # <CJK> +0x71E7 # <CJK> +0x71EE # <CJK> +0x71F9 # <CJK> +0x7206 # <CJK> +0x721D # <CJK> +0x7228 # <CJK> +0x722A # <CJK> +0x722C # <CJK> +0x7230 # <CJK> +0x7231 # <CJK> +0x7235 # <CJK> +0x7236 # <CJK> +0x7237 # <CJK> +0x7238 # <CJK> +0x7239 # <CJK> +0x723B # <CJK> +0x723D # <CJK> +0x723F # <CJK> +0x7247 # <CJK> +0x7248 # <CJK> +0x724C # <CJK> +0x724D # <CJK> +0x7252 # <CJK> +0x7256 # <CJK> +0x7259 # <CJK> +0x725B # <CJK> +0x725D # <CJK> +0x725F # <CJK> +0x7261 # <CJK> +0x7262 # <CJK> +0x7266 # <CJK> +0x7267 # <CJK> +0x7269 # <CJK> +0x726E # <CJK> +0x726F # <CJK> +0x7272 # <CJK> +0x7275 # <CJK> +0x7279 # <CJK> +0x727A # <CJK> +0x727E # <CJK> +0x727F # <CJK> +0x7280 # <CJK> +0x7281 # <CJK> +0x7284 # <CJK> +0x728A # <CJK> +0x728B # <CJK> +0x728D # <CJK> +0x728F # <CJK> +0x7292 # <CJK> +0x729F # <CJK> +0x72AC # <CJK> +0x72AD # <CJK> +0x72AF # <CJK> +0x72B0 # <CJK> +0x72B4 # <CJK> +0x72B6 # <CJK> +0x72B7 # <CJK> +0x72B8 # <CJK> +0x72B9 # <CJK> +0x72C1 # <CJK> +0x72C2 # <CJK> +0x72C3 # <CJK> +0x72C4 # <CJK> +0x72C8 # <CJK> +0x72CD # <CJK> +0x72CE # <CJK> +0x72D0 # <CJK> +0x72D2 # <CJK> +0x72D7 # <CJK> +0x72D9 # <CJK> +0x72DE # <CJK> +0x72E0 # <CJK> +0x72E1 # <CJK> +0x72E8 # <CJK> +0x72E9 # <CJK> +0x72EC # <CJK> +0x72ED # <CJK> +0x72EE # <CJK> +0x72EF # <CJK> +0x72F0 # <CJK> +0x72F1 # <CJK> +0x72F2 # <CJK> +0x72F3 # <CJK> +0x72F4 # <CJK> +0x72F7 # <CJK> +0x72F8 # <CJK> +0x72FA # <CJK> +0x72FB # <CJK> +0x72FC # <CJK> +0x7301 # <CJK> +0x7303 # <CJK> +0x730A # <CJK> +0x730E # <CJK> +0x7313 # <CJK> +0x7315 # <CJK> +0x7316 # <CJK> +0x7317 # <CJK> +0x731B # <CJK> +0x731C # <CJK> +0x731D # <CJK> +0x731E # <CJK> +0x7321 # <CJK> +0x7322 # <CJK> +0x7325 # <CJK> +0x7329 # <CJK> +0x732A # <CJK> +0x732B # <CJK> +0x732C # <CJK> +0x732E # <CJK> +0x7331 # <CJK> +0x7334 # <CJK> +0x7337 # <CJK> +0x7338 # <CJK> +0x7339 # <CJK> +0x733E # <CJK> +0x733F # <CJK> +0x734D # <CJK> +0x7350 # <CJK> +0x7352 # <CJK> +0x7357 # <CJK> +0x7360 # <CJK> +0x736C # <CJK> +0x736D # <CJK> +0x736F # <CJK> +0x737E # <CJK> +0x7384 # <CJK> +0x7387 # <CJK> +0x7389 # <CJK> +0x738B # <CJK> +0x738E # <CJK> +0x7391 # <CJK> +0x7396 # <CJK> +0x739B # <CJK> +0x739F # <CJK> +0x73A2 # <CJK> +0x73A9 # <CJK> +0x73AB # <CJK> +0x73AE # <CJK> +0x73AF # <CJK> +0x73B0 # <CJK> +0x73B2 # <CJK> +0x73B3 # <CJK> +0x73B7 # <CJK> +0x73BA # <CJK> +0x73BB # <CJK> +0x73C0 # <CJK> +0x73C2 # <CJK> +0x73C8 # <CJK> +0x73C9 # <CJK> +0x73CA # <CJK> +0x73CD # <CJK> +0x73CF # <CJK> +0x73D0 # <CJK> +0x73D1 # <CJK> +0x73D9 # <CJK> +0x73DE # <CJK> +0x73E0 # <CJK> +0x73E5 # <CJK> +0x73E7 # <CJK> +0x73E9 # <CJK> +0x73ED # <CJK> +0x73F2 # <CJK> +0x7403 # <CJK> +0x7405 # <CJK> +0x7406 # <CJK> +0x7409 # <CJK> +0x740A # <CJK> +0x740F # <CJK> +0x7410 # <CJK> +0x741A # <CJK> +0x741B # <CJK> +0x7422 # <CJK> +0x7425 # <CJK> +0x7426 # <CJK> +0x7428 # <CJK> +0x742A # <CJK> +0x742C # <CJK> +0x742E # <CJK> +0x7430 # <CJK> +0x7433 # <CJK> +0x7434 # <CJK> +0x7435 # <CJK> +0x7436 # <CJK> +0x743C # <CJK> +0x7441 # <CJK> +0x7455 # <CJK> +0x7457 # <CJK> +0x7459 # <CJK> +0x745A # <CJK> +0x745B # <CJK> +0x745C # <CJK> +0x745E # <CJK> +0x745F # <CJK> +0x746D # <CJK> +0x7470 # <CJK> +0x7476 # <CJK> +0x7477 # <CJK> +0x747E # <CJK> +0x7480 # <CJK> +0x7481 # <CJK> +0x7483 # <CJK> +0x7487 # <CJK> +0x748B # <CJK> +0x748E # <CJK> +0x7490 # <CJK> +0x749C # <CJK> +0x749E # <CJK> +0x74A7 # <CJK> +0x74A8 # <CJK> +0x74A9 # <CJK> +0x74BA # <CJK> +0x74D2 # <CJK> +0x74DC # <CJK> +0x74DE # <CJK> +0x74E0 # <CJK> +0x74E2 # <CJK> +0x74E3 # <CJK> +0x74E4 # <CJK> +0x74E6 # <CJK> +0x74EE # <CJK> +0x74EF # <CJK> +0x74F4 # <CJK> +0x74F6 # <CJK> +0x74F7 # <CJK> +0x74FF # <CJK> +0x7504 # <CJK> +0x750D # <CJK> +0x750F # <CJK> +0x7511 # <CJK> +0x7513 # <CJK> +0x7518 # <CJK> +0x7519 # <CJK> +0x751A # <CJK> +0x751C # <CJK> +0x751F # <CJK> +0x7525 # <CJK> +0x7528 # <CJK> +0x7529 # <CJK> +0x752B # <CJK> +0x752C # <CJK> +0x752D # <CJK> +0x752F # <CJK> +0x7530 # <CJK> +0x7531 # <CJK> +0x7532 # <CJK> +0x7533 # <CJK> +0x7535 # <CJK> +0x7537 # <CJK> +0x7538 # <CJK> +0x753A # <CJK> +0x753B # <CJK> +0x753E # <CJK> +0x7540 # <CJK> +0x7545 # <CJK> +0x7548 # <CJK> +0x754B # <CJK> +0x754C # <CJK> +0x754E # <CJK> +0x754F # <CJK> +0x7554 # <CJK> +0x7559 # <CJK> +0x755A # <CJK> +0x755B # <CJK> +0x755C # <CJK> +0x7565 # <CJK> +0x7566 # <CJK> +0x756A # <CJK> +0x7572 # <CJK> +0x7574 # <CJK> +0x7578 # <CJK> +0x7579 # <CJK> +0x757F # <CJK> +0x7583 # <CJK> +0x7586 # <CJK> +0x758B # <CJK> +0x758F # <CJK> +0x7591 # <CJK> +0x7592 # <CJK> +0x7594 # <CJK> +0x7596 # <CJK> +0x7597 # <CJK> +0x7599 # <CJK> +0x759A # <CJK> +0x759D # <CJK> +0x759F # <CJK> +0x75A0 # <CJK> +0x75A1 # <CJK> +0x75A3 # <CJK> +0x75A4 # <CJK> +0x75A5 # <CJK> +0x75AB # <CJK> +0x75AC # <CJK> +0x75AE # <CJK> +0x75AF # <CJK> +0x75B0 # <CJK> +0x75B1 # <CJK> +0x75B2 # <CJK> +0x75B3 # <CJK> +0x75B4 # <CJK> +0x75B5 # <CJK> +0x75B8 # <CJK> +0x75B9 # <CJK> +0x75BC # <CJK> +0x75BD # <CJK> +0x75BE # <CJK> +0x75C2 # <CJK> +0x75C3 # <CJK> +0x75C4 # <CJK> +0x75C5 # <CJK> +0x75C7 # <CJK> +0x75C8 # <CJK> +0x75C9 # <CJK> +0x75CA # <CJK> +0x75CD # <CJK> +0x75D2 # <CJK> +0x75D4 # <CJK> +0x75D5 # <CJK> +0x75D6 # <CJK> +0x75D8 # <CJK> +0x75DB # <CJK> +0x75DE # <CJK> +0x75E2 # <CJK> +0x75E3 # <CJK> +0x75E4 # <CJK> +0x75E6 # <CJK> +0x75E7 # <CJK> +0x75E8 # <CJK> +0x75EA # <CJK> +0x75EB # <CJK> +0x75F0 # <CJK> +0x75F1 # <CJK> +0x75F4 # <CJK> +0x75F9 # <CJK> +0x75FC # <CJK> +0x75FF # <CJK> +0x7600 # <CJK> +0x7601 # <CJK> +0x7603 # <CJK> +0x7605 # <CJK> +0x760A # <CJK> +0x760C # <CJK> +0x7610 # <CJK> +0x7615 # <CJK> +0x7617 # <CJK> +0x7618 # <CJK> +0x7619 # <CJK> +0x761B # <CJK> +0x761F # <CJK> +0x7620 # <CJK> +0x7622 # <CJK> +0x7624 # <CJK> +0x7625 # <CJK> +0x7626 # <CJK> +0x7629 # <CJK> +0x762A # <CJK> +0x762B # <CJK> +0x762D # <CJK> +0x7630 # <CJK> +0x7633 # <CJK> +0x7634 # <CJK> +0x7635 # <CJK> +0x7638 # <CJK> +0x763C # <CJK> +0x763E # <CJK> +0x763F # <CJK> +0x7640 # <CJK> +0x7643 # <CJK> +0x764C # <CJK> +0x764D # <CJK> +0x7654 # <CJK> +0x7656 # <CJK> +0x765C # <CJK> +0x765E # <CJK> +0x7663 # <CJK> +0x766B # <CJK> +0x766F # <CJK> +0x7678 # <CJK> +0x767B # <CJK> +0x767D # <CJK> +0x767E # <CJK> +0x7682 # <CJK> +0x7684 # <CJK> +0x7686 # <CJK> +0x7687 # <CJK> +0x7688 # <CJK> +0x768B # <CJK> +0x768E # <CJK> +0x7691 # <CJK> +0x7693 # <CJK> +0x7696 # <CJK> +0x7699 # <CJK> +0x76A4 # <CJK> +0x76AE # <CJK> +0x76B1 # <CJK> +0x76B2 # <CJK> +0x76B4 # <CJK> +0x76BF # <CJK> +0x76C2 # <CJK> +0x76C5 # <CJK> +0x76C6 # <CJK> +0x76C8 # <CJK> +0x76CA # <CJK> +0x76CD # <CJK> +0x76CE # <CJK> +0x76CF # <CJK> +0x76D0 # <CJK> +0x76D1 # <CJK> +0x76D2 # <CJK> +0x76D4 # <CJK> +0x76D6 # <CJK> +0x76D7 # <CJK> +0x76D8 # <CJK> +0x76DB # <CJK> +0x76DF # <CJK> +0x76E5 # <CJK> +0x76EE # <CJK> +0x76EF # <CJK> +0x76F1 # <CJK> +0x76F2 # <CJK> +0x76F4 # <CJK> +0x76F8 # <CJK> +0x76F9 # <CJK> +0x76FC # <CJK> +0x76FE # <CJK> +0x7701 # <CJK> +0x7704 # <CJK> +0x7707 # <CJK> +0x7708 # <CJK> +0x7709 # <CJK> +0x770B # <CJK> +0x770D # <CJK> +0x7719 # <CJK> +0x771A # <CJK> +0x771F # <CJK> +0x7720 # <CJK> +0x7722 # <CJK> +0x7726 # <CJK> +0x7728 # <CJK> +0x7729 # <CJK> +0x772D # <CJK> +0x772F # <CJK> +0x7735 # <CJK> +0x7736 # <CJK> +0x7737 # <CJK> +0x7738 # <CJK> +0x773A # <CJK> +0x773C # <CJK> +0x7740 # <CJK> +0x7741 # <CJK> +0x7743 # <CJK> +0x7747 # <CJK> +0x7750 # <CJK> +0x7751 # <CJK> +0x775A # <CJK> +0x775B # <CJK> +0x7761 # <CJK> +0x7762 # <CJK> +0x7763 # <CJK> +0x7765 # <CJK> +0x7766 # <CJK> +0x7768 # <CJK> +0x776B # <CJK> +0x776C # <CJK> +0x7779 # <CJK> +0x777D # <CJK> +0x777E # <CJK> +0x777F # <CJK> +0x7780 # <CJK> +0x7784 # <CJK> +0x7785 # <CJK> +0x778C # <CJK> +0x778D # <CJK> +0x778E # <CJK> +0x7791 # <CJK> +0x7792 # <CJK> +0x779F # <CJK> +0x77A0 # <CJK> +0x77A2 # <CJK> +0x77A5 # <CJK> +0x77A7 # <CJK> +0x77A9 # <CJK> +0x77AA # <CJK> +0x77AC # <CJK> +0x77B0 # <CJK> +0x77B3 # <CJK> +0x77B5 # <CJK> +0x77BB # <CJK> +0x77BD # <CJK> +0x77BF # <CJK> +0x77CD # <CJK> +0x77D7 # <CJK> +0x77DB # <CJK> +0x77DC # <CJK> +0x77E2 # <CJK> +0x77E3 # <CJK> +0x77E5 # <CJK> +0x77E7 # <CJK> +0x77E9 # <CJK> +0x77EB # <CJK> +0x77EC # <CJK> +0x77ED # <CJK> +0x77EE # <CJK> +0x77F3 # <CJK> +0x77F6 # <CJK> +0x77F8 # <CJK> +0x77FD # <CJK> +0x77FE # <CJK> +0x77FF # <CJK> +0x7800 # <CJK> +0x7801 # <CJK> +0x7802 # <CJK> +0x7809 # <CJK> +0x780C # <CJK> +0x780D # <CJK> +0x7811 # <CJK> +0x7812 # <CJK> +0x7814 # <CJK> +0x7816 # <CJK> +0x7817 # <CJK> +0x7818 # <CJK> +0x781A # <CJK> +0x781C # <CJK> +0x781D # <CJK> +0x781F # <CJK> +0x7823 # <CJK> +0x7825 # <CJK> +0x7826 # <CJK> +0x7827 # <CJK> +0x7829 # <CJK> +0x782C # <CJK> +0x782D # <CJK> +0x7830 # <CJK> +0x7834 # <CJK> +0x7837 # <CJK> +0x7838 # <CJK> +0x7839 # <CJK> +0x783A # <CJK> +0x783B # <CJK> +0x783C # <CJK> +0x783E # <CJK> +0x7840 # <CJK> +0x7845 # <CJK> +0x7847 # <CJK> +0x784C # <CJK> +0x784E # <CJK> +0x7850 # <CJK> +0x7852 # <CJK> +0x7855 # <CJK> +0x7856 # <CJK> +0x7857 # <CJK> +0x785D # <CJK> +0x786A # <CJK> +0x786B # <CJK> +0x786C # <CJK> +0x786D # <CJK> +0x786E # <CJK> +0x7877 # <CJK> +0x787C # <CJK> +0x7887 # <CJK> +0x7889 # <CJK> +0x788C # <CJK> +0x788D # <CJK> +0x788E # <CJK> +0x7891 # <CJK> +0x7893 # <CJK> +0x7897 # <CJK> +0x7898 # <CJK> +0x789A # <CJK> +0x789B # <CJK> +0x789C # <CJK> +0x789F # <CJK> +0x78A1 # <CJK> +0x78A3 # <CJK> +0x78A5 # <CJK> +0x78A7 # <CJK> +0x78B0 # <CJK> +0x78B1 # <CJK> +0x78B2 # <CJK> +0x78B3 # <CJK> +0x78B4 # <CJK> +0x78B9 # <CJK> +0x78BE # <CJK> +0x78C1 # <CJK> +0x78C5 # <CJK> +0x78C9 # <CJK> +0x78CA # <CJK> +0x78CB # <CJK> +0x78D0 # <CJK> +0x78D4 # <CJK> +0x78D5 # <CJK> +0x78D9 # <CJK> +0x78E8 # <CJK> +0x78EC # <CJK> +0x78F2 # <CJK> +0x78F4 # <CJK> +0x78F7 # <CJK> +0x78FA # <CJK> +0x7901 # <CJK> +0x7905 # <CJK> +0x7913 # <CJK> +0x791E # <CJK> +0x7924 # <CJK> +0x7934 # <CJK> +0x793A # <CJK> +0x793B # <CJK> +0x793C # <CJK> +0x793E # <CJK> +0x7940 # <CJK> +0x7941 # <CJK> +0x7946 # <CJK> +0x7948 # <CJK> +0x7949 # <CJK> +0x7953 # <CJK> +0x7956 # <CJK> +0x7957 # <CJK> +0x795A # <CJK> +0x795B # <CJK> +0x795C # <CJK> +0x795D # <CJK> +0x795E # <CJK> +0x795F # <CJK> +0x7960 # <CJK> +0x7962 # <CJK> +0x7965 # <CJK> +0x7967 # <CJK> +0x7968 # <CJK> +0x796D # <CJK> +0x796F # <CJK> +0x7977 # <CJK> +0x7978 # <CJK> +0x797A # <CJK> +0x7980 # <CJK> +0x7981 # <CJK> +0x7984 # <CJK> +0x7985 # <CJK> +0x798A # <CJK> +0x798F # <CJK> +0x799A # <CJK> +0x79A7 # <CJK> +0x79B3 # <CJK> +0x79B9 # <CJK> +0x79BA # <CJK> +0x79BB # <CJK> +0x79BD # <CJK> +0x79BE # <CJK> +0x79C0 # <CJK> +0x79C1 # <CJK> +0x79C3 # <CJK> +0x79C6 # <CJK> +0x79C9 # <CJK> +0x79CB # <CJK> +0x79CD # <CJK> +0x79D1 # <CJK> +0x79D2 # <CJK> +0x79D5 # <CJK> +0x79D8 # <CJK> +0x79DF # <CJK> +0x79E3 # <CJK> +0x79E4 # <CJK> +0x79E6 # <CJK> +0x79E7 # <CJK> +0x79E9 # <CJK> +0x79EB # <CJK> +0x79ED # <CJK> +0x79EF # <CJK> +0x79F0 # <CJK> +0x79F8 # <CJK> +0x79FB # <CJK> +0x79FD # <CJK> +0x7A00 # <CJK> +0x7A02 # <CJK> +0x7A03 # <CJK> +0x7A06 # <CJK> +0x7A0B # <CJK> +0x7A0D # <CJK> +0x7A0E # <CJK> +0x7A14 # <CJK> +0x7A17 # <CJK> +0x7A1A # <CJK> +0x7A1E # <CJK> +0x7A20 # <CJK> +0x7A23 # <CJK> +0x7A33 # <CJK> +0x7A37 # <CJK> +0x7A39 # <CJK> +0x7A3B # <CJK> +0x7A3C # <CJK> +0x7A3D # <CJK> +0x7A3F # <CJK> +0x7A46 # <CJK> +0x7A51 # <CJK> +0x7A57 # <CJK> +0x7A70 # <CJK> +0x7A74 # <CJK> +0x7A76 # <CJK> +0x7A77 # <CJK> +0x7A78 # <CJK> +0x7A79 # <CJK> +0x7A7A # <CJK> +0x7A7F # <CJK> +0x7A80 # <CJK> +0x7A81 # <CJK> +0x7A83 # <CJK> +0x7A84 # <CJK> +0x7A86 # <CJK> +0x7A88 # <CJK> +0x7A8D # <CJK> +0x7A91 # <CJK> +0x7A92 # <CJK> +0x7A95 # <CJK> +0x7A96 # <CJK> +0x7A97 # <CJK> +0x7A98 # <CJK> +0x7A9C # <CJK> +0x7A9D # <CJK> +0x7A9F # <CJK> +0x7AA0 # <CJK> +0x7AA5 # <CJK> +0x7AA6 # <CJK> +0x7AA8 # <CJK> +0x7AAC # <CJK> +0x7AAD # <CJK> +0x7AB3 # <CJK> +0x7ABF # <CJK> +0x7ACB # <CJK> +0x7AD6 # <CJK> +0x7AD9 # <CJK> +0x7ADE # <CJK> +0x7ADF # <CJK> +0x7AE0 # <CJK> +0x7AE3 # <CJK> +0x7AE5 # <CJK> +0x7AE6 # <CJK> +0x7AED # <CJK> +0x7AEF # <CJK> +0x7AF9 # <CJK> +0x7AFA # <CJK> +0x7AFD # <CJK> +0x7AFF # <CJK> +0x7B03 # <CJK> +0x7B04 # <CJK> +0x7B06 # <CJK> +0x7B08 # <CJK> +0x7B0A # <CJK> +0x7B0B # <CJK> +0x7B0F # <CJK> +0x7B11 # <CJK> +0x7B14 # <CJK> +0x7B15 # <CJK> +0x7B19 # <CJK> +0x7B1B # <CJK> +0x7B1E # <CJK> +0x7B20 # <CJK> +0x7B24 # <CJK> +0x7B25 # <CJK> +0x7B26 # <CJK> +0x7B28 # <CJK> +0x7B2A # <CJK> +0x7B2B # <CJK> +0x7B2C # <CJK> +0x7B2E # <CJK> +0x7B31 # <CJK> +0x7B33 # <CJK> +0x7B38 # <CJK> +0x7B3A # <CJK> +0x7B3C # <CJK> +0x7B3E # <CJK> +0x7B45 # <CJK> +0x7B47 # <CJK> +0x7B49 # <CJK> +0x7B4B # <CJK> +0x7B4C # <CJK> +0x7B4F # <CJK> +0x7B50 # <CJK> +0x7B51 # <CJK> +0x7B52 # <CJK> +0x7B54 # <CJK> +0x7B56 # <CJK> +0x7B58 # <CJK> +0x7B5A # <CJK> +0x7B5B # <CJK> +0x7B5D # <CJK> +0x7B60 # <CJK> +0x7B62 # <CJK> +0x7B6E # <CJK> +0x7B71 # <CJK> +0x7B72 # <CJK> +0x7B75 # <CJK> +0x7B77 # <CJK> +0x7B79 # <CJK> +0x7B7B # <CJK> +0x7B7E # <CJK> +0x7B80 # <CJK> +0x7B85 # <CJK> +0x7B8D # <CJK> +0x7B90 # <CJK> +0x7B94 # <CJK> +0x7B95 # <CJK> +0x7B97 # <CJK> +0x7B9C # <CJK> +0x7B9D # <CJK> +0x7BA1 # <CJK> +0x7BA2 # <CJK> +0x7BA6 # <CJK> +0x7BA7 # <CJK> +0x7BA8 # <CJK> +0x7BA9 # <CJK> +0x7BAA # <CJK> +0x7BAB # <CJK> +0x7BAC # <CJK> +0x7BAD # <CJK> +0x7BB1 # <CJK> +0x7BB4 # <CJK> +0x7BB8 # <CJK> +0x7BC1 # <CJK> +0x7BC6 # <CJK> +0x7BC7 # <CJK> +0x7BCC # <CJK> +0x7BD1 # <CJK> +0x7BD3 # <CJK> +0x7BD9 # <CJK> +0x7BDA # <CJK> +0x7BDD # <CJK> +0x7BE1 # <CJK> +0x7BE5 # <CJK> +0x7BE6 # <CJK> +0x7BEA # <CJK> +0x7BEE # <CJK> +0x7BF1 # <CJK> +0x7BF7 # <CJK> +0x7BFC # <CJK> +0x7BFE # <CJK> +0x7C07 # <CJK> +0x7C0B # <CJK> +0x7C0C # <CJK> +0x7C0F # <CJK> +0x7C16 # <CJK> +0x7C1F # <CJK> +0x7C26 # <CJK> +0x7C27 # <CJK> +0x7C2A # <CJK> +0x7C38 # <CJK> +0x7C3F # <CJK> +0x7C40 # <CJK> +0x7C41 # <CJK> +0x7C4D # <CJK> +0x7C73 # <CJK> +0x7C74 # <CJK> +0x7C7B # <CJK> +0x7C7C # <CJK> +0x7C7D # <CJK> +0x7C89 # <CJK> +0x7C91 # <CJK> +0x7C92 # <CJK> +0x7C95 # <CJK> +0x7C97 # <CJK> +0x7C98 # <CJK> +0x7C9C # <CJK> +0x7C9D # <CJK> +0x7C9E # <CJK> +0x7C9F # <CJK> +0x7CA2 # <CJK> +0x7CA4 # <CJK> +0x7CA5 # <CJK> +0x7CAA # <CJK> +0x7CAE # <CJK> +0x7CB1 # <CJK> +0x7CB2 # <CJK> +0x7CB3 # <CJK> +0x7CB9 # <CJK> +0x7CBC # <CJK> +0x7CBD # <CJK> +0x7CBE # <CJK> +0x7CC1 # <CJK> +0x7CC5 # <CJK> +0x7CC7 # <CJK> +0x7CC8 # <CJK> +0x7CCA # <CJK> +0x7CCC # <CJK> +0x7CCD # <CJK> +0x7CD5 # <CJK> +0x7CD6 # <CJK> +0x7CD7 # <CJK> +0x7CD9 # <CJK> +0x7CDC # <CJK> +0x7CDF # <CJK> +0x7CE0 # <CJK> +0x7CE8 # <CJK> +0x7CEF # <CJK> +0x7CF8 # <CJK> +0x7CFB # <CJK> +0x7D0A # <CJK> +0x7D20 # <CJK> +0x7D22 # <CJK> +0x7D27 # <CJK> +0x7D2B # <CJK> +0x7D2F # <CJK> +0x7D6E # <CJK> +0x7D77 # <CJK> +0x7DA6 # <CJK> +0x7DAE # <CJK> +0x7E3B # <CJK> +0x7E41 # <CJK> +0x7E47 # <CJK> +0x7E82 # <CJK> +0x7E9B # <CJK> +0x7E9F # <CJK> +0x7EA0 # <CJK> +0x7EA1 # <CJK> +0x7EA2 # <CJK> +0x7EA3 # <CJK> +0x7EA4 # <CJK> +0x7EA5 # <CJK> +0x7EA6 # <CJK> +0x7EA7 # <CJK> +0x7EA8 # <CJK> +0x7EA9 # <CJK> +0x7EAA # <CJK> +0x7EAB # <CJK> +0x7EAC # <CJK> +0x7EAD # <CJK> +0x7EAF # <CJK> +0x7EB0 # <CJK> +0x7EB1 # <CJK> +0x7EB2 # <CJK> +0x7EB3 # <CJK> +0x7EB5 # <CJK> +0x7EB6 # <CJK> +0x7EB7 # <CJK> +0x7EB8 # <CJK> +0x7EB9 # <CJK> +0x7EBA # <CJK> +0x7EBD # <CJK> +0x7EBE # <CJK> +0x7EBF # <CJK> +0x7EC0 # <CJK> +0x7EC1 # <CJK> +0x7EC2 # <CJK> +0x7EC3 # <CJK> +0x7EC4 # <CJK> +0x7EC5 # <CJK> +0x7EC6 # <CJK> +0x7EC7 # <CJK> +0x7EC8 # <CJK> +0x7EC9 # <CJK> +0x7ECA # <CJK> +0x7ECB # <CJK> +0x7ECC # <CJK> +0x7ECD # <CJK> +0x7ECE # <CJK> +0x7ECF # <CJK> +0x7ED0 # <CJK> +0x7ED1 # <CJK> +0x7ED2 # <CJK> +0x7ED3 # <CJK> +0x7ED4 # <CJK> +0x7ED5 # <CJK> +0x7ED7 # <CJK> +0x7ED8 # <CJK> +0x7ED9 # <CJK> +0x7EDA # <CJK> +0x7EDB # <CJK> +0x7EDC # <CJK> +0x7EDD # <CJK> +0x7EDE # <CJK> +0x7EDF # <CJK> +0x7EE0 # <CJK> +0x7EE1 # <CJK> +0x7EE2 # <CJK> +0x7EE3 # <CJK> +0x7EE5 # <CJK> +0x7EE6 # <CJK> +0x7EE7 # <CJK> +0x7EE8 # <CJK> +0x7EE9 # <CJK> +0x7EEA # <CJK> +0x7EEB # <CJK> +0x7EED # <CJK> +0x7EEE # <CJK> +0x7EEF # <CJK> +0x7EF0 # <CJK> +0x7EF1 # <CJK> +0x7EF2 # <CJK> +0x7EF3 # <CJK> +0x7EF4 # <CJK> +0x7EF5 # <CJK> +0x7EF6 # <CJK> +0x7EF7 # <CJK> +0x7EF8 # <CJK> +0x7EFA # <CJK> +0x7EFB # <CJK> +0x7EFC # <CJK> +0x7EFD # <CJK> +0x7EFE # <CJK> +0x7EFF # <CJK> +0x7F00 # <CJK> +0x7F01 # <CJK> +0x7F02 # <CJK> +0x7F03 # <CJK> +0x7F04 # <CJK> +0x7F05 # <CJK> +0x7F06 # <CJK> +0x7F07 # <CJK> +0x7F08 # <CJK> +0x7F09 # <CJK> +0x7F0B # <CJK> +0x7F0C # <CJK> +0x7F0D # <CJK> +0x7F0E # <CJK> +0x7F0F # <CJK> +0x7F11 # <CJK> +0x7F12 # <CJK> +0x7F13 # <CJK> +0x7F14 # <CJK> +0x7F15 # <CJK> +0x7F16 # <CJK> +0x7F17 # <CJK> +0x7F18 # <CJK> +0x7F19 # <CJK> +0x7F1A # <CJK> +0x7F1B # <CJK> +0x7F1C # <CJK> +0x7F1D # <CJK> +0x7F1F # <CJK> +0x7F20 # <CJK> +0x7F21 # <CJK> +0x7F22 # <CJK> +0x7F23 # <CJK> +0x7F24 # <CJK> +0x7F25 # <CJK> +0x7F26 # <CJK> +0x7F27 # <CJK> +0x7F28 # <CJK> +0x7F29 # <CJK> +0x7F2A # <CJK> +0x7F2B # <CJK> +0x7F2C # <CJK> +0x7F2D # <CJK> +0x7F2E # <CJK> +0x7F2F # <CJK> +0x7F30 # <CJK> +0x7F31 # <CJK> +0x7F32 # <CJK> +0x7F33 # <CJK> +0x7F34 # <CJK> +0x7F35 # <CJK> +0x7F36 # <CJK> +0x7F38 # <CJK> +0x7F3A # <CJK> +0x7F42 # <CJK> +0x7F44 # <CJK> +0x7F45 # <CJK> +0x7F50 # <CJK> +0x7F51 # <CJK> +0x7F54 # <CJK> +0x7F55 # <CJK> +0x7F57 # <CJK> +0x7F58 # <CJK> +0x7F5A # <CJK> +0x7F5F # <CJK> +0x7F61 # <CJK> +0x7F62 # <CJK> +0x7F68 # <CJK> +0x7F69 # <CJK> +0x7F6A # <CJK> +0x7F6E # <CJK> +0x7F71 # <CJK> +0x7F72 # <CJK> +0x7F74 # <CJK> +0x7F79 # <CJK> +0x7F7E # <CJK> +0x7F81 # <CJK> +0x7F8A # <CJK> +0x7F8C # <CJK> +0x7F8E # <CJK> +0x7F94 # <CJK> +0x7F9A # <CJK> +0x7F9D # <CJK> +0x7F9E # <CJK> +0x7F9F # <CJK> +0x7FA1 # <CJK> +0x7FA4 # <CJK> +0x7FA7 # <CJK> +0x7FAF # <CJK> +0x7FB0 # <CJK> +0x7FB2 # <CJK> +0x7FB8 # <CJK> +0x7FB9 # <CJK> +0x7FBC # <CJK> +0x7FBD # <CJK> +0x7FBF # <CJK> +0x7FC1 # <CJK> +0x7FC5 # <CJK> +0x7FCA # <CJK> +0x7FCC # <CJK> +0x7FCE # <CJK> +0x7FD4 # <CJK> +0x7FD5 # <CJK> +0x7FD8 # <CJK> +0x7FDF # <CJK> +0x7FE0 # <CJK> +0x7FE1 # <CJK> +0x7FE5 # <CJK> +0x7FE6 # <CJK> +0x7FE9 # <CJK> +0x7FEE # <CJK> +0x7FF0 # <CJK> +0x7FF1 # <CJK> +0x7FF3 # <CJK> +0x7FFB # <CJK> +0x7FFC # <CJK> +0x8000 # <CJK> +0x8001 # <CJK> +0x8003 # <CJK> +0x8004 # <CJK> +0x8005 # <CJK> +0x8006 # <CJK> +0x800B # <CJK> +0x800C # <CJK> +0x800D # <CJK> +0x8010 # <CJK> +0x8012 # <CJK> +0x8014 # <CJK> +0x8015 # <CJK> +0x8016 # <CJK> +0x8017 # <CJK> +0x8018 # <CJK> +0x8019 # <CJK> +0x801C # <CJK> +0x8020 # <CJK> +0x8022 # <CJK> +0x8025 # <CJK> +0x8026 # <CJK> +0x8027 # <CJK> +0x8028 # <CJK> +0x8029 # <CJK> +0x802A # <CJK> +0x8031 # <CJK> +0x8033 # <CJK> +0x8035 # <CJK> +0x8036 # <CJK> +0x8037 # <CJK> +0x8038 # <CJK> +0x803B # <CJK> +0x803D # <CJK> +0x803F # <CJK> +0x8042 # <CJK> +0x8043 # <CJK> +0x8046 # <CJK> +0x804A # <CJK> +0x804B # <CJK> +0x804C # <CJK> +0x804D # <CJK> +0x8052 # <CJK> +0x8054 # <CJK> +0x8058 # <CJK> +0x805A # <CJK> +0x8069 # <CJK> +0x806A # <CJK> +0x8071 # <CJK> +0x807F # <CJK> +0x8080 # <CJK> +0x8083 # <CJK> +0x8084 # <CJK> +0x8086 # <CJK> +0x8087 # <CJK> +0x8089 # <CJK> +0x808B # <CJK> +0x808C # <CJK> +0x8093 # <CJK> +0x8096 # <CJK> +0x8098 # <CJK> +0x809A # <CJK> +0x809B # <CJK> +0x809C # <CJK> +0x809D # <CJK> +0x809F # <CJK> +0x80A0 # <CJK> +0x80A1 # <CJK> +0x80A2 # <CJK> +0x80A4 # <CJK> +0x80A5 # <CJK> +0x80A9 # <CJK> +0x80AA # <CJK> +0x80AB # <CJK> +0x80AD # <CJK> +0x80AE # <CJK> +0x80AF # <CJK> +0x80B1 # <CJK> +0x80B2 # <CJK> +0x80B4 # <CJK> +0x80B7 # <CJK> +0x80BA # <CJK> +0x80BC # <CJK> +0x80BD # <CJK> +0x80BE # <CJK> +0x80BF # <CJK> +0x80C0 # <CJK> +0x80C1 # <CJK> +0x80C2 # <CJK> +0x80C3 # <CJK> +0x80C4 # <CJK> +0x80C6 # <CJK> +0x80CC # <CJK> +0x80CD # <CJK> +0x80CE # <CJK> +0x80D6 # <CJK> +0x80D7 # <CJK> +0x80D9 # <CJK> +0x80DA # <CJK> +0x80DB # <CJK> +0x80DC # <CJK> +0x80DD # <CJK> +0x80DE # <CJK> +0x80E1 # <CJK> +0x80E4 # <CJK> +0x80E5 # <CJK> +0x80E7 # <CJK> +0x80E8 # <CJK> +0x80E9 # <CJK> +0x80EA # <CJK> +0x80EB # <CJK> +0x80EC # <CJK> +0x80ED # <CJK> +0x80EF # <CJK> +0x80F0 # <CJK> +0x80F1 # <CJK> +0x80F2 # <CJK> +0x80F3 # <CJK> +0x80F4 # <CJK> +0x80F6 # <CJK> +0x80F8 # <CJK> +0x80FA # <CJK> +0x80FC # <CJK> +0x80FD # <CJK> +0x8102 # <CJK> +0x8106 # <CJK> +0x8109 # <CJK> +0x810A # <CJK> +0x810D # <CJK> +0x810E # <CJK> +0x810F # <CJK> +0x8110 # <CJK> +0x8111 # <CJK> +0x8112 # <CJK> +0x8113 # <CJK> +0x8114 # <CJK> +0x8116 # <CJK> +0x8118 # <CJK> +0x811A # <CJK> +0x811E # <CJK> +0x812C # <CJK> +0x812F # <CJK> +0x8131 # <CJK> +0x8132 # <CJK> +0x8136 # <CJK> +0x8138 # <CJK> +0x813E # <CJK> +0x8146 # <CJK> +0x8148 # <CJK> +0x814A # <CJK> +0x814B # <CJK> +0x814C # <CJK> +0x8150 # <CJK> +0x8151 # <CJK> +0x8153 # <CJK> +0x8154 # <CJK> +0x8155 # <CJK> +0x8159 # <CJK> +0x815A # <CJK> +0x8160 # <CJK> +0x8165 # <CJK> +0x8167 # <CJK> +0x8169 # <CJK> +0x816D # <CJK> +0x816E # <CJK> +0x8170 # <CJK> +0x8171 # <CJK> +0x8174 # <CJK> +0x8179 # <CJK> +0x817A # <CJK> +0x817B # <CJK> +0x817C # <CJK> +0x817D # <CJK> +0x817E # <CJK> +0x817F # <CJK> +0x8180 # <CJK> +0x8182 # <CJK> +0x8188 # <CJK> +0x818A # <CJK> +0x818F # <CJK> +0x8191 # <CJK> +0x8198 # <CJK> +0x819B # <CJK> +0x819C # <CJK> +0x819D # <CJK> +0x81A3 # <CJK> +0x81A6 # <CJK> +0x81A8 # <CJK> +0x81AA # <CJK> +0x81B3 # <CJK> +0x81BA # <CJK> +0x81BB # <CJK> +0x81C0 # <CJK> +0x81C1 # <CJK> +0x81C2 # <CJK> +0x81C3 # <CJK> +0x81C6 # <CJK> +0x81CA # <CJK> +0x81CC # <CJK> +0x81E3 # <CJK> +0x81E7 # <CJK> +0x81EA # <CJK> +0x81EC # <CJK> +0x81ED # <CJK> +0x81F3 # <CJK> +0x81F4 # <CJK> +0x81FB # <CJK> +0x81FC # <CJK> +0x81FE # <CJK> +0x8200 # <CJK> +0x8201 # <CJK> +0x8202 # <CJK> +0x8204 # <CJK> +0x8205 # <CJK> +0x8206 # <CJK> +0x820C # <CJK> +0x820D # <CJK> +0x8210 # <CJK> +0x8212 # <CJK> +0x8214 # <CJK> +0x821B # <CJK> +0x821C # <CJK> +0x821E # <CJK> +0x821F # <CJK> +0x8221 # <CJK> +0x8222 # <CJK> +0x8223 # <CJK> +0x8228 # <CJK> +0x822A # <CJK> +0x822B # <CJK> +0x822C # <CJK> +0x822D # <CJK> +0x822F # <CJK> +0x8230 # <CJK> +0x8231 # <CJK> +0x8233 # <CJK> +0x8234 # <CJK> +0x8235 # <CJK> +0x8236 # <CJK> +0x8237 # <CJK> +0x8238 # <CJK> +0x8239 # <CJK> +0x823B # <CJK> +0x823E # <CJK> +0x8244 # <CJK> +0x8247 # <CJK> +0x8249 # <CJK> +0x824B # <CJK> +0x824F # <CJK> +0x8258 # <CJK> +0x825A # <CJK> +0x825F # <CJK> +0x8268 # <CJK> +0x826E # <CJK> +0x826F # <CJK> +0x8270 # <CJK> +0x8272 # <CJK> +0x8273 # <CJK> +0x8274 # <CJK> +0x8279 # <CJK> +0x827A # <CJK> +0x827D # <CJK> +0x827E # <CJK> +0x827F # <CJK> +0x8282 # <CJK> +0x8284 # <CJK> +0x8288 # <CJK> +0x828A # <CJK> +0x828B # <CJK> +0x828D # <CJK> +0x828E # <CJK> +0x828F # <CJK> +0x8291 # <CJK> +0x8292 # <CJK> +0x8297 # <CJK> +0x8298 # <CJK> +0x8299 # <CJK> +0x829C # <CJK> +0x829D # <CJK> +0x829F # <CJK> +0x82A1 # <CJK> +0x82A4 # <CJK> +0x82A5 # <CJK> +0x82A6 # <CJK> +0x82A8 # <CJK> +0x82A9 # <CJK> +0x82AA # <CJK> +0x82AB # <CJK> +0x82AC # <CJK> +0x82AD # <CJK> +0x82AE # <CJK> +0x82AF # <CJK> +0x82B0 # <CJK> +0x82B1 # <CJK> +0x82B3 # <CJK> +0x82B4 # <CJK> +0x82B7 # <CJK> +0x82B8 # <CJK> +0x82B9 # <CJK> +0x82BD # <CJK> +0x82BE # <CJK> +0x82C1 # <CJK> +0x82C4 # <CJK> +0x82C7 # <CJK> +0x82C8 # <CJK> +0x82CA # <CJK> +0x82CB # <CJK> +0x82CC # <CJK> +0x82CD # <CJK> +0x82CE # <CJK> +0x82CF # <CJK> +0x82D1 # <CJK> +0x82D2 # <CJK> +0x82D3 # <CJK> +0x82D4 # <CJK> +0x82D5 # <CJK> +0x82D7 # <CJK> +0x82D8 # <CJK> +0x82DB # <CJK> +0x82DC # <CJK> +0x82DE # <CJK> +0x82DF # <CJK> +0x82E0 # <CJK> +0x82E1 # <CJK> +0x82E3 # <CJK> +0x82E4 # <CJK> +0x82E5 # <CJK> +0x82E6 # <CJK> +0x82EB # <CJK> +0x82EF # <CJK> +0x82F1 # <CJK> +0x82F4 # <CJK> +0x82F7 # <CJK> +0x82F9 # <CJK> +0x82FB # <CJK> +0x8301 # <CJK> +0x8302 # <CJK> +0x8303 # <CJK> +0x8304 # <CJK> +0x8305 # <CJK> +0x8306 # <CJK> +0x8307 # <CJK> +0x8308 # <CJK> +0x8309 # <CJK> +0x830C # <CJK> +0x830E # <CJK> +0x830F # <CJK> +0x8311 # <CJK> +0x8314 # <CJK> +0x8315 # <CJK> +0x8317 # <CJK> +0x831A # <CJK> +0x831B # <CJK> +0x831C # <CJK> +0x8327 # <CJK> +0x8328 # <CJK> +0x832B # <CJK> +0x832C # <CJK> +0x832D # <CJK> +0x832F # <CJK> +0x8331 # <CJK> +0x8333 # <CJK> +0x8334 # <CJK> +0x8335 # <CJK> +0x8336 # <CJK> +0x8338 # <CJK> +0x8339 # <CJK> +0x833A # <CJK> +0x833C # <CJK> +0x8340 # <CJK> +0x8343 # <CJK> +0x8346 # <CJK> +0x8347 # <CJK> +0x8349 # <CJK> +0x834F # <CJK> +0x8350 # <CJK> +0x8351 # <CJK> +0x8352 # <CJK> +0x8354 # <CJK> +0x835A # <CJK> +0x835B # <CJK> +0x835C # <CJK> +0x835E # <CJK> +0x835F # <CJK> +0x8360 # <CJK> +0x8361 # <CJK> +0x8363 # <CJK> +0x8364 # <CJK> +0x8365 # <CJK> +0x8366 # <CJK> +0x8367 # <CJK> +0x8368 # <CJK> +0x8369 # <CJK> +0x836A # <CJK> +0x836B # <CJK> +0x836C # <CJK> +0x836D # <CJK> +0x836E # <CJK> +0x836F # <CJK> +0x8377 # <CJK> +0x8378 # <CJK> +0x837B # <CJK> +0x837C # <CJK> +0x837D # <CJK> +0x8385 # <CJK> +0x8386 # <CJK> +0x8389 # <CJK> +0x838E # <CJK> +0x8392 # <CJK> +0x8393 # <CJK> +0x8398 # <CJK> +0x839B # <CJK> +0x839C # <CJK> +0x839E # <CJK> +0x83A0 # <CJK> +0x83A8 # <CJK> +0x83A9 # <CJK> +0x83AA # <CJK> +0x83AB # <CJK> +0x83B0 # <CJK> +0x83B1 # <CJK> +0x83B2 # <CJK> +0x83B3 # <CJK> +0x83B4 # <CJK> +0x83B6 # <CJK> +0x83B7 # <CJK> +0x83B8 # <CJK> +0x83B9 # <CJK> +0x83BA # <CJK> +0x83BC # <CJK> +0x83BD # <CJK> +0x83C0 # <CJK> +0x83C1 # <CJK> +0x83C5 # <CJK> +0x83C7 # <CJK> +0x83CA # <CJK> +0x83CC # <CJK> +0x83CF # <CJK> +0x83D4 # <CJK> +0x83D6 # <CJK> +0x83D8 # <CJK> +0x83DC # <CJK> +0x83DD # <CJK> +0x83DF # <CJK> +0x83E0 # <CJK> +0x83E1 # <CJK> +0x83E5 # <CJK> +0x83E9 # <CJK> +0x83EA # <CJK> +0x83F0 # <CJK> +0x83F1 # <CJK> +0x83F2 # <CJK> +0x83F8 # <CJK> +0x83F9 # <CJK> +0x83FD # <CJK> +0x8401 # <CJK> +0x8403 # <CJK> +0x8404 # <CJK> +0x8406 # <CJK> +0x840B # <CJK> +0x840C # <CJK> +0x840D # <CJK> +0x840E # <CJK> +0x840F # <CJK> +0x8411 # <CJK> +0x8418 # <CJK> +0x841C # <CJK> +0x841D # <CJK> +0x8424 # <CJK> +0x8425 # <CJK> +0x8426 # <CJK> +0x8427 # <CJK> +0x8428 # <CJK> +0x8431 # <CJK> +0x8438 # <CJK> +0x843C # <CJK> +0x843D # <CJK> +0x8446 # <CJK> +0x8451 # <CJK> +0x8457 # <CJK> +0x8459 # <CJK> +0x845A # <CJK> +0x845B # <CJK> +0x845C # <CJK> +0x8461 # <CJK> +0x8463 # <CJK> +0x8469 # <CJK> +0x846B # <CJK> +0x846C # <CJK> +0x846D # <CJK> +0x8471 # <CJK> +0x8473 # <CJK> +0x8475 # <CJK> +0x8476 # <CJK> +0x8478 # <CJK> +0x847A # <CJK> +0x8482 # <CJK> +0x8487 # <CJK> +0x8488 # <CJK> +0x8489 # <CJK> +0x848B # <CJK> +0x848C # <CJK> +0x848E # <CJK> +0x8497 # <CJK> +0x8499 # <CJK> +0x849C # <CJK> +0x84A1 # <CJK> +0x84AF # <CJK> +0x84B2 # <CJK> +0x84B4 # <CJK> +0x84B8 # <CJK> +0x84B9 # <CJK> +0x84BA # <CJK> +0x84BD # <CJK> +0x84BF # <CJK> +0x84C1 # <CJK> +0x84C4 # <CJK> +0x84C9 # <CJK> +0x84CA # <CJK> +0x84CD # <CJK> +0x84D0 # <CJK> +0x84D1 # <CJK> +0x84D3 # <CJK> +0x84D6 # <CJK> +0x84DD # <CJK> +0x84DF # <CJK> +0x84E0 # <CJK> +0x84E3 # <CJK> +0x84E5 # <CJK> +0x84E6 # <CJK> +0x84EC # <CJK> +0x84F0 # <CJK> +0x84FC # <CJK> +0x84FF # <CJK> +0x850C # <CJK> +0x8511 # <CJK> +0x8513 # <CJK> +0x8517 # <CJK> +0x851A # <CJK> +0x851F # <CJK> +0x8521 # <CJK> +0x852B # <CJK> +0x852C # <CJK> +0x8537 # <CJK> +0x8538 # <CJK> +0x8539 # <CJK> +0x853A # <CJK> +0x853B # <CJK> +0x853C # <CJK> +0x853D # <CJK> +0x8543 # <CJK> +0x8548 # <CJK> +0x8549 # <CJK> +0x854A # <CJK> +0x8556 # <CJK> +0x8559 # <CJK> +0x855E # <CJK> +0x8564 # <CJK> +0x8568 # <CJK> +0x8572 # <CJK> +0x8574 # <CJK> +0x8579 # <CJK> +0x857A # <CJK> +0x857B # <CJK> +0x857E # <CJK> +0x8584 # <CJK> +0x8585 # <CJK> +0x8587 # <CJK> +0x858F # <CJK> +0x859B # <CJK> +0x859C # <CJK> +0x85A4 # <CJK> +0x85A8 # <CJK> +0x85AA # <CJK> +0x85AE # <CJK> +0x85AF # <CJK> +0x85B0 # <CJK> +0x85B7 # <CJK> +0x85B9 # <CJK> +0x85C1 # <CJK> +0x85C9 # <CJK> +0x85CF # <CJK> +0x85D0 # <CJK> +0x85D3 # <CJK> +0x85D5 # <CJK> +0x85DC # <CJK> +0x85E4 # <CJK> +0x85E9 # <CJK> +0x85FB # <CJK> +0x85FF # <CJK> +0x8605 # <CJK> +0x8611 # <CJK> +0x8616 # <CJK> +0x8627 # <CJK> +0x8629 # <CJK> +0x8638 # <CJK> +0x863C # <CJK> +0x864D # <CJK> +0x864E # <CJK> +0x864F # <CJK> +0x8650 # <CJK> +0x8651 # <CJK> +0x8654 # <CJK> +0x865A # <CJK> +0x865E # <CJK> +0x8662 # <CJK> +0x866B # <CJK> +0x866C # <CJK> +0x866E # <CJK> +0x8671 # <CJK> +0x8679 # <CJK> +0x867A # <CJK> +0x867B # <CJK> +0x867C # <CJK> +0x867D # <CJK> +0x867E # <CJK> +0x867F # <CJK> +0x8680 # <CJK> +0x8681 # <CJK> +0x8682 # <CJK> +0x868A # <CJK> +0x868B # <CJK> +0x868C # <CJK> +0x868D # <CJK> +0x8693 # <CJK> +0x8695 # <CJK> +0x869C # <CJK> +0x869D # <CJK> +0x86A3 # <CJK> +0x86A4 # <CJK> +0x86A7 # <CJK> +0x86A8 # <CJK> +0x86A9 # <CJK> +0x86AA # <CJK> +0x86AC # <CJK> +0x86AF # <CJK> +0x86B0 # <CJK> +0x86B1 # <CJK> +0x86B4 # <CJK> +0x86B5 # <CJK> +0x86B6 # <CJK> +0x86BA # <CJK> +0x86C0 # <CJK> +0x86C4 # <CJK> +0x86C6 # <CJK> +0x86C7 # <CJK> +0x86C9 # <CJK> +0x86CA # <CJK> +0x86CB # <CJK> +0x86CE # <CJK> +0x86CF # <CJK> +0x86D0 # <CJK> +0x86D1 # <CJK> +0x86D4 # <CJK> +0x86D8 # <CJK> +0x86D9 # <CJK> +0x86DB # <CJK> +0x86DE # <CJK> +0x86DF # <CJK> +0x86E4 # <CJK> +0x86E9 # <CJK> +0x86ED # <CJK> +0x86EE # <CJK> +0x86F0 # <CJK> +0x86F1 # <CJK> +0x86F2 # <CJK> +0x86F3 # <CJK> +0x86F4 # <CJK> +0x86F8 # <CJK> +0x86F9 # <CJK> +0x86FE # <CJK> +0x8700 # <CJK> +0x8702 # <CJK> +0x8703 # <CJK> +0x8707 # <CJK> +0x8708 # <CJK> +0x8709 # <CJK> +0x870A # <CJK> +0x870D # <CJK> +0x8712 # <CJK> +0x8713 # <CJK> +0x8715 # <CJK> +0x8717 # <CJK> +0x8718 # <CJK> +0x871A # <CJK> +0x871C # <CJK> +0x871E # <CJK> +0x8721 # <CJK> +0x8722 # <CJK> +0x8723 # <CJK> +0x8725 # <CJK> +0x8729 # <CJK> +0x872E # <CJK> +0x8731 # <CJK> +0x8734 # <CJK> +0x8737 # <CJK> +0x873B # <CJK> +0x873E # <CJK> +0x873F # <CJK> +0x8747 # <CJK> +0x8748 # <CJK> +0x8749 # <CJK> +0x874C # <CJK> +0x874E # <CJK> +0x8753 # <CJK> +0x8757 # <CJK> +0x8759 # <CJK> +0x8760 # <CJK> +0x8763 # <CJK> +0x8764 # <CJK> +0x8765 # <CJK> +0x876E # <CJK> +0x8770 # <CJK> +0x8774 # <CJK> +0x8776 # <CJK> +0x877B # <CJK> +0x877C # <CJK> +0x877D # <CJK> +0x877E # <CJK> +0x8782 # <CJK> +0x8783 # <CJK> +0x8785 # <CJK> +0x8788 # <CJK> +0x878B # <CJK> +0x878D # <CJK> +0x8793 # <CJK> +0x8797 # <CJK> +0x879F # <CJK> +0x87A8 # <CJK> +0x87AB # <CJK> +0x87AC # <CJK> +0x87AD # <CJK> +0x87AF # <CJK> +0x87B3 # <CJK> +0x87B5 # <CJK> +0x87BA # <CJK> +0x87BD # <CJK> +0x87C0 # <CJK> +0x87C6 # <CJK> +0x87CA # <CJK> +0x87CB # <CJK> +0x87D1 # <CJK> +0x87D2 # <CJK> +0x87D3 # <CJK> +0x87DB # <CJK> +0x87E0 # <CJK> +0x87E5 # <CJK> +0x87EA # <CJK> +0x87EE # <CJK> +0x87F9 # <CJK> +0x87FE # <CJK> +0x8803 # <CJK> +0x880A # <CJK> +0x8813 # <CJK> +0x8815 # <CJK> +0x8816 # <CJK> +0x881B # <CJK> +0x8821 # <CJK> +0x8822 # <CJK> +0x8832 # <CJK> +0x8839 # <CJK> +0x883C # <CJK> +0x8840 # <CJK> +0x8844 # <CJK> +0x8845 # <CJK> +0x884C # <CJK> +0x884D # <CJK> +0x8854 # <CJK> +0x8857 # <CJK> +0x8859 # <CJK> +0x8861 # <CJK> +0x8862 # <CJK> +0x8863 # <CJK> +0x8864 # <CJK> +0x8865 # <CJK> +0x8868 # <CJK> +0x8869 # <CJK> +0x886B # <CJK> +0x886C # <CJK> +0x886E # <CJK> +0x8870 # <CJK> +0x8872 # <CJK> +0x8877 # <CJK> +0x887D # <CJK> +0x887E # <CJK> +0x887F # <CJK> +0x8881 # <CJK> +0x8882 # <CJK> +0x8884 # <CJK> +0x8885 # <CJK> +0x8888 # <CJK> +0x888B # <CJK> +0x888D # <CJK> +0x8892 # <CJK> +0x8896 # <CJK> +0x889C # <CJK> +0x88A2 # <CJK> +0x88A4 # <CJK> +0x88AB # <CJK> +0x88AD # <CJK> +0x88B1 # <CJK> +0x88B7 # <CJK> +0x88BC # <CJK> +0x88C1 # <CJK> +0x88C2 # <CJK> +0x88C5 # <CJK> +0x88C6 # <CJK> +0x88C9 # <CJK> +0x88CE # <CJK> +0x88D2 # <CJK> +0x88D4 # <CJK> +0x88D5 # <CJK> +0x88D8 # <CJK> +0x88D9 # <CJK> +0x88DF # <CJK> +0x88E2 # <CJK> +0x88E3 # <CJK> +0x88E4 # <CJK> +0x88E5 # <CJK> +0x88E8 # <CJK> +0x88F0 # <CJK> +0x88F1 # <CJK> +0x88F3 # <CJK> +0x88F4 # <CJK> +0x88F8 # <CJK> +0x88F9 # <CJK> +0x88FC # <CJK> +0x88FE # <CJK> +0x8902 # <CJK> +0x890A # <CJK> +0x8910 # <CJK> +0x8912 # <CJK> +0x8913 # <CJK> +0x8919 # <CJK> +0x891A # <CJK> +0x891B # <CJK> +0x8921 # <CJK> +0x8925 # <CJK> +0x892A # <CJK> +0x892B # <CJK> +0x8930 # <CJK> +0x8934 # <CJK> +0x8936 # <CJK> +0x8941 # <CJK> +0x8944 # <CJK> +0x895E # <CJK> +0x895F # <CJK> +0x8966 # <CJK> +0x897B # <CJK> +0x897F # <CJK> +0x8981 # <CJK> +0x8983 # <CJK> +0x8986 # <CJK> +0x89C1 # <CJK> +0x89C2 # <CJK> +0x89C4 # <CJK> +0x89C5 # <CJK> +0x89C6 # <CJK> +0x89C7 # <CJK> +0x89C8 # <CJK> +0x89C9 # <CJK> +0x89CA # <CJK> +0x89CB # <CJK> +0x89CC # <CJK> +0x89CE # <CJK> +0x89CF # <CJK> +0x89D0 # <CJK> +0x89D1 # <CJK> +0x89D2 # <CJK> +0x89D6 # <CJK> +0x89DA # <CJK> +0x89DC # <CJK> +0x89DE # <CJK> +0x89E3 # <CJK> +0x89E5 # <CJK> +0x89E6 # <CJK> +0x89EB # <CJK> +0x89EF # <CJK> +0x89F3 # <CJK> +0x8A00 # <CJK> +0x8A07 # <CJK> +0x8A3E # <CJK> +0x8A48 # <CJK> +0x8A79 # <CJK> +0x8A89 # <CJK> +0x8A8A # <CJK> +0x8A93 # <CJK> +0x8B07 # <CJK> +0x8B26 # <CJK> +0x8B66 # <CJK> +0x8B6C # <CJK> +0x8BA0 # <CJK> +0x8BA1 # <CJK> +0x8BA2 # <CJK> +0x8BA3 # <CJK> +0x8BA4 # <CJK> +0x8BA5 # <CJK> +0x8BA6 # <CJK> +0x8BA7 # <CJK> +0x8BA8 # <CJK> +0x8BA9 # <CJK> +0x8BAA # <CJK> +0x8BAB # <CJK> +0x8BAD # <CJK> +0x8BAE # <CJK> +0x8BAF # <CJK> +0x8BB0 # <CJK> +0x8BB2 # <CJK> +0x8BB3 # <CJK> +0x8BB4 # <CJK> +0x8BB5 # <CJK> +0x8BB6 # <CJK> +0x8BB7 # <CJK> +0x8BB8 # <CJK> +0x8BB9 # <CJK> +0x8BBA # <CJK> +0x8BBC # <CJK> +0x8BBD # <CJK> +0x8BBE # <CJK> +0x8BBF # <CJK> +0x8BC0 # <CJK> +0x8BC1 # <CJK> +0x8BC2 # <CJK> +0x8BC3 # <CJK> +0x8BC4 # <CJK> +0x8BC5 # <CJK> +0x8BC6 # <CJK> +0x8BC8 # <CJK> +0x8BC9 # <CJK> +0x8BCA # <CJK> +0x8BCB # <CJK> +0x8BCC # <CJK> +0x8BCD # <CJK> +0x8BCE # <CJK> +0x8BCF # <CJK> +0x8BD1 # <CJK> +0x8BD2 # <CJK> +0x8BD3 # <CJK> +0x8BD4 # <CJK> +0x8BD5 # <CJK> +0x8BD6 # <CJK> +0x8BD7 # <CJK> +0x8BD8 # <CJK> +0x8BD9 # <CJK> +0x8BDA # <CJK> +0x8BDB # <CJK> +0x8BDC # <CJK> +0x8BDD # <CJK> +0x8BDE # <CJK> +0x8BDF # <CJK> +0x8BE0 # <CJK> +0x8BE1 # <CJK> +0x8BE2 # <CJK> +0x8BE3 # <CJK> +0x8BE4 # <CJK> +0x8BE5 # <CJK> +0x8BE6 # <CJK> +0x8BE7 # <CJK> +0x8BE8 # <CJK> +0x8BE9 # <CJK> +0x8BEB # <CJK> +0x8BEC # <CJK> +0x8BED # <CJK> +0x8BEE # <CJK> +0x8BEF # <CJK> +0x8BF0 # <CJK> +0x8BF1 # <CJK> +0x8BF2 # <CJK> +0x8BF3 # <CJK> +0x8BF4 # <CJK> +0x8BF5 # <CJK> +0x8BF6 # <CJK> +0x8BF7 # <CJK> +0x8BF8 # <CJK> +0x8BF9 # <CJK> +0x8BFA # <CJK> +0x8BFB # <CJK> +0x8BFC # <CJK> +0x8BFD # <CJK> +0x8BFE # <CJK> +0x8BFF # <CJK> +0x8C00 # <CJK> +0x8C01 # <CJK> +0x8C02 # <CJK> +0x8C03 # <CJK> +0x8C04 # <CJK> +0x8C05 # <CJK> +0x8C06 # <CJK> +0x8C07 # <CJK> +0x8C08 # <CJK> +0x8C0A # <CJK> +0x8C0B # <CJK> +0x8C0C # <CJK> +0x8C0D # <CJK> +0x8C0E # <CJK> +0x8C0F # <CJK> +0x8C10 # <CJK> +0x8C11 # <CJK> +0x8C12 # <CJK> +0x8C13 # <CJK> +0x8C14 # <CJK> +0x8C15 # <CJK> +0x8C16 # <CJK> +0x8C17 # <CJK> +0x8C18 # <CJK> +0x8C19 # <CJK> +0x8C1A # <CJK> +0x8C1B # <CJK> +0x8C1C # <CJK> +0x8C1D # <CJK> +0x8C1F # <CJK> +0x8C20 # <CJK> +0x8C21 # <CJK> +0x8C22 # <CJK> +0x8C23 # <CJK> +0x8C24 # <CJK> +0x8C25 # <CJK> +0x8C26 # <CJK> +0x8C27 # <CJK> +0x8C28 # <CJK> +0x8C29 # <CJK> +0x8C2A # <CJK> +0x8C2B # <CJK> +0x8C2C # <CJK> +0x8C2D # <CJK> +0x8C2E # <CJK> +0x8C2F # <CJK> +0x8C30 # <CJK> +0x8C31 # <CJK> +0x8C32 # <CJK> +0x8C33 # <CJK> +0x8C34 # <CJK> +0x8C35 # <CJK> +0x8C36 # <CJK> +0x8C37 # <CJK> +0x8C41 # <CJK> +0x8C46 # <CJK> +0x8C47 # <CJK> +0x8C49 # <CJK> +0x8C4C # <CJK> +0x8C55 # <CJK> +0x8C5A # <CJK> +0x8C61 # <CJK> +0x8C62 # <CJK> +0x8C6A # <CJK> +0x8C6B # <CJK> +0x8C73 # <CJK> +0x8C78 # <CJK> +0x8C79 # <CJK> +0x8C7A # <CJK> +0x8C82 # <CJK> +0x8C85 # <CJK> +0x8C89 # <CJK> +0x8C8A # <CJK> +0x8C8C # <CJK> +0x8C94 # <CJK> +0x8C98 # <CJK> +0x8D1D # <CJK> +0x8D1E # <CJK> +0x8D1F # <CJK> +0x8D21 # <CJK> +0x8D22 # <CJK> +0x8D23 # <CJK> +0x8D24 # <CJK> +0x8D25 # <CJK> +0x8D26 # <CJK> +0x8D27 # <CJK> +0x8D28 # <CJK> +0x8D29 # <CJK> +0x8D2A # <CJK> +0x8D2B # <CJK> +0x8D2C # <CJK> +0x8D2D # <CJK> +0x8D2E # <CJK> +0x8D2F # <CJK> +0x8D30 # <CJK> +0x8D31 # <CJK> +0x8D32 # <CJK> +0x8D33 # <CJK> +0x8D34 # <CJK> +0x8D35 # <CJK> +0x8D36 # <CJK> +0x8D37 # <CJK> +0x8D38 # <CJK> +0x8D39 # <CJK> +0x8D3A # <CJK> +0x8D3B # <CJK> +0x8D3C # <CJK> +0x8D3D # <CJK> +0x8D3E # <CJK> +0x8D3F # <CJK> +0x8D40 # <CJK> +0x8D41 # <CJK> +0x8D42 # <CJK> +0x8D43 # <CJK> +0x8D44 # <CJK> +0x8D45 # <CJK> +0x8D46 # <CJK> +0x8D47 # <CJK> +0x8D48 # <CJK> +0x8D49 # <CJK> +0x8D4A # <CJK> +0x8D4B # <CJK> +0x8D4C # <CJK> +0x8D4D # <CJK> +0x8D4E # <CJK> +0x8D4F # <CJK> +0x8D50 # <CJK> +0x8D53 # <CJK> +0x8D54 # <CJK> +0x8D55 # <CJK> +0x8D56 # <CJK> +0x8D58 # <CJK> +0x8D59 # <CJK> +0x8D5A # <CJK> +0x8D5B # <CJK> +0x8D5C # <CJK> +0x8D5D # <CJK> +0x8D5E # <CJK> +0x8D60 # <CJK> +0x8D61 # <CJK> +0x8D62 # <CJK> +0x8D63 # <CJK> +0x8D64 # <CJK> +0x8D66 # <CJK> +0x8D67 # <CJK> +0x8D6B # <CJK> +0x8D6D # <CJK> +0x8D70 # <CJK> +0x8D73 # <CJK> +0x8D74 # <CJK> +0x8D75 # <CJK> +0x8D76 # <CJK> +0x8D77 # <CJK> +0x8D81 # <CJK> +0x8D84 # <CJK> +0x8D85 # <CJK> +0x8D8A # <CJK> +0x8D8B # <CJK> +0x8D91 # <CJK> +0x8D94 # <CJK> +0x8D9F # <CJK> +0x8DA3 # <CJK> +0x8DB1 # <CJK> +0x8DB3 # <CJK> +0x8DB4 # <CJK> +0x8DB5 # <CJK> +0x8DB8 # <CJK> +0x8DBA # <CJK> +0x8DBC # <CJK> +0x8DBE # <CJK> +0x8DBF # <CJK> +0x8DC3 # <CJK> +0x8DC4 # <CJK> +0x8DC6 # <CJK> +0x8DCB # <CJK> +0x8DCC # <CJK> +0x8DCE # <CJK> +0x8DCF # <CJK> +0x8DD1 # <CJK> +0x8DD6 # <CJK> +0x8DD7 # <CJK> +0x8DDA # <CJK> +0x8DDB # <CJK> +0x8DDD # <CJK> +0x8DDE # <CJK> +0x8DDF # <CJK> +0x8DE3 # <CJK> +0x8DE4 # <CJK> +0x8DE8 # <CJK> +0x8DEA # <CJK> +0x8DEB # <CJK> +0x8DEC # <CJK> +0x8DEF # <CJK> +0x8DF3 # <CJK> +0x8DF5 # <CJK> +0x8DF7 # <CJK> +0x8DF8 # <CJK> +0x8DF9 # <CJK> +0x8DFA # <CJK> +0x8DFB # <CJK> +0x8DFD # <CJK> +0x8E05 # <CJK> +0x8E09 # <CJK> +0x8E0A # <CJK> +0x8E0C # <CJK> +0x8E0F # <CJK> +0x8E14 # <CJK> +0x8E1D # <CJK> +0x8E1E # <CJK> +0x8E1F # <CJK> +0x8E22 # <CJK> +0x8E23 # <CJK> +0x8E29 # <CJK> +0x8E2A # <CJK> +0x8E2C # <CJK> +0x8E2E # <CJK> +0x8E2F # <CJK> +0x8E31 # <CJK> +0x8E35 # <CJK> +0x8E39 # <CJK> +0x8E3A # <CJK> +0x8E3D # <CJK> +0x8E40 # <CJK> +0x8E41 # <CJK> +0x8E42 # <CJK> +0x8E44 # <CJK> +0x8E47 # <CJK> +0x8E48 # <CJK> +0x8E49 # <CJK> +0x8E4A # <CJK> +0x8E4B # <CJK> +0x8E51 # <CJK> +0x8E52 # <CJK> +0x8E59 # <CJK> +0x8E66 # <CJK> +0x8E69 # <CJK> +0x8E6C # <CJK> +0x8E6D # <CJK> +0x8E6F # <CJK> +0x8E70 # <CJK> +0x8E72 # <CJK> +0x8E74 # <CJK> +0x8E76 # <CJK> +0x8E7C # <CJK> +0x8E7F # <CJK> +0x8E81 # <CJK> +0x8E85 # <CJK> +0x8E87 # <CJK> +0x8E8F # <CJK> +0x8E90 # <CJK> +0x8E94 # <CJK> +0x8E9C # <CJK> +0x8E9E # <CJK> +0x8EAB # <CJK> +0x8EAC # <CJK> +0x8EAF # <CJK> +0x8EB2 # <CJK> +0x8EBA # <CJK> +0x8ECE # <CJK> +0x8F66 # <CJK> +0x8F67 # <CJK> +0x8F68 # <CJK> +0x8F69 # <CJK> +0x8F6B # <CJK> +0x8F6C # <CJK> +0x8F6D # <CJK> +0x8F6E # <CJK> +0x8F6F # <CJK> +0x8F70 # <CJK> +0x8F71 # <CJK> +0x8F72 # <CJK> +0x8F73 # <CJK> +0x8F74 # <CJK> +0x8F75 # <CJK> +0x8F76 # <CJK> +0x8F77 # <CJK> +0x8F78 # <CJK> +0x8F79 # <CJK> +0x8F7A # <CJK> +0x8F7B # <CJK> +0x8F7C # <CJK> +0x8F7D # <CJK> +0x8F7E # <CJK> +0x8F7F # <CJK> +0x8F81 # <CJK> +0x8F82 # <CJK> +0x8F83 # <CJK> +0x8F84 # <CJK> +0x8F85 # <CJK> +0x8F86 # <CJK> +0x8F87 # <CJK> +0x8F88 # <CJK> +0x8F89 # <CJK> +0x8F8A # <CJK> +0x8F8B # <CJK> +0x8F8D # <CJK> +0x8F8E # <CJK> +0x8F8F # <CJK> +0x8F90 # <CJK> +0x8F91 # <CJK> +0x8F93 # <CJK> +0x8F94 # <CJK> +0x8F95 # <CJK> +0x8F96 # <CJK> +0x8F97 # <CJK> +0x8F98 # <CJK> +0x8F99 # <CJK> +0x8F9A # <CJK> +0x8F9B # <CJK> +0x8F9C # <CJK> +0x8F9E # <CJK> +0x8F9F # <CJK> +0x8FA3 # <CJK> +0x8FA8 # <CJK> +0x8FA9 # <CJK> +0x8FAB # <CJK> +0x8FB0 # <CJK> +0x8FB1 # <CJK> +0x8FB6 # <CJK> +0x8FB9 # <CJK> +0x8FBD # <CJK> +0x8FBE # <CJK> +0x8FC1 # <CJK> +0x8FC2 # <CJK> +0x8FC4 # <CJK> +0x8FC5 # <CJK> +0x8FC7 # <CJK> +0x8FC8 # <CJK> +0x8FCE # <CJK> +0x8FD0 # <CJK> +0x8FD1 # <CJK> +0x8FD3 # <CJK> +0x8FD4 # <CJK> +0x8FD5 # <CJK> +0x8FD8 # <CJK> +0x8FD9 # <CJK> +0x8FDB # <CJK> +0x8FDC # <CJK> +0x8FDD # <CJK> +0x8FDE # <CJK> +0x8FDF # <CJK> +0x8FE2 # <CJK> +0x8FE4 # <CJK> +0x8FE5 # <CJK> +0x8FE6 # <CJK> +0x8FE8 # <CJK> +0x8FE9 # <CJK> +0x8FEA # <CJK> +0x8FEB # <CJK> +0x8FED # <CJK> +0x8FEE # <CJK> +0x8FF0 # <CJK> +0x8FF3 # <CJK> +0x8FF7 # <CJK> +0x8FF8 # <CJK> +0x8FF9 # <CJK> +0x8FFD # <CJK> +0x9000 # <CJK> +0x9001 # <CJK> +0x9002 # <CJK> +0x9003 # <CJK> +0x9004 # <CJK> +0x9005 # <CJK> +0x9006 # <CJK> +0x9009 # <CJK> +0x900A # <CJK> +0x900B # <CJK> +0x900D # <CJK> +0x900F # <CJK> +0x9010 # <CJK> +0x9011 # <CJK> +0x9012 # <CJK> +0x9014 # <CJK> +0x9016 # <CJK> +0x9017 # <CJK> +0x901A # <CJK> +0x901B # <CJK> +0x901D # <CJK> +0x901E # <CJK> +0x901F # <CJK> +0x9020 # <CJK> +0x9021 # <CJK> +0x9022 # <CJK> +0x9026 # <CJK> +0x902D # <CJK> +0x902E # <CJK> +0x902F # <CJK> +0x9035 # <CJK> +0x9036 # <CJK> +0x9038 # <CJK> +0x903B # <CJK> +0x903C # <CJK> +0x903E # <CJK> +0x9041 # <CJK> +0x9042 # <CJK> +0x9044 # <CJK> +0x9047 # <CJK> +0x904D # <CJK> +0x904F # <CJK> +0x9050 # <CJK> +0x9051 # <CJK> +0x9052 # <CJK> +0x9053 # <CJK> +0x9057 # <CJK> +0x9058 # <CJK> +0x905B # <CJK> +0x9062 # <CJK> +0x9063 # <CJK> +0x9065 # <CJK> +0x9068 # <CJK> +0x906D # <CJK> +0x906E # <CJK> +0x9074 # <CJK> +0x9075 # <CJK> +0x907D # <CJK> +0x907F # <CJK> +0x9080 # <CJK> +0x9082 # <CJK> +0x9083 # <CJK> +0x9088 # <CJK> +0x908B # <CJK> +0x9091 # <CJK> +0x9093 # <CJK> +0x9095 # <CJK> +0x9097 # <CJK> +0x9099 # <CJK> +0x909B # <CJK> +0x909D # <CJK> +0x90A1 # <CJK> +0x90A2 # <CJK> +0x90A3 # <CJK> +0x90A6 # <CJK> +0x90AA # <CJK> +0x90AC # <CJK> +0x90AE # <CJK> +0x90AF # <CJK> +0x90B0 # <CJK> +0x90B1 # <CJK> +0x90B3 # <CJK> +0x90B4 # <CJK> +0x90B5 # <CJK> +0x90B6 # <CJK> +0x90B8 # <CJK> +0x90B9 # <CJK> +0x90BA # <CJK> +0x90BB # <CJK> +0x90BE # <CJK> +0x90C1 # <CJK> +0x90C4 # <CJK> +0x90C5 # <CJK> +0x90C7 # <CJK> +0x90CA # <CJK> +0x90CE # <CJK> +0x90CF # <CJK> +0x90D0 # <CJK> +0x90D1 # <CJK> +0x90D3 # <CJK> +0x90D7 # <CJK> +0x90DB # <CJK> +0x90DC # <CJK> +0x90DD # <CJK> +0x90E1 # <CJK> +0x90E2 # <CJK> +0x90E6 # <CJK> +0x90E7 # <CJK> +0x90E8 # <CJK> +0x90EB # <CJK> +0x90ED # <CJK> +0x90EF # <CJK> +0x90F4 # <CJK> +0x90F8 # <CJK> +0x90FD # <CJK> +0x90FE # <CJK> +0x9102 # <CJK> +0x9104 # <CJK> +0x9119 # <CJK> +0x911E # <CJK> +0x9122 # <CJK> +0x9123 # <CJK> +0x912F # <CJK> +0x9131 # <CJK> +0x9139 # <CJK> +0x9143 # <CJK> +0x9146 # <CJK> +0x9149 # <CJK> +0x914A # <CJK> +0x914B # <CJK> +0x914C # <CJK> +0x914D # <CJK> +0x914E # <CJK> +0x914F # <CJK> +0x9150 # <CJK> +0x9152 # <CJK> +0x9157 # <CJK> +0x915A # <CJK> +0x915D # <CJK> +0x915E # <CJK> +0x9161 # <CJK> +0x9162 # <CJK> +0x9163 # <CJK> +0x9164 # <CJK> +0x9165 # <CJK> +0x9169 # <CJK> +0x916A # <CJK> +0x916C # <CJK> +0x916E # <CJK> +0x916F # <CJK> +0x9170 # <CJK> +0x9171 # <CJK> +0x9172 # <CJK> +0x9174 # <CJK> +0x9175 # <CJK> +0x9176 # <CJK> +0x9177 # <CJK> +0x9178 # <CJK> +0x9179 # <CJK> +0x917D # <CJK> +0x917E # <CJK> +0x917F # <CJK> +0x9185 # <CJK> +0x9187 # <CJK> +0x9189 # <CJK> +0x918B # <CJK> +0x918C # <CJK> +0x918D # <CJK> +0x9190 # <CJK> +0x9191 # <CJK> +0x9192 # <CJK> +0x919A # <CJK> +0x919B # <CJK> +0x91A2 # <CJK> +0x91A3 # <CJK> +0x91AA # <CJK> +0x91AD # <CJK> +0x91AE # <CJK> +0x91AF # <CJK> +0x91B4 # <CJK> +0x91B5 # <CJK> +0x91BA # <CJK> +0x91C7 # <CJK> +0x91C9 # <CJK> +0x91CA # <CJK> +0x91CC # <CJK> +0x91CD # <CJK> +0x91CE # <CJK> +0x91CF # <CJK> +0x91D1 # <CJK> +0x91DC # <CJK> +0x9274 # <CJK> +0x928E # <CJK> +0x92AE # <CJK> +0x92C8 # <CJK> +0x933E # <CJK> +0x936A # <CJK> +0x938F # <CJK> +0x93CA # <CJK> +0x93D6 # <CJK> +0x943E # <CJK> +0x946B # <CJK> +0x9485 # <CJK> +0x9486 # <CJK> +0x9487 # <CJK> +0x9488 # <CJK> +0x9489 # <CJK> +0x948A # <CJK> +0x948B # <CJK> +0x948C # <CJK> +0x948D # <CJK> +0x948E # <CJK> +0x948F # <CJK> +0x9490 # <CJK> +0x9492 # <CJK> +0x9493 # <CJK> +0x9494 # <CJK> +0x9495 # <CJK> +0x9497 # <CJK> +0x9499 # <CJK> +0x949A # <CJK> +0x949B # <CJK> +0x949C # <CJK> +0x949D # <CJK> +0x949E # <CJK> +0x949F # <CJK> +0x94A0 # <CJK> +0x94A1 # <CJK> +0x94A2 # <CJK> +0x94A3 # <CJK> +0x94A4 # <CJK> +0x94A5 # <CJK> +0x94A6 # <CJK> +0x94A7 # <CJK> +0x94A8 # <CJK> +0x94A9 # <CJK> +0x94AA # <CJK> +0x94AB # <CJK> +0x94AC # <CJK> +0x94AD # <CJK> +0x94AE # <CJK> +0x94AF # <CJK> +0x94B0 # <CJK> +0x94B1 # <CJK> +0x94B2 # <CJK> +0x94B3 # <CJK> +0x94B4 # <CJK> +0x94B5 # <CJK> +0x94B6 # <CJK> +0x94B7 # <CJK> +0x94B8 # <CJK> +0x94B9 # <CJK> +0x94BA # <CJK> +0x94BB # <CJK> +0x94BC # <CJK> +0x94BD # <CJK> +0x94BE # <CJK> +0x94BF # <CJK> +0x94C0 # <CJK> +0x94C1 # <CJK> +0x94C2 # <CJK> +0x94C3 # <CJK> +0x94C4 # <CJK> +0x94C5 # <CJK> +0x94C6 # <CJK> +0x94C8 # <CJK> +0x94C9 # <CJK> +0x94CA # <CJK> +0x94CB # <CJK> +0x94CC # <CJK> +0x94CD # <CJK> +0x94CE # <CJK> +0x94D0 # <CJK> +0x94D1 # <CJK> +0x94D2 # <CJK> +0x94D5 # <CJK> +0x94D6 # <CJK> +0x94D7 # <CJK> +0x94D8 # <CJK> +0x94D9 # <CJK> +0x94DB # <CJK> +0x94DC # <CJK> +0x94DD # <CJK> +0x94DE # <CJK> +0x94DF # <CJK> +0x94E0 # <CJK> +0x94E1 # <CJK> +0x94E2 # <CJK> +0x94E3 # <CJK> +0x94E4 # <CJK> +0x94E5 # <CJK> +0x94E7 # <CJK> +0x94E8 # <CJK> +0x94E9 # <CJK> +0x94EA # <CJK> +0x94EB # <CJK> +0x94EC # <CJK> +0x94ED # <CJK> +0x94EE # <CJK> +0x94EF # <CJK> +0x94F0 # <CJK> +0x94F1 # <CJK> +0x94F2 # <CJK> +0x94F3 # <CJK> +0x94F4 # <CJK> +0x94F5 # <CJK> +0x94F6 # <CJK> +0x94F7 # <CJK> +0x94F8 # <CJK> +0x94F9 # <CJK> +0x94FA # <CJK> +0x94FC # <CJK> +0x94FD # <CJK> +0x94FE # <CJK> +0x94FF # <CJK> +0x9500 # <CJK> +0x9501 # <CJK> +0x9502 # <CJK> +0x9503 # <CJK> +0x9504 # <CJK> +0x9505 # <CJK> +0x9506 # <CJK> +0x9507 # <CJK> +0x9508 # <CJK> +0x9509 # <CJK> +0x950A # <CJK> +0x950B # <CJK> +0x950C # <CJK> +0x950D # <CJK> +0x950E # <CJK> +0x950F # <CJK> +0x9510 # <CJK> +0x9511 # <CJK> +0x9512 # <CJK> +0x9513 # <CJK> +0x9514 # <CJK> +0x9515 # <CJK> +0x9516 # <CJK> +0x9517 # <CJK> +0x9518 # <CJK> +0x9519 # <CJK> +0x951A # <CJK> +0x951B # <CJK> +0x951D # <CJK> +0x951E # <CJK> +0x951F # <CJK> +0x9521 # <CJK> +0x9522 # <CJK> +0x9523 # <CJK> +0x9524 # <CJK> +0x9525 # <CJK> +0x9526 # <CJK> +0x9528 # <CJK> +0x9529 # <CJK> +0x952A # <CJK> +0x952B # <CJK> +0x952C # <CJK> +0x952D # <CJK> +0x952E # <CJK> +0x952F # <CJK> +0x9530 # <CJK> +0x9531 # <CJK> +0x9532 # <CJK> +0x9534 # <CJK> +0x9535 # <CJK> +0x9536 # <CJK> +0x9537 # <CJK> +0x9538 # <CJK> +0x9539 # <CJK> +0x953A # <CJK> +0x953B # <CJK> +0x953C # <CJK> +0x953E # <CJK> +0x953F # <CJK> +0x9540 # <CJK> +0x9541 # <CJK> +0x9542 # <CJK> +0x9544 # <CJK> +0x9545 # <CJK> +0x9546 # <CJK> +0x9547 # <CJK> +0x9549 # <CJK> +0x954A # <CJK> +0x954C # <CJK> +0x954D # <CJK> +0x954E # <CJK> +0x954F # <CJK> +0x9550 # <CJK> +0x9551 # <CJK> +0x9552 # <CJK> +0x9553 # <CJK> +0x9554 # <CJK> +0x9556 # <CJK> +0x9557 # <CJK> +0x9558 # <CJK> +0x9559 # <CJK> +0x955B # <CJK> +0x955C # <CJK> +0x955D # <CJK> +0x955E # <CJK> +0x955F # <CJK> +0x9561 # <CJK> +0x9562 # <CJK> +0x9563 # <CJK> +0x9564 # <CJK> +0x9565 # <CJK> +0x9566 # <CJK> +0x9567 # <CJK> +0x9568 # <CJK> +0x9569 # <CJK> +0x956A # <CJK> +0x956B # <CJK> +0x956C # <CJK> +0x956D # <CJK> +0x956F # <CJK> +0x9570 # <CJK> +0x9571 # <CJK> +0x9572 # <CJK> +0x9573 # <CJK> +0x9576 # <CJK> +0x957F # <CJK> +0x95E8 # <CJK> +0x95E9 # <CJK> +0x95EA # <CJK> +0x95EB # <CJK> +0x95ED # <CJK> +0x95EE # <CJK> +0x95EF # <CJK> +0x95F0 # <CJK> +0x95F1 # <CJK> +0x95F2 # <CJK> +0x95F3 # <CJK> +0x95F4 # <CJK> +0x95F5 # <CJK> +0x95F6 # <CJK> +0x95F7 # <CJK> +0x95F8 # <CJK> +0x95F9 # <CJK> +0x95FA # <CJK> +0x95FB # <CJK> +0x95FC # <CJK> +0x95FD # <CJK> +0x95FE # <CJK> +0x9600 # <CJK> +0x9601 # <CJK> +0x9602 # <CJK> +0x9603 # <CJK> +0x9604 # <CJK> +0x9605 # <CJK> +0x9606 # <CJK> +0x9608 # <CJK> +0x9609 # <CJK> +0x960A # <CJK> +0x960B # <CJK> +0x960C # <CJK> +0x960D # <CJK> +0x960E # <CJK> +0x960F # <CJK> +0x9610 # <CJK> +0x9611 # <CJK> +0x9612 # <CJK> +0x9614 # <CJK> +0x9615 # <CJK> +0x9616 # <CJK> +0x9617 # <CJK> +0x9619 # <CJK> +0x961A # <CJK> +0x961C # <CJK> +0x961D # <CJK> +0x961F # <CJK> +0x9621 # <CJK> +0x9622 # <CJK> +0x962A # <CJK> +0x962E # <CJK> +0x9631 # <CJK> +0x9632 # <CJK> +0x9633 # <CJK> +0x9634 # <CJK> +0x9635 # <CJK> +0x9636 # <CJK> +0x963B # <CJK> +0x963C # <CJK> +0x963D # <CJK> +0x963F # <CJK> +0x9640 # <CJK> +0x9642 # <CJK> +0x9644 # <CJK> +0x9645 # <CJK> +0x9646 # <CJK> +0x9647 # <CJK> +0x9648 # <CJK> +0x9649 # <CJK> +0x964B # <CJK> +0x964C # <CJK> +0x964D # <CJK> +0x9650 # <CJK> +0x9654 # <CJK> +0x9655 # <CJK> +0x965B # <CJK> +0x965F # <CJK> +0x9661 # <CJK> +0x9662 # <CJK> +0x9664 # <CJK> +0x9667 # <CJK> +0x9668 # <CJK> +0x9669 # <CJK> +0x966A # <CJK> +0x966C # <CJK> +0x9672 # <CJK> +0x9674 # <CJK> +0x9675 # <CJK> +0x9676 # <CJK> +0x9677 # <CJK> +0x9685 # <CJK> +0x9686 # <CJK> +0x9688 # <CJK> +0x968B # <CJK> +0x968D # <CJK> +0x968F # <CJK> +0x9690 # <CJK> +0x9694 # <CJK> +0x9697 # <CJK> +0x9698 # <CJK> +0x9699 # <CJK> +0x969C # <CJK> +0x96A7 # <CJK> +0x96B0 # <CJK> +0x96B3 # <CJK> +0x96B6 # <CJK> +0x96B9 # <CJK> +0x96BC # <CJK> +0x96BD # <CJK> +0x96BE # <CJK> +0x96C0 # <CJK> +0x96C1 # <CJK> +0x96C4 # <CJK> +0x96C5 # <CJK> +0x96C6 # <CJK> +0x96C7 # <CJK> +0x96C9 # <CJK> +0x96CC # <CJK> +0x96CD # <CJK> +0x96CE # <CJK> +0x96CF # <CJK> +0x96D2 # <CJK> +0x96D5 # <CJK> +0x96E0 # <CJK> +0x96E8 # <CJK> +0x96E9 # <CJK> +0x96EA # <CJK> +0x96EF # <CJK> +0x96F3 # <CJK> +0x96F6 # <CJK> +0x96F7 # <CJK> +0x96F9 # <CJK> +0x96FE # <CJK> +0x9700 # <CJK> +0x9701 # <CJK> +0x9704 # <CJK> +0x9706 # <CJK> +0x9707 # <CJK> +0x9708 # <CJK> +0x9709 # <CJK> +0x970D # <CJK> +0x970E # <CJK> +0x970F # <CJK> +0x9713 # <CJK> +0x9716 # <CJK> +0x971C # <CJK> +0x971E # <CJK> +0x972A # <CJK> +0x972D # <CJK> +0x9730 # <CJK> +0x9732 # <CJK> +0x9738 # <CJK> +0x9739 # <CJK> +0x973E # <CJK> +0x9752 # <CJK> +0x9753 # <CJK> +0x9756 # <CJK> +0x9759 # <CJK> +0x975B # <CJK> +0x975E # <CJK> +0x9760 # <CJK> +0x9761 # <CJK> +0x9762 # <CJK> +0x9765 # <CJK> +0x9769 # <CJK> +0x9773 # <CJK> +0x9774 # <CJK> +0x9776 # <CJK> +0x977C # <CJK> +0x9785 # <CJK> +0x978B # <CJK> +0x978D # <CJK> +0x9791 # <CJK> +0x9792 # <CJK> +0x9794 # <CJK> +0x9798 # <CJK> +0x97A0 # <CJK> +0x97A3 # <CJK> +0x97AB # <CJK> +0x97AD # <CJK> +0x97AF # <CJK> +0x97B2 # <CJK> +0x97B4 # <CJK> +0x97E6 # <CJK> +0x97E7 # <CJK> +0x97E9 # <CJK> +0x97EA # <CJK> +0x97EB # <CJK> +0x97EC # <CJK> +0x97ED # <CJK> +0x97F3 # <CJK> +0x97F5 # <CJK> +0x97F6 # <CJK> +0x9875 # <CJK> +0x9876 # <CJK> +0x9877 # <CJK> +0x9878 # <CJK> +0x9879 # <CJK> +0x987A # <CJK> +0x987B # <CJK> +0x987C # <CJK> +0x987D # <CJK> +0x987E # <CJK> +0x987F # <CJK> +0x9880 # <CJK> +0x9881 # <CJK> +0x9882 # <CJK> +0x9883 # <CJK> +0x9884 # <CJK> +0x9885 # <CJK> +0x9886 # <CJK> +0x9887 # <CJK> +0x9888 # <CJK> +0x9889 # <CJK> +0x988A # <CJK> +0x988C # <CJK> +0x988D # <CJK> +0x988F # <CJK> +0x9890 # <CJK> +0x9891 # <CJK> +0x9893 # <CJK> +0x9894 # <CJK> +0x9896 # <CJK> +0x9897 # <CJK> +0x9898 # <CJK> +0x989A # <CJK> +0x989B # <CJK> +0x989C # <CJK> +0x989D # <CJK> +0x989E # <CJK> +0x989F # <CJK> +0x98A0 # <CJK> +0x98A1 # <CJK> +0x98A2 # <CJK> +0x98A4 # <CJK> +0x98A5 # <CJK> +0x98A6 # <CJK> +0x98A7 # <CJK> +0x98CE # <CJK> +0x98D1 # <CJK> +0x98D2 # <CJK> +0x98D3 # <CJK> +0x98D5 # <CJK> +0x98D8 # <CJK> +0x98D9 # <CJK> +0x98DA # <CJK> +0x98DE # <CJK> +0x98DF # <CJK> +0x98E7 # <CJK> +0x98E8 # <CJK> +0x990D # <CJK> +0x9910 # <CJK> +0x992E # <CJK> +0x9954 # <CJK> +0x9955 # <CJK> +0x9963 # <CJK> +0x9965 # <CJK> +0x9967 # <CJK> +0x9968 # <CJK> +0x9969 # <CJK> +0x996A # <CJK> +0x996B # <CJK> +0x996C # <CJK> +0x996D # <CJK> +0x996E # <CJK> +0x996F # <CJK> +0x9970 # <CJK> +0x9971 # <CJK> +0x9972 # <CJK> +0x9974 # <CJK> +0x9975 # <CJK> +0x9976 # <CJK> +0x9977 # <CJK> +0x997A # <CJK> +0x997C # <CJK> +0x997D # <CJK> +0x997F # <CJK> +0x9980 # <CJK> +0x9981 # <CJK> +0x9984 # <CJK> +0x9985 # <CJK> +0x9986 # <CJK> +0x9987 # <CJK> +0x9988 # <CJK> +0x998A # <CJK> +0x998B # <CJK> +0x998D # <CJK> +0x998F # <CJK> +0x9990 # <CJK> +0x9991 # <CJK> +0x9992 # <CJK> +0x9993 # <CJK> +0x9994 # <CJK> +0x9995 # <CJK> +0x9996 # <CJK> +0x9997 # <CJK> +0x9998 # <CJK> +0x9999 # <CJK> +0x99A5 # <CJK> +0x99A8 # <CJK> +0x9A6C # <CJK> +0x9A6D # <CJK> +0x9A6E # <CJK> +0x9A6F # <CJK> +0x9A70 # <CJK> +0x9A71 # <CJK> +0x9A73 # <CJK> +0x9A74 # <CJK> +0x9A75 # <CJK> +0x9A76 # <CJK> +0x9A77 # <CJK> +0x9A78 # <CJK> +0x9A79 # <CJK> +0x9A7A # <CJK> +0x9A7B # <CJK> +0x9A7C # <CJK> +0x9A7D # <CJK> +0x9A7E # <CJK> +0x9A7F # <CJK> +0x9A80 # <CJK> +0x9A81 # <CJK> +0x9A82 # <CJK> +0x9A84 # <CJK> +0x9A85 # <CJK> +0x9A86 # <CJK> +0x9A87 # <CJK> +0x9A88 # <CJK> +0x9A8A # <CJK> +0x9A8B # <CJK> +0x9A8C # <CJK> +0x9A8F # <CJK> +0x9A90 # <CJK> +0x9A91 # <CJK> +0x9A92 # <CJK> +0x9A93 # <CJK> +0x9A96 # <CJK> +0x9A97 # <CJK> +0x9A98 # <CJK> +0x9A9A # <CJK> +0x9A9B # <CJK> +0x9A9C # <CJK> +0x9A9D # <CJK> +0x9A9E # <CJK> +0x9A9F # <CJK> +0x9AA0 # <CJK> +0x9AA1 # <CJK> +0x9AA2 # <CJK> +0x9AA3 # <CJK> +0x9AA4 # <CJK> +0x9AA5 # <CJK> +0x9AA7 # <CJK> +0x9AA8 # <CJK> +0x9AB0 # <CJK> +0x9AB1 # <CJK> +0x9AB6 # <CJK> +0x9AB7 # <CJK> +0x9AB8 # <CJK> +0x9ABA # <CJK> +0x9ABC # <CJK> +0x9AC0 # <CJK> +0x9AC1 # <CJK> +0x9AC2 # <CJK> +0x9AC5 # <CJK> +0x9ACB # <CJK> +0x9ACC # <CJK> +0x9AD1 # <CJK> +0x9AD3 # <CJK> +0x9AD8 # <CJK> +0x9ADF # <CJK> +0x9AE1 # <CJK> +0x9AE6 # <CJK> +0x9AEB # <CJK> +0x9AED # <CJK> +0x9AEF # <CJK> +0x9AF9 # <CJK> +0x9AFB # <CJK> +0x9B03 # <CJK> +0x9B08 # <CJK> +0x9B0F # <CJK> +0x9B13 # <CJK> +0x9B1F # <CJK> +0x9B23 # <CJK> +0x9B2F # <CJK> +0x9B32 # <CJK> +0x9B3B # <CJK> +0x9B3C # <CJK> +0x9B41 # <CJK> +0x9B42 # <CJK> +0x9B43 # <CJK> +0x9B44 # <CJK> +0x9B45 # <CJK> +0x9B47 # <CJK> +0x9B48 # <CJK> +0x9B49 # <CJK> +0x9B4D # <CJK> +0x9B4F # <CJK> +0x9B51 # <CJK> +0x9B54 # <CJK> +0x9C7C # <CJK> +0x9C7F # <CJK> +0x9C81 # <CJK> +0x9C82 # <CJK> +0x9C85 # <CJK> +0x9C86 # <CJK> +0x9C87 # <CJK> +0x9C88 # <CJK> +0x9C8B # <CJK> +0x9C8D # <CJK> +0x9C8E # <CJK> +0x9C90 # <CJK> +0x9C91 # <CJK> +0x9C92 # <CJK> +0x9C94 # <CJK> +0x9C95 # <CJK> +0x9C9A # <CJK> +0x9C9B # <CJK> +0x9C9C # <CJK> +0x9C9E # <CJK> +0x9C9F # <CJK> +0x9CA0 # <CJK> +0x9CA1 # <CJK> +0x9CA2 # <CJK> +0x9CA3 # <CJK> +0x9CA4 # <CJK> +0x9CA5 # <CJK> +0x9CA6 # <CJK> +0x9CA7 # <CJK> +0x9CA8 # <CJK> +0x9CA9 # <CJK> +0x9CAB # <CJK> +0x9CAD # <CJK> +0x9CAE # <CJK> +0x9CB0 # <CJK> +0x9CB1 # <CJK> +0x9CB2 # <CJK> +0x9CB3 # <CJK> +0x9CB4 # <CJK> +0x9CB5 # <CJK> +0x9CB6 # <CJK> +0x9CB7 # <CJK> +0x9CB8 # <CJK> +0x9CBA # <CJK> +0x9CBB # <CJK> +0x9CBC # <CJK> +0x9CBD # <CJK> +0x9CC3 # <CJK> +0x9CC4 # <CJK> +0x9CC5 # <CJK> +0x9CC6 # <CJK> +0x9CC7 # <CJK> +0x9CCA # <CJK> +0x9CCB # <CJK> +0x9CCC # <CJK> +0x9CCD # <CJK> +0x9CCE # <CJK> +0x9CCF # <CJK> +0x9CD0 # <CJK> +0x9CD3 # <CJK> +0x9CD4 # <CJK> +0x9CD5 # <CJK> +0x9CD6 # <CJK> +0x9CD7 # <CJK> +0x9CD8 # <CJK> +0x9CD9 # <CJK> +0x9CDC # <CJK> +0x9CDD # <CJK> +0x9CDE # <CJK> +0x9CDF # <CJK> +0x9CE2 # <CJK> +0x9E1F # <CJK> +0x9E20 # <CJK> +0x9E21 # <CJK> +0x9E22 # <CJK> +0x9E23 # <CJK> +0x9E25 # <CJK> +0x9E26 # <CJK> +0x9E28 # <CJK> +0x9E29 # <CJK> +0x9E2A # <CJK> +0x9E2B # <CJK> +0x9E2C # <CJK> +0x9E2D # <CJK> +0x9E2F # <CJK> +0x9E31 # <CJK> +0x9E32 # <CJK> +0x9E33 # <CJK> +0x9E35 # <CJK> +0x9E36 # <CJK> +0x9E37 # <CJK> +0x9E38 # <CJK> +0x9E39 # <CJK> +0x9E3A # <CJK> +0x9E3D # <CJK> +0x9E3E # <CJK> +0x9E3F # <CJK> +0x9E41 # <CJK> +0x9E42 # <CJK> +0x9E43 # <CJK> +0x9E44 # <CJK> +0x9E45 # <CJK> +0x9E46 # <CJK> +0x9E47 # <CJK> +0x9E48 # <CJK> +0x9E49 # <CJK> +0x9E4A # <CJK> +0x9E4B # <CJK> +0x9E4C # <CJK> +0x9E4E # <CJK> +0x9E4F # <CJK> +0x9E51 # <CJK> +0x9E55 # <CJK> +0x9E57 # <CJK> +0x9E58 # <CJK> +0x9E5A # <CJK> +0x9E5B # <CJK> +0x9E5C # <CJK> +0x9E5E # <CJK> +0x9E63 # <CJK> +0x9E64 # <CJK> +0x9E66 # <CJK> +0x9E67 # <CJK> +0x9E68 # <CJK> +0x9E69 # <CJK> +0x9E6A # <CJK> +0x9E6B # <CJK> +0x9E6C # <CJK> +0x9E6D # <CJK> +0x9E70 # <CJK> +0x9E71 # <CJK> +0x9E73 # <CJK> +0x9E7E # <CJK> +0x9E7F # <CJK> +0x9E82 # <CJK> +0x9E87 # <CJK> +0x9E88 # <CJK> +0x9E8B # <CJK> +0x9E92 # <CJK> +0x9E93 # <CJK> +0x9E9D # <CJK> +0x9E9F # <CJK> +0x9EA6 # <CJK> +0x9EB4 # <CJK> +0x9EB8 # <CJK> +0x9EBB # <CJK> +0x9EBD # <CJK> +0x9EBE # <CJK> +0x9EC4 # <CJK> +0x9EC9 # <CJK> +0x9ECD # <CJK> +0x9ECE # <CJK> +0x9ECF # <CJK> +0x9ED1 # <CJK> +0x9ED4 # <CJK> +0x9ED8 # <CJK> +0x9EDB # <CJK> +0x9EDC # <CJK> +0x9EDD # <CJK> +0x9EDF # <CJK> +0x9EE0 # <CJK> +0x9EE2 # <CJK> +0x9EE5 # <CJK> +0x9EE7 # <CJK> +0x9EE9 # <CJK> +0x9EEA # <CJK> +0x9EEF # <CJK> +0x9EF9 # <CJK> +0x9EFB # <CJK> +0x9EFC # <CJK> +0x9EFE # <CJK> +0x9F0B # <CJK> +0x9F0D # <CJK> +0x9F0E # <CJK> +0x9F10 # <CJK> +0x9F13 # <CJK> +0x9F17 # <CJK> +0x9F19 # <CJK> +0x9F20 # <CJK> +0x9F22 # <CJK> +0x9F2C # <CJK> +0x9F2F # <CJK> +0x9F37 # <CJK> +0x9F39 # <CJK> +0x9F3B # <CJK> +0x9F3D # <CJK> +0x9F3E # <CJK> +0x9F44 # <CJK> +0x9F50 # <CJK> +0x9F51 # <CJK> +0x9F7F # <CJK> +0x9F80 # <CJK> +0x9F83 # <CJK> +0x9F84 # <CJK> +0x9F85 # <CJK> +0x9F86 # <CJK> +0x9F87 # <CJK> +0x9F88 # <CJK> +0x9F89 # <CJK> +0x9F8A # <CJK> +0x9F8B # <CJK> +0x9F8C # <CJK> +0x9F99 # <CJK> +0x9F9A # <CJK> +0x9F9B # <CJK> +0x9F9F # <CJK> +0x9FA0 # <CJK> diff --git a/fontconfig/fc-lang/zh_hk.orth b/fontconfig/fc-lang/zh_hk.orth index b4a67ebb4..5d5ef0526 100644 --- a/fontconfig/fc-lang/zh_hk.orth +++ b/fontconfig/fc-lang/zh_hk.orth @@ -1,2240 +1,2240 @@ -#
-# fontconfig/fc-lang/zh_hk.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese Hong Kong Supplementary Character Set (ZH-HK)
-#
-# Taken from the HKSCS-2001, including only the non-PUA BMP glyphs
-# as encoded in ISO/IEC 10646-1:2000
-4E04
-4E1A
-4E1C
-4E21
-4E24
-4E28
-4E2A
-4E2C
-4E2F
-4E36
-4E37
-4E3D
-4E3F
-4E49
-4E5A
-4E5B
-4E6A
-4E78
-4E80
-4E81
-4E85
-4E87
-4E89
-4E98
-4E9A
-4EA0
-4EA3
-4EB7
-4EBB
-4EBC
-4EBF
-4ECE
-4EEA
-4EEB
-4EEE
-4EF8
-4F03
-4F17
-4F1A
-4F28
-4F29
-4F32
-4F37
-4F39
-4F42
-4F45
-4F4B
-4F72
-4F8A
-4FA2
-4FA8
-4FAB
-4FB0
-4FBD
-4FC8
-4FCC
-4FE4
-4FE5
-4FF0
-4FF2
-4FF9
-4FFD
-5003
-5008
-502E
-5034
-503B
-5056
-5058
-5066
-506C
-5081
-5088
-5090
-50A6
-50BC
-50CD
-50D0
-50D9
-50DF
-50E1
-50F4
-50FC
-5101
-510D
-510E
-512B
-5156
-5160
-516A
-5174
-5179
-5182
-5186
-5188
-5196
-519A
-519C
-51A7
-51A8
-51AB
-51AE
-51B2
-51B3
-51B4
-51B5
-51B8
-51C3
-51C7
-51C9
-51CF
-51D1
-51D2
-51D3
-51DB
-51DF
-51E2
-51E4
-51ED
-51F4
-51FC
-51FE
-5202
-5205
-520B
-521F
-5220
-5226
-5227
-5234
-523C
-5257
-5259
-5260
-5268
-5273
-5279
-528F
-5290
-5294
-529A
-52A1
-52A4
-52A8
-52B5
-52B9
-52C5
-52CC
-52D0
-52D1
-52E0
-52E1
-52F9
-5301
-5324
-5327
-532C
-5332
-5333
-5338
-533B
-5342
-534E
-535D
-535F
-5364
-5367
-5369
-536D
-5374
-537D
-537E
-5393
-53A0
-53A2
-53A6
-53A8
-53A9
-53AA
-53AB
-53AE
-53B0
-53B6
-53C1
-53C2
-53C5
-53CC
-53D0
-53D1
-53D2
-53D8
-53D9
-53DA
-53E0
-53F6
-53F7
-53FE
-5413
-5414
-5416
-541A
-5421
-5423
-542F
-5432
-5434
-544B
-544D
-5469
-546A
-546D
-5485
-548F
-5493
-5494
-5497
-549C
-549E
-54A3
-54A4
-54B2
-54B4
-54B9
-54CB
-54CC
-54CD
-54D0
-54DA
-54E3
-54EF
-5502
-550D
-5513
-5518
-551E
-5523
-5525
-5528
-552B
-553F
-5547
-5549
-5553
-555D
-5569
-556B
-5571
-5572
-5573
-5579
-5586
-5590
-55A9
-55B0
-55B4
-55B9
-55BA
-55BC
-55C1
-55D7
-55D8
-55DE
-55EA
-55EC
-55F0
-55F1
-55F5
-55FB
-5605
-5611
-561E
-5620
-5621
-5622
-5623
-5625
-562D
-5637
-5643
-564D
-564F
-5650
-5652
-5654
-565D
-5661
-567A
-567B
-567C
-5689
-568A
-568B
-5692
-569E
-569F
-56A1
-56A4
-56AF
-56B1
-56B9
-56BF
-56D6
-56E2
-56ED
-56EF
-56F1
-56FD
-5700
-5715
-571D
-5732
-573D
-573F
-5742
-5743
-5746
-5754
-5757
-575B
-575F
-5767
-577A
-577E
-577F
-5788
-578A
-578D
-5790
-579C
-57A1
-57A7
-57AA
-57B4
-57BB
-57BE
-57C4
-57C8
-57D7
-57DD
-57DE
-57E6
-57EF
-57FE
-5803
-5812
-5822
-5826
-583A
-5840
-5844
-5847
-585C
-585F
-5869
-586C
-5872
-5873
-5892
-5899
-589A
-58A7
-58AA
-58B0
-58B5
-58B6
-58BB
-58CB
-58D0
-58DC
-58E0
-58F0
-58F2
-58F3
-58FB
-5902
-5904
-5905
-5907
-590A
-5911
-591F
-5932
-5934
-5965
-5975
-5989
-5994
-599A
-599F
-59AC
-59B0
-59B7
-59B8
-59C4
-59C9
-59D9
-59EB
-59EF
-59F0
-59F8
-59F9
-5A02
-5A0B
-5A0D
-5A12
-5A1A
-5A21
-5A24
-5A27
-5A2A
-5A2B
-5A2C
-5A3D
-5A45
-5A54
-5A59
-5A61
-5A63
-5A68
-5A6B
-5A6E
-5A71
-5A79
-5A7E
-5A81
-5A82
-5A86
-5A88
-5A91
-5A96
-5A99
-5AA0
-5AA1
-5AAB
-5AC3
-5ACE
-5ACF
-5AD3
-5AE4
-5AF0
-5AF2
-5AFA
-5AFE
-5B0D
-5B11
-5B15
-5B1F
-5B2B
-5B41
-5B44
-5B46
-5B4A
-5B4F
-5B66
-5B68
-5B6D
-5B74
-5B76
-5B7C
-5B80
-5B82
-5B90
-5B96
-5B9D
-5B9E
-5B9F
-5BAA
-5BC3
-5BD5
-5BD7
-5BF3
-5BFF
-5C05
-5C13
-5C14
-5C1C
-5C1E
-5C20
-5C23
-5C49
-5C4A
-5C53
-5C5E
-5C85
-5C99
-5C9A
-5C9C
-5C9E
-5CBA
-5CC1
-5CC2
-5CD1
-5CE5
-5CE9
-5CEF
-5CF5
-5D10
-5D15
-5D18
-5D2C
-5D2F
-5D3E
-5D46
-5D48
-5D56
-5D57
-5D5B
-5D70
-5D74
-5D7B
-5D85
-5D8B
-5D8E
-5DA4
-5DAB
-5DB6
-5DB9
-5DC1
-5DD7
-5DDB
-5DF5
-5E09
-5E0B
-5E12
-5E2E
-5E42
-5E48
-5E5E
-5E7A
-5E7F
-5E83
-5E86
-5E92
-5E99
-5EBD
-5ECD
-5ED0
-5EF4
-5EF8
-5EF9
-5EFB
-5EFC
-5F0C
-5F0D
-5F0E
-5F25
-5F3A
-5F4D
-5F50
-5F51
-5F5C
-5F61
-5F63
-5F72
-5F7B
-5F83
-5FA4
-5FA7
-5FB1
-5FBA
-5FC2
-5FC4
-5FDB
-5FDF
-6023
-6031
-603B
-604A
-6052
-6075
-6077
-607E
-609E
-60A4
-60A7
-60B3
-60D7
-60DE
-60E3
-60E7
-60E8
-60E9
-60FD
-6107
-610C
-6119
-6122
-6130
-613D
-6142
-6150
-6159
-615C
-6160
-6164
-616F
-617D
-6181
-6187
-6195
-6198
-6199
-619C
-61B7
-61B9
-61C0
-61CF
-61D0
-61D3
-61DA
-61E2
-622C
-6237
-6239
-624C
-6268
-6282
-6285
-6290
-629D
-62A4
-62A6
-62C3
-62C5
-62D5
-62DF
-62E5
-6318
-632E
-6331
-6335
-6337
-6364
-636C
-6379
-637F
-638B
-63B9
-63C1
-63D1
-63DE
-63E2
-63E6
-63F8
-63FB
-63FC
-63FE
-6407
-6432
-6438
-643A
-643B
-645A
-6471
-647C
-648D
-6491
-64AF
-64B4
-64B6
-64C0
-64D3
-64DD
-64E1
-64E5
-64E7
-64EA
-650A
-6511
-651E
-651F
-6530
-6534
-6535
-654D
-655F
-656B
-656D
-6585
-6586
-6588
-6589
-658B
-65B5
-65BE
-65D1
-65D4
-65E0
-65E3
-65FF
-6618
-661E
-6623
-6630
-6644
-6648
-664B
-6653
-6657
-6663
-6667
-666B
-6673
-667D
-6685
-668E
-6692
-669A
-66A4
-66AD
-66B3
-66B6
-66BF
-66CD
-66CE
-66F1
-6702
-670C
-670E
-6716
-6719
-671E
-6725
-6736
-6744
-6761
-6762
-6767
-676B
-678F
-67A0
-67A4
-67AC
-67B1
-67BF
-67D6
-67D7
-67F9
-67FE
-6800
-6801
-6802
-6803
-6804
-680D
-6810
-681B
-681E
-6822
-6836
-6837
-683E
-6847
-684A
-6855
-6856
-685D
-6865
-6884
-6888
-6898
-68A6
-68B6
-68B9
-68BD
-68C3
-68C5
-68CA
-6900
-6901
-6902
-6903
-6909
-6918
-6919
-691A
-691B
-692C
-6936
-693E
-6943
-6946
-6955
-6961
-6964
-6967
-6972
-6973
-6980
-6985
-698A
-6998
-699F
-69A2
-69B2
-69C0
-69D1
-69D5
-69D6
-69E1
-69E9
-69F9
-69FA
-6A03
-6A0B
-6A0C
-6A1A
-6A1C
-6A2B
-6A2C
-6A2D
-6A33
-6A43
-6A45
-6A4C
-6A52
-6A53
-6A57
-6A63
-6A65
-6A71
-6A74
-6A7A
-6A82
-6A8A
-6A8F
-6A99
-6A9D
-6AA7
-6AAB
-6AB1
-6AB2
-6AB5
-6ABE
-6AC8
-6AC9
-6ACA
-6AD4
-6AD8
-6AF6
-6B05
-6B1D
-6B35
-6B52
-6B57
-6B6F
-6B74
-6B7A
-6B81
-6BC1
-6BDC
-6BE1
-6BEA
-6BFA
-6C1C
-6C31
-6C35
-6C37
-6C39
-6C3A
-6C3D
-6C49
-6C58
-6C5A
-6C6E
-6C75
-6C79
-6C7F
-6C9F
-6CA2
-6CAA
-6CAF
-6CB2
-6CCB
-6CCE
-6CDF
-6CEA
-6CFF
-6D02
-6D05
-6D06
-6D24
-6D26
-6D4E
-6D57
-6D5B
-6D5C
-6D71
-6D72
-6D81
-6D8F
-6D96
-6DA4
-6DA5
-6DB1
-6DB9
-6DFE
-6E02
-6E04
-6E0A
-6E0F
-6E15
-6E18
-6E29
-6E2A
-6E4F
-6E50
-6E59
-6E76
-6E7C
-6E86
-6E8B
-6E9A
-6EB5
-6EB8
-6EBB
-6ED9
-6EDA
-6EDB
-6EDD
-6EE2
-6EE8
-6EE9
-6EFA
-6F04
-6F0B
-6F0C
-6F16
-6F17
-6F24
-6F34
-6F3D
-6F44
-6F56
-6F5C
-6F74
-6F79
-6F81
-6F8A
-6F9D
-6F9F
-6FB5
-6FBB
-6FBE
-6FD3
-6FD9
-6FDA
-6FF6
-6FF8
-7003
-701E
-702C
-704B
-704D
-7050
-7054
-705C
-7067
-706C
-706F
-7075
-7077
-7079
-707E
-707F
-7081
-7089
-708B
-708F
-70A0
-70A3
-70A5
-70A6
-70A7
-70B9
-70BB
-70BC
-70BD
-70C0
-70C4
-70CC
-70D0
-70D5
-70D6
-70DF
-70F1
-70F5
-70FE
-7105
-711D
-7129
-712B
-712C
-7133
-7134
-7135
-713B
-713E
-7140
-7145
-714A
-714F
-7151
-716B
-7171
-7173
-7175
-7176
-7177
-717A
-717C
-717E
-7188
-718C
-718E
-7191
-7196
-7198
-71A2
-71A3
-71AD
-71B4
-71B7
-71BA
-71D1
-71DD
-71EB
-71F5
-71F6
-7200
-7209
-720E
-720F
-7215
-7216
-7217
-7224
-722B
-722E
-7240
-7250
-7255
-7257
-725C
-7266
-7282
-7287
-728F
-7294
-729F
-72AD
-72B2
-72CD
-72E2
-7302
-7304
-7310
-7328
-732A
-732B
-732C
-732E
-7338
-7339
-7341
-7348
-734F
-7371
-7374
-738C
-738F
-7398
-739C
-739E
-73A7
-73AA
-73BA
-73C9
-73CE
-73CF
-73D0
-73D5
-73E1
-73E2
-73E4
-73E6
-73EF
-73F3
-73F7
-73F9
-73FB
-7402
-7411
-7412
-7414
-7415
-7417
-7419
-741C
-741E
-741F
-7437
-7438
-7439
-743C
-7443
-7445
-7447
-7448
-7449
-7453
-7456
-745D
-7460
-7465
-7468
-746B
-746C
-7474
-7476
-747A
-7482
-748C
-748D
-7499
-749B
-74A4
-74B4
-74B9
-74C8
-74CC
-74D0
-74D3
-74E7
-74F0
-74F1
-74F2
-74F8
-7505
-750E
-7519
-751E
-7534
-7535
-753B
-7542
-7546
-754A
-754D
-7551
-7553
-7555
-7560
-7567
-756D
-756E
-7572
-757A
-7583
-758D
-758E
-7592
-759E
-75B1
-75B4
-75C3
-75C8
-75DC
-7602
-7607
-762C
-763B
-7640
-764D
-764E
-764F
-7651
-7654
-7666
-7667
-766F
-7673
-7674
-7676
-767A
-7690
-76A1
-76A5
-76B7
-76CC
-76D6
-76D9
-770C
-770E
-770F
-771E
-7724
-7726
-772B
-7740
-7743
-7758
-7772
-7777
-7778
-777A
-777B
-7793
-7798
-77AF
-77B9
-77BE
-77C3
-77C5
-77CB
-77DD
-77E6
-77F4
-77FE
-7808
-7818
-781C
-781E
-7839
-783C
-783D
-7842
-7844
-7847
-784B
-7851
-7853
-7854
-7866
-787A
-7881
-7888
-788D
-78AF
-78B1
-78B6
-78B8
-78B9
-78C7
-78D2
-78D3
-78D7
-78D8
-78E4
-78EE
-78F0
-78F1
-78F5
-7906
-792E
-7932
-7933
-7934
-7936
-793B
-793C
-7958
-7959
-7962
-7971
-797E
-7980
-7983
-7986
-7987
-7991
-7999
-799D
-799F
-79A5
-79A9
-79C4
-79C6
-79CC
-79D4
-79E2
-79F1
-79F4
-7A06
-7A2A
-7A2D
-7A3A
-7A3E
-7A43
-7A45
-7A49
-7A65
-7A7D
-7A83
-7A91
-7A93
-7AB0
-7ABB
-7ABC
-7AC2
-7AC3
-7AC8
-7AC9
-7ACF
-7AD3
-7ADA
-7ADB
-7ADC
-7ADD
-7AE2
-7AE7
-7AE9
-7AEA
-7AFE
-7B0B
-7B0C
-7B14
-7B1F
-7B27
-7B29
-7B39
-7B42
-7B43
-7B55
-7B62
-7B6C
-7B6F
-7B7B
-7B92
-7BA2
-7BA3
-7BB2
-7BCF
-7BD0
-7BEC
-7BFA
-7BFC
-7C12
-7C15
-7C1B
-7C35
-7C42
-7C44
-7C51
-7C56
-7C5D
-7C6D
-7C70
-7C74
-7C7B
-7C7C
-7C7E
-7C83
-7C86
-7C8E
-7C9C
-7CA6
-7CA7
-7CAC
-7CAE
-7CB8
-7CC2
-7CC3
-7CC7
-7CC9
-7CCD
-7CD3
-7CDA
-7CE6
-7CED
-7CF3
-7CF5
-7CF9
-7CFC
-7D25
-7D4D
-7D5A
-7D5D
-7D89
-7D8B
-7D97
-7DA4
-7DA8
-7DAB
-7DB3
-7DCD
-7DCF
-7DD0
-7DD3
-7DD4
-7DDC
-7DE4
-7DE5
-7DF5
-7DFD
-7DFE
-7E07
-7E27
-7E5B
-7E65
-7E67
-7E6C
-7E6E
-7E7F
-7E8E
-7E92
-7E9F
-7EA4
-7EAC
-7EBA
-7EC7
-7ECF
-7EDF
-7F06
-7F37
-7F40
-7F41
-7F47
-7F49
-7F4E
-7F52
-7F53
-7F71
-7F78
-7F8F
-7F93
-7F97
-7FA3
-7FAE
-7FB4
-7FDD
-7FE7
-7FFA
-8002
-8008
-801D
-8020
-8025
-802E
-802F
-8031
-803B
-803C
-8054
-805B
-8061
-8062
-8063
-8066
-8080
-809F
-80A7
-80B6
-80B7
-80BC
-80BD
-80C6
-80E9
-80EC
-80F6
-8103
-8107
-8109
-810C
-810E
-8112
-8114
-8117
-811A
-812A
-8132
-8134
-8137
-8142
-8148
-8156
-8159
-815A
-816D
-817C
-8184
-8193
-81A5
-81AA
-81B6
-81C1
-81C8
-81E4
-81EF
-81F6
-8218
-821A
-8226
-8229
-822D
-823E
-8254
-8262
-8265
-8276
-8279
-827A
-827B
-8287
-82A6
-82AA
-82BF
-82C4
-82CA
-82CF
-82D0
-82D8
-82E2
-82EE
-82F7
-82F8
-82FC
-82FD
-82FF
-830B
-8318
-831A
-831D
-833D
-8357
-8362
-8363
-8366
-836F
-8385
-8391
-839C
-83AC
-83B9
-83BE
-83CD
-83D3
-83ED
-8405
-8414
-8416
-8418
-841C
-8420
-8421
-8424
-8426
-842E
-843E
-8448
-844A
-8453
-8455
-8458
-845C
-8462
-8464
-8471
-8472
-847F
-8480
-8488
-8492
-8493
-8496
-84A3
-84AD
-84BD
-84BE
-84DA
-84DE
-84E1
-84E2
-84E4
-84E5
-84F8
-8503
-8505
-8510
-8533
-8534
-8538
-8542
-854B
-854C
-8552
-855A
-855F
-856F
-8570
-8573
-8597
-85C1
-85D6
-85E0
-85EE
-85FC
-8602
-860D
-860F
-8610
-8614
-8616
-8628
-862F
-8642
-8645
-866C
-8672
-867E
-8692
-86A0
-86AD
-86B2
-86EF
-8770
-8771
-877D
-8786
-878B
-878C
-87A5
-87A9
-87B1
-87C1
-87CE
-87D6
-87DA
-87EE
-87F5
-8804
-880F
-8818
-8827
-882D
-8842
-8845
-8846
-884F
-885E
-8860
-8864
-8865
-886E
-8884
-8887
-888F
-8890
-889C
-88A0
-88AE
-88B4
-88B5
-88BF
-88C5
-88C7
-88CF
-88E6
-88F5
-88FF
-8900
-8924
-8943
-8947
-894D
-8954
-8965
-8977
-8980
-8987
-8989
-898A
-8991
-8994
-89A5
-89A7
-89A9
-89BC
-89C1
-89C6
-89E7
-8A1C
-8A29
-8A2B
-8A38
-8A3D
-8A49
-8A67
-8A7E
-8A90
-8A94
-8A9C
-8AA9
-8AAF
-8AB4
-8ADA
-8AEA
-8B0C
-8B1F
-8B2D
-8B3F
-8B43
-8B4C
-8B4D
-8B5E
-8B62
-8B69
-8B81
-8B83
-8B90
-8B9B
-8BA0
-8BBE
-8BE2
-8C51
-8C9B
-8C9F
-8CAD
-8CCD
-8CD4
-8CD6
-8CDB
-8CE9
-8CEB
-8CF2
-8CF7
-8D03
-8D0B
-8D0C
-8D11
-8D12
-8D18
-8D1C
-8D1D
-8D7A
-8D82
-8DA6
-8DA9
-8DC0
-8DC3
-8DD4
-8E01
-8E0E
-8E28
-8E2A
-8E2D
-8E3A
-8E46
-8E4F
-8E68
-8E71
-8E75
-8E77
-8E7E
-8E80
-8EA7
-8EAD
-8EB0
-8EB6
-8EB9
-8EBC
-8EC3
-8ECE
-8EDA
-8EE2
-8EE4
-8EED
-8EF2
-8F19
-8F2D
-8F30
-8F41
-8F4A
-8F5C
-8F66
-8F67
-8F6E
-8F93
-8FA0
-8FA5
-8FA7
-8FB3
-8FB5
-8FB6
-8FB7
-8FB8
-8FB9
-8FBA
-8FBB
-8FBC
-8FBE
-8FC1
-8FCA
-8FCC
-8FCF
-8FD0
-8FDA
-8FF9
-9008
-9012
-9033
-9037
-904C
-9056
-9061
-9064
-906C
-90A8
-90AE
-90BB
-90C4
-9151
-9159
-915C
-915E
-9167
-9170
-9176
-917C
-918C
-918E
-91A9
-91B6
-91BB
-91C4
-91D6
-91DF
-91E5
-91F6
-91FA
-91FE
-9208
-920E
-9213
-9221
-9228
-922A
-922B
-9235
-923C
-9241
-9244
-9255
-9258
-925D
-925F
-9262
-926B
-926E
-9277
-9281
-9284
-9289
-928F
-92AE
-92B1
-92B9
-92BA
-92BE
-92BF
-92D4
-92DB
-92E3
-92E5
-92EB
-92EC
-92F2
-92F3
-92F4
-92F6
-92FD
-9303
-9307
-932C
-9330
-9331
-9340
-9341
-9342
-9343
-9344
-9345
-9348
-935F
-9362
-9366
-9368
-9369
-936B
-936E
-9373
-9374
-9378
-937D
-9381
-9384
-9385
-9386
-9387
-9390
-939C
-93A0
-93AD
-93B8
-93BB
-93BD
-93BF
-93C6
-93CB
-93D3
-93DB
-93E0
-93F0
-93F1
-93F3
-93F4
-9401
-9404
-9408
-9417
-941B
-941D
-9424
-9425
-9426
-9427
-942D
-943E
-9442
-9443
-944D
-9454
-9458
-945B
-9465
-9467
-946C
-9479
-947B
-9485
-949F
-94A2
-94C1
-94C3
-94DC
-94F6
-952D
-9547
-9578
-957F
-9585
-9596
-9597
-9599
-95A0
-95A2
-95A6
-95A7
-95AA
-95E8
-95F4
-961D
-9633
-9638
-9641
-9645
-9656
-9669
-967B
-9681
-968F
-9696
-96A3
-96A5
-96B6
-96BD
-96F4
-9703
-971B
-9721
-9731
-9736
-9740
-9741
-9751
-9755
-9757
-975D
-975F
-976D
-9771
-9787
-9789
-979B
-979F
-97B1
-97B2
-97B4
-97B8
-97BA
-97BD
-97BE
-97C0
-97C2
-97C8
-97D2
-97E0
-97E6
-97EE
-97F2
-97F5
-9814
-9815
-981F
-9823
-982E
-9833
-9834
-9847
-984B
-9866
-9868
-986C
-9875
-98B4
-98B7
-98B9
-98C3
-98C7
-98C8
-98CA
-98CE
-98DC
-98DE
-98E0
-98E1
-98E6
-98EC
-98F1
-98F5
-990E
-9919
-991C
-9937
-9938
-9939
-993B
-9940
-9942
-994A
-994D
-995D
-9962
-9963
-999B
-99A4
-99AA
-99B8
-99BC
-99C4
-99C5
-99DA
-99E0
-99E1
-99E6
-99F5
-9A0C
-9A10
-9A1F
-9A21
-9A26
-9A2F
-9A3B
-9A3C
-9A58
-9A5C
-9A63
-9A6C
-9A8F
-9AB2
-9AB6
-9ABA
-9ABD
-9AD7
-9AE0
-9AE2
-9AF4
-9AFF
-9B02
-9B09
-9B0F
-9B14
-9B2A
-9B2D
-9B34
-9B39
-9B40
-9B50
-9B69
-9B7F
-9B81
-9B83
-9B8B
-9B8D
-9B8E
-9B8F
-9B97
-9B9D
-9B9F
-9BB0
-9BCF
-9BDD
-9BE9
-9BED
-9BF1
-9BF4
-9BFF
-9C02
-9C0A
-9C0C
-9C10
-9C15
-9C1B
-9C1F
-9C20
-9C26
-9C2F
-9C35
-9C3A
-9C45
-9C4F
-9C53
-9C5D
-9C72
-9C7B
-9C7C
-9D02
-9D0C
-9D16
-9D21
-9D34
-9D39
-9D44
-9D49
-9D4E
-9D50
-9D5E
-9D6D
-9D6E
-9D7C
-9D7E
-9D83
-9D93
-9DA5
-9DAB
-9DBD
-9DC0
-9DC4
-9DC9
-9DD4
-9DFC
-9E0A
-9E0C
-9E0E
-9E18
-9E1C
-9E1F
-9E7B
-9E81
-9E84
-9E85
-9E90
-9E95
-9E96
-9E98
-9E9E
-9EA2
-9EA6
-9EA8
-9EAA
-9EAB
-9EAC
-9EAF
-9EB1
-9EBD
-9EBF
-9EC1
-9EC4
-9EC6
-9EC7
-9EE2
-9EF1
-9EF8
-9EFE
-9F02
-9F08
-9F17
-9F26
-9F27
-9F39
-9F44
-9F45
-9F50
-9F53
-9F5A
-9F62
-9F69
-9F7F
-9F8E
-9F99
-9F9F
-9FA5
-20547
+# +# fontconfig/fc-lang/zh_hk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese Hong Kong Supplementary Character Set (ZH-HK) +# +# Taken from the HKSCS-2001, including only the non-PUA BMP glyphs +# as encoded in ISO/IEC 10646-1:2000 +4E04 +4E1A +4E1C +4E21 +4E24 +4E28 +4E2A +4E2C +4E2F +4E36 +4E37 +4E3D +4E3F +4E49 +4E5A +4E5B +4E6A +4E78 +4E80 +4E81 +4E85 +4E87 +4E89 +4E98 +4E9A +4EA0 +4EA3 +4EB7 +4EBB +4EBC +4EBF +4ECE +4EEA +4EEB +4EEE +4EF8 +4F03 +4F17 +4F1A +4F28 +4F29 +4F32 +4F37 +4F39 +4F42 +4F45 +4F4B +4F72 +4F8A +4FA2 +4FA8 +4FAB +4FB0 +4FBD +4FC8 +4FCC +4FE4 +4FE5 +4FF0 +4FF2 +4FF9 +4FFD +5003 +5008 +502E +5034 +503B +5056 +5058 +5066 +506C +5081 +5088 +5090 +50A6 +50BC +50CD +50D0 +50D9 +50DF +50E1 +50F4 +50FC +5101 +510D +510E +512B +5156 +5160 +516A +5174 +5179 +5182 +5186 +5188 +5196 +519A +519C +51A7 +51A8 +51AB +51AE +51B2 +51B3 +51B4 +51B5 +51B8 +51C3 +51C7 +51C9 +51CF +51D1 +51D2 +51D3 +51DB +51DF +51E2 +51E4 +51ED +51F4 +51FC +51FE +5202 +5205 +520B +521F +5220 +5226 +5227 +5234 +523C +5257 +5259 +5260 +5268 +5273 +5279 +528F +5290 +5294 +529A +52A1 +52A4 +52A8 +52B5 +52B9 +52C5 +52CC +52D0 +52D1 +52E0 +52E1 +52F9 +5301 +5324 +5327 +532C +5332 +5333 +5338 +533B +5342 +534E +535D +535F +5364 +5367 +5369 +536D +5374 +537D +537E +5393 +53A0 +53A2 +53A6 +53A8 +53A9 +53AA +53AB +53AE +53B0 +53B6 +53C1 +53C2 +53C5 +53CC +53D0 +53D1 +53D2 +53D8 +53D9 +53DA +53E0 +53F6 +53F7 +53FE +5413 +5414 +5416 +541A +5421 +5423 +542F +5432 +5434 +544B +544D +5469 +546A +546D +5485 +548F +5493 +5494 +5497 +549C +549E +54A3 +54A4 +54B2 +54B4 +54B9 +54CB +54CC +54CD +54D0 +54DA +54E3 +54EF +5502 +550D +5513 +5518 +551E +5523 +5525 +5528 +552B +553F +5547 +5549 +5553 +555D +5569 +556B +5571 +5572 +5573 +5579 +5586 +5590 +55A9 +55B0 +55B4 +55B9 +55BA +55BC +55C1 +55D7 +55D8 +55DE +55EA +55EC +55F0 +55F1 +55F5 +55FB +5605 +5611 +561E +5620 +5621 +5622 +5623 +5625 +562D +5637 +5643 +564D +564F +5650 +5652 +5654 +565D +5661 +567A +567B +567C +5689 +568A +568B +5692 +569E +569F +56A1 +56A4 +56AF +56B1 +56B9 +56BF +56D6 +56E2 +56ED +56EF +56F1 +56FD +5700 +5715 +571D +5732 +573D +573F +5742 +5743 +5746 +5754 +5757 +575B +575F +5767 +577A +577E +577F +5788 +578A +578D +5790 +579C +57A1 +57A7 +57AA +57B4 +57BB +57BE +57C4 +57C8 +57D7 +57DD +57DE +57E6 +57EF +57FE +5803 +5812 +5822 +5826 +583A +5840 +5844 +5847 +585C +585F +5869 +586C +5872 +5873 +5892 +5899 +589A +58A7 +58AA +58B0 +58B5 +58B6 +58BB +58CB +58D0 +58DC +58E0 +58F0 +58F2 +58F3 +58FB +5902 +5904 +5905 +5907 +590A +5911 +591F +5932 +5934 +5965 +5975 +5989 +5994 +599A +599F +59AC +59B0 +59B7 +59B8 +59C4 +59C9 +59D9 +59EB +59EF +59F0 +59F8 +59F9 +5A02 +5A0B +5A0D +5A12 +5A1A +5A21 +5A24 +5A27 +5A2A +5A2B +5A2C +5A3D +5A45 +5A54 +5A59 +5A61 +5A63 +5A68 +5A6B +5A6E +5A71 +5A79 +5A7E +5A81 +5A82 +5A86 +5A88 +5A91 +5A96 +5A99 +5AA0 +5AA1 +5AAB +5AC3 +5ACE +5ACF +5AD3 +5AE4 +5AF0 +5AF2 +5AFA +5AFE +5B0D +5B11 +5B15 +5B1F +5B2B +5B41 +5B44 +5B46 +5B4A +5B4F +5B66 +5B68 +5B6D +5B74 +5B76 +5B7C +5B80 +5B82 +5B90 +5B96 +5B9D +5B9E +5B9F +5BAA +5BC3 +5BD5 +5BD7 +5BF3 +5BFF +5C05 +5C13 +5C14 +5C1C +5C1E +5C20 +5C23 +5C49 +5C4A +5C53 +5C5E +5C85 +5C99 +5C9A +5C9C +5C9E +5CBA +5CC1 +5CC2 +5CD1 +5CE5 +5CE9 +5CEF +5CF5 +5D10 +5D15 +5D18 +5D2C +5D2F +5D3E +5D46 +5D48 +5D56 +5D57 +5D5B +5D70 +5D74 +5D7B +5D85 +5D8B +5D8E +5DA4 +5DAB +5DB6 +5DB9 +5DC1 +5DD7 +5DDB +5DF5 +5E09 +5E0B +5E12 +5E2E +5E42 +5E48 +5E5E +5E7A +5E7F +5E83 +5E86 +5E92 +5E99 +5EBD +5ECD +5ED0 +5EF4 +5EF8 +5EF9 +5EFB +5EFC +5F0C +5F0D +5F0E +5F25 +5F3A +5F4D +5F50 +5F51 +5F5C +5F61 +5F63 +5F72 +5F7B +5F83 +5FA4 +5FA7 +5FB1 +5FBA +5FC2 +5FC4 +5FDB +5FDF +6023 +6031 +603B +604A +6052 +6075 +6077 +607E +609E +60A4 +60A7 +60B3 +60D7 +60DE +60E3 +60E7 +60E8 +60E9 +60FD +6107 +610C +6119 +6122 +6130 +613D +6142 +6150 +6159 +615C +6160 +6164 +616F +617D +6181 +6187 +6195 +6198 +6199 +619C +61B7 +61B9 +61C0 +61CF +61D0 +61D3 +61DA +61E2 +622C +6237 +6239 +624C +6268 +6282 +6285 +6290 +629D +62A4 +62A6 +62C3 +62C5 +62D5 +62DF +62E5 +6318 +632E +6331 +6335 +6337 +6364 +636C +6379 +637F +638B +63B9 +63C1 +63D1 +63DE +63E2 +63E6 +63F8 +63FB +63FC +63FE +6407 +6432 +6438 +643A +643B +645A +6471 +647C +648D +6491 +64AF +64B4 +64B6 +64C0 +64D3 +64DD +64E1 +64E5 +64E7 +64EA +650A +6511 +651E +651F +6530 +6534 +6535 +654D +655F +656B +656D +6585 +6586 +6588 +6589 +658B +65B5 +65BE +65D1 +65D4 +65E0 +65E3 +65FF +6618 +661E +6623 +6630 +6644 +6648 +664B +6653 +6657 +6663 +6667 +666B +6673 +667D +6685 +668E +6692 +669A +66A4 +66AD +66B3 +66B6 +66BF +66CD +66CE +66F1 +6702 +670C +670E +6716 +6719 +671E +6725 +6736 +6744 +6761 +6762 +6767 +676B +678F +67A0 +67A4 +67AC +67B1 +67BF +67D6 +67D7 +67F9 +67FE +6800 +6801 +6802 +6803 +6804 +680D +6810 +681B +681E +6822 +6836 +6837 +683E +6847 +684A +6855 +6856 +685D +6865 +6884 +6888 +6898 +68A6 +68B6 +68B9 +68BD +68C3 +68C5 +68CA +6900 +6901 +6902 +6903 +6909 +6918 +6919 +691A +691B +692C +6936 +693E +6943 +6946 +6955 +6961 +6964 +6967 +6972 +6973 +6980 +6985 +698A +6998 +699F +69A2 +69B2 +69C0 +69D1 +69D5 +69D6 +69E1 +69E9 +69F9 +69FA +6A03 +6A0B +6A0C +6A1A +6A1C +6A2B +6A2C +6A2D +6A33 +6A43 +6A45 +6A4C +6A52 +6A53 +6A57 +6A63 +6A65 +6A71 +6A74 +6A7A +6A82 +6A8A +6A8F +6A99 +6A9D +6AA7 +6AAB +6AB1 +6AB2 +6AB5 +6ABE +6AC8 +6AC9 +6ACA +6AD4 +6AD8 +6AF6 +6B05 +6B1D +6B35 +6B52 +6B57 +6B6F +6B74 +6B7A +6B81 +6BC1 +6BDC +6BE1 +6BEA +6BFA +6C1C +6C31 +6C35 +6C37 +6C39 +6C3A +6C3D +6C49 +6C58 +6C5A +6C6E +6C75 +6C79 +6C7F +6C9F +6CA2 +6CAA +6CAF +6CB2 +6CCB +6CCE +6CDF +6CEA +6CFF +6D02 +6D05 +6D06 +6D24 +6D26 +6D4E +6D57 +6D5B +6D5C +6D71 +6D72 +6D81 +6D8F +6D96 +6DA4 +6DA5 +6DB1 +6DB9 +6DFE +6E02 +6E04 +6E0A +6E0F +6E15 +6E18 +6E29 +6E2A +6E4F +6E50 +6E59 +6E76 +6E7C +6E86 +6E8B +6E9A +6EB5 +6EB8 +6EBB +6ED9 +6EDA +6EDB +6EDD +6EE2 +6EE8 +6EE9 +6EFA +6F04 +6F0B +6F0C +6F16 +6F17 +6F24 +6F34 +6F3D +6F44 +6F56 +6F5C +6F74 +6F79 +6F81 +6F8A +6F9D +6F9F +6FB5 +6FBB +6FBE +6FD3 +6FD9 +6FDA +6FF6 +6FF8 +7003 +701E +702C +704B +704D +7050 +7054 +705C +7067 +706C +706F +7075 +7077 +7079 +707E +707F +7081 +7089 +708B +708F +70A0 +70A3 +70A5 +70A6 +70A7 +70B9 +70BB +70BC +70BD +70C0 +70C4 +70CC +70D0 +70D5 +70D6 +70DF +70F1 +70F5 +70FE +7105 +711D +7129 +712B +712C +7133 +7134 +7135 +713B +713E +7140 +7145 +714A +714F +7151 +716B +7171 +7173 +7175 +7176 +7177 +717A +717C +717E +7188 +718C +718E +7191 +7196 +7198 +71A2 +71A3 +71AD +71B4 +71B7 +71BA +71D1 +71DD +71EB +71F5 +71F6 +7200 +7209 +720E +720F +7215 +7216 +7217 +7224 +722B +722E +7240 +7250 +7255 +7257 +725C +7266 +7282 +7287 +728F +7294 +729F +72AD +72B2 +72CD +72E2 +7302 +7304 +7310 +7328 +732A +732B +732C +732E +7338 +7339 +7341 +7348 +734F +7371 +7374 +738C +738F +7398 +739C +739E +73A7 +73AA +73BA +73C9 +73CE +73CF +73D0 +73D5 +73E1 +73E2 +73E4 +73E6 +73EF +73F3 +73F7 +73F9 +73FB +7402 +7411 +7412 +7414 +7415 +7417 +7419 +741C +741E +741F +7437 +7438 +7439 +743C +7443 +7445 +7447 +7448 +7449 +7453 +7456 +745D +7460 +7465 +7468 +746B +746C +7474 +7476 +747A +7482 +748C +748D +7499 +749B +74A4 +74B4 +74B9 +74C8 +74CC +74D0 +74D3 +74E7 +74F0 +74F1 +74F2 +74F8 +7505 +750E +7519 +751E +7534 +7535 +753B +7542 +7546 +754A +754D +7551 +7553 +7555 +7560 +7567 +756D +756E +7572 +757A +7583 +758D +758E +7592 +759E +75B1 +75B4 +75C3 +75C8 +75DC +7602 +7607 +762C +763B +7640 +764D +764E +764F +7651 +7654 +7666 +7667 +766F +7673 +7674 +7676 +767A +7690 +76A1 +76A5 +76B7 +76CC +76D6 +76D9 +770C +770E +770F +771E +7724 +7726 +772B +7740 +7743 +7758 +7772 +7777 +7778 +777A +777B +7793 +7798 +77AF +77B9 +77BE +77C3 +77C5 +77CB +77DD +77E6 +77F4 +77FE +7808 +7818 +781C +781E +7839 +783C +783D +7842 +7844 +7847 +784B +7851 +7853 +7854 +7866 +787A +7881 +7888 +788D +78AF +78B1 +78B6 +78B8 +78B9 +78C7 +78D2 +78D3 +78D7 +78D8 +78E4 +78EE +78F0 +78F1 +78F5 +7906 +792E +7932 +7933 +7934 +7936 +793B +793C +7958 +7959 +7962 +7971 +797E +7980 +7983 +7986 +7987 +7991 +7999 +799D +799F +79A5 +79A9 +79C4 +79C6 +79CC +79D4 +79E2 +79F1 +79F4 +7A06 +7A2A +7A2D +7A3A +7A3E +7A43 +7A45 +7A49 +7A65 +7A7D +7A83 +7A91 +7A93 +7AB0 +7ABB +7ABC +7AC2 +7AC3 +7AC8 +7AC9 +7ACF +7AD3 +7ADA +7ADB +7ADC +7ADD +7AE2 +7AE7 +7AE9 +7AEA +7AFE +7B0B +7B0C +7B14 +7B1F +7B27 +7B29 +7B39 +7B42 +7B43 +7B55 +7B62 +7B6C +7B6F +7B7B +7B92 +7BA2 +7BA3 +7BB2 +7BCF +7BD0 +7BEC +7BFA +7BFC +7C12 +7C15 +7C1B +7C35 +7C42 +7C44 +7C51 +7C56 +7C5D +7C6D +7C70 +7C74 +7C7B +7C7C +7C7E +7C83 +7C86 +7C8E +7C9C +7CA6 +7CA7 +7CAC +7CAE +7CB8 +7CC2 +7CC3 +7CC7 +7CC9 +7CCD +7CD3 +7CDA +7CE6 +7CED +7CF3 +7CF5 +7CF9 +7CFC +7D25 +7D4D +7D5A +7D5D +7D89 +7D8B +7D97 +7DA4 +7DA8 +7DAB +7DB3 +7DCD +7DCF +7DD0 +7DD3 +7DD4 +7DDC +7DE4 +7DE5 +7DF5 +7DFD +7DFE +7E07 +7E27 +7E5B +7E65 +7E67 +7E6C +7E6E +7E7F +7E8E +7E92 +7E9F +7EA4 +7EAC +7EBA +7EC7 +7ECF +7EDF +7F06 +7F37 +7F40 +7F41 +7F47 +7F49 +7F4E +7F52 +7F53 +7F71 +7F78 +7F8F +7F93 +7F97 +7FA3 +7FAE +7FB4 +7FDD +7FE7 +7FFA +8002 +8008 +801D +8020 +8025 +802E +802F +8031 +803B +803C +8054 +805B +8061 +8062 +8063 +8066 +8080 +809F +80A7 +80B6 +80B7 +80BC +80BD +80C6 +80E9 +80EC +80F6 +8103 +8107 +8109 +810C +810E +8112 +8114 +8117 +811A +812A +8132 +8134 +8137 +8142 +8148 +8156 +8159 +815A +816D +817C +8184 +8193 +81A5 +81AA +81B6 +81C1 +81C8 +81E4 +81EF +81F6 +8218 +821A +8226 +8229 +822D +823E +8254 +8262 +8265 +8276 +8279 +827A +827B +8287 +82A6 +82AA +82BF +82C4 +82CA +82CF +82D0 +82D8 +82E2 +82EE +82F7 +82F8 +82FC +82FD +82FF +830B +8318 +831A +831D +833D +8357 +8362 +8363 +8366 +836F +8385 +8391 +839C +83AC +83B9 +83BE +83CD +83D3 +83ED +8405 +8414 +8416 +8418 +841C +8420 +8421 +8424 +8426 +842E +843E +8448 +844A +8453 +8455 +8458 +845C +8462 +8464 +8471 +8472 +847F +8480 +8488 +8492 +8493 +8496 +84A3 +84AD +84BD +84BE +84DA +84DE +84E1 +84E2 +84E4 +84E5 +84F8 +8503 +8505 +8510 +8533 +8534 +8538 +8542 +854B +854C +8552 +855A +855F +856F +8570 +8573 +8597 +85C1 +85D6 +85E0 +85EE +85FC +8602 +860D +860F +8610 +8614 +8616 +8628 +862F +8642 +8645 +866C +8672 +867E +8692 +86A0 +86AD +86B2 +86EF +8770 +8771 +877D +8786 +878B +878C +87A5 +87A9 +87B1 +87C1 +87CE +87D6 +87DA +87EE +87F5 +8804 +880F +8818 +8827 +882D +8842 +8845 +8846 +884F +885E +8860 +8864 +8865 +886E +8884 +8887 +888F +8890 +889C +88A0 +88AE +88B4 +88B5 +88BF +88C5 +88C7 +88CF +88E6 +88F5 +88FF +8900 +8924 +8943 +8947 +894D +8954 +8965 +8977 +8980 +8987 +8989 +898A +8991 +8994 +89A5 +89A7 +89A9 +89BC +89C1 +89C6 +89E7 +8A1C +8A29 +8A2B +8A38 +8A3D +8A49 +8A67 +8A7E +8A90 +8A94 +8A9C +8AA9 +8AAF +8AB4 +8ADA +8AEA +8B0C +8B1F +8B2D +8B3F +8B43 +8B4C +8B4D +8B5E +8B62 +8B69 +8B81 +8B83 +8B90 +8B9B +8BA0 +8BBE +8BE2 +8C51 +8C9B +8C9F +8CAD +8CCD +8CD4 +8CD6 +8CDB +8CE9 +8CEB +8CF2 +8CF7 +8D03 +8D0B +8D0C +8D11 +8D12 +8D18 +8D1C +8D1D +8D7A +8D82 +8DA6 +8DA9 +8DC0 +8DC3 +8DD4 +8E01 +8E0E +8E28 +8E2A +8E2D +8E3A +8E46 +8E4F +8E68 +8E71 +8E75 +8E77 +8E7E +8E80 +8EA7 +8EAD +8EB0 +8EB6 +8EB9 +8EBC +8EC3 +8ECE +8EDA +8EE2 +8EE4 +8EED +8EF2 +8F19 +8F2D +8F30 +8F41 +8F4A +8F5C +8F66 +8F67 +8F6E +8F93 +8FA0 +8FA5 +8FA7 +8FB3 +8FB5 +8FB6 +8FB7 +8FB8 +8FB9 +8FBA +8FBB +8FBC +8FBE +8FC1 +8FCA +8FCC +8FCF +8FD0 +8FDA +8FF9 +9008 +9012 +9033 +9037 +904C +9056 +9061 +9064 +906C +90A8 +90AE +90BB +90C4 +9151 +9159 +915C +915E +9167 +9170 +9176 +917C +918C +918E +91A9 +91B6 +91BB +91C4 +91D6 +91DF +91E5 +91F6 +91FA +91FE +9208 +920E +9213 +9221 +9228 +922A +922B +9235 +923C +9241 +9244 +9255 +9258 +925D +925F +9262 +926B +926E +9277 +9281 +9284 +9289 +928F +92AE +92B1 +92B9 +92BA +92BE +92BF +92D4 +92DB +92E3 +92E5 +92EB +92EC +92F2 +92F3 +92F4 +92F6 +92FD +9303 +9307 +932C +9330 +9331 +9340 +9341 +9342 +9343 +9344 +9345 +9348 +935F +9362 +9366 +9368 +9369 +936B +936E +9373 +9374 +9378 +937D +9381 +9384 +9385 +9386 +9387 +9390 +939C +93A0 +93AD +93B8 +93BB +93BD +93BF +93C6 +93CB +93D3 +93DB +93E0 +93F0 +93F1 +93F3 +93F4 +9401 +9404 +9408 +9417 +941B +941D +9424 +9425 +9426 +9427 +942D +943E +9442 +9443 +944D +9454 +9458 +945B +9465 +9467 +946C +9479 +947B +9485 +949F +94A2 +94C1 +94C3 +94DC +94F6 +952D +9547 +9578 +957F +9585 +9596 +9597 +9599 +95A0 +95A2 +95A6 +95A7 +95AA +95E8 +95F4 +961D +9633 +9638 +9641 +9645 +9656 +9669 +967B +9681 +968F +9696 +96A3 +96A5 +96B6 +96BD +96F4 +9703 +971B +9721 +9731 +9736 +9740 +9741 +9751 +9755 +9757 +975D +975F +976D +9771 +9787 +9789 +979B +979F +97B1 +97B2 +97B4 +97B8 +97BA +97BD +97BE +97C0 +97C2 +97C8 +97D2 +97E0 +97E6 +97EE +97F2 +97F5 +9814 +9815 +981F +9823 +982E +9833 +9834 +9847 +984B +9866 +9868 +986C +9875 +98B4 +98B7 +98B9 +98C3 +98C7 +98C8 +98CA +98CE +98DC +98DE +98E0 +98E1 +98E6 +98EC +98F1 +98F5 +990E +9919 +991C +9937 +9938 +9939 +993B +9940 +9942 +994A +994D +995D +9962 +9963 +999B +99A4 +99AA +99B8 +99BC +99C4 +99C5 +99DA +99E0 +99E1 +99E6 +99F5 +9A0C +9A10 +9A1F +9A21 +9A26 +9A2F +9A3B +9A3C +9A58 +9A5C +9A63 +9A6C +9A8F +9AB2 +9AB6 +9ABA +9ABD +9AD7 +9AE0 +9AE2 +9AF4 +9AFF +9B02 +9B09 +9B0F +9B14 +9B2A +9B2D +9B34 +9B39 +9B40 +9B50 +9B69 +9B7F +9B81 +9B83 +9B8B +9B8D +9B8E +9B8F +9B97 +9B9D +9B9F +9BB0 +9BCF +9BDD +9BE9 +9BED +9BF1 +9BF4 +9BFF +9C02 +9C0A +9C0C +9C10 +9C15 +9C1B +9C1F +9C20 +9C26 +9C2F +9C35 +9C3A +9C45 +9C4F +9C53 +9C5D +9C72 +9C7B +9C7C +9D02 +9D0C +9D16 +9D21 +9D34 +9D39 +9D44 +9D49 +9D4E +9D50 +9D5E +9D6D +9D6E +9D7C +9D7E +9D83 +9D93 +9DA5 +9DAB +9DBD +9DC0 +9DC4 +9DC9 +9DD4 +9DFC +9E0A +9E0C +9E0E +9E18 +9E1C +9E1F +9E7B +9E81 +9E84 +9E85 +9E90 +9E95 +9E96 +9E98 +9E9E +9EA2 +9EA6 +9EA8 +9EAA +9EAB +9EAC +9EAF +9EB1 +9EBD +9EBF +9EC1 +9EC4 +9EC6 +9EC7 +9EE2 +9EF1 +9EF8 +9EFE +9F02 +9F08 +9F17 +9F26 +9F27 +9F39 +9F44 +9F45 +9F50 +9F53 +9F5A +9F62 +9F69 +9F7F +9F8E +9F99 +9F9F +9FA5 +20547 diff --git a/fontconfig/fc-lang/zh_mo.orth b/fontconfig/fc-lang/zh_mo.orth index 1b68dc0e8..ae086f9d8 100644 --- a/fontconfig/fc-lang/zh_mo.orth +++ b/fontconfig/fc-lang/zh_mo.orth @@ -1,32 +1,32 @@ -#
-# fontconfig/fc-lang/zh_mo.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese in Macau (ZH-MO)
-#
-# from Abel Cheung:
-#
-# a majority of Macau people speak Cantonese too, and also uses additional
-# traditional Chinese chars from Hong Kong (there are already some place names
-# that can't be represented in just chars used in Taiwan).
-#
-include zh_hk.orth
+# +# fontconfig/fc-lang/zh_mo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese in Macau (ZH-MO) +# +# from Abel Cheung: +# +# a majority of Macau people speak Cantonese too, and also uses additional +# traditional Chinese chars from Hong Kong (there are already some place names +# that can't be represented in just chars used in Taiwan). +# +include zh_hk.orth diff --git a/fontconfig/fc-lang/zh_sg.orth b/fontconfig/fc-lang/zh_sg.orth index e69c38023..354e2a4b8 100644 --- a/fontconfig/fc-lang/zh_sg.orth +++ b/fontconfig/fc-lang/zh_sg.orth @@ -1,27 +1,27 @@ -#
-# fontconfig/fc-lang/zh_sg.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese in Singapore (ZH-SG)
-#
-# Just use GB2312 as for ZH-CN
-include zh_cn.orth
+# +# fontconfig/fc-lang/zh_sg.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese in Singapore (ZH-SG) +# +# Just use GB2312 as for ZH-CN +include zh_cn.orth diff --git a/fontconfig/fc-lang/zh_tw.orth b/fontconfig/fc-lang/zh_tw.orth index 8b88b03ce..844745342 100644 --- a/fontconfig/fc-lang/zh_tw.orth +++ b/fontconfig/fc-lang/zh_tw.orth @@ -1,13105 +1,13105 @@ -#
-# fontconfig/fc-lang/zh_tw.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Chinese (traditional) ZH-TW
-#
-# Made by trimming the Big5 -> unicode mapping down to just Chinese glyphs
-#
-#0x3000 # ideographic space
-#0x3001 # ideographic comma
-#0x3002 # ideographic full stop
-#0x3003 # ditto mark
-#0x3005 # ideographic iteration mark
-#0x3021 # Suzhou numeral 1
-#0x3022 # Suzhou numeral 2
-#0x3023 # Suzhou numeral 3
-#0x3024 # Suzhou numeral 4
-#0x3025 # Suzhou numeral 5
-#0x3026 # Suzhou numeral 6
-#0x3027 # Suzhou numeral 7
-#0x3028 # Suzhou numeral 8
-#0x3029 # Suzhou numeral 9
-# Han
-0x4E00
-0x4E01
-0x4E03
-0x4E07
-0x4E08
-0x4E09
-0x4E0A
-0x4E0B
-0x4E0C
-0x4E0D
-0x4E0E
-0x4E0F
-0x4E10
-0x4E11
-0x4E14
-0x4E15
-0x4E16
-0x4E18
-0x4E19
-0x4E1E
-0x4E1F
-0x4E26
-0x4E2B
-0x4E2D
-0x4E2E
-0x4E30
-0x4E31
-0x4E32
-0x4E33
-0x4E38
-0x4E39
-0x4E3B
-0x4E3C
-0x4E42
-0x4E43
-0x4E45
-0x4E47
-0x4E48
-0x4E4B
-0x4E4D
-0x4E4E
-0x4E4F
-0x4E52
-0x4E53
-0x4E56
-0x4E58
-0x4E59
-0x4E5C
-0x4E5D
-0x4E5E
-0x4E5F
-0x4E69
-0x4E73
-0x4E7E
-0x4E7F
-0x4E82
-0x4E83
-0x4E84
-0x4E86
-0x4E88
-0x4E8B
-0x4E8C
-0x4E8D
-0x4E8E
-0x4E91
-0x4E92
-0x4E93
-0x4E94
-0x4E95
-0x4E99
-0x4E9B
-0x4E9E
-0x4E9F
-0x4EA1
-0x4EA2
-0x4EA4
-0x4EA5
-0x4EA6
-0x4EA8
-0x4EAB
-0x4EAC
-0x4EAD
-0x4EAE
-0x4EB3
-0x4EB6
-0x4EB9
-0x4EBA
-0x4EC0
-0x4EC1
-0x4EC2
-0x4EC3
-0x4EC4
-0x4EC6
-0x4EC7
-0x4EC8
-0x4EC9
-0x4ECA
-0x4ECB
-0x4ECD
-0x4ED4
-0x4ED5
-0x4ED6
-0x4ED7
-0x4ED8
-0x4ED9
-0x4EDA
-0x4EDC
-0x4EDD
-0x4EDE
-0x4EDF
-0x4EE1
-0x4EE3
-0x4EE4
-0x4EE5
-0x4EE8
-0x4EE9
-0x4EF0
-0x4EF1
-0x4EF2
-0x4EF3
-0x4EF4
-0x4EF5
-0x4EF6
-0x4EF7
-0x4EFB
-0x4EFD
-0x4EFF
-0x4F00
-0x4F01
-0x4F02
-0x4F04
-0x4F05
-0x4F08
-0x4F09
-0x4F0A
-0x4F0B
-0x4F0D
-0x4F0E
-0x4F0F
-0x4F10
-0x4F11
-0x4F12
-0x4F13
-0x4F14
-0x4F15
-0x4F18
-0x4F19
-0x4F1D
-0x4F22
-0x4F2C
-0x4F2D
-0x4F2F
-0x4F30
-0x4F33
-0x4F34
-0x4F36
-0x4F38
-0x4F3A
-0x4F3B
-0x4F3C
-0x4F3D
-0x4F3E
-0x4F3F
-0x4F41
-0x4F43
-0x4F46
-0x4F47
-0x4F48
-0x4F49
-0x4F4C
-0x4F4D
-0x4F4E
-0x4F4F
-0x4F50
-0x4F51
-0x4F52
-0x4F53
-0x4F54
-0x4F55
-0x4F56
-0x4F57
-0x4F58
-0x4F59
-0x4F5A
-0x4F5B
-0x4F5C
-0x4F5D
-0x4F5E
-0x4F5F
-0x4F60
-0x4F61
-0x4F62
-0x4F63
-0x4F64
-0x4F67
-0x4F69
-0x4F6A
-0x4F6B
-0x4F6C
-0x4F6E
-0x4F6F
-0x4F70
-0x4F73
-0x4F74
-0x4F75
-0x4F76
-0x4F77
-0x4F78
-0x4F79
-0x4F7A
-0x4F7B
-0x4F7C
-0x4F7D
-0x4F7E
-0x4F7F
-0x4F80
-0x4F81
-0x4F82
-0x4F83
-0x4F84
-0x4F85
-0x4F86
-0x4F87
-0x4F88
-0x4F89
-0x4F8B
-0x4F8D
-0x4F8F
-0x4F90
-0x4F91
-0x4F92
-0x4F94
-0x4F95
-0x4F96
-0x4F97
-0x4F98
-0x4F9A
-0x4F9B
-0x4F9C
-0x4F9D
-0x4F9E
-0x4FAE
-0x4FAF
-0x4FB2
-0x4FB3
-0x4FB5
-0x4FB6
-0x4FB7
-0x4FB9
-0x4FBA
-0x4FBB
-0x4FBF
-0x4FC0
-0x4FC1
-0x4FC2
-0x4FC3
-0x4FC4
-0x4FC5
-0x4FC7
-0x4FC9
-0x4FCA
-0x4FCB
-0x4FCD
-0x4FCE
-0x4FCF
-0x4FD0
-0x4FD1
-0x4FD3
-0x4FD4
-0x4FD6
-0x4FD7
-0x4FD8
-0x4FD9
-0x4FDA
-0x4FDB
-0x4FDC
-0x4FDD
-0x4FDE
-0x4FDF
-0x4FE0
-0x4FE1
-0x4FEC
-0x4FEE
-0x4FEF
-0x4FF1
-0x4FF3
-0x4FF4
-0x4FF5
-0x4FF6
-0x4FF7
-0x4FF8
-0x4FFA
-0x4FFE
-0x5000
-0x5005
-0x5006
-0x5007
-0x5009
-0x500B
-0x500C
-0x500D
-0x500E
-0x500F
-0x5011
-0x5012
-0x5013
-0x5014
-0x5015
-0x5016
-0x5017
-0x5018
-0x5019
-0x501A
-0x501B
-0x501C
-0x501E
-0x501F
-0x5020
-0x5021
-0x5022
-0x5023
-0x5025
-0x5026
-0x5027
-0x5028
-0x5029
-0x502A
-0x502B
-0x502C
-0x502D
-0x502F
-0x5030
-0x5031
-0x5033
-0x5035
-0x5037
-0x503C
-0x5040
-0x5041
-0x5043
-0x5045
-0x5046
-0x5047
-0x5048
-0x5049
-0x504A
-0x504B
-0x504C
-0x504D
-0x504E
-0x504F
-0x5051
-0x5053
-0x5055
-0x5057
-0x505A
-0x505B
-0x505C
-0x505D
-0x505E
-0x505F
-0x5060
-0x5061
-0x5062
-0x5063
-0x5064
-0x5065
-0x5068
-0x5069
-0x506A
-0x506B
-0x506D
-0x506E
-0x506F
-0x5070
-0x5072
-0x5073
-0x5074
-0x5075
-0x5076
-0x5077
-0x507A
-0x507D
-0x5080
-0x5082
-0x5083
-0x5085
-0x5087
-0x508B
-0x508C
-0x508D
-0x508E
-0x5091
-0x5092
-0x5094
-0x5095
-0x5096
-0x5098
-0x5099
-0x509A
-0x509B
-0x509C
-0x509D
-0x509E
-0x50A2
-0x50A3
-0x50AC
-0x50AD
-0x50AE
-0x50AF
-0x50B0
-0x50B1
-0x50B2
-0x50B3
-0x50B4
-0x50B5
-0x50B6
-0x50B7
-0x50B8
-0x50BA
-0x50BB
-0x50BD
-0x50BE
-0x50BF
-0x50C1
-0x50C2
-0x50C4
-0x50C5
-0x50C6
-0x50C7
-0x50C8
-0x50C9
-0x50CA
-0x50CB
-0x50CE
-0x50CF
-0x50D1
-0x50D3
-0x50D4
-0x50D5
-0x50D6
-0x50D7
-0x50DA
-0x50DB
-0x50DD
-0x50E0
-0x50E3
-0x50E4
-0x50E5
-0x50E6
-0x50E7
-0x50E8
-0x50E9
-0x50EA
-0x50EC
-0x50ED
-0x50EE
-0x50EF
-0x50F0
-0x50F1
-0x50F3
-0x50F5
-0x50F6
-0x50F8
-0x50F9
-0x50FB
-0x50FD
-0x50FE
-0x50FF
-0x5100
-0x5102
-0x5103
-0x5104
-0x5105
-0x5106
-0x5107
-0x5108
-0x5109
-0x510A
-0x510B
-0x510C
-0x5110
-0x5111
-0x5112
-0x5113
-0x5114
-0x5115
-0x5117
-0x5118
-0x511A
-0x511C
-0x511F
-0x5120
-0x5121
-0x5122
-0x5124
-0x5125
-0x5126
-0x5129
-0x512A
-0x512D
-0x512E
-0x5130
-0x5131
-0x5132
-0x5133
-0x5134
-0x5135
-0x5137
-0x5138
-0x5139
-0x513A
-0x513B
-0x513C
-0x513D
-0x513F
-0x5140
-0x5141
-0x5143
-0x5144
-0x5145
-0x5146
-0x5147
-0x5148
-0x5149
-0x514B
-0x514C
-0x514D
-0x5152
-0x5154
-0x5155
-0x5157
-0x5159
-0x515A
-0x515B
-0x515C
-0x515D
-0x515E
-0x515F
-0x5161
-0x5162
-0x5163
-0x5165
-0x5167
-0x5168
-0x5169
-0x516B
-0x516C
-0x516D
-0x516E
-0x5171
-0x5175
-0x5176
-0x5177
-0x5178
-0x517C
-0x5180
-0x5187
-0x5189
-0x518A
-0x518D
-0x518F
-0x5191
-0x5192
-0x5193
-0x5194
-0x5195
-0x5197
-0x5198
-0x519E
-0x51A0
-0x51A2
-0x51A4
-0x51A5
-0x51AA
-0x51AC
-0x51B0
-0x51B1
-0x51B6
-0x51B7
-0x51B9
-0x51BC
-0x51BD
-0x51BE
-0x51C4
-0x51C5
-0x51C6
-0x51C8
-0x51CA
-0x51CB
-0x51CC
-0x51CD
-0x51CE
-0x51D0
-0x51D4
-0x51D7
-0x51D8
-0x51DC
-0x51DD
-0x51DE
-0x51E0
-0x51E1
-0x51F0
-0x51F1
-0x51F3
-0x51F5
-0x51F6
-0x51F8
-0x51F9
-0x51FA
-0x51FD
-0x5200
-0x5201
-0x5203
-0x5206
-0x5207
-0x5208
-0x5209
-0x520A
-0x520C
-0x520E
-0x5210
-0x5211
-0x5212
-0x5213
-0x5216
-0x5217
-0x521C
-0x521D
-0x521E
-0x5221
-0x5224
-0x5225
-0x5228
-0x5229
-0x522A
-0x522E
-0x5230
-0x5231
-0x5232
-0x5233
-0x5235
-0x5236
-0x5237
-0x5238
-0x523A
-0x523B
-0x5241
-0x5243
-0x5244
-0x5246
-0x5247
-0x5249
-0x524A
-0x524B
-0x524C
-0x524D
-0x524E
-0x5252
-0x5254
-0x5255
-0x5256
-0x525A
-0x525B
-0x525C
-0x525D
-0x525E
-0x525F
-0x5261
-0x5262
-0x5269
-0x526A
-0x526B
-0x526C
-0x526D
-0x526E
-0x526F
-0x5272
-0x5274
-0x5275
-0x5277
-0x5278
-0x527A
-0x527B
-0x527C
-0x527D
-0x527F
-0x5280
-0x5281
-0x5282
-0x5283
-0x5284
-0x5287
-0x5288
-0x5289
-0x528A
-0x528B
-0x528C
-0x528D
-0x5291
-0x5293
-0x5296
-0x5297
-0x5298
-0x5299
-0x529B
-0x529F
-0x52A0
-0x52A3
-0x52A6
-0x52A9
-0x52AA
-0x52AB
-0x52AC
-0x52AD
-0x52AE
-0x52BB
-0x52BC
-0x52BE
-0x52C0
-0x52C1
-0x52C2
-0x52C3
-0x52C7
-0x52C9
-0x52CD
-0x52D2
-0x52D3
-0x52D5
-0x52D6
-0x52D7
-0x52D8
-0x52D9
-0x52DB
-0x52DD
-0x52DE
-0x52DF
-0x52E2
-0x52E3
-0x52E4
-0x52E6
-0x52E9
-0x52EB
-0x52EF
-0x52F0
-0x52F1
-0x52F3
-0x52F4
-0x52F5
-0x52F7
-0x52F8
-0x52FA
-0x52FB
-0x52FC
-0x52FE
-0x52FF
-0x5305
-0x5306
-0x5308
-0x5309
-0x530A
-0x530B
-0x530D
-0x530E
-0x530F
-0x5310
-0x5311
-0x5312
-0x5315
-0x5316
-0x5317
-0x5319
-0x531A
-0x531C
-0x531D
-0x531F
-0x5320
-0x5321
-0x5322
-0x5323
-0x532A
-0x532D
-0x532F
-0x5330
-0x5331
-0x5334
-0x5337
-0x5339
-0x533C
-0x533D
-0x533E
-0x533F
-0x5340
-0x5341
-0x5343
-0x5344
-0x5345
-0x5347
-0x5348
-0x5349
-0x534A
-0x534C
-0x534D
-0x5351
-0x5352
-0x5353
-0x5354
-0x5357
-0x535A
-0x535C
-0x535E
-0x5360
-0x5361
-0x5363
-0x5366
-0x536C
-0x536E
-0x536F
-0x5370
-0x5371
-0x5372
-0x5373
-0x5375
-0x5377
-0x5378
-0x5379
-0x537B
-0x537C
-0x537F
-0x5382
-0x5384
-0x538A
-0x538E
-0x538F
-0x5392
-0x5394
-0x5396
-0x5397
-0x5398
-0x5399
-0x539A
-0x539C
-0x539D
-0x539E
-0x539F
-0x53A4
-0x53A5
-0x53A7
-0x53AC
-0x53AD
-0x53B2
-0x53B4
-0x53B9
-0x53BB
-0x53C3
-0x53C8
-0x53C9
-0x53CA
-0x53CB
-0x53CD
-0x53D4
-0x53D6
-0x53D7
-0x53DB
-0x53DF
-0x53E1
-0x53E2
-0x53E3
-0x53E4
-0x53E5
-0x53E6
-0x53E8
-0x53E9
-0x53EA
-0x53EB
-0x53EC
-0x53ED
-0x53EE
-0x53EF
-0x53F0
-0x53F1
-0x53F2
-0x53F3
-0x53F5
-0x53F8
-0x53FB
-0x53FC
-0x5401
-0x5403
-0x5404
-0x5406
-0x5407
-0x5408
-0x5409
-0x540A
-0x540B
-0x540C
-0x540D
-0x540E
-0x540F
-0x5410
-0x5411
-0x5412
-0x5418
-0x5419
-0x541B
-0x541C
-0x541D
-0x541E
-0x541F
-0x5420
-0x5424
-0x5425
-0x5426
-0x5427
-0x5428
-0x5429
-0x542A
-0x542B
-0x542C
-0x542D
-0x542E
-0x5430
-0x5431
-0x5433
-0x5435
-0x5436
-0x5437
-0x5438
-0x5439
-0x543B
-0x543C
-0x543D
-0x543E
-0x5440
-0x5441
-0x5442
-0x5443
-0x5445
-0x5446
-0x5447
-0x5448
-0x544A
-0x544E
-0x544F
-0x5454
-0x5460
-0x5461
-0x5462
-0x5463
-0x5464
-0x5465
-0x5466
-0x5467
-0x5468
-0x546B
-0x546C
-0x546F
-0x5470
-0x5471
-0x5472
-0x5473
-0x5474
-0x5475
-0x5476
-0x5477
-0x5478
-0x547A
-0x547B
-0x547C
-0x547D
-0x547E
-0x547F
-0x5480
-0x5481
-0x5482
-0x5484
-0x5486
-0x5487
-0x5488
-0x548B
-0x548C
-0x548D
-0x548E
-0x5490
-0x5491
-0x5492
-0x5495
-0x5496
-0x5498
-0x549A
-0x54A0
-0x54A1
-0x54A2
-0x54A5
-0x54A6
-0x54A7
-0x54A8
-0x54A9
-0x54AA
-0x54AB
-0x54AC
-0x54AD
-0x54AE
-0x54AF
-0x54B0
-0x54B1
-0x54B3
-0x54B6
-0x54B7
-0x54B8
-0x54BA
-0x54BB
-0x54BC
-0x54BD
-0x54BE
-0x54BF
-0x54C0
-0x54C1
-0x54C2
-0x54C3
-0x54C4
-0x54C5
-0x54C6
-0x54C7
-0x54C8
-0x54C9
-0x54CE
-0x54CF
-0x54D6
-0x54DE
-0x54E0
-0x54E1
-0x54E2
-0x54E4
-0x54E5
-0x54E6
-0x54E7
-0x54E8
-0x54E9
-0x54EA
-0x54EB
-0x54ED
-0x54EE
-0x54F1
-0x54F2
-0x54F3
-0x54F7
-0x54F8
-0x54FA
-0x54FB
-0x54FC
-0x54FD
-0x54FF
-0x5501
-0x5503
-0x5504
-0x5505
-0x5506
-0x5507
-0x5508
-0x5509
-0x550A
-0x550B
-0x550C
-0x550E
-0x550F
-0x5510
-0x5511
-0x5512
-0x5514
-0x5517
-0x551A
-0x5526
-0x5527
-0x552A
-0x552C
-0x552D
-0x552E
-0x552F
-0x5530
-0x5531
-0x5532
-0x5533
-0x5534
-0x5535
-0x5536
-0x5537
-0x5538
-0x5539
-0x553B
-0x553C
-0x553E
-0x5540
-0x5541
-0x5543
-0x5544
-0x5545
-0x5546
-0x5548
-0x554A
-0x554B
-0x554D
-0x554E
-0x554F
-0x5550
-0x5551
-0x5552
-0x5555
-0x5556
-0x5557
-0x555C
-0x555E
-0x555F
-0x5561
-0x5562
-0x5563
-0x5564
-0x5565
-0x5566
-0x556A
-0x5575
-0x5576
-0x5577
-0x557B
-0x557C
-0x557D
-0x557E
-0x557F
-0x5580
-0x5581
-0x5582
-0x5583
-0x5584
-0x5587
-0x5588
-0x5589
-0x558A
-0x558B
-0x558C
-0x558D
-0x558E
-0x558F
-0x5591
-0x5592
-0x5593
-0x5594
-0x5595
-0x5598
-0x5599
-0x559A
-0x559C
-0x559D
-0x559F
-0x55A1
-0x55A2
-0x55A3
-0x55A4
-0x55A5
-0x55A6
-0x55A7
-0x55A8
-0x55AA
-0x55AB
-0x55AC
-0x55AD
-0x55AE
-0x55B1
-0x55B2
-0x55B3
-0x55B5
-0x55BB
-0x55BF
-0x55C0
-0x55C2
-0x55C3
-0x55C4
-0x55C5
-0x55C6
-0x55C7
-0x55C8
-0x55C9
-0x55CA
-0x55CB
-0x55CC
-0x55CD
-0x55CE
-0x55CF
-0x55D0
-0x55D1
-0x55D2
-0x55D3
-0x55D4
-0x55D5
-0x55D6
-0x55D9
-0x55DA
-0x55DB
-0x55DC
-0x55DD
-0x55DF
-0x55E1
-0x55E2
-0x55E3
-0x55E4
-0x55E5
-0x55E6
-0x55E7
-0x55E8
-0x55E9
-0x55EF
-0x55F2
-0x55F6
-0x55F7
-0x55F9
-0x55FA
-0x55FC
-0x55FD
-0x55FE
-0x55FF
-0x5600
-0x5601
-0x5602
-0x5604
-0x5606
-0x5608
-0x5609
-0x560C
-0x560D
-0x560E
-0x560F
-0x5610
-0x5612
-0x5613
-0x5614
-0x5615
-0x5616
-0x5617
-0x561B
-0x561C
-0x561D
-0x561F
-0x5627
-0x5629
-0x562A
-0x562C
-0x562E
-0x562F
-0x5630
-0x5632
-0x5633
-0x5634
-0x5635
-0x5636
-0x5638
-0x5639
-0x563A
-0x563B
-0x563D
-0x563E
-0x563F
-0x5640
-0x5641
-0x5642
-0x5645
-0x5646
-0x5648
-0x5649
-0x564A
-0x564C
-0x564E
-0x5653
-0x5657
-0x5658
-0x5659
-0x565A
-0x565E
-0x5660
-0x5662
-0x5663
-0x5664
-0x5665
-0x5666
-0x5668
-0x5669
-0x566A
-0x566B
-0x566C
-0x566D
-0x566E
-0x566F
-0x5670
-0x5671
-0x5672
-0x5673
-0x5674
-0x5676
-0x5677
-0x5678
-0x5679
-0x567E
-0x567F
-0x5680
-0x5681
-0x5682
-0x5683
-0x5684
-0x5685
-0x5686
-0x5687
-0x568C
-0x568D
-0x568E
-0x568F
-0x5690
-0x5693
-0x5695
-0x5697
-0x5698
-0x5699
-0x569A
-0x569C
-0x569D
-0x56A5
-0x56A6
-0x56A7
-0x56A8
-0x56AA
-0x56AB
-0x56AC
-0x56AD
-0x56AE
-0x56B2
-0x56B3
-0x56B4
-0x56B5
-0x56B6
-0x56B7
-0x56BC
-0x56BD
-0x56BE
-0x56C0
-0x56C1
-0x56C2
-0x56C3
-0x56C5
-0x56C6
-0x56C8
-0x56C9
-0x56CA
-0x56CB
-0x56CC
-0x56CD
-0x56D1
-0x56D3
-0x56D4
-0x56D7
-0x56DA
-0x56DB
-0x56DD
-0x56DE
-0x56DF
-0x56E0
-0x56E1
-0x56E4
-0x56E5
-0x56E7
-0x56EA
-0x56EB
-0x56EE
-0x56F0
-0x56F7
-0x56F9
-0x56FA
-0x56FF
-0x5701
-0x5702
-0x5703
-0x5704
-0x5707
-0x5708
-0x5709
-0x570A
-0x570B
-0x570C
-0x570D
-0x5712
-0x5713
-0x5714
-0x5716
-0x5718
-0x571A
-0x571B
-0x571C
-0x571E
-0x571F
-0x5720
-0x5722
-0x5723
-0x5728
-0x5729
-0x572A
-0x572C
-0x572D
-0x572E
-0x572F
-0x5730
-0x5733
-0x5734
-0x573B
-0x573E
-0x5740
-0x5741
-0x5745
-0x5747
-0x5749
-0x574A
-0x574B
-0x574C
-0x574D
-0x574E
-0x574F
-0x5750
-0x5751
-0x5752
-0x5761
-0x5762
-0x5764
-0x5766
-0x5768
-0x5769
-0x576A
-0x576B
-0x576D
-0x576F
-0x5770
-0x5771
-0x5772
-0x5773
-0x5774
-0x5775
-0x5776
-0x5777
-0x577B
-0x577C
-0x577D
-0x5780
-0x5782
-0x5783
-0x578B
-0x578C
-0x578F
-0x5793
-0x5794
-0x5795
-0x5797
-0x5798
-0x5799
-0x579A
-0x579B
-0x579D
-0x579E
-0x579F
-0x57A0
-0x57A2
-0x57A3
-0x57A4
-0x57A5
-0x57AE
-0x57B5
-0x57B6
-0x57B8
-0x57B9
-0x57BA
-0x57BC
-0x57BD
-0x57BF
-0x57C1
-0x57C2
-0x57C3
-0x57C6
-0x57C7
-0x57CB
-0x57CC
-0x57CE
-0x57CF
-0x57D0
-0x57D2
-0x57D4
-0x57D5
-0x57DC
-0x57DF
-0x57E0
-0x57E1
-0x57E2
-0x57E3
-0x57E4
-0x57E5
-0x57E7
-0x57E9
-0x57EC
-0x57ED
-0x57EE
-0x57F0
-0x57F1
-0x57F2
-0x57F3
-0x57F4
-0x57F5
-0x57F6
-0x57F7
-0x57F8
-0x57F9
-0x57FA
-0x57FB
-0x57FC
-0x57FD
-0x5800
-0x5801
-0x5802
-0x5804
-0x5805
-0x5806
-0x5807
-0x5808
-0x5809
-0x580A
-0x580B
-0x580C
-0x580D
-0x580E
-0x5810
-0x5814
-0x5819
-0x581B
-0x581C
-0x581D
-0x581E
-0x5820
-0x5821
-0x5823
-0x5824
-0x5825
-0x5827
-0x5828
-0x5829
-0x582A
-0x582C
-0x582D
-0x582E
-0x582F
-0x5830
-0x5831
-0x5832
-0x5833
-0x5834
-0x5835
-0x5836
-0x5837
-0x5838
-0x5839
-0x583B
-0x583D
-0x583F
-0x5848
-0x5849
-0x584A
-0x584B
-0x584C
-0x584D
-0x584E
-0x584F
-0x5851
-0x5852
-0x5853
-0x5854
-0x5855
-0x5857
-0x5858
-0x5859
-0x585A
-0x585B
-0x585D
-0x585E
-0x5862
-0x5863
-0x5864
-0x5865
-0x5868
-0x586B
-0x586D
-0x586F
-0x5871
-0x5874
-0x5875
-0x5876
-0x5879
-0x587A
-0x587B
-0x587C
-0x587D
-0x587E
-0x587F
-0x5880
-0x5881
-0x5882
-0x5883
-0x5885
-0x5886
-0x5887
-0x5888
-0x5889
-0x588A
-0x588B
-0x588E
-0x588F
-0x5890
-0x5891
-0x5893
-0x5894
-0x5898
-0x589C
-0x589D
-0x589E
-0x589F
-0x58A0
-0x58A1
-0x58A3
-0x58A5
-0x58A6
-0x58A8
-0x58A9
-0x58AB
-0x58AC
-0x58AE
-0x58AF
-0x58B1
-0x58B3
-0x58BA
-0x58BC
-0x58BD
-0x58BE
-0x58BF
-0x58C1
-0x58C2
-0x58C5
-0x58C6
-0x58C7
-0x58C8
-0x58C9
-0x58CE
-0x58CF
-0x58D1
-0x58D2
-0x58D3
-0x58D4
-0x58D5
-0x58D6
-0x58D8
-0x58D9
-0x58DA
-0x58DB
-0x58DD
-0x58DE
-0x58DF
-0x58E2
-0x58E3
-0x58E4
-0x58E7
-0x58E8
-0x58E9
-0x58EB
-0x58EC
-0x58EF
-0x58F4
-0x58F9
-0x58FA
-0x58FC
-0x58FD
-0x58FE
-0x58FF
-0x5903
-0x5906
-0x590C
-0x590D
-0x590E
-0x590F
-0x5912
-0x5914
-0x5915
-0x5916
-0x5917
-0x5919
-0x591A
-0x591C
-0x5920
-0x5922
-0x5924
-0x5925
-0x5927
-0x5929
-0x592A
-0x592B
-0x592C
-0x592D
-0x592E
-0x592F
-0x5931
-0x5937
-0x5938
-0x593C
-0x593E
-0x5940
-0x5944
-0x5945
-0x5947
-0x5948
-0x5949
-0x594A
-0x594E
-0x594F
-0x5950
-0x5951
-0x5953
-0x5954
-0x5955
-0x5957
-0x5958
-0x595A
-0x595C
-0x5960
-0x5961
-0x5962
-0x5967
-0x5969
-0x596A
-0x596B
-0x596D
-0x596E
-0x5970
-0x5971
-0x5972
-0x5973
-0x5974
-0x5976
-0x5977
-0x5978
-0x5979
-0x597B
-0x597C
-0x597D
-0x597E
-0x597F
-0x5980
-0x5981
-0x5982
-0x5983
-0x5984
-0x5985
-0x598A
-0x598D
-0x598E
-0x598F
-0x5990
-0x5992
-0x5993
-0x5996
-0x5997
-0x5998
-0x5999
-0x599D
-0x599E
-0x59A0
-0x59A1
-0x59A2
-0x59A3
-0x59A4
-0x59A5
-0x59A6
-0x59A7
-0x59A8
-0x59AE
-0x59AF
-0x59B1
-0x59B2
-0x59B3
-0x59B4
-0x59B5
-0x59B6
-0x59B9
-0x59BA
-0x59BB
-0x59BC
-0x59BD
-0x59BE
-0x59C0
-0x59C1
-0x59C3
-0x59C5
-0x59C6
-0x59C7
-0x59C8
-0x59CA
-0x59CB
-0x59CC
-0x59CD
-0x59CE
-0x59CF
-0x59D0
-0x59D1
-0x59D2
-0x59D3
-0x59D4
-0x59D6
-0x59D8
-0x59DA
-0x59DB
-0x59DC
-0x59DD
-0x59DE
-0x59E0
-0x59E1
-0x59E3
-0x59E4
-0x59E5
-0x59E6
-0x59E8
-0x59E9
-0x59EA
-0x59EC
-0x59ED
-0x59EE
-0x59F1
-0x59F2
-0x59F3
-0x59F4
-0x59F5
-0x59F6
-0x59F7
-0x59FA
-0x59FB
-0x59FC
-0x59FD
-0x59FE
-0x59FF
-0x5A00
-0x5A01
-0x5A03
-0x5A09
-0x5A0A
-0x5A0C
-0x5A0F
-0x5A11
-0x5A13
-0x5A15
-0x5A16
-0x5A17
-0x5A18
-0x5A19
-0x5A1B
-0x5A1C
-0x5A1E
-0x5A1F
-0x5A20
-0x5A23
-0x5A25
-0x5A29
-0x5A2D
-0x5A2E
-0x5A33
-0x5A35
-0x5A36
-0x5A37
-0x5A38
-0x5A39
-0x5A3C
-0x5A3E
-0x5A40
-0x5A41
-0x5A42
-0x5A43
-0x5A44
-0x5A46
-0x5A47
-0x5A48
-0x5A49
-0x5A4A
-0x5A4C
-0x5A4D
-0x5A50
-0x5A51
-0x5A52
-0x5A53
-0x5A55
-0x5A56
-0x5A57
-0x5A58
-0x5A5A
-0x5A5B
-0x5A5C
-0x5A5D
-0x5A5E
-0x5A5F
-0x5A60
-0x5A62
-0x5A64
-0x5A65
-0x5A66
-0x5A67
-0x5A69
-0x5A6A
-0x5A6C
-0x5A6D
-0x5A70
-0x5A77
-0x5A78
-0x5A7A
-0x5A7B
-0x5A7C
-0x5A7D
-0x5A7F
-0x5A83
-0x5A84
-0x5A8A
-0x5A8B
-0x5A8C
-0x5A8E
-0x5A8F
-0x5A90
-0x5A92
-0x5A93
-0x5A94
-0x5A95
-0x5A97
-0x5A9A
-0x5A9B
-0x5A9C
-0x5A9D
-0x5A9E
-0x5A9F
-0x5AA2
-0x5AA5
-0x5AA6
-0x5AA7
-0x5AA9
-0x5AAC
-0x5AAE
-0x5AAF
-0x5AB0
-0x5AB1
-0x5AB2
-0x5AB3
-0x5AB4
-0x5AB5
-0x5AB6
-0x5AB7
-0x5AB8
-0x5AB9
-0x5ABA
-0x5ABB
-0x5ABC
-0x5ABD
-0x5ABE
-0x5ABF
-0x5AC0
-0x5AC1
-0x5AC2
-0x5AC4
-0x5AC6
-0x5AC7
-0x5AC8
-0x5AC9
-0x5ACA
-0x5ACB
-0x5ACC
-0x5ACD
-0x5AD5
-0x5AD6
-0x5AD7
-0x5AD8
-0x5AD9
-0x5ADA
-0x5ADB
-0x5ADC
-0x5ADD
-0x5ADE
-0x5ADF
-0x5AE0
-0x5AE1
-0x5AE2
-0x5AE3
-0x5AE5
-0x5AE6
-0x5AE8
-0x5AE9
-0x5AEA
-0x5AEB
-0x5AEC
-0x5AED
-0x5AEE
-0x5AF3
-0x5AF4
-0x5AF5
-0x5AF6
-0x5AF7
-0x5AF8
-0x5AF9
-0x5AFB
-0x5AFD
-0x5AFF
-0x5B01
-0x5B02
-0x5B03
-0x5B05
-0x5B07
-0x5B08
-0x5B09
-0x5B0B
-0x5B0C
-0x5B0F
-0x5B10
-0x5B13
-0x5B14
-0x5B16
-0x5B17
-0x5B19
-0x5B1A
-0x5B1B
-0x5B1D
-0x5B1E
-0x5B20
-0x5B21
-0x5B23
-0x5B24
-0x5B25
-0x5B26
-0x5B27
-0x5B28
-0x5B2A
-0x5B2C
-0x5B2D
-0x5B2E
-0x5B2F
-0x5B30
-0x5B32
-0x5B34
-0x5B38
-0x5B3C
-0x5B3D
-0x5B3E
-0x5B3F
-0x5B40
-0x5B43
-0x5B45
-0x5B47
-0x5B48
-0x5B4B
-0x5B4C
-0x5B4D
-0x5B4E
-0x5B50
-0x5B51
-0x5B53
-0x5B54
-0x5B55
-0x5B56
-0x5B57
-0x5B58
-0x5B5A
-0x5B5B
-0x5B5C
-0x5B5D
-0x5B5F
-0x5B62
-0x5B63
-0x5B64
-0x5B65
-0x5B69
-0x5B6B
-0x5B6C
-0x5B6E
-0x5B70
-0x5B71
-0x5B72
-0x5B73
-0x5B75
-0x5B77
-0x5B78
-0x5B7A
-0x5B7B
-0x5B7D
-0x5B7F
-0x5B81
-0x5B83
-0x5B84
-0x5B85
-0x5B87
-0x5B88
-0x5B89
-0x5B8B
-0x5B8C
-0x5B8E
-0x5B8F
-0x5B92
-0x5B93
-0x5B95
-0x5B97
-0x5B98
-0x5B99
-0x5B9A
-0x5B9B
-0x5B9C
-0x5BA2
-0x5BA3
-0x5BA4
-0x5BA5
-0x5BA6
-0x5BA7
-0x5BA8
-0x5BAC
-0x5BAD
-0x5BAE
-0x5BB0
-0x5BB3
-0x5BB4
-0x5BB5
-0x5BB6
-0x5BB8
-0x5BB9
-0x5BBF
-0x5BC0
-0x5BC1
-0x5BC2
-0x5BC4
-0x5BC5
-0x5BC6
-0x5BC7
-0x5BCA
-0x5BCB
-0x5BCC
-0x5BCD
-0x5BCE
-0x5BD0
-0x5BD1
-0x5BD2
-0x5BD3
-0x5BD4
-0x5BD6
-0x5BD8
-0x5BD9
-0x5BDE
-0x5BDF
-0x5BE0
-0x5BE1
-0x5BE2
-0x5BE3
-0x5BE4
-0x5BE5
-0x5BE6
-0x5BE7
-0x5BE8
-0x5BE9
-0x5BEA
-0x5BEB
-0x5BEC
-0x5BEE
-0x5BEF
-0x5BF0
-0x5BF1
-0x5BF2
-0x5BF5
-0x5BF6
-0x5BF8
-0x5BFA
-0x5C01
-0x5C03
-0x5C04
-0x5C07
-0x5C08
-0x5C09
-0x5C0A
-0x5C0B
-0x5C0C
-0x5C0D
-0x5C0E
-0x5C0F
-0x5C10
-0x5C11
-0x5C12
-0x5C15
-0x5C16
-0x5C1A
-0x5C1F
-0x5C22
-0x5C24
-0x5C25
-0x5C28
-0x5C2A
-0x5C2C
-0x5C30
-0x5C31
-0x5C33
-0x5C37
-0x5C38
-0x5C39
-0x5C3A
-0x5C3B
-0x5C3C
-0x5C3E
-0x5C3F
-0x5C40
-0x5C41
-0x5C44
-0x5C45
-0x5C46
-0x5C47
-0x5C48
-0x5C4B
-0x5C4C
-0x5C4D
-0x5C4E
-0x5C4F
-0x5C50
-0x5C51
-0x5C54
-0x5C55
-0x5C56
-0x5C58
-0x5C59
-0x5C5C
-0x5C5D
-0x5C60
-0x5C62
-0x5C63
-0x5C64
-0x5C65
-0x5C67
-0x5C68
-0x5C69
-0x5C6A
-0x5C6C
-0x5C6D
-0x5C6E
-0x5C6F
-0x5C71
-0x5C73
-0x5C74
-0x5C79
-0x5C7A
-0x5C7B
-0x5C7C
-0x5C7E
-0x5C86
-0x5C88
-0x5C89
-0x5C8A
-0x5C8B
-0x5C8C
-0x5C8D
-0x5C8F
-0x5C90
-0x5C91
-0x5C92
-0x5C93
-0x5C94
-0x5C95
-0x5C9D
-0x5C9F
-0x5CA0
-0x5CA1
-0x5CA2
-0x5CA3
-0x5CA4
-0x5CA5
-0x5CA6
-0x5CA7
-0x5CA8
-0x5CA9
-0x5CAA
-0x5CAB
-0x5CAC
-0x5CAD
-0x5CAE
-0x5CAF
-0x5CB0
-0x5CB1
-0x5CB3
-0x5CB5
-0x5CB6
-0x5CB7
-0x5CB8
-0x5CC6
-0x5CC7
-0x5CC8
-0x5CC9
-0x5CCA
-0x5CCB
-0x5CCC
-0x5CCE
-0x5CCF
-0x5CD0
-0x5CD2
-0x5CD3
-0x5CD4
-0x5CD6
-0x5CD7
-0x5CD8
-0x5CD9
-0x5CDA
-0x5CDB
-0x5CDE
-0x5CDF
-0x5CE8
-0x5CEA
-0x5CEC
-0x5CED
-0x5CEE
-0x5CF0
-0x5CF1
-0x5CF4
-0x5CF6
-0x5CF7
-0x5CF8
-0x5CF9
-0x5CFB
-0x5CFD
-0x5CFF
-0x5D00
-0x5D01
-0x5D06
-0x5D07
-0x5D0B
-0x5D0C
-0x5D0D
-0x5D0E
-0x5D0F
-0x5D11
-0x5D12
-0x5D14
-0x5D16
-0x5D17
-0x5D19
-0x5D1A
-0x5D1B
-0x5D1D
-0x5D1E
-0x5D1F
-0x5D20
-0x5D22
-0x5D23
-0x5D24
-0x5D25
-0x5D26
-0x5D27
-0x5D28
-0x5D29
-0x5D2E
-0x5D30
-0x5D31
-0x5D32
-0x5D33
-0x5D34
-0x5D35
-0x5D36
-0x5D37
-0x5D38
-0x5D39
-0x5D3A
-0x5D3C
-0x5D3D
-0x5D3F
-0x5D40
-0x5D41
-0x5D42
-0x5D43
-0x5D45
-0x5D47
-0x5D49
-0x5D4A
-0x5D4B
-0x5D4C
-0x5D4E
-0x5D50
-0x5D51
-0x5D52
-0x5D55
-0x5D59
-0x5D5E
-0x5D62
-0x5D63
-0x5D65
-0x5D67
-0x5D68
-0x5D69
-0x5D6B
-0x5D6C
-0x5D6F
-0x5D71
-0x5D72
-0x5D77
-0x5D79
-0x5D7A
-0x5D7C
-0x5D7D
-0x5D7E
-0x5D7F
-0x5D80
-0x5D81
-0x5D82
-0x5D84
-0x5D86
-0x5D87
-0x5D88
-0x5D89
-0x5D8A
-0x5D8D
-0x5D92
-0x5D93
-0x5D94
-0x5D95
-0x5D97
-0x5D99
-0x5D9A
-0x5D9C
-0x5D9D
-0x5D9E
-0x5D9F
-0x5DA0
-0x5DA1
-0x5DA2
-0x5DA7
-0x5DA8
-0x5DA9
-0x5DAA
-0x5DAC
-0x5DAD
-0x5DAE
-0x5DAF
-0x5DB0
-0x5DB1
-0x5DB2
-0x5DB4
-0x5DB5
-0x5DB7
-0x5DB8
-0x5DBA
-0x5DBC
-0x5DBD
-0x5DC0
-0x5DC2
-0x5DC3
-0x5DC6
-0x5DC7
-0x5DC9
-0x5DCB
-0x5DCD
-0x5DCF
-0x5DD1
-0x5DD2
-0x5DD4
-0x5DD5
-0x5DD6
-0x5DD8
-0x5DDD
-0x5DDE
-0x5DDF
-0x5DE0
-0x5DE1
-0x5DE2
-0x5DE5
-0x5DE6
-0x5DE7
-0x5DE8
-0x5DEB
-0x5DEE
-0x5DF0
-0x5DF1
-0x5DF2
-0x5DF3
-0x5DF4
-0x5DF7
-0x5DF9
-0x5DFD
-0x5DFE
-0x5DFF
-0x5E02
-0x5E03
-0x5E04
-0x5E06
-0x5E0A
-0x5E0C
-0x5E0E
-0x5E11
-0x5E14
-0x5E15
-0x5E16
-0x5E17
-0x5E18
-0x5E19
-0x5E1A
-0x5E1B
-0x5E1D
-0x5E1F
-0x5E20
-0x5E21
-0x5E22
-0x5E23
-0x5E24
-0x5E25
-0x5E28
-0x5E29
-0x5E2B
-0x5E2D
-0x5E33
-0x5E34
-0x5E36
-0x5E37
-0x5E38
-0x5E3D
-0x5E3E
-0x5E40
-0x5E41
-0x5E43
-0x5E44
-0x5E45
-0x5E4A
-0x5E4B
-0x5E4C
-0x5E4D
-0x5E4E
-0x5E4F
-0x5E53
-0x5E54
-0x5E55
-0x5E57
-0x5E58
-0x5E59
-0x5E5B
-0x5E5C
-0x5E5D
-0x5E5F
-0x5E60
-0x5E61
-0x5E62
-0x5E63
-0x5E66
-0x5E67
-0x5E68
-0x5E69
-0x5E6A
-0x5E6B
-0x5E6C
-0x5E6D
-0x5E6E
-0x5E6F
-0x5E70
-0x5E72
-0x5E73
-0x5E74
-0x5E75
-0x5E76
-0x5E78
-0x5E79
-0x5E7B
-0x5E7C
-0x5E7D
-0x5E7E
-0x5E80
-0x5E82
-0x5E84
-0x5E87
-0x5E88
-0x5E89
-0x5E8A
-0x5E8B
-0x5E8C
-0x5E8D
-0x5E8F
-0x5E95
-0x5E96
-0x5E97
-0x5E9A
-0x5E9B
-0x5E9C
-0x5EA0
-0x5EA2
-0x5EA3
-0x5EA4
-0x5EA5
-0x5EA6
-0x5EA7
-0x5EA8
-0x5EAA
-0x5EAB
-0x5EAC
-0x5EAD
-0x5EAE
-0x5EB0
-0x5EB1
-0x5EB2
-0x5EB3
-0x5EB4
-0x5EB5
-0x5EB6
-0x5EB7
-0x5EB8
-0x5EB9
-0x5EBE
-0x5EC1
-0x5EC2
-0x5EC4
-0x5EC5
-0x5EC6
-0x5EC7
-0x5EC8
-0x5EC9
-0x5ECA
-0x5ECB
-0x5ECC
-0x5ECE
-0x5ED1
-0x5ED2
-0x5ED3
-0x5ED4
-0x5ED5
-0x5ED6
-0x5ED7
-0x5ED8
-0x5ED9
-0x5EDA
-0x5EDB
-0x5EDC
-0x5EDD
-0x5EDE
-0x5EDF
-0x5EE0
-0x5EE1
-0x5EE2
-0x5EE3
-0x5EE5
-0x5EE6
-0x5EE7
-0x5EE8
-0x5EE9
-0x5EEC
-0x5EEE
-0x5EEF
-0x5EF1
-0x5EF2
-0x5EF3
-0x5EF6
-0x5EF7
-0x5EFA
-0x5EFE
-0x5EFF
-0x5F01
-0x5F02
-0x5F04
-0x5F05
-0x5F07
-0x5F08
-0x5F0A
-0x5F0B
-0x5F0F
-0x5F12
-0x5F13
-0x5F14
-0x5F15
-0x5F17
-0x5F18
-0x5F1A
-0x5F1B
-0x5F1D
-0x5F1F
-0x5F22
-0x5F23
-0x5F24
-0x5F26
-0x5F27
-0x5F28
-0x5F29
-0x5F2D
-0x5F2E
-0x5F30
-0x5F31
-0x5F33
-0x5F35
-0x5F36
-0x5F37
-0x5F38
-0x5F3C
-0x5F40
-0x5F43
-0x5F44
-0x5F46
-0x5F48
-0x5F49
-0x5F4A
-0x5F4B
-0x5F4C
-0x5F4E
-0x5F4F
-0x5F54
-0x5F56
-0x5F57
-0x5F58
-0x5F59
-0x5F5D
-0x5F62
-0x5F64
-0x5F65
-0x5F67
-0x5F69
-0x5F6A
-0x5F6B
-0x5F6C
-0x5F6D
-0x5F6F
-0x5F70
-0x5F71
-0x5F73
-0x5F74
-0x5F76
-0x5F77
-0x5F78
-0x5F79
-0x5F7C
-0x5F7D
-0x5F7E
-0x5F7F
-0x5F80
-0x5F81
-0x5F82
-0x5F85
-0x5F86
-0x5F87
-0x5F88
-0x5F89
-0x5F8A
-0x5F8B
-0x5F8C
-0x5F90
-0x5F91
-0x5F92
-0x5F96
-0x5F97
-0x5F98
-0x5F99
-0x5F9B
-0x5F9C
-0x5F9E
-0x5F9F
-0x5FA0
-0x5FA1
-0x5FA5
-0x5FA6
-0x5FA8
-0x5FA9
-0x5FAA
-0x5FAB
-0x5FAC
-0x5FAD
-0x5FAE
-0x5FAF
-0x5FB2
-0x5FB5
-0x5FB6
-0x5FB7
-0x5FB9
-0x5FBB
-0x5FBC
-0x5FBD
-0x5FBE
-0x5FBF
-0x5FC0
-0x5FC1
-0x5FC3
-0x5FC5
-0x5FC9
-0x5FCC
-0x5FCD
-0x5FCF
-0x5FD0
-0x5FD1
-0x5FD2
-0x5FD4
-0x5FD5
-0x5FD6
-0x5FD7
-0x5FD8
-0x5FD9
-0x5FDD
-0x5FDE
-0x5FE0
-0x5FE1
-0x5FE3
-0x5FE4
-0x5FE5
-0x5FE8
-0x5FEA
-0x5FEB
-0x5FED
-0x5FEE
-0x5FEF
-0x5FF1
-0x5FF3
-0x5FF4
-0x5FF5
-0x5FF7
-0x5FF8
-0x5FFA
-0x5FFB
-0x5FFD
-0x5FFF
-0x6000
-0x6009
-0x600A
-0x600B
-0x600C
-0x600D
-0x600E
-0x600F
-0x6010
-0x6011
-0x6012
-0x6013
-0x6014
-0x6015
-0x6016
-0x6017
-0x6019
-0x601A
-0x601B
-0x601C
-0x601D
-0x601E
-0x6020
-0x6021
-0x6022
-0x6024
-0x6025
-0x6026
-0x6027
-0x6028
-0x6029
-0x602A
-0x602B
-0x602C
-0x602D
-0x602E
-0x602F
-0x6032
-0x6033
-0x6034
-0x6035
-0x6037
-0x6039
-0x6040
-0x6041
-0x6042
-0x6043
-0x6044
-0x6045
-0x6046
-0x6047
-0x6049
-0x604C
-0x604D
-0x6050
-0x6053
-0x6054
-0x6055
-0x6058
-0x6059
-0x605A
-0x605B
-0x605D
-0x605E
-0x605F
-0x6062
-0x6063
-0x6064
-0x6065
-0x6066
-0x6067
-0x6068
-0x6069
-0x606A
-0x606B
-0x606C
-0x606D
-0x606E
-0x606F
-0x6070
-0x6072
-0x607F
-0x6080
-0x6081
-0x6083
-0x6084
-0x6085
-0x6086
-0x6087
-0x6088
-0x6089
-0x608A
-0x608C
-0x608D
-0x608E
-0x6090
-0x6092
-0x6094
-0x6095
-0x6096
-0x6097
-0x609A
-0x609B
-0x609C
-0x609D
-0x609F
-0x60A0
-0x60A2
-0x60A3
-0x60A8
-0x60B0
-0x60B1
-0x60B2
-0x60B4
-0x60B5
-0x60B6
-0x60B7
-0x60B8
-0x60B9
-0x60BA
-0x60BB
-0x60BC
-0x60BD
-0x60BE
-0x60BF
-0x60C0
-0x60C1
-0x60C3
-0x60C4
-0x60C5
-0x60C6
-0x60C7
-0x60C8
-0x60C9
-0x60CA
-0x60CB
-0x60CC
-0x60CD
-0x60CE
-0x60CF
-0x60D1
-0x60D3
-0x60D4
-0x60D5
-0x60D8
-0x60D9
-0x60DA
-0x60DB
-0x60DC
-0x60DD
-0x60DF
-0x60E0
-0x60E1
-0x60E2
-0x60E4
-0x60E6
-0x60F0
-0x60F1
-0x60F2
-0x60F3
-0x60F4
-0x60F5
-0x60F6
-0x60F7
-0x60F8
-0x60F9
-0x60FA
-0x60FB
-0x60FC
-0x60FE
-0x60FF
-0x6100
-0x6101
-0x6103
-0x6104
-0x6105
-0x6106
-0x6108
-0x6109
-0x610A
-0x610B
-0x610D
-0x610E
-0x610F
-0x6110
-0x6112
-0x6113
-0x6114
-0x6115
-0x6116
-0x6118
-0x611A
-0x611B
-0x611C
-0x611D
-0x611F
-0x6123
-0x6127
-0x6128
-0x6129
-0x612B
-0x612C
-0x612E
-0x612F
-0x6132
-0x6134
-0x6136
-0x6137
-0x613B
-0x613E
-0x613F
-0x6140
-0x6141
-0x6144
-0x6145
-0x6146
-0x6147
-0x6148
-0x6149
-0x614A
-0x614B
-0x614C
-0x614D
-0x614E
-0x614F
-0x6152
-0x6153
-0x6154
-0x6155
-0x6156
-0x6158
-0x615A
-0x615B
-0x615D
-0x615E
-0x615F
-0x6161
-0x6162
-0x6163
-0x6165
-0x6166
-0x6167
-0x6168
-0x616A
-0x616B
-0x616C
-0x616E
-0x6170
-0x6171
-0x6172
-0x6173
-0x6174
-0x6175
-0x6176
-0x6177
-0x6179
-0x617A
-0x617C
-0x617E
-0x6180
-0x6182
-0x6183
-0x6189
-0x618A
-0x618B
-0x618C
-0x618D
-0x618E
-0x6190
-0x6191
-0x6192
-0x6193
-0x6194
-0x6196
-0x619A
-0x619B
-0x619D
-0x619F
-0x61A1
-0x61A2
-0x61A4
-0x61A7
-0x61A8
-0x61A9
-0x61AA
-0x61AB
-0x61AC
-0x61AD
-0x61AE
-0x61AF
-0x61B0
-0x61B1
-0x61B2
-0x61B3
-0x61B4
-0x61B5
-0x61B6
-0x61B8
-0x61BA
-0x61BC
-0x61BE
-0x61BF
-0x61C1
-0x61C2
-0x61C3
-0x61C5
-0x61C6
-0x61C7
-0x61C8
-0x61C9
-0x61CA
-0x61CB
-0x61CC
-0x61CD
-0x61D6
-0x61D8
-0x61DE
-0x61DF
-0x61E0
-0x61E3
-0x61E4
-0x61E5
-0x61E6
-0x61E7
-0x61E8
-0x61E9
-0x61EA
-0x61EB
-0x61ED
-0x61EE
-0x61F0
-0x61F1
-0x61F2
-0x61F5
-0x61F6
-0x61F7
-0x61F8
-0x61F9
-0x61FA
-0x61FB
-0x61FC
-0x61FD
-0x61FE
-0x61FF
-0x6200
-0x6201
-0x6203
-0x6204
-0x6207
-0x6208
-0x6209
-0x620A
-0x620C
-0x620D
-0x620E
-0x6210
-0x6211
-0x6212
-0x6214
-0x6215
-0x6216
-0x6219
-0x621A
-0x621B
-0x621F
-0x6220
-0x6221
-0x6222
-0x6223
-0x6224
-0x6225
-0x6227
-0x6229
-0x622A
-0x622B
-0x622D
-0x622E
-0x6230
-0x6232
-0x6233
-0x6234
-0x6236
-0x623A
-0x623D
-0x623E
-0x623F
-0x6240
-0x6241
-0x6242
-0x6243
-0x6246
-0x6247
-0x6248
-0x6249
-0x624A
-0x624B
-0x624D
-0x624E
-0x6250
-0x6251
-0x6252
-0x6253
-0x6254
-0x6258
-0x6259
-0x625A
-0x625B
-0x625C
-0x625E
-0x6260
-0x6261
-0x6262
-0x6263
-0x6264
-0x6265
-0x6266
-0x626D
-0x626E
-0x626F
-0x6270
-0x6271
-0x6272
-0x6273
-0x6274
-0x6276
-0x6277
-0x6279
-0x627A
-0x627B
-0x627C
-0x627D
-0x627E
-0x627F
-0x6280
-0x6281
-0x6283
-0x6284
-0x6286
-0x6287
-0x6288
-0x6289
-0x628A
-0x628C
-0x628E
-0x628F
-0x6291
-0x6292
-0x6293
-0x6294
-0x6295
-0x6296
-0x6297
-0x6298
-0x62A8
-0x62A9
-0x62AA
-0x62AB
-0x62AC
-0x62AD
-0x62AE
-0x62AF
-0x62B0
-0x62B1
-0x62B3
-0x62B4
-0x62B5
-0x62B6
-0x62B8
-0x62B9
-0x62BB
-0x62BC
-0x62BD
-0x62BE
-0x62BF
-0x62C2
-0x62C4
-0x62C6
-0x62C7
-0x62C8
-0x62C9
-0x62CA
-0x62CB
-0x62CC
-0x62CD
-0x62CE
-0x62CF
-0x62D0
-0x62D1
-0x62D2
-0x62D3
-0x62D4
-0x62D6
-0x62D7
-0x62D8
-0x62D9
-0x62DA
-0x62DB
-0x62DC
-0x62EB
-0x62EC
-0x62ED
-0x62EE
-0x62EF
-0x62F0
-0x62F1
-0x62F2
-0x62F3
-0x62F4
-0x62F5
-0x62F6
-0x62F7
-0x62F8
-0x62F9
-0x62FA
-0x62FB
-0x62FC
-0x62FD
-0x62FE
-0x62FF
-0x6300
-0x6301
-0x6302
-0x6303
-0x6307
-0x6308
-0x6309
-0x630B
-0x630C
-0x630D
-0x630E
-0x630F
-0x6310
-0x6311
-0x6313
-0x6314
-0x6315
-0x6316
-0x6328
-0x6329
-0x632A
-0x632B
-0x632C
-0x632D
-0x632F
-0x6332
-0x6333
-0x6334
-0x6336
-0x6338
-0x6339
-0x633A
-0x633B
-0x633C
-0x633D
-0x633E
-0x6340
-0x6341
-0x6342
-0x6343
-0x6344
-0x6345
-0x6346
-0x6347
-0x6348
-0x6349
-0x634A
-0x634B
-0x634C
-0x634D
-0x634E
-0x634F
-0x6350
-0x6351
-0x6354
-0x6355
-0x6356
-0x6357
-0x6358
-0x6359
-0x635A
-0x6365
-0x6367
-0x6368
-0x6369
-0x636B
-0x636D
-0x636E
-0x636F
-0x6370
-0x6371
-0x6372
-0x6375
-0x6376
-0x6377
-0x6378
-0x637A
-0x637B
-0x637C
-0x637D
-0x6380
-0x6381
-0x6382
-0x6383
-0x6384
-0x6385
-0x6387
-0x6388
-0x6389
-0x638A
-0x638C
-0x638D
-0x638E
-0x638F
-0x6390
-0x6391
-0x6392
-0x6394
-0x6396
-0x6397
-0x6398
-0x6399
-0x639B
-0x639C
-0x639D
-0x639E
-0x639F
-0x63A0
-0x63A1
-0x63A2
-0x63A3
-0x63A4
-0x63A5
-0x63A7
-0x63A8
-0x63A9
-0x63AA
-0x63AB
-0x63AC
-0x63AD
-0x63AE
-0x63AF
-0x63B0
-0x63B1
-0x63BD
-0x63BE
-0x63C0
-0x63C2
-0x63C3
-0x63C4
-0x63C5
-0x63C6
-0x63C7
-0x63C8
-0x63C9
-0x63CA
-0x63CB
-0x63CC
-0x63CD
-0x63CE
-0x63CF
-0x63D0
-0x63D2
-0x63D3
-0x63D5
-0x63D6
-0x63D7
-0x63D8
-0x63D9
-0x63DA
-0x63DB
-0x63DC
-0x63DD
-0x63DF
-0x63E0
-0x63E1
-0x63E3
-0x63E4
-0x63E5
-0x63E7
-0x63E8
-0x63E9
-0x63EA
-0x63EB
-0x63ED
-0x63EE
-0x63EF
-0x63F0
-0x63F1
-0x63F2
-0x63F3
-0x63F4
-0x63F5
-0x63F6
-0x63F9
-0x6406
-0x6409
-0x640A
-0x640B
-0x640C
-0x640D
-0x640E
-0x640F
-0x6410
-0x6412
-0x6413
-0x6414
-0x6415
-0x6416
-0x6417
-0x6418
-0x641A
-0x641B
-0x641C
-0x641E
-0x641F
-0x6420
-0x6421
-0x6422
-0x6423
-0x6424
-0x6425
-0x6426
-0x6427
-0x6428
-0x642A
-0x642B
-0x642C
-0x642D
-0x642E
-0x642F
-0x6430
-0x6433
-0x6434
-0x6435
-0x6436
-0x6437
-0x6439
-0x643D
-0x643E
-0x643F
-0x6440
-0x6441
-0x6443
-0x644B
-0x644D
-0x644E
-0x6450
-0x6451
-0x6452
-0x6453
-0x6454
-0x6458
-0x6459
-0x645B
-0x645C
-0x645D
-0x645E
-0x645F
-0x6460
-0x6461
-0x6465
-0x6466
-0x6467
-0x6468
-0x6469
-0x646B
-0x646C
-0x646D
-0x646E
-0x646F
-0x6470
-0x6472
-0x6473
-0x6474
-0x6475
-0x6476
-0x6477
-0x6478
-0x6479
-0x647A
-0x647B
-0x647D
-0x647F
-0x6482
-0x6485
-0x6487
-0x6488
-0x6489
-0x648A
-0x648B
-0x648C
-0x648F
-0x6490
-0x6492
-0x6493
-0x6495
-0x6496
-0x6497
-0x6498
-0x6499
-0x649A
-0x649C
-0x649D
-0x649E
-0x649F
-0x64A0
-0x64A2
-0x64A3
-0x64A4
-0x64A5
-0x64A6
-0x64A9
-0x64AB
-0x64AC
-0x64AD
-0x64AE
-0x64B0
-0x64B1
-0x64B2
-0x64B3
-0x64BB
-0x64BC
-0x64BD
-0x64BE
-0x64BF
-0x64C1
-0x64C2
-0x64C3
-0x64C4
-0x64C5
-0x64C7
-0x64C9
-0x64CA
-0x64CB
-0x64CD
-0x64CE
-0x64CF
-0x64D0
-0x64D2
-0x64D4
-0x64D6
-0x64D7
-0x64D8
-0x64D9
-0x64DA
-0x64DB
-0x64E0
-0x64E2
-0x64E3
-0x64E4
-0x64E6
-0x64E8
-0x64E9
-0x64EB
-0x64EC
-0x64ED
-0x64EF
-0x64F0
-0x64F1
-0x64F2
-0x64F3
-0x64F4
-0x64F7
-0x64F8
-0x64FA
-0x64FB
-0x64FC
-0x64FD
-0x64FE
-0x64FF
-0x6500
-0x6501
-0x6503
-0x6504
-0x6506
-0x6507
-0x6509
-0x650C
-0x650D
-0x650E
-0x650F
-0x6510
-0x6513
-0x6514
-0x6515
-0x6516
-0x6517
-0x6518
-0x6519
-0x651B
-0x651C
-0x651D
-0x6520
-0x6521
-0x6522
-0x6523
-0x6524
-0x6525
-0x6526
-0x6529
-0x652A
-0x652B
-0x652C
-0x652D
-0x652E
-0x652F
-0x6532
-0x6533
-0x6536
-0x6537
-0x6538
-0x6539
-0x653B
-0x653D
-0x653E
-0x653F
-0x6541
-0x6543
-0x6545
-0x6546
-0x6548
-0x6549
-0x654A
-0x654F
-0x6551
-0x6553
-0x6554
-0x6555
-0x6556
-0x6557
-0x6558
-0x6559
-0x655C
-0x655D
-0x655E
-0x6562
-0x6563
-0x6564
-0x6565
-0x6566
-0x6567
-0x6568
-0x656A
-0x656C
-0x656F
-0x6572
-0x6573
-0x6574
-0x6575
-0x6576
-0x6577
-0x6578
-0x6579
-0x657A
-0x657B
-0x657C
-0x657F
-0x6580
-0x6581
-0x6582
-0x6583
-0x6584
-0x6587
-0x658C
-0x6590
-0x6591
-0x6592
-0x6594
-0x6595
-0x6596
-0x6597
-0x6599
-0x659B
-0x659C
-0x659D
-0x659E
-0x659F
-0x65A0
-0x65A1
-0x65A2
-0x65A4
-0x65A5
-0x65A7
-0x65A8
-0x65AA
-0x65AB
-0x65AC
-0x65AE
-0x65AF
-0x65B0
-0x65B2
-0x65B3
-0x65B6
-0x65B7
-0x65B8
-0x65B9
-0x65BB
-0x65BC
-0x65BD
-0x65BF
-0x65C1
-0x65C2
-0x65C3
-0x65C4
-0x65C5
-0x65C6
-0x65CB
-0x65CC
-0x65CD
-0x65CE
-0x65CF
-0x65D0
-0x65D2
-0x65D3
-0x65D6
-0x65D7
-0x65DA
-0x65DB
-0x65DD
-0x65DE
-0x65DF
-0x65E1
-0x65E2
-0x65E5
-0x65E6
-0x65E8
-0x65E9
-0x65EC
-0x65ED
-0x65EE
-0x65EF
-0x65F0
-0x65F1
-0x65F2
-0x65F3
-0x65F4
-0x65F5
-0x65FA
-0x65FB
-0x65FC
-0x65FD
-0x6600
-0x6602
-0x6603
-0x6604
-0x6605
-0x6606
-0x6607
-0x6608
-0x6609
-0x660A
-0x660B
-0x660C
-0x660D
-0x660E
-0x660F
-0x6610
-0x6611
-0x6612
-0x6613
-0x6614
-0x6615
-0x661C
-0x661D
-0x661F
-0x6620
-0x6621
-0x6622
-0x6624
-0x6625
-0x6626
-0x6627
-0x6628
-0x662B
-0x662D
-0x662E
-0x662F
-0x6631
-0x6632
-0x6633
-0x6634
-0x6635
-0x6636
-0x6639
-0x663A
-0x6641
-0x6642
-0x6643
-0x6645
-0x6647
-0x6649
-0x664A
-0x664C
-0x664F
-0x6651
-0x6652
-0x6659
-0x665A
-0x665B
-0x665C
-0x665D
-0x665E
-0x665F
-0x6661
-0x6662
-0x6664
-0x6665
-0x6666
-0x6668
-0x666A
-0x666C
-0x666E
-0x666F
-0x6670
-0x6671
-0x6672
-0x6674
-0x6676
-0x6677
-0x6678
-0x6679
-0x667A
-0x667B
-0x667C
-0x667E
-0x6680
-0x6684
-0x6686
-0x6687
-0x6688
-0x6689
-0x668A
-0x668B
-0x668C
-0x668D
-0x6690
-0x6691
-0x6694
-0x6695
-0x6696
-0x6697
-0x6698
-0x6699
-0x669D
-0x669F
-0x66A0
-0x66A1
-0x66A2
-0x66A8
-0x66A9
-0x66AA
-0x66AB
-0x66AE
-0x66AF
-0x66B0
-0x66B1
-0x66B2
-0x66B4
-0x66B5
-0x66B7
-0x66B8
-0x66B9
-0x66BA
-0x66BB
-0x66BD
-0x66BE
-0x66C0
-0x66C4
-0x66C6
-0x66C7
-0x66C8
-0x66C9
-0x66CA
-0x66CB
-0x66CC
-0x66CF
-0x66D2
-0x66D6
-0x66D8
-0x66D9
-0x66DA
-0x66DB
-0x66DC
-0x66DD
-0x66DE
-0x66E0
-0x66E3
-0x66E4
-0x66E6
-0x66E8
-0x66E9
-0x66EB
-0x66EC
-0x66ED
-0x66EE
-0x66F0
-0x66F2
-0x66F3
-0x66F4
-0x66F6
-0x66F7
-0x66F8
-0x66F9
-0x66FC
-0x66FE
-0x66FF
-0x6700
-0x6701
-0x6703
-0x6704
-0x6705
-0x6708
-0x6709
-0x670A
-0x670B
-0x670D
-0x670F
-0x6710
-0x6712
-0x6713
-0x6714
-0x6715
-0x6717
-0x6718
-0x671B
-0x671D
-0x671F
-0x6720
-0x6721
-0x6722
-0x6723
-0x6726
-0x6727
-0x6728
-0x672A
-0x672B
-0x672C
-0x672D
-0x672E
-0x6731
-0x6733
-0x6734
-0x6735
-0x6738
-0x6739
-0x673A
-0x673B
-0x673C
-0x673D
-0x673E
-0x673F
-0x6745
-0x6746
-0x6747
-0x6748
-0x6749
-0x674B
-0x674C
-0x674D
-0x674E
-0x674F
-0x6750
-0x6751
-0x6753
-0x6755
-0x6756
-0x6757
-0x6759
-0x675A
-0x675C
-0x675D
-0x675E
-0x675F
-0x6760
-0x676A
-0x676C
-0x676D
-0x676F
-0x6770
-0x6771
-0x6772
-0x6773
-0x6774
-0x6775
-0x6776
-0x6777
-0x6778
-0x6779
-0x677A
-0x677B
-0x677C
-0x677D
-0x677E
-0x677F
-0x6781
-0x6783
-0x6784
-0x6785
-0x6786
-0x6787
-0x6789
-0x678B
-0x678C
-0x678D
-0x678E
-0x6790
-0x6791
-0x6792
-0x6793
-0x6794
-0x6795
-0x6797
-0x6798
-0x6799
-0x679A
-0x679C
-0x679D
-0x679F
-0x67AE
-0x67AF
-0x67B0
-0x67B2
-0x67B3
-0x67B4
-0x67B5
-0x67B6
-0x67B7
-0x67B8
-0x67B9
-0x67BA
-0x67BB
-0x67C0
-0x67C1
-0x67C2
-0x67C3
-0x67C4
-0x67C5
-0x67C6
-0x67C8
-0x67C9
-0x67CA
-0x67CB
-0x67CC
-0x67CD
-0x67CE
-0x67CF
-0x67D0
-0x67D1
-0x67D2
-0x67D3
-0x67D4
-0x67D8
-0x67D9
-0x67DA
-0x67DB
-0x67DC
-0x67DD
-0x67DE
-0x67DF
-0x67E2
-0x67E3
-0x67E4
-0x67E5
-0x67E6
-0x67E7
-0x67E9
-0x67EA
-0x67EB
-0x67EC
-0x67ED
-0x67EE
-0x67EF
-0x67F0
-0x67F1
-0x67F2
-0x67F3
-0x67F4
-0x67F5
-0x67F6
-0x67F7
-0x67F8
-0x67FA
-0x67FC
-0x67FF
-0x6812
-0x6813
-0x6814
-0x6816
-0x6817
-0x6818
-0x681A
-0x681C
-0x681D
-0x681F
-0x6820
-0x6821
-0x6825
-0x6826
-0x6828
-0x6829
-0x682A
-0x682B
-0x682D
-0x682E
-0x682F
-0x6831
-0x6832
-0x6833
-0x6834
-0x6835
-0x6838
-0x6839
-0x683A
-0x683B
-0x683C
-0x683D
-0x6840
-0x6841
-0x6842
-0x6843
-0x6844
-0x6845
-0x6846
-0x6848
-0x6849
-0x684B
-0x684C
-0x684D
-0x684E
-0x684F
-0x6850
-0x6851
-0x6853
-0x6854
-0x686B
-0x686D
-0x686E
-0x686F
-0x6871
-0x6872
-0x6874
-0x6875
-0x6876
-0x6877
-0x6878
-0x6879
-0x687B
-0x687C
-0x687D
-0x687E
-0x687F
-0x6880
-0x6881
-0x6882
-0x6883
-0x6885
-0x6886
-0x6887
-0x6889
-0x688A
-0x688B
-0x688C
-0x688F
-0x6890
-0x6891
-0x6892
-0x6893
-0x6894
-0x6896
-0x6897
-0x689B
-0x689C
-0x689D
-0x689F
-0x68A0
-0x68A1
-0x68A2
-0x68A3
-0x68A4
-0x68A7
-0x68A8
-0x68A9
-0x68AA
-0x68AB
-0x68AC
-0x68AD
-0x68AE
-0x68AF
-0x68B0
-0x68B1
-0x68B2
-0x68B3
-0x68B4
-0x68B5
-0x68C4
-0x68C6
-0x68C7
-0x68C8
-0x68C9
-0x68CB
-0x68CC
-0x68CD
-0x68CE
-0x68D0
-0x68D1
-0x68D2
-0x68D3
-0x68D4
-0x68D5
-0x68D6
-0x68D7
-0x68D8
-0x68DA
-0x68DC
-0x68DD
-0x68DE
-0x68DF
-0x68E0
-0x68E1
-0x68E3
-0x68E4
-0x68E6
-0x68E7
-0x68E8
-0x68E9
-0x68EA
-0x68EB
-0x68EC
-0x68EE
-0x68EF
-0x68F0
-0x68F1
-0x68F2
-0x68F3
-0x68F4
-0x68F5
-0x68F6
-0x68F7
-0x68F8
-0x68F9
-0x68FA
-0x68FB
-0x68FC
-0x68FD
-0x6904
-0x6905
-0x6906
-0x6907
-0x6908
-0x690A
-0x690B
-0x690C
-0x690D
-0x690E
-0x690F
-0x6910
-0x6911
-0x6912
-0x6913
-0x6914
-0x6915
-0x6917
-0x6925
-0x692A
-0x692F
-0x6930
-0x6932
-0x6933
-0x6934
-0x6935
-0x6937
-0x6938
-0x6939
-0x693B
-0x693C
-0x693D
-0x693F
-0x6940
-0x6941
-0x6942
-0x6944
-0x6945
-0x6948
-0x6949
-0x694A
-0x694B
-0x694C
-0x694E
-0x694F
-0x6951
-0x6952
-0x6953
-0x6954
-0x6956
-0x6957
-0x6958
-0x6959
-0x695A
-0x695B
-0x695C
-0x695D
-0x695E
-0x695F
-0x6960
-0x6962
-0x6963
-0x6965
-0x6966
-0x6968
-0x6969
-0x696A
-0x696B
-0x696C
-0x696D
-0x696E
-0x696F
-0x6970
-0x6971
-0x6974
-0x6975
-0x6976
-0x6977
-0x6978
-0x6979
-0x697A
-0x697B
-0x6982
-0x6983
-0x6986
-0x698D
-0x698E
-0x6990
-0x6991
-0x6993
-0x6994
-0x6995
-0x6996
-0x6997
-0x6999
-0x699A
-0x699B
-0x699C
-0x699E
-0x69A0
-0x69A1
-0x69A3
-0x69A4
-0x69A5
-0x69A6
-0x69A7
-0x69A8
-0x69A9
-0x69AA
-0x69AB
-0x69AC
-0x69AD
-0x69AE
-0x69AF
-0x69B0
-0x69B1
-0x69B3
-0x69B4
-0x69B5
-0x69B6
-0x69B7
-0x69B9
-0x69BB
-0x69BC
-0x69BD
-0x69BE
-0x69BF
-0x69C1
-0x69C2
-0x69C3
-0x69C4
-0x69C6
-0x69C9
-0x69CA
-0x69CB
-0x69CC
-0x69CD
-0x69CE
-0x69CF
-0x69D0
-0x69D3
-0x69D4
-0x69D9
-0x69E2
-0x69E4
-0x69E5
-0x69E6
-0x69E7
-0x69E8
-0x69EB
-0x69EC
-0x69ED
-0x69EE
-0x69F1
-0x69F2
-0x69F3
-0x69F4
-0x69F6
-0x69F7
-0x69F8
-0x69FB
-0x69FC
-0x69FD
-0x69FE
-0x69FF
-0x6A00
-0x6A01
-0x6A02
-0x6A04
-0x6A05
-0x6A06
-0x6A07
-0x6A08
-0x6A09
-0x6A0A
-0x6A0D
-0x6A0F
-0x6A11
-0x6A13
-0x6A14
-0x6A15
-0x6A16
-0x6A17
-0x6A18
-0x6A19
-0x6A1B
-0x6A1D
-0x6A1E
-0x6A1F
-0x6A20
-0x6A21
-0x6A23
-0x6A25
-0x6A26
-0x6A27
-0x6A28
-0x6A32
-0x6A34
-0x6A35
-0x6A38
-0x6A39
-0x6A3A
-0x6A3B
-0x6A3C
-0x6A3D
-0x6A3E
-0x6A3F
-0x6A40
-0x6A41
-0x6A44
-0x6A46
-0x6A47
-0x6A48
-0x6A49
-0x6A4B
-0x6A4D
-0x6A4E
-0x6A4F
-0x6A50
-0x6A51
-0x6A54
-0x6A55
-0x6A56
-0x6A58
-0x6A59
-0x6A5A
-0x6A5B
-0x6A5D
-0x6A5E
-0x6A5F
-0x6A60
-0x6A61
-0x6A62
-0x6A64
-0x6A66
-0x6A67
-0x6A68
-0x6A69
-0x6A6A
-0x6A6B
-0x6A6D
-0x6A6F
-0x6A76
-0x6A7E
-0x6A7F
-0x6A80
-0x6A81
-0x6A83
-0x6A84
-0x6A85
-0x6A87
-0x6A89
-0x6A8C
-0x6A8D
-0x6A8E
-0x6A90
-0x6A91
-0x6A92
-0x6A93
-0x6A94
-0x6A95
-0x6A96
-0x6A97
-0x6A9A
-0x6A9B
-0x6A9C
-0x6A9E
-0x6A9F
-0x6AA0
-0x6AA1
-0x6AA2
-0x6AA3
-0x6AA4
-0x6AA5
-0x6AA6
-0x6AA8
-0x6AAC
-0x6AAD
-0x6AAE
-0x6AAF
-0x6AB3
-0x6AB4
-0x6AB6
-0x6AB7
-0x6AB8
-0x6AB9
-0x6ABA
-0x6ABB
-0x6ABD
-0x6AC2
-0x6AC3
-0x6AC5
-0x6AC6
-0x6AC7
-0x6ACB
-0x6ACC
-0x6ACD
-0x6ACF
-0x6AD0
-0x6AD1
-0x6AD3
-0x6AD9
-0x6ADA
-0x6ADB
-0x6ADC
-0x6ADD
-0x6ADE
-0x6ADF
-0x6AE0
-0x6AE1
-0x6AE5
-0x6AE7
-0x6AE8
-0x6AEA
-0x6AEB
-0x6AEC
-0x6AEE
-0x6AEF
-0x6AF0
-0x6AF1
-0x6AF3
-0x6AF8
-0x6AF9
-0x6AFA
-0x6AFB
-0x6AFC
-0x6B00
-0x6B02
-0x6B03
-0x6B04
-0x6B08
-0x6B09
-0x6B0A
-0x6B0B
-0x6B0F
-0x6B10
-0x6B11
-0x6B12
-0x6B13
-0x6B16
-0x6B17
-0x6B18
-0x6B19
-0x6B1A
-0x6B1E
-0x6B20
-0x6B21
-0x6B23
-0x6B25
-0x6B28
-0x6B2C
-0x6B2D
-0x6B2F
-0x6B31
-0x6B32
-0x6B33
-0x6B34
-0x6B36
-0x6B37
-0x6B38
-0x6B39
-0x6B3A
-0x6B3B
-0x6B3C
-0x6B3D
-0x6B3E
-0x6B3F
-0x6B41
-0x6B42
-0x6B43
-0x6B45
-0x6B46
-0x6B47
-0x6B48
-0x6B49
-0x6B4A
-0x6B4B
-0x6B4C
-0x6B4D
-0x6B4E
-0x6B50
-0x6B51
-0x6B54
-0x6B55
-0x6B56
-0x6B59
-0x6B5B
-0x6B5C
-0x6B5E
-0x6B5F
-0x6B60
-0x6B61
-0x6B62
-0x6B63
-0x6B64
-0x6B65
-0x6B66
-0x6B67
-0x6B6A
-0x6B6D
-0x6B72
-0x6B76
-0x6B77
-0x6B78
-0x6B79
-0x6B7B
-0x6B7E
-0x6B7F
-0x6B80
-0x6B82
-0x6B83
-0x6B84
-0x6B86
-0x6B88
-0x6B89
-0x6B8A
-0x6B8C
-0x6B8D
-0x6B8E
-0x6B8F
-0x6B91
-0x6B94
-0x6B95
-0x6B96
-0x6B97
-0x6B98
-0x6B99
-0x6B9B
-0x6B9E
-0x6B9F
-0x6BA0
-0x6BA2
-0x6BA3
-0x6BA4
-0x6BA5
-0x6BA6
-0x6BA7
-0x6BAA
-0x6BAB
-0x6BAD
-0x6BAE
-0x6BAF
-0x6BB0
-0x6BB2
-0x6BB3
-0x6BB5
-0x6BB6
-0x6BB7
-0x6BBA
-0x6BBC
-0x6BBD
-0x6BBF
-0x6BC0
-0x6BC3
-0x6BC4
-0x6BC5
-0x6BC6
-0x6BC7
-0x6BC8
-0x6BC9
-0x6BCA
-0x6BCB
-0x6BCC
-0x6BCD
-0x6BCF
-0x6BD0
-0x6BD2
-0x6BD3
-0x6BD4
-0x6BD6
-0x6BD7
-0x6BD8
-0x6BDA
-0x6BDB
-0x6BDE
-0x6BE0
-0x6BE2
-0x6BE3
-0x6BE4
-0x6BE6
-0x6BE7
-0x6BE8
-0x6BEB
-0x6BEC
-0x6BEF
-0x6BF0
-0x6BF2
-0x6BF3
-0x6BF7
-0x6BF8
-0x6BF9
-0x6BFB
-0x6BFC
-0x6BFD
-0x6BFE
-0x6BFF
-0x6C00
-0x6C01
-0x6C02
-0x6C03
-0x6C04
-0x6C05
-0x6C06
-0x6C08
-0x6C09
-0x6C0B
-0x6C0C
-0x6C0D
-0x6C0F
-0x6C10
-0x6C11
-0x6C13
-0x6C14
-0x6C15
-0x6C16
-0x6C18
-0x6C19
-0x6C1A
-0x6C1B
-0x6C1D
-0x6C1F
-0x6C20
-0x6C21
-0x6C23
-0x6C24
-0x6C25
-0x6C26
-0x6C27
-0x6C28
-0x6C2A
-0x6C2B
-0x6C2C
-0x6C2E
-0x6C2F
-0x6C30
-0x6C33
-0x6C34
-0x6C36
-0x6C38
-0x6C3B
-0x6C3E
-0x6C3F
-0x6C40
-0x6C41
-0x6C42
-0x6C43
-0x6C46
-0x6C4A
-0x6C4B
-0x6C4C
-0x6C4D
-0x6C4E
-0x6C4F
-0x6C50
-0x6C52
-0x6C54
-0x6C55
-0x6C57
-0x6C59
-0x6C5B
-0x6C5C
-0x6C5D
-0x6C5E
-0x6C5F
-0x6C60
-0x6C61
-0x6C65
-0x6C66
-0x6C67
-0x6C68
-0x6C69
-0x6C6A
-0x6C6B
-0x6C6D
-0x6C6F
-0x6C70
-0x6C71
-0x6C72
-0x6C73
-0x6C74
-0x6C76
-0x6C78
-0x6C7A
-0x6C7B
-0x6C7D
-0x6C7E
-0x6C80
-0x6C81
-0x6C82
-0x6C83
-0x6C84
-0x6C85
-0x6C86
-0x6C87
-0x6C88
-0x6C89
-0x6C8A
-0x6C8B
-0x6C8C
-0x6C8D
-0x6C8E
-0x6C8F
-0x6C90
-0x6C92
-0x6C93
-0x6C94
-0x6C95
-0x6C96
-0x6C98
-0x6C99
-0x6C9A
-0x6C9B
-0x6C9C
-0x6C9D
-0x6CAB
-0x6CAC
-0x6CAD
-0x6CAE
-0x6CB0
-0x6CB1
-0x6CB3
-0x6CB4
-0x6CB6
-0x6CB7
-0x6CB8
-0x6CB9
-0x6CBA
-0x6CBB
-0x6CBC
-0x6CBD
-0x6CBE
-0x6CBF
-0x6CC0
-0x6CC1
-0x6CC2
-0x6CC3
-0x6CC4
-0x6CC5
-0x6CC6
-0x6CC7
-0x6CC9
-0x6CCA
-0x6CCC
-0x6CCD
-0x6CCF
-0x6CD0
-0x6CD1
-0x6CD2
-0x6CD3
-0x6CD4
-0x6CD5
-0x6CD6
-0x6CD7
-0x6CD9
-0x6CDA
-0x6CDB
-0x6CDC
-0x6CDD
-0x6CDE
-0x6CE0
-0x6CE1
-0x6CE2
-0x6CE3
-0x6CE5
-0x6CE7
-0x6CE8
-0x6CE9
-0x6CEB
-0x6CEC
-0x6CED
-0x6CEE
-0x6CEF
-0x6CF0
-0x6CF1
-0x6CF2
-0x6CF3
-0x6CF5
-0x6CF9
-0x6D00
-0x6D01
-0x6D03
-0x6D04
-0x6D07
-0x6D08
-0x6D09
-0x6D0A
-0x6D0B
-0x6D0C
-0x6D0D
-0x6D0E
-0x6D0F
-0x6D10
-0x6D11
-0x6D12
-0x6D16
-0x6D17
-0x6D18
-0x6D19
-0x6D1A
-0x6D1B
-0x6D1D
-0x6D1E
-0x6D1F
-0x6D20
-0x6D22
-0x6D25
-0x6D27
-0x6D28
-0x6D29
-0x6D2A
-0x6D2B
-0x6D2C
-0x6D2D
-0x6D2E
-0x6D2F
-0x6D30
-0x6D31
-0x6D32
-0x6D33
-0x6D34
-0x6D35
-0x6D36
-0x6D37
-0x6D38
-0x6D39
-0x6D3A
-0x6D3B
-0x6D3C
-0x6D3D
-0x6D3E
-0x6D3F
-0x6D40
-0x6D41
-0x6D42
-0x6D58
-0x6D59
-0x6D5A
-0x6D5E
-0x6D5F
-0x6D60
-0x6D61
-0x6D62
-0x6D63
-0x6D64
-0x6D65
-0x6D66
-0x6D67
-0x6D68
-0x6D69
-0x6D6A
-0x6D6C
-0x6D6D
-0x6D6E
-0x6D6F
-0x6D70
-0x6D74
-0x6D75
-0x6D76
-0x6D77
-0x6D78
-0x6D79
-0x6D7A
-0x6D7B
-0x6D7C
-0x6D7D
-0x6D7E
-0x6D7F
-0x6D80
-0x6D82
-0x6D83
-0x6D84
-0x6D85
-0x6D86
-0x6D87
-0x6D88
-0x6D89
-0x6D8A
-0x6D8B
-0x6D8C
-0x6D8D
-0x6D8E
-0x6D90
-0x6D91
-0x6D92
-0x6D93
-0x6D94
-0x6D95
-0x6D97
-0x6D98
-0x6DAA
-0x6DAB
-0x6DAC
-0x6DAE
-0x6DAF
-0x6DB2
-0x6DB3
-0x6DB4
-0x6DB5
-0x6DB7
-0x6DB8
-0x6DBA
-0x6DBB
-0x6DBC
-0x6DBD
-0x6DBE
-0x6DBF
-0x6DC0
-0x6DC2
-0x6DC4
-0x6DC5
-0x6DC6
-0x6DC7
-0x6DC8
-0x6DC9
-0x6DCA
-0x6DCB
-0x6DCC
-0x6DCD
-0x6DCF
-0x6DD0
-0x6DD1
-0x6DD2
-0x6DD3
-0x6DD4
-0x6DD5
-0x6DD6
-0x6DD7
-0x6DD8
-0x6DD9
-0x6DDA
-0x6DDB
-0x6DDC
-0x6DDD
-0x6DDE
-0x6DDF
-0x6DE0
-0x6DE1
-0x6DE2
-0x6DE3
-0x6DE4
-0x6DE5
-0x6DE6
-0x6DE8
-0x6DE9
-0x6DEA
-0x6DEB
-0x6DEC
-0x6DED
-0x6DEE
-0x6DEF
-0x6DF0
-0x6DF1
-0x6DF2
-0x6DF3
-0x6DF4
-0x6DF5
-0x6DF6
-0x6DF7
-0x6DF9
-0x6DFA
-0x6DFB
-0x6DFC
-0x6DFD
-0x6E00
-0x6E03
-0x6E05
-0x6E19
-0x6E1A
-0x6E1B
-0x6E1C
-0x6E1D
-0x6E1F
-0x6E20
-0x6E21
-0x6E22
-0x6E23
-0x6E24
-0x6E25
-0x6E26
-0x6E27
-0x6E28
-0x6E2B
-0x6E2C
-0x6E2D
-0x6E2E
-0x6E2F
-0x6E30
-0x6E31
-0x6E32
-0x6E33
-0x6E34
-0x6E35
-0x6E36
-0x6E38
-0x6E39
-0x6E3A
-0x6E3B
-0x6E3C
-0x6E3D
-0x6E3E
-0x6E3F
-0x6E40
-0x6E41
-0x6E43
-0x6E44
-0x6E45
-0x6E46
-0x6E47
-0x6E49
-0x6E4A
-0x6E4B
-0x6E4D
-0x6E4E
-0x6E51
-0x6E52
-0x6E53
-0x6E54
-0x6E55
-0x6E56
-0x6E58
-0x6E5A
-0x6E5B
-0x6E5C
-0x6E5D
-0x6E5E
-0x6E5F
-0x6E60
-0x6E61
-0x6E62
-0x6E63
-0x6E64
-0x6E65
-0x6E66
-0x6E67
-0x6E68
-0x6E69
-0x6E6B
-0x6E6E
-0x6E6F
-0x6E71
-0x6E72
-0x6E73
-0x6E74
-0x6E77
-0x6E78
-0x6E79
-0x6E88
-0x6E89
-0x6E8D
-0x6E8E
-0x6E8F
-0x6E90
-0x6E92
-0x6E93
-0x6E94
-0x6E96
-0x6E97
-0x6E98
-0x6E99
-0x6E9B
-0x6E9C
-0x6E9D
-0x6E9E
-0x6E9F
-0x6EA0
-0x6EA1
-0x6EA2
-0x6EA3
-0x6EA4
-0x6EA5
-0x6EA6
-0x6EA7
-0x6EAA
-0x6EAB
-0x6EAE
-0x6EAF
-0x6EB0
-0x6EB1
-0x6EB2
-0x6EB3
-0x6EB4
-0x6EB6
-0x6EB7
-0x6EB9
-0x6EBA
-0x6EBC
-0x6EBD
-0x6EBE
-0x6EBF
-0x6EC0
-0x6EC1
-0x6EC2
-0x6EC3
-0x6EC4
-0x6EC5
-0x6EC6
-0x6EC7
-0x6EC8
-0x6EC9
-0x6ECA
-0x6ECB
-0x6ECC
-0x6ECD
-0x6ECE
-0x6ECF
-0x6ED0
-0x6ED1
-0x6ED2
-0x6ED3
-0x6ED4
-0x6ED5
-0x6ED6
-0x6ED8
-0x6EDC
-0x6EEB
-0x6EEC
-0x6EED
-0x6EEE
-0x6EEF
-0x6EF1
-0x6EF2
-0x6EF4
-0x6EF5
-0x6EF6
-0x6EF7
-0x6EF8
-0x6EF9
-0x6EFB
-0x6EFC
-0x6EFD
-0x6EFE
-0x6EFF
-0x6F00
-0x6F01
-0x6F02
-0x6F03
-0x6F05
-0x6F06
-0x6F07
-0x6F08
-0x6F09
-0x6F0A
-0x6F0D
-0x6F0E
-0x6F0F
-0x6F12
-0x6F13
-0x6F14
-0x6F15
-0x6F18
-0x6F19
-0x6F1A
-0x6F1C
-0x6F1E
-0x6F1F
-0x6F20
-0x6F21
-0x6F22
-0x6F23
-0x6F25
-0x6F26
-0x6F27
-0x6F29
-0x6F2A
-0x6F2B
-0x6F2C
-0x6F2D
-0x6F2E
-0x6F2F
-0x6F30
-0x6F31
-0x6F32
-0x6F33
-0x6F35
-0x6F36
-0x6F37
-0x6F38
-0x6F39
-0x6F3A
-0x6F3B
-0x6F3C
-0x6F3E
-0x6F3F
-0x6F40
-0x6F41
-0x6F43
-0x6F4E
-0x6F4F
-0x6F50
-0x6F51
-0x6F52
-0x6F53
-0x6F54
-0x6F55
-0x6F57
-0x6F58
-0x6F5A
-0x6F5B
-0x6F5D
-0x6F5E
-0x6F5F
-0x6F60
-0x6F61
-0x6F62
-0x6F63
-0x6F64
-0x6F66
-0x6F67
-0x6F69
-0x6F6A
-0x6F6B
-0x6F6C
-0x6F6D
-0x6F6E
-0x6F6F
-0x6F70
-0x6F72
-0x6F73
-0x6F76
-0x6F77
-0x6F78
-0x6F7A
-0x6F7B
-0x6F7C
-0x6F7D
-0x6F7E
-0x6F7F
-0x6F80
-0x6F82
-0x6F84
-0x6F85
-0x6F86
-0x6F87
-0x6F88
-0x6F89
-0x6F8B
-0x6F8C
-0x6F8D
-0x6F8E
-0x6F90
-0x6F92
-0x6F93
-0x6F94
-0x6F95
-0x6F96
-0x6F97
-0x6F9E
-0x6FA0
-0x6FA1
-0x6FA2
-0x6FA3
-0x6FA4
-0x6FA5
-0x6FA6
-0x6FA7
-0x6FA8
-0x6FA9
-0x6FAA
-0x6FAB
-0x6FAC
-0x6FAD
-0x6FAE
-0x6FAF
-0x6FB0
-0x6FB1
-0x6FB2
-0x6FB3
-0x6FB4
-0x6FB6
-0x6FB8
-0x6FB9
-0x6FBA
-0x6FBC
-0x6FBD
-0x6FBF
-0x6FC0
-0x6FC1
-0x6FC2
-0x6FC3
-0x6FC4
-0x6FC6
-0x6FC7
-0x6FC8
-0x6FC9
-0x6FCA
-0x6FCB
-0x6FCC
-0x6FCD
-0x6FCE
-0x6FCF
-0x6FD4
-0x6FD5
-0x6FD8
-0x6FDB
-0x6FDC
-0x6FDD
-0x6FDE
-0x6FDF
-0x6FE0
-0x6FE1
-0x6FE2
-0x6FE3
-0x6FE4
-0x6FE6
-0x6FE7
-0x6FE8
-0x6FE9
-0x6FEB
-0x6FEC
-0x6FED
-0x6FEE
-0x6FEF
-0x6FF0
-0x6FF1
-0x6FF2
-0x6FF4
-0x6FF7
-0x6FFA
-0x6FFB
-0x6FFC
-0x6FFE
-0x6FFF
-0x7000
-0x7001
-0x7004
-0x7005
-0x7006
-0x7007
-0x7009
-0x700A
-0x700B
-0x700C
-0x700D
-0x700E
-0x700F
-0x7011
-0x7014
-0x7015
-0x7016
-0x7017
-0x7018
-0x7019
-0x701A
-0x701B
-0x701C
-0x701D
-0x701F
-0x7020
-0x7021
-0x7022
-0x7023
-0x7024
-0x7026
-0x7027
-0x7028
-0x7029
-0x702A
-0x702B
-0x702F
-0x7030
-0x7031
-0x7032
-0x7033
-0x7034
-0x7035
-0x7037
-0x7038
-0x7039
-0x703A
-0x703B
-0x703C
-0x703E
-0x703F
-0x7040
-0x7041
-0x7042
-0x7043
-0x7044
-0x7045
-0x7046
-0x7048
-0x7049
-0x704A
-0x704C
-0x7051
-0x7052
-0x7055
-0x7056
-0x7057
-0x7058
-0x705A
-0x705B
-0x705D
-0x705E
-0x705F
-0x7060
-0x7061
-0x7062
-0x7063
-0x7064
-0x7065
-0x7066
-0x7068
-0x7069
-0x706A
-0x706B
-0x7070
-0x7071
-0x7074
-0x7076
-0x7078
-0x707A
-0x707C
-0x707D
-0x7082
-0x7083
-0x7084
-0x7085
-0x7086
-0x708A
-0x708E
-0x7091
-0x7092
-0x7093
-0x7094
-0x7095
-0x7096
-0x7098
-0x7099
-0x709A
-0x709F
-0x70A1
-0x70A4
-0x70A9
-0x70AB
-0x70AC
-0x70AD
-0x70AE
-0x70AF
-0x70B0
-0x70B1
-0x70B3
-0x70B4
-0x70B5
-0x70B7
-0x70B8
-0x70BA
-0x70BE
-0x70C5
-0x70C6
-0x70C7
-0x70C8
-0x70CA
-0x70CB
-0x70CD
-0x70CE
-0x70CF
-0x70D1
-0x70D2
-0x70D3
-0x70D4
-0x70D7
-0x70D8
-0x70D9
-0x70DA
-0x70DC
-0x70DD
-0x70DE
-0x70E0
-0x70E1
-0x70E2
-0x70E4
-0x70EF
-0x70F0
-0x70F3
-0x70F4
-0x70F6
-0x70F7
-0x70F8
-0x70F9
-0x70FA
-0x70FB
-0x70FC
-0x70FD
-0x70FF
-0x7100
-0x7102
-0x7104
-0x7106
-0x7109
-0x710A
-0x710B
-0x710C
-0x710D
-0x710E
-0x7110
-0x7113
-0x7117
-0x7119
-0x711A
-0x711B
-0x711C
-0x711E
-0x711F
-0x7120
-0x7121
-0x7122
-0x7123
-0x7125
-0x7126
-0x7128
-0x712E
-0x712F
-0x7130
-0x7131
-0x7132
-0x7136
-0x713A
-0x7141
-0x7142
-0x7143
-0x7144
-0x7146
-0x7147
-0x7149
-0x714B
-0x714C
-0x714D
-0x714E
-0x7150
-0x7152
-0x7153
-0x7154
-0x7156
-0x7158
-0x7159
-0x715A
-0x715C
-0x715D
-0x715E
-0x715F
-0x7160
-0x7161
-0x7162
-0x7163
-0x7164
-0x7165
-0x7166
-0x7167
-0x7168
-0x7169
-0x716A
-0x716C
-0x716E
-0x7170
-0x7172
-0x7178
-0x717B
-0x717D
-0x7180
-0x7181
-0x7182
-0x7184
-0x7185
-0x7186
-0x7187
-0x7189
-0x718A
-0x718F
-0x7190
-0x7192
-0x7194
-0x7197
-0x7199
-0x719A
-0x719B
-0x719C
-0x719D
-0x719E
-0x719F
-0x71A0
-0x71A1
-0x71A4
-0x71A5
-0x71A7
-0x71A8
-0x71A9
-0x71AA
-0x71AC
-0x71AF
-0x71B0
-0x71B1
-0x71B2
-0x71B3
-0x71B5
-0x71B8
-0x71B9
-0x71BC
-0x71BD
-0x71BE
-0x71BF
-0x71C0
-0x71C1
-0x71C2
-0x71C3
-0x71C4
-0x71C5
-0x71C6
-0x71C7
-0x71C8
-0x71C9
-0x71CA
-0x71CB
-0x71CE
-0x71CF
-0x71D0
-0x71D2
-0x71D4
-0x71D5
-0x71D6
-0x71D8
-0x71D9
-0x71DA
-0x71DB
-0x71DC
-0x71DF
-0x71E0
-0x71E1
-0x71E2
-0x71E4
-0x71E5
-0x71E6
-0x71E7
-0x71E8
-0x71EC
-0x71ED
-0x71EE
-0x71F0
-0x71F1
-0x71F2
-0x71F4
-0x71F8
-0x71F9
-0x71FB
-0x71FC
-0x71FD
-0x71FE
-0x71FF
-0x7201
-0x7202
-0x7203
-0x7205
-0x7206
-0x7207
-0x720A
-0x720C
-0x720D
-0x7210
-0x7213
-0x7214
-0x7219
-0x721A
-0x721B
-0x721D
-0x721E
-0x721F
-0x7222
-0x7223
-0x7226
-0x7227
-0x7228
-0x7229
-0x722A
-0x722C
-0x722D
-0x7230
-0x7235
-0x7236
-0x7238
-0x7239
-0x723A
-0x723B
-0x723D
-0x723E
-0x723F
-0x7241
-0x7242
-0x7244
-0x7246
-0x7247
-0x7248
-0x7249
-0x724A
-0x724B
-0x724C
-0x724F
-0x7252
-0x7253
-0x7256
-0x7258
-0x7259
-0x725A
-0x725B
-0x725D
-0x725E
-0x725F
-0x7260
-0x7261
-0x7262
-0x7263
-0x7267
-0x7269
-0x726A
-0x726C
-0x726E
-0x726F
-0x7270
-0x7272
-0x7273
-0x7274
-0x7276
-0x7277
-0x7278
-0x7279
-0x727B
-0x727C
-0x727D
-0x727E
-0x727F
-0x7280
-0x7281
-0x7284
-0x7285
-0x7286
-0x7288
-0x7289
-0x728B
-0x728C
-0x728D
-0x728E
-0x7290
-0x7291
-0x7292
-0x7293
-0x7295
-0x7296
-0x7297
-0x7298
-0x729A
-0x729B
-0x729D
-0x729E
-0x72A1
-0x72A2
-0x72A3
-0x72A4
-0x72A5
-0x72A6
-0x72A7
-0x72A8
-0x72A9
-0x72AA
-0x72AC
-0x72AE
-0x72AF
-0x72B0
-0x72B4
-0x72B5
-0x72BA
-0x72BD
-0x72BF
-0x72C0
-0x72C1
-0x72C2
-0x72C3
-0x72C4
-0x72C5
-0x72C6
-0x72C9
-0x72CA
-0x72CB
-0x72CC
-0x72CE
-0x72D0
-0x72D1
-0x72D2
-0x72D4
-0x72D6
-0x72D7
-0x72D8
-0x72D9
-0x72DA
-0x72DC
-0x72DF
-0x72E0
-0x72E1
-0x72E3
-0x72E4
-0x72E6
-0x72E8
-0x72E9
-0x72EA
-0x72EB
-0x72F3
-0x72F4
-0x72F6
-0x72F7
-0x72F8
-0x72F9
-0x72FA
-0x72FB
-0x72FC
-0x72FD
-0x72FE
-0x72FF
-0x7300
-0x7301
-0x7307
-0x7308
-0x730A
-0x730B
-0x730C
-0x730F
-0x7311
-0x7312
-0x7313
-0x7316
-0x7317
-0x7318
-0x7319
-0x731B
-0x731C
-0x731D
-0x731E
-0x7322
-0x7323
-0x7325
-0x7326
-0x7327
-0x7329
-0x732D
-0x7330
-0x7331
-0x7332
-0x7333
-0x7334
-0x7335
-0x7336
-0x7337
-0x733A
-0x733B
-0x733C
-0x733E
-0x733F
-0x7340
-0x7342
-0x7343
-0x7344
-0x7345
-0x7349
-0x734A
-0x734C
-0x734D
-0x734E
-0x7350
-0x7351
-0x7352
-0x7357
-0x7358
-0x7359
-0x735A
-0x735B
-0x735D
-0x735E
-0x735F
-0x7360
-0x7361
-0x7362
-0x7365
-0x7366
-0x7367
-0x7368
-0x7369
-0x736A
-0x736B
-0x736C
-0x736E
-0x736F
-0x7370
-0x7372
-0x7373
-0x7375
-0x7376
-0x7377
-0x7378
-0x737A
-0x737B
-0x737C
-0x737D
-0x737E
-0x737F
-0x7380
-0x7381
-0x7382
-0x7383
-0x7384
-0x7385
-0x7386
-0x7387
-0x7388
-0x7389
-0x738A
-0x738B
-0x738E
-0x7392
-0x7393
-0x7394
-0x7395
-0x7396
-0x7397
-0x739D
-0x739F
-0x73A0
-0x73A1
-0x73A2
-0x73A4
-0x73A5
-0x73A6
-0x73A8
-0x73A9
-0x73AB
-0x73AC
-0x73AD
-0x73B2
-0x73B3
-0x73B4
-0x73B5
-0x73B6
-0x73B7
-0x73B8
-0x73B9
-0x73BB
-0x73BC
-0x73BE
-0x73BF
-0x73C0
-0x73C2
-0x73C3
-0x73C5
-0x73C6
-0x73C7
-0x73C8
-0x73CA
-0x73CB
-0x73CC
-0x73CD
-0x73D2
-0x73D3
-0x73D4
-0x73D6
-0x73D7
-0x73D8
-0x73D9
-0x73DA
-0x73DB
-0x73DC
-0x73DD
-0x73DE
-0x73E0
-0x73E3
-0x73E5
-0x73E7
-0x73E8
-0x73E9
-0x73EA
-0x73EB
-0x73ED
-0x73EE
-0x73F4
-0x73F5
-0x73F6
-0x73F8
-0x73FA
-0x73FC
-0x73FD
-0x73FE
-0x73FF
-0x7400
-0x7401
-0x7403
-0x7404
-0x7405
-0x7406
-0x7407
-0x7408
-0x7409
-0x740A
-0x740B
-0x740C
-0x740D
-0x7416
-0x741A
-0x741B
-0x741D
-0x7420
-0x7421
-0x7422
-0x7423
-0x7424
-0x7425
-0x7426
-0x7428
-0x7429
-0x742A
-0x742B
-0x742C
-0x742D
-0x742E
-0x742F
-0x7430
-0x7431
-0x7432
-0x7433
-0x7434
-0x7435
-0x7436
-0x743A
-0x743F
-0x7440
-0x7441
-0x7442
-0x7444
-0x7446
-0x744A
-0x744B
-0x744D
-0x744E
-0x744F
-0x7450
-0x7451
-0x7452
-0x7454
-0x7455
-0x7457
-0x7459
-0x745A
-0x745B
-0x745C
-0x745E
-0x745F
-0x7462
-0x7463
-0x7464
-0x7467
-0x7469
-0x746A
-0x746D
-0x746E
-0x746F
-0x7470
-0x7471
-0x7472
-0x7473
-0x7475
-0x7479
-0x747C
-0x747D
-0x747E
-0x747F
-0x7480
-0x7481
-0x7483
-0x7485
-0x7486
-0x7487
-0x7488
-0x7489
-0x748A
-0x748B
-0x7490
-0x7492
-0x7494
-0x7495
-0x7497
-0x7498
-0x749A
-0x749C
-0x749E
-0x749F
-0x74A0
-0x74A1
-0x74A3
-0x74A5
-0x74A6
-0x74A7
-0x74A8
-0x74A9
-0x74AA
-0x74AB
-0x74AD
-0x74AF
-0x74B0
-0x74B1
-0x74B2
-0x74B5
-0x74B6
-0x74B7
-0x74B8
-0x74BA
-0x74BB
-0x74BD
-0x74BE
-0x74BF
-0x74C0
-0x74C1
-0x74C2
-0x74C3
-0x74C5
-0x74CA
-0x74CB
-0x74CF
-0x74D4
-0x74D5
-0x74D6
-0x74D7
-0x74D8
-0x74D9
-0x74DA
-0x74DB
-0x74DC
-0x74DD
-0x74DE
-0x74DF
-0x74E0
-0x74E1
-0x74E2
-0x74E3
-0x74E4
-0x74E5
-0x74E6
-0x74E8
-0x74E9
-0x74EC
-0x74EE
-0x74F4
-0x74F5
-0x74F6
-0x74F7
-0x74FB
-0x74FD
-0x74FE
-0x74FF
-0x7500
-0x7502
-0x7503
-0x7504
-0x7507
-0x7508
-0x750B
-0x750C
-0x750D
-0x750F
-0x7510
-0x7511
-0x7512
-0x7513
-0x7514
-0x7515
-0x7516
-0x7517
-0x7518
-0x751A
-0x751C
-0x751D
-0x751F
-0x7521
-0x7522
-0x7525
-0x7526
-0x7528
-0x7529
-0x752A
-0x752B
-0x752C
-0x752D
-0x752E
-0x752F
-0x7530
-0x7531
-0x7532
-0x7533
-0x7537
-0x7538
-0x7539
-0x753A
-0x753D
-0x753E
-0x753F
-0x7540
-0x7547
-0x7548
-0x754B
-0x754C
-0x754E
-0x754F
-0x7554
-0x7559
-0x755A
-0x755B
-0x755C
-0x755D
-0x755F
-0x7562
-0x7563
-0x7564
-0x7565
-0x7566
-0x756A
-0x756B
-0x756C
-0x756F
-0x7570
-0x7576
-0x7577
-0x7578
-0x7579
-0x757D
-0x757E
-0x757F
-0x7580
-0x7584
-0x7586
-0x7587
-0x758A
-0x758B
-0x758C
-0x758F
-0x7590
-0x7591
-0x7594
-0x7595
-0x7598
-0x7599
-0x759A
-0x759D
-0x75A2
-0x75A3
-0x75A4
-0x75A5
-0x75A7
-0x75AA
-0x75AB
-0x75B0
-0x75B2
-0x75B3
-0x75B5
-0x75B6
-0x75B8
-0x75B9
-0x75BA
-0x75BB
-0x75BC
-0x75BD
-0x75BE
-0x75BF
-0x75C0
-0x75C1
-0x75C2
-0x75C4
-0x75C5
-0x75C7
-0x75CA
-0x75CB
-0x75CC
-0x75CD
-0x75CE
-0x75CF
-0x75D0
-0x75D1
-0x75D2
-0x75D4
-0x75D5
-0x75D7
-0x75D8
-0x75D9
-0x75DA
-0x75DB
-0x75DD
-0x75DE
-0x75DF
-0x75E0
-0x75E1
-0x75E2
-0x75E3
-0x75E4
-0x75E6
-0x75E7
-0x75ED
-0x75EF
-0x75F0
-0x75F1
-0x75F2
-0x75F3
-0x75F4
-0x75F5
-0x75F6
-0x75F7
-0x75F8
-0x75F9
-0x75FA
-0x75FB
-0x75FC
-0x75FD
-0x75FE
-0x75FF
-0x7600
-0x7601
-0x7603
-0x7608
-0x7609
-0x760A
-0x760B
-0x760C
-0x760D
-0x760F
-0x7610
-0x7611
-0x7613
-0x7614
-0x7615
-0x7616
-0x7619
-0x761A
-0x761B
-0x761C
-0x761D
-0x761E
-0x761F
-0x7620
-0x7621
-0x7622
-0x7623
-0x7624
-0x7625
-0x7626
-0x7627
-0x7628
-0x7629
-0x762D
-0x762F
-0x7630
-0x7631
-0x7632
-0x7633
-0x7634
-0x7635
-0x7638
-0x763A
-0x763C
-0x763D
-0x7642
-0x7643
-0x7646
-0x7647
-0x7648
-0x7649
-0x764C
-0x7650
-0x7652
-0x7653
-0x7656
-0x7657
-0x7658
-0x7659
-0x765A
-0x765C
-0x765F
-0x7660
-0x7661
-0x7662
-0x7664
-0x7665
-0x7669
-0x766A
-0x766C
-0x766D
-0x766E
-0x7670
-0x7671
-0x7672
-0x7675
-0x7678
-0x7679
-0x767B
-0x767C
-0x767D
-0x767E
-0x767F
-0x7681
-0x7682
-0x7684
-0x7686
-0x7687
-0x7688
-0x7689
-0x768A
-0x768B
-0x768E
-0x768F
-0x7692
-0x7693
-0x7695
-0x7696
-0x7699
-0x769A
-0x769B
-0x769C
-0x769D
-0x769E
-0x76A4
-0x76A6
-0x76AA
-0x76AB
-0x76AD
-0x76AE
-0x76AF
-0x76B0
-0x76B4
-0x76B5
-0x76B8
-0x76BA
-0x76BB
-0x76BD
-0x76BE
-0x76BF
-0x76C2
-0x76C3
-0x76C4
-0x76C5
-0x76C6
-0x76C8
-0x76C9
-0x76CA
-0x76CD
-0x76CE
-0x76D2
-0x76D3
-0x76D4
-0x76DA
-0x76DB
-0x76DC
-0x76DD
-0x76DE
-0x76DF
-0x76E1
-0x76E3
-0x76E4
-0x76E5
-0x76E6
-0x76E7
-0x76E9
-0x76EA
-0x76EC
-0x76ED
-0x76EE
-0x76EF
-0x76F0
-0x76F1
-0x76F2
-0x76F3
-0x76F4
-0x76F5
-0x76F7
-0x76F8
-0x76F9
-0x76FA
-0x76FB
-0x76FC
-0x76FE
-0x7701
-0x7703
-0x7704
-0x7705
-0x7707
-0x7708
-0x7709
-0x770A
-0x770B
-0x7710
-0x7711
-0x7712
-0x7713
-0x7715
-0x7719
-0x771A
-0x771B
-0x771D
-0x771F
-0x7720
-0x7722
-0x7723
-0x7725
-0x7727
-0x7728
-0x7729
-0x772D
-0x772F
-0x7731
-0x7732
-0x7733
-0x7734
-0x7735
-0x7736
-0x7737
-0x7738
-0x7739
-0x773A
-0x773B
-0x773C
-0x773D
-0x773E
-0x7744
-0x7745
-0x7746
-0x7747
-0x774A
-0x774B
-0x774C
-0x774D
-0x774E
-0x774F
-0x7752
-0x7754
-0x7755
-0x7756
-0x7759
-0x775A
-0x775B
-0x775C
-0x775E
-0x775F
-0x7760
-0x7761
-0x7762
-0x7763
-0x7765
-0x7766
-0x7767
-0x7768
-0x7769
-0x776A
-0x776B
-0x776C
-0x776D
-0x776E
-0x776F
-0x7779
-0x777C
-0x777D
-0x777E
-0x777F
-0x7780
-0x7781
-0x7782
-0x7783
-0x7784
-0x7785
-0x7787
-0x7788
-0x7789
-0x778B
-0x778C
-0x778D
-0x778E
-0x778F
-0x7791
-0x7795
-0x7797
-0x7799
-0x779A
-0x779B
-0x779C
-0x779D
-0x779E
-0x779F
-0x77A0
-0x77A1
-0x77A2
-0x77A3
-0x77A5
-0x77A7
-0x77A8
-0x77AA
-0x77AB
-0x77AC
-0x77AD
-0x77B0
-0x77B1
-0x77B2
-0x77B3
-0x77B4
-0x77B5
-0x77B6
-0x77B7
-0x77BA
-0x77BB
-0x77BC
-0x77BD
-0x77BF
-0x77C2
-0x77C4
-0x77C7
-0x77C9
-0x77CA
-0x77CC
-0x77CD
-0x77CE
-0x77CF
-0x77D0
-0x77D3
-0x77D4
-0x77D5
-0x77D7
-0x77D8
-0x77D9
-0x77DA
-0x77DB
-0x77DC
-0x77DE
-0x77E0
-0x77E2
-0x77E3
-0x77E5
-0x77E7
-0x77E8
-0x77E9
-0x77EC
-0x77ED
-0x77EE
-0x77EF
-0x77F0
-0x77F1
-0x77F2
-0x77F3
-0x77F7
-0x77F8
-0x77F9
-0x77FA
-0x77FB
-0x77FC
-0x77FD
-0x7802
-0x7803
-0x7805
-0x7806
-0x7809
-0x780C
-0x780D
-0x780E
-0x780F
-0x7810
-0x7811
-0x7812
-0x7813
-0x7814
-0x781D
-0x781F
-0x7820
-0x7821
-0x7822
-0x7823
-0x7825
-0x7826
-0x7827
-0x7828
-0x7829
-0x782A
-0x782B
-0x782C
-0x782D
-0x782E
-0x782F
-0x7830
-0x7831
-0x7832
-0x7833
-0x7834
-0x7835
-0x7837
-0x7838
-0x7843
-0x7845
-0x7848
-0x7849
-0x784A
-0x784C
-0x784D
-0x784E
-0x7850
-0x7852
-0x785C
-0x785D
-0x785E
-0x7860
-0x7862
-0x7864
-0x7865
-0x7868
-0x7869
-0x786A
-0x786B
-0x786C
-0x786D
-0x786E
-0x786F
-0x7870
-0x7871
-0x7879
-0x787B
-0x787C
-0x787E
-0x787F
-0x7880
-0x7883
-0x7884
-0x7885
-0x7886
-0x7887
-0x7889
-0x788C
-0x788E
-0x788F
-0x7891
-0x7893
-0x7894
-0x7895
-0x7896
-0x7897
-0x7898
-0x7899
-0x789A
-0x789E
-0x789F
-0x78A0
-0x78A1
-0x78A2
-0x78A3
-0x78A4
-0x78A5
-0x78A7
-0x78A8
-0x78A9
-0x78AA
-0x78AB
-0x78AC
-0x78AD
-0x78B0
-0x78B2
-0x78B3
-0x78B4
-0x78BA
-0x78BB
-0x78BC
-0x78BE
-0x78C1
-0x78C3
-0x78C4
-0x78C5
-0x78C8
-0x78C9
-0x78CA
-0x78CB
-0x78CC
-0x78CD
-0x78CE
-0x78CF
-0x78D0
-0x78D1
-0x78D4
-0x78D5
-0x78DA
-0x78DB
-0x78DD
-0x78DE
-0x78DF
-0x78E0
-0x78E1
-0x78E2
-0x78E3
-0x78E5
-0x78E7
-0x78E8
-0x78E9
-0x78EA
-0x78EC
-0x78ED
-0x78EF
-0x78F2
-0x78F3
-0x78F4
-0x78F7
-0x78F9
-0x78FA
-0x78FB
-0x78FC
-0x78FD
-0x78FE
-0x78FF
-0x7901
-0x7902
-0x7904
-0x7905
-0x7909
-0x790C
-0x790E
-0x7910
-0x7911
-0x7912
-0x7913
-0x7914
-0x7917
-0x7919
-0x791B
-0x791C
-0x791D
-0x791E
-0x7921
-0x7923
-0x7924
-0x7925
-0x7926
-0x7927
-0x7928
-0x7929
-0x792A
-0x792B
-0x792C
-0x792D
-0x792F
-0x7931
-0x7935
-0x7938
-0x7939
-0x793A
-0x793D
-0x793E
-0x793F
-0x7940
-0x7941
-0x7942
-0x7944
-0x7945
-0x7946
-0x7947
-0x7948
-0x7949
-0x794A
-0x794B
-0x794C
-0x794F
-0x7950
-0x7951
-0x7952
-0x7953
-0x7954
-0x7955
-0x7956
-0x7957
-0x795A
-0x795B
-0x795C
-0x795D
-0x795E
-0x795F
-0x7960
-0x7961
-0x7963
-0x7964
-0x7965
-0x7967
-0x7968
-0x7969
-0x796A
-0x796B
-0x796D
-0x7970
-0x7972
-0x7973
-0x7974
-0x7979
-0x797A
-0x797C
-0x797D
-0x797F
-0x7981
-0x7982
-0x7988
-0x798A
-0x798B
-0x798D
-0x798E
-0x798F
-0x7990
-0x7992
-0x7993
-0x7994
-0x7995
-0x7996
-0x7997
-0x7998
-0x799A
-0x799B
-0x799C
-0x79A0
-0x79A1
-0x79A2
-0x79A4
-0x79A6
-0x79A7
-0x79A8
-0x79AA
-0x79AB
-0x79AC
-0x79AD
-0x79AE
-0x79B0
-0x79B1
-0x79B2
-0x79B3
-0x79B4
-0x79B6
-0x79B7
-0x79B8
-0x79B9
-0x79BA
-0x79BB
-0x79BD
-0x79BE
-0x79BF
-0x79C0
-0x79C1
-0x79C5
-0x79C8
-0x79C9
-0x79CB
-0x79CD
-0x79CE
-0x79CF
-0x79D1
-0x79D2
-0x79D5
-0x79D6
-0x79D8
-0x79DC
-0x79DD
-0x79DE
-0x79DF
-0x79E0
-0x79E3
-0x79E4
-0x79E6
-0x79E7
-0x79E9
-0x79EA
-0x79EB
-0x79EC
-0x79ED
-0x79EE
-0x79F6
-0x79F7
-0x79F8
-0x79FA
-0x79FB
-0x7A00
-0x7A02
-0x7A03
-0x7A04
-0x7A05
-0x7A08
-0x7A0A
-0x7A0B
-0x7A0C
-0x7A0D
-0x7A10
-0x7A11
-0x7A12
-0x7A13
-0x7A14
-0x7A15
-0x7A17
-0x7A18
-0x7A19
-0x7A1A
-0x7A1B
-0x7A1C
-0x7A1E
-0x7A1F
-0x7A20
-0x7A22
-0x7A26
-0x7A28
-0x7A2B
-0x7A2E
-0x7A2F
-0x7A30
-0x7A31
-0x7A37
-0x7A39
-0x7A3B
-0x7A3C
-0x7A3D
-0x7A3F
-0x7A40
-0x7A44
-0x7A46
-0x7A47
-0x7A48
-0x7A4A
-0x7A4B
-0x7A4C
-0x7A4D
-0x7A4E
-0x7A54
-0x7A56
-0x7A57
-0x7A58
-0x7A5A
-0x7A5B
-0x7A5C
-0x7A5F
-0x7A60
-0x7A61
-0x7A62
-0x7A67
-0x7A68
-0x7A69
-0x7A6B
-0x7A6C
-0x7A6D
-0x7A6E
-0x7A70
-0x7A71
-0x7A74
-0x7A75
-0x7A76
-0x7A78
-0x7A79
-0x7A7A
-0x7A7B
-0x7A7E
-0x7A7F
-0x7A80
-0x7A81
-0x7A84
-0x7A85
-0x7A86
-0x7A87
-0x7A88
-0x7A89
-0x7A8A
-0x7A8B
-0x7A8C
-0x7A8F
-0x7A90
-0x7A92
-0x7A94
-0x7A95
-0x7A96
-0x7A97
-0x7A98
-0x7A99
-0x7A9E
-0x7A9F
-0x7AA0
-0x7AA2
-0x7AA3
-0x7AA8
-0x7AA9
-0x7AAA
-0x7AAB
-0x7AAC
-0x7AAE
-0x7AAF
-0x7AB1
-0x7AB2
-0x7AB3
-0x7AB4
-0x7AB5
-0x7AB6
-0x7AB7
-0x7AB8
-0x7ABA
-0x7ABE
-0x7ABF
-0x7AC0
-0x7AC1
-0x7AC4
-0x7AC5
-0x7AC7
-0x7ACA
-0x7ACB
-0x7AD1
-0x7AD8
-0x7AD9
-0x7ADF
-0x7AE0
-0x7AE3
-0x7AE4
-0x7AE5
-0x7AE6
-0x7AEB
-0x7AED
-0x7AEE
-0x7AEF
-0x7AF6
-0x7AF7
-0x7AF9
-0x7AFA
-0x7AFB
-0x7AFD
-0x7AFF
-0x7B00
-0x7B01
-0x7B04
-0x7B05
-0x7B06
-0x7B08
-0x7B09
-0x7B0A
-0x7B0E
-0x7B0F
-0x7B10
-0x7B11
-0x7B12
-0x7B13
-0x7B18
-0x7B19
-0x7B1A
-0x7B1B
-0x7B1D
-0x7B1E
-0x7B20
-0x7B22
-0x7B23
-0x7B24
-0x7B25
-0x7B26
-0x7B28
-0x7B2A
-0x7B2B
-0x7B2C
-0x7B2D
-0x7B2E
-0x7B2F
-0x7B30
-0x7B31
-0x7B32
-0x7B33
-0x7B34
-0x7B35
-0x7B38
-0x7B3B
-0x7B40
-0x7B44
-0x7B45
-0x7B46
-0x7B47
-0x7B48
-0x7B49
-0x7B4A
-0x7B4B
-0x7B4C
-0x7B4D
-0x7B4E
-0x7B4F
-0x7B50
-0x7B51
-0x7B52
-0x7B54
-0x7B56
-0x7B58
-0x7B60
-0x7B61
-0x7B63
-0x7B64
-0x7B65
-0x7B66
-0x7B67
-0x7B69
-0x7B6D
-0x7B6E
-0x7B70
-0x7B71
-0x7B72
-0x7B73
-0x7B74
-0x7B75
-0x7B76
-0x7B77
-0x7B78
-0x7B82
-0x7B84
-0x7B85
-0x7B87
-0x7B88
-0x7B8A
-0x7B8B
-0x7B8C
-0x7B8D
-0x7B8E
-0x7B8F
-0x7B90
-0x7B91
-0x7B94
-0x7B95
-0x7B96
-0x7B97
-0x7B98
-0x7B99
-0x7B9B
-0x7B9C
-0x7B9D
-0x7BA0
-0x7BA1
-0x7BA4
-0x7BAC
-0x7BAD
-0x7BAF
-0x7BB1
-0x7BB4
-0x7BB5
-0x7BB7
-0x7BB8
-0x7BB9
-0x7BBE
-0x7BC0
-0x7BC1
-0x7BC4
-0x7BC6
-0x7BC7
-0x7BC9
-0x7BCA
-0x7BCB
-0x7BCC
-0x7BCE
-0x7BD4
-0x7BD5
-0x7BD8
-0x7BD9
-0x7BDA
-0x7BDB
-0x7BDC
-0x7BDD
-0x7BDE
-0x7BDF
-0x7BE0
-0x7BE1
-0x7BE2
-0x7BE3
-0x7BE4
-0x7BE5
-0x7BE6
-0x7BE7
-0x7BE8
-0x7BE9
-0x7BEA
-0x7BEB
-0x7BF0
-0x7BF1
-0x7BF2
-0x7BF3
-0x7BF4
-0x7BF7
-0x7BF8
-0x7BF9
-0x7BFB
-0x7BFD
-0x7BFE
-0x7BFF
-0x7C00
-0x7C01
-0x7C02
-0x7C03
-0x7C05
-0x7C06
-0x7C07
-0x7C09
-0x7C0A
-0x7C0B
-0x7C0C
-0x7C0D
-0x7C0E
-0x7C0F
-0x7C10
-0x7C11
-0x7C19
-0x7C1C
-0x7C1D
-0x7C1E
-0x7C1F
-0x7C20
-0x7C21
-0x7C22
-0x7C23
-0x7C25
-0x7C26
-0x7C27
-0x7C28
-0x7C29
-0x7C2A
-0x7C2B
-0x7C2C
-0x7C2D
-0x7C30
-0x7C33
-0x7C37
-0x7C38
-0x7C39
-0x7C3B
-0x7C3C
-0x7C3D
-0x7C3E
-0x7C3F
-0x7C40
-0x7C43
-0x7C45
-0x7C47
-0x7C48
-0x7C49
-0x7C4A
-0x7C4C
-0x7C4D
-0x7C50
-0x7C53
-0x7C54
-0x7C57
-0x7C59
-0x7C5A
-0x7C5B
-0x7C5C
-0x7C5F
-0x7C60
-0x7C63
-0x7C64
-0x7C65
-0x7C66
-0x7C67
-0x7C69
-0x7C6A
-0x7C6B
-0x7C6C
-0x7C6E
-0x7C6F
-0x7C72
-0x7C73
-0x7C75
-0x7C78
-0x7C79
-0x7C7A
-0x7C7D
-0x7C7F
-0x7C80
-0x7C81
-0x7C84
-0x7C85
-0x7C88
-0x7C89
-0x7C8A
-0x7C8C
-0x7C8D
-0x7C91
-0x7C92
-0x7C94
-0x7C95
-0x7C96
-0x7C97
-0x7C98
-0x7C9E
-0x7C9F
-0x7CA1
-0x7CA2
-0x7CA3
-0x7CA5
-0x7CA8
-0x7CAF
-0x7CB1
-0x7CB2
-0x7CB3
-0x7CB4
-0x7CB5
-0x7CB9
-0x7CBA
-0x7CBB
-0x7CBC
-0x7CBD
-0x7CBE
-0x7CBF
-0x7CC5
-0x7CC8
-0x7CCA
-0x7CCB
-0x7CCC
-0x7CCE
-0x7CD0
-0x7CD1
-0x7CD2
-0x7CD4
-0x7CD5
-0x7CD6
-0x7CD7
-0x7CD9
-0x7CDC
-0x7CDD
-0x7CDE
-0x7CDF
-0x7CE0
-0x7CE2
-0x7CE7
-0x7CE8
-0x7CEA
-0x7CEC
-0x7CEE
-0x7CEF
-0x7CF0
-0x7CF1
-0x7CF2
-0x7CF4
-0x7CF6
-0x7CF7
-0x7CF8
-0x7CFB
-0x7CFD
-0x7CFE
-0x7D00
-0x7D01
-0x7D02
-0x7D03
-0x7D04
-0x7D05
-0x7D06
-0x7D07
-0x7D08
-0x7D09
-0x7D0A
-0x7D0B
-0x7D0C
-0x7D0D
-0x7D0E
-0x7D0F
-0x7D10
-0x7D11
-0x7D12
-0x7D13
-0x7D14
-0x7D15
-0x7D16
-0x7D17
-0x7D18
-0x7D19
-0x7D1A
-0x7D1B
-0x7D1C
-0x7D1D
-0x7D1E
-0x7D1F
-0x7D20
-0x7D21
-0x7D22
-0x7D28
-0x7D29
-0x7D2B
-0x7D2C
-0x7D2E
-0x7D2F
-0x7D30
-0x7D31
-0x7D32
-0x7D33
-0x7D35
-0x7D36
-0x7D38
-0x7D39
-0x7D3A
-0x7D3B
-0x7D3C
-0x7D3D
-0x7D3E
-0x7D3F
-0x7D40
-0x7D41
-0x7D42
-0x7D43
-0x7D44
-0x7D45
-0x7D46
-0x7D47
-0x7D4A
-0x7D4E
-0x7D4F
-0x7D50
-0x7D51
-0x7D52
-0x7D53
-0x7D54
-0x7D55
-0x7D56
-0x7D58
-0x7D5B
-0x7D5C
-0x7D5E
-0x7D5F
-0x7D61
-0x7D62
-0x7D63
-0x7D66
-0x7D67
-0x7D68
-0x7D69
-0x7D6A
-0x7D6B
-0x7D6D
-0x7D6E
-0x7D6F
-0x7D70
-0x7D71
-0x7D72
-0x7D73
-0x7D79
-0x7D7A
-0x7D7B
-0x7D7C
-0x7D7D
-0x7D7F
-0x7D80
-0x7D81
-0x7D83
-0x7D84
-0x7D85
-0x7D86
-0x7D88
-0x7D8C
-0x7D8D
-0x7D8E
-0x7D8F
-0x7D91
-0x7D92
-0x7D93
-0x7D94
-0x7D96
-0x7D9C
-0x7D9D
-0x7D9E
-0x7D9F
-0x7DA0
-0x7DA1
-0x7DA2
-0x7DA3
-0x7DA6
-0x7DA7
-0x7DA9
-0x7DAA
-0x7DAC
-0x7DAD
-0x7DAE
-0x7DAF
-0x7DB0
-0x7DB1
-0x7DB2
-0x7DB4
-0x7DB5
-0x7DB7
-0x7DB8
-0x7DB9
-0x7DBA
-0x7DBB
-0x7DBC
-0x7DBD
-0x7DBE
-0x7DBF
-0x7DC0
-0x7DC1
-0x7DC2
-0x7DC4
-0x7DC5
-0x7DC6
-0x7DC7
-0x7DC9
-0x7DCA
-0x7DCB
-0x7DCC
-0x7DCE
-0x7DD2
-0x7DD7
-0x7DD8
-0x7DD9
-0x7DDA
-0x7DDB
-0x7DDD
-0x7DDE
-0x7DDF
-0x7DE0
-0x7DE1
-0x7DE3
-0x7DE6
-0x7DE7
-0x7DE8
-0x7DE9
-0x7DEA
-0x7DEC
-0x7DEE
-0x7DEF
-0x7DF0
-0x7DF1
-0x7DF2
-0x7DF3
-0x7DF4
-0x7DF6
-0x7DF7
-0x7DF9
-0x7DFA
-0x7DFB
-0x7E03
-0x7E08
-0x7E09
-0x7E0A
-0x7E0B
-0x7E0C
-0x7E0D
-0x7E0E
-0x7E0F
-0x7E10
-0x7E11
-0x7E12
-0x7E13
-0x7E14
-0x7E15
-0x7E16
-0x7E17
-0x7E1A
-0x7E1B
-0x7E1C
-0x7E1D
-0x7E1E
-0x7E1F
-0x7E20
-0x7E21
-0x7E22
-0x7E23
-0x7E24
-0x7E25
-0x7E29
-0x7E2A
-0x7E2B
-0x7E2D
-0x7E2E
-0x7E2F
-0x7E30
-0x7E31
-0x7E32
-0x7E33
-0x7E34
-0x7E35
-0x7E36
-0x7E37
-0x7E38
-0x7E39
-0x7E3A
-0x7E3B
-0x7E3C
-0x7E3D
-0x7E3E
-0x7E3F
-0x7E40
-0x7E41
-0x7E42
-0x7E43
-0x7E44
-0x7E45
-0x7E46
-0x7E47
-0x7E48
-0x7E49
-0x7E4C
-0x7E50
-0x7E51
-0x7E52
-0x7E53
-0x7E54
-0x7E55
-0x7E56
-0x7E57
-0x7E58
-0x7E59
-0x7E5A
-0x7E5C
-0x7E5E
-0x7E5F
-0x7E60
-0x7E61
-0x7E62
-0x7E63
-0x7E68
-0x7E69
-0x7E6A
-0x7E6B
-0x7E6D
-0x7E6F
-0x7E70
-0x7E72
-0x7E73
-0x7E74
-0x7E75
-0x7E76
-0x7E77
-0x7E78
-0x7E79
-0x7E7A
-0x7E7B
-0x7E7C
-0x7E7D
-0x7E7E
-0x7E80
-0x7E81
-0x7E82
-0x7E86
-0x7E87
-0x7E88
-0x7E8A
-0x7E8B
-0x7E8C
-0x7E8D
-0x7E8F
-0x7E91
-0x7E93
-0x7E94
-0x7E95
-0x7E96
-0x7E97
-0x7E98
-0x7E99
-0x7E9A
-0x7E9B
-0x7E9C
-0x7F36
-0x7F38
-0x7F39
-0x7F3A
-0x7F3D
-0x7F3E
-0x7F3F
-0x7F43
-0x7F44
-0x7F45
-0x7F48
-0x7F4A
-0x7F4B
-0x7F4C
-0x7F4D
-0x7F4F
-0x7F50
-0x7F51
-0x7F54
-0x7F55
-0x7F58
-0x7F5B
-0x7F5C
-0x7F5D
-0x7F5E
-0x7F5F
-0x7F60
-0x7F61
-0x7F63
-0x7F65
-0x7F66
-0x7F67
-0x7F68
-0x7F69
-0x7F6A
-0x7F6B
-0x7F6C
-0x7F6D
-0x7F6E
-0x7F70
-0x7F72
-0x7F73
-0x7F75
-0x7F76
-0x7F77
-0x7F79
-0x7F7A
-0x7F7B
-0x7F7C
-0x7F7D
-0x7F7E
-0x7F7F
-0x7F83
-0x7F85
-0x7F86
-0x7F87
-0x7F88
-0x7F89
-0x7F8A
-0x7F8B
-0x7F8C
-0x7F8D
-0x7F8E
-0x7F91
-0x7F92
-0x7F94
-0x7F95
-0x7F96
-0x7F9A
-0x7F9B
-0x7F9C
-0x7F9D
-0x7F9E
-0x7FA0
-0x7FA1
-0x7FA2
-0x7FA4
-0x7FA5
-0x7FA6
-0x7FA7
-0x7FA8
-0x7FA9
-0x7FAC
-0x7FAD
-0x7FAF
-0x7FB0
-0x7FB1
-0x7FB2
-0x7FB3
-0x7FB5
-0x7FB6
-0x7FB7
-0x7FB8
-0x7FB9
-0x7FBA
-0x7FBB
-0x7FBC
-0x7FBD
-0x7FBE
-0x7FBF
-0x7FC0
-0x7FC1
-0x7FC2
-0x7FC3
-0x7FC5
-0x7FC7
-0x7FC9
-0x7FCA
-0x7FCB
-0x7FCC
-0x7FCD
-0x7FCE
-0x7FCF
-0x7FD0
-0x7FD1
-0x7FD2
-0x7FD4
-0x7FD5
-0x7FD7
-0x7FDB
-0x7FDC
-0x7FDE
-0x7FDF
-0x7FE0
-0x7FE1
-0x7FE2
-0x7FE3
-0x7FE5
-0x7FE6
-0x7FE8
-0x7FE9
-0x7FEA
-0x7FEB
-0x7FEC
-0x7FED
-0x7FEE
-0x7FEF
-0x7FF0
-0x7FF1
-0x7FF2
-0x7FF3
-0x7FF4
-0x7FF5
-0x7FF7
-0x7FF8
-0x7FF9
-0x7FFB
-0x7FFC
-0x7FFD
-0x7FFE
-0x7FFF
-0x8000
-0x8001
-0x8003
-0x8004
-0x8005
-0x8006
-0x8007
-0x800B
-0x800C
-0x800D
-0x800E
-0x800F
-0x8010
-0x8011
-0x8012
-0x8014
-0x8015
-0x8016
-0x8017
-0x8018
-0x8019
-0x801B
-0x801C
-0x801E
-0x801F
-0x8021
-0x8024
-0x8026
-0x8028
-0x8029
-0x802A
-0x802C
-0x8030
-0x8033
-0x8034
-0x8035
-0x8036
-0x8037
-0x8039
-0x803D
-0x803E
-0x803F
-0x8043
-0x8046
-0x8047
-0x8048
-0x804A
-0x804F
-0x8050
-0x8051
-0x8052
-0x8056
-0x8058
-0x805A
-0x805C
-0x805D
-0x805E
-0x8064
-0x8067
-0x806C
-0x806F
-0x8070
-0x8071
-0x8072
-0x8073
-0x8075
-0x8076
-0x8077
-0x8078
-0x8079
-0x807D
-0x807E
-0x807F
-0x8082
-0x8084
-0x8085
-0x8086
-0x8087
-0x8089
-0x808A
-0x808B
-0x808C
-0x808F
-0x8090
-0x8092
-0x8093
-0x8095
-0x8096
-0x8098
-0x8099
-0x809A
-0x809B
-0x809C
-0x809D
-0x80A1
-0x80A2
-0x80A3
-0x80A5
-0x80A9
-0x80AA
-0x80AB
-0x80AD
-0x80AE
-0x80AF
-0x80B1
-0x80B2
-0x80B4
-0x80B5
-0x80B8
-0x80BA
-0x80C2
-0x80C3
-0x80C4
-0x80C5
-0x80C7
-0x80C8
-0x80C9
-0x80CA
-0x80CC
-0x80CD
-0x80CE
-0x80CF
-0x80D0
-0x80D1
-0x80D4
-0x80D5
-0x80D6
-0x80D7
-0x80D8
-0x80D9
-0x80DA
-0x80DB
-0x80DC
-0x80DD
-0x80DE
-0x80E0
-0x80E1
-0x80E3
-0x80E4
-0x80E5
-0x80E6
-0x80ED
-0x80EF
-0x80F0
-0x80F1
-0x80F2
-0x80F3
-0x80F4
-0x80F5
-0x80F8
-0x80F9
-0x80FA
-0x80FB
-0x80FC
-0x80FD
-0x80FE
-0x8100
-0x8101
-0x8102
-0x8105
-0x8106
-0x8108
-0x810A
-0x8115
-0x8116
-0x8118
-0x8119
-0x811B
-0x811D
-0x811E
-0x811F
-0x8121
-0x8122
-0x8123
-0x8124
-0x8125
-0x8127
-0x8129
-0x812B
-0x812C
-0x812D
-0x812F
-0x8130
-0x8139
-0x813A
-0x813D
-0x813E
-0x8143
-0x8144
-0x8146
-0x8147
-0x814A
-0x814B
-0x814C
-0x814D
-0x814E
-0x814F
-0x8150
-0x8151
-0x8152
-0x8153
-0x8154
-0x8155
-0x815B
-0x815C
-0x815E
-0x8160
-0x8161
-0x8162
-0x8164
-0x8165
-0x8166
-0x8167
-0x8169
-0x816B
-0x816E
-0x816F
-0x8170
-0x8171
-0x8172
-0x8173
-0x8174
-0x8176
-0x8177
-0x8178
-0x8179
-0x817A
-0x817F
-0x8180
-0x8182
-0x8183
-0x8186
-0x8187
-0x8188
-0x8189
-0x818A
-0x818B
-0x818C
-0x818D
-0x818F
-0x8195
-0x8197
-0x8198
-0x8199
-0x819A
-0x819B
-0x819C
-0x819D
-0x819E
-0x819F
-0x81A0
-0x81A2
-0x81A3
-0x81A6
-0x81A7
-0x81A8
-0x81A9
-0x81AB
-0x81AC
-0x81AE
-0x81B0
-0x81B1
-0x81B2
-0x81B3
-0x81B4
-0x81B5
-0x81B7
-0x81B9
-0x81BA
-0x81BB
-0x81BC
-0x81BD
-0x81BE
-0x81BF
-0x81C0
-0x81C2
-0x81C3
-0x81C4
-0x81C5
-0x81C6
-0x81C7
-0x81C9
-0x81CA
-0x81CC
-0x81CD
-0x81CF
-0x81D0
-0x81D1
-0x81D2
-0x81D5
-0x81D7
-0x81D8
-0x81D9
-0x81DA
-0x81DB
-0x81DD
-0x81DE
-0x81DF
-0x81E0
-0x81E1
-0x81E2
-0x81E3
-0x81E5
-0x81E6
-0x81E7
-0x81E8
-0x81E9
-0x81EA
-0x81EC
-0x81ED
-0x81EE
-0x81F2
-0x81F3
-0x81F4
-0x81F7
-0x81F8
-0x81F9
-0x81FA
-0x81FB
-0x81FC
-0x81FE
-0x81FF
-0x8200
-0x8201
-0x8202
-0x8204
-0x8205
-0x8207
-0x8208
-0x8209
-0x820A
-0x820B
-0x820C
-0x820D
-0x8210
-0x8211
-0x8212
-0x8214
-0x8215
-0x8216
-0x821B
-0x821C
-0x821D
-0x821E
-0x821F
-0x8220
-0x8221
-0x8222
-0x8225
-0x8228
-0x822A
-0x822B
-0x822C
-0x822F
-0x8232
-0x8233
-0x8234
-0x8235
-0x8236
-0x8237
-0x8238
-0x8239
-0x823A
-0x823C
-0x823D
-0x823F
-0x8240
-0x8242
-0x8244
-0x8245
-0x8247
-0x8249
-0x824B
-0x824E
-0x824F
-0x8250
-0x8251
-0x8252
-0x8253
-0x8255
-0x8256
-0x8257
-0x8258
-0x8259
-0x825A
-0x825B
-0x825C
-0x825E
-0x825F
-0x8261
-0x8263
-0x8264
-0x8266
-0x8268
-0x8269
-0x826B
-0x826C
-0x826D
-0x826E
-0x826F
-0x8271
-0x8272
-0x8274
-0x8275
-0x8277
-0x8278
-0x827C
-0x827D
-0x827E
-0x827F
-0x8280
-0x8283
-0x8284
-0x8285
-0x828A
-0x828B
-0x828D
-0x828E
-0x828F
-0x8290
-0x8291
-0x8292
-0x8293
-0x8294
-0x8298
-0x8299
-0x829A
-0x829B
-0x829D
-0x829E
-0x829F
-0x82A0
-0x82A1
-0x82A2
-0x82A3
-0x82A4
-0x82A5
-0x82A7
-0x82A8
-0x82A9
-0x82AB
-0x82AC
-0x82AD
-0x82AE
-0x82AF
-0x82B0
-0x82B1
-0x82B3
-0x82B4
-0x82B5
-0x82B6
-0x82B7
-0x82B8
-0x82B9
-0x82BA
-0x82BB
-0x82BC
-0x82BD
-0x82BE
-0x82C0
-0x82C2
-0x82C3
-0x82D1
-0x82D2
-0x82D3
-0x82D4
-0x82D5
-0x82D6
-0x82D7
-0x82D9
-0x82DB
-0x82DC
-0x82DE
-0x82DF
-0x82E0
-0x82E1
-0x82E3
-0x82E4
-0x82E5
-0x82E6
-0x82E7
-0x82E8
-0x82EA
-0x82EB
-0x82EC
-0x82ED
-0x82EF
-0x82F0
-0x82F1
-0x82F2
-0x82F3
-0x82F4
-0x82F5
-0x82F6
-0x82F9
-0x82FA
-0x82FB
-0x82FE
-0x8300
-0x8301
-0x8302
-0x8303
-0x8304
-0x8305
-0x8306
-0x8307
-0x8308
-0x8309
-0x830C
-0x830D
-0x8316
-0x8317
-0x8319
-0x831B
-0x831C
-0x831E
-0x8320
-0x8322
-0x8324
-0x8325
-0x8326
-0x8327
-0x8328
-0x8329
-0x832A
-0x832B
-0x832C
-0x832D
-0x832F
-0x8331
-0x8332
-0x8333
-0x8334
-0x8335
-0x8336
-0x8337
-0x8338
-0x8339
-0x833A
-0x833B
-0x833C
-0x833F
-0x8340
-0x8341
-0x8342
-0x8343
-0x8344
-0x8345
-0x8347
-0x8348
-0x8349
-0x834A
-0x834B
-0x834C
-0x834D
-0x834E
-0x834F
-0x8350
-0x8351
-0x8352
-0x8353
-0x8354
-0x8356
-0x8373
-0x8374
-0x8375
-0x8376
-0x8377
-0x8378
-0x837A
-0x837B
-0x837C
-0x837D
-0x837E
-0x837F
-0x8381
-0x8383
-0x8386
-0x8387
-0x8388
-0x8389
-0x838A
-0x838B
-0x838C
-0x838D
-0x838E
-0x838F
-0x8390
-0x8392
-0x8393
-0x8394
-0x8395
-0x8396
-0x8397
-0x8398
-0x8399
-0x839A
-0x839B
-0x839D
-0x839E
-0x83A0
-0x83A2
-0x83A3
-0x83A4
-0x83A5
-0x83A6
-0x83A7
-0x83A8
-0x83A9
-0x83AA
-0x83AB
-0x83AE
-0x83AF
-0x83B0
-0x83BD
-0x83BF
-0x83C0
-0x83C1
-0x83C2
-0x83C3
-0x83C4
-0x83C5
-0x83C6
-0x83C7
-0x83C8
-0x83C9
-0x83CA
-0x83CB
-0x83CC
-0x83CE
-0x83CF
-0x83D1
-0x83D4
-0x83D5
-0x83D6
-0x83D7
-0x83D8
-0x83D9
-0x83DB
-0x83DC
-0x83DD
-0x83DE
-0x83DF
-0x83E0
-0x83E1
-0x83E2
-0x83E3
-0x83E4
-0x83E5
-0x83E7
-0x83E8
-0x83E9
-0x83EA
-0x83EB
-0x83EC
-0x83EE
-0x83EF
-0x83F0
-0x83F1
-0x83F2
-0x83F3
-0x83F4
-0x83F5
-0x83F6
-0x83F8
-0x83F9
-0x83FA
-0x83FB
-0x83FC
-0x83FD
-0x83FE
-0x83FF
-0x8401
-0x8403
-0x8404
-0x8406
-0x8407
-0x8409
-0x840A
-0x840B
-0x840C
-0x840D
-0x840E
-0x840F
-0x8410
-0x8411
-0x8412
-0x8413
-0x841B
-0x8423
-0x8429
-0x842B
-0x842C
-0x842D
-0x842F
-0x8430
-0x8431
-0x8432
-0x8433
-0x8434
-0x8435
-0x8436
-0x8437
-0x8438
-0x8439
-0x843A
-0x843B
-0x843C
-0x843D
-0x843F
-0x8440
-0x8442
-0x8443
-0x8444
-0x8445
-0x8446
-0x8447
-0x8449
-0x844B
-0x844C
-0x844D
-0x844E
-0x8450
-0x8451
-0x8452
-0x8454
-0x8456
-0x8457
-0x8459
-0x845A
-0x845B
-0x845D
-0x845E
-0x845F
-0x8460
-0x8461
-0x8463
-0x8465
-0x8466
-0x8467
-0x8468
-0x8469
-0x846B
-0x846C
-0x846D
-0x846E
-0x846F
-0x8470
-0x8473
-0x8474
-0x8475
-0x8476
-0x8477
-0x8478
-0x8479
-0x847A
-0x847D
-0x847E
-0x8482
-0x8486
-0x848D
-0x848E
-0x848F
-0x8490
-0x8491
-0x8494
-0x8497
-0x8498
-0x8499
-0x849A
-0x849B
-0x849C
-0x849D
-0x849E
-0x849F
-0x84A0
-0x84A1
-0x84A2
-0x84A4
-0x84A7
-0x84A8
-0x84A9
-0x84AA
-0x84AB
-0x84AC
-0x84AE
-0x84AF
-0x84B0
-0x84B1
-0x84B2
-0x84B4
-0x84B6
-0x84B8
-0x84B9
-0x84BA
-0x84BB
-0x84BC
-0x84BF
-0x84C0
-0x84C1
-0x84C2
-0x84C4
-0x84C5
-0x84C6
-0x84C7
-0x84C9
-0x84CA
-0x84CB
-0x84CC
-0x84CD
-0x84CE
-0x84CF
-0x84D0
-0x84D1
-0x84D2
-0x84D3
-0x84D4
-0x84D6
-0x84D7
-0x84DB
-0x84E7
-0x84E8
-0x84E9
-0x84EA
-0x84EB
-0x84EC
-0x84EE
-0x84EF
-0x84F0
-0x84F1
-0x84F2
-0x84F3
-0x84F4
-0x84F6
-0x84F7
-0x84F9
-0x84FA
-0x84FB
-0x84FC
-0x84FD
-0x84FE
-0x84FF
-0x8500
-0x8502
-0x8506
-0x8507
-0x8508
-0x8509
-0x850A
-0x850B
-0x850C
-0x850D
-0x850E
-0x850F
-0x8511
-0x8512
-0x8513
-0x8514
-0x8515
-0x8516
-0x8517
-0x8518
-0x8519
-0x851A
-0x851C
-0x851D
-0x851E
-0x851F
-0x8520
-0x8521
-0x8523
-0x8524
-0x8525
-0x8526
-0x8527
-0x8528
-0x8529
-0x852A
-0x852B
-0x852C
-0x852D
-0x852E
-0x852F
-0x8530
-0x8531
-0x853B
-0x853D
-0x853E
-0x8540
-0x8541
-0x8543
-0x8544
-0x8545
-0x8546
-0x8547
-0x8548
-0x8549
-0x854A
-0x854D
-0x854E
-0x8551
-0x8553
-0x8554
-0x8555
-0x8556
-0x8557
-0x8558
-0x8559
-0x855B
-0x855D
-0x855E
-0x8560
-0x8561
-0x8562
-0x8563
-0x8564
-0x8565
-0x8566
-0x8567
-0x8568
-0x8569
-0x856A
-0x856B
-0x856C
-0x856D
-0x856E
-0x8571
-0x8575
-0x8576
-0x8577
-0x8578
-0x8579
-0x857A
-0x857B
-0x857C
-0x857E
-0x8580
-0x8581
-0x8582
-0x8583
-0x8584
-0x8585
-0x8586
-0x8587
-0x8588
-0x8589
-0x858A
-0x858B
-0x858C
-0x858D
-0x858E
-0x858F
-0x8590
-0x8591
-0x8594
-0x8595
-0x8596
-0x8598
-0x8599
-0x859A
-0x859B
-0x859C
-0x859D
-0x859E
-0x859F
-0x85A0
-0x85A1
-0x85A2
-0x85A3
-0x85A4
-0x85A6
-0x85A7
-0x85A8
-0x85A9
-0x85AA
-0x85AF
-0x85B0
-0x85B1
-0x85B3
-0x85B4
-0x85B5
-0x85B6
-0x85B7
-0x85B8
-0x85B9
-0x85BA
-0x85BD
-0x85BE
-0x85BF
-0x85C0
-0x85C2
-0x85C3
-0x85C4
-0x85C5
-0x85C6
-0x85C7
-0x85C8
-0x85C9
-0x85CB
-0x85CD
-0x85CE
-0x85CF
-0x85D0
-0x85D1
-0x85D2
-0x85D5
-0x85D7
-0x85D8
-0x85D9
-0x85DA
-0x85DC
-0x85DD
-0x85DE
-0x85DF
-0x85E1
-0x85E2
-0x85E3
-0x85E4
-0x85E5
-0x85E6
-0x85E8
-0x85E9
-0x85EA
-0x85EB
-0x85EC
-0x85ED
-0x85EF
-0x85F0
-0x85F1
-0x85F2
-0x85F6
-0x85F7
-0x85F8
-0x85F9
-0x85FA
-0x85FB
-0x85FD
-0x85FE
-0x85FF
-0x8600
-0x8601
-0x8604
-0x8605
-0x8606
-0x8607
-0x8609
-0x860A
-0x860B
-0x860C
-0x8611
-0x8617
-0x8618
-0x8619
-0x861A
-0x861B
-0x861C
-0x861E
-0x861F
-0x8620
-0x8621
-0x8622
-0x8623
-0x8624
-0x8625
-0x8626
-0x8627
-0x8629
-0x862A
-0x862C
-0x862D
-0x862E
-0x8631
-0x8632
-0x8633
-0x8634
-0x8635
-0x8636
-0x8638
-0x8639
-0x863A
-0x863B
-0x863C
-0x863E
-0x863F
-0x8640
-0x8643
-0x8646
-0x8647
-0x8648
-0x864B
-0x864C
-0x864D
-0x864E
-0x8650
-0x8652
-0x8653
-0x8654
-0x8655
-0x8656
-0x8659
-0x865B
-0x865C
-0x865E
-0x865F
-0x8661
-0x8662
-0x8663
-0x8664
-0x8665
-0x8667
-0x8668
-0x8669
-0x866A
-0x866B
-0x866D
-0x866E
-0x866F
-0x8670
-0x8671
-0x8673
-0x8674
-0x8677
-0x8679
-0x867A
-0x867B
-0x867C
-0x8685
-0x8686
-0x8687
-0x868A
-0x868B
-0x868C
-0x868D
-0x868E
-0x8690
-0x8691
-0x8693
-0x8694
-0x8695
-0x8696
-0x8697
-0x8698
-0x8699
-0x869A
-0x869C
-0x869D
-0x869E
-0x86A1
-0x86A2
-0x86A3
-0x86A4
-0x86A5
-0x86A7
-0x86A8
-0x86A9
-0x86AA
-0x86AF
-0x86B0
-0x86B1
-0x86B3
-0x86B4
-0x86B5
-0x86B6
-0x86B7
-0x86B8
-0x86B9
-0x86BA
-0x86BB
-0x86BC
-0x86BD
-0x86BE
-0x86BF
-0x86C0
-0x86C1
-0x86C2
-0x86C3
-0x86C4
-0x86C5
-0x86C6
-0x86C7
-0x86C8
-0x86C9
-0x86CB
-0x86CC
-0x86D0
-0x86D1
-0x86D3
-0x86D4
-0x86D6
-0x86D7
-0x86D8
-0x86D9
-0x86DA
-0x86DB
-0x86DC
-0x86DD
-0x86DE
-0x86DF
-0x86E2
-0x86E3
-0x86E4
-0x86E6
-0x86E8
-0x86E9
-0x86EA
-0x86EB
-0x86EC
-0x86ED
-0x86F5
-0x86F6
-0x86F7
-0x86F8
-0x86F9
-0x86FA
-0x86FB
-0x86FE
-0x8700
-0x8701
-0x8702
-0x8703
-0x8704
-0x8705
-0x8706
-0x8707
-0x8708
-0x8709
-0x870A
-0x870B
-0x870C
-0x870D
-0x870E
-0x8711
-0x8712
-0x8713
-0x8718
-0x8719
-0x871A
-0x871B
-0x871C
-0x871E
-0x8720
-0x8721
-0x8722
-0x8723
-0x8724
-0x8725
-0x8726
-0x8727
-0x8728
-0x8729
-0x872A
-0x872C
-0x872D
-0x872E
-0x8730
-0x8731
-0x8732
-0x8733
-0x8734
-0x8735
-0x8737
-0x8738
-0x873A
-0x873B
-0x873C
-0x873E
-0x873F
-0x8740
-0x8741
-0x8742
-0x8743
-0x8746
-0x874C
-0x874D
-0x874E
-0x874F
-0x8750
-0x8751
-0x8752
-0x8753
-0x8754
-0x8755
-0x8756
-0x8757
-0x8758
-0x8759
-0x875A
-0x875B
-0x875C
-0x875D
-0x875E
-0x875F
-0x8760
-0x8761
-0x8762
-0x8763
-0x8764
-0x8765
-0x8766
-0x8767
-0x8768
-0x8769
-0x876A
-0x876B
-0x876C
-0x876D
-0x876E
-0x876F
-0x8773
-0x8774
-0x8775
-0x8776
-0x8777
-0x8778
-0x8779
-0x877A
-0x877B
-0x8781
-0x8782
-0x8783
-0x8784
-0x8785
-0x8787
-0x8788
-0x8789
-0x878D
-0x878F
-0x8790
-0x8791
-0x8792
-0x8793
-0x8794
-0x8796
-0x8797
-0x8798
-0x879A
-0x879B
-0x879C
-0x879D
-0x879E
-0x879F
-0x87A2
-0x87A3
-0x87A4
-0x87AA
-0x87AB
-0x87AC
-0x87AD
-0x87AE
-0x87AF
-0x87B0
-0x87B2
-0x87B3
-0x87B4
-0x87B5
-0x87B6
-0x87B7
-0x87B8
-0x87B9
-0x87BA
-0x87BB
-0x87BC
-0x87BD
-0x87BE
-0x87BF
-0x87C0
-0x87C2
-0x87C3
-0x87C4
-0x87C5
-0x87C6
-0x87C8
-0x87C9
-0x87CA
-0x87CB
-0x87CC
-0x87D1
-0x87D2
-0x87D3
-0x87D4
-0x87D7
-0x87D8
-0x87D9
-0x87DB
-0x87DC
-0x87DD
-0x87DE
-0x87DF
-0x87E0
-0x87E1
-0x87E2
-0x87E3
-0x87E4
-0x87E5
-0x87E6
-0x87E7
-0x87E8
-0x87EA
-0x87EB
-0x87EC
-0x87ED
-0x87EF
-0x87F2
-0x87F3
-0x87F4
-0x87F6
-0x87F7
-0x87F9
-0x87FA
-0x87FB
-0x87FC
-0x87FE
-0x87FF
-0x8800
-0x8801
-0x8802
-0x8803
-0x8805
-0x8806
-0x8808
-0x8809
-0x880A
-0x880B
-0x880C
-0x880D
-0x8810
-0x8811
-0x8813
-0x8814
-0x8815
-0x8816
-0x8817
-0x8819
-0x881B
-0x881C
-0x881D
-0x881F
-0x8820
-0x8821
-0x8822
-0x8823
-0x8824
-0x8825
-0x8826
-0x8828
-0x8829
-0x882A
-0x882B
-0x882C
-0x882E
-0x882F
-0x8830
-0x8831
-0x8832
-0x8833
-0x8835
-0x8836
-0x8837
-0x8838
-0x8839
-0x883B
-0x883C
-0x883D
-0x883E
-0x883F
-0x8840
-0x8841
-0x8843
-0x8844
-0x8848
-0x884A
-0x884B
-0x884C
-0x884D
-0x884E
-0x8852
-0x8853
-0x8855
-0x8856
-0x8857
-0x8859
-0x885A
-0x885B
-0x885D
-0x8861
-0x8862
-0x8863
-0x8867
-0x8868
-0x8869
-0x886A
-0x886B
-0x886D
-0x886F
-0x8870
-0x8871
-0x8872
-0x8874
-0x8875
-0x8876
-0x8877
-0x8879
-0x887C
-0x887D
-0x887E
-0x887F
-0x8880
-0x8881
-0x8882
-0x8883
-0x8888
-0x8889
-0x888B
-0x888C
-0x888D
-0x888E
-0x8891
-0x8892
-0x8893
-0x8895
-0x8896
-0x8897
-0x8898
-0x8899
-0x889A
-0x889B
-0x889E
-0x889F
-0x88A1
-0x88A2
-0x88A4
-0x88A7
-0x88A8
-0x88AA
-0x88AB
-0x88AC
-0x88B1
-0x88B2
-0x88B6
-0x88B7
-0x88B8
-0x88B9
-0x88BA
-0x88BC
-0x88BD
-0x88BE
-0x88C0
-0x88C1
-0x88C2
-0x88C9
-0x88CA
-0x88CB
-0x88CC
-0x88CD
-0x88CE
-0x88D0
-0x88D2
-0x88D4
-0x88D5
-0x88D6
-0x88D7
-0x88D8
-0x88D9
-0x88DA
-0x88DB
-0x88DC
-0x88DD
-0x88DE
-0x88DF
-0x88E1
-0x88E7
-0x88E8
-0x88EB
-0x88EC
-0x88EE
-0x88EF
-0x88F0
-0x88F1
-0x88F2
-0x88F3
-0x88F4
-0x88F6
-0x88F7
-0x88F8
-0x88F9
-0x88FA
-0x88FB
-0x88FC
-0x88FD
-0x88FE
-0x8901
-0x8902
-0x8905
-0x8906
-0x8907
-0x8909
-0x890A
-0x890B
-0x890C
-0x890E
-0x8910
-0x8911
-0x8912
-0x8913
-0x8914
-0x8915
-0x8916
-0x8917
-0x8918
-0x8919
-0x891A
-0x891E
-0x891F
-0x8921
-0x8922
-0x8923
-0x8925
-0x8926
-0x8927
-0x8929
-0x892A
-0x892B
-0x892C
-0x892D
-0x892E
-0x892F
-0x8930
-0x8931
-0x8932
-0x8933
-0x8935
-0x8936
-0x8937
-0x8938
-0x893B
-0x893C
-0x893D
-0x893E
-0x8941
-0x8942
-0x8944
-0x8946
-0x8949
-0x894B
-0x894C
-0x894F
-0x8950
-0x8951
-0x8952
-0x8953
-0x8956
-0x8957
-0x8958
-0x8959
-0x895A
-0x895B
-0x895C
-0x895D
-0x895E
-0x895F
-0x8960
-0x8961
-0x8962
-0x8963
-0x8964
-0x8966
-0x8969
-0x896A
-0x896B
-0x896C
-0x896D
-0x896E
-0x896F
-0x8971
-0x8972
-0x8973
-0x8974
-0x8976
-0x8979
-0x897A
-0x897B
-0x897C
-0x897E
-0x897F
-0x8981
-0x8982
-0x8983
-0x8985
-0x8986
-0x8988
-0x898B
-0x898F
-0x8993
-0x8995
-0x8996
-0x8997
-0x8998
-0x899B
-0x899C
-0x899D
-0x899E
-0x899F
-0x89A1
-0x89A2
-0x89A3
-0x89A4
-0x89A6
-0x89AA
-0x89AC
-0x89AD
-0x89AE
-0x89AF
-0x89B2
-0x89B6
-0x89B7
-0x89B9
-0x89BA
-0x89BD
-0x89BE
-0x89BF
-0x89C0
-0x89D2
-0x89D3
-0x89D4
-0x89D5
-0x89D6
-0x89D9
-0x89DA
-0x89DB
-0x89DC
-0x89DD
-0x89DF
-0x89E0
-0x89E1
-0x89E2
-0x89E3
-0x89E4
-0x89E5
-0x89E6
-0x89E8
-0x89E9
-0x89EB
-0x89EC
-0x89ED
-0x89F0
-0x89F1
-0x89F2
-0x89F3
-0x89F4
-0x89F6
-0x89F7
-0x89F8
-0x89FA
-0x89FB
-0x89FC
-0x89FE
-0x89FF
-0x8A00
-0x8A02
-0x8A03
-0x8A04
-0x8A07
-0x8A08
-0x8A0A
-0x8A0C
-0x8A0E
-0x8A0F
-0x8A10
-0x8A11
-0x8A12
-0x8A13
-0x8A15
-0x8A16
-0x8A17
-0x8A18
-0x8A1B
-0x8A1D
-0x8A1E
-0x8A1F
-0x8A22
-0x8A23
-0x8A25
-0x8A27
-0x8A2A
-0x8A2C
-0x8A2D
-0x8A30
-0x8A31
-0x8A34
-0x8A36
-0x8A39
-0x8A3A
-0x8A3B
-0x8A3C
-0x8A3E
-0x8A3F
-0x8A40
-0x8A41
-0x8A44
-0x8A45
-0x8A46
-0x8A48
-0x8A4A
-0x8A4C
-0x8A4D
-0x8A4E
-0x8A4F
-0x8A50
-0x8A51
-0x8A52
-0x8A54
-0x8A55
-0x8A56
-0x8A57
-0x8A58
-0x8A59
-0x8A5B
-0x8A5E
-0x8A60
-0x8A61
-0x8A62
-0x8A63
-0x8A66
-0x8A68
-0x8A69
-0x8A6B
-0x8A6C
-0x8A6D
-0x8A6E
-0x8A70
-0x8A71
-0x8A72
-0x8A73
-0x8A74
-0x8A75
-0x8A76
-0x8A77
-0x8A79
-0x8A7A
-0x8A7B
-0x8A7C
-0x8A7F
-0x8A81
-0x8A82
-0x8A83
-0x8A84
-0x8A85
-0x8A86
-0x8A87
-0x8A8B
-0x8A8C
-0x8A8D
-0x8A8F
-0x8A91
-0x8A92
-0x8A93
-0x8A95
-0x8A96
-0x8A98
-0x8A99
-0x8A9A
-0x8A9E
-0x8AA0
-0x8AA1
-0x8AA3
-0x8AA4
-0x8AA5
-0x8AA6
-0x8AA7
-0x8AA8
-0x8AAA
-0x8AAB
-0x8AB0
-0x8AB2
-0x8AB6
-0x8AB8
-0x8AB9
-0x8ABA
-0x8ABB
-0x8ABC
-0x8ABD
-0x8ABE
-0x8ABF
-0x8AC0
-0x8AC2
-0x8AC3
-0x8AC4
-0x8AC5
-0x8AC6
-0x8AC7
-0x8AC8
-0x8AC9
-0x8ACB
-0x8ACD
-0x8ACF
-0x8AD1
-0x8AD2
-0x8AD3
-0x8AD4
-0x8AD5
-0x8AD6
-0x8AD7
-0x8AD8
-0x8AD9
-0x8ADB
-0x8ADC
-0x8ADD
-0x8ADE
-0x8ADF
-0x8AE0
-0x8AE1
-0x8AE2
-0x8AE4
-0x8AE6
-0x8AE7
-0x8AE8
-0x8AEB
-0x8AED
-0x8AEE
-0x8AEF
-0x8AF0
-0x8AF1
-0x8AF2
-0x8AF3
-0x8AF4
-0x8AF5
-0x8AF6
-0x8AF7
-0x8AF8
-0x8AFA
-0x8AFB
-0x8AFC
-0x8AFE
-0x8AFF
-0x8B00
-0x8B01
-0x8B02
-0x8B04
-0x8B05
-0x8B06
-0x8B07
-0x8B08
-0x8B0A
-0x8B0B
-0x8B0D
-0x8B0E
-0x8B0F
-0x8B10
-0x8B11
-0x8B12
-0x8B13
-0x8B14
-0x8B15
-0x8B16
-0x8B17
-0x8B18
-0x8B19
-0x8B1A
-0x8B1B
-0x8B1C
-0x8B1D
-0x8B1E
-0x8B20
-0x8B22
-0x8B23
-0x8B24
-0x8B25
-0x8B26
-0x8B27
-0x8B28
-0x8B2A
-0x8B2B
-0x8B2C
-0x8B2E
-0x8B2F
-0x8B30
-0x8B31
-0x8B33
-0x8B35
-0x8B36
-0x8B37
-0x8B39
-0x8B3A
-0x8B3B
-0x8B3C
-0x8B3D
-0x8B3E
-0x8B40
-0x8B41
-0x8B42
-0x8B45
-0x8B46
-0x8B47
-0x8B48
-0x8B49
-0x8B4A
-0x8B4B
-0x8B4E
-0x8B4F
-0x8B50
-0x8B51
-0x8B52
-0x8B53
-0x8B54
-0x8B55
-0x8B56
-0x8B57
-0x8B58
-0x8B59
-0x8B5A
-0x8B5C
-0x8B5D
-0x8B5F
-0x8B60
-0x8B63
-0x8B65
-0x8B66
-0x8B67
-0x8B68
-0x8B6A
-0x8B6B
-0x8B6C
-0x8B6D
-0x8B6F
-0x8B70
-0x8B74
-0x8B77
-0x8B78
-0x8B79
-0x8B7A
-0x8B7B
-0x8B7D
-0x8B7E
-0x8B7F
-0x8B80
-0x8B82
-0x8B84
-0x8B85
-0x8B86
-0x8B88
-0x8B8A
-0x8B8B
-0x8B8C
-0x8B8E
-0x8B92
-0x8B93
-0x8B94
-0x8B95
-0x8B96
-0x8B98
-0x8B99
-0x8B9A
-0x8B9C
-0x8B9E
-0x8B9F
-0x8C37
-0x8C39
-0x8C3B
-0x8C3C
-0x8C3D
-0x8C3E
-0x8C3F
-0x8C41
-0x8C42
-0x8C43
-0x8C45
-0x8C46
-0x8C47
-0x8C48
-0x8C49
-0x8C4A
-0x8C4B
-0x8C4C
-0x8C4D
-0x8C4E
-0x8C4F
-0x8C50
-0x8C54
-0x8C55
-0x8C56
-0x8C57
-0x8C5A
-0x8C5C
-0x8C5D
-0x8C5F
-0x8C61
-0x8C62
-0x8C64
-0x8C65
-0x8C66
-0x8C68
-0x8C69
-0x8C6A
-0x8C6B
-0x8C6C
-0x8C6D
-0x8C6F
-0x8C70
-0x8C71
-0x8C72
-0x8C73
-0x8C75
-0x8C76
-0x8C77
-0x8C78
-0x8C79
-0x8C7A
-0x8C7B
-0x8C7D
-0x8C80
-0x8C81
-0x8C82
-0x8C84
-0x8C85
-0x8C86
-0x8C89
-0x8C8A
-0x8C8C
-0x8C8D
-0x8C8F
-0x8C90
-0x8C91
-0x8C92
-0x8C93
-0x8C94
-0x8C95
-0x8C97
-0x8C98
-0x8C99
-0x8C9A
-0x8C9C
-0x8C9D
-0x8C9E
-0x8CA0
-0x8CA1
-0x8CA2
-0x8CA3
-0x8CA4
-0x8CA5
-0x8CA7
-0x8CA8
-0x8CA9
-0x8CAA
-0x8CAB
-0x8CAC
-0x8CAF
-0x8CB0
-0x8CB2
-0x8CB3
-0x8CB4
-0x8CB5
-0x8CB6
-0x8CB7
-0x8CB8
-0x8CB9
-0x8CBA
-0x8CBB
-0x8CBC
-0x8CBD
-0x8CBE
-0x8CBF
-0x8CC0
-0x8CC1
-0x8CC2
-0x8CC3
-0x8CC4
-0x8CC5
-0x8CC7
-0x8CC8
-0x8CCA
-0x8CCC
-0x8CCF
-0x8CD1
-0x8CD2
-0x8CD3
-0x8CD5
-0x8CD7
-0x8CD9
-0x8CDA
-0x8CDC
-0x8CDD
-0x8CDE
-0x8CDF
-0x8CE0
-0x8CE1
-0x8CE2
-0x8CE3
-0x8CE4
-0x8CE5
-0x8CE6
-0x8CE7
-0x8CE8
-0x8CEA
-0x8CEC
-0x8CED
-0x8CEE
-0x8CF0
-0x8CF1
-0x8CF3
-0x8CF4
-0x8CF5
-0x8CF8
-0x8CF9
-0x8CFA
-0x8CFB
-0x8CFC
-0x8CFD
-0x8CFE
-0x8D00
-0x8D02
-0x8D04
-0x8D05
-0x8D06
-0x8D07
-0x8D08
-0x8D09
-0x8D0A
-0x8D0D
-0x8D0F
-0x8D10
-0x8D13
-0x8D14
-0x8D15
-0x8D16
-0x8D17
-0x8D19
-0x8D1B
-0x8D64
-0x8D66
-0x8D67
-0x8D68
-0x8D69
-0x8D6B
-0x8D6C
-0x8D6D
-0x8D6E
-0x8D6F
-0x8D70
-0x8D72
-0x8D73
-0x8D74
-0x8D76
-0x8D77
-0x8D78
-0x8D79
-0x8D7B
-0x8D7D
-0x8D80
-0x8D81
-0x8D84
-0x8D85
-0x8D89
-0x8D8A
-0x8D8C
-0x8D8D
-0x8D8E
-0x8D8F
-0x8D90
-0x8D91
-0x8D92
-0x8D93
-0x8D94
-0x8D95
-0x8D96
-0x8D99
-0x8D9B
-0x8D9C
-0x8D9F
-0x8DA0
-0x8DA1
-0x8DA3
-0x8DA5
-0x8DA7
-0x8DA8
-0x8DAA
-0x8DAB
-0x8DAC
-0x8DAD
-0x8DAE
-0x8DAF
-0x8DB2
-0x8DB3
-0x8DB4
-0x8DB5
-0x8DB6
-0x8DB7
-0x8DB9
-0x8DBA
-0x8DBC
-0x8DBE
-0x8DBF
-0x8DC1
-0x8DC2
-0x8DC5
-0x8DC6
-0x8DC7
-0x8DC8
-0x8DCB
-0x8DCC
-0x8DCD
-0x8DCE
-0x8DCF
-0x8DD0
-0x8DD1
-0x8DD3
-0x8DD5
-0x8DD6
-0x8DD7
-0x8DD8
-0x8DD9
-0x8DDA
-0x8DDB
-0x8DDC
-0x8DDD
-0x8DDF
-0x8DE0
-0x8DE1
-0x8DE2
-0x8DE3
-0x8DE4
-0x8DE6
-0x8DE7
-0x8DE8
-0x8DE9
-0x8DEA
-0x8DEB
-0x8DEC
-0x8DEE
-0x8DEF
-0x8DF0
-0x8DF1
-0x8DF2
-0x8DF3
-0x8DF4
-0x8DFA
-0x8DFC
-0x8DFD
-0x8DFE
-0x8DFF
-0x8E00
-0x8E02
-0x8E03
-0x8E04
-0x8E05
-0x8E06
-0x8E07
-0x8E09
-0x8E0A
-0x8E0D
-0x8E0F
-0x8E10
-0x8E11
-0x8E12
-0x8E13
-0x8E14
-0x8E15
-0x8E16
-0x8E17
-0x8E18
-0x8E19
-0x8E1A
-0x8E1B
-0x8E1C
-0x8E1D
-0x8E1E
-0x8E1F
-0x8E20
-0x8E21
-0x8E22
-0x8E23
-0x8E24
-0x8E25
-0x8E26
-0x8E27
-0x8E29
-0x8E2B
-0x8E2E
-0x8E30
-0x8E31
-0x8E33
-0x8E34
-0x8E35
-0x8E36
-0x8E38
-0x8E39
-0x8E3C
-0x8E3D
-0x8E3E
-0x8E3F
-0x8E40
-0x8E41
-0x8E42
-0x8E44
-0x8E45
-0x8E47
-0x8E48
-0x8E49
-0x8E4A
-0x8E4B
-0x8E4C
-0x8E4D
-0x8E4E
-0x8E50
-0x8E53
-0x8E54
-0x8E55
-0x8E56
-0x8E57
-0x8E59
-0x8E5A
-0x8E5B
-0x8E5C
-0x8E5D
-0x8E5E
-0x8E5F
-0x8E60
-0x8E61
-0x8E62
-0x8E63
-0x8E64
-0x8E65
-0x8E66
-0x8E67
-0x8E69
-0x8E6A
-0x8E6C
-0x8E6D
-0x8E6F
-0x8E72
-0x8E73
-0x8E74
-0x8E76
-0x8E78
-0x8E7A
-0x8E7B
-0x8E7C
-0x8E81
-0x8E82
-0x8E84
-0x8E85
-0x8E86
-0x8E87
-0x8E88
-0x8E89
-0x8E8A
-0x8E8B
-0x8E8C
-0x8E8D
-0x8E8E
-0x8E90
-0x8E91
-0x8E92
-0x8E93
-0x8E94
-0x8E95
-0x8E96
-0x8E97
-0x8E98
-0x8E9A
-0x8E9D
-0x8E9E
-0x8E9F
-0x8EA0
-0x8EA1
-0x8EA3
-0x8EA4
-0x8EA5
-0x8EA6
-0x8EA8
-0x8EA9
-0x8EAA
-0x8EAB
-0x8EAC
-0x8EB2
-0x8EBA
-0x8EBD
-0x8EC0
-0x8EC2
-0x8EC9
-0x8ECA
-0x8ECB
-0x8ECC
-0x8ECD
-0x8ECF
-0x8ED1
-0x8ED2
-0x8ED3
-0x8ED4
-0x8ED7
-0x8ED8
-0x8EDB
-0x8EDC
-0x8EDD
-0x8EDE
-0x8EDF
-0x8EE0
-0x8EE1
-0x8EE5
-0x8EE6
-0x8EE7
-0x8EE8
-0x8EE9
-0x8EEB
-0x8EEC
-0x8EEE
-0x8EEF
-0x8EF1
-0x8EF4
-0x8EF5
-0x8EF6
-0x8EF7
-0x8EF8
-0x8EF9
-0x8EFA
-0x8EFB
-0x8EFC
-0x8EFE
-0x8EFF
-0x8F00
-0x8F01
-0x8F02
-0x8F03
-0x8F05
-0x8F06
-0x8F07
-0x8F08
-0x8F09
-0x8F0A
-0x8F0B
-0x8F0D
-0x8F0E
-0x8F10
-0x8F11
-0x8F12
-0x8F13
-0x8F14
-0x8F15
-0x8F16
-0x8F17
-0x8F18
-0x8F1A
-0x8F1B
-0x8F1C
-0x8F1D
-0x8F1E
-0x8F1F
-0x8F20
-0x8F23
-0x8F24
-0x8F25
-0x8F26
-0x8F29
-0x8F2A
-0x8F2C
-0x8F2E
-0x8F2F
-0x8F32
-0x8F33
-0x8F34
-0x8F35
-0x8F36
-0x8F37
-0x8F38
-0x8F39
-0x8F3B
-0x8F3E
-0x8F3F
-0x8F40
-0x8F42
-0x8F43
-0x8F44
-0x8F45
-0x8F46
-0x8F47
-0x8F48
-0x8F49
-0x8F4B
-0x8F4D
-0x8F4E
-0x8F4F
-0x8F50
-0x8F51
-0x8F52
-0x8F53
-0x8F54
-0x8F55
-0x8F56
-0x8F57
-0x8F58
-0x8F59
-0x8F5A
-0x8F5B
-0x8F5D
-0x8F5E
-0x8F5F
-0x8F60
-0x8F61
-0x8F62
-0x8F63
-0x8F64
-0x8F9B
-0x8F9C
-0x8F9F
-0x8FA3
-0x8FA6
-0x8FA8
-0x8FAD
-0x8FAE
-0x8FAF
-0x8FB0
-0x8FB1
-0x8FB2
-0x8FB4
-0x8FBF
-0x8FC2
-0x8FC4
-0x8FC5
-0x8FC6
-0x8FC9
-0x8FCB
-0x8FCD
-0x8FCE
-0x8FD1
-0x8FD2
-0x8FD3
-0x8FD4
-0x8FD5
-0x8FD6
-0x8FD7
-0x8FE0
-0x8FE1
-0x8FE2
-0x8FE3
-0x8FE4
-0x8FE5
-0x8FE6
-0x8FE8
-0x8FEA
-0x8FEB
-0x8FED
-0x8FEE
-0x8FF0
-0x8FF4
-0x8FF5
-0x8FF6
-0x8FF7
-0x8FF8
-0x8FFA
-0x8FFB
-0x8FFC
-0x8FFD
-0x8FFE
-0x8FFF
-0x9000
-0x9001
-0x9002
-0x9003
-0x9004
-0x9005
-0x9006
-0x900B
-0x900C
-0x900D
-0x900F
-0x9010
-0x9011
-0x9014
-0x9015
-0x9016
-0x9017
-0x9019
-0x901A
-0x901B
-0x901C
-0x901D
-0x901E
-0x901F
-0x9020
-0x9021
-0x9022
-0x9023
-0x9024
-0x902D
-0x902E
-0x902F
-0x9031
-0x9032
-0x9034
-0x9035
-0x9036
-0x9038
-0x903C
-0x903D
-0x903E
-0x903F
-0x9041
-0x9042
-0x9044
-0x9047
-0x9049
-0x904A
-0x904B
-0x904D
-0x904E
-0x904F
-0x9050
-0x9051
-0x9052
-0x9053
-0x9054
-0x9055
-0x9058
-0x9059
-0x905B
-0x905C
-0x905D
-0x905E
-0x9060
-0x9062
-0x9063
-0x9067
-0x9068
-0x9069
-0x906B
-0x906D
-0x906E
-0x906F
-0x9070
-0x9072
-0x9073
-0x9074
-0x9075
-0x9076
-0x9077
-0x9078
-0x9079
-0x907A
-0x907B
-0x907C
-0x907D
-0x907E
-0x907F
-0x9080
-0x9081
-0x9082
-0x9083
-0x9084
-0x9085
-0x9086
-0x9087
-0x9088
-0x908A
-0x908B
-0x908D
-0x908F
-0x9090
-0x9091
-0x9094
-0x9095
-0x9097
-0x9098
-0x9099
-0x909B
-0x909E
-0x909F
-0x90A0
-0x90A1
-0x90A2
-0x90A3
-0x90A5
-0x90A6
-0x90A7
-0x90AA
-0x90AF
-0x90B0
-0x90B1
-0x90B2
-0x90B3
-0x90B4
-0x90B5
-0x90B6
-0x90B8
-0x90BD
-0x90BE
-0x90BF
-0x90C1
-0x90C3
-0x90C5
-0x90C7
-0x90C8
-0x90CA
-0x90CB
-0x90CE
-0x90D4
-0x90D5
-0x90D6
-0x90D7
-0x90D8
-0x90D9
-0x90DA
-0x90DB
-0x90DC
-0x90DD
-0x90DF
-0x90E0
-0x90E1
-0x90E2
-0x90E3
-0x90E4
-0x90E5
-0x90E8
-0x90E9
-0x90EA
-0x90EB
-0x90EC
-0x90ED
-0x90EF
-0x90F0
-0x90F1
-0x90F2
-0x90F3
-0x90F4
-0x90F5
-0x90F9
-0x90FA
-0x90FB
-0x90FC
-0x90FD
-0x90FE
-0x90FF
-0x9100
-0x9101
-0x9102
-0x9103
-0x9104
-0x9105
-0x9106
-0x9107
-0x9108
-0x9109
-0x910B
-0x910D
-0x910E
-0x910F
-0x9110
-0x9111
-0x9112
-0x9114
-0x9116
-0x9117
-0x9118
-0x9119
-0x911A
-0x911B
-0x911C
-0x911D
-0x911E
-0x911F
-0x9120
-0x9121
-0x9122
-0x9123
-0x9124
-0x9126
-0x9127
-0x9128
-0x9129
-0x912A
-0x912B
-0x912C
-0x912D
-0x912E
-0x912F
-0x9130
-0x9131
-0x9132
-0x9133
-0x9134
-0x9135
-0x9136
-0x9138
-0x9139
-0x913A
-0x913B
-0x913E
-0x913F
-0x9140
-0x9141
-0x9143
-0x9144
-0x9145
-0x9146
-0x9147
-0x9148
-0x9149
-0x914A
-0x914B
-0x914C
-0x914D
-0x914E
-0x914F
-0x9150
-0x9152
-0x9153
-0x9155
-0x9156
-0x9157
-0x9158
-0x915A
-0x915F
-0x9160
-0x9161
-0x9162
-0x9163
-0x9164
-0x9165
-0x9168
-0x9169
-0x916A
-0x916C
-0x916E
-0x916F
-0x9172
-0x9173
-0x9174
-0x9175
-0x9177
-0x9178
-0x9179
-0x917A
-0x9180
-0x9181
-0x9182
-0x9183
-0x9184
-0x9185
-0x9186
-0x9187
-0x9189
-0x918A
-0x918B
-0x918D
-0x918F
-0x9190
-0x9191
-0x9192
-0x9193
-0x9199
-0x919A
-0x919B
-0x919C
-0x919D
-0x919E
-0x919F
-0x91A0
-0x91A1
-0x91A2
-0x91A3
-0x91A5
-0x91A7
-0x91A8
-0x91AA
-0x91AB
-0x91AC
-0x91AD
-0x91AE
-0x91AF
-0x91B0
-0x91B1
-0x91B2
-0x91B3
-0x91B4
-0x91B5
-0x91B7
-0x91B9
-0x91BA
-0x91BC
-0x91BD
-0x91BE
-0x91C0
-0x91C1
-0x91C2
-0x91C3
-0x91C5
-0x91C6
-0x91C7
-0x91C9
-0x91CB
-0x91CC
-0x91CD
-0x91CE
-0x91CF
-0x91D0
-0x91D1
-0x91D3
-0x91D4
-0x91D5
-0x91D7
-0x91D8
-0x91D9
-0x91DA
-0x91DC
-0x91DD
-0x91E2
-0x91E3
-0x91E4
-0x91E6
-0x91E7
-0x91E8
-0x91E9
-0x91EA
-0x91EB
-0x91EC
-0x91ED
-0x91EE
-0x91F1
-0x91F3
-0x91F4
-0x91F5
-0x91F7
-0x91F8
-0x91F9
-0x91FD
-0x91FF
-0x9200
-0x9201
-0x9202
-0x9203
-0x9204
-0x9205
-0x9206
-0x9207
-0x9209
-0x920A
-0x920C
-0x920D
-0x920F
-0x9210
-0x9211
-0x9212
-0x9214
-0x9215
-0x9216
-0x9217
-0x9219
-0x921A
-0x921C
-0x921E
-0x9223
-0x9224
-0x9225
-0x9226
-0x9227
-0x922D
-0x922E
-0x9230
-0x9231
-0x9232
-0x9233
-0x9234
-0x9236
-0x9237
-0x9238
-0x9239
-0x923A
-0x923D
-0x923E
-0x923F
-0x9240
-0x9245
-0x9246
-0x9248
-0x9249
-0x924A
-0x924B
-0x924C
-0x924D
-0x924E
-0x924F
-0x9250
-0x9251
-0x9252
-0x9253
-0x9254
-0x9256
-0x9257
-0x925A
-0x925B
-0x925E
-0x9260
-0x9261
-0x9263
-0x9264
-0x9265
-0x9266
-0x9267
-0x926C
-0x926D
-0x926F
-0x9270
-0x9272
-0x9276
-0x9278
-0x9279
-0x927A
-0x927B
-0x927C
-0x927D
-0x927E
-0x927F
-0x9280
-0x9282
-0x9283
-0x9285
-0x9286
-0x9287
-0x9288
-0x928A
-0x928B
-0x928C
-0x928D
-0x928E
-0x9291
-0x9293
-0x9294
-0x9295
-0x9296
-0x9297
-0x9298
-0x9299
-0x929A
-0x929B
-0x929C
-0x929D
-0x92A0
-0x92A1
-0x92A2
-0x92A3
-0x92A4
-0x92A5
-0x92A6
-0x92A7
-0x92A8
-0x92A9
-0x92AA
-0x92AB
-0x92AC
-0x92B2
-0x92B3
-0x92B4
-0x92B5
-0x92B6
-0x92B7
-0x92BB
-0x92BC
-0x92C0
-0x92C1
-0x92C2
-0x92C3
-0x92C4
-0x92C5
-0x92C6
-0x92C7
-0x92C8
-0x92C9
-0x92CA
-0x92CB
-0x92CC
-0x92CD
-0x92CE
-0x92CF
-0x92D0
-0x92D1
-0x92D2
-0x92D3
-0x92D5
-0x92D7
-0x92D8
-0x92D9
-0x92DD
-0x92DE
-0x92DF
-0x92E0
-0x92E1
-0x92E4
-0x92E6
-0x92E7
-0x92E8
-0x92E9
-0x92EA
-0x92EE
-0x92EF
-0x92F0
-0x92F1
-0x92F7
-0x92F8
-0x92F9
-0x92FA
-0x92FB
-0x92FC
-0x92FE
-0x92FF
-0x9300
-0x9301
-0x9302
-0x9304
-0x9306
-0x9308
-0x9309
-0x930B
-0x930C
-0x930D
-0x930E
-0x930F
-0x9310
-0x9312
-0x9313
-0x9314
-0x9315
-0x9316
-0x9318
-0x9319
-0x931A
-0x931B
-0x931D
-0x931E
-0x931F
-0x9320
-0x9321
-0x9322
-0x9323
-0x9324
-0x9325
-0x9326
-0x9327
-0x9328
-0x9329
-0x932A
-0x932B
-0x932D
-0x932E
-0x932F
-0x9333
-0x9334
-0x9335
-0x9336
-0x9338
-0x9339
-0x933C
-0x9346
-0x9347
-0x9349
-0x934A
-0x934B
-0x934C
-0x934D
-0x934E
-0x934F
-0x9350
-0x9351
-0x9352
-0x9354
-0x9355
-0x9356
-0x9357
-0x9358
-0x9359
-0x935A
-0x935B
-0x935C
-0x935E
-0x9360
-0x9361
-0x9363
-0x9364
-0x9365
-0x9367
-0x936A
-0x936C
-0x936D
-0x9370
-0x9371
-0x9375
-0x9376
-0x9377
-0x9379
-0x937A
-0x937B
-0x937C
-0x937E
-0x9380
-0x9382
-0x9383
-0x9388
-0x9389
-0x938A
-0x938C
-0x938D
-0x938E
-0x938F
-0x9391
-0x9392
-0x9394
-0x9395
-0x9396
-0x9397
-0x9398
-0x9399
-0x939A
-0x939B
-0x939D
-0x939E
-0x939F
-0x93A1
-0x93A2
-0x93A3
-0x93A4
-0x93A5
-0x93A6
-0x93A7
-0x93A8
-0x93A9
-0x93AA
-0x93AC
-0x93AE
-0x93AF
-0x93B0
-0x93B1
-0x93B2
-0x93B3
-0x93B4
-0x93B5
-0x93B7
-0x93C0
-0x93C2
-0x93C3
-0x93C4
-0x93C7
-0x93C8
-0x93CA
-0x93CC
-0x93CD
-0x93CE
-0x93CF
-0x93D0
-0x93D1
-0x93D2
-0x93D4
-0x93D5
-0x93D6
-0x93D7
-0x93D8
-0x93D9
-0x93DA
-0x93DC
-0x93DD
-0x93DE
-0x93DF
-0x93E1
-0x93E2
-0x93E3
-0x93E4
-0x93E6
-0x93E7
-0x93E8
-0x93EC
-0x93EE
-0x93F5
-0x93F6
-0x93F7
-0x93F8
-0x93F9
-0x93FA
-0x93FB
-0x93FC
-0x93FD
-0x93FE
-0x93FF
-0x9400
-0x9403
-0x9406
-0x9407
-0x9409
-0x940A
-0x940B
-0x940C
-0x940D
-0x940E
-0x940F
-0x9410
-0x9411
-0x9412
-0x9413
-0x9414
-0x9415
-0x9416
-0x9418
-0x9419
-0x9420
-0x9428
-0x9429
-0x942A
-0x942B
-0x942C
-0x942E
-0x9430
-0x9431
-0x9432
-0x9433
-0x9435
-0x9436
-0x9437
-0x9438
-0x9439
-0x943A
-0x943B
-0x943C
-0x943D
-0x943F
-0x9440
-0x9444
-0x9445
-0x9446
-0x9447
-0x9448
-0x9449
-0x944A
-0x944B
-0x944C
-0x944F
-0x9450
-0x9451
-0x9452
-0x9455
-0x9457
-0x945D
-0x945E
-0x9460
-0x9462
-0x9463
-0x9464
-0x9468
-0x9469
-0x946A
-0x946B
-0x946D
-0x946E
-0x946F
-0x9470
-0x9471
-0x9472
-0x9473
-0x9474
-0x9475
-0x9476
-0x9477
-0x9478
-0x947C
-0x947D
-0x947E
-0x947F
-0x9480
-0x9481
-0x9482
-0x9483
-0x9577
-0x957A
-0x957B
-0x957C
-0x957D
-0x9580
-0x9582
-0x9583
-0x9586
-0x9588
-0x9589
-0x958B
-0x958C
-0x958D
-0x958E
-0x958F
-0x9590
-0x9591
-0x9592
-0x9593
-0x9594
-0x9598
-0x959B
-0x959C
-0x959E
-0x959F
-0x95A1
-0x95A3
-0x95A4
-0x95A5
-0x95A8
-0x95A9
-0x95AB
-0x95AC
-0x95AD
-0x95AE
-0x95B0
-0x95B1
-0x95B5
-0x95B6
-0x95B7
-0x95B9
-0x95BA
-0x95BB
-0x95BC
-0x95BD
-0x95BE
-0x95BF
-0x95C0
-0x95C3
-0x95C5
-0x95C6
-0x95C7
-0x95C8
-0x95C9
-0x95CA
-0x95CB
-0x95CC
-0x95CD
-0x95D0
-0x95D1
-0x95D2
-0x95D3
-0x95D4
-0x95D5
-0x95D6
-0x95DA
-0x95DB
-0x95DC
-0x95DE
-0x95DF
-0x95E0
-0x95E1
-0x95E2
-0x95E3
-0x95E4
-0x95E5
-0x961C
-0x961E
-0x9620
-0x9621
-0x9622
-0x9623
-0x9624
-0x9628
-0x962A
-0x962C
-0x962D
-0x962E
-0x962F
-0x9630
-0x9631
-0x9632
-0x9639
-0x963A
-0x963B
-0x963C
-0x963D
-0x963F
-0x9640
-0x9642
-0x9643
-0x9644
-0x964A
-0x964B
-0x964C
-0x964D
-0x964E
-0x964F
-0x9650
-0x9651
-0x9653
-0x9654
-0x9658
-0x965B
-0x965C
-0x965D
-0x965E
-0x965F
-0x9661
-0x9662
-0x9663
-0x9664
-0x966A
-0x966B
-0x966C
-0x966D
-0x966F
-0x9670
-0x9671
-0x9672
-0x9673
-0x9674
-0x9675
-0x9676
-0x9677
-0x9678
-0x967C
-0x967D
-0x967E
-0x9680
-0x9683
-0x9684
-0x9685
-0x9686
-0x9687
-0x9688
-0x9689
-0x968A
-0x968B
-0x968D
-0x968E
-0x9691
-0x9692
-0x9693
-0x9694
-0x9695
-0x9697
-0x9698
-0x9699
-0x969B
-0x969C
-0x969E
-0x96A1
-0x96A2
-0x96A4
-0x96A7
-0x96A8
-0x96A9
-0x96AA
-0x96AC
-0x96AE
-0x96B0
-0x96B1
-0x96B3
-0x96B4
-0x96B8
-0x96B9
-0x96BB
-0x96BC
-0x96BF
-0x96C0
-0x96C1
-0x96C2
-0x96C3
-0x96C4
-0x96C5
-0x96C6
-0x96C7
-0x96C8
-0x96C9
-0x96CA
-0x96CB
-0x96CC
-0x96CD
-0x96CE
-0x96D2
-0x96D3
-0x96D4
-0x96D5
-0x96D6
-0x96D7
-0x96D8
-0x96D9
-0x96DA
-0x96DB
-0x96DC
-0x96DD
-0x96DE
-0x96DF
-0x96E1
-0x96E2
-0x96E3
-0x96E5
-0x96E8
-0x96E9
-0x96EA
-0x96EF
-0x96F0
-0x96F1
-0x96F2
-0x96F5
-0x96F6
-0x96F7
-0x96F8
-0x96F9
-0x96FA
-0x96FB
-0x96FD
-0x96FF
-0x9700
-0x9702
-0x9704
-0x9705
-0x9706
-0x9707
-0x9708
-0x9709
-0x970B
-0x970D
-0x970E
-0x970F
-0x9710
-0x9711
-0x9712
-0x9713
-0x9716
-0x9718
-0x9719
-0x971C
-0x971D
-0x971E
-0x971F
-0x9720
-0x9722
-0x9723
-0x9724
-0x9725
-0x9726
-0x9727
-0x9728
-0x9729
-0x972A
-0x972B
-0x972C
-0x972E
-0x972F
-0x9730
-0x9732
-0x9735
-0x9738
-0x9739
-0x973A
-0x973D
-0x973E
-0x973F
-0x9742
-0x9743
-0x9744
-0x9746
-0x9747
-0x9748
-0x9749
-0x974B
-0x9752
-0x9756
-0x9758
-0x975A
-0x975B
-0x975C
-0x975E
-0x9760
-0x9761
-0x9762
-0x9766
-0x9768
-0x9769
-0x976A
-0x976C
-0x976E
-0x9770
-0x9772
-0x9773
-0x9774
-0x9776
-0x9777
-0x9778
-0x977A
-0x977B
-0x977C
-0x977D
-0x977E
-0x977F
-0x9780
-0x9781
-0x9782
-0x9783
-0x9784
-0x9785
-0x9788
-0x978A
-0x978B
-0x978D
-0x978E
-0x978F
-0x9794
-0x9797
-0x9798
-0x9799
-0x979A
-0x979C
-0x979D
-0x979E
-0x97A0
-0x97A1
-0x97A2
-0x97A3
-0x97A4
-0x97A5
-0x97A6
-0x97A8
-0x97AA
-0x97AB
-0x97AC
-0x97AD
-0x97AE
-0x97B3
-0x97B6
-0x97B7
-0x97B9
-0x97BB
-0x97BF
-0x97C1
-0x97C3
-0x97C4
-0x97C5
-0x97C6
-0x97C7
-0x97C9
-0x97CB
-0x97CC
-0x97CD
-0x97CE
-0x97CF
-0x97D0
-0x97D3
-0x97D4
-0x97D5
-0x97D6
-0x97D7
-0x97D8
-0x97D9
-0x97DC
-0x97DD
-0x97DE
-0x97DF
-0x97E1
-0x97E3
-0x97E5
-0x97ED
-0x97F0
-0x97F1
-0x97F3
-0x97F6
-0x97F8
-0x97F9
-0x97FA
-0x97FB
-0x97FD
-0x97FE
-0x97FF
-0x9800
-0x9801
-0x9802
-0x9803
-0x9804
-0x9805
-0x9806
-0x9807
-0x9808
-0x980A
-0x980C
-0x980D
-0x980E
-0x980F
-0x9810
-0x9811
-0x9812
-0x9813
-0x9816
-0x9817
-0x9818
-0x981B
-0x981C
-0x981D
-0x981E
-0x9820
-0x9821
-0x9824
-0x9826
-0x9827
-0x9828
-0x9829
-0x982B
-0x982D
-0x982F
-0x9830
-0x9832
-0x9835
-0x9837
-0x9838
-0x9839
-0x983B
-0x9841
-0x9843
-0x9844
-0x9845
-0x9846
-0x9848
-0x9849
-0x984A
-0x984C
-0x984D
-0x984E
-0x984F
-0x9850
-0x9851
-0x9852
-0x9853
-0x9857
-0x9858
-0x9859
-0x985B
-0x985C
-0x985D
-0x985E
-0x985F
-0x9860
-0x9862
-0x9863
-0x9864
-0x9865
-0x9867
-0x9869
-0x986A
-0x986B
-0x986F
-0x9870
-0x9871
-0x9872
-0x9873
-0x9874
-0x98A8
-0x98A9
-0x98AC
-0x98AD
-0x98AE
-0x98AF
-0x98B1
-0x98B2
-0x98B3
-0x98B6
-0x98B8
-0x98BA
-0x98BB
-0x98BC
-0x98BD
-0x98BE
-0x98BF
-0x98C0
-0x98C1
-0x98C2
-0x98C4
-0x98C6
-0x98C9
-0x98CB
-0x98CC
-0x98DB
-0x98DF
-0x98E2
-0x98E3
-0x98E5
-0x98E7
-0x98E9
-0x98EA
-0x98EB
-0x98ED
-0x98EF
-0x98F2
-0x98F4
-0x98F6
-0x98F9
-0x98FA
-0x98FC
-0x98FD
-0x98FE
-0x9900
-0x9902
-0x9903
-0x9905
-0x9907
-0x9908
-0x9909
-0x990A
-0x990C
-0x9910
-0x9911
-0x9912
-0x9913
-0x9914
-0x9915
-0x9916
-0x9917
-0x9918
-0x991A
-0x991B
-0x991E
-0x991F
-0x9921
-0x9924
-0x9925
-0x9927
-0x9928
-0x9929
-0x992A
-0x992B
-0x992C
-0x992D
-0x992E
-0x992F
-0x9930
-0x9931
-0x9932
-0x9933
-0x9935
-0x993A
-0x993C
-0x993D
-0x993E
-0x993F
-0x9941
-0x9943
-0x9945
-0x9947
-0x9948
-0x9949
-0x994B
-0x994C
-0x994E
-0x9950
-0x9951
-0x9952
-0x9953
-0x9954
-0x9955
-0x9956
-0x9957
-0x9958
-0x9959
-0x995B
-0x995C
-0x995E
-0x995F
-0x9961
-0x9996
-0x9997
-0x9998
-0x9999
-0x999C
-0x999D
-0x999E
-0x99A1
-0x99A3
-0x99A5
-0x99A6
-0x99A7
-0x99A8
-0x99AB
-0x99AC
-0x99AD
-0x99AE
-0x99AF
-0x99B0
-0x99B1
-0x99B2
-0x99B3
-0x99B4
-0x99B5
-0x99B9
-0x99BA
-0x99BB
-0x99BD
-0x99C1
-0x99C2
-0x99C3
-0x99C7
-0x99C9
-0x99CB
-0x99CC
-0x99CD
-0x99CE
-0x99CF
-0x99D0
-0x99D1
-0x99D2
-0x99D3
-0x99D4
-0x99D5
-0x99D6
-0x99D7
-0x99D8
-0x99D9
-0x99DB
-0x99DC
-0x99DD
-0x99DF
-0x99E2
-0x99E3
-0x99E4
-0x99E5
-0x99E7
-0x99E9
-0x99EA
-0x99EC
-0x99ED
-0x99EE
-0x99F0
-0x99F1
-0x99F4
-0x99F6
-0x99F7
-0x99F8
-0x99F9
-0x99FA
-0x99FB
-0x99FC
-0x99FD
-0x99FE
-0x99FF
-0x9A01
-0x9A02
-0x9A03
-0x9A04
-0x9A05
-0x9A06
-0x9A07
-0x9A09
-0x9A0A
-0x9A0B
-0x9A0D
-0x9A0E
-0x9A0F
-0x9A11
-0x9A14
-0x9A15
-0x9A16
-0x9A19
-0x9A1A
-0x9A1B
-0x9A1C
-0x9A1D
-0x9A1E
-0x9A20
-0x9A22
-0x9A23
-0x9A24
-0x9A25
-0x9A27
-0x9A29
-0x9A2A
-0x9A2B
-0x9A2C
-0x9A2D
-0x9A2E
-0x9A30
-0x9A31
-0x9A32
-0x9A34
-0x9A35
-0x9A36
-0x9A37
-0x9A38
-0x9A39
-0x9A3A
-0x9A3D
-0x9A3E
-0x9A3F
-0x9A40
-0x9A41
-0x9A42
-0x9A43
-0x9A44
-0x9A45
-0x9A46
-0x9A48
-0x9A49
-0x9A4A
-0x9A4C
-0x9A4D
-0x9A4E
-0x9A4F
-0x9A50
-0x9A52
-0x9A53
-0x9A54
-0x9A55
-0x9A56
-0x9A57
-0x9A59
-0x9A5A
-0x9A5B
-0x9A5E
-0x9A5F
-0x9A60
-0x9A62
-0x9A64
-0x9A65
-0x9A66
-0x9A67
-0x9A68
-0x9A69
-0x9A6A
-0x9A6B
-0x9AA8
-0x9AAB
-0x9AAD
-0x9AAF
-0x9AB0
-0x9AB1
-0x9AB3
-0x9AB4
-0x9AB7
-0x9AB8
-0x9AB9
-0x9ABB
-0x9ABC
-0x9ABE
-0x9ABF
-0x9AC0
-0x9AC1
-0x9AC2
-0x9AC6
-0x9AC7
-0x9ACA
-0x9ACD
-0x9ACF
-0x9AD0
-0x9AD1
-0x9AD2
-0x9AD3
-0x9AD4
-0x9AD5
-0x9AD6
-0x9AD8
-0x9ADC
-0x9ADF
-0x9AE1
-0x9AE3
-0x9AE6
-0x9AE7
-0x9AEB
-0x9AEC
-0x9AED
-0x9AEE
-0x9AEF
-0x9AF1
-0x9AF2
-0x9AF3
-0x9AF6
-0x9AF7
-0x9AF9
-0x9AFA
-0x9AFB
-0x9AFC
-0x9AFD
-0x9AFE
-0x9B01
-0x9B03
-0x9B04
-0x9B05
-0x9B06
-0x9B08
-0x9B0A
-0x9B0B
-0x9B0C
-0x9B0D
-0x9B0E
-0x9B10
-0x9B11
-0x9B12
-0x9B15
-0x9B16
-0x9B17
-0x9B18
-0x9B19
-0x9B1A
-0x9B1E
-0x9B1F
-0x9B20
-0x9B22
-0x9B23
-0x9B24
-0x9B25
-0x9B27
-0x9B28
-0x9B29
-0x9B2B
-0x9B2E
-0x9B2F
-0x9B31
-0x9B32
-0x9B33
-0x9B35
-0x9B37
-0x9B3A
-0x9B3B
-0x9B3C
-0x9B3E
-0x9B3F
-0x9B41
-0x9B42
-0x9B43
-0x9B44
-0x9B45
-0x9B46
-0x9B48
-0x9B4A
-0x9B4B
-0x9B4C
-0x9B4D
-0x9B4E
-0x9B4F
-0x9B51
-0x9B52
-0x9B54
-0x9B55
-0x9B56
-0x9B58
-0x9B59
-0x9B5A
-0x9B5B
-0x9B5F
-0x9B60
-0x9B61
-0x9B64
-0x9B66
-0x9B67
-0x9B68
-0x9B6C
-0x9B6F
-0x9B70
-0x9B71
-0x9B74
-0x9B75
-0x9B76
-0x9B77
-0x9B7A
-0x9B7B
-0x9B7C
-0x9B7D
-0x9B7E
-0x9B80
-0x9B82
-0x9B85
-0x9B86
-0x9B87
-0x9B88
-0x9B90
-0x9B91
-0x9B92
-0x9B93
-0x9B95
-0x9B9A
-0x9B9B
-0x9B9E
-0x9BA0
-0x9BA1
-0x9BA2
-0x9BA4
-0x9BA5
-0x9BA6
-0x9BA8
-0x9BAA
-0x9BAB
-0x9BAD
-0x9BAE
-0x9BAF
-0x9BB5
-0x9BB6
-0x9BB8
-0x9BB9
-0x9BBD
-0x9BBF
-0x9BC0
-0x9BC1
-0x9BC3
-0x9BC4
-0x9BC6
-0x9BC7
-0x9BC8
-0x9BC9
-0x9BCA
-0x9BD3
-0x9BD4
-0x9BD5
-0x9BD6
-0x9BD7
-0x9BD9
-0x9BDA
-0x9BDB
-0x9BDC
-0x9BDE
-0x9BE0
-0x9BE1
-0x9BE2
-0x9BE4
-0x9BE5
-0x9BE6
-0x9BE7
-0x9BE8
-0x9BEA
-0x9BEB
-0x9BEC
-0x9BF0
-0x9BF7
-0x9BF8
-0x9BFD
-0x9C05
-0x9C06
-0x9C07
-0x9C08
-0x9C09
-0x9C0B
-0x9C0D
-0x9C0E
-0x9C12
-0x9C13
-0x9C14
-0x9C17
-0x9C1C
-0x9C1D
-0x9C21
-0x9C23
-0x9C24
-0x9C25
-0x9C28
-0x9C29
-0x9C2B
-0x9C2C
-0x9C2D
-0x9C31
-0x9C32
-0x9C33
-0x9C34
-0x9C36
-0x9C37
-0x9C39
-0x9C3B
-0x9C3C
-0x9C3D
-0x9C3E
-0x9C3F
-0x9C40
-0x9C41
-0x9C44
-0x9C46
-0x9C48
-0x9C49
-0x9C4A
-0x9C4B
-0x9C4C
-0x9C4D
-0x9C4E
-0x9C50
-0x9C52
-0x9C54
-0x9C55
-0x9C56
-0x9C57
-0x9C58
-0x9C59
-0x9C5E
-0x9C5F
-0x9C60
-0x9C62
-0x9C63
-0x9C66
-0x9C67
-0x9C68
-0x9C6D
-0x9C6E
-0x9C71
-0x9C73
-0x9C74
-0x9C75
-0x9C77
-0x9C78
-0x9C79
-0x9C7A
-0x9CE5
-0x9CE6
-0x9CE7
-0x9CE9
-0x9CEA
-0x9CED
-0x9CF1
-0x9CF2
-0x9CF3
-0x9CF4
-0x9CF5
-0x9CF6
-0x9CF7
-0x9CF9
-0x9CFA
-0x9CFB
-0x9CFC
-0x9CFD
-0x9CFF
-0x9D00
-0x9D03
-0x9D04
-0x9D05
-0x9D06
-0x9D07
-0x9D08
-0x9D09
-0x9D10
-0x9D12
-0x9D14
-0x9D15
-0x9D17
-0x9D18
-0x9D19
-0x9D1B
-0x9D1D
-0x9D1E
-0x9D1F
-0x9D20
-0x9D22
-0x9D23
-0x9D25
-0x9D26
-0x9D28
-0x9D29
-0x9D2D
-0x9D2E
-0x9D2F
-0x9D30
-0x9D31
-0x9D33
-0x9D36
-0x9D37
-0x9D38
-0x9D3B
-0x9D3D
-0x9D3E
-0x9D3F
-0x9D40
-0x9D41
-0x9D42
-0x9D43
-0x9D45
-0x9D4A
-0x9D4B
-0x9D4C
-0x9D4F
-0x9D51
-0x9D52
-0x9D53
-0x9D54
-0x9D56
-0x9D57
-0x9D58
-0x9D59
-0x9D5A
-0x9D5B
-0x9D5C
-0x9D5D
-0x9D5F
-0x9D60
-0x9D61
-0x9D67
-0x9D68
-0x9D69
-0x9D6A
-0x9D6B
-0x9D6C
-0x9D6F
-0x9D70
-0x9D71
-0x9D72
-0x9D73
-0x9D74
-0x9D75
-0x9D77
-0x9D78
-0x9D79
-0x9D7B
-0x9D7D
-0x9D7F
-0x9D80
-0x9D81
-0x9D82
-0x9D84
-0x9D85
-0x9D86
-0x9D87
-0x9D88
-0x9D89
-0x9D8A
-0x9D8B
-0x9D8C
-0x9D90
-0x9D92
-0x9D94
-0x9D96
-0x9D97
-0x9D98
-0x9D99
-0x9D9A
-0x9D9B
-0x9D9C
-0x9D9D
-0x9D9E
-0x9D9F
-0x9DA0
-0x9DA1
-0x9DA2
-0x9DA3
-0x9DA4
-0x9DA6
-0x9DA7
-0x9DA8
-0x9DA9
-0x9DAA
-0x9DAC
-0x9DAD
-0x9DAF
-0x9DB1
-0x9DB2
-0x9DB3
-0x9DB4
-0x9DB5
-0x9DB6
-0x9DB7
-0x9DB8
-0x9DB9
-0x9DBA
-0x9DBB
-0x9DBC
-0x9DBE
-0x9DBF
-0x9DC1
-0x9DC2
-0x9DC3
-0x9DC5
-0x9DC7
-0x9DC8
-0x9DCA
-0x9DCB
-0x9DCC
-0x9DCD
-0x9DCE
-0x9DCF
-0x9DD0
-0x9DD1
-0x9DD2
-0x9DD3
-0x9DD5
-0x9DD6
-0x9DD7
-0x9DD8
-0x9DD9
-0x9DDA
-0x9DDB
-0x9DDC
-0x9DDD
-0x9DDE
-0x9DDF
-0x9DE1
-0x9DE2
-0x9DE3
-0x9DE4
-0x9DE5
-0x9DE6
-0x9DE8
-0x9DE9
-0x9DEB
-0x9DEC
-0x9DED
-0x9DEE
-0x9DEF
-0x9DF0
-0x9DF2
-0x9DF3
-0x9DF4
-0x9DF5
-0x9DF6
-0x9DF7
-0x9DF8
-0x9DF9
-0x9DFA
-0x9DFB
-0x9DFD
-0x9DFE
-0x9DFF
-0x9E00
-0x9E01
-0x9E02
-0x9E03
-0x9E04
-0x9E05
-0x9E06
-0x9E07
-0x9E09
-0x9E0B
-0x9E0D
-0x9E0F
-0x9E10
-0x9E11
-0x9E12
-0x9E13
-0x9E14
-0x9E15
-0x9E17
-0x9E19
-0x9E1A
-0x9E1B
-0x9E1D
-0x9E1E
-0x9E75
-0x9E79
-0x9E7A
-0x9E7C
-0x9E7D
-0x9E7F
-0x9E80
-0x9E82
-0x9E83
-0x9E86
-0x9E87
-0x9E88
-0x9E89
-0x9E8A
-0x9E8B
-0x9E8C
-0x9E8D
-0x9E8E
-0x9E91
-0x9E92
-0x9E93
-0x9E94
-0x9E97
-0x9E99
-0x9E9A
-0x9E9B
-0x9E9C
-0x9E9D
-0x9E9F
-0x9EA0
-0x9EA1
-0x9EA4
-0x9EA5
-0x9EA7
-0x9EA9
-0x9EAD
-0x9EAE
-0x9EB0
-0x9EB4
-0x9EB5
-0x9EB6
-0x9EB7
-0x9EBB
-0x9EBC
-0x9EBE
-0x9EC0
-0x9EC2
-0x9EC3
-0x9EC8
-0x9ECC
-0x9ECD
-0x9ECE
-0x9ECF
-0x9ED0
-0x9ED1
-0x9ED3
-0x9ED4
-0x9ED5
-0x9ED6
-0x9ED8
-0x9EDA
-0x9EDB
-0x9EDC
-0x9EDD
-0x9EDE
-0x9EDF
-0x9EE0
-0x9EE4
-0x9EE5
-0x9EE6
-0x9EE7
-0x9EE8
-0x9EEB
-0x9EED
-0x9EEE
-0x9EEF
-0x9EF0
-0x9EF2
-0x9EF3
-0x9EF4
-0x9EF5
-0x9EF6
-0x9EF7
-0x9EF9
-0x9EFA
-0x9EFB
-0x9EFC
-0x9EFD
-0x9EFF
-0x9F00
-0x9F01
-0x9F06
-0x9F07
-0x9F09
-0x9F0A
-0x9F0E
-0x9F0F
-0x9F10
-0x9F12
-0x9F13
-0x9F15
-0x9F16
-0x9F18
-0x9F19
-0x9F1A
-0x9F1B
-0x9F1C
-0x9F1E
-0x9F20
-0x9F22
-0x9F23
-0x9F24
-0x9F25
-0x9F28
-0x9F29
-0x9F2A
-0x9F2B
-0x9F2C
-0x9F2D
-0x9F2E
-0x9F2F
-0x9F30
-0x9F31
-0x9F32
-0x9F33
-0x9F34
-0x9F35
-0x9F36
-0x9F37
-0x9F38
-0x9F3B
-0x9F3D
-0x9F3E
-0x9F40
-0x9F41
-0x9F42
-0x9F43
-0x9F46
-0x9F47
-0x9F48
-0x9F49
-0x9F4A
-0x9F4B
-0x9F4C
-0x9F4D
-0x9F4E
-0x9F4F
-0x9F52
-0x9F54
-0x9F55
-0x9F56
-0x9F57
-0x9F58
-0x9F59
-0x9F5B
-0x9F5C
-0x9F5D
-0x9F5E
-0x9F5F
-0x9F60
-0x9F61
-0x9F63
-0x9F64
-0x9F65
-0x9F66
-0x9F67
-0x9F6A
-0x9F6B
-0x9F6C
-0x9F6E
-0x9F6F
-0x9F70
-0x9F71
-0x9F72
-0x9F74
-0x9F75
-0x9F76
-0x9F77
-0x9F78
-0x9F79
-0x9F7A
-0x9F7B
-0x9F7E
-0x9F8D
-0x9F90
-0x9F91
-0x9F92
-0x9F94
-0x9F95
-0x9F98
-0x9F9C
-0x9FA0
-0x9FA2
-0x9FA4
-0xFA0C
-0xFA0D
+# +# fontconfig/fc-lang/zh_tw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese (traditional) ZH-TW +# +# Made by trimming the Big5 -> unicode mapping down to just Chinese glyphs +# +#0x3000 # ideographic space +#0x3001 # ideographic comma +#0x3002 # ideographic full stop +#0x3003 # ditto mark +#0x3005 # ideographic iteration mark +#0x3021 # Suzhou numeral 1 +#0x3022 # Suzhou numeral 2 +#0x3023 # Suzhou numeral 3 +#0x3024 # Suzhou numeral 4 +#0x3025 # Suzhou numeral 5 +#0x3026 # Suzhou numeral 6 +#0x3027 # Suzhou numeral 7 +#0x3028 # Suzhou numeral 8 +#0x3029 # Suzhou numeral 9 +# Han +0x4E00 +0x4E01 +0x4E03 +0x4E07 +0x4E08 +0x4E09 +0x4E0A +0x4E0B +0x4E0C +0x4E0D +0x4E0E +0x4E0F +0x4E10 +0x4E11 +0x4E14 +0x4E15 +0x4E16 +0x4E18 +0x4E19 +0x4E1E +0x4E1F +0x4E26 +0x4E2B +0x4E2D +0x4E2E +0x4E30 +0x4E31 +0x4E32 +0x4E33 +0x4E38 +0x4E39 +0x4E3B +0x4E3C +0x4E42 +0x4E43 +0x4E45 +0x4E47 +0x4E48 +0x4E4B +0x4E4D +0x4E4E +0x4E4F +0x4E52 +0x4E53 +0x4E56 +0x4E58 +0x4E59 +0x4E5C +0x4E5D +0x4E5E +0x4E5F +0x4E69 +0x4E73 +0x4E7E +0x4E7F +0x4E82 +0x4E83 +0x4E84 +0x4E86 +0x4E88 +0x4E8B +0x4E8C +0x4E8D +0x4E8E +0x4E91 +0x4E92 +0x4E93 +0x4E94 +0x4E95 +0x4E99 +0x4E9B +0x4E9E +0x4E9F +0x4EA1 +0x4EA2 +0x4EA4 +0x4EA5 +0x4EA6 +0x4EA8 +0x4EAB +0x4EAC +0x4EAD +0x4EAE +0x4EB3 +0x4EB6 +0x4EB9 +0x4EBA +0x4EC0 +0x4EC1 +0x4EC2 +0x4EC3 +0x4EC4 +0x4EC6 +0x4EC7 +0x4EC8 +0x4EC9 +0x4ECA +0x4ECB +0x4ECD +0x4ED4 +0x4ED5 +0x4ED6 +0x4ED7 +0x4ED8 +0x4ED9 +0x4EDA +0x4EDC +0x4EDD +0x4EDE +0x4EDF +0x4EE1 +0x4EE3 +0x4EE4 +0x4EE5 +0x4EE8 +0x4EE9 +0x4EF0 +0x4EF1 +0x4EF2 +0x4EF3 +0x4EF4 +0x4EF5 +0x4EF6 +0x4EF7 +0x4EFB +0x4EFD +0x4EFF +0x4F00 +0x4F01 +0x4F02 +0x4F04 +0x4F05 +0x4F08 +0x4F09 +0x4F0A +0x4F0B +0x4F0D +0x4F0E +0x4F0F +0x4F10 +0x4F11 +0x4F12 +0x4F13 +0x4F14 +0x4F15 +0x4F18 +0x4F19 +0x4F1D +0x4F22 +0x4F2C +0x4F2D +0x4F2F +0x4F30 +0x4F33 +0x4F34 +0x4F36 +0x4F38 +0x4F3A +0x4F3B +0x4F3C +0x4F3D +0x4F3E +0x4F3F +0x4F41 +0x4F43 +0x4F46 +0x4F47 +0x4F48 +0x4F49 +0x4F4C +0x4F4D +0x4F4E +0x4F4F +0x4F50 +0x4F51 +0x4F52 +0x4F53 +0x4F54 +0x4F55 +0x4F56 +0x4F57 +0x4F58 +0x4F59 +0x4F5A +0x4F5B +0x4F5C +0x4F5D +0x4F5E +0x4F5F +0x4F60 +0x4F61 +0x4F62 +0x4F63 +0x4F64 +0x4F67 +0x4F69 +0x4F6A +0x4F6B +0x4F6C +0x4F6E +0x4F6F +0x4F70 +0x4F73 +0x4F74 +0x4F75 +0x4F76 +0x4F77 +0x4F78 +0x4F79 +0x4F7A +0x4F7B +0x4F7C +0x4F7D +0x4F7E +0x4F7F +0x4F80 +0x4F81 +0x4F82 +0x4F83 +0x4F84 +0x4F85 +0x4F86 +0x4F87 +0x4F88 +0x4F89 +0x4F8B +0x4F8D +0x4F8F +0x4F90 +0x4F91 +0x4F92 +0x4F94 +0x4F95 +0x4F96 +0x4F97 +0x4F98 +0x4F9A +0x4F9B +0x4F9C +0x4F9D +0x4F9E +0x4FAE +0x4FAF +0x4FB2 +0x4FB3 +0x4FB5 +0x4FB6 +0x4FB7 +0x4FB9 +0x4FBA +0x4FBB +0x4FBF +0x4FC0 +0x4FC1 +0x4FC2 +0x4FC3 +0x4FC4 +0x4FC5 +0x4FC7 +0x4FC9 +0x4FCA +0x4FCB +0x4FCD +0x4FCE +0x4FCF +0x4FD0 +0x4FD1 +0x4FD3 +0x4FD4 +0x4FD6 +0x4FD7 +0x4FD8 +0x4FD9 +0x4FDA +0x4FDB +0x4FDC +0x4FDD +0x4FDE +0x4FDF +0x4FE0 +0x4FE1 +0x4FEC +0x4FEE +0x4FEF +0x4FF1 +0x4FF3 +0x4FF4 +0x4FF5 +0x4FF6 +0x4FF7 +0x4FF8 +0x4FFA +0x4FFE +0x5000 +0x5005 +0x5006 +0x5007 +0x5009 +0x500B +0x500C +0x500D +0x500E +0x500F +0x5011 +0x5012 +0x5013 +0x5014 +0x5015 +0x5016 +0x5017 +0x5018 +0x5019 +0x501A +0x501B +0x501C +0x501E +0x501F +0x5020 +0x5021 +0x5022 +0x5023 +0x5025 +0x5026 +0x5027 +0x5028 +0x5029 +0x502A +0x502B +0x502C +0x502D +0x502F +0x5030 +0x5031 +0x5033 +0x5035 +0x5037 +0x503C +0x5040 +0x5041 +0x5043 +0x5045 +0x5046 +0x5047 +0x5048 +0x5049 +0x504A +0x504B +0x504C +0x504D +0x504E +0x504F +0x5051 +0x5053 +0x5055 +0x5057 +0x505A +0x505B +0x505C +0x505D +0x505E +0x505F +0x5060 +0x5061 +0x5062 +0x5063 +0x5064 +0x5065 +0x5068 +0x5069 +0x506A +0x506B +0x506D +0x506E +0x506F +0x5070 +0x5072 +0x5073 +0x5074 +0x5075 +0x5076 +0x5077 +0x507A +0x507D +0x5080 +0x5082 +0x5083 +0x5085 +0x5087 +0x508B +0x508C +0x508D +0x508E +0x5091 +0x5092 +0x5094 +0x5095 +0x5096 +0x5098 +0x5099 +0x509A +0x509B +0x509C +0x509D +0x509E +0x50A2 +0x50A3 +0x50AC +0x50AD +0x50AE +0x50AF +0x50B0 +0x50B1 +0x50B2 +0x50B3 +0x50B4 +0x50B5 +0x50B6 +0x50B7 +0x50B8 +0x50BA +0x50BB +0x50BD +0x50BE +0x50BF +0x50C1 +0x50C2 +0x50C4 +0x50C5 +0x50C6 +0x50C7 +0x50C8 +0x50C9 +0x50CA +0x50CB +0x50CE +0x50CF +0x50D1 +0x50D3 +0x50D4 +0x50D5 +0x50D6 +0x50D7 +0x50DA +0x50DB +0x50DD +0x50E0 +0x50E3 +0x50E4 +0x50E5 +0x50E6 +0x50E7 +0x50E8 +0x50E9 +0x50EA +0x50EC +0x50ED +0x50EE +0x50EF +0x50F0 +0x50F1 +0x50F3 +0x50F5 +0x50F6 +0x50F8 +0x50F9 +0x50FB +0x50FD +0x50FE +0x50FF +0x5100 +0x5102 +0x5103 +0x5104 +0x5105 +0x5106 +0x5107 +0x5108 +0x5109 +0x510A +0x510B +0x510C +0x5110 +0x5111 +0x5112 +0x5113 +0x5114 +0x5115 +0x5117 +0x5118 +0x511A +0x511C +0x511F +0x5120 +0x5121 +0x5122 +0x5124 +0x5125 +0x5126 +0x5129 +0x512A +0x512D +0x512E +0x5130 +0x5131 +0x5132 +0x5133 +0x5134 +0x5135 +0x5137 +0x5138 +0x5139 +0x513A +0x513B +0x513C +0x513D +0x513F +0x5140 +0x5141 +0x5143 +0x5144 +0x5145 +0x5146 +0x5147 +0x5148 +0x5149 +0x514B +0x514C +0x514D +0x5152 +0x5154 +0x5155 +0x5157 +0x5159 +0x515A +0x515B +0x515C +0x515D +0x515E +0x515F +0x5161 +0x5162 +0x5163 +0x5165 +0x5167 +0x5168 +0x5169 +0x516B +0x516C +0x516D +0x516E +0x5171 +0x5175 +0x5176 +0x5177 +0x5178 +0x517C +0x5180 +0x5187 +0x5189 +0x518A +0x518D +0x518F +0x5191 +0x5192 +0x5193 +0x5194 +0x5195 +0x5197 +0x5198 +0x519E +0x51A0 +0x51A2 +0x51A4 +0x51A5 +0x51AA +0x51AC +0x51B0 +0x51B1 +0x51B6 +0x51B7 +0x51B9 +0x51BC +0x51BD +0x51BE +0x51C4 +0x51C5 +0x51C6 +0x51C8 +0x51CA +0x51CB +0x51CC +0x51CD +0x51CE +0x51D0 +0x51D4 +0x51D7 +0x51D8 +0x51DC +0x51DD +0x51DE +0x51E0 +0x51E1 +0x51F0 +0x51F1 +0x51F3 +0x51F5 +0x51F6 +0x51F8 +0x51F9 +0x51FA +0x51FD +0x5200 +0x5201 +0x5203 +0x5206 +0x5207 +0x5208 +0x5209 +0x520A +0x520C +0x520E +0x5210 +0x5211 +0x5212 +0x5213 +0x5216 +0x5217 +0x521C +0x521D +0x521E +0x5221 +0x5224 +0x5225 +0x5228 +0x5229 +0x522A +0x522E +0x5230 +0x5231 +0x5232 +0x5233 +0x5235 +0x5236 +0x5237 +0x5238 +0x523A +0x523B +0x5241 +0x5243 +0x5244 +0x5246 +0x5247 +0x5249 +0x524A +0x524B +0x524C +0x524D +0x524E +0x5252 +0x5254 +0x5255 +0x5256 +0x525A +0x525B +0x525C +0x525D +0x525E +0x525F +0x5261 +0x5262 +0x5269 +0x526A +0x526B +0x526C +0x526D +0x526E +0x526F +0x5272 +0x5274 +0x5275 +0x5277 +0x5278 +0x527A +0x527B +0x527C +0x527D +0x527F +0x5280 +0x5281 +0x5282 +0x5283 +0x5284 +0x5287 +0x5288 +0x5289 +0x528A +0x528B +0x528C +0x528D +0x5291 +0x5293 +0x5296 +0x5297 +0x5298 +0x5299 +0x529B +0x529F +0x52A0 +0x52A3 +0x52A6 +0x52A9 +0x52AA +0x52AB +0x52AC +0x52AD +0x52AE +0x52BB +0x52BC +0x52BE +0x52C0 +0x52C1 +0x52C2 +0x52C3 +0x52C7 +0x52C9 +0x52CD +0x52D2 +0x52D3 +0x52D5 +0x52D6 +0x52D7 +0x52D8 +0x52D9 +0x52DB +0x52DD +0x52DE +0x52DF +0x52E2 +0x52E3 +0x52E4 +0x52E6 +0x52E9 +0x52EB +0x52EF +0x52F0 +0x52F1 +0x52F3 +0x52F4 +0x52F5 +0x52F7 +0x52F8 +0x52FA +0x52FB +0x52FC +0x52FE +0x52FF +0x5305 +0x5306 +0x5308 +0x5309 +0x530A +0x530B +0x530D +0x530E +0x530F +0x5310 +0x5311 +0x5312 +0x5315 +0x5316 +0x5317 +0x5319 +0x531A +0x531C +0x531D +0x531F +0x5320 +0x5321 +0x5322 +0x5323 +0x532A +0x532D +0x532F +0x5330 +0x5331 +0x5334 +0x5337 +0x5339 +0x533C +0x533D +0x533E +0x533F +0x5340 +0x5341 +0x5343 +0x5344 +0x5345 +0x5347 +0x5348 +0x5349 +0x534A +0x534C +0x534D +0x5351 +0x5352 +0x5353 +0x5354 +0x5357 +0x535A +0x535C +0x535E +0x5360 +0x5361 +0x5363 +0x5366 +0x536C +0x536E +0x536F +0x5370 +0x5371 +0x5372 +0x5373 +0x5375 +0x5377 +0x5378 +0x5379 +0x537B +0x537C +0x537F +0x5382 +0x5384 +0x538A +0x538E +0x538F +0x5392 +0x5394 +0x5396 +0x5397 +0x5398 +0x5399 +0x539A +0x539C +0x539D +0x539E +0x539F +0x53A4 +0x53A5 +0x53A7 +0x53AC +0x53AD +0x53B2 +0x53B4 +0x53B9 +0x53BB +0x53C3 +0x53C8 +0x53C9 +0x53CA +0x53CB +0x53CD +0x53D4 +0x53D6 +0x53D7 +0x53DB +0x53DF +0x53E1 +0x53E2 +0x53E3 +0x53E4 +0x53E5 +0x53E6 +0x53E8 +0x53E9 +0x53EA +0x53EB +0x53EC +0x53ED +0x53EE +0x53EF +0x53F0 +0x53F1 +0x53F2 +0x53F3 +0x53F5 +0x53F8 +0x53FB +0x53FC +0x5401 +0x5403 +0x5404 +0x5406 +0x5407 +0x5408 +0x5409 +0x540A +0x540B +0x540C +0x540D +0x540E +0x540F +0x5410 +0x5411 +0x5412 +0x5418 +0x5419 +0x541B +0x541C +0x541D +0x541E +0x541F +0x5420 +0x5424 +0x5425 +0x5426 +0x5427 +0x5428 +0x5429 +0x542A +0x542B +0x542C +0x542D +0x542E +0x5430 +0x5431 +0x5433 +0x5435 +0x5436 +0x5437 +0x5438 +0x5439 +0x543B +0x543C +0x543D +0x543E +0x5440 +0x5441 +0x5442 +0x5443 +0x5445 +0x5446 +0x5447 +0x5448 +0x544A +0x544E +0x544F +0x5454 +0x5460 +0x5461 +0x5462 +0x5463 +0x5464 +0x5465 +0x5466 +0x5467 +0x5468 +0x546B +0x546C +0x546F +0x5470 +0x5471 +0x5472 +0x5473 +0x5474 +0x5475 +0x5476 +0x5477 +0x5478 +0x547A +0x547B +0x547C +0x547D +0x547E +0x547F +0x5480 +0x5481 +0x5482 +0x5484 +0x5486 +0x5487 +0x5488 +0x548B +0x548C +0x548D +0x548E +0x5490 +0x5491 +0x5492 +0x5495 +0x5496 +0x5498 +0x549A +0x54A0 +0x54A1 +0x54A2 +0x54A5 +0x54A6 +0x54A7 +0x54A8 +0x54A9 +0x54AA +0x54AB +0x54AC +0x54AD +0x54AE +0x54AF +0x54B0 +0x54B1 +0x54B3 +0x54B6 +0x54B7 +0x54B8 +0x54BA +0x54BB +0x54BC +0x54BD +0x54BE +0x54BF +0x54C0 +0x54C1 +0x54C2 +0x54C3 +0x54C4 +0x54C5 +0x54C6 +0x54C7 +0x54C8 +0x54C9 +0x54CE +0x54CF +0x54D6 +0x54DE +0x54E0 +0x54E1 +0x54E2 +0x54E4 +0x54E5 +0x54E6 +0x54E7 +0x54E8 +0x54E9 +0x54EA +0x54EB +0x54ED +0x54EE +0x54F1 +0x54F2 +0x54F3 +0x54F7 +0x54F8 +0x54FA +0x54FB +0x54FC +0x54FD +0x54FF +0x5501 +0x5503 +0x5504 +0x5505 +0x5506 +0x5507 +0x5508 +0x5509 +0x550A +0x550B +0x550C +0x550E +0x550F +0x5510 +0x5511 +0x5512 +0x5514 +0x5517 +0x551A +0x5526 +0x5527 +0x552A +0x552C +0x552D +0x552E +0x552F +0x5530 +0x5531 +0x5532 +0x5533 +0x5534 +0x5535 +0x5536 +0x5537 +0x5538 +0x5539 +0x553B +0x553C +0x553E +0x5540 +0x5541 +0x5543 +0x5544 +0x5545 +0x5546 +0x5548 +0x554A +0x554B +0x554D +0x554E +0x554F +0x5550 +0x5551 +0x5552 +0x5555 +0x5556 +0x5557 +0x555C +0x555E +0x555F +0x5561 +0x5562 +0x5563 +0x5564 +0x5565 +0x5566 +0x556A +0x5575 +0x5576 +0x5577 +0x557B +0x557C +0x557D +0x557E +0x557F +0x5580 +0x5581 +0x5582 +0x5583 +0x5584 +0x5587 +0x5588 +0x5589 +0x558A +0x558B +0x558C +0x558D +0x558E +0x558F +0x5591 +0x5592 +0x5593 +0x5594 +0x5595 +0x5598 +0x5599 +0x559A +0x559C +0x559D +0x559F +0x55A1 +0x55A2 +0x55A3 +0x55A4 +0x55A5 +0x55A6 +0x55A7 +0x55A8 +0x55AA +0x55AB +0x55AC +0x55AD +0x55AE +0x55B1 +0x55B2 +0x55B3 +0x55B5 +0x55BB +0x55BF +0x55C0 +0x55C2 +0x55C3 +0x55C4 +0x55C5 +0x55C6 +0x55C7 +0x55C8 +0x55C9 +0x55CA +0x55CB +0x55CC +0x55CD +0x55CE +0x55CF +0x55D0 +0x55D1 +0x55D2 +0x55D3 +0x55D4 +0x55D5 +0x55D6 +0x55D9 +0x55DA +0x55DB +0x55DC +0x55DD +0x55DF +0x55E1 +0x55E2 +0x55E3 +0x55E4 +0x55E5 +0x55E6 +0x55E7 +0x55E8 +0x55E9 +0x55EF +0x55F2 +0x55F6 +0x55F7 +0x55F9 +0x55FA +0x55FC +0x55FD +0x55FE +0x55FF +0x5600 +0x5601 +0x5602 +0x5604 +0x5606 +0x5608 +0x5609 +0x560C +0x560D +0x560E +0x560F +0x5610 +0x5612 +0x5613 +0x5614 +0x5615 +0x5616 +0x5617 +0x561B +0x561C +0x561D +0x561F +0x5627 +0x5629 +0x562A +0x562C +0x562E +0x562F +0x5630 +0x5632 +0x5633 +0x5634 +0x5635 +0x5636 +0x5638 +0x5639 +0x563A +0x563B +0x563D +0x563E +0x563F +0x5640 +0x5641 +0x5642 +0x5645 +0x5646 +0x5648 +0x5649 +0x564A +0x564C +0x564E +0x5653 +0x5657 +0x5658 +0x5659 +0x565A +0x565E +0x5660 +0x5662 +0x5663 +0x5664 +0x5665 +0x5666 +0x5668 +0x5669 +0x566A +0x566B +0x566C +0x566D +0x566E +0x566F +0x5670 +0x5671 +0x5672 +0x5673 +0x5674 +0x5676 +0x5677 +0x5678 +0x5679 +0x567E +0x567F +0x5680 +0x5681 +0x5682 +0x5683 +0x5684 +0x5685 +0x5686 +0x5687 +0x568C +0x568D +0x568E +0x568F +0x5690 +0x5693 +0x5695 +0x5697 +0x5698 +0x5699 +0x569A +0x569C +0x569D +0x56A5 +0x56A6 +0x56A7 +0x56A8 +0x56AA +0x56AB +0x56AC +0x56AD +0x56AE +0x56B2 +0x56B3 +0x56B4 +0x56B5 +0x56B6 +0x56B7 +0x56BC +0x56BD +0x56BE +0x56C0 +0x56C1 +0x56C2 +0x56C3 +0x56C5 +0x56C6 +0x56C8 +0x56C9 +0x56CA +0x56CB +0x56CC +0x56CD +0x56D1 +0x56D3 +0x56D4 +0x56D7 +0x56DA +0x56DB +0x56DD +0x56DE +0x56DF +0x56E0 +0x56E1 +0x56E4 +0x56E5 +0x56E7 +0x56EA +0x56EB +0x56EE +0x56F0 +0x56F7 +0x56F9 +0x56FA +0x56FF +0x5701 +0x5702 +0x5703 +0x5704 +0x5707 +0x5708 +0x5709 +0x570A +0x570B +0x570C +0x570D +0x5712 +0x5713 +0x5714 +0x5716 +0x5718 +0x571A +0x571B +0x571C +0x571E +0x571F +0x5720 +0x5722 +0x5723 +0x5728 +0x5729 +0x572A +0x572C +0x572D +0x572E +0x572F +0x5730 +0x5733 +0x5734 +0x573B +0x573E +0x5740 +0x5741 +0x5745 +0x5747 +0x5749 +0x574A +0x574B +0x574C +0x574D +0x574E +0x574F +0x5750 +0x5751 +0x5752 +0x5761 +0x5762 +0x5764 +0x5766 +0x5768 +0x5769 +0x576A +0x576B +0x576D +0x576F +0x5770 +0x5771 +0x5772 +0x5773 +0x5774 +0x5775 +0x5776 +0x5777 +0x577B +0x577C +0x577D +0x5780 +0x5782 +0x5783 +0x578B +0x578C +0x578F +0x5793 +0x5794 +0x5795 +0x5797 +0x5798 +0x5799 +0x579A +0x579B +0x579D +0x579E +0x579F +0x57A0 +0x57A2 +0x57A3 +0x57A4 +0x57A5 +0x57AE +0x57B5 +0x57B6 +0x57B8 +0x57B9 +0x57BA +0x57BC +0x57BD +0x57BF +0x57C1 +0x57C2 +0x57C3 +0x57C6 +0x57C7 +0x57CB +0x57CC +0x57CE +0x57CF +0x57D0 +0x57D2 +0x57D4 +0x57D5 +0x57DC +0x57DF +0x57E0 +0x57E1 +0x57E2 +0x57E3 +0x57E4 +0x57E5 +0x57E7 +0x57E9 +0x57EC +0x57ED +0x57EE +0x57F0 +0x57F1 +0x57F2 +0x57F3 +0x57F4 +0x57F5 +0x57F6 +0x57F7 +0x57F8 +0x57F9 +0x57FA +0x57FB +0x57FC +0x57FD +0x5800 +0x5801 +0x5802 +0x5804 +0x5805 +0x5806 +0x5807 +0x5808 +0x5809 +0x580A +0x580B +0x580C +0x580D +0x580E +0x5810 +0x5814 +0x5819 +0x581B +0x581C +0x581D +0x581E +0x5820 +0x5821 +0x5823 +0x5824 +0x5825 +0x5827 +0x5828 +0x5829 +0x582A +0x582C +0x582D +0x582E +0x582F +0x5830 +0x5831 +0x5832 +0x5833 +0x5834 +0x5835 +0x5836 +0x5837 +0x5838 +0x5839 +0x583B +0x583D +0x583F +0x5848 +0x5849 +0x584A +0x584B +0x584C +0x584D +0x584E +0x584F +0x5851 +0x5852 +0x5853 +0x5854 +0x5855 +0x5857 +0x5858 +0x5859 +0x585A +0x585B +0x585D +0x585E +0x5862 +0x5863 +0x5864 +0x5865 +0x5868 +0x586B +0x586D +0x586F +0x5871 +0x5874 +0x5875 +0x5876 +0x5879 +0x587A +0x587B +0x587C +0x587D +0x587E +0x587F +0x5880 +0x5881 +0x5882 +0x5883 +0x5885 +0x5886 +0x5887 +0x5888 +0x5889 +0x588A +0x588B +0x588E +0x588F +0x5890 +0x5891 +0x5893 +0x5894 +0x5898 +0x589C +0x589D +0x589E +0x589F +0x58A0 +0x58A1 +0x58A3 +0x58A5 +0x58A6 +0x58A8 +0x58A9 +0x58AB +0x58AC +0x58AE +0x58AF +0x58B1 +0x58B3 +0x58BA +0x58BC +0x58BD +0x58BE +0x58BF +0x58C1 +0x58C2 +0x58C5 +0x58C6 +0x58C7 +0x58C8 +0x58C9 +0x58CE +0x58CF +0x58D1 +0x58D2 +0x58D3 +0x58D4 +0x58D5 +0x58D6 +0x58D8 +0x58D9 +0x58DA +0x58DB +0x58DD +0x58DE +0x58DF +0x58E2 +0x58E3 +0x58E4 +0x58E7 +0x58E8 +0x58E9 +0x58EB +0x58EC +0x58EF +0x58F4 +0x58F9 +0x58FA +0x58FC +0x58FD +0x58FE +0x58FF +0x5903 +0x5906 +0x590C +0x590D +0x590E +0x590F +0x5912 +0x5914 +0x5915 +0x5916 +0x5917 +0x5919 +0x591A +0x591C +0x5920 +0x5922 +0x5924 +0x5925 +0x5927 +0x5929 +0x592A +0x592B +0x592C +0x592D +0x592E +0x592F +0x5931 +0x5937 +0x5938 +0x593C +0x593E +0x5940 +0x5944 +0x5945 +0x5947 +0x5948 +0x5949 +0x594A +0x594E +0x594F +0x5950 +0x5951 +0x5953 +0x5954 +0x5955 +0x5957 +0x5958 +0x595A +0x595C +0x5960 +0x5961 +0x5962 +0x5967 +0x5969 +0x596A +0x596B +0x596D +0x596E +0x5970 +0x5971 +0x5972 +0x5973 +0x5974 +0x5976 +0x5977 +0x5978 +0x5979 +0x597B +0x597C +0x597D +0x597E +0x597F +0x5980 +0x5981 +0x5982 +0x5983 +0x5984 +0x5985 +0x598A +0x598D +0x598E +0x598F +0x5990 +0x5992 +0x5993 +0x5996 +0x5997 +0x5998 +0x5999 +0x599D +0x599E +0x59A0 +0x59A1 +0x59A2 +0x59A3 +0x59A4 +0x59A5 +0x59A6 +0x59A7 +0x59A8 +0x59AE +0x59AF +0x59B1 +0x59B2 +0x59B3 +0x59B4 +0x59B5 +0x59B6 +0x59B9 +0x59BA +0x59BB +0x59BC +0x59BD +0x59BE +0x59C0 +0x59C1 +0x59C3 +0x59C5 +0x59C6 +0x59C7 +0x59C8 +0x59CA +0x59CB +0x59CC +0x59CD +0x59CE +0x59CF +0x59D0 +0x59D1 +0x59D2 +0x59D3 +0x59D4 +0x59D6 +0x59D8 +0x59DA +0x59DB +0x59DC +0x59DD +0x59DE +0x59E0 +0x59E1 +0x59E3 +0x59E4 +0x59E5 +0x59E6 +0x59E8 +0x59E9 +0x59EA +0x59EC +0x59ED +0x59EE +0x59F1 +0x59F2 +0x59F3 +0x59F4 +0x59F5 +0x59F6 +0x59F7 +0x59FA +0x59FB +0x59FC +0x59FD +0x59FE +0x59FF +0x5A00 +0x5A01 +0x5A03 +0x5A09 +0x5A0A +0x5A0C +0x5A0F +0x5A11 +0x5A13 +0x5A15 +0x5A16 +0x5A17 +0x5A18 +0x5A19 +0x5A1B +0x5A1C +0x5A1E +0x5A1F +0x5A20 +0x5A23 +0x5A25 +0x5A29 +0x5A2D +0x5A2E +0x5A33 +0x5A35 +0x5A36 +0x5A37 +0x5A38 +0x5A39 +0x5A3C +0x5A3E +0x5A40 +0x5A41 +0x5A42 +0x5A43 +0x5A44 +0x5A46 +0x5A47 +0x5A48 +0x5A49 +0x5A4A +0x5A4C +0x5A4D +0x5A50 +0x5A51 +0x5A52 +0x5A53 +0x5A55 +0x5A56 +0x5A57 +0x5A58 +0x5A5A +0x5A5B +0x5A5C +0x5A5D +0x5A5E +0x5A5F +0x5A60 +0x5A62 +0x5A64 +0x5A65 +0x5A66 +0x5A67 +0x5A69 +0x5A6A +0x5A6C +0x5A6D +0x5A70 +0x5A77 +0x5A78 +0x5A7A +0x5A7B +0x5A7C +0x5A7D +0x5A7F +0x5A83 +0x5A84 +0x5A8A +0x5A8B +0x5A8C +0x5A8E +0x5A8F +0x5A90 +0x5A92 +0x5A93 +0x5A94 +0x5A95 +0x5A97 +0x5A9A +0x5A9B +0x5A9C +0x5A9D +0x5A9E +0x5A9F +0x5AA2 +0x5AA5 +0x5AA6 +0x5AA7 +0x5AA9 +0x5AAC +0x5AAE +0x5AAF +0x5AB0 +0x5AB1 +0x5AB2 +0x5AB3 +0x5AB4 +0x5AB5 +0x5AB6 +0x5AB7 +0x5AB8 +0x5AB9 +0x5ABA +0x5ABB +0x5ABC +0x5ABD +0x5ABE +0x5ABF +0x5AC0 +0x5AC1 +0x5AC2 +0x5AC4 +0x5AC6 +0x5AC7 +0x5AC8 +0x5AC9 +0x5ACA +0x5ACB +0x5ACC +0x5ACD +0x5AD5 +0x5AD6 +0x5AD7 +0x5AD8 +0x5AD9 +0x5ADA +0x5ADB +0x5ADC +0x5ADD +0x5ADE +0x5ADF +0x5AE0 +0x5AE1 +0x5AE2 +0x5AE3 +0x5AE5 +0x5AE6 +0x5AE8 +0x5AE9 +0x5AEA +0x5AEB +0x5AEC +0x5AED +0x5AEE +0x5AF3 +0x5AF4 +0x5AF5 +0x5AF6 +0x5AF7 +0x5AF8 +0x5AF9 +0x5AFB +0x5AFD +0x5AFF +0x5B01 +0x5B02 +0x5B03 +0x5B05 +0x5B07 +0x5B08 +0x5B09 +0x5B0B +0x5B0C +0x5B0F +0x5B10 +0x5B13 +0x5B14 +0x5B16 +0x5B17 +0x5B19 +0x5B1A +0x5B1B +0x5B1D +0x5B1E +0x5B20 +0x5B21 +0x5B23 +0x5B24 +0x5B25 +0x5B26 +0x5B27 +0x5B28 +0x5B2A +0x5B2C +0x5B2D +0x5B2E +0x5B2F +0x5B30 +0x5B32 +0x5B34 +0x5B38 +0x5B3C +0x5B3D +0x5B3E +0x5B3F +0x5B40 +0x5B43 +0x5B45 +0x5B47 +0x5B48 +0x5B4B +0x5B4C +0x5B4D +0x5B4E +0x5B50 +0x5B51 +0x5B53 +0x5B54 +0x5B55 +0x5B56 +0x5B57 +0x5B58 +0x5B5A +0x5B5B +0x5B5C +0x5B5D +0x5B5F +0x5B62 +0x5B63 +0x5B64 +0x5B65 +0x5B69 +0x5B6B +0x5B6C +0x5B6E +0x5B70 +0x5B71 +0x5B72 +0x5B73 +0x5B75 +0x5B77 +0x5B78 +0x5B7A +0x5B7B +0x5B7D +0x5B7F +0x5B81 +0x5B83 +0x5B84 +0x5B85 +0x5B87 +0x5B88 +0x5B89 +0x5B8B +0x5B8C +0x5B8E +0x5B8F +0x5B92 +0x5B93 +0x5B95 +0x5B97 +0x5B98 +0x5B99 +0x5B9A +0x5B9B +0x5B9C +0x5BA2 +0x5BA3 +0x5BA4 +0x5BA5 +0x5BA6 +0x5BA7 +0x5BA8 +0x5BAC +0x5BAD +0x5BAE +0x5BB0 +0x5BB3 +0x5BB4 +0x5BB5 +0x5BB6 +0x5BB8 +0x5BB9 +0x5BBF +0x5BC0 +0x5BC1 +0x5BC2 +0x5BC4 +0x5BC5 +0x5BC6 +0x5BC7 +0x5BCA +0x5BCB +0x5BCC +0x5BCD +0x5BCE +0x5BD0 +0x5BD1 +0x5BD2 +0x5BD3 +0x5BD4 +0x5BD6 +0x5BD8 +0x5BD9 +0x5BDE +0x5BDF +0x5BE0 +0x5BE1 +0x5BE2 +0x5BE3 +0x5BE4 +0x5BE5 +0x5BE6 +0x5BE7 +0x5BE8 +0x5BE9 +0x5BEA +0x5BEB +0x5BEC +0x5BEE +0x5BEF +0x5BF0 +0x5BF1 +0x5BF2 +0x5BF5 +0x5BF6 +0x5BF8 +0x5BFA +0x5C01 +0x5C03 +0x5C04 +0x5C07 +0x5C08 +0x5C09 +0x5C0A +0x5C0B +0x5C0C +0x5C0D +0x5C0E +0x5C0F +0x5C10 +0x5C11 +0x5C12 +0x5C15 +0x5C16 +0x5C1A +0x5C1F +0x5C22 +0x5C24 +0x5C25 +0x5C28 +0x5C2A +0x5C2C +0x5C30 +0x5C31 +0x5C33 +0x5C37 +0x5C38 +0x5C39 +0x5C3A +0x5C3B +0x5C3C +0x5C3E +0x5C3F +0x5C40 +0x5C41 +0x5C44 +0x5C45 +0x5C46 +0x5C47 +0x5C48 +0x5C4B +0x5C4C +0x5C4D +0x5C4E +0x5C4F +0x5C50 +0x5C51 +0x5C54 +0x5C55 +0x5C56 +0x5C58 +0x5C59 +0x5C5C +0x5C5D +0x5C60 +0x5C62 +0x5C63 +0x5C64 +0x5C65 +0x5C67 +0x5C68 +0x5C69 +0x5C6A +0x5C6C +0x5C6D +0x5C6E +0x5C6F +0x5C71 +0x5C73 +0x5C74 +0x5C79 +0x5C7A +0x5C7B +0x5C7C +0x5C7E +0x5C86 +0x5C88 +0x5C89 +0x5C8A +0x5C8B +0x5C8C +0x5C8D +0x5C8F +0x5C90 +0x5C91 +0x5C92 +0x5C93 +0x5C94 +0x5C95 +0x5C9D +0x5C9F +0x5CA0 +0x5CA1 +0x5CA2 +0x5CA3 +0x5CA4 +0x5CA5 +0x5CA6 +0x5CA7 +0x5CA8 +0x5CA9 +0x5CAA +0x5CAB +0x5CAC +0x5CAD +0x5CAE +0x5CAF +0x5CB0 +0x5CB1 +0x5CB3 +0x5CB5 +0x5CB6 +0x5CB7 +0x5CB8 +0x5CC6 +0x5CC7 +0x5CC8 +0x5CC9 +0x5CCA +0x5CCB +0x5CCC +0x5CCE +0x5CCF +0x5CD0 +0x5CD2 +0x5CD3 +0x5CD4 +0x5CD6 +0x5CD7 +0x5CD8 +0x5CD9 +0x5CDA +0x5CDB +0x5CDE +0x5CDF +0x5CE8 +0x5CEA +0x5CEC +0x5CED +0x5CEE +0x5CF0 +0x5CF1 +0x5CF4 +0x5CF6 +0x5CF7 +0x5CF8 +0x5CF9 +0x5CFB +0x5CFD +0x5CFF +0x5D00 +0x5D01 +0x5D06 +0x5D07 +0x5D0B +0x5D0C +0x5D0D +0x5D0E +0x5D0F +0x5D11 +0x5D12 +0x5D14 +0x5D16 +0x5D17 +0x5D19 +0x5D1A +0x5D1B +0x5D1D +0x5D1E +0x5D1F +0x5D20 +0x5D22 +0x5D23 +0x5D24 +0x5D25 +0x5D26 +0x5D27 +0x5D28 +0x5D29 +0x5D2E +0x5D30 +0x5D31 +0x5D32 +0x5D33 +0x5D34 +0x5D35 +0x5D36 +0x5D37 +0x5D38 +0x5D39 +0x5D3A +0x5D3C +0x5D3D +0x5D3F +0x5D40 +0x5D41 +0x5D42 +0x5D43 +0x5D45 +0x5D47 +0x5D49 +0x5D4A +0x5D4B +0x5D4C +0x5D4E +0x5D50 +0x5D51 +0x5D52 +0x5D55 +0x5D59 +0x5D5E +0x5D62 +0x5D63 +0x5D65 +0x5D67 +0x5D68 +0x5D69 +0x5D6B +0x5D6C +0x5D6F +0x5D71 +0x5D72 +0x5D77 +0x5D79 +0x5D7A +0x5D7C +0x5D7D +0x5D7E +0x5D7F +0x5D80 +0x5D81 +0x5D82 +0x5D84 +0x5D86 +0x5D87 +0x5D88 +0x5D89 +0x5D8A +0x5D8D +0x5D92 +0x5D93 +0x5D94 +0x5D95 +0x5D97 +0x5D99 +0x5D9A +0x5D9C +0x5D9D +0x5D9E +0x5D9F +0x5DA0 +0x5DA1 +0x5DA2 +0x5DA7 +0x5DA8 +0x5DA9 +0x5DAA +0x5DAC +0x5DAD +0x5DAE +0x5DAF +0x5DB0 +0x5DB1 +0x5DB2 +0x5DB4 +0x5DB5 +0x5DB7 +0x5DB8 +0x5DBA +0x5DBC +0x5DBD +0x5DC0 +0x5DC2 +0x5DC3 +0x5DC6 +0x5DC7 +0x5DC9 +0x5DCB +0x5DCD +0x5DCF +0x5DD1 +0x5DD2 +0x5DD4 +0x5DD5 +0x5DD6 +0x5DD8 +0x5DDD +0x5DDE +0x5DDF +0x5DE0 +0x5DE1 +0x5DE2 +0x5DE5 +0x5DE6 +0x5DE7 +0x5DE8 +0x5DEB +0x5DEE +0x5DF0 +0x5DF1 +0x5DF2 +0x5DF3 +0x5DF4 +0x5DF7 +0x5DF9 +0x5DFD +0x5DFE +0x5DFF +0x5E02 +0x5E03 +0x5E04 +0x5E06 +0x5E0A +0x5E0C +0x5E0E +0x5E11 +0x5E14 +0x5E15 +0x5E16 +0x5E17 +0x5E18 +0x5E19 +0x5E1A +0x5E1B +0x5E1D +0x5E1F +0x5E20 +0x5E21 +0x5E22 +0x5E23 +0x5E24 +0x5E25 +0x5E28 +0x5E29 +0x5E2B +0x5E2D +0x5E33 +0x5E34 +0x5E36 +0x5E37 +0x5E38 +0x5E3D +0x5E3E +0x5E40 +0x5E41 +0x5E43 +0x5E44 +0x5E45 +0x5E4A +0x5E4B +0x5E4C +0x5E4D +0x5E4E +0x5E4F +0x5E53 +0x5E54 +0x5E55 +0x5E57 +0x5E58 +0x5E59 +0x5E5B +0x5E5C +0x5E5D +0x5E5F +0x5E60 +0x5E61 +0x5E62 +0x5E63 +0x5E66 +0x5E67 +0x5E68 +0x5E69 +0x5E6A +0x5E6B +0x5E6C +0x5E6D +0x5E6E +0x5E6F +0x5E70 +0x5E72 +0x5E73 +0x5E74 +0x5E75 +0x5E76 +0x5E78 +0x5E79 +0x5E7B +0x5E7C +0x5E7D +0x5E7E +0x5E80 +0x5E82 +0x5E84 +0x5E87 +0x5E88 +0x5E89 +0x5E8A +0x5E8B +0x5E8C +0x5E8D +0x5E8F +0x5E95 +0x5E96 +0x5E97 +0x5E9A +0x5E9B +0x5E9C +0x5EA0 +0x5EA2 +0x5EA3 +0x5EA4 +0x5EA5 +0x5EA6 +0x5EA7 +0x5EA8 +0x5EAA +0x5EAB +0x5EAC +0x5EAD +0x5EAE +0x5EB0 +0x5EB1 +0x5EB2 +0x5EB3 +0x5EB4 +0x5EB5 +0x5EB6 +0x5EB7 +0x5EB8 +0x5EB9 +0x5EBE +0x5EC1 +0x5EC2 +0x5EC4 +0x5EC5 +0x5EC6 +0x5EC7 +0x5EC8 +0x5EC9 +0x5ECA +0x5ECB +0x5ECC +0x5ECE +0x5ED1 +0x5ED2 +0x5ED3 +0x5ED4 +0x5ED5 +0x5ED6 +0x5ED7 +0x5ED8 +0x5ED9 +0x5EDA +0x5EDB +0x5EDC +0x5EDD +0x5EDE +0x5EDF +0x5EE0 +0x5EE1 +0x5EE2 +0x5EE3 +0x5EE5 +0x5EE6 +0x5EE7 +0x5EE8 +0x5EE9 +0x5EEC +0x5EEE +0x5EEF +0x5EF1 +0x5EF2 +0x5EF3 +0x5EF6 +0x5EF7 +0x5EFA +0x5EFE +0x5EFF +0x5F01 +0x5F02 +0x5F04 +0x5F05 +0x5F07 +0x5F08 +0x5F0A +0x5F0B +0x5F0F +0x5F12 +0x5F13 +0x5F14 +0x5F15 +0x5F17 +0x5F18 +0x5F1A +0x5F1B +0x5F1D +0x5F1F +0x5F22 +0x5F23 +0x5F24 +0x5F26 +0x5F27 +0x5F28 +0x5F29 +0x5F2D +0x5F2E +0x5F30 +0x5F31 +0x5F33 +0x5F35 +0x5F36 +0x5F37 +0x5F38 +0x5F3C +0x5F40 +0x5F43 +0x5F44 +0x5F46 +0x5F48 +0x5F49 +0x5F4A +0x5F4B +0x5F4C +0x5F4E +0x5F4F +0x5F54 +0x5F56 +0x5F57 +0x5F58 +0x5F59 +0x5F5D +0x5F62 +0x5F64 +0x5F65 +0x5F67 +0x5F69 +0x5F6A +0x5F6B +0x5F6C +0x5F6D +0x5F6F +0x5F70 +0x5F71 +0x5F73 +0x5F74 +0x5F76 +0x5F77 +0x5F78 +0x5F79 +0x5F7C +0x5F7D +0x5F7E +0x5F7F +0x5F80 +0x5F81 +0x5F82 +0x5F85 +0x5F86 +0x5F87 +0x5F88 +0x5F89 +0x5F8A +0x5F8B +0x5F8C +0x5F90 +0x5F91 +0x5F92 +0x5F96 +0x5F97 +0x5F98 +0x5F99 +0x5F9B +0x5F9C +0x5F9E +0x5F9F +0x5FA0 +0x5FA1 +0x5FA5 +0x5FA6 +0x5FA8 +0x5FA9 +0x5FAA +0x5FAB +0x5FAC +0x5FAD +0x5FAE +0x5FAF +0x5FB2 +0x5FB5 +0x5FB6 +0x5FB7 +0x5FB9 +0x5FBB +0x5FBC +0x5FBD +0x5FBE +0x5FBF +0x5FC0 +0x5FC1 +0x5FC3 +0x5FC5 +0x5FC9 +0x5FCC +0x5FCD +0x5FCF +0x5FD0 +0x5FD1 +0x5FD2 +0x5FD4 +0x5FD5 +0x5FD6 +0x5FD7 +0x5FD8 +0x5FD9 +0x5FDD +0x5FDE +0x5FE0 +0x5FE1 +0x5FE3 +0x5FE4 +0x5FE5 +0x5FE8 +0x5FEA +0x5FEB +0x5FED +0x5FEE +0x5FEF +0x5FF1 +0x5FF3 +0x5FF4 +0x5FF5 +0x5FF7 +0x5FF8 +0x5FFA +0x5FFB +0x5FFD +0x5FFF +0x6000 +0x6009 +0x600A +0x600B +0x600C +0x600D +0x600E +0x600F +0x6010 +0x6011 +0x6012 +0x6013 +0x6014 +0x6015 +0x6016 +0x6017 +0x6019 +0x601A +0x601B +0x601C +0x601D +0x601E +0x6020 +0x6021 +0x6022 +0x6024 +0x6025 +0x6026 +0x6027 +0x6028 +0x6029 +0x602A +0x602B +0x602C +0x602D +0x602E +0x602F +0x6032 +0x6033 +0x6034 +0x6035 +0x6037 +0x6039 +0x6040 +0x6041 +0x6042 +0x6043 +0x6044 +0x6045 +0x6046 +0x6047 +0x6049 +0x604C +0x604D +0x6050 +0x6053 +0x6054 +0x6055 +0x6058 +0x6059 +0x605A +0x605B +0x605D +0x605E +0x605F +0x6062 +0x6063 +0x6064 +0x6065 +0x6066 +0x6067 +0x6068 +0x6069 +0x606A +0x606B +0x606C +0x606D +0x606E +0x606F +0x6070 +0x6072 +0x607F +0x6080 +0x6081 +0x6083 +0x6084 +0x6085 +0x6086 +0x6087 +0x6088 +0x6089 +0x608A +0x608C +0x608D +0x608E +0x6090 +0x6092 +0x6094 +0x6095 +0x6096 +0x6097 +0x609A +0x609B +0x609C +0x609D +0x609F +0x60A0 +0x60A2 +0x60A3 +0x60A8 +0x60B0 +0x60B1 +0x60B2 +0x60B4 +0x60B5 +0x60B6 +0x60B7 +0x60B8 +0x60B9 +0x60BA +0x60BB +0x60BC +0x60BD +0x60BE +0x60BF +0x60C0 +0x60C1 +0x60C3 +0x60C4 +0x60C5 +0x60C6 +0x60C7 +0x60C8 +0x60C9 +0x60CA +0x60CB +0x60CC +0x60CD +0x60CE +0x60CF +0x60D1 +0x60D3 +0x60D4 +0x60D5 +0x60D8 +0x60D9 +0x60DA +0x60DB +0x60DC +0x60DD +0x60DF +0x60E0 +0x60E1 +0x60E2 +0x60E4 +0x60E6 +0x60F0 +0x60F1 +0x60F2 +0x60F3 +0x60F4 +0x60F5 +0x60F6 +0x60F7 +0x60F8 +0x60F9 +0x60FA +0x60FB +0x60FC +0x60FE +0x60FF +0x6100 +0x6101 +0x6103 +0x6104 +0x6105 +0x6106 +0x6108 +0x6109 +0x610A +0x610B +0x610D +0x610E +0x610F +0x6110 +0x6112 +0x6113 +0x6114 +0x6115 +0x6116 +0x6118 +0x611A +0x611B +0x611C +0x611D +0x611F +0x6123 +0x6127 +0x6128 +0x6129 +0x612B +0x612C +0x612E +0x612F +0x6132 +0x6134 +0x6136 +0x6137 +0x613B +0x613E +0x613F +0x6140 +0x6141 +0x6144 +0x6145 +0x6146 +0x6147 +0x6148 +0x6149 +0x614A +0x614B +0x614C +0x614D +0x614E +0x614F +0x6152 +0x6153 +0x6154 +0x6155 +0x6156 +0x6158 +0x615A +0x615B +0x615D +0x615E +0x615F +0x6161 +0x6162 +0x6163 +0x6165 +0x6166 +0x6167 +0x6168 +0x616A +0x616B +0x616C +0x616E +0x6170 +0x6171 +0x6172 +0x6173 +0x6174 +0x6175 +0x6176 +0x6177 +0x6179 +0x617A +0x617C +0x617E +0x6180 +0x6182 +0x6183 +0x6189 +0x618A +0x618B +0x618C +0x618D +0x618E +0x6190 +0x6191 +0x6192 +0x6193 +0x6194 +0x6196 +0x619A +0x619B +0x619D +0x619F +0x61A1 +0x61A2 +0x61A4 +0x61A7 +0x61A8 +0x61A9 +0x61AA +0x61AB +0x61AC +0x61AD +0x61AE +0x61AF +0x61B0 +0x61B1 +0x61B2 +0x61B3 +0x61B4 +0x61B5 +0x61B6 +0x61B8 +0x61BA +0x61BC +0x61BE +0x61BF +0x61C1 +0x61C2 +0x61C3 +0x61C5 +0x61C6 +0x61C7 +0x61C8 +0x61C9 +0x61CA +0x61CB +0x61CC +0x61CD +0x61D6 +0x61D8 +0x61DE +0x61DF +0x61E0 +0x61E3 +0x61E4 +0x61E5 +0x61E6 +0x61E7 +0x61E8 +0x61E9 +0x61EA +0x61EB +0x61ED +0x61EE +0x61F0 +0x61F1 +0x61F2 +0x61F5 +0x61F6 +0x61F7 +0x61F8 +0x61F9 +0x61FA +0x61FB +0x61FC +0x61FD +0x61FE +0x61FF +0x6200 +0x6201 +0x6203 +0x6204 +0x6207 +0x6208 +0x6209 +0x620A +0x620C +0x620D +0x620E +0x6210 +0x6211 +0x6212 +0x6214 +0x6215 +0x6216 +0x6219 +0x621A +0x621B +0x621F +0x6220 +0x6221 +0x6222 +0x6223 +0x6224 +0x6225 +0x6227 +0x6229 +0x622A +0x622B +0x622D +0x622E +0x6230 +0x6232 +0x6233 +0x6234 +0x6236 +0x623A +0x623D +0x623E +0x623F +0x6240 +0x6241 +0x6242 +0x6243 +0x6246 +0x6247 +0x6248 +0x6249 +0x624A +0x624B +0x624D +0x624E +0x6250 +0x6251 +0x6252 +0x6253 +0x6254 +0x6258 +0x6259 +0x625A +0x625B +0x625C +0x625E +0x6260 +0x6261 +0x6262 +0x6263 +0x6264 +0x6265 +0x6266 +0x626D +0x626E +0x626F +0x6270 +0x6271 +0x6272 +0x6273 +0x6274 +0x6276 +0x6277 +0x6279 +0x627A +0x627B +0x627C +0x627D +0x627E +0x627F +0x6280 +0x6281 +0x6283 +0x6284 +0x6286 +0x6287 +0x6288 +0x6289 +0x628A +0x628C +0x628E +0x628F +0x6291 +0x6292 +0x6293 +0x6294 +0x6295 +0x6296 +0x6297 +0x6298 +0x62A8 +0x62A9 +0x62AA +0x62AB +0x62AC +0x62AD +0x62AE +0x62AF +0x62B0 +0x62B1 +0x62B3 +0x62B4 +0x62B5 +0x62B6 +0x62B8 +0x62B9 +0x62BB +0x62BC +0x62BD +0x62BE +0x62BF +0x62C2 +0x62C4 +0x62C6 +0x62C7 +0x62C8 +0x62C9 +0x62CA +0x62CB +0x62CC +0x62CD +0x62CE +0x62CF +0x62D0 +0x62D1 +0x62D2 +0x62D3 +0x62D4 +0x62D6 +0x62D7 +0x62D8 +0x62D9 +0x62DA +0x62DB +0x62DC +0x62EB +0x62EC +0x62ED +0x62EE +0x62EF +0x62F0 +0x62F1 +0x62F2 +0x62F3 +0x62F4 +0x62F5 +0x62F6 +0x62F7 +0x62F8 +0x62F9 +0x62FA +0x62FB +0x62FC +0x62FD +0x62FE +0x62FF +0x6300 +0x6301 +0x6302 +0x6303 +0x6307 +0x6308 +0x6309 +0x630B +0x630C +0x630D +0x630E +0x630F +0x6310 +0x6311 +0x6313 +0x6314 +0x6315 +0x6316 +0x6328 +0x6329 +0x632A +0x632B +0x632C +0x632D +0x632F +0x6332 +0x6333 +0x6334 +0x6336 +0x6338 +0x6339 +0x633A +0x633B +0x633C +0x633D +0x633E +0x6340 +0x6341 +0x6342 +0x6343 +0x6344 +0x6345 +0x6346 +0x6347 +0x6348 +0x6349 +0x634A +0x634B +0x634C +0x634D +0x634E +0x634F +0x6350 +0x6351 +0x6354 +0x6355 +0x6356 +0x6357 +0x6358 +0x6359 +0x635A +0x6365 +0x6367 +0x6368 +0x6369 +0x636B +0x636D +0x636E +0x636F +0x6370 +0x6371 +0x6372 +0x6375 +0x6376 +0x6377 +0x6378 +0x637A +0x637B +0x637C +0x637D +0x6380 +0x6381 +0x6382 +0x6383 +0x6384 +0x6385 +0x6387 +0x6388 +0x6389 +0x638A +0x638C +0x638D +0x638E +0x638F +0x6390 +0x6391 +0x6392 +0x6394 +0x6396 +0x6397 +0x6398 +0x6399 +0x639B +0x639C +0x639D +0x639E +0x639F +0x63A0 +0x63A1 +0x63A2 +0x63A3 +0x63A4 +0x63A5 +0x63A7 +0x63A8 +0x63A9 +0x63AA +0x63AB +0x63AC +0x63AD +0x63AE +0x63AF +0x63B0 +0x63B1 +0x63BD +0x63BE +0x63C0 +0x63C2 +0x63C3 +0x63C4 +0x63C5 +0x63C6 +0x63C7 +0x63C8 +0x63C9 +0x63CA +0x63CB +0x63CC +0x63CD +0x63CE +0x63CF +0x63D0 +0x63D2 +0x63D3 +0x63D5 +0x63D6 +0x63D7 +0x63D8 +0x63D9 +0x63DA +0x63DB +0x63DC +0x63DD +0x63DF +0x63E0 +0x63E1 +0x63E3 +0x63E4 +0x63E5 +0x63E7 +0x63E8 +0x63E9 +0x63EA +0x63EB +0x63ED +0x63EE +0x63EF +0x63F0 +0x63F1 +0x63F2 +0x63F3 +0x63F4 +0x63F5 +0x63F6 +0x63F9 +0x6406 +0x6409 +0x640A +0x640B +0x640C +0x640D +0x640E +0x640F +0x6410 +0x6412 +0x6413 +0x6414 +0x6415 +0x6416 +0x6417 +0x6418 +0x641A +0x641B +0x641C +0x641E +0x641F +0x6420 +0x6421 +0x6422 +0x6423 +0x6424 +0x6425 +0x6426 +0x6427 +0x6428 +0x642A +0x642B +0x642C +0x642D +0x642E +0x642F +0x6430 +0x6433 +0x6434 +0x6435 +0x6436 +0x6437 +0x6439 +0x643D +0x643E +0x643F +0x6440 +0x6441 +0x6443 +0x644B +0x644D +0x644E +0x6450 +0x6451 +0x6452 +0x6453 +0x6454 +0x6458 +0x6459 +0x645B +0x645C +0x645D +0x645E +0x645F +0x6460 +0x6461 +0x6465 +0x6466 +0x6467 +0x6468 +0x6469 +0x646B +0x646C +0x646D +0x646E +0x646F +0x6470 +0x6472 +0x6473 +0x6474 +0x6475 +0x6476 +0x6477 +0x6478 +0x6479 +0x647A +0x647B +0x647D +0x647F +0x6482 +0x6485 +0x6487 +0x6488 +0x6489 +0x648A +0x648B +0x648C +0x648F +0x6490 +0x6492 +0x6493 +0x6495 +0x6496 +0x6497 +0x6498 +0x6499 +0x649A +0x649C +0x649D +0x649E +0x649F +0x64A0 +0x64A2 +0x64A3 +0x64A4 +0x64A5 +0x64A6 +0x64A9 +0x64AB +0x64AC +0x64AD +0x64AE +0x64B0 +0x64B1 +0x64B2 +0x64B3 +0x64BB +0x64BC +0x64BD +0x64BE +0x64BF +0x64C1 +0x64C2 +0x64C3 +0x64C4 +0x64C5 +0x64C7 +0x64C9 +0x64CA +0x64CB +0x64CD +0x64CE +0x64CF +0x64D0 +0x64D2 +0x64D4 +0x64D6 +0x64D7 +0x64D8 +0x64D9 +0x64DA +0x64DB +0x64E0 +0x64E2 +0x64E3 +0x64E4 +0x64E6 +0x64E8 +0x64E9 +0x64EB +0x64EC +0x64ED +0x64EF +0x64F0 +0x64F1 +0x64F2 +0x64F3 +0x64F4 +0x64F7 +0x64F8 +0x64FA +0x64FB +0x64FC +0x64FD +0x64FE +0x64FF +0x6500 +0x6501 +0x6503 +0x6504 +0x6506 +0x6507 +0x6509 +0x650C +0x650D +0x650E +0x650F +0x6510 +0x6513 +0x6514 +0x6515 +0x6516 +0x6517 +0x6518 +0x6519 +0x651B +0x651C +0x651D +0x6520 +0x6521 +0x6522 +0x6523 +0x6524 +0x6525 +0x6526 +0x6529 +0x652A +0x652B +0x652C +0x652D +0x652E +0x652F +0x6532 +0x6533 +0x6536 +0x6537 +0x6538 +0x6539 +0x653B +0x653D +0x653E +0x653F +0x6541 +0x6543 +0x6545 +0x6546 +0x6548 +0x6549 +0x654A +0x654F +0x6551 +0x6553 +0x6554 +0x6555 +0x6556 +0x6557 +0x6558 +0x6559 +0x655C +0x655D +0x655E +0x6562 +0x6563 +0x6564 +0x6565 +0x6566 +0x6567 +0x6568 +0x656A +0x656C +0x656F +0x6572 +0x6573 +0x6574 +0x6575 +0x6576 +0x6577 +0x6578 +0x6579 +0x657A +0x657B +0x657C +0x657F +0x6580 +0x6581 +0x6582 +0x6583 +0x6584 +0x6587 +0x658C +0x6590 +0x6591 +0x6592 +0x6594 +0x6595 +0x6596 +0x6597 +0x6599 +0x659B +0x659C +0x659D +0x659E +0x659F +0x65A0 +0x65A1 +0x65A2 +0x65A4 +0x65A5 +0x65A7 +0x65A8 +0x65AA +0x65AB +0x65AC +0x65AE +0x65AF +0x65B0 +0x65B2 +0x65B3 +0x65B6 +0x65B7 +0x65B8 +0x65B9 +0x65BB +0x65BC +0x65BD +0x65BF +0x65C1 +0x65C2 +0x65C3 +0x65C4 +0x65C5 +0x65C6 +0x65CB +0x65CC +0x65CD +0x65CE +0x65CF +0x65D0 +0x65D2 +0x65D3 +0x65D6 +0x65D7 +0x65DA +0x65DB +0x65DD +0x65DE +0x65DF +0x65E1 +0x65E2 +0x65E5 +0x65E6 +0x65E8 +0x65E9 +0x65EC +0x65ED +0x65EE +0x65EF +0x65F0 +0x65F1 +0x65F2 +0x65F3 +0x65F4 +0x65F5 +0x65FA +0x65FB +0x65FC +0x65FD +0x6600 +0x6602 +0x6603 +0x6604 +0x6605 +0x6606 +0x6607 +0x6608 +0x6609 +0x660A +0x660B +0x660C +0x660D +0x660E +0x660F +0x6610 +0x6611 +0x6612 +0x6613 +0x6614 +0x6615 +0x661C +0x661D +0x661F +0x6620 +0x6621 +0x6622 +0x6624 +0x6625 +0x6626 +0x6627 +0x6628 +0x662B +0x662D +0x662E +0x662F +0x6631 +0x6632 +0x6633 +0x6634 +0x6635 +0x6636 +0x6639 +0x663A +0x6641 +0x6642 +0x6643 +0x6645 +0x6647 +0x6649 +0x664A +0x664C +0x664F +0x6651 +0x6652 +0x6659 +0x665A +0x665B +0x665C +0x665D +0x665E +0x665F +0x6661 +0x6662 +0x6664 +0x6665 +0x6666 +0x6668 +0x666A +0x666C +0x666E +0x666F +0x6670 +0x6671 +0x6672 +0x6674 +0x6676 +0x6677 +0x6678 +0x6679 +0x667A +0x667B +0x667C +0x667E +0x6680 +0x6684 +0x6686 +0x6687 +0x6688 +0x6689 +0x668A +0x668B +0x668C +0x668D +0x6690 +0x6691 +0x6694 +0x6695 +0x6696 +0x6697 +0x6698 +0x6699 +0x669D +0x669F +0x66A0 +0x66A1 +0x66A2 +0x66A8 +0x66A9 +0x66AA +0x66AB +0x66AE +0x66AF +0x66B0 +0x66B1 +0x66B2 +0x66B4 +0x66B5 +0x66B7 +0x66B8 +0x66B9 +0x66BA +0x66BB +0x66BD +0x66BE +0x66C0 +0x66C4 +0x66C6 +0x66C7 +0x66C8 +0x66C9 +0x66CA +0x66CB +0x66CC +0x66CF +0x66D2 +0x66D6 +0x66D8 +0x66D9 +0x66DA +0x66DB +0x66DC +0x66DD +0x66DE +0x66E0 +0x66E3 +0x66E4 +0x66E6 +0x66E8 +0x66E9 +0x66EB +0x66EC +0x66ED +0x66EE +0x66F0 +0x66F2 +0x66F3 +0x66F4 +0x66F6 +0x66F7 +0x66F8 +0x66F9 +0x66FC +0x66FE +0x66FF +0x6700 +0x6701 +0x6703 +0x6704 +0x6705 +0x6708 +0x6709 +0x670A +0x670B +0x670D +0x670F +0x6710 +0x6712 +0x6713 +0x6714 +0x6715 +0x6717 +0x6718 +0x671B +0x671D +0x671F +0x6720 +0x6721 +0x6722 +0x6723 +0x6726 +0x6727 +0x6728 +0x672A +0x672B +0x672C +0x672D +0x672E +0x6731 +0x6733 +0x6734 +0x6735 +0x6738 +0x6739 +0x673A +0x673B +0x673C +0x673D +0x673E +0x673F +0x6745 +0x6746 +0x6747 +0x6748 +0x6749 +0x674B +0x674C +0x674D +0x674E +0x674F +0x6750 +0x6751 +0x6753 +0x6755 +0x6756 +0x6757 +0x6759 +0x675A +0x675C +0x675D +0x675E +0x675F +0x6760 +0x676A +0x676C +0x676D +0x676F +0x6770 +0x6771 +0x6772 +0x6773 +0x6774 +0x6775 +0x6776 +0x6777 +0x6778 +0x6779 +0x677A +0x677B +0x677C +0x677D +0x677E +0x677F +0x6781 +0x6783 +0x6784 +0x6785 +0x6786 +0x6787 +0x6789 +0x678B +0x678C +0x678D +0x678E +0x6790 +0x6791 +0x6792 +0x6793 +0x6794 +0x6795 +0x6797 +0x6798 +0x6799 +0x679A +0x679C +0x679D +0x679F +0x67AE +0x67AF +0x67B0 +0x67B2 +0x67B3 +0x67B4 +0x67B5 +0x67B6 +0x67B7 +0x67B8 +0x67B9 +0x67BA +0x67BB +0x67C0 +0x67C1 +0x67C2 +0x67C3 +0x67C4 +0x67C5 +0x67C6 +0x67C8 +0x67C9 +0x67CA +0x67CB +0x67CC +0x67CD +0x67CE +0x67CF +0x67D0 +0x67D1 +0x67D2 +0x67D3 +0x67D4 +0x67D8 +0x67D9 +0x67DA +0x67DB +0x67DC +0x67DD +0x67DE +0x67DF +0x67E2 +0x67E3 +0x67E4 +0x67E5 +0x67E6 +0x67E7 +0x67E9 +0x67EA +0x67EB +0x67EC +0x67ED +0x67EE +0x67EF +0x67F0 +0x67F1 +0x67F2 +0x67F3 +0x67F4 +0x67F5 +0x67F6 +0x67F7 +0x67F8 +0x67FA +0x67FC +0x67FF +0x6812 +0x6813 +0x6814 +0x6816 +0x6817 +0x6818 +0x681A +0x681C +0x681D +0x681F +0x6820 +0x6821 +0x6825 +0x6826 +0x6828 +0x6829 +0x682A +0x682B +0x682D +0x682E +0x682F +0x6831 +0x6832 +0x6833 +0x6834 +0x6835 +0x6838 +0x6839 +0x683A +0x683B +0x683C +0x683D +0x6840 +0x6841 +0x6842 +0x6843 +0x6844 +0x6845 +0x6846 +0x6848 +0x6849 +0x684B +0x684C +0x684D +0x684E +0x684F +0x6850 +0x6851 +0x6853 +0x6854 +0x686B +0x686D +0x686E +0x686F +0x6871 +0x6872 +0x6874 +0x6875 +0x6876 +0x6877 +0x6878 +0x6879 +0x687B +0x687C +0x687D +0x687E +0x687F +0x6880 +0x6881 +0x6882 +0x6883 +0x6885 +0x6886 +0x6887 +0x6889 +0x688A +0x688B +0x688C +0x688F +0x6890 +0x6891 +0x6892 +0x6893 +0x6894 +0x6896 +0x6897 +0x689B +0x689C +0x689D +0x689F +0x68A0 +0x68A1 +0x68A2 +0x68A3 +0x68A4 +0x68A7 +0x68A8 +0x68A9 +0x68AA +0x68AB +0x68AC +0x68AD +0x68AE +0x68AF +0x68B0 +0x68B1 +0x68B2 +0x68B3 +0x68B4 +0x68B5 +0x68C4 +0x68C6 +0x68C7 +0x68C8 +0x68C9 +0x68CB +0x68CC +0x68CD +0x68CE +0x68D0 +0x68D1 +0x68D2 +0x68D3 +0x68D4 +0x68D5 +0x68D6 +0x68D7 +0x68D8 +0x68DA +0x68DC +0x68DD +0x68DE +0x68DF +0x68E0 +0x68E1 +0x68E3 +0x68E4 +0x68E6 +0x68E7 +0x68E8 +0x68E9 +0x68EA +0x68EB +0x68EC +0x68EE +0x68EF +0x68F0 +0x68F1 +0x68F2 +0x68F3 +0x68F4 +0x68F5 +0x68F6 +0x68F7 +0x68F8 +0x68F9 +0x68FA +0x68FB +0x68FC +0x68FD +0x6904 +0x6905 +0x6906 +0x6907 +0x6908 +0x690A +0x690B +0x690C +0x690D +0x690E +0x690F +0x6910 +0x6911 +0x6912 +0x6913 +0x6914 +0x6915 +0x6917 +0x6925 +0x692A +0x692F +0x6930 +0x6932 +0x6933 +0x6934 +0x6935 +0x6937 +0x6938 +0x6939 +0x693B +0x693C +0x693D +0x693F +0x6940 +0x6941 +0x6942 +0x6944 +0x6945 +0x6948 +0x6949 +0x694A +0x694B +0x694C +0x694E +0x694F +0x6951 +0x6952 +0x6953 +0x6954 +0x6956 +0x6957 +0x6958 +0x6959 +0x695A +0x695B +0x695C +0x695D +0x695E +0x695F +0x6960 +0x6962 +0x6963 +0x6965 +0x6966 +0x6968 +0x6969 +0x696A +0x696B +0x696C +0x696D +0x696E +0x696F +0x6970 +0x6971 +0x6974 +0x6975 +0x6976 +0x6977 +0x6978 +0x6979 +0x697A +0x697B +0x6982 +0x6983 +0x6986 +0x698D +0x698E +0x6990 +0x6991 +0x6993 +0x6994 +0x6995 +0x6996 +0x6997 +0x6999 +0x699A +0x699B +0x699C +0x699E +0x69A0 +0x69A1 +0x69A3 +0x69A4 +0x69A5 +0x69A6 +0x69A7 +0x69A8 +0x69A9 +0x69AA +0x69AB +0x69AC +0x69AD +0x69AE +0x69AF +0x69B0 +0x69B1 +0x69B3 +0x69B4 +0x69B5 +0x69B6 +0x69B7 +0x69B9 +0x69BB +0x69BC +0x69BD +0x69BE +0x69BF +0x69C1 +0x69C2 +0x69C3 +0x69C4 +0x69C6 +0x69C9 +0x69CA +0x69CB +0x69CC +0x69CD +0x69CE +0x69CF +0x69D0 +0x69D3 +0x69D4 +0x69D9 +0x69E2 +0x69E4 +0x69E5 +0x69E6 +0x69E7 +0x69E8 +0x69EB +0x69EC +0x69ED +0x69EE +0x69F1 +0x69F2 +0x69F3 +0x69F4 +0x69F6 +0x69F7 +0x69F8 +0x69FB +0x69FC +0x69FD +0x69FE +0x69FF +0x6A00 +0x6A01 +0x6A02 +0x6A04 +0x6A05 +0x6A06 +0x6A07 +0x6A08 +0x6A09 +0x6A0A +0x6A0D +0x6A0F +0x6A11 +0x6A13 +0x6A14 +0x6A15 +0x6A16 +0x6A17 +0x6A18 +0x6A19 +0x6A1B +0x6A1D +0x6A1E +0x6A1F +0x6A20 +0x6A21 +0x6A23 +0x6A25 +0x6A26 +0x6A27 +0x6A28 +0x6A32 +0x6A34 +0x6A35 +0x6A38 +0x6A39 +0x6A3A +0x6A3B +0x6A3C +0x6A3D +0x6A3E +0x6A3F +0x6A40 +0x6A41 +0x6A44 +0x6A46 +0x6A47 +0x6A48 +0x6A49 +0x6A4B +0x6A4D +0x6A4E +0x6A4F +0x6A50 +0x6A51 +0x6A54 +0x6A55 +0x6A56 +0x6A58 +0x6A59 +0x6A5A +0x6A5B +0x6A5D +0x6A5E +0x6A5F +0x6A60 +0x6A61 +0x6A62 +0x6A64 +0x6A66 +0x6A67 +0x6A68 +0x6A69 +0x6A6A +0x6A6B +0x6A6D +0x6A6F +0x6A76 +0x6A7E +0x6A7F +0x6A80 +0x6A81 +0x6A83 +0x6A84 +0x6A85 +0x6A87 +0x6A89 +0x6A8C +0x6A8D +0x6A8E +0x6A90 +0x6A91 +0x6A92 +0x6A93 +0x6A94 +0x6A95 +0x6A96 +0x6A97 +0x6A9A +0x6A9B +0x6A9C +0x6A9E +0x6A9F +0x6AA0 +0x6AA1 +0x6AA2 +0x6AA3 +0x6AA4 +0x6AA5 +0x6AA6 +0x6AA8 +0x6AAC +0x6AAD +0x6AAE +0x6AAF +0x6AB3 +0x6AB4 +0x6AB6 +0x6AB7 +0x6AB8 +0x6AB9 +0x6ABA +0x6ABB +0x6ABD +0x6AC2 +0x6AC3 +0x6AC5 +0x6AC6 +0x6AC7 +0x6ACB +0x6ACC +0x6ACD +0x6ACF +0x6AD0 +0x6AD1 +0x6AD3 +0x6AD9 +0x6ADA +0x6ADB +0x6ADC +0x6ADD +0x6ADE +0x6ADF +0x6AE0 +0x6AE1 +0x6AE5 +0x6AE7 +0x6AE8 +0x6AEA +0x6AEB +0x6AEC +0x6AEE +0x6AEF +0x6AF0 +0x6AF1 +0x6AF3 +0x6AF8 +0x6AF9 +0x6AFA +0x6AFB +0x6AFC +0x6B00 +0x6B02 +0x6B03 +0x6B04 +0x6B08 +0x6B09 +0x6B0A +0x6B0B +0x6B0F +0x6B10 +0x6B11 +0x6B12 +0x6B13 +0x6B16 +0x6B17 +0x6B18 +0x6B19 +0x6B1A +0x6B1E +0x6B20 +0x6B21 +0x6B23 +0x6B25 +0x6B28 +0x6B2C +0x6B2D +0x6B2F +0x6B31 +0x6B32 +0x6B33 +0x6B34 +0x6B36 +0x6B37 +0x6B38 +0x6B39 +0x6B3A +0x6B3B +0x6B3C +0x6B3D +0x6B3E +0x6B3F +0x6B41 +0x6B42 +0x6B43 +0x6B45 +0x6B46 +0x6B47 +0x6B48 +0x6B49 +0x6B4A +0x6B4B +0x6B4C +0x6B4D +0x6B4E +0x6B50 +0x6B51 +0x6B54 +0x6B55 +0x6B56 +0x6B59 +0x6B5B +0x6B5C +0x6B5E +0x6B5F +0x6B60 +0x6B61 +0x6B62 +0x6B63 +0x6B64 +0x6B65 +0x6B66 +0x6B67 +0x6B6A +0x6B6D +0x6B72 +0x6B76 +0x6B77 +0x6B78 +0x6B79 +0x6B7B +0x6B7E +0x6B7F +0x6B80 +0x6B82 +0x6B83 +0x6B84 +0x6B86 +0x6B88 +0x6B89 +0x6B8A +0x6B8C +0x6B8D +0x6B8E +0x6B8F +0x6B91 +0x6B94 +0x6B95 +0x6B96 +0x6B97 +0x6B98 +0x6B99 +0x6B9B +0x6B9E +0x6B9F +0x6BA0 +0x6BA2 +0x6BA3 +0x6BA4 +0x6BA5 +0x6BA6 +0x6BA7 +0x6BAA +0x6BAB +0x6BAD +0x6BAE +0x6BAF +0x6BB0 +0x6BB2 +0x6BB3 +0x6BB5 +0x6BB6 +0x6BB7 +0x6BBA +0x6BBC +0x6BBD +0x6BBF +0x6BC0 +0x6BC3 +0x6BC4 +0x6BC5 +0x6BC6 +0x6BC7 +0x6BC8 +0x6BC9 +0x6BCA +0x6BCB +0x6BCC +0x6BCD +0x6BCF +0x6BD0 +0x6BD2 +0x6BD3 +0x6BD4 +0x6BD6 +0x6BD7 +0x6BD8 +0x6BDA +0x6BDB +0x6BDE +0x6BE0 +0x6BE2 +0x6BE3 +0x6BE4 +0x6BE6 +0x6BE7 +0x6BE8 +0x6BEB +0x6BEC +0x6BEF +0x6BF0 +0x6BF2 +0x6BF3 +0x6BF7 +0x6BF8 +0x6BF9 +0x6BFB +0x6BFC +0x6BFD +0x6BFE +0x6BFF +0x6C00 +0x6C01 +0x6C02 +0x6C03 +0x6C04 +0x6C05 +0x6C06 +0x6C08 +0x6C09 +0x6C0B +0x6C0C +0x6C0D +0x6C0F +0x6C10 +0x6C11 +0x6C13 +0x6C14 +0x6C15 +0x6C16 +0x6C18 +0x6C19 +0x6C1A +0x6C1B +0x6C1D +0x6C1F +0x6C20 +0x6C21 +0x6C23 +0x6C24 +0x6C25 +0x6C26 +0x6C27 +0x6C28 +0x6C2A +0x6C2B +0x6C2C +0x6C2E +0x6C2F +0x6C30 +0x6C33 +0x6C34 +0x6C36 +0x6C38 +0x6C3B +0x6C3E +0x6C3F +0x6C40 +0x6C41 +0x6C42 +0x6C43 +0x6C46 +0x6C4A +0x6C4B +0x6C4C +0x6C4D +0x6C4E +0x6C4F +0x6C50 +0x6C52 +0x6C54 +0x6C55 +0x6C57 +0x6C59 +0x6C5B +0x6C5C +0x6C5D +0x6C5E +0x6C5F +0x6C60 +0x6C61 +0x6C65 +0x6C66 +0x6C67 +0x6C68 +0x6C69 +0x6C6A +0x6C6B +0x6C6D +0x6C6F +0x6C70 +0x6C71 +0x6C72 +0x6C73 +0x6C74 +0x6C76 +0x6C78 +0x6C7A +0x6C7B +0x6C7D +0x6C7E +0x6C80 +0x6C81 +0x6C82 +0x6C83 +0x6C84 +0x6C85 +0x6C86 +0x6C87 +0x6C88 +0x6C89 +0x6C8A +0x6C8B +0x6C8C +0x6C8D +0x6C8E +0x6C8F +0x6C90 +0x6C92 +0x6C93 +0x6C94 +0x6C95 +0x6C96 +0x6C98 +0x6C99 +0x6C9A +0x6C9B +0x6C9C +0x6C9D +0x6CAB +0x6CAC +0x6CAD +0x6CAE +0x6CB0 +0x6CB1 +0x6CB3 +0x6CB4 +0x6CB6 +0x6CB7 +0x6CB8 +0x6CB9 +0x6CBA +0x6CBB +0x6CBC +0x6CBD +0x6CBE +0x6CBF +0x6CC0 +0x6CC1 +0x6CC2 +0x6CC3 +0x6CC4 +0x6CC5 +0x6CC6 +0x6CC7 +0x6CC9 +0x6CCA +0x6CCC +0x6CCD +0x6CCF +0x6CD0 +0x6CD1 +0x6CD2 +0x6CD3 +0x6CD4 +0x6CD5 +0x6CD6 +0x6CD7 +0x6CD9 +0x6CDA +0x6CDB +0x6CDC +0x6CDD +0x6CDE +0x6CE0 +0x6CE1 +0x6CE2 +0x6CE3 +0x6CE5 +0x6CE7 +0x6CE8 +0x6CE9 +0x6CEB +0x6CEC +0x6CED +0x6CEE +0x6CEF +0x6CF0 +0x6CF1 +0x6CF2 +0x6CF3 +0x6CF5 +0x6CF9 +0x6D00 +0x6D01 +0x6D03 +0x6D04 +0x6D07 +0x6D08 +0x6D09 +0x6D0A +0x6D0B +0x6D0C +0x6D0D +0x6D0E +0x6D0F +0x6D10 +0x6D11 +0x6D12 +0x6D16 +0x6D17 +0x6D18 +0x6D19 +0x6D1A +0x6D1B +0x6D1D +0x6D1E +0x6D1F +0x6D20 +0x6D22 +0x6D25 +0x6D27 +0x6D28 +0x6D29 +0x6D2A +0x6D2B +0x6D2C +0x6D2D +0x6D2E +0x6D2F +0x6D30 +0x6D31 +0x6D32 +0x6D33 +0x6D34 +0x6D35 +0x6D36 +0x6D37 +0x6D38 +0x6D39 +0x6D3A +0x6D3B +0x6D3C +0x6D3D +0x6D3E +0x6D3F +0x6D40 +0x6D41 +0x6D42 +0x6D58 +0x6D59 +0x6D5A +0x6D5E +0x6D5F +0x6D60 +0x6D61 +0x6D62 +0x6D63 +0x6D64 +0x6D65 +0x6D66 +0x6D67 +0x6D68 +0x6D69 +0x6D6A +0x6D6C +0x6D6D +0x6D6E +0x6D6F +0x6D70 +0x6D74 +0x6D75 +0x6D76 +0x6D77 +0x6D78 +0x6D79 +0x6D7A +0x6D7B +0x6D7C +0x6D7D +0x6D7E +0x6D7F +0x6D80 +0x6D82 +0x6D83 +0x6D84 +0x6D85 +0x6D86 +0x6D87 +0x6D88 +0x6D89 +0x6D8A +0x6D8B +0x6D8C +0x6D8D +0x6D8E +0x6D90 +0x6D91 +0x6D92 +0x6D93 +0x6D94 +0x6D95 +0x6D97 +0x6D98 +0x6DAA +0x6DAB +0x6DAC +0x6DAE +0x6DAF +0x6DB2 +0x6DB3 +0x6DB4 +0x6DB5 +0x6DB7 +0x6DB8 +0x6DBA +0x6DBB +0x6DBC +0x6DBD +0x6DBE +0x6DBF +0x6DC0 +0x6DC2 +0x6DC4 +0x6DC5 +0x6DC6 +0x6DC7 +0x6DC8 +0x6DC9 +0x6DCA +0x6DCB +0x6DCC +0x6DCD +0x6DCF +0x6DD0 +0x6DD1 +0x6DD2 +0x6DD3 +0x6DD4 +0x6DD5 +0x6DD6 +0x6DD7 +0x6DD8 +0x6DD9 +0x6DDA +0x6DDB +0x6DDC +0x6DDD +0x6DDE +0x6DDF +0x6DE0 +0x6DE1 +0x6DE2 +0x6DE3 +0x6DE4 +0x6DE5 +0x6DE6 +0x6DE8 +0x6DE9 +0x6DEA +0x6DEB +0x6DEC +0x6DED +0x6DEE +0x6DEF +0x6DF0 +0x6DF1 +0x6DF2 +0x6DF3 +0x6DF4 +0x6DF5 +0x6DF6 +0x6DF7 +0x6DF9 +0x6DFA +0x6DFB +0x6DFC +0x6DFD +0x6E00 +0x6E03 +0x6E05 +0x6E19 +0x6E1A +0x6E1B +0x6E1C +0x6E1D +0x6E1F +0x6E20 +0x6E21 +0x6E22 +0x6E23 +0x6E24 +0x6E25 +0x6E26 +0x6E27 +0x6E28 +0x6E2B +0x6E2C +0x6E2D +0x6E2E +0x6E2F +0x6E30 +0x6E31 +0x6E32 +0x6E33 +0x6E34 +0x6E35 +0x6E36 +0x6E38 +0x6E39 +0x6E3A +0x6E3B +0x6E3C +0x6E3D +0x6E3E +0x6E3F +0x6E40 +0x6E41 +0x6E43 +0x6E44 +0x6E45 +0x6E46 +0x6E47 +0x6E49 +0x6E4A +0x6E4B +0x6E4D +0x6E4E +0x6E51 +0x6E52 +0x6E53 +0x6E54 +0x6E55 +0x6E56 +0x6E58 +0x6E5A +0x6E5B +0x6E5C +0x6E5D +0x6E5E +0x6E5F +0x6E60 +0x6E61 +0x6E62 +0x6E63 +0x6E64 +0x6E65 +0x6E66 +0x6E67 +0x6E68 +0x6E69 +0x6E6B +0x6E6E +0x6E6F +0x6E71 +0x6E72 +0x6E73 +0x6E74 +0x6E77 +0x6E78 +0x6E79 +0x6E88 +0x6E89 +0x6E8D +0x6E8E +0x6E8F +0x6E90 +0x6E92 +0x6E93 +0x6E94 +0x6E96 +0x6E97 +0x6E98 +0x6E99 +0x6E9B +0x6E9C +0x6E9D +0x6E9E +0x6E9F +0x6EA0 +0x6EA1 +0x6EA2 +0x6EA3 +0x6EA4 +0x6EA5 +0x6EA6 +0x6EA7 +0x6EAA +0x6EAB +0x6EAE +0x6EAF +0x6EB0 +0x6EB1 +0x6EB2 +0x6EB3 +0x6EB4 +0x6EB6 +0x6EB7 +0x6EB9 +0x6EBA +0x6EBC +0x6EBD +0x6EBE +0x6EBF +0x6EC0 +0x6EC1 +0x6EC2 +0x6EC3 +0x6EC4 +0x6EC5 +0x6EC6 +0x6EC7 +0x6EC8 +0x6EC9 +0x6ECA +0x6ECB +0x6ECC +0x6ECD +0x6ECE +0x6ECF +0x6ED0 +0x6ED1 +0x6ED2 +0x6ED3 +0x6ED4 +0x6ED5 +0x6ED6 +0x6ED8 +0x6EDC +0x6EEB +0x6EEC +0x6EED +0x6EEE +0x6EEF +0x6EF1 +0x6EF2 +0x6EF4 +0x6EF5 +0x6EF6 +0x6EF7 +0x6EF8 +0x6EF9 +0x6EFB +0x6EFC +0x6EFD +0x6EFE +0x6EFF +0x6F00 +0x6F01 +0x6F02 +0x6F03 +0x6F05 +0x6F06 +0x6F07 +0x6F08 +0x6F09 +0x6F0A +0x6F0D +0x6F0E +0x6F0F +0x6F12 +0x6F13 +0x6F14 +0x6F15 +0x6F18 +0x6F19 +0x6F1A +0x6F1C +0x6F1E +0x6F1F +0x6F20 +0x6F21 +0x6F22 +0x6F23 +0x6F25 +0x6F26 +0x6F27 +0x6F29 +0x6F2A +0x6F2B +0x6F2C +0x6F2D +0x6F2E +0x6F2F +0x6F30 +0x6F31 +0x6F32 +0x6F33 +0x6F35 +0x6F36 +0x6F37 +0x6F38 +0x6F39 +0x6F3A +0x6F3B +0x6F3C +0x6F3E +0x6F3F +0x6F40 +0x6F41 +0x6F43 +0x6F4E +0x6F4F +0x6F50 +0x6F51 +0x6F52 +0x6F53 +0x6F54 +0x6F55 +0x6F57 +0x6F58 +0x6F5A +0x6F5B +0x6F5D +0x6F5E +0x6F5F +0x6F60 +0x6F61 +0x6F62 +0x6F63 +0x6F64 +0x6F66 +0x6F67 +0x6F69 +0x6F6A +0x6F6B +0x6F6C +0x6F6D +0x6F6E +0x6F6F +0x6F70 +0x6F72 +0x6F73 +0x6F76 +0x6F77 +0x6F78 +0x6F7A +0x6F7B +0x6F7C +0x6F7D +0x6F7E +0x6F7F +0x6F80 +0x6F82 +0x6F84 +0x6F85 +0x6F86 +0x6F87 +0x6F88 +0x6F89 +0x6F8B +0x6F8C +0x6F8D +0x6F8E +0x6F90 +0x6F92 +0x6F93 +0x6F94 +0x6F95 +0x6F96 +0x6F97 +0x6F9E +0x6FA0 +0x6FA1 +0x6FA2 +0x6FA3 +0x6FA4 +0x6FA5 +0x6FA6 +0x6FA7 +0x6FA8 +0x6FA9 +0x6FAA +0x6FAB +0x6FAC +0x6FAD +0x6FAE +0x6FAF +0x6FB0 +0x6FB1 +0x6FB2 +0x6FB3 +0x6FB4 +0x6FB6 +0x6FB8 +0x6FB9 +0x6FBA +0x6FBC +0x6FBD +0x6FBF +0x6FC0 +0x6FC1 +0x6FC2 +0x6FC3 +0x6FC4 +0x6FC6 +0x6FC7 +0x6FC8 +0x6FC9 +0x6FCA +0x6FCB +0x6FCC +0x6FCD +0x6FCE +0x6FCF +0x6FD4 +0x6FD5 +0x6FD8 +0x6FDB +0x6FDC +0x6FDD +0x6FDE +0x6FDF +0x6FE0 +0x6FE1 +0x6FE2 +0x6FE3 +0x6FE4 +0x6FE6 +0x6FE7 +0x6FE8 +0x6FE9 +0x6FEB +0x6FEC +0x6FED +0x6FEE +0x6FEF +0x6FF0 +0x6FF1 +0x6FF2 +0x6FF4 +0x6FF7 +0x6FFA +0x6FFB +0x6FFC +0x6FFE +0x6FFF +0x7000 +0x7001 +0x7004 +0x7005 +0x7006 +0x7007 +0x7009 +0x700A +0x700B +0x700C +0x700D +0x700E +0x700F +0x7011 +0x7014 +0x7015 +0x7016 +0x7017 +0x7018 +0x7019 +0x701A +0x701B +0x701C +0x701D +0x701F +0x7020 +0x7021 +0x7022 +0x7023 +0x7024 +0x7026 +0x7027 +0x7028 +0x7029 +0x702A +0x702B +0x702F +0x7030 +0x7031 +0x7032 +0x7033 +0x7034 +0x7035 +0x7037 +0x7038 +0x7039 +0x703A +0x703B +0x703C +0x703E +0x703F +0x7040 +0x7041 +0x7042 +0x7043 +0x7044 +0x7045 +0x7046 +0x7048 +0x7049 +0x704A +0x704C +0x7051 +0x7052 +0x7055 +0x7056 +0x7057 +0x7058 +0x705A +0x705B +0x705D +0x705E +0x705F +0x7060 +0x7061 +0x7062 +0x7063 +0x7064 +0x7065 +0x7066 +0x7068 +0x7069 +0x706A +0x706B +0x7070 +0x7071 +0x7074 +0x7076 +0x7078 +0x707A +0x707C +0x707D +0x7082 +0x7083 +0x7084 +0x7085 +0x7086 +0x708A +0x708E +0x7091 +0x7092 +0x7093 +0x7094 +0x7095 +0x7096 +0x7098 +0x7099 +0x709A +0x709F +0x70A1 +0x70A4 +0x70A9 +0x70AB +0x70AC +0x70AD +0x70AE +0x70AF +0x70B0 +0x70B1 +0x70B3 +0x70B4 +0x70B5 +0x70B7 +0x70B8 +0x70BA +0x70BE +0x70C5 +0x70C6 +0x70C7 +0x70C8 +0x70CA +0x70CB +0x70CD +0x70CE +0x70CF +0x70D1 +0x70D2 +0x70D3 +0x70D4 +0x70D7 +0x70D8 +0x70D9 +0x70DA +0x70DC +0x70DD +0x70DE +0x70E0 +0x70E1 +0x70E2 +0x70E4 +0x70EF +0x70F0 +0x70F3 +0x70F4 +0x70F6 +0x70F7 +0x70F8 +0x70F9 +0x70FA +0x70FB +0x70FC +0x70FD +0x70FF +0x7100 +0x7102 +0x7104 +0x7106 +0x7109 +0x710A +0x710B +0x710C +0x710D +0x710E +0x7110 +0x7113 +0x7117 +0x7119 +0x711A +0x711B +0x711C +0x711E +0x711F +0x7120 +0x7121 +0x7122 +0x7123 +0x7125 +0x7126 +0x7128 +0x712E +0x712F +0x7130 +0x7131 +0x7132 +0x7136 +0x713A +0x7141 +0x7142 +0x7143 +0x7144 +0x7146 +0x7147 +0x7149 +0x714B +0x714C +0x714D +0x714E +0x7150 +0x7152 +0x7153 +0x7154 +0x7156 +0x7158 +0x7159 +0x715A +0x715C +0x715D +0x715E +0x715F +0x7160 +0x7161 +0x7162 +0x7163 +0x7164 +0x7165 +0x7166 +0x7167 +0x7168 +0x7169 +0x716A +0x716C +0x716E +0x7170 +0x7172 +0x7178 +0x717B +0x717D +0x7180 +0x7181 +0x7182 +0x7184 +0x7185 +0x7186 +0x7187 +0x7189 +0x718A +0x718F +0x7190 +0x7192 +0x7194 +0x7197 +0x7199 +0x719A +0x719B +0x719C +0x719D +0x719E +0x719F +0x71A0 +0x71A1 +0x71A4 +0x71A5 +0x71A7 +0x71A8 +0x71A9 +0x71AA +0x71AC +0x71AF +0x71B0 +0x71B1 +0x71B2 +0x71B3 +0x71B5 +0x71B8 +0x71B9 +0x71BC +0x71BD +0x71BE +0x71BF +0x71C0 +0x71C1 +0x71C2 +0x71C3 +0x71C4 +0x71C5 +0x71C6 +0x71C7 +0x71C8 +0x71C9 +0x71CA +0x71CB +0x71CE +0x71CF +0x71D0 +0x71D2 +0x71D4 +0x71D5 +0x71D6 +0x71D8 +0x71D9 +0x71DA +0x71DB +0x71DC +0x71DF +0x71E0 +0x71E1 +0x71E2 +0x71E4 +0x71E5 +0x71E6 +0x71E7 +0x71E8 +0x71EC +0x71ED +0x71EE +0x71F0 +0x71F1 +0x71F2 +0x71F4 +0x71F8 +0x71F9 +0x71FB +0x71FC +0x71FD +0x71FE +0x71FF +0x7201 +0x7202 +0x7203 +0x7205 +0x7206 +0x7207 +0x720A +0x720C +0x720D +0x7210 +0x7213 +0x7214 +0x7219 +0x721A +0x721B +0x721D +0x721E +0x721F +0x7222 +0x7223 +0x7226 +0x7227 +0x7228 +0x7229 +0x722A +0x722C +0x722D +0x7230 +0x7235 +0x7236 +0x7238 +0x7239 +0x723A +0x723B +0x723D +0x723E +0x723F +0x7241 +0x7242 +0x7244 +0x7246 +0x7247 +0x7248 +0x7249 +0x724A +0x724B +0x724C +0x724F +0x7252 +0x7253 +0x7256 +0x7258 +0x7259 +0x725A +0x725B +0x725D +0x725E +0x725F +0x7260 +0x7261 +0x7262 +0x7263 +0x7267 +0x7269 +0x726A +0x726C +0x726E +0x726F +0x7270 +0x7272 +0x7273 +0x7274 +0x7276 +0x7277 +0x7278 +0x7279 +0x727B +0x727C +0x727D +0x727E +0x727F +0x7280 +0x7281 +0x7284 +0x7285 +0x7286 +0x7288 +0x7289 +0x728B +0x728C +0x728D +0x728E +0x7290 +0x7291 +0x7292 +0x7293 +0x7295 +0x7296 +0x7297 +0x7298 +0x729A +0x729B +0x729D +0x729E +0x72A1 +0x72A2 +0x72A3 +0x72A4 +0x72A5 +0x72A6 +0x72A7 +0x72A8 +0x72A9 +0x72AA +0x72AC +0x72AE +0x72AF +0x72B0 +0x72B4 +0x72B5 +0x72BA +0x72BD +0x72BF +0x72C0 +0x72C1 +0x72C2 +0x72C3 +0x72C4 +0x72C5 +0x72C6 +0x72C9 +0x72CA +0x72CB +0x72CC +0x72CE +0x72D0 +0x72D1 +0x72D2 +0x72D4 +0x72D6 +0x72D7 +0x72D8 +0x72D9 +0x72DA +0x72DC +0x72DF +0x72E0 +0x72E1 +0x72E3 +0x72E4 +0x72E6 +0x72E8 +0x72E9 +0x72EA +0x72EB +0x72F3 +0x72F4 +0x72F6 +0x72F7 +0x72F8 +0x72F9 +0x72FA +0x72FB +0x72FC +0x72FD +0x72FE +0x72FF +0x7300 +0x7301 +0x7307 +0x7308 +0x730A +0x730B +0x730C +0x730F +0x7311 +0x7312 +0x7313 +0x7316 +0x7317 +0x7318 +0x7319 +0x731B +0x731C +0x731D +0x731E +0x7322 +0x7323 +0x7325 +0x7326 +0x7327 +0x7329 +0x732D +0x7330 +0x7331 +0x7332 +0x7333 +0x7334 +0x7335 +0x7336 +0x7337 +0x733A +0x733B +0x733C +0x733E +0x733F +0x7340 +0x7342 +0x7343 +0x7344 +0x7345 +0x7349 +0x734A +0x734C +0x734D +0x734E +0x7350 +0x7351 +0x7352 +0x7357 +0x7358 +0x7359 +0x735A +0x735B +0x735D +0x735E +0x735F +0x7360 +0x7361 +0x7362 +0x7365 +0x7366 +0x7367 +0x7368 +0x7369 +0x736A +0x736B +0x736C +0x736E +0x736F +0x7370 +0x7372 +0x7373 +0x7375 +0x7376 +0x7377 +0x7378 +0x737A +0x737B +0x737C +0x737D +0x737E +0x737F +0x7380 +0x7381 +0x7382 +0x7383 +0x7384 +0x7385 +0x7386 +0x7387 +0x7388 +0x7389 +0x738A +0x738B +0x738E +0x7392 +0x7393 +0x7394 +0x7395 +0x7396 +0x7397 +0x739D +0x739F +0x73A0 +0x73A1 +0x73A2 +0x73A4 +0x73A5 +0x73A6 +0x73A8 +0x73A9 +0x73AB +0x73AC +0x73AD +0x73B2 +0x73B3 +0x73B4 +0x73B5 +0x73B6 +0x73B7 +0x73B8 +0x73B9 +0x73BB +0x73BC +0x73BE +0x73BF +0x73C0 +0x73C2 +0x73C3 +0x73C5 +0x73C6 +0x73C7 +0x73C8 +0x73CA +0x73CB +0x73CC +0x73CD +0x73D2 +0x73D3 +0x73D4 +0x73D6 +0x73D7 +0x73D8 +0x73D9 +0x73DA +0x73DB +0x73DC +0x73DD +0x73DE +0x73E0 +0x73E3 +0x73E5 +0x73E7 +0x73E8 +0x73E9 +0x73EA +0x73EB +0x73ED +0x73EE +0x73F4 +0x73F5 +0x73F6 +0x73F8 +0x73FA +0x73FC +0x73FD +0x73FE +0x73FF +0x7400 +0x7401 +0x7403 +0x7404 +0x7405 +0x7406 +0x7407 +0x7408 +0x7409 +0x740A +0x740B +0x740C +0x740D +0x7416 +0x741A +0x741B +0x741D +0x7420 +0x7421 +0x7422 +0x7423 +0x7424 +0x7425 +0x7426 +0x7428 +0x7429 +0x742A +0x742B +0x742C +0x742D +0x742E +0x742F +0x7430 +0x7431 +0x7432 +0x7433 +0x7434 +0x7435 +0x7436 +0x743A +0x743F +0x7440 +0x7441 +0x7442 +0x7444 +0x7446 +0x744A +0x744B +0x744D +0x744E +0x744F +0x7450 +0x7451 +0x7452 +0x7454 +0x7455 +0x7457 +0x7459 +0x745A +0x745B +0x745C +0x745E +0x745F +0x7462 +0x7463 +0x7464 +0x7467 +0x7469 +0x746A +0x746D +0x746E +0x746F +0x7470 +0x7471 +0x7472 +0x7473 +0x7475 +0x7479 +0x747C +0x747D +0x747E +0x747F +0x7480 +0x7481 +0x7483 +0x7485 +0x7486 +0x7487 +0x7488 +0x7489 +0x748A +0x748B +0x7490 +0x7492 +0x7494 +0x7495 +0x7497 +0x7498 +0x749A +0x749C +0x749E +0x749F +0x74A0 +0x74A1 +0x74A3 +0x74A5 +0x74A6 +0x74A7 +0x74A8 +0x74A9 +0x74AA +0x74AB +0x74AD +0x74AF +0x74B0 +0x74B1 +0x74B2 +0x74B5 +0x74B6 +0x74B7 +0x74B8 +0x74BA +0x74BB +0x74BD +0x74BE +0x74BF +0x74C0 +0x74C1 +0x74C2 +0x74C3 +0x74C5 +0x74CA +0x74CB +0x74CF +0x74D4 +0x74D5 +0x74D6 +0x74D7 +0x74D8 +0x74D9 +0x74DA +0x74DB +0x74DC +0x74DD +0x74DE +0x74DF +0x74E0 +0x74E1 +0x74E2 +0x74E3 +0x74E4 +0x74E5 +0x74E6 +0x74E8 +0x74E9 +0x74EC +0x74EE +0x74F4 +0x74F5 +0x74F6 +0x74F7 +0x74FB +0x74FD +0x74FE +0x74FF +0x7500 +0x7502 +0x7503 +0x7504 +0x7507 +0x7508 +0x750B +0x750C +0x750D +0x750F +0x7510 +0x7511 +0x7512 +0x7513 +0x7514 +0x7515 +0x7516 +0x7517 +0x7518 +0x751A +0x751C +0x751D +0x751F +0x7521 +0x7522 +0x7525 +0x7526 +0x7528 +0x7529 +0x752A +0x752B +0x752C +0x752D +0x752E +0x752F +0x7530 +0x7531 +0x7532 +0x7533 +0x7537 +0x7538 +0x7539 +0x753A +0x753D +0x753E +0x753F +0x7540 +0x7547 +0x7548 +0x754B +0x754C +0x754E +0x754F +0x7554 +0x7559 +0x755A +0x755B +0x755C +0x755D +0x755F +0x7562 +0x7563 +0x7564 +0x7565 +0x7566 +0x756A +0x756B +0x756C +0x756F +0x7570 +0x7576 +0x7577 +0x7578 +0x7579 +0x757D +0x757E +0x757F +0x7580 +0x7584 +0x7586 +0x7587 +0x758A +0x758B +0x758C +0x758F +0x7590 +0x7591 +0x7594 +0x7595 +0x7598 +0x7599 +0x759A +0x759D +0x75A2 +0x75A3 +0x75A4 +0x75A5 +0x75A7 +0x75AA +0x75AB +0x75B0 +0x75B2 +0x75B3 +0x75B5 +0x75B6 +0x75B8 +0x75B9 +0x75BA +0x75BB +0x75BC +0x75BD +0x75BE +0x75BF +0x75C0 +0x75C1 +0x75C2 +0x75C4 +0x75C5 +0x75C7 +0x75CA +0x75CB +0x75CC +0x75CD +0x75CE +0x75CF +0x75D0 +0x75D1 +0x75D2 +0x75D4 +0x75D5 +0x75D7 +0x75D8 +0x75D9 +0x75DA +0x75DB +0x75DD +0x75DE +0x75DF +0x75E0 +0x75E1 +0x75E2 +0x75E3 +0x75E4 +0x75E6 +0x75E7 +0x75ED +0x75EF +0x75F0 +0x75F1 +0x75F2 +0x75F3 +0x75F4 +0x75F5 +0x75F6 +0x75F7 +0x75F8 +0x75F9 +0x75FA +0x75FB +0x75FC +0x75FD +0x75FE +0x75FF +0x7600 +0x7601 +0x7603 +0x7608 +0x7609 +0x760A +0x760B +0x760C +0x760D +0x760F +0x7610 +0x7611 +0x7613 +0x7614 +0x7615 +0x7616 +0x7619 +0x761A +0x761B +0x761C +0x761D +0x761E +0x761F +0x7620 +0x7621 +0x7622 +0x7623 +0x7624 +0x7625 +0x7626 +0x7627 +0x7628 +0x7629 +0x762D +0x762F +0x7630 +0x7631 +0x7632 +0x7633 +0x7634 +0x7635 +0x7638 +0x763A +0x763C +0x763D +0x7642 +0x7643 +0x7646 +0x7647 +0x7648 +0x7649 +0x764C +0x7650 +0x7652 +0x7653 +0x7656 +0x7657 +0x7658 +0x7659 +0x765A +0x765C +0x765F +0x7660 +0x7661 +0x7662 +0x7664 +0x7665 +0x7669 +0x766A +0x766C +0x766D +0x766E +0x7670 +0x7671 +0x7672 +0x7675 +0x7678 +0x7679 +0x767B +0x767C +0x767D +0x767E +0x767F +0x7681 +0x7682 +0x7684 +0x7686 +0x7687 +0x7688 +0x7689 +0x768A +0x768B +0x768E +0x768F +0x7692 +0x7693 +0x7695 +0x7696 +0x7699 +0x769A +0x769B +0x769C +0x769D +0x769E +0x76A4 +0x76A6 +0x76AA +0x76AB +0x76AD +0x76AE +0x76AF +0x76B0 +0x76B4 +0x76B5 +0x76B8 +0x76BA +0x76BB +0x76BD +0x76BE +0x76BF +0x76C2 +0x76C3 +0x76C4 +0x76C5 +0x76C6 +0x76C8 +0x76C9 +0x76CA +0x76CD +0x76CE +0x76D2 +0x76D3 +0x76D4 +0x76DA +0x76DB +0x76DC +0x76DD +0x76DE +0x76DF +0x76E1 +0x76E3 +0x76E4 +0x76E5 +0x76E6 +0x76E7 +0x76E9 +0x76EA +0x76EC +0x76ED +0x76EE +0x76EF +0x76F0 +0x76F1 +0x76F2 +0x76F3 +0x76F4 +0x76F5 +0x76F7 +0x76F8 +0x76F9 +0x76FA +0x76FB +0x76FC +0x76FE +0x7701 +0x7703 +0x7704 +0x7705 +0x7707 +0x7708 +0x7709 +0x770A +0x770B +0x7710 +0x7711 +0x7712 +0x7713 +0x7715 +0x7719 +0x771A +0x771B +0x771D +0x771F +0x7720 +0x7722 +0x7723 +0x7725 +0x7727 +0x7728 +0x7729 +0x772D +0x772F +0x7731 +0x7732 +0x7733 +0x7734 +0x7735 +0x7736 +0x7737 +0x7738 +0x7739 +0x773A +0x773B +0x773C +0x773D +0x773E +0x7744 +0x7745 +0x7746 +0x7747 +0x774A +0x774B +0x774C +0x774D +0x774E +0x774F +0x7752 +0x7754 +0x7755 +0x7756 +0x7759 +0x775A +0x775B +0x775C +0x775E +0x775F +0x7760 +0x7761 +0x7762 +0x7763 +0x7765 +0x7766 +0x7767 +0x7768 +0x7769 +0x776A +0x776B +0x776C +0x776D +0x776E +0x776F +0x7779 +0x777C +0x777D +0x777E +0x777F +0x7780 +0x7781 +0x7782 +0x7783 +0x7784 +0x7785 +0x7787 +0x7788 +0x7789 +0x778B +0x778C +0x778D +0x778E +0x778F +0x7791 +0x7795 +0x7797 +0x7799 +0x779A +0x779B +0x779C +0x779D +0x779E +0x779F +0x77A0 +0x77A1 +0x77A2 +0x77A3 +0x77A5 +0x77A7 +0x77A8 +0x77AA +0x77AB +0x77AC +0x77AD +0x77B0 +0x77B1 +0x77B2 +0x77B3 +0x77B4 +0x77B5 +0x77B6 +0x77B7 +0x77BA +0x77BB +0x77BC +0x77BD +0x77BF +0x77C2 +0x77C4 +0x77C7 +0x77C9 +0x77CA +0x77CC +0x77CD +0x77CE +0x77CF +0x77D0 +0x77D3 +0x77D4 +0x77D5 +0x77D7 +0x77D8 +0x77D9 +0x77DA +0x77DB +0x77DC +0x77DE +0x77E0 +0x77E2 +0x77E3 +0x77E5 +0x77E7 +0x77E8 +0x77E9 +0x77EC +0x77ED +0x77EE +0x77EF +0x77F0 +0x77F1 +0x77F2 +0x77F3 +0x77F7 +0x77F8 +0x77F9 +0x77FA +0x77FB +0x77FC +0x77FD +0x7802 +0x7803 +0x7805 +0x7806 +0x7809 +0x780C +0x780D +0x780E +0x780F +0x7810 +0x7811 +0x7812 +0x7813 +0x7814 +0x781D +0x781F +0x7820 +0x7821 +0x7822 +0x7823 +0x7825 +0x7826 +0x7827 +0x7828 +0x7829 +0x782A +0x782B +0x782C +0x782D +0x782E +0x782F +0x7830 +0x7831 +0x7832 +0x7833 +0x7834 +0x7835 +0x7837 +0x7838 +0x7843 +0x7845 +0x7848 +0x7849 +0x784A +0x784C +0x784D +0x784E +0x7850 +0x7852 +0x785C +0x785D +0x785E +0x7860 +0x7862 +0x7864 +0x7865 +0x7868 +0x7869 +0x786A +0x786B +0x786C +0x786D +0x786E +0x786F +0x7870 +0x7871 +0x7879 +0x787B +0x787C +0x787E +0x787F +0x7880 +0x7883 +0x7884 +0x7885 +0x7886 +0x7887 +0x7889 +0x788C +0x788E +0x788F +0x7891 +0x7893 +0x7894 +0x7895 +0x7896 +0x7897 +0x7898 +0x7899 +0x789A +0x789E +0x789F +0x78A0 +0x78A1 +0x78A2 +0x78A3 +0x78A4 +0x78A5 +0x78A7 +0x78A8 +0x78A9 +0x78AA +0x78AB +0x78AC +0x78AD +0x78B0 +0x78B2 +0x78B3 +0x78B4 +0x78BA +0x78BB +0x78BC +0x78BE +0x78C1 +0x78C3 +0x78C4 +0x78C5 +0x78C8 +0x78C9 +0x78CA +0x78CB +0x78CC +0x78CD +0x78CE +0x78CF +0x78D0 +0x78D1 +0x78D4 +0x78D5 +0x78DA +0x78DB +0x78DD +0x78DE +0x78DF +0x78E0 +0x78E1 +0x78E2 +0x78E3 +0x78E5 +0x78E7 +0x78E8 +0x78E9 +0x78EA +0x78EC +0x78ED +0x78EF +0x78F2 +0x78F3 +0x78F4 +0x78F7 +0x78F9 +0x78FA +0x78FB +0x78FC +0x78FD +0x78FE +0x78FF +0x7901 +0x7902 +0x7904 +0x7905 +0x7909 +0x790C +0x790E +0x7910 +0x7911 +0x7912 +0x7913 +0x7914 +0x7917 +0x7919 +0x791B +0x791C +0x791D +0x791E +0x7921 +0x7923 +0x7924 +0x7925 +0x7926 +0x7927 +0x7928 +0x7929 +0x792A +0x792B +0x792C +0x792D +0x792F +0x7931 +0x7935 +0x7938 +0x7939 +0x793A +0x793D +0x793E +0x793F +0x7940 +0x7941 +0x7942 +0x7944 +0x7945 +0x7946 +0x7947 +0x7948 +0x7949 +0x794A +0x794B +0x794C +0x794F +0x7950 +0x7951 +0x7952 +0x7953 +0x7954 +0x7955 +0x7956 +0x7957 +0x795A +0x795B +0x795C +0x795D +0x795E +0x795F +0x7960 +0x7961 +0x7963 +0x7964 +0x7965 +0x7967 +0x7968 +0x7969 +0x796A +0x796B +0x796D +0x7970 +0x7972 +0x7973 +0x7974 +0x7979 +0x797A +0x797C +0x797D +0x797F +0x7981 +0x7982 +0x7988 +0x798A +0x798B +0x798D +0x798E +0x798F +0x7990 +0x7992 +0x7993 +0x7994 +0x7995 +0x7996 +0x7997 +0x7998 +0x799A +0x799B +0x799C +0x79A0 +0x79A1 +0x79A2 +0x79A4 +0x79A6 +0x79A7 +0x79A8 +0x79AA +0x79AB +0x79AC +0x79AD +0x79AE +0x79B0 +0x79B1 +0x79B2 +0x79B3 +0x79B4 +0x79B6 +0x79B7 +0x79B8 +0x79B9 +0x79BA +0x79BB +0x79BD +0x79BE +0x79BF +0x79C0 +0x79C1 +0x79C5 +0x79C8 +0x79C9 +0x79CB +0x79CD +0x79CE +0x79CF +0x79D1 +0x79D2 +0x79D5 +0x79D6 +0x79D8 +0x79DC +0x79DD +0x79DE +0x79DF +0x79E0 +0x79E3 +0x79E4 +0x79E6 +0x79E7 +0x79E9 +0x79EA +0x79EB +0x79EC +0x79ED +0x79EE +0x79F6 +0x79F7 +0x79F8 +0x79FA +0x79FB +0x7A00 +0x7A02 +0x7A03 +0x7A04 +0x7A05 +0x7A08 +0x7A0A +0x7A0B +0x7A0C +0x7A0D +0x7A10 +0x7A11 +0x7A12 +0x7A13 +0x7A14 +0x7A15 +0x7A17 +0x7A18 +0x7A19 +0x7A1A +0x7A1B +0x7A1C +0x7A1E +0x7A1F +0x7A20 +0x7A22 +0x7A26 +0x7A28 +0x7A2B +0x7A2E +0x7A2F +0x7A30 +0x7A31 +0x7A37 +0x7A39 +0x7A3B +0x7A3C +0x7A3D +0x7A3F +0x7A40 +0x7A44 +0x7A46 +0x7A47 +0x7A48 +0x7A4A +0x7A4B +0x7A4C +0x7A4D +0x7A4E +0x7A54 +0x7A56 +0x7A57 +0x7A58 +0x7A5A +0x7A5B +0x7A5C +0x7A5F +0x7A60 +0x7A61 +0x7A62 +0x7A67 +0x7A68 +0x7A69 +0x7A6B +0x7A6C +0x7A6D +0x7A6E +0x7A70 +0x7A71 +0x7A74 +0x7A75 +0x7A76 +0x7A78 +0x7A79 +0x7A7A +0x7A7B +0x7A7E +0x7A7F +0x7A80 +0x7A81 +0x7A84 +0x7A85 +0x7A86 +0x7A87 +0x7A88 +0x7A89 +0x7A8A +0x7A8B +0x7A8C +0x7A8F +0x7A90 +0x7A92 +0x7A94 +0x7A95 +0x7A96 +0x7A97 +0x7A98 +0x7A99 +0x7A9E +0x7A9F +0x7AA0 +0x7AA2 +0x7AA3 +0x7AA8 +0x7AA9 +0x7AAA +0x7AAB +0x7AAC +0x7AAE +0x7AAF +0x7AB1 +0x7AB2 +0x7AB3 +0x7AB4 +0x7AB5 +0x7AB6 +0x7AB7 +0x7AB8 +0x7ABA +0x7ABE +0x7ABF +0x7AC0 +0x7AC1 +0x7AC4 +0x7AC5 +0x7AC7 +0x7ACA +0x7ACB +0x7AD1 +0x7AD8 +0x7AD9 +0x7ADF +0x7AE0 +0x7AE3 +0x7AE4 +0x7AE5 +0x7AE6 +0x7AEB +0x7AED +0x7AEE +0x7AEF +0x7AF6 +0x7AF7 +0x7AF9 +0x7AFA +0x7AFB +0x7AFD +0x7AFF +0x7B00 +0x7B01 +0x7B04 +0x7B05 +0x7B06 +0x7B08 +0x7B09 +0x7B0A +0x7B0E +0x7B0F +0x7B10 +0x7B11 +0x7B12 +0x7B13 +0x7B18 +0x7B19 +0x7B1A +0x7B1B +0x7B1D +0x7B1E +0x7B20 +0x7B22 +0x7B23 +0x7B24 +0x7B25 +0x7B26 +0x7B28 +0x7B2A +0x7B2B +0x7B2C +0x7B2D +0x7B2E +0x7B2F +0x7B30 +0x7B31 +0x7B32 +0x7B33 +0x7B34 +0x7B35 +0x7B38 +0x7B3B +0x7B40 +0x7B44 +0x7B45 +0x7B46 +0x7B47 +0x7B48 +0x7B49 +0x7B4A +0x7B4B +0x7B4C +0x7B4D +0x7B4E +0x7B4F +0x7B50 +0x7B51 +0x7B52 +0x7B54 +0x7B56 +0x7B58 +0x7B60 +0x7B61 +0x7B63 +0x7B64 +0x7B65 +0x7B66 +0x7B67 +0x7B69 +0x7B6D +0x7B6E +0x7B70 +0x7B71 +0x7B72 +0x7B73 +0x7B74 +0x7B75 +0x7B76 +0x7B77 +0x7B78 +0x7B82 +0x7B84 +0x7B85 +0x7B87 +0x7B88 +0x7B8A +0x7B8B +0x7B8C +0x7B8D +0x7B8E +0x7B8F +0x7B90 +0x7B91 +0x7B94 +0x7B95 +0x7B96 +0x7B97 +0x7B98 +0x7B99 +0x7B9B +0x7B9C +0x7B9D +0x7BA0 +0x7BA1 +0x7BA4 +0x7BAC +0x7BAD +0x7BAF +0x7BB1 +0x7BB4 +0x7BB5 +0x7BB7 +0x7BB8 +0x7BB9 +0x7BBE +0x7BC0 +0x7BC1 +0x7BC4 +0x7BC6 +0x7BC7 +0x7BC9 +0x7BCA +0x7BCB +0x7BCC +0x7BCE +0x7BD4 +0x7BD5 +0x7BD8 +0x7BD9 +0x7BDA +0x7BDB +0x7BDC +0x7BDD +0x7BDE +0x7BDF +0x7BE0 +0x7BE1 +0x7BE2 +0x7BE3 +0x7BE4 +0x7BE5 +0x7BE6 +0x7BE7 +0x7BE8 +0x7BE9 +0x7BEA +0x7BEB +0x7BF0 +0x7BF1 +0x7BF2 +0x7BF3 +0x7BF4 +0x7BF7 +0x7BF8 +0x7BF9 +0x7BFB +0x7BFD +0x7BFE +0x7BFF +0x7C00 +0x7C01 +0x7C02 +0x7C03 +0x7C05 +0x7C06 +0x7C07 +0x7C09 +0x7C0A +0x7C0B +0x7C0C +0x7C0D +0x7C0E +0x7C0F +0x7C10 +0x7C11 +0x7C19 +0x7C1C +0x7C1D +0x7C1E +0x7C1F +0x7C20 +0x7C21 +0x7C22 +0x7C23 +0x7C25 +0x7C26 +0x7C27 +0x7C28 +0x7C29 +0x7C2A +0x7C2B +0x7C2C +0x7C2D +0x7C30 +0x7C33 +0x7C37 +0x7C38 +0x7C39 +0x7C3B +0x7C3C +0x7C3D +0x7C3E +0x7C3F +0x7C40 +0x7C43 +0x7C45 +0x7C47 +0x7C48 +0x7C49 +0x7C4A +0x7C4C +0x7C4D +0x7C50 +0x7C53 +0x7C54 +0x7C57 +0x7C59 +0x7C5A +0x7C5B +0x7C5C +0x7C5F +0x7C60 +0x7C63 +0x7C64 +0x7C65 +0x7C66 +0x7C67 +0x7C69 +0x7C6A +0x7C6B +0x7C6C +0x7C6E +0x7C6F +0x7C72 +0x7C73 +0x7C75 +0x7C78 +0x7C79 +0x7C7A +0x7C7D +0x7C7F +0x7C80 +0x7C81 +0x7C84 +0x7C85 +0x7C88 +0x7C89 +0x7C8A +0x7C8C +0x7C8D +0x7C91 +0x7C92 +0x7C94 +0x7C95 +0x7C96 +0x7C97 +0x7C98 +0x7C9E +0x7C9F +0x7CA1 +0x7CA2 +0x7CA3 +0x7CA5 +0x7CA8 +0x7CAF +0x7CB1 +0x7CB2 +0x7CB3 +0x7CB4 +0x7CB5 +0x7CB9 +0x7CBA +0x7CBB +0x7CBC +0x7CBD +0x7CBE +0x7CBF +0x7CC5 +0x7CC8 +0x7CCA +0x7CCB +0x7CCC +0x7CCE +0x7CD0 +0x7CD1 +0x7CD2 +0x7CD4 +0x7CD5 +0x7CD6 +0x7CD7 +0x7CD9 +0x7CDC +0x7CDD +0x7CDE +0x7CDF +0x7CE0 +0x7CE2 +0x7CE7 +0x7CE8 +0x7CEA +0x7CEC +0x7CEE +0x7CEF +0x7CF0 +0x7CF1 +0x7CF2 +0x7CF4 +0x7CF6 +0x7CF7 +0x7CF8 +0x7CFB +0x7CFD +0x7CFE +0x7D00 +0x7D01 +0x7D02 +0x7D03 +0x7D04 +0x7D05 +0x7D06 +0x7D07 +0x7D08 +0x7D09 +0x7D0A +0x7D0B +0x7D0C +0x7D0D +0x7D0E +0x7D0F +0x7D10 +0x7D11 +0x7D12 +0x7D13 +0x7D14 +0x7D15 +0x7D16 +0x7D17 +0x7D18 +0x7D19 +0x7D1A +0x7D1B +0x7D1C +0x7D1D +0x7D1E +0x7D1F +0x7D20 +0x7D21 +0x7D22 +0x7D28 +0x7D29 +0x7D2B +0x7D2C +0x7D2E +0x7D2F +0x7D30 +0x7D31 +0x7D32 +0x7D33 +0x7D35 +0x7D36 +0x7D38 +0x7D39 +0x7D3A +0x7D3B +0x7D3C +0x7D3D +0x7D3E +0x7D3F +0x7D40 +0x7D41 +0x7D42 +0x7D43 +0x7D44 +0x7D45 +0x7D46 +0x7D47 +0x7D4A +0x7D4E +0x7D4F +0x7D50 +0x7D51 +0x7D52 +0x7D53 +0x7D54 +0x7D55 +0x7D56 +0x7D58 +0x7D5B +0x7D5C +0x7D5E +0x7D5F +0x7D61 +0x7D62 +0x7D63 +0x7D66 +0x7D67 +0x7D68 +0x7D69 +0x7D6A +0x7D6B +0x7D6D +0x7D6E +0x7D6F +0x7D70 +0x7D71 +0x7D72 +0x7D73 +0x7D79 +0x7D7A +0x7D7B +0x7D7C +0x7D7D +0x7D7F +0x7D80 +0x7D81 +0x7D83 +0x7D84 +0x7D85 +0x7D86 +0x7D88 +0x7D8C +0x7D8D +0x7D8E +0x7D8F +0x7D91 +0x7D92 +0x7D93 +0x7D94 +0x7D96 +0x7D9C +0x7D9D +0x7D9E +0x7D9F +0x7DA0 +0x7DA1 +0x7DA2 +0x7DA3 +0x7DA6 +0x7DA7 +0x7DA9 +0x7DAA +0x7DAC +0x7DAD +0x7DAE +0x7DAF +0x7DB0 +0x7DB1 +0x7DB2 +0x7DB4 +0x7DB5 +0x7DB7 +0x7DB8 +0x7DB9 +0x7DBA +0x7DBB +0x7DBC +0x7DBD +0x7DBE +0x7DBF +0x7DC0 +0x7DC1 +0x7DC2 +0x7DC4 +0x7DC5 +0x7DC6 +0x7DC7 +0x7DC9 +0x7DCA +0x7DCB +0x7DCC +0x7DCE +0x7DD2 +0x7DD7 +0x7DD8 +0x7DD9 +0x7DDA +0x7DDB +0x7DDD +0x7DDE +0x7DDF +0x7DE0 +0x7DE1 +0x7DE3 +0x7DE6 +0x7DE7 +0x7DE8 +0x7DE9 +0x7DEA +0x7DEC +0x7DEE +0x7DEF +0x7DF0 +0x7DF1 +0x7DF2 +0x7DF3 +0x7DF4 +0x7DF6 +0x7DF7 +0x7DF9 +0x7DFA +0x7DFB +0x7E03 +0x7E08 +0x7E09 +0x7E0A +0x7E0B +0x7E0C +0x7E0D +0x7E0E +0x7E0F +0x7E10 +0x7E11 +0x7E12 +0x7E13 +0x7E14 +0x7E15 +0x7E16 +0x7E17 +0x7E1A +0x7E1B +0x7E1C +0x7E1D +0x7E1E +0x7E1F +0x7E20 +0x7E21 +0x7E22 +0x7E23 +0x7E24 +0x7E25 +0x7E29 +0x7E2A +0x7E2B +0x7E2D +0x7E2E +0x7E2F +0x7E30 +0x7E31 +0x7E32 +0x7E33 +0x7E34 +0x7E35 +0x7E36 +0x7E37 +0x7E38 +0x7E39 +0x7E3A +0x7E3B +0x7E3C +0x7E3D +0x7E3E +0x7E3F +0x7E40 +0x7E41 +0x7E42 +0x7E43 +0x7E44 +0x7E45 +0x7E46 +0x7E47 +0x7E48 +0x7E49 +0x7E4C +0x7E50 +0x7E51 +0x7E52 +0x7E53 +0x7E54 +0x7E55 +0x7E56 +0x7E57 +0x7E58 +0x7E59 +0x7E5A +0x7E5C +0x7E5E +0x7E5F +0x7E60 +0x7E61 +0x7E62 +0x7E63 +0x7E68 +0x7E69 +0x7E6A +0x7E6B +0x7E6D +0x7E6F +0x7E70 +0x7E72 +0x7E73 +0x7E74 +0x7E75 +0x7E76 +0x7E77 +0x7E78 +0x7E79 +0x7E7A +0x7E7B +0x7E7C +0x7E7D +0x7E7E +0x7E80 +0x7E81 +0x7E82 +0x7E86 +0x7E87 +0x7E88 +0x7E8A +0x7E8B +0x7E8C +0x7E8D +0x7E8F +0x7E91 +0x7E93 +0x7E94 +0x7E95 +0x7E96 +0x7E97 +0x7E98 +0x7E99 +0x7E9A +0x7E9B +0x7E9C +0x7F36 +0x7F38 +0x7F39 +0x7F3A +0x7F3D +0x7F3E +0x7F3F +0x7F43 +0x7F44 +0x7F45 +0x7F48 +0x7F4A +0x7F4B +0x7F4C +0x7F4D +0x7F4F +0x7F50 +0x7F51 +0x7F54 +0x7F55 +0x7F58 +0x7F5B +0x7F5C +0x7F5D +0x7F5E +0x7F5F +0x7F60 +0x7F61 +0x7F63 +0x7F65 +0x7F66 +0x7F67 +0x7F68 +0x7F69 +0x7F6A +0x7F6B +0x7F6C +0x7F6D +0x7F6E +0x7F70 +0x7F72 +0x7F73 +0x7F75 +0x7F76 +0x7F77 +0x7F79 +0x7F7A +0x7F7B +0x7F7C +0x7F7D +0x7F7E +0x7F7F +0x7F83 +0x7F85 +0x7F86 +0x7F87 +0x7F88 +0x7F89 +0x7F8A +0x7F8B +0x7F8C +0x7F8D +0x7F8E +0x7F91 +0x7F92 +0x7F94 +0x7F95 +0x7F96 +0x7F9A +0x7F9B +0x7F9C +0x7F9D +0x7F9E +0x7FA0 +0x7FA1 +0x7FA2 +0x7FA4 +0x7FA5 +0x7FA6 +0x7FA7 +0x7FA8 +0x7FA9 +0x7FAC +0x7FAD +0x7FAF +0x7FB0 +0x7FB1 +0x7FB2 +0x7FB3 +0x7FB5 +0x7FB6 +0x7FB7 +0x7FB8 +0x7FB9 +0x7FBA +0x7FBB +0x7FBC +0x7FBD +0x7FBE +0x7FBF +0x7FC0 +0x7FC1 +0x7FC2 +0x7FC3 +0x7FC5 +0x7FC7 +0x7FC9 +0x7FCA +0x7FCB +0x7FCC +0x7FCD +0x7FCE +0x7FCF +0x7FD0 +0x7FD1 +0x7FD2 +0x7FD4 +0x7FD5 +0x7FD7 +0x7FDB +0x7FDC +0x7FDE +0x7FDF +0x7FE0 +0x7FE1 +0x7FE2 +0x7FE3 +0x7FE5 +0x7FE6 +0x7FE8 +0x7FE9 +0x7FEA +0x7FEB +0x7FEC +0x7FED +0x7FEE +0x7FEF +0x7FF0 +0x7FF1 +0x7FF2 +0x7FF3 +0x7FF4 +0x7FF5 +0x7FF7 +0x7FF8 +0x7FF9 +0x7FFB +0x7FFC +0x7FFD +0x7FFE +0x7FFF +0x8000 +0x8001 +0x8003 +0x8004 +0x8005 +0x8006 +0x8007 +0x800B +0x800C +0x800D +0x800E +0x800F +0x8010 +0x8011 +0x8012 +0x8014 +0x8015 +0x8016 +0x8017 +0x8018 +0x8019 +0x801B +0x801C +0x801E +0x801F +0x8021 +0x8024 +0x8026 +0x8028 +0x8029 +0x802A +0x802C +0x8030 +0x8033 +0x8034 +0x8035 +0x8036 +0x8037 +0x8039 +0x803D +0x803E +0x803F +0x8043 +0x8046 +0x8047 +0x8048 +0x804A +0x804F +0x8050 +0x8051 +0x8052 +0x8056 +0x8058 +0x805A +0x805C +0x805D +0x805E +0x8064 +0x8067 +0x806C +0x806F +0x8070 +0x8071 +0x8072 +0x8073 +0x8075 +0x8076 +0x8077 +0x8078 +0x8079 +0x807D +0x807E +0x807F +0x8082 +0x8084 +0x8085 +0x8086 +0x8087 +0x8089 +0x808A +0x808B +0x808C +0x808F +0x8090 +0x8092 +0x8093 +0x8095 +0x8096 +0x8098 +0x8099 +0x809A +0x809B +0x809C +0x809D +0x80A1 +0x80A2 +0x80A3 +0x80A5 +0x80A9 +0x80AA +0x80AB +0x80AD +0x80AE +0x80AF +0x80B1 +0x80B2 +0x80B4 +0x80B5 +0x80B8 +0x80BA +0x80C2 +0x80C3 +0x80C4 +0x80C5 +0x80C7 +0x80C8 +0x80C9 +0x80CA +0x80CC +0x80CD +0x80CE +0x80CF +0x80D0 +0x80D1 +0x80D4 +0x80D5 +0x80D6 +0x80D7 +0x80D8 +0x80D9 +0x80DA +0x80DB +0x80DC +0x80DD +0x80DE +0x80E0 +0x80E1 +0x80E3 +0x80E4 +0x80E5 +0x80E6 +0x80ED +0x80EF +0x80F0 +0x80F1 +0x80F2 +0x80F3 +0x80F4 +0x80F5 +0x80F8 +0x80F9 +0x80FA +0x80FB +0x80FC +0x80FD +0x80FE +0x8100 +0x8101 +0x8102 +0x8105 +0x8106 +0x8108 +0x810A +0x8115 +0x8116 +0x8118 +0x8119 +0x811B +0x811D +0x811E +0x811F +0x8121 +0x8122 +0x8123 +0x8124 +0x8125 +0x8127 +0x8129 +0x812B +0x812C +0x812D +0x812F +0x8130 +0x8139 +0x813A +0x813D +0x813E +0x8143 +0x8144 +0x8146 +0x8147 +0x814A +0x814B +0x814C +0x814D +0x814E +0x814F +0x8150 +0x8151 +0x8152 +0x8153 +0x8154 +0x8155 +0x815B +0x815C +0x815E +0x8160 +0x8161 +0x8162 +0x8164 +0x8165 +0x8166 +0x8167 +0x8169 +0x816B +0x816E +0x816F +0x8170 +0x8171 +0x8172 +0x8173 +0x8174 +0x8176 +0x8177 +0x8178 +0x8179 +0x817A +0x817F +0x8180 +0x8182 +0x8183 +0x8186 +0x8187 +0x8188 +0x8189 +0x818A +0x818B +0x818C +0x818D +0x818F +0x8195 +0x8197 +0x8198 +0x8199 +0x819A +0x819B +0x819C +0x819D +0x819E +0x819F +0x81A0 +0x81A2 +0x81A3 +0x81A6 +0x81A7 +0x81A8 +0x81A9 +0x81AB +0x81AC +0x81AE +0x81B0 +0x81B1 +0x81B2 +0x81B3 +0x81B4 +0x81B5 +0x81B7 +0x81B9 +0x81BA +0x81BB +0x81BC +0x81BD +0x81BE +0x81BF +0x81C0 +0x81C2 +0x81C3 +0x81C4 +0x81C5 +0x81C6 +0x81C7 +0x81C9 +0x81CA +0x81CC +0x81CD +0x81CF +0x81D0 +0x81D1 +0x81D2 +0x81D5 +0x81D7 +0x81D8 +0x81D9 +0x81DA +0x81DB +0x81DD +0x81DE +0x81DF +0x81E0 +0x81E1 +0x81E2 +0x81E3 +0x81E5 +0x81E6 +0x81E7 +0x81E8 +0x81E9 +0x81EA +0x81EC +0x81ED +0x81EE +0x81F2 +0x81F3 +0x81F4 +0x81F7 +0x81F8 +0x81F9 +0x81FA +0x81FB +0x81FC +0x81FE +0x81FF +0x8200 +0x8201 +0x8202 +0x8204 +0x8205 +0x8207 +0x8208 +0x8209 +0x820A +0x820B +0x820C +0x820D +0x8210 +0x8211 +0x8212 +0x8214 +0x8215 +0x8216 +0x821B +0x821C +0x821D +0x821E +0x821F +0x8220 +0x8221 +0x8222 +0x8225 +0x8228 +0x822A +0x822B +0x822C +0x822F +0x8232 +0x8233 +0x8234 +0x8235 +0x8236 +0x8237 +0x8238 +0x8239 +0x823A +0x823C +0x823D +0x823F +0x8240 +0x8242 +0x8244 +0x8245 +0x8247 +0x8249 +0x824B +0x824E +0x824F +0x8250 +0x8251 +0x8252 +0x8253 +0x8255 +0x8256 +0x8257 +0x8258 +0x8259 +0x825A +0x825B +0x825C +0x825E +0x825F +0x8261 +0x8263 +0x8264 +0x8266 +0x8268 +0x8269 +0x826B +0x826C +0x826D +0x826E +0x826F +0x8271 +0x8272 +0x8274 +0x8275 +0x8277 +0x8278 +0x827C +0x827D +0x827E +0x827F +0x8280 +0x8283 +0x8284 +0x8285 +0x828A +0x828B +0x828D +0x828E +0x828F +0x8290 +0x8291 +0x8292 +0x8293 +0x8294 +0x8298 +0x8299 +0x829A +0x829B +0x829D +0x829E +0x829F +0x82A0 +0x82A1 +0x82A2 +0x82A3 +0x82A4 +0x82A5 +0x82A7 +0x82A8 +0x82A9 +0x82AB +0x82AC +0x82AD +0x82AE +0x82AF +0x82B0 +0x82B1 +0x82B3 +0x82B4 +0x82B5 +0x82B6 +0x82B7 +0x82B8 +0x82B9 +0x82BA +0x82BB +0x82BC +0x82BD +0x82BE +0x82C0 +0x82C2 +0x82C3 +0x82D1 +0x82D2 +0x82D3 +0x82D4 +0x82D5 +0x82D6 +0x82D7 +0x82D9 +0x82DB +0x82DC +0x82DE +0x82DF +0x82E0 +0x82E1 +0x82E3 +0x82E4 +0x82E5 +0x82E6 +0x82E7 +0x82E8 +0x82EA +0x82EB +0x82EC +0x82ED +0x82EF +0x82F0 +0x82F1 +0x82F2 +0x82F3 +0x82F4 +0x82F5 +0x82F6 +0x82F9 +0x82FA +0x82FB +0x82FE +0x8300 +0x8301 +0x8302 +0x8303 +0x8304 +0x8305 +0x8306 +0x8307 +0x8308 +0x8309 +0x830C +0x830D +0x8316 +0x8317 +0x8319 +0x831B +0x831C +0x831E +0x8320 +0x8322 +0x8324 +0x8325 +0x8326 +0x8327 +0x8328 +0x8329 +0x832A +0x832B +0x832C +0x832D +0x832F +0x8331 +0x8332 +0x8333 +0x8334 +0x8335 +0x8336 +0x8337 +0x8338 +0x8339 +0x833A +0x833B +0x833C +0x833F +0x8340 +0x8341 +0x8342 +0x8343 +0x8344 +0x8345 +0x8347 +0x8348 +0x8349 +0x834A +0x834B +0x834C +0x834D +0x834E +0x834F +0x8350 +0x8351 +0x8352 +0x8353 +0x8354 +0x8356 +0x8373 +0x8374 +0x8375 +0x8376 +0x8377 +0x8378 +0x837A +0x837B +0x837C +0x837D +0x837E +0x837F +0x8381 +0x8383 +0x8386 +0x8387 +0x8388 +0x8389 +0x838A +0x838B +0x838C +0x838D +0x838E +0x838F +0x8390 +0x8392 +0x8393 +0x8394 +0x8395 +0x8396 +0x8397 +0x8398 +0x8399 +0x839A +0x839B +0x839D +0x839E +0x83A0 +0x83A2 +0x83A3 +0x83A4 +0x83A5 +0x83A6 +0x83A7 +0x83A8 +0x83A9 +0x83AA +0x83AB +0x83AE +0x83AF +0x83B0 +0x83BD +0x83BF +0x83C0 +0x83C1 +0x83C2 +0x83C3 +0x83C4 +0x83C5 +0x83C6 +0x83C7 +0x83C8 +0x83C9 +0x83CA +0x83CB +0x83CC +0x83CE +0x83CF +0x83D1 +0x83D4 +0x83D5 +0x83D6 +0x83D7 +0x83D8 +0x83D9 +0x83DB +0x83DC +0x83DD +0x83DE +0x83DF +0x83E0 +0x83E1 +0x83E2 +0x83E3 +0x83E4 +0x83E5 +0x83E7 +0x83E8 +0x83E9 +0x83EA +0x83EB +0x83EC +0x83EE +0x83EF +0x83F0 +0x83F1 +0x83F2 +0x83F3 +0x83F4 +0x83F5 +0x83F6 +0x83F8 +0x83F9 +0x83FA +0x83FB +0x83FC +0x83FD +0x83FE +0x83FF +0x8401 +0x8403 +0x8404 +0x8406 +0x8407 +0x8409 +0x840A +0x840B +0x840C +0x840D +0x840E +0x840F +0x8410 +0x8411 +0x8412 +0x8413 +0x841B +0x8423 +0x8429 +0x842B +0x842C +0x842D +0x842F +0x8430 +0x8431 +0x8432 +0x8433 +0x8434 +0x8435 +0x8436 +0x8437 +0x8438 +0x8439 +0x843A +0x843B +0x843C +0x843D +0x843F +0x8440 +0x8442 +0x8443 +0x8444 +0x8445 +0x8446 +0x8447 +0x8449 +0x844B +0x844C +0x844D +0x844E +0x8450 +0x8451 +0x8452 +0x8454 +0x8456 +0x8457 +0x8459 +0x845A +0x845B +0x845D +0x845E +0x845F +0x8460 +0x8461 +0x8463 +0x8465 +0x8466 +0x8467 +0x8468 +0x8469 +0x846B +0x846C +0x846D +0x846E +0x846F +0x8470 +0x8473 +0x8474 +0x8475 +0x8476 +0x8477 +0x8478 +0x8479 +0x847A +0x847D +0x847E +0x8482 +0x8486 +0x848D +0x848E +0x848F +0x8490 +0x8491 +0x8494 +0x8497 +0x8498 +0x8499 +0x849A +0x849B +0x849C +0x849D +0x849E +0x849F +0x84A0 +0x84A1 +0x84A2 +0x84A4 +0x84A7 +0x84A8 +0x84A9 +0x84AA +0x84AB +0x84AC +0x84AE +0x84AF +0x84B0 +0x84B1 +0x84B2 +0x84B4 +0x84B6 +0x84B8 +0x84B9 +0x84BA +0x84BB +0x84BC +0x84BF +0x84C0 +0x84C1 +0x84C2 +0x84C4 +0x84C5 +0x84C6 +0x84C7 +0x84C9 +0x84CA +0x84CB +0x84CC +0x84CD +0x84CE +0x84CF +0x84D0 +0x84D1 +0x84D2 +0x84D3 +0x84D4 +0x84D6 +0x84D7 +0x84DB +0x84E7 +0x84E8 +0x84E9 +0x84EA +0x84EB +0x84EC +0x84EE +0x84EF +0x84F0 +0x84F1 +0x84F2 +0x84F3 +0x84F4 +0x84F6 +0x84F7 +0x84F9 +0x84FA +0x84FB +0x84FC +0x84FD +0x84FE +0x84FF +0x8500 +0x8502 +0x8506 +0x8507 +0x8508 +0x8509 +0x850A +0x850B +0x850C +0x850D +0x850E +0x850F +0x8511 +0x8512 +0x8513 +0x8514 +0x8515 +0x8516 +0x8517 +0x8518 +0x8519 +0x851A +0x851C +0x851D +0x851E +0x851F +0x8520 +0x8521 +0x8523 +0x8524 +0x8525 +0x8526 +0x8527 +0x8528 +0x8529 +0x852A +0x852B +0x852C +0x852D +0x852E +0x852F +0x8530 +0x8531 +0x853B +0x853D +0x853E +0x8540 +0x8541 +0x8543 +0x8544 +0x8545 +0x8546 +0x8547 +0x8548 +0x8549 +0x854A +0x854D +0x854E +0x8551 +0x8553 +0x8554 +0x8555 +0x8556 +0x8557 +0x8558 +0x8559 +0x855B +0x855D +0x855E +0x8560 +0x8561 +0x8562 +0x8563 +0x8564 +0x8565 +0x8566 +0x8567 +0x8568 +0x8569 +0x856A +0x856B +0x856C +0x856D +0x856E +0x8571 +0x8575 +0x8576 +0x8577 +0x8578 +0x8579 +0x857A +0x857B +0x857C +0x857E +0x8580 +0x8581 +0x8582 +0x8583 +0x8584 +0x8585 +0x8586 +0x8587 +0x8588 +0x8589 +0x858A +0x858B +0x858C +0x858D +0x858E +0x858F +0x8590 +0x8591 +0x8594 +0x8595 +0x8596 +0x8598 +0x8599 +0x859A +0x859B +0x859C +0x859D +0x859E +0x859F +0x85A0 +0x85A1 +0x85A2 +0x85A3 +0x85A4 +0x85A6 +0x85A7 +0x85A8 +0x85A9 +0x85AA +0x85AF +0x85B0 +0x85B1 +0x85B3 +0x85B4 +0x85B5 +0x85B6 +0x85B7 +0x85B8 +0x85B9 +0x85BA +0x85BD +0x85BE +0x85BF +0x85C0 +0x85C2 +0x85C3 +0x85C4 +0x85C5 +0x85C6 +0x85C7 +0x85C8 +0x85C9 +0x85CB +0x85CD +0x85CE +0x85CF +0x85D0 +0x85D1 +0x85D2 +0x85D5 +0x85D7 +0x85D8 +0x85D9 +0x85DA +0x85DC +0x85DD +0x85DE +0x85DF +0x85E1 +0x85E2 +0x85E3 +0x85E4 +0x85E5 +0x85E6 +0x85E8 +0x85E9 +0x85EA +0x85EB +0x85EC +0x85ED +0x85EF +0x85F0 +0x85F1 +0x85F2 +0x85F6 +0x85F7 +0x85F8 +0x85F9 +0x85FA +0x85FB +0x85FD +0x85FE +0x85FF +0x8600 +0x8601 +0x8604 +0x8605 +0x8606 +0x8607 +0x8609 +0x860A +0x860B +0x860C +0x8611 +0x8617 +0x8618 +0x8619 +0x861A +0x861B +0x861C +0x861E +0x861F +0x8620 +0x8621 +0x8622 +0x8623 +0x8624 +0x8625 +0x8626 +0x8627 +0x8629 +0x862A +0x862C +0x862D +0x862E +0x8631 +0x8632 +0x8633 +0x8634 +0x8635 +0x8636 +0x8638 +0x8639 +0x863A +0x863B +0x863C +0x863E +0x863F +0x8640 +0x8643 +0x8646 +0x8647 +0x8648 +0x864B +0x864C +0x864D +0x864E +0x8650 +0x8652 +0x8653 +0x8654 +0x8655 +0x8656 +0x8659 +0x865B +0x865C +0x865E +0x865F +0x8661 +0x8662 +0x8663 +0x8664 +0x8665 +0x8667 +0x8668 +0x8669 +0x866A +0x866B +0x866D +0x866E +0x866F +0x8670 +0x8671 +0x8673 +0x8674 +0x8677 +0x8679 +0x867A +0x867B +0x867C +0x8685 +0x8686 +0x8687 +0x868A +0x868B +0x868C +0x868D +0x868E +0x8690 +0x8691 +0x8693 +0x8694 +0x8695 +0x8696 +0x8697 +0x8698 +0x8699 +0x869A +0x869C +0x869D +0x869E +0x86A1 +0x86A2 +0x86A3 +0x86A4 +0x86A5 +0x86A7 +0x86A8 +0x86A9 +0x86AA +0x86AF +0x86B0 +0x86B1 +0x86B3 +0x86B4 +0x86B5 +0x86B6 +0x86B7 +0x86B8 +0x86B9 +0x86BA +0x86BB +0x86BC +0x86BD +0x86BE +0x86BF +0x86C0 +0x86C1 +0x86C2 +0x86C3 +0x86C4 +0x86C5 +0x86C6 +0x86C7 +0x86C8 +0x86C9 +0x86CB +0x86CC +0x86D0 +0x86D1 +0x86D3 +0x86D4 +0x86D6 +0x86D7 +0x86D8 +0x86D9 +0x86DA +0x86DB +0x86DC +0x86DD +0x86DE +0x86DF +0x86E2 +0x86E3 +0x86E4 +0x86E6 +0x86E8 +0x86E9 +0x86EA +0x86EB +0x86EC +0x86ED +0x86F5 +0x86F6 +0x86F7 +0x86F8 +0x86F9 +0x86FA +0x86FB +0x86FE +0x8700 +0x8701 +0x8702 +0x8703 +0x8704 +0x8705 +0x8706 +0x8707 +0x8708 +0x8709 +0x870A +0x870B +0x870C +0x870D +0x870E +0x8711 +0x8712 +0x8713 +0x8718 +0x8719 +0x871A +0x871B +0x871C +0x871E +0x8720 +0x8721 +0x8722 +0x8723 +0x8724 +0x8725 +0x8726 +0x8727 +0x8728 +0x8729 +0x872A +0x872C +0x872D +0x872E +0x8730 +0x8731 +0x8732 +0x8733 +0x8734 +0x8735 +0x8737 +0x8738 +0x873A +0x873B +0x873C +0x873E +0x873F +0x8740 +0x8741 +0x8742 +0x8743 +0x8746 +0x874C +0x874D +0x874E +0x874F +0x8750 +0x8751 +0x8752 +0x8753 +0x8754 +0x8755 +0x8756 +0x8757 +0x8758 +0x8759 +0x875A +0x875B +0x875C +0x875D +0x875E +0x875F +0x8760 +0x8761 +0x8762 +0x8763 +0x8764 +0x8765 +0x8766 +0x8767 +0x8768 +0x8769 +0x876A +0x876B +0x876C +0x876D +0x876E +0x876F +0x8773 +0x8774 +0x8775 +0x8776 +0x8777 +0x8778 +0x8779 +0x877A +0x877B +0x8781 +0x8782 +0x8783 +0x8784 +0x8785 +0x8787 +0x8788 +0x8789 +0x878D +0x878F +0x8790 +0x8791 +0x8792 +0x8793 +0x8794 +0x8796 +0x8797 +0x8798 +0x879A +0x879B +0x879C +0x879D +0x879E +0x879F +0x87A2 +0x87A3 +0x87A4 +0x87AA +0x87AB +0x87AC +0x87AD +0x87AE +0x87AF +0x87B0 +0x87B2 +0x87B3 +0x87B4 +0x87B5 +0x87B6 +0x87B7 +0x87B8 +0x87B9 +0x87BA +0x87BB +0x87BC +0x87BD +0x87BE +0x87BF +0x87C0 +0x87C2 +0x87C3 +0x87C4 +0x87C5 +0x87C6 +0x87C8 +0x87C9 +0x87CA +0x87CB +0x87CC +0x87D1 +0x87D2 +0x87D3 +0x87D4 +0x87D7 +0x87D8 +0x87D9 +0x87DB +0x87DC +0x87DD +0x87DE +0x87DF +0x87E0 +0x87E1 +0x87E2 +0x87E3 +0x87E4 +0x87E5 +0x87E6 +0x87E7 +0x87E8 +0x87EA +0x87EB +0x87EC +0x87ED +0x87EF +0x87F2 +0x87F3 +0x87F4 +0x87F6 +0x87F7 +0x87F9 +0x87FA +0x87FB +0x87FC +0x87FE +0x87FF +0x8800 +0x8801 +0x8802 +0x8803 +0x8805 +0x8806 +0x8808 +0x8809 +0x880A +0x880B +0x880C +0x880D +0x8810 +0x8811 +0x8813 +0x8814 +0x8815 +0x8816 +0x8817 +0x8819 +0x881B +0x881C +0x881D +0x881F +0x8820 +0x8821 +0x8822 +0x8823 +0x8824 +0x8825 +0x8826 +0x8828 +0x8829 +0x882A +0x882B +0x882C +0x882E +0x882F +0x8830 +0x8831 +0x8832 +0x8833 +0x8835 +0x8836 +0x8837 +0x8838 +0x8839 +0x883B +0x883C +0x883D +0x883E +0x883F +0x8840 +0x8841 +0x8843 +0x8844 +0x8848 +0x884A +0x884B +0x884C +0x884D +0x884E +0x8852 +0x8853 +0x8855 +0x8856 +0x8857 +0x8859 +0x885A +0x885B +0x885D +0x8861 +0x8862 +0x8863 +0x8867 +0x8868 +0x8869 +0x886A +0x886B +0x886D +0x886F +0x8870 +0x8871 +0x8872 +0x8874 +0x8875 +0x8876 +0x8877 +0x8879 +0x887C +0x887D +0x887E +0x887F +0x8880 +0x8881 +0x8882 +0x8883 +0x8888 +0x8889 +0x888B +0x888C +0x888D +0x888E +0x8891 +0x8892 +0x8893 +0x8895 +0x8896 +0x8897 +0x8898 +0x8899 +0x889A +0x889B +0x889E +0x889F +0x88A1 +0x88A2 +0x88A4 +0x88A7 +0x88A8 +0x88AA +0x88AB +0x88AC +0x88B1 +0x88B2 +0x88B6 +0x88B7 +0x88B8 +0x88B9 +0x88BA +0x88BC +0x88BD +0x88BE +0x88C0 +0x88C1 +0x88C2 +0x88C9 +0x88CA +0x88CB +0x88CC +0x88CD +0x88CE +0x88D0 +0x88D2 +0x88D4 +0x88D5 +0x88D6 +0x88D7 +0x88D8 +0x88D9 +0x88DA +0x88DB +0x88DC +0x88DD +0x88DE +0x88DF +0x88E1 +0x88E7 +0x88E8 +0x88EB +0x88EC +0x88EE +0x88EF +0x88F0 +0x88F1 +0x88F2 +0x88F3 +0x88F4 +0x88F6 +0x88F7 +0x88F8 +0x88F9 +0x88FA +0x88FB +0x88FC +0x88FD +0x88FE +0x8901 +0x8902 +0x8905 +0x8906 +0x8907 +0x8909 +0x890A +0x890B +0x890C +0x890E +0x8910 +0x8911 +0x8912 +0x8913 +0x8914 +0x8915 +0x8916 +0x8917 +0x8918 +0x8919 +0x891A +0x891E +0x891F +0x8921 +0x8922 +0x8923 +0x8925 +0x8926 +0x8927 +0x8929 +0x892A +0x892B +0x892C +0x892D +0x892E +0x892F +0x8930 +0x8931 +0x8932 +0x8933 +0x8935 +0x8936 +0x8937 +0x8938 +0x893B +0x893C +0x893D +0x893E +0x8941 +0x8942 +0x8944 +0x8946 +0x8949 +0x894B +0x894C +0x894F +0x8950 +0x8951 +0x8952 +0x8953 +0x8956 +0x8957 +0x8958 +0x8959 +0x895A +0x895B +0x895C +0x895D +0x895E +0x895F +0x8960 +0x8961 +0x8962 +0x8963 +0x8964 +0x8966 +0x8969 +0x896A +0x896B +0x896C +0x896D +0x896E +0x896F +0x8971 +0x8972 +0x8973 +0x8974 +0x8976 +0x8979 +0x897A +0x897B +0x897C +0x897E +0x897F +0x8981 +0x8982 +0x8983 +0x8985 +0x8986 +0x8988 +0x898B +0x898F +0x8993 +0x8995 +0x8996 +0x8997 +0x8998 +0x899B +0x899C +0x899D +0x899E +0x899F +0x89A1 +0x89A2 +0x89A3 +0x89A4 +0x89A6 +0x89AA +0x89AC +0x89AD +0x89AE +0x89AF +0x89B2 +0x89B6 +0x89B7 +0x89B9 +0x89BA +0x89BD +0x89BE +0x89BF +0x89C0 +0x89D2 +0x89D3 +0x89D4 +0x89D5 +0x89D6 +0x89D9 +0x89DA +0x89DB +0x89DC +0x89DD +0x89DF +0x89E0 +0x89E1 +0x89E2 +0x89E3 +0x89E4 +0x89E5 +0x89E6 +0x89E8 +0x89E9 +0x89EB +0x89EC +0x89ED +0x89F0 +0x89F1 +0x89F2 +0x89F3 +0x89F4 +0x89F6 +0x89F7 +0x89F8 +0x89FA +0x89FB +0x89FC +0x89FE +0x89FF +0x8A00 +0x8A02 +0x8A03 +0x8A04 +0x8A07 +0x8A08 +0x8A0A +0x8A0C +0x8A0E +0x8A0F +0x8A10 +0x8A11 +0x8A12 +0x8A13 +0x8A15 +0x8A16 +0x8A17 +0x8A18 +0x8A1B +0x8A1D +0x8A1E +0x8A1F +0x8A22 +0x8A23 +0x8A25 +0x8A27 +0x8A2A +0x8A2C +0x8A2D +0x8A30 +0x8A31 +0x8A34 +0x8A36 +0x8A39 +0x8A3A +0x8A3B +0x8A3C +0x8A3E +0x8A3F +0x8A40 +0x8A41 +0x8A44 +0x8A45 +0x8A46 +0x8A48 +0x8A4A +0x8A4C +0x8A4D +0x8A4E +0x8A4F +0x8A50 +0x8A51 +0x8A52 +0x8A54 +0x8A55 +0x8A56 +0x8A57 +0x8A58 +0x8A59 +0x8A5B +0x8A5E +0x8A60 +0x8A61 +0x8A62 +0x8A63 +0x8A66 +0x8A68 +0x8A69 +0x8A6B +0x8A6C +0x8A6D +0x8A6E +0x8A70 +0x8A71 +0x8A72 +0x8A73 +0x8A74 +0x8A75 +0x8A76 +0x8A77 +0x8A79 +0x8A7A +0x8A7B +0x8A7C +0x8A7F +0x8A81 +0x8A82 +0x8A83 +0x8A84 +0x8A85 +0x8A86 +0x8A87 +0x8A8B +0x8A8C +0x8A8D +0x8A8F +0x8A91 +0x8A92 +0x8A93 +0x8A95 +0x8A96 +0x8A98 +0x8A99 +0x8A9A +0x8A9E +0x8AA0 +0x8AA1 +0x8AA3 +0x8AA4 +0x8AA5 +0x8AA6 +0x8AA7 +0x8AA8 +0x8AAA +0x8AAB +0x8AB0 +0x8AB2 +0x8AB6 +0x8AB8 +0x8AB9 +0x8ABA +0x8ABB +0x8ABC +0x8ABD +0x8ABE +0x8ABF +0x8AC0 +0x8AC2 +0x8AC3 +0x8AC4 +0x8AC5 +0x8AC6 +0x8AC7 +0x8AC8 +0x8AC9 +0x8ACB +0x8ACD +0x8ACF +0x8AD1 +0x8AD2 +0x8AD3 +0x8AD4 +0x8AD5 +0x8AD6 +0x8AD7 +0x8AD8 +0x8AD9 +0x8ADB +0x8ADC +0x8ADD +0x8ADE +0x8ADF +0x8AE0 +0x8AE1 +0x8AE2 +0x8AE4 +0x8AE6 +0x8AE7 +0x8AE8 +0x8AEB +0x8AED +0x8AEE +0x8AEF +0x8AF0 +0x8AF1 +0x8AF2 +0x8AF3 +0x8AF4 +0x8AF5 +0x8AF6 +0x8AF7 +0x8AF8 +0x8AFA +0x8AFB +0x8AFC +0x8AFE +0x8AFF +0x8B00 +0x8B01 +0x8B02 +0x8B04 +0x8B05 +0x8B06 +0x8B07 +0x8B08 +0x8B0A +0x8B0B +0x8B0D +0x8B0E +0x8B0F +0x8B10 +0x8B11 +0x8B12 +0x8B13 +0x8B14 +0x8B15 +0x8B16 +0x8B17 +0x8B18 +0x8B19 +0x8B1A +0x8B1B +0x8B1C +0x8B1D +0x8B1E +0x8B20 +0x8B22 +0x8B23 +0x8B24 +0x8B25 +0x8B26 +0x8B27 +0x8B28 +0x8B2A +0x8B2B +0x8B2C +0x8B2E +0x8B2F +0x8B30 +0x8B31 +0x8B33 +0x8B35 +0x8B36 +0x8B37 +0x8B39 +0x8B3A +0x8B3B +0x8B3C +0x8B3D +0x8B3E +0x8B40 +0x8B41 +0x8B42 +0x8B45 +0x8B46 +0x8B47 +0x8B48 +0x8B49 +0x8B4A +0x8B4B +0x8B4E +0x8B4F +0x8B50 +0x8B51 +0x8B52 +0x8B53 +0x8B54 +0x8B55 +0x8B56 +0x8B57 +0x8B58 +0x8B59 +0x8B5A +0x8B5C +0x8B5D +0x8B5F +0x8B60 +0x8B63 +0x8B65 +0x8B66 +0x8B67 +0x8B68 +0x8B6A +0x8B6B +0x8B6C +0x8B6D +0x8B6F +0x8B70 +0x8B74 +0x8B77 +0x8B78 +0x8B79 +0x8B7A +0x8B7B +0x8B7D +0x8B7E +0x8B7F +0x8B80 +0x8B82 +0x8B84 +0x8B85 +0x8B86 +0x8B88 +0x8B8A +0x8B8B +0x8B8C +0x8B8E +0x8B92 +0x8B93 +0x8B94 +0x8B95 +0x8B96 +0x8B98 +0x8B99 +0x8B9A +0x8B9C +0x8B9E +0x8B9F +0x8C37 +0x8C39 +0x8C3B +0x8C3C +0x8C3D +0x8C3E +0x8C3F +0x8C41 +0x8C42 +0x8C43 +0x8C45 +0x8C46 +0x8C47 +0x8C48 +0x8C49 +0x8C4A +0x8C4B +0x8C4C +0x8C4D +0x8C4E +0x8C4F +0x8C50 +0x8C54 +0x8C55 +0x8C56 +0x8C57 +0x8C5A +0x8C5C +0x8C5D +0x8C5F +0x8C61 +0x8C62 +0x8C64 +0x8C65 +0x8C66 +0x8C68 +0x8C69 +0x8C6A +0x8C6B +0x8C6C +0x8C6D +0x8C6F +0x8C70 +0x8C71 +0x8C72 +0x8C73 +0x8C75 +0x8C76 +0x8C77 +0x8C78 +0x8C79 +0x8C7A +0x8C7B +0x8C7D +0x8C80 +0x8C81 +0x8C82 +0x8C84 +0x8C85 +0x8C86 +0x8C89 +0x8C8A +0x8C8C +0x8C8D +0x8C8F +0x8C90 +0x8C91 +0x8C92 +0x8C93 +0x8C94 +0x8C95 +0x8C97 +0x8C98 +0x8C99 +0x8C9A +0x8C9C +0x8C9D +0x8C9E +0x8CA0 +0x8CA1 +0x8CA2 +0x8CA3 +0x8CA4 +0x8CA5 +0x8CA7 +0x8CA8 +0x8CA9 +0x8CAA +0x8CAB +0x8CAC +0x8CAF +0x8CB0 +0x8CB2 +0x8CB3 +0x8CB4 +0x8CB5 +0x8CB6 +0x8CB7 +0x8CB8 +0x8CB9 +0x8CBA +0x8CBB +0x8CBC +0x8CBD +0x8CBE +0x8CBF +0x8CC0 +0x8CC1 +0x8CC2 +0x8CC3 +0x8CC4 +0x8CC5 +0x8CC7 +0x8CC8 +0x8CCA +0x8CCC +0x8CCF +0x8CD1 +0x8CD2 +0x8CD3 +0x8CD5 +0x8CD7 +0x8CD9 +0x8CDA +0x8CDC +0x8CDD +0x8CDE +0x8CDF +0x8CE0 +0x8CE1 +0x8CE2 +0x8CE3 +0x8CE4 +0x8CE5 +0x8CE6 +0x8CE7 +0x8CE8 +0x8CEA +0x8CEC +0x8CED +0x8CEE +0x8CF0 +0x8CF1 +0x8CF3 +0x8CF4 +0x8CF5 +0x8CF8 +0x8CF9 +0x8CFA +0x8CFB +0x8CFC +0x8CFD +0x8CFE +0x8D00 +0x8D02 +0x8D04 +0x8D05 +0x8D06 +0x8D07 +0x8D08 +0x8D09 +0x8D0A +0x8D0D +0x8D0F +0x8D10 +0x8D13 +0x8D14 +0x8D15 +0x8D16 +0x8D17 +0x8D19 +0x8D1B +0x8D64 +0x8D66 +0x8D67 +0x8D68 +0x8D69 +0x8D6B +0x8D6C +0x8D6D +0x8D6E +0x8D6F +0x8D70 +0x8D72 +0x8D73 +0x8D74 +0x8D76 +0x8D77 +0x8D78 +0x8D79 +0x8D7B +0x8D7D +0x8D80 +0x8D81 +0x8D84 +0x8D85 +0x8D89 +0x8D8A +0x8D8C +0x8D8D +0x8D8E +0x8D8F +0x8D90 +0x8D91 +0x8D92 +0x8D93 +0x8D94 +0x8D95 +0x8D96 +0x8D99 +0x8D9B +0x8D9C +0x8D9F +0x8DA0 +0x8DA1 +0x8DA3 +0x8DA5 +0x8DA7 +0x8DA8 +0x8DAA +0x8DAB +0x8DAC +0x8DAD +0x8DAE +0x8DAF +0x8DB2 +0x8DB3 +0x8DB4 +0x8DB5 +0x8DB6 +0x8DB7 +0x8DB9 +0x8DBA +0x8DBC +0x8DBE +0x8DBF +0x8DC1 +0x8DC2 +0x8DC5 +0x8DC6 +0x8DC7 +0x8DC8 +0x8DCB +0x8DCC +0x8DCD +0x8DCE +0x8DCF +0x8DD0 +0x8DD1 +0x8DD3 +0x8DD5 +0x8DD6 +0x8DD7 +0x8DD8 +0x8DD9 +0x8DDA +0x8DDB +0x8DDC +0x8DDD +0x8DDF +0x8DE0 +0x8DE1 +0x8DE2 +0x8DE3 +0x8DE4 +0x8DE6 +0x8DE7 +0x8DE8 +0x8DE9 +0x8DEA +0x8DEB +0x8DEC +0x8DEE +0x8DEF +0x8DF0 +0x8DF1 +0x8DF2 +0x8DF3 +0x8DF4 +0x8DFA +0x8DFC +0x8DFD +0x8DFE +0x8DFF +0x8E00 +0x8E02 +0x8E03 +0x8E04 +0x8E05 +0x8E06 +0x8E07 +0x8E09 +0x8E0A +0x8E0D +0x8E0F +0x8E10 +0x8E11 +0x8E12 +0x8E13 +0x8E14 +0x8E15 +0x8E16 +0x8E17 +0x8E18 +0x8E19 +0x8E1A +0x8E1B +0x8E1C +0x8E1D +0x8E1E +0x8E1F +0x8E20 +0x8E21 +0x8E22 +0x8E23 +0x8E24 +0x8E25 +0x8E26 +0x8E27 +0x8E29 +0x8E2B +0x8E2E +0x8E30 +0x8E31 +0x8E33 +0x8E34 +0x8E35 +0x8E36 +0x8E38 +0x8E39 +0x8E3C +0x8E3D +0x8E3E +0x8E3F +0x8E40 +0x8E41 +0x8E42 +0x8E44 +0x8E45 +0x8E47 +0x8E48 +0x8E49 +0x8E4A +0x8E4B +0x8E4C +0x8E4D +0x8E4E +0x8E50 +0x8E53 +0x8E54 +0x8E55 +0x8E56 +0x8E57 +0x8E59 +0x8E5A +0x8E5B +0x8E5C +0x8E5D +0x8E5E +0x8E5F +0x8E60 +0x8E61 +0x8E62 +0x8E63 +0x8E64 +0x8E65 +0x8E66 +0x8E67 +0x8E69 +0x8E6A +0x8E6C +0x8E6D +0x8E6F +0x8E72 +0x8E73 +0x8E74 +0x8E76 +0x8E78 +0x8E7A +0x8E7B +0x8E7C +0x8E81 +0x8E82 +0x8E84 +0x8E85 +0x8E86 +0x8E87 +0x8E88 +0x8E89 +0x8E8A +0x8E8B +0x8E8C +0x8E8D +0x8E8E +0x8E90 +0x8E91 +0x8E92 +0x8E93 +0x8E94 +0x8E95 +0x8E96 +0x8E97 +0x8E98 +0x8E9A +0x8E9D +0x8E9E +0x8E9F +0x8EA0 +0x8EA1 +0x8EA3 +0x8EA4 +0x8EA5 +0x8EA6 +0x8EA8 +0x8EA9 +0x8EAA +0x8EAB +0x8EAC +0x8EB2 +0x8EBA +0x8EBD +0x8EC0 +0x8EC2 +0x8EC9 +0x8ECA +0x8ECB +0x8ECC +0x8ECD +0x8ECF +0x8ED1 +0x8ED2 +0x8ED3 +0x8ED4 +0x8ED7 +0x8ED8 +0x8EDB +0x8EDC +0x8EDD +0x8EDE +0x8EDF +0x8EE0 +0x8EE1 +0x8EE5 +0x8EE6 +0x8EE7 +0x8EE8 +0x8EE9 +0x8EEB +0x8EEC +0x8EEE +0x8EEF +0x8EF1 +0x8EF4 +0x8EF5 +0x8EF6 +0x8EF7 +0x8EF8 +0x8EF9 +0x8EFA +0x8EFB +0x8EFC +0x8EFE +0x8EFF +0x8F00 +0x8F01 +0x8F02 +0x8F03 +0x8F05 +0x8F06 +0x8F07 +0x8F08 +0x8F09 +0x8F0A +0x8F0B +0x8F0D +0x8F0E +0x8F10 +0x8F11 +0x8F12 +0x8F13 +0x8F14 +0x8F15 +0x8F16 +0x8F17 +0x8F18 +0x8F1A +0x8F1B +0x8F1C +0x8F1D +0x8F1E +0x8F1F +0x8F20 +0x8F23 +0x8F24 +0x8F25 +0x8F26 +0x8F29 +0x8F2A +0x8F2C +0x8F2E +0x8F2F +0x8F32 +0x8F33 +0x8F34 +0x8F35 +0x8F36 +0x8F37 +0x8F38 +0x8F39 +0x8F3B +0x8F3E +0x8F3F +0x8F40 +0x8F42 +0x8F43 +0x8F44 +0x8F45 +0x8F46 +0x8F47 +0x8F48 +0x8F49 +0x8F4B +0x8F4D +0x8F4E +0x8F4F +0x8F50 +0x8F51 +0x8F52 +0x8F53 +0x8F54 +0x8F55 +0x8F56 +0x8F57 +0x8F58 +0x8F59 +0x8F5A +0x8F5B +0x8F5D +0x8F5E +0x8F5F +0x8F60 +0x8F61 +0x8F62 +0x8F63 +0x8F64 +0x8F9B +0x8F9C +0x8F9F +0x8FA3 +0x8FA6 +0x8FA8 +0x8FAD +0x8FAE +0x8FAF +0x8FB0 +0x8FB1 +0x8FB2 +0x8FB4 +0x8FBF +0x8FC2 +0x8FC4 +0x8FC5 +0x8FC6 +0x8FC9 +0x8FCB +0x8FCD +0x8FCE +0x8FD1 +0x8FD2 +0x8FD3 +0x8FD4 +0x8FD5 +0x8FD6 +0x8FD7 +0x8FE0 +0x8FE1 +0x8FE2 +0x8FE3 +0x8FE4 +0x8FE5 +0x8FE6 +0x8FE8 +0x8FEA +0x8FEB +0x8FED +0x8FEE +0x8FF0 +0x8FF4 +0x8FF5 +0x8FF6 +0x8FF7 +0x8FF8 +0x8FFA +0x8FFB +0x8FFC +0x8FFD +0x8FFE +0x8FFF +0x9000 +0x9001 +0x9002 +0x9003 +0x9004 +0x9005 +0x9006 +0x900B +0x900C +0x900D +0x900F +0x9010 +0x9011 +0x9014 +0x9015 +0x9016 +0x9017 +0x9019 +0x901A +0x901B +0x901C +0x901D +0x901E +0x901F +0x9020 +0x9021 +0x9022 +0x9023 +0x9024 +0x902D +0x902E +0x902F +0x9031 +0x9032 +0x9034 +0x9035 +0x9036 +0x9038 +0x903C +0x903D +0x903E +0x903F +0x9041 +0x9042 +0x9044 +0x9047 +0x9049 +0x904A +0x904B +0x904D +0x904E +0x904F +0x9050 +0x9051 +0x9052 +0x9053 +0x9054 +0x9055 +0x9058 +0x9059 +0x905B +0x905C +0x905D +0x905E +0x9060 +0x9062 +0x9063 +0x9067 +0x9068 +0x9069 +0x906B +0x906D +0x906E +0x906F +0x9070 +0x9072 +0x9073 +0x9074 +0x9075 +0x9076 +0x9077 +0x9078 +0x9079 +0x907A +0x907B +0x907C +0x907D +0x907E +0x907F +0x9080 +0x9081 +0x9082 +0x9083 +0x9084 +0x9085 +0x9086 +0x9087 +0x9088 +0x908A +0x908B +0x908D +0x908F +0x9090 +0x9091 +0x9094 +0x9095 +0x9097 +0x9098 +0x9099 +0x909B +0x909E +0x909F +0x90A0 +0x90A1 +0x90A2 +0x90A3 +0x90A5 +0x90A6 +0x90A7 +0x90AA +0x90AF +0x90B0 +0x90B1 +0x90B2 +0x90B3 +0x90B4 +0x90B5 +0x90B6 +0x90B8 +0x90BD +0x90BE +0x90BF +0x90C1 +0x90C3 +0x90C5 +0x90C7 +0x90C8 +0x90CA +0x90CB +0x90CE +0x90D4 +0x90D5 +0x90D6 +0x90D7 +0x90D8 +0x90D9 +0x90DA +0x90DB +0x90DC +0x90DD +0x90DF +0x90E0 +0x90E1 +0x90E2 +0x90E3 +0x90E4 +0x90E5 +0x90E8 +0x90E9 +0x90EA +0x90EB +0x90EC +0x90ED +0x90EF +0x90F0 +0x90F1 +0x90F2 +0x90F3 +0x90F4 +0x90F5 +0x90F9 +0x90FA +0x90FB +0x90FC +0x90FD +0x90FE +0x90FF +0x9100 +0x9101 +0x9102 +0x9103 +0x9104 +0x9105 +0x9106 +0x9107 +0x9108 +0x9109 +0x910B +0x910D +0x910E +0x910F +0x9110 +0x9111 +0x9112 +0x9114 +0x9116 +0x9117 +0x9118 +0x9119 +0x911A +0x911B +0x911C +0x911D +0x911E +0x911F +0x9120 +0x9121 +0x9122 +0x9123 +0x9124 +0x9126 +0x9127 +0x9128 +0x9129 +0x912A +0x912B +0x912C +0x912D +0x912E +0x912F +0x9130 +0x9131 +0x9132 +0x9133 +0x9134 +0x9135 +0x9136 +0x9138 +0x9139 +0x913A +0x913B +0x913E +0x913F +0x9140 +0x9141 +0x9143 +0x9144 +0x9145 +0x9146 +0x9147 +0x9148 +0x9149 +0x914A +0x914B +0x914C +0x914D +0x914E +0x914F +0x9150 +0x9152 +0x9153 +0x9155 +0x9156 +0x9157 +0x9158 +0x915A +0x915F +0x9160 +0x9161 +0x9162 +0x9163 +0x9164 +0x9165 +0x9168 +0x9169 +0x916A +0x916C +0x916E +0x916F +0x9172 +0x9173 +0x9174 +0x9175 +0x9177 +0x9178 +0x9179 +0x917A +0x9180 +0x9181 +0x9182 +0x9183 +0x9184 +0x9185 +0x9186 +0x9187 +0x9189 +0x918A +0x918B +0x918D +0x918F +0x9190 +0x9191 +0x9192 +0x9193 +0x9199 +0x919A +0x919B +0x919C +0x919D +0x919E +0x919F +0x91A0 +0x91A1 +0x91A2 +0x91A3 +0x91A5 +0x91A7 +0x91A8 +0x91AA +0x91AB +0x91AC +0x91AD +0x91AE +0x91AF +0x91B0 +0x91B1 +0x91B2 +0x91B3 +0x91B4 +0x91B5 +0x91B7 +0x91B9 +0x91BA +0x91BC +0x91BD +0x91BE +0x91C0 +0x91C1 +0x91C2 +0x91C3 +0x91C5 +0x91C6 +0x91C7 +0x91C9 +0x91CB +0x91CC +0x91CD +0x91CE +0x91CF +0x91D0 +0x91D1 +0x91D3 +0x91D4 +0x91D5 +0x91D7 +0x91D8 +0x91D9 +0x91DA +0x91DC +0x91DD +0x91E2 +0x91E3 +0x91E4 +0x91E6 +0x91E7 +0x91E8 +0x91E9 +0x91EA +0x91EB +0x91EC +0x91ED +0x91EE +0x91F1 +0x91F3 +0x91F4 +0x91F5 +0x91F7 +0x91F8 +0x91F9 +0x91FD +0x91FF +0x9200 +0x9201 +0x9202 +0x9203 +0x9204 +0x9205 +0x9206 +0x9207 +0x9209 +0x920A +0x920C +0x920D +0x920F +0x9210 +0x9211 +0x9212 +0x9214 +0x9215 +0x9216 +0x9217 +0x9219 +0x921A +0x921C +0x921E +0x9223 +0x9224 +0x9225 +0x9226 +0x9227 +0x922D +0x922E +0x9230 +0x9231 +0x9232 +0x9233 +0x9234 +0x9236 +0x9237 +0x9238 +0x9239 +0x923A +0x923D +0x923E +0x923F +0x9240 +0x9245 +0x9246 +0x9248 +0x9249 +0x924A +0x924B +0x924C +0x924D +0x924E +0x924F +0x9250 +0x9251 +0x9252 +0x9253 +0x9254 +0x9256 +0x9257 +0x925A +0x925B +0x925E +0x9260 +0x9261 +0x9263 +0x9264 +0x9265 +0x9266 +0x9267 +0x926C +0x926D +0x926F +0x9270 +0x9272 +0x9276 +0x9278 +0x9279 +0x927A +0x927B +0x927C +0x927D +0x927E +0x927F +0x9280 +0x9282 +0x9283 +0x9285 +0x9286 +0x9287 +0x9288 +0x928A +0x928B +0x928C +0x928D +0x928E +0x9291 +0x9293 +0x9294 +0x9295 +0x9296 +0x9297 +0x9298 +0x9299 +0x929A +0x929B +0x929C +0x929D +0x92A0 +0x92A1 +0x92A2 +0x92A3 +0x92A4 +0x92A5 +0x92A6 +0x92A7 +0x92A8 +0x92A9 +0x92AA +0x92AB +0x92AC +0x92B2 +0x92B3 +0x92B4 +0x92B5 +0x92B6 +0x92B7 +0x92BB +0x92BC +0x92C0 +0x92C1 +0x92C2 +0x92C3 +0x92C4 +0x92C5 +0x92C6 +0x92C7 +0x92C8 +0x92C9 +0x92CA +0x92CB +0x92CC +0x92CD +0x92CE +0x92CF +0x92D0 +0x92D1 +0x92D2 +0x92D3 +0x92D5 +0x92D7 +0x92D8 +0x92D9 +0x92DD +0x92DE +0x92DF +0x92E0 +0x92E1 +0x92E4 +0x92E6 +0x92E7 +0x92E8 +0x92E9 +0x92EA +0x92EE +0x92EF +0x92F0 +0x92F1 +0x92F7 +0x92F8 +0x92F9 +0x92FA +0x92FB +0x92FC +0x92FE +0x92FF +0x9300 +0x9301 +0x9302 +0x9304 +0x9306 +0x9308 +0x9309 +0x930B +0x930C +0x930D +0x930E +0x930F +0x9310 +0x9312 +0x9313 +0x9314 +0x9315 +0x9316 +0x9318 +0x9319 +0x931A +0x931B +0x931D +0x931E +0x931F +0x9320 +0x9321 +0x9322 +0x9323 +0x9324 +0x9325 +0x9326 +0x9327 +0x9328 +0x9329 +0x932A +0x932B +0x932D +0x932E +0x932F +0x9333 +0x9334 +0x9335 +0x9336 +0x9338 +0x9339 +0x933C +0x9346 +0x9347 +0x9349 +0x934A +0x934B +0x934C +0x934D +0x934E +0x934F +0x9350 +0x9351 +0x9352 +0x9354 +0x9355 +0x9356 +0x9357 +0x9358 +0x9359 +0x935A +0x935B +0x935C +0x935E +0x9360 +0x9361 +0x9363 +0x9364 +0x9365 +0x9367 +0x936A +0x936C +0x936D +0x9370 +0x9371 +0x9375 +0x9376 +0x9377 +0x9379 +0x937A +0x937B +0x937C +0x937E +0x9380 +0x9382 +0x9383 +0x9388 +0x9389 +0x938A +0x938C +0x938D +0x938E +0x938F +0x9391 +0x9392 +0x9394 +0x9395 +0x9396 +0x9397 +0x9398 +0x9399 +0x939A +0x939B +0x939D +0x939E +0x939F +0x93A1 +0x93A2 +0x93A3 +0x93A4 +0x93A5 +0x93A6 +0x93A7 +0x93A8 +0x93A9 +0x93AA +0x93AC +0x93AE +0x93AF +0x93B0 +0x93B1 +0x93B2 +0x93B3 +0x93B4 +0x93B5 +0x93B7 +0x93C0 +0x93C2 +0x93C3 +0x93C4 +0x93C7 +0x93C8 +0x93CA +0x93CC +0x93CD +0x93CE +0x93CF +0x93D0 +0x93D1 +0x93D2 +0x93D4 +0x93D5 +0x93D6 +0x93D7 +0x93D8 +0x93D9 +0x93DA +0x93DC +0x93DD +0x93DE +0x93DF +0x93E1 +0x93E2 +0x93E3 +0x93E4 +0x93E6 +0x93E7 +0x93E8 +0x93EC +0x93EE +0x93F5 +0x93F6 +0x93F7 +0x93F8 +0x93F9 +0x93FA +0x93FB +0x93FC +0x93FD +0x93FE +0x93FF +0x9400 +0x9403 +0x9406 +0x9407 +0x9409 +0x940A +0x940B +0x940C +0x940D +0x940E +0x940F +0x9410 +0x9411 +0x9412 +0x9413 +0x9414 +0x9415 +0x9416 +0x9418 +0x9419 +0x9420 +0x9428 +0x9429 +0x942A +0x942B +0x942C +0x942E +0x9430 +0x9431 +0x9432 +0x9433 +0x9435 +0x9436 +0x9437 +0x9438 +0x9439 +0x943A +0x943B +0x943C +0x943D +0x943F +0x9440 +0x9444 +0x9445 +0x9446 +0x9447 +0x9448 +0x9449 +0x944A +0x944B +0x944C +0x944F +0x9450 +0x9451 +0x9452 +0x9455 +0x9457 +0x945D +0x945E +0x9460 +0x9462 +0x9463 +0x9464 +0x9468 +0x9469 +0x946A +0x946B +0x946D +0x946E +0x946F +0x9470 +0x9471 +0x9472 +0x9473 +0x9474 +0x9475 +0x9476 +0x9477 +0x9478 +0x947C +0x947D +0x947E +0x947F +0x9480 +0x9481 +0x9482 +0x9483 +0x9577 +0x957A +0x957B +0x957C +0x957D +0x9580 +0x9582 +0x9583 +0x9586 +0x9588 +0x9589 +0x958B +0x958C +0x958D +0x958E +0x958F +0x9590 +0x9591 +0x9592 +0x9593 +0x9594 +0x9598 +0x959B +0x959C +0x959E +0x959F +0x95A1 +0x95A3 +0x95A4 +0x95A5 +0x95A8 +0x95A9 +0x95AB +0x95AC +0x95AD +0x95AE +0x95B0 +0x95B1 +0x95B5 +0x95B6 +0x95B7 +0x95B9 +0x95BA +0x95BB +0x95BC +0x95BD +0x95BE +0x95BF +0x95C0 +0x95C3 +0x95C5 +0x95C6 +0x95C7 +0x95C8 +0x95C9 +0x95CA +0x95CB +0x95CC +0x95CD +0x95D0 +0x95D1 +0x95D2 +0x95D3 +0x95D4 +0x95D5 +0x95D6 +0x95DA +0x95DB +0x95DC +0x95DE +0x95DF +0x95E0 +0x95E1 +0x95E2 +0x95E3 +0x95E4 +0x95E5 +0x961C +0x961E +0x9620 +0x9621 +0x9622 +0x9623 +0x9624 +0x9628 +0x962A +0x962C +0x962D +0x962E +0x962F +0x9630 +0x9631 +0x9632 +0x9639 +0x963A +0x963B +0x963C +0x963D +0x963F +0x9640 +0x9642 +0x9643 +0x9644 +0x964A +0x964B +0x964C +0x964D +0x964E +0x964F +0x9650 +0x9651 +0x9653 +0x9654 +0x9658 +0x965B +0x965C +0x965D +0x965E +0x965F +0x9661 +0x9662 +0x9663 +0x9664 +0x966A +0x966B +0x966C +0x966D +0x966F +0x9670 +0x9671 +0x9672 +0x9673 +0x9674 +0x9675 +0x9676 +0x9677 +0x9678 +0x967C +0x967D +0x967E +0x9680 +0x9683 +0x9684 +0x9685 +0x9686 +0x9687 +0x9688 +0x9689 +0x968A +0x968B +0x968D +0x968E +0x9691 +0x9692 +0x9693 +0x9694 +0x9695 +0x9697 +0x9698 +0x9699 +0x969B +0x969C +0x969E +0x96A1 +0x96A2 +0x96A4 +0x96A7 +0x96A8 +0x96A9 +0x96AA +0x96AC +0x96AE +0x96B0 +0x96B1 +0x96B3 +0x96B4 +0x96B8 +0x96B9 +0x96BB +0x96BC +0x96BF +0x96C0 +0x96C1 +0x96C2 +0x96C3 +0x96C4 +0x96C5 +0x96C6 +0x96C7 +0x96C8 +0x96C9 +0x96CA +0x96CB +0x96CC +0x96CD +0x96CE +0x96D2 +0x96D3 +0x96D4 +0x96D5 +0x96D6 +0x96D7 +0x96D8 +0x96D9 +0x96DA +0x96DB +0x96DC +0x96DD +0x96DE +0x96DF +0x96E1 +0x96E2 +0x96E3 +0x96E5 +0x96E8 +0x96E9 +0x96EA +0x96EF +0x96F0 +0x96F1 +0x96F2 +0x96F5 +0x96F6 +0x96F7 +0x96F8 +0x96F9 +0x96FA +0x96FB +0x96FD +0x96FF +0x9700 +0x9702 +0x9704 +0x9705 +0x9706 +0x9707 +0x9708 +0x9709 +0x970B +0x970D +0x970E +0x970F +0x9710 +0x9711 +0x9712 +0x9713 +0x9716 +0x9718 +0x9719 +0x971C +0x971D +0x971E +0x971F +0x9720 +0x9722 +0x9723 +0x9724 +0x9725 +0x9726 +0x9727 +0x9728 +0x9729 +0x972A +0x972B +0x972C +0x972E +0x972F +0x9730 +0x9732 +0x9735 +0x9738 +0x9739 +0x973A +0x973D +0x973E +0x973F +0x9742 +0x9743 +0x9744 +0x9746 +0x9747 +0x9748 +0x9749 +0x974B +0x9752 +0x9756 +0x9758 +0x975A +0x975B +0x975C +0x975E +0x9760 +0x9761 +0x9762 +0x9766 +0x9768 +0x9769 +0x976A +0x976C +0x976E +0x9770 +0x9772 +0x9773 +0x9774 +0x9776 +0x9777 +0x9778 +0x977A +0x977B +0x977C +0x977D +0x977E +0x977F +0x9780 +0x9781 +0x9782 +0x9783 +0x9784 +0x9785 +0x9788 +0x978A +0x978B +0x978D +0x978E +0x978F +0x9794 +0x9797 +0x9798 +0x9799 +0x979A +0x979C +0x979D +0x979E +0x97A0 +0x97A1 +0x97A2 +0x97A3 +0x97A4 +0x97A5 +0x97A6 +0x97A8 +0x97AA +0x97AB +0x97AC +0x97AD +0x97AE +0x97B3 +0x97B6 +0x97B7 +0x97B9 +0x97BB +0x97BF +0x97C1 +0x97C3 +0x97C4 +0x97C5 +0x97C6 +0x97C7 +0x97C9 +0x97CB +0x97CC +0x97CD +0x97CE +0x97CF +0x97D0 +0x97D3 +0x97D4 +0x97D5 +0x97D6 +0x97D7 +0x97D8 +0x97D9 +0x97DC +0x97DD +0x97DE +0x97DF +0x97E1 +0x97E3 +0x97E5 +0x97ED +0x97F0 +0x97F1 +0x97F3 +0x97F6 +0x97F8 +0x97F9 +0x97FA +0x97FB +0x97FD +0x97FE +0x97FF +0x9800 +0x9801 +0x9802 +0x9803 +0x9804 +0x9805 +0x9806 +0x9807 +0x9808 +0x980A +0x980C +0x980D +0x980E +0x980F +0x9810 +0x9811 +0x9812 +0x9813 +0x9816 +0x9817 +0x9818 +0x981B +0x981C +0x981D +0x981E +0x9820 +0x9821 +0x9824 +0x9826 +0x9827 +0x9828 +0x9829 +0x982B +0x982D +0x982F +0x9830 +0x9832 +0x9835 +0x9837 +0x9838 +0x9839 +0x983B +0x9841 +0x9843 +0x9844 +0x9845 +0x9846 +0x9848 +0x9849 +0x984A +0x984C +0x984D +0x984E +0x984F +0x9850 +0x9851 +0x9852 +0x9853 +0x9857 +0x9858 +0x9859 +0x985B +0x985C +0x985D +0x985E +0x985F +0x9860 +0x9862 +0x9863 +0x9864 +0x9865 +0x9867 +0x9869 +0x986A +0x986B +0x986F +0x9870 +0x9871 +0x9872 +0x9873 +0x9874 +0x98A8 +0x98A9 +0x98AC +0x98AD +0x98AE +0x98AF +0x98B1 +0x98B2 +0x98B3 +0x98B6 +0x98B8 +0x98BA +0x98BB +0x98BC +0x98BD +0x98BE +0x98BF +0x98C0 +0x98C1 +0x98C2 +0x98C4 +0x98C6 +0x98C9 +0x98CB +0x98CC +0x98DB +0x98DF +0x98E2 +0x98E3 +0x98E5 +0x98E7 +0x98E9 +0x98EA +0x98EB +0x98ED +0x98EF +0x98F2 +0x98F4 +0x98F6 +0x98F9 +0x98FA +0x98FC +0x98FD +0x98FE +0x9900 +0x9902 +0x9903 +0x9905 +0x9907 +0x9908 +0x9909 +0x990A +0x990C +0x9910 +0x9911 +0x9912 +0x9913 +0x9914 +0x9915 +0x9916 +0x9917 +0x9918 +0x991A +0x991B +0x991E +0x991F +0x9921 +0x9924 +0x9925 +0x9927 +0x9928 +0x9929 +0x992A +0x992B +0x992C +0x992D +0x992E +0x992F +0x9930 +0x9931 +0x9932 +0x9933 +0x9935 +0x993A +0x993C +0x993D +0x993E +0x993F +0x9941 +0x9943 +0x9945 +0x9947 +0x9948 +0x9949 +0x994B +0x994C +0x994E +0x9950 +0x9951 +0x9952 +0x9953 +0x9954 +0x9955 +0x9956 +0x9957 +0x9958 +0x9959 +0x995B +0x995C +0x995E +0x995F +0x9961 +0x9996 +0x9997 +0x9998 +0x9999 +0x999C +0x999D +0x999E +0x99A1 +0x99A3 +0x99A5 +0x99A6 +0x99A7 +0x99A8 +0x99AB +0x99AC +0x99AD +0x99AE +0x99AF +0x99B0 +0x99B1 +0x99B2 +0x99B3 +0x99B4 +0x99B5 +0x99B9 +0x99BA +0x99BB +0x99BD +0x99C1 +0x99C2 +0x99C3 +0x99C7 +0x99C9 +0x99CB +0x99CC +0x99CD +0x99CE +0x99CF +0x99D0 +0x99D1 +0x99D2 +0x99D3 +0x99D4 +0x99D5 +0x99D6 +0x99D7 +0x99D8 +0x99D9 +0x99DB +0x99DC +0x99DD +0x99DF +0x99E2 +0x99E3 +0x99E4 +0x99E5 +0x99E7 +0x99E9 +0x99EA +0x99EC +0x99ED +0x99EE +0x99F0 +0x99F1 +0x99F4 +0x99F6 +0x99F7 +0x99F8 +0x99F9 +0x99FA +0x99FB +0x99FC +0x99FD +0x99FE +0x99FF +0x9A01 +0x9A02 +0x9A03 +0x9A04 +0x9A05 +0x9A06 +0x9A07 +0x9A09 +0x9A0A +0x9A0B +0x9A0D +0x9A0E +0x9A0F +0x9A11 +0x9A14 +0x9A15 +0x9A16 +0x9A19 +0x9A1A +0x9A1B +0x9A1C +0x9A1D +0x9A1E +0x9A20 +0x9A22 +0x9A23 +0x9A24 +0x9A25 +0x9A27 +0x9A29 +0x9A2A +0x9A2B +0x9A2C +0x9A2D +0x9A2E +0x9A30 +0x9A31 +0x9A32 +0x9A34 +0x9A35 +0x9A36 +0x9A37 +0x9A38 +0x9A39 +0x9A3A +0x9A3D +0x9A3E +0x9A3F +0x9A40 +0x9A41 +0x9A42 +0x9A43 +0x9A44 +0x9A45 +0x9A46 +0x9A48 +0x9A49 +0x9A4A +0x9A4C +0x9A4D +0x9A4E +0x9A4F +0x9A50 +0x9A52 +0x9A53 +0x9A54 +0x9A55 +0x9A56 +0x9A57 +0x9A59 +0x9A5A +0x9A5B +0x9A5E +0x9A5F +0x9A60 +0x9A62 +0x9A64 +0x9A65 +0x9A66 +0x9A67 +0x9A68 +0x9A69 +0x9A6A +0x9A6B +0x9AA8 +0x9AAB +0x9AAD +0x9AAF +0x9AB0 +0x9AB1 +0x9AB3 +0x9AB4 +0x9AB7 +0x9AB8 +0x9AB9 +0x9ABB +0x9ABC +0x9ABE +0x9ABF +0x9AC0 +0x9AC1 +0x9AC2 +0x9AC6 +0x9AC7 +0x9ACA +0x9ACD +0x9ACF +0x9AD0 +0x9AD1 +0x9AD2 +0x9AD3 +0x9AD4 +0x9AD5 +0x9AD6 +0x9AD8 +0x9ADC +0x9ADF +0x9AE1 +0x9AE3 +0x9AE6 +0x9AE7 +0x9AEB +0x9AEC +0x9AED +0x9AEE +0x9AEF +0x9AF1 +0x9AF2 +0x9AF3 +0x9AF6 +0x9AF7 +0x9AF9 +0x9AFA +0x9AFB +0x9AFC +0x9AFD +0x9AFE +0x9B01 +0x9B03 +0x9B04 +0x9B05 +0x9B06 +0x9B08 +0x9B0A +0x9B0B +0x9B0C +0x9B0D +0x9B0E +0x9B10 +0x9B11 +0x9B12 +0x9B15 +0x9B16 +0x9B17 +0x9B18 +0x9B19 +0x9B1A +0x9B1E +0x9B1F +0x9B20 +0x9B22 +0x9B23 +0x9B24 +0x9B25 +0x9B27 +0x9B28 +0x9B29 +0x9B2B +0x9B2E +0x9B2F +0x9B31 +0x9B32 +0x9B33 +0x9B35 +0x9B37 +0x9B3A +0x9B3B +0x9B3C +0x9B3E +0x9B3F +0x9B41 +0x9B42 +0x9B43 +0x9B44 +0x9B45 +0x9B46 +0x9B48 +0x9B4A +0x9B4B +0x9B4C +0x9B4D +0x9B4E +0x9B4F +0x9B51 +0x9B52 +0x9B54 +0x9B55 +0x9B56 +0x9B58 +0x9B59 +0x9B5A +0x9B5B +0x9B5F +0x9B60 +0x9B61 +0x9B64 +0x9B66 +0x9B67 +0x9B68 +0x9B6C +0x9B6F +0x9B70 +0x9B71 +0x9B74 +0x9B75 +0x9B76 +0x9B77 +0x9B7A +0x9B7B +0x9B7C +0x9B7D +0x9B7E +0x9B80 +0x9B82 +0x9B85 +0x9B86 +0x9B87 +0x9B88 +0x9B90 +0x9B91 +0x9B92 +0x9B93 +0x9B95 +0x9B9A +0x9B9B +0x9B9E +0x9BA0 +0x9BA1 +0x9BA2 +0x9BA4 +0x9BA5 +0x9BA6 +0x9BA8 +0x9BAA +0x9BAB +0x9BAD +0x9BAE +0x9BAF +0x9BB5 +0x9BB6 +0x9BB8 +0x9BB9 +0x9BBD +0x9BBF +0x9BC0 +0x9BC1 +0x9BC3 +0x9BC4 +0x9BC6 +0x9BC7 +0x9BC8 +0x9BC9 +0x9BCA +0x9BD3 +0x9BD4 +0x9BD5 +0x9BD6 +0x9BD7 +0x9BD9 +0x9BDA +0x9BDB +0x9BDC +0x9BDE +0x9BE0 +0x9BE1 +0x9BE2 +0x9BE4 +0x9BE5 +0x9BE6 +0x9BE7 +0x9BE8 +0x9BEA +0x9BEB +0x9BEC +0x9BF0 +0x9BF7 +0x9BF8 +0x9BFD +0x9C05 +0x9C06 +0x9C07 +0x9C08 +0x9C09 +0x9C0B +0x9C0D +0x9C0E +0x9C12 +0x9C13 +0x9C14 +0x9C17 +0x9C1C +0x9C1D +0x9C21 +0x9C23 +0x9C24 +0x9C25 +0x9C28 +0x9C29 +0x9C2B +0x9C2C +0x9C2D +0x9C31 +0x9C32 +0x9C33 +0x9C34 +0x9C36 +0x9C37 +0x9C39 +0x9C3B +0x9C3C +0x9C3D +0x9C3E +0x9C3F +0x9C40 +0x9C41 +0x9C44 +0x9C46 +0x9C48 +0x9C49 +0x9C4A +0x9C4B +0x9C4C +0x9C4D +0x9C4E +0x9C50 +0x9C52 +0x9C54 +0x9C55 +0x9C56 +0x9C57 +0x9C58 +0x9C59 +0x9C5E +0x9C5F +0x9C60 +0x9C62 +0x9C63 +0x9C66 +0x9C67 +0x9C68 +0x9C6D +0x9C6E +0x9C71 +0x9C73 +0x9C74 +0x9C75 +0x9C77 +0x9C78 +0x9C79 +0x9C7A +0x9CE5 +0x9CE6 +0x9CE7 +0x9CE9 +0x9CEA +0x9CED +0x9CF1 +0x9CF2 +0x9CF3 +0x9CF4 +0x9CF5 +0x9CF6 +0x9CF7 +0x9CF9 +0x9CFA +0x9CFB +0x9CFC +0x9CFD +0x9CFF +0x9D00 +0x9D03 +0x9D04 +0x9D05 +0x9D06 +0x9D07 +0x9D08 +0x9D09 +0x9D10 +0x9D12 +0x9D14 +0x9D15 +0x9D17 +0x9D18 +0x9D19 +0x9D1B +0x9D1D +0x9D1E +0x9D1F +0x9D20 +0x9D22 +0x9D23 +0x9D25 +0x9D26 +0x9D28 +0x9D29 +0x9D2D +0x9D2E +0x9D2F +0x9D30 +0x9D31 +0x9D33 +0x9D36 +0x9D37 +0x9D38 +0x9D3B +0x9D3D +0x9D3E +0x9D3F +0x9D40 +0x9D41 +0x9D42 +0x9D43 +0x9D45 +0x9D4A +0x9D4B +0x9D4C +0x9D4F +0x9D51 +0x9D52 +0x9D53 +0x9D54 +0x9D56 +0x9D57 +0x9D58 +0x9D59 +0x9D5A +0x9D5B +0x9D5C +0x9D5D +0x9D5F +0x9D60 +0x9D61 +0x9D67 +0x9D68 +0x9D69 +0x9D6A +0x9D6B +0x9D6C +0x9D6F +0x9D70 +0x9D71 +0x9D72 +0x9D73 +0x9D74 +0x9D75 +0x9D77 +0x9D78 +0x9D79 +0x9D7B +0x9D7D +0x9D7F +0x9D80 +0x9D81 +0x9D82 +0x9D84 +0x9D85 +0x9D86 +0x9D87 +0x9D88 +0x9D89 +0x9D8A +0x9D8B +0x9D8C +0x9D90 +0x9D92 +0x9D94 +0x9D96 +0x9D97 +0x9D98 +0x9D99 +0x9D9A +0x9D9B +0x9D9C +0x9D9D +0x9D9E +0x9D9F +0x9DA0 +0x9DA1 +0x9DA2 +0x9DA3 +0x9DA4 +0x9DA6 +0x9DA7 +0x9DA8 +0x9DA9 +0x9DAA +0x9DAC +0x9DAD +0x9DAF +0x9DB1 +0x9DB2 +0x9DB3 +0x9DB4 +0x9DB5 +0x9DB6 +0x9DB7 +0x9DB8 +0x9DB9 +0x9DBA +0x9DBB +0x9DBC +0x9DBE +0x9DBF +0x9DC1 +0x9DC2 +0x9DC3 +0x9DC5 +0x9DC7 +0x9DC8 +0x9DCA +0x9DCB +0x9DCC +0x9DCD +0x9DCE +0x9DCF +0x9DD0 +0x9DD1 +0x9DD2 +0x9DD3 +0x9DD5 +0x9DD6 +0x9DD7 +0x9DD8 +0x9DD9 +0x9DDA +0x9DDB +0x9DDC +0x9DDD +0x9DDE +0x9DDF +0x9DE1 +0x9DE2 +0x9DE3 +0x9DE4 +0x9DE5 +0x9DE6 +0x9DE8 +0x9DE9 +0x9DEB +0x9DEC +0x9DED +0x9DEE +0x9DEF +0x9DF0 +0x9DF2 +0x9DF3 +0x9DF4 +0x9DF5 +0x9DF6 +0x9DF7 +0x9DF8 +0x9DF9 +0x9DFA +0x9DFB +0x9DFD +0x9DFE +0x9DFF +0x9E00 +0x9E01 +0x9E02 +0x9E03 +0x9E04 +0x9E05 +0x9E06 +0x9E07 +0x9E09 +0x9E0B +0x9E0D +0x9E0F +0x9E10 +0x9E11 +0x9E12 +0x9E13 +0x9E14 +0x9E15 +0x9E17 +0x9E19 +0x9E1A +0x9E1B +0x9E1D +0x9E1E +0x9E75 +0x9E79 +0x9E7A +0x9E7C +0x9E7D +0x9E7F +0x9E80 +0x9E82 +0x9E83 +0x9E86 +0x9E87 +0x9E88 +0x9E89 +0x9E8A +0x9E8B +0x9E8C +0x9E8D +0x9E8E +0x9E91 +0x9E92 +0x9E93 +0x9E94 +0x9E97 +0x9E99 +0x9E9A +0x9E9B +0x9E9C +0x9E9D +0x9E9F +0x9EA0 +0x9EA1 +0x9EA4 +0x9EA5 +0x9EA7 +0x9EA9 +0x9EAD +0x9EAE +0x9EB0 +0x9EB4 +0x9EB5 +0x9EB6 +0x9EB7 +0x9EBB +0x9EBC +0x9EBE +0x9EC0 +0x9EC2 +0x9EC3 +0x9EC8 +0x9ECC +0x9ECD +0x9ECE +0x9ECF +0x9ED0 +0x9ED1 +0x9ED3 +0x9ED4 +0x9ED5 +0x9ED6 +0x9ED8 +0x9EDA +0x9EDB +0x9EDC +0x9EDD +0x9EDE +0x9EDF +0x9EE0 +0x9EE4 +0x9EE5 +0x9EE6 +0x9EE7 +0x9EE8 +0x9EEB +0x9EED +0x9EEE +0x9EEF +0x9EF0 +0x9EF2 +0x9EF3 +0x9EF4 +0x9EF5 +0x9EF6 +0x9EF7 +0x9EF9 +0x9EFA +0x9EFB +0x9EFC +0x9EFD +0x9EFF +0x9F00 +0x9F01 +0x9F06 +0x9F07 +0x9F09 +0x9F0A +0x9F0E +0x9F0F +0x9F10 +0x9F12 +0x9F13 +0x9F15 +0x9F16 +0x9F18 +0x9F19 +0x9F1A +0x9F1B +0x9F1C +0x9F1E +0x9F20 +0x9F22 +0x9F23 +0x9F24 +0x9F25 +0x9F28 +0x9F29 +0x9F2A +0x9F2B +0x9F2C +0x9F2D +0x9F2E +0x9F2F +0x9F30 +0x9F31 +0x9F32 +0x9F33 +0x9F34 +0x9F35 +0x9F36 +0x9F37 +0x9F38 +0x9F3B +0x9F3D +0x9F3E +0x9F40 +0x9F41 +0x9F42 +0x9F43 +0x9F46 +0x9F47 +0x9F48 +0x9F49 +0x9F4A +0x9F4B +0x9F4C +0x9F4D +0x9F4E +0x9F4F +0x9F52 +0x9F54 +0x9F55 +0x9F56 +0x9F57 +0x9F58 +0x9F59 +0x9F5B +0x9F5C +0x9F5D +0x9F5E +0x9F5F +0x9F60 +0x9F61 +0x9F63 +0x9F64 +0x9F65 +0x9F66 +0x9F67 +0x9F6A +0x9F6B +0x9F6C +0x9F6E +0x9F6F +0x9F70 +0x9F71 +0x9F72 +0x9F74 +0x9F75 +0x9F76 +0x9F77 +0x9F78 +0x9F79 +0x9F7A +0x9F7B +0x9F7E +0x9F8D +0x9F90 +0x9F91 +0x9F92 +0x9F94 +0x9F95 +0x9F98 +0x9F9C +0x9FA0 +0x9FA2 +0x9FA4 +0xFA0C +0xFA0D diff --git a/fontconfig/fc-lang/zu.orth b/fontconfig/fc-lang/zu.orth index 8be8ea482..4aff79440 100644 --- a/fontconfig/fc-lang/zu.orth +++ b/fontconfig/fc-lang/zu.orth @@ -1,29 +1,29 @@ -#
-# fontconfig/fc-lang/zu.orth
-#
-# Copyright © 2002 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-#
-# Zulu (zu)
-#
-# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf
-#
-0041-005a
-0061-007a
+# +# fontconfig/fc-lang/zu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Zulu (zu) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a diff --git a/fontconfig/fc-list/Makefile.am b/fontconfig/fc-list/Makefile.am index 9edb35e3a..d40700a4e 100644 --- a/fontconfig/fc-list/Makefile.am +++ b/fontconfig/fc-list/Makefile.am @@ -1,59 +1,59 @@ -#
-# fontconfig/fc-list/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-DOC2MAN = docbook2man
-
-FC_LIST_SRC=${top_srcdir}/fc-list
-
-SGML = ${FC_LIST_SRC}/fc-list.sgml
-
-bin_PROGRAMS=fc-list
-
-INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
-
-BUILT_MANS=fc-list.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-list.sgml $(BUILT_MANS)
-
-fc_list_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+# +# fontconfig/fc-list/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC2MAN = docbook2man + +FC_LIST_SRC=${top_srcdir}/fc-list + +SGML = ${FC_LIST_SRC}/fc-list.sgml + +bin_PROGRAMS=fc-list + +INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) + +BUILT_MANS=fc-list.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-list.sgml $(BUILT_MANS) + +fc_list_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-list/fc-list.c b/fontconfig/fc-list/fc-list.c index 97ed8225b..ad383328e 100644 --- a/fontconfig/fc-list/fc-list.c +++ b/fontconfig/fc-list/fc-list.c @@ -1,200 +1,200 @@ -/*
- * fontconfig/fc-list/fc-list.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include <fontconfig/fontconfig.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-const struct option longopts[] = {
- {"verbose", 0, 0, 'v'},
- {"format", 1, 0, 'f'},
- {"quiet", 0, 0, 'q'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [--verbose] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n",
- program);
-#else
- fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [pattern] {element ...} \n",
- program);
-#endif
- fprintf (file, "List fonts matching [pattern]\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -v, --verbose display entire font pattern verbosely\n");
- fprintf (file, " -f, --format=FORMAT use the given output format\n");
- fprintf (file, " -q, --quiet suppress all normal output, exit 1 if no fonts matched\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -v (verbose) display entire font pattern verbosely\n");
- fprintf (file, " -f FORMAT (format) use the given output format\n");
- fprintf (file, " -q, (quiet) suppress all normal output, exit 1 if no fonts matched\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-int
-main (int argc, char **argv)
-{
- int verbose = 0;
- int quiet = 0;
- FcChar8 *format = NULL;
- int nfont = 0;
- int i;
- FcObjectSet *os = 0;
- FcFontSet *fs;
- FcPattern *pat;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "vf:qVh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "vf:qVh")) != -1)
-#endif
- {
- switch (c) {
- case 'v':
- verbose = 1;
- break;
- case 'f':
- format = (FcChar8 *) strdup (optarg);
- break;
- case 'q':
- quiet = 1;
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (!FcInit ())
- {
- fprintf (stderr, "Can't init font config library\n");
- return 1;
- }
- if (argv[i])
- {
- pat = FcNameParse ((FcChar8 *) argv[i]);
- while (argv[++i])
- {
- if (!os)
- os = FcObjectSetCreate ();
- FcObjectSetAdd (os, argv[i]);
- }
- }
- else
- pat = FcPatternCreate ();
- if (quiet && !os)
- os = FcObjectSetCreate ();
- if (!verbose && !format && !os)
- os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, (char *) 0);
- if (!format)
- format = "%{=fclist}\n";
- fs = FcFontList (0, pat, os);
- if (os)
- FcObjectSetDestroy (os);
- if (pat)
- FcPatternDestroy (pat);
-
- if (!quiet && fs)
- {
- int j;
-
- for (j = 0; j < fs->nfont; j++)
- {
- if (verbose)
- {
- FcPatternPrint (fs->fonts[j]);
- }
- else
- {
- FcChar8 *s;
-
- s = FcPatternFormat (fs->fonts[j], format);
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
- }
- }
-
- if (fs) {
- nfont = fs->nfont;
- FcFontSetDestroy (fs);
- }
-
- FcFini ();
-
- return quiet ? (nfont == 0 ? 1 : 0) : 0;
-}
+/* + * fontconfig/fc-list/fc-list.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include <fontconfig/fontconfig.h> +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> +#ifdef HAVE_CONFIG_H +#include <config.h> +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#ifndef HAVE_GETOPT +#define HAVE_GETOPT 0 +#endif +#ifndef HAVE_GETOPT_LONG +#define HAVE_GETOPT_LONG 0 +#endif + +#if HAVE_GETOPT_LONG +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include <getopt.h> +const struct option longopts[] = { + {"verbose", 0, 0, 'v'}, + {"format", 1, 0, 'f'}, + {"quiet", 0, 0, 'q'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [--verbose] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n", + program); +#else + fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [pattern] {element ...} \n", + program); +#endif + fprintf (file, "List fonts matching [pattern]\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -v, --verbose display entire font pattern verbosely\n"); + fprintf (file, " -f, --format=FORMAT use the given output format\n"); + fprintf (file, " -q, --quiet suppress all normal output, exit 1 if no fonts matched\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -v (verbose) display entire font pattern verbosely\n"); + fprintf (file, " -f FORMAT (format) use the given output format\n"); + fprintf (file, " -q, (quiet) suppress all normal output, exit 1 if no fonts matched\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +int +main (int argc, char **argv) +{ + int verbose = 0; + int quiet = 0; + FcChar8 *format = NULL; + int nfont = 0; + int i; + FcObjectSet *os = 0; + FcFontSet *fs; + FcPattern *pat; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "vf:qVh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "vf:qVh")) != -1) +#endif + { + switch (c) { + case 'v': + verbose = 1; + break; + case 'f': + format = (FcChar8 *) strdup (optarg); + break; + case 'q': + quiet = 1; + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (!FcInit ()) + { + fprintf (stderr, "Can't init font config library\n"); + return 1; + } + if (argv[i]) + { + pat = FcNameParse ((FcChar8 *) argv[i]); + while (argv[++i]) + { + if (!os) + os = FcObjectSetCreate (); + FcObjectSetAdd (os, argv[i]); + } + } + else + pat = FcPatternCreate (); + if (quiet && !os) + os = FcObjectSetCreate (); + if (!verbose && !format && !os) + os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, (char *) 0); + if (!format) + format = "%{=fclist}\n"; + fs = FcFontList (0, pat, os); + if (os) + FcObjectSetDestroy (os); + if (pat) + FcPatternDestroy (pat); + + if (!quiet && fs) + { + int j; + + for (j = 0; j < fs->nfont; j++) + { + if (verbose) + { + FcPatternPrint (fs->fonts[j]); + } + else + { + FcChar8 *s; + + s = FcPatternFormat (fs->fonts[j], format); + if (s) + { + printf ("%s", s); + free (s); + } + } + } + } + + if (fs) { + nfont = fs->nfont; + FcFontSetDestroy (fs); + } + + FcFini (); + + return quiet ? (nfont == 0 ? 1 : 0) : 0; +} diff --git a/fontconfig/fc-list/fc-list.sgml b/fontconfig/fc-list/fc-list.sgml index 7f0c23023..c4a82cd6f 100644 --- a/fontconfig/fc-list/fc-list.sgml +++ b/fontconfig/fc-list/fc-list.sgml @@ -1,215 +1,215 @@ -<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Josselin</firstname>">
- <!ENTITY dhsurname "<surname>Mouette</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>joss@debian.org</email>">
- <!ENTITY dhusername "Josselin Mouette">
- <!ENTITY dhucpackage "<refentrytitle>fc-list</refentrytitle>">
- <!ENTITY dhpackage "fc-list">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2003</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>list available fonts</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-vVh</option></arg>
- <arg><option>--verbose</option></arg>
- <group>
- <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
- <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
- </group>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <sbr>
- <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> lists fonts and styles
- available on the system for applications using fontconfig.
- If any elements are specified, only those are printed.
- Otherwise family and style are printed, unless verbose
- output is requested.</para>
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-v</option>
- <option>--verbose</option>
- </term>
- <listitem>
- <para>Print verbose output of the whole font pattern for each match,
- or <replaceable>element</replaceable>s if any is
- provided.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-f</option>
- <option>--format</option>
- <option><replaceable>format</replaceable></option>
- </term>
- <listitem>
- <para>Format output according to the format specifier
- <replaceable>format</replaceable>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>pattern</replaceable></option>
- </term>
- <listitem>
- <para>If this argument is set, only fonts matching
- <replaceable>pattern</replaceable> are displayed.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>element</replaceable></option>
- </term>
- <listitem>
- <para>If set, the <replaceable>element</replaceable> property
- is displayed for matching fonts.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>EXAMPLES</title>
-
- <variablelist>
- <varlistentry>
- <term>fc-list</term>
- <listitem><para>Lists all font faces.</para></listitem>
- </varlistentry>
- <varlistentry>
- <term>fc-list :lang=hi</term>
- <listitem><para>Lists font faces that cover Hindi.</para></listitem>
- </varlistentry>
- <varlistentry>
- <term>fc-list : family style file spacing </term>
- <listitem><para>Lists the filename and spacing value for each font
- face. <quote>:</quote> is an empty pattern that matches all
- fonts.</para></listitem>
- </varlistentry>
- </variablelist>
-
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-match</command>(1)
- <function>FcFontList</function>(3)
- <function>FcPatternFormat</function>(3)
- <command>fc-cat</command>(1)
- <command>fc-cache</command>(1)
- <command>fc-pattern</command>(1)
- <command>fc-query</command>(1)
- <command>fc-scan</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was written by Keith Packard
- <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [ + +<!-- Process this file with docbook-to-man to generate an nroff manual + page: `docbook-to-man manpage.sgml > manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + <!-- Fill in your name for FIRSTNAME and SURNAME. --> + <!ENTITY dhfirstname "<firstname>Josselin</firstname>"> + <!ENTITY dhsurname "<surname>Mouette</surname>"> + <!-- Please adjust the date whenever revising the manpage. --> + <!ENTITY dhdate "<date>Aug 13, 2008</date>"> + <!-- SECTION should be 1-8, maybe w/ subsection other parameters are + allowed: see man(7), man(1). --> + <!ENTITY dhsection "<manvolnum>1</manvolnum>"> + <!ENTITY dhemail "<email>joss@debian.org</email>"> + <!ENTITY dhusername "Josselin Mouette"> + <!ENTITY dhucpackage "<refentrytitle>fc-list</refentrytitle>"> + <!ENTITY dhpackage "fc-list"> + + <!ENTITY debian "<productname>Debian</productname>"> + <!ENTITY gnu "<acronym>GNU</acronym>"> + <!ENTITY gpl "&gnu; <acronym>GPL</acronym>"> +]> + +<refentry> + <refentryinfo> + <address> + &dhemail; + </address> + <author> + &dhfirstname; + &dhsurname; + </author> + <copyright> + <year>2003</year> + <holder>&dhusername;</holder> + </copyright> + &dhdate; + </refentryinfo> + <refmeta> + &dhucpackage; + + &dhsection; + </refmeta> + <refnamediv> + <refname>&dhpackage;</refname> + + <refpurpose>list available fonts</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>&dhpackage;</command> + + <arg><option>-vVh</option></arg> + <arg><option>--verbose</option></arg> + <group> + <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg> + <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg> + </group> + <arg><option>--version</option></arg> + <arg><option>--help</option></arg> + <sbr> + <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg> + + </cmdsynopsis> + </refsynopsisdiv> + <refsect1> + <title>DESCRIPTION</title> + + <para><command>&dhpackage;</command> lists fonts and styles + available on the system for applications using fontconfig. + If any elements are specified, only those are printed. + Otherwise family and style are printed, unless verbose + output is requested.</para> + </refsect1> + <refsect1> + <title>OPTIONS</title> + + <para>This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below.</para> + + <variablelist> + <varlistentry> + <term><option>-v</option> + <option>--verbose</option> + </term> + <listitem> + <para>Print verbose output of the whole font pattern for each match, + or <replaceable>element</replaceable>s if any is + provided.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-f</option> + <option>--format</option> + <option><replaceable>format</replaceable></option> + </term> + <listitem> + <para>Format output according to the format specifier + <replaceable>format</replaceable>.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-V</option> + <option>--version</option> + </term> + <listitem> + <para>Show version of the program and exit.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-h</option> + <option>--help</option> + </term> + <listitem> + <para>Show summary of options.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option><replaceable>pattern</replaceable></option> + </term> + <listitem> + <para>If this argument is set, only fonts matching + <replaceable>pattern</replaceable> are displayed.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option><replaceable>element</replaceable></option> + </term> + <listitem> + <para>If set, the <replaceable>element</replaceable> property + is displayed for matching fonts.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>EXAMPLES</title> + + <variablelist> + <varlistentry> + <term>fc-list</term> + <listitem><para>Lists all font faces.</para></listitem> + </varlistentry> + <varlistentry> + <term>fc-list :lang=hi</term> + <listitem><para>Lists font faces that cover Hindi.</para></listitem> + </varlistentry> + <varlistentry> + <term>fc-list : family style file spacing </term> + <listitem><para>Lists the filename and spacing value for each font + face. <quote>:</quote> is an empty pattern that matches all + fonts.</para></listitem> + </varlistentry> + </variablelist> + + </refsect1> + + <refsect1> + <title>SEE ALSO</title> + + <para> + <command>fc-match</command>(1) + <function>FcFontList</function>(3) + <function>FcPatternFormat</function>(3) + <command>fc-cat</command>(1) + <command>fc-cache</command>(1) + <command>fc-pattern</command>(1) + <command>fc-query</command>(1) + <command>fc-scan</command>(1) + </para> + + <para>The fontconfig user's guide, in HTML format: + <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para> + + </refsect1> + <refsect1> + <title>AUTHOR</title> + + <para>This manual page was written by Keith Packard + <email>keithp@keithp.com</email> and &dhusername; &dhemail;.</para> + + </refsect1> +</refentry> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:2 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:nil +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +--> diff --git a/fontconfig/fc-match/Makefile.am b/fontconfig/fc-match/Makefile.am index f4244b6a5..94fc7d906 100644 --- a/fontconfig/fc-match/Makefile.am +++ b/fontconfig/fc-match/Makefile.am @@ -1,59 +1,59 @@ -#
-# fontconfig/fc-match/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-bin_PROGRAMS=fc-match
-
-DOC2MAN = docbook2man
-
-FC_MATCH_SRC=${top_srcdir}/fc-match
-
-SGML = ${FC_MATCH_SRC}/fc-match.sgml
-
-INCLUDES=-I${top_srcdir} $(WARN_CFLAGS)
-
-BUILT_MANS=fc-match.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-match.sgml $(BUILT_MANS)
-
-fc_match_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+# +# fontconfig/fc-match/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +bin_PROGRAMS=fc-match + +DOC2MAN = docbook2man + +FC_MATCH_SRC=${top_srcdir}/fc-match + +SGML = ${FC_MATCH_SRC}/fc-match.sgml + +INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) + +BUILT_MANS=fc-match.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-match.sgml $(BUILT_MANS) + +fc_match_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-match/fc-match.c b/fontconfig/fc-match/fc-match.c index 929eda59b..e64b4bcdd 100644 --- a/fontconfig/fc-match/fc-match.c +++ b/fontconfig/fc-match/fc-match.c @@ -1,243 +1,243 @@ -/*
- * fontconfig/fc-match/fc-match.c
- *
- * Copyright © 2003 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-static const struct option longopts[] = {
- {"sort", 0, 0, 's'},
- {"all", 0, 0, 'a'},
- {"verbose", 0, 0, 'v'},
- {"format", 1, 0, 'f'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-savVh] [-f FORMAT] [--sort] [--all] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n",
- program);
-#else
- fprintf (file, "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n",
- program);
-#endif
- fprintf (file, "List best font matching [pattern]\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -s, --sort display sorted list of matches\n");
- fprintf (file, " -a, --all display unpruned sorted list of matches\n");
- fprintf (file, " -v, --verbose display entire font pattern verbosely\n");
- fprintf (file, " -f, --format=FORMAT use the given output format\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -s, (sort) display sorted list of matches\n");
- fprintf (file, " -a (all) display unpruned sorted list of matches\n");
- fprintf (file, " -v (verbose) display entire font pattern verbosely\n");
- fprintf (file, " -f FORMAT (format) use the given output format\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-int
-main (int argc, char **argv)
-{
- int verbose = 0;
- int sort = 0, all = 0;
- FcChar8 *format = NULL;
- int i;
- FcObjectSet *os = 0;
- FcFontSet *fs;
- FcPattern *pat;
- FcResult result;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "asvf:Vh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "asvf:Vh")) != -1)
-#endif
- {
- switch (c) {
- case 'a':
- all = 1;
- break;
- case 's':
- sort = 1;
- break;
- case 'v':
- verbose = 1;
- break;
- case 'f':
- format = (FcChar8 *) strdup (optarg);
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (!FcInit ())
- {
- fprintf (stderr, "Can't init font config library\n");
- return 1;
- }
- if (argv[i])
- {
- pat = FcNameParse ((FcChar8 *) argv[i]);
- while (argv[++i])
- {
- if (!os)
- os = FcObjectSetCreate ();
- FcObjectSetAdd (os, argv[i]);
- }
- }
- else
- pat = FcPatternCreate ();
-
- if (!pat)
- return 1;
-
- FcConfigSubstitute (0, pat, FcMatchPattern);
- FcDefaultSubstitute (pat);
-
- fs = FcFontSetCreate ();
-
- if (sort || all)
- {
- FcFontSet *font_patterns;
- int j;
- font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result);
-
- for (j = 0; j < font_patterns->nfont; j++)
- {
- FcPattern *font_pattern;
-
- font_pattern = FcFontRenderPrepare (NULL, pat, font_patterns->fonts[j]);
- if (font_pattern)
- FcFontSetAdd (fs, font_pattern);
- }
-
- FcFontSetSortDestroy (font_patterns);
- }
- else
- {
- FcPattern *match;
- match = FcFontMatch (0, pat, &result);
- if (match)
- FcFontSetAdd (fs, match);
- }
- FcPatternDestroy (pat);
-
- if (!format)
- {
- if (os)
- format = "%{=unparse}\n";
- else
- format = "%{=fcmatch}\n";
- }
-
- if (fs)
- {
- int j;
-
- for (j = 0; j < fs->nfont; j++)
- {
- FcPattern *font;
-
- font = FcPatternFilter (fs->fonts[j], os);
-
- if (verbose)
- {
- FcPatternPrint (font);
- }
- else
- {
- FcChar8 *s;
-
- s = FcPatternFormat (font, format);
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
-
- FcPatternDestroy (font);
- }
- FcFontSetDestroy (fs);
- }
-
- if (os)
- FcObjectSetDestroy (os);
-
- FcFini ();
-
- return 0;
-}
+/* + * fontconfig/fc-match/fc-match.c + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include <fontconfig/fontconfig.h> +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#ifndef HAVE_GETOPT +#define HAVE_GETOPT 0 +#endif +#ifndef HAVE_GETOPT_LONG +#define HAVE_GETOPT_LONG 0 +#endif + +#if HAVE_GETOPT_LONG +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include <getopt.h> +static const struct option longopts[] = { + {"sort", 0, 0, 's'}, + {"all", 0, 0, 'a'}, + {"verbose", 0, 0, 'v'}, + {"format", 1, 0, 'f'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-savVh] [-f FORMAT] [--sort] [--all] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n", + program); +#else + fprintf (file, "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n", + program); +#endif + fprintf (file, "List best font matching [pattern]\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -s, --sort display sorted list of matches\n"); + fprintf (file, " -a, --all display unpruned sorted list of matches\n"); + fprintf (file, " -v, --verbose display entire font pattern verbosely\n"); + fprintf (file, " -f, --format=FORMAT use the given output format\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -s, (sort) display sorted list of matches\n"); + fprintf (file, " -a (all) display unpruned sorted list of matches\n"); + fprintf (file, " -v (verbose) display entire font pattern verbosely\n"); + fprintf (file, " -f FORMAT (format) use the given output format\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +int +main (int argc, char **argv) +{ + int verbose = 0; + int sort = 0, all = 0; + FcChar8 *format = NULL; + int i; + FcObjectSet *os = 0; + FcFontSet *fs; + FcPattern *pat; + FcResult result; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "asvf:Vh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "asvf:Vh")) != -1) +#endif + { + switch (c) { + case 'a': + all = 1; + break; + case 's': + sort = 1; + break; + case 'v': + verbose = 1; + break; + case 'f': + format = (FcChar8 *) strdup (optarg); + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (!FcInit ()) + { + fprintf (stderr, "Can't init font config library\n"); + return 1; + } + if (argv[i]) + { + pat = FcNameParse ((FcChar8 *) argv[i]); + while (argv[++i]) + { + if (!os) + os = FcObjectSetCreate (); + FcObjectSetAdd (os, argv[i]); + } + } + else + pat = FcPatternCreate (); + + if (!pat) + return 1; + + FcConfigSubstitute (0, pat, FcMatchPattern); + FcDefaultSubstitute (pat); + + fs = FcFontSetCreate (); + + if (sort || all) + { + FcFontSet *font_patterns; + int j; + font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result); + + for (j = 0; j < font_patterns->nfont; j++) + { + FcPattern *font_pattern; + + font_pattern = FcFontRenderPrepare (NULL, pat, font_patterns->fonts[j]); + if (font_pattern) + FcFontSetAdd (fs, font_pattern); + } + + FcFontSetSortDestroy (font_patterns); + } + else + { + FcPattern *match; + match = FcFontMatch (0, pat, &result); + if (match) + FcFontSetAdd (fs, match); + } + FcPatternDestroy (pat); + + if (!format) + { + if (os) + format = "%{=unparse}\n"; + else + format = "%{=fcmatch}\n"; + } + + if (fs) + { + int j; + + for (j = 0; j < fs->nfont; j++) + { + FcPattern *font; + + font = FcPatternFilter (fs->fonts[j], os); + + if (verbose) + { + FcPatternPrint (font); + } + else + { + FcChar8 *s; + + s = FcPatternFormat (font, format); + if (s) + { + printf ("%s", s); + free (s); + } + } + + FcPatternDestroy (font); + } + FcFontSetDestroy (fs); + } + + if (os) + FcObjectSetDestroy (os); + + FcFini (); + + return 0; +} diff --git a/fontconfig/fc-match/fc-match.sgml b/fontconfig/fc-match/fc-match.sgml index 5cc879037..f66a021c0 100644 --- a/fontconfig/fc-match/fc-match.sgml +++ b/fontconfig/fc-match/fc-match.sgml @@ -1,217 +1,217 @@ -<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Patrick</firstname>">
- <!ENTITY dhsurname "<surname>Lam</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>plam@csail.mit.edu</email>">
- <!ENTITY dhusername "Patrick Lam">
- <!ENTITY dhucpackage "<refentrytitle>fc-match</refentrytitle>">
- <!ENTITY dhpackage "fc-match">
-
- <!ENTITY debian "<productname>Debian</productname>">
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2003</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>match available fonts</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-asvVh</option></arg>
- <arg><option>--all</option></arg>
- <arg><option>--sort</option></arg>
- <arg><option>--verbose</option></arg>
- <group>
- <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
- <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
- </group>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <sbr>
- <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> matches
- <replaceable>pattern</replaceable> (empty
-pattern by default) using the normal fontconfig matching rules to find
-the best font available. If <option>--sort</option> is given, the sorted list of best
-matching fonts is displayed.
-The <option>--all</option> option works like
-<option>--sort</option> except that no pruning is done on the list of fonts.</para>
-<para>If any elements are specified, only those are printed.
-Otherwise short file name, family, and style are printed, unless verbose
-output is requested.</para>
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-a</option>
- <option>--all</option>
- </term>
- <listitem>
- <para>Displays sorted list of best matching fonts, but do not do any
- pruning on the list.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-s</option>
- <option>--sort</option>
- </term>
- <listitem>
- <para>Displays sorted list of best matching fonts.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-v</option>
- <option>--verbose</option>
- </term>
- <listitem>
- <para>Print verbose output of the whole font pattern for each match,
- or <replaceable>element</replaceable>s if any is
- provided.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-f</option>
- <option>--format</option>
- <option><replaceable>format</replaceable></option>
- </term>
- <listitem>
- <para>Format output according to the format specifier
- <replaceable>format</replaceable>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>pattern</replaceable></option>
- </term>
- <listitem>
- <para>Displays fonts matching
- <replaceable>pattern</replaceable> (uses empty pattern by default).</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>element</replaceable></option>
- </term>
- <listitem>
- <para>If set, the <replaceable>element</replaceable> property
- is displayed for matching fonts.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-list</command>(1)
- <function>FcFontMatch</function>(3)
- <function>FcFontSort</function>(3)
- <function>FcPatternFormat</function>(3)
- <command>fc-cat</command>(1)
- <command>fc-cache</command>(1)
- <command>fc-pattern</command>(1)
- <command>fc-query</command>(1)
- <command>fc-scan</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was updated by &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [ + +<!-- Process this file with docbook-to-man to generate an nroff manual + page: `docbook-to-man manpage.sgml > manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + <!-- Fill in your name for FIRSTNAME and SURNAME. --> + <!ENTITY dhfirstname "<firstname>Patrick</firstname>"> + <!ENTITY dhsurname "<surname>Lam</surname>"> + <!-- Please adjust the date whenever revising the manpage. --> + <!ENTITY dhdate "<date>Aug 13, 2008</date>"> + <!-- SECTION should be 1-8, maybe w/ subsection other parameters are + allowed: see man(7), man(1). --> + <!ENTITY dhsection "<manvolnum>1</manvolnum>"> + <!ENTITY dhemail "<email>plam@csail.mit.edu</email>"> + <!ENTITY dhusername "Patrick Lam"> + <!ENTITY dhucpackage "<refentrytitle>fc-match</refentrytitle>"> + <!ENTITY dhpackage "fc-match"> + + <!ENTITY debian "<productname>Debian</productname>"> + <!ENTITY gnu "<acronym>GNU</acronym>"> + <!ENTITY gpl "&gnu; <acronym>GPL</acronym>"> +]> + +<refentry> + <refentryinfo> + <address> + &dhemail; + </address> + <author> + &dhfirstname; + &dhsurname; + </author> + <copyright> + <year>2003</year> + <holder>&dhusername;</holder> + </copyright> + &dhdate; + </refentryinfo> + <refmeta> + &dhucpackage; + + &dhsection; + </refmeta> + <refnamediv> + <refname>&dhpackage;</refname> + + <refpurpose>match available fonts</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>&dhpackage;</command> + + <arg><option>-asvVh</option></arg> + <arg><option>--all</option></arg> + <arg><option>--sort</option></arg> + <arg><option>--verbose</option></arg> + <group> + <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg> + <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg> + </group> + <arg><option>--version</option></arg> + <arg><option>--help</option></arg> + <sbr> + <arg><option><replaceable>pattern</replaceable></option> <arg rep="repeat"><option><replaceable>element</replaceable></option></arg> </arg> + + </cmdsynopsis> + </refsynopsisdiv> + <refsect1> + <title>DESCRIPTION</title> + + <para><command>&dhpackage;</command> matches + <replaceable>pattern</replaceable> (empty +pattern by default) using the normal fontconfig matching rules to find +the best font available. If <option>--sort</option> is given, the sorted list of best +matching fonts is displayed. +The <option>--all</option> option works like +<option>--sort</option> except that no pruning is done on the list of fonts.</para> +<para>If any elements are specified, only those are printed. +Otherwise short file name, family, and style are printed, unless verbose +output is requested.</para> + </refsect1> + <refsect1> + <title>OPTIONS</title> + + <para>This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below.</para> + + <variablelist> + <varlistentry> + <term><option>-a</option> + <option>--all</option> + </term> + <listitem> + <para>Displays sorted list of best matching fonts, but do not do any + pruning on the list.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-s</option> + <option>--sort</option> + </term> + <listitem> + <para>Displays sorted list of best matching fonts.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-v</option> + <option>--verbose</option> + </term> + <listitem> + <para>Print verbose output of the whole font pattern for each match, + or <replaceable>element</replaceable>s if any is + provided.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-f</option> + <option>--format</option> + <option><replaceable>format</replaceable></option> + </term> + <listitem> + <para>Format output according to the format specifier + <replaceable>format</replaceable>.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-V</option> + <option>--version</option> + </term> + <listitem> + <para>Show version of the program and exit.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-h</option> + <option>--help</option> + </term> + <listitem> + <para>Show summary of options.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option><replaceable>pattern</replaceable></option> + </term> + <listitem> + <para>Displays fonts matching + <replaceable>pattern</replaceable> (uses empty pattern by default).</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option><replaceable>element</replaceable></option> + </term> + <listitem> + <para>If set, the <replaceable>element</replaceable> property + is displayed for matching fonts.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>SEE ALSO</title> + + <para> + <command>fc-list</command>(1) + <function>FcFontMatch</function>(3) + <function>FcFontSort</function>(3) + <function>FcPatternFormat</function>(3) + <command>fc-cat</command>(1) + <command>fc-cache</command>(1) + <command>fc-pattern</command>(1) + <command>fc-query</command>(1) + <command>fc-scan</command>(1) + </para> + + <para>The fontconfig user's guide, in HTML format: + <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para> + + </refsect1> + <refsect1> + <title>AUTHOR</title> + + <para>This manual page was updated by &dhusername; &dhemail;.</para> + + </refsect1> +</refentry> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:2 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:nil +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +--> diff --git a/fontconfig/fc-query/Makefile.am b/fontconfig/fc-query/Makefile.am index a7300a3bc..132dd401c 100644 --- a/fontconfig/fc-query/Makefile.am +++ b/fontconfig/fc-query/Makefile.am @@ -1,59 +1,59 @@ -#
-# fontconfig/fc-query/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-bin_PROGRAMS=fc-query
-
-DOC2MAN = docbook2man
-
-FC_QUERY_SRC=${top_srcdir}/fc-query
-
-SGML = ${FC_QUERY_SRC}/fc-query.sgml
-
-INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS)
-
-BUILT_MANS=fc-query.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-query.sgml $(BUILT_MANS)
-
-fc_query_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+# +# fontconfig/fc-query/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +bin_PROGRAMS=fc-query + +DOC2MAN = docbook2man + +FC_QUERY_SRC=${top_srcdir}/fc-query + +SGML = ${FC_QUERY_SRC}/fc-query.sgml + +INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) + +BUILT_MANS=fc-query.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-query.sgml $(BUILT_MANS) + +fc_query_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-query/fc-query.c b/fontconfig/fc-query/fc-query.c index efb1aa0e4..0680b92cf 100644 --- a/fontconfig/fc-query/fc-query.c +++ b/fontconfig/fc-query/fc-query.c @@ -1,191 +1,191 @@ -/*
- * fontconfig/fc-query/fc-query.c
- *
- * Copyright © 2003 Keith Packard
- * Copyright © 2008 Red Hat, Inc.
- * Red Hat Author(s): Behdad Esfahbod
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include <fontconfig/fcfreetype.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-static const struct option longopts[] = {
- {"index", 1, 0, 'i'},
- {"format", 1, 0, 'f'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] [--index index] [--format FORMAT] [--version] [--help] font-file...\n",
- program);
-#else
- fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] font-file...\n",
- program);
-#endif
- fprintf (file, "Query font files and print resulting pattern(s)\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -i, --index INDEX display the INDEX face of each font file only\n");
- fprintf (file, " -f, --format=FORMAT use the given output format\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -i INDEX (index) display the INDEX face of each font file only\n");
- fprintf (file, " -f FORMAT (format) use the given output format\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-int
-main (int argc, char **argv)
-{
- int index_set = 0;
- int set_index = 0;
- FcChar8 *format = NULL;
- int err = 0;
- int i;
- FcBlanks *blanks;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "i:f:Vh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "i:f:Vh")) != -1)
-#endif
- {
- switch (c) {
- case 'i':
- index_set = 1;
- set_index = atoi (optarg);
- break;
- case 'f':
- format = (FcChar8 *) strdup (optarg);
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (i == argc)
- usage (argv[0], 1);
-
- if (!FcInit ())
- {
- fprintf (stderr, "Can't init font config library\n");
- return 1;
- }
-
- blanks = FcConfigGetBlanks (NULL);
-
- for (; i < argc; i++)
- {
- int index;
- int count = 0;
-
- index = set_index;
-
- do {
- FcPattern *pat;
-
- pat = FcFreeTypeQuery ((FcChar8 *) argv[i], index, blanks, &count);
- if (pat)
- {
- if (format)
- {
- FcChar8 *s;
-
- s = FcPatternFormat (pat, format);
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
- else
- {
- FcPatternPrint (pat);
- }
-
- FcPatternDestroy (pat);
- }
- else
- {
- fprintf (stderr, "Can't query face %d of font file %s\n",
- index, argv[i]);
- err = 1;
- }
-
- index++;
- } while (!index_set && index < count);
- }
-
- FcFini ();
- return err;
-}
+/* + * fontconfig/fc-query/fc-query.c + * + * Copyright © 2003 Keith Packard + * Copyright © 2008 Red Hat, Inc. + * Red Hat Author(s): Behdad Esfahbod + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include <fontconfig/fontconfig.h> +#include <fontconfig/fcfreetype.h> +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#ifndef HAVE_GETOPT +#define HAVE_GETOPT 0 +#endif +#ifndef HAVE_GETOPT_LONG +#define HAVE_GETOPT_LONG 0 +#endif + +#if HAVE_GETOPT_LONG +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include <getopt.h> +static const struct option longopts[] = { + {"index", 1, 0, 'i'}, + {"format", 1, 0, 'f'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] [--index index] [--format FORMAT] [--version] [--help] font-file...\n", + program); +#else + fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] font-file...\n", + program); +#endif + fprintf (file, "Query font files and print resulting pattern(s)\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -i, --index INDEX display the INDEX face of each font file only\n"); + fprintf (file, " -f, --format=FORMAT use the given output format\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -i INDEX (index) display the INDEX face of each font file only\n"); + fprintf (file, " -f FORMAT (format) use the given output format\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +int +main (int argc, char **argv) +{ + int index_set = 0; + int set_index = 0; + FcChar8 *format = NULL; + int err = 0; + int i; + FcBlanks *blanks; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "i:f:Vh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "i:f:Vh")) != -1) +#endif + { + switch (c) { + case 'i': + index_set = 1; + set_index = atoi (optarg); + break; + case 'f': + format = (FcChar8 *) strdup (optarg); + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (i == argc) + usage (argv[0], 1); + + if (!FcInit ()) + { + fprintf (stderr, "Can't init font config library\n"); + return 1; + } + + blanks = FcConfigGetBlanks (NULL); + + for (; i < argc; i++) + { + int index; + int count = 0; + + index = set_index; + + do { + FcPattern *pat; + + pat = FcFreeTypeQuery ((FcChar8 *) argv[i], index, blanks, &count); + if (pat) + { + if (format) + { + FcChar8 *s; + + s = FcPatternFormat (pat, format); + if (s) + { + printf ("%s", s); + free (s); + } + } + else + { + FcPatternPrint (pat); + } + + FcPatternDestroy (pat); + } + else + { + fprintf (stderr, "Can't query face %d of font file %s\n", + index, argv[i]); + err = 1; + } + + index++; + } while (!index_set && index < count); + } + + FcFini (); + return err; +} diff --git a/fontconfig/fc-query/fc-query.sgml b/fontconfig/fc-query/fc-query.sgml index e81e7bf14..5351d1e4d 100644 --- a/fontconfig/fc-query/fc-query.sgml +++ b/fontconfig/fc-query/fc-query.sgml @@ -1,192 +1,192 @@ -<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
- <!ENTITY dhsurname "<surname>Esfahbod</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Aug 13, 2008</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>behdad@behdad.org</email>">
- <!ENTITY dhusername "Behdad Esfahbod">
- <!ENTITY dhucpackage "<refentrytitle>fc-query</refentrytitle>">
- <!ENTITY dhpackage "fc-query">
-
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2008</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>query font files</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-Vh</option></arg>
- <sbr>
- <group>
- <arg><option>-i</option> <option><replaceable>index</replaceable></option></arg>
- <arg><option>--index</option> <option><replaceable>index</replaceable></option></arg>
- </group>
- <group>
- <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
- <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
- </group>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <arg choice="req" rep="repeat"><option><replaceable>font-file</replaceable></option></arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> queries
- <replaceable>font-file</replaceable>(s) using the normal fontconfig
- rules and prints out font pattern for each face found.
- If <option>--index</option> is given, only one face of each file is
- queried, otherwise all faces are queried.</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-i</option>
- <option>--index</option>
- <option><replaceable>index</replaceable></option>
- </term>
- <listitem>
- <para>Only query face indexed <replaceable>index</replaceable> of
- each file.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-f</option>
- <option>--format</option>
- <option><replaceable>format</replaceable></option>
- </term>
- <listitem>
- <para>Format output according to the format specifier
- <replaceable>format</replaceable>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>font-file</replaceable></option>
- </term>
- <listitem>
- <para>Query <replaceable>font-file</replaceable> for font faces.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>RETURN CODES</title>
- <para><command>fc-query</command> returns error code 0 for successful parsing,
- or 1 if any errors occured or if at least one font face could not be opened.</para>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-scan</command>(1)
- <function>FcFreeTypeQuery</function>(3)
- <function>FcPatternFormat</function>(3)
- <command>fc-cat</command>(1)
- <command>fc-cache</command>(1)
- <command>fc-list</command>(1)
- <command>fc-match</command>(1)
- <command>fc-pattern</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was updated by &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [ + +<!-- Process this file with docbook-to-man to generate an nroff manual + page: `docbook-to-man manpage.sgml > manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + <!-- Fill in your name for FIRSTNAME and SURNAME. --> + <!ENTITY dhfirstname "<firstname>Behdad</firstname>"> + <!ENTITY dhsurname "<surname>Esfahbod</surname>"> + <!-- Please adjust the date whenever revising the manpage. --> + <!ENTITY dhdate "<date>Aug 13, 2008</date>"> + <!-- SECTION should be 1-8, maybe w/ subsection other parameters are + allowed: see man(7), man(1). --> + <!ENTITY dhsection "<manvolnum>1</manvolnum>"> + <!ENTITY dhemail "<email>behdad@behdad.org</email>"> + <!ENTITY dhusername "Behdad Esfahbod"> + <!ENTITY dhucpackage "<refentrytitle>fc-query</refentrytitle>"> + <!ENTITY dhpackage "fc-query"> + + <!ENTITY gnu "<acronym>GNU</acronym>"> + <!ENTITY gpl "&gnu; <acronym>GPL</acronym>"> +]> + +<refentry> + <refentryinfo> + <address> + &dhemail; + </address> + <author> + &dhfirstname; + &dhsurname; + </author> + <copyright> + <year>2008</year> + <holder>&dhusername;</holder> + </copyright> + &dhdate; + </refentryinfo> + <refmeta> + &dhucpackage; + + &dhsection; + </refmeta> + <refnamediv> + <refname>&dhpackage;</refname> + + <refpurpose>query font files</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>&dhpackage;</command> + + <arg><option>-Vh</option></arg> + <sbr> + <group> + <arg><option>-i</option> <option><replaceable>index</replaceable></option></arg> + <arg><option>--index</option> <option><replaceable>index</replaceable></option></arg> + </group> + <group> + <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg> + <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg> + </group> + <arg><option>--version</option></arg> + <arg><option>--help</option></arg> + <arg choice="req" rep="repeat"><option><replaceable>font-file</replaceable></option></arg> + + </cmdsynopsis> + </refsynopsisdiv> + <refsect1> + <title>DESCRIPTION</title> + + <para><command>&dhpackage;</command> queries + <replaceable>font-file</replaceable>(s) using the normal fontconfig + rules and prints out font pattern for each face found. + If <option>--index</option> is given, only one face of each file is + queried, otherwise all faces are queried.</para> + + </refsect1> + <refsect1> + <title>OPTIONS</title> + + <para>This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below.</para> + + <variablelist> + <varlistentry> + <term><option>-i</option> + <option>--index</option> + <option><replaceable>index</replaceable></option> + </term> + <listitem> + <para>Only query face indexed <replaceable>index</replaceable> of + each file.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-f</option> + <option>--format</option> + <option><replaceable>format</replaceable></option> + </term> + <listitem> + <para>Format output according to the format specifier + <replaceable>format</replaceable>.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-V</option> + <option>--version</option> + </term> + <listitem> + <para>Show version of the program and exit.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-h</option> + <option>--help</option> + </term> + <listitem> + <para>Show summary of options.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option><replaceable>font-file</replaceable></option> + </term> + <listitem> + <para>Query <replaceable>font-file</replaceable> for font faces.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>RETURN CODES</title> + <para><command>fc-query</command> returns error code 0 for successful parsing, + or 1 if any errors occured or if at least one font face could not be opened.</para> + </refsect1> + + <refsect1> + <title>SEE ALSO</title> + + <para> + <command>fc-scan</command>(1) + <function>FcFreeTypeQuery</function>(3) + <function>FcPatternFormat</function>(3) + <command>fc-cat</command>(1) + <command>fc-cache</command>(1) + <command>fc-list</command>(1) + <command>fc-match</command>(1) + <command>fc-pattern</command>(1) + </para> + + <para>The fontconfig user's guide, in HTML format: + <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para> + + </refsect1> + <refsect1> + <title>AUTHOR</title> + + <para>This manual page was updated by &dhusername; &dhemail;.</para> + + </refsect1> +</refentry> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:2 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:nil +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +--> diff --git a/fontconfig/fc-scan/Makefile.am b/fontconfig/fc-scan/Makefile.am index c786a79e9..c9d8904ae 100644 --- a/fontconfig/fc-scan/Makefile.am +++ b/fontconfig/fc-scan/Makefile.am @@ -1,59 +1,59 @@ -#
-# fontconfig/fc-scan/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-bin_PROGRAMS=fc-scan
-
-DOC2MAN = docbook2man
-
-FC_SCAN_SRC=${top_srcdir}/fc-scan
-
-SGML = ${FC_SCAN_SRC}/fc-scan.sgml
-
-INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS)
-
-BUILT_MANS=fc-scan.1
-
-if ENABLE_DOCS
-man_MANS=${BUILT_MANS}
-endif
-
-EXTRA_DIST=fc-scan.sgml $(BUILT_MANS)
-
-fc_scan_LDADD = ${top_builddir}/src/libfontconfig.la
-
-if USEDOCBOOK
-
-${man_MANS}: ${SGML}
- $(RM) $@
- $(DOC2MAN) ${SGML}
- $(RM) manpage.*
-
-all-local: $(man_MANS)
-
-clean-local:
- $(RM) $(man_MANS)
-
-else
-all-local:
-clean-local:
-endif
+# +# fontconfig/fc-scan/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +bin_PROGRAMS=fc-scan + +DOC2MAN = docbook2man + +FC_SCAN_SRC=${top_srcdir}/fc-scan + +SGML = ${FC_SCAN_SRC}/fc-scan.sgml + +INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) + +BUILT_MANS=fc-scan.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-scan.sgml $(BUILT_MANS) + +fc_scan_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-scan/fc-scan.c b/fontconfig/fc-scan/fc-scan.c index 1843da202..ebf56064e 100644 --- a/fontconfig/fc-scan/fc-scan.c +++ b/fontconfig/fc-scan/fc-scan.c @@ -1,184 +1,184 @@ -/*
- * fontconfig/fc-scan/fc-scan.c
- *
- * Copyright © 2003 Keith Packard
- * Copyright © 2008 Red Hat, Inc.
- * Red Hat Author(s): Behdad Esfahbod
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#else
-#ifdef linux
-#define HAVE_GETOPT_LONG 1
-#endif
-#define HAVE_GETOPT 1
-#endif
-
-#include <fontconfig/fontconfig.h>
-#include <fontconfig/fcfreetype.h>
-#include <stdio.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <string.h>
-
-#ifndef HAVE_GETOPT
-#define HAVE_GETOPT 0
-#endif
-#ifndef HAVE_GETOPT_LONG
-#define HAVE_GETOPT_LONG 0
-#endif
-
-#if HAVE_GETOPT_LONG
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-#include <getopt.h>
-static const struct option longopts[] = {
- {"format", 1, 0, 'f'},
- {"version", 0, 0, 'V'},
- {"help", 0, 0, 'h'},
- {NULL,0,0,0},
-};
-#else
-#if HAVE_GETOPT
-extern char *optarg;
-extern int optind, opterr, optopt;
-#endif
-#endif
-
-static void
-usage (char *program, int error)
-{
- FILE *file = error ? stderr : stdout;
-#if HAVE_GETOPT_LONG
- fprintf (file, "usage: %s [-Vh] [-f FORMAT] [--format FORMAT] [--version] [--help] font-file...\n",
- program);
-#else
- fprintf (file, "usage: %s [-Vh] [-f FORMAT] font-file...\n",
- program);
-#endif
- fprintf (file, "Scan font files and directories, and print resulting pattern(s)\n");
- fprintf (file, "\n");
-#if HAVE_GETOPT_LONG
- fprintf (file, " -f, --format=FORMAT use the given output format\n");
- fprintf (file, " -V, --version display font config version and exit\n");
- fprintf (file, " -h, --help display this help and exit\n");
-#else
- fprintf (file, " -f FORMAT (format) use the given output format\n");
- fprintf (file, " -V (version) display font config version and exit\n");
- fprintf (file, " -h (help) display this help and exit\n");
-#endif
- exit (error);
-}
-
-int
-main (int argc, char **argv)
-{
- FcChar8 *format = NULL;
- int i;
- FcFontSet *fs;
-#if HAVE_GETOPT_LONG || HAVE_GETOPT
- int c;
-
-#if HAVE_GETOPT_LONG
- while ((c = getopt_long (argc, argv, "f:Vh", longopts, NULL)) != -1)
-#else
- while ((c = getopt (argc, argv, "f:Vh")) != -1)
-#endif
- {
- switch (c) {
- case 'f':
- format = (FcChar8 *) strdup (optarg);
- break;
- case 'V':
- fprintf (stderr, "fontconfig version %d.%d.%d\n",
- FC_MAJOR, FC_MINOR, FC_REVISION);
- exit (0);
- case 'h':
- usage (argv[0], 0);
- default:
- usage (argv[0], 1);
- }
- }
- i = optind;
-#else
- i = 1;
-#endif
-
- if (i == argc)
- usage (argv[0], 1);
-
- if (!FcInit ())
- {
- fprintf (stderr, "Can't init font config library\n");
- return 1;
- }
-
- fs = FcFontSetCreate ();
-
- for (; i < argc; i++)
- {
- const FcChar8 *file = (FcChar8*) argv[i];
-
- if (!FcFileIsDir (file))
- FcFileScan (fs, NULL, NULL, NULL, file, FcTrue);
- else
- {
- FcStrSet *dirs = FcStrSetCreate ();
- FcStrList *strlist = FcStrListCreate (dirs);
- do
- {
- FcDirScan (fs, dirs, NULL, NULL, file, FcTrue);
- }
- while ((file = FcStrListNext (strlist)));
- FcStrListDone (strlist);
- FcStrSetDestroy (dirs);
- }
- }
-
- for (i = 0; i < fs->nfont; i++)
- {
- FcPattern *pat;
-
- pat = fs->fonts[i];
-
- if (format)
- {
- FcChar8 *s;
-
- s = FcPatternFormat (pat, format);
- if (s)
- {
- printf ("%s", s);
- free (s);
- }
- }
- else
- {
- FcPatternPrint (pat);
- }
- }
-
- FcFontSetDestroy (fs);
-
- FcFini ();
- return i > 0 ? 0 : 1;
-}
+/* + * fontconfig/fc-scan/fc-scan.c + * + * Copyright © 2003 Keith Packard + * Copyright © 2008 Red Hat, Inc. + * Red Hat Author(s): Behdad Esfahbod + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include <fontconfig/fontconfig.h> +#include <fontconfig/fcfreetype.h> +#include <stdio.h> +#include <unistd.h> +#include <stdlib.h> +#include <string.h> + +#ifndef HAVE_GETOPT +#define HAVE_GETOPT 0 +#endif +#ifndef HAVE_GETOPT_LONG +#define HAVE_GETOPT_LONG 0 +#endif + +#if HAVE_GETOPT_LONG +#undef _GNU_SOURCE +#define _GNU_SOURCE +#include <getopt.h> +static const struct option longopts[] = { + {"format", 1, 0, 'f'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-Vh] [-f FORMAT] [--format FORMAT] [--version] [--help] font-file...\n", + program); +#else + fprintf (file, "usage: %s [-Vh] [-f FORMAT] font-file...\n", + program); +#endif + fprintf (file, "Scan font files and directories, and print resulting pattern(s)\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -f, --format=FORMAT use the given output format\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -f FORMAT (format) use the given output format\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +int +main (int argc, char **argv) +{ + FcChar8 *format = NULL; + int i; + FcFontSet *fs; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "f:Vh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "f:Vh")) != -1) +#endif + { + switch (c) { + case 'f': + format = (FcChar8 *) strdup (optarg); + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (i == argc) + usage (argv[0], 1); + + if (!FcInit ()) + { + fprintf (stderr, "Can't init font config library\n"); + return 1; + } + + fs = FcFontSetCreate (); + + for (; i < argc; i++) + { + const FcChar8 *file = (FcChar8*) argv[i]; + + if (!FcFileIsDir (file)) + FcFileScan (fs, NULL, NULL, NULL, file, FcTrue); + else + { + FcStrSet *dirs = FcStrSetCreate (); + FcStrList *strlist = FcStrListCreate (dirs); + do + { + FcDirScan (fs, dirs, NULL, NULL, file, FcTrue); + } + while ((file = FcStrListNext (strlist))); + FcStrListDone (strlist); + FcStrSetDestroy (dirs); + } + } + + for (i = 0; i < fs->nfont; i++) + { + FcPattern *pat; + + pat = fs->fonts[i]; + + if (format) + { + FcChar8 *s; + + s = FcPatternFormat (pat, format); + if (s) + { + printf ("%s", s); + free (s); + } + } + else + { + FcPatternPrint (pat); + } + } + + FcFontSetDestroy (fs); + + FcFini (); + return i > 0 ? 0 : 1; +} diff --git a/fontconfig/fc-scan/fc-scan.sgml b/fontconfig/fc-scan/fc-scan.sgml index 4c8a88d44..9af403c1f 100644 --- a/fontconfig/fc-scan/fc-scan.sgml +++ b/fontconfig/fc-scan/fc-scan.sgml @@ -1,177 +1,177 @@ -<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [
-
-<!-- Process this file with docbook-to-man to generate an nroff manual
- page: `docbook-to-man manpage.sgml > manpage.1'. You may view
- the manual page with: `docbook-to-man manpage.sgml | nroff -man |
- less'. A typical entry in a Makefile or Makefile.am is:
-
-manpage.1: manpage.sgml
- docbook-to-man $< > $@
-
-
- The docbook-to-man binary is found in the docbook-to-man package.
- Please remember that if you create the nroff version in one of the
- debian/rules file targets (such as build), you will need to include
- docbook-to-man in your Build-Depends control field.
-
- -->
-
- <!-- Fill in your name for FIRSTNAME and SURNAME. -->
- <!ENTITY dhfirstname "<firstname>Behdad</firstname>">
- <!ENTITY dhsurname "<surname>Esfahbod</surname>">
- <!-- Please adjust the date whenever revising the manpage. -->
- <!ENTITY dhdate "<date>Jan 15, 2009</date>">
- <!-- SECTION should be 1-8, maybe w/ subsection other parameters are
- allowed: see man(7), man(1). -->
- <!ENTITY dhsection "<manvolnum>1</manvolnum>">
- <!ENTITY dhemail "<email>behdad@behdad.org</email>">
- <!ENTITY dhusername "Behdad Esfahbod">
- <!ENTITY dhucpackage "<refentrytitle>fc-scan</refentrytitle>">
- <!ENTITY dhpackage "fc-scan">
-
- <!ENTITY gnu "<acronym>GNU</acronym>">
- <!ENTITY gpl "&gnu; <acronym>GPL</acronym>">
-]>
-
-<refentry>
- <refentryinfo>
- <address>
- &dhemail;
- </address>
- <author>
- &dhfirstname;
- &dhsurname;
- </author>
- <copyright>
- <year>2008</year>
- <holder>&dhusername;</holder>
- </copyright>
- &dhdate;
- </refentryinfo>
- <refmeta>
- &dhucpackage;
-
- &dhsection;
- </refmeta>
- <refnamediv>
- <refname>&dhpackage;</refname>
-
- <refpurpose>scan font files or directories</refpurpose>
- </refnamediv>
- <refsynopsisdiv>
- <cmdsynopsis>
- <command>&dhpackage;</command>
-
- <arg><option>-Vh</option></arg>
- <sbr>
- <group>
- <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg>
- <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg>
- </group>
- <arg><option>--version</option></arg>
- <arg><option>--help</option></arg>
- <arg choice="req" rep="repeat"><option><replaceable>file</replaceable></option></arg>
-
- </cmdsynopsis>
- </refsynopsisdiv>
- <refsect1>
- <title>DESCRIPTION</title>
-
- <para><command>&dhpackage;</command> scans
- <replaceable>file</replaceable>(s) recursively
- and prints out font pattern for each face found.</para>
-
- </refsect1>
- <refsect1>
- <title>OPTIONS</title>
-
- <para>This program follows the usual &gnu; command line syntax,
- with long options starting with two dashes (`-'). A summary of
- options is included below.</para>
-
- <variablelist>
- <varlistentry>
- <term><option>-f</option>
- <option>--format</option>
- <option><replaceable>format</replaceable></option>
- </term>
- <listitem>
- <para>Format output according to the format specifier
- <replaceable>format</replaceable>.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-V</option>
- <option>--version</option>
- </term>
- <listitem>
- <para>Show version of the program and exit.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option>-h</option>
- <option>--help</option>
- </term>
- <listitem>
- <para>Show summary of options.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term><option><replaceable>file</replaceable></option>
- </term>
- <listitem>
- <para>Scan <replaceable>file</replaceable> recursively for font faces.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </refsect1>
-
- <refsect1>
- <title>RETURN CODES</title>
- <para><command>fc-scan</command> returns error code 0 if at least one font
- was found or 1 otherwise.</para>
- </refsect1>
-
- <refsect1>
- <title>SEE ALSO</title>
-
- <para>
- <command>fc-query</command>(1)
- <function>FcFileScan</function>(3)
- <function>FcDirScan</function>(3)
- <function>FcPatternFormat</function>(3)
- <command>fc-cat</command>(1)
- <command>fc-cache</command>(1)
- <command>fc-list</command>(1)
- <command>fc-match</command>(1)
- <command>fc-pattern</command>(1)
- </para>
-
- <para>The fontconfig user's guide, in HTML format:
- <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para>
-
- </refsect1>
- <refsect1>
- <title>AUTHOR</title>
-
- <para>This manual page was updated by &dhusername; &dhemail;.</para>
-
- </refsect1>
-</refentry>
-
-<!-- Keep this comment at the end of the file
-Local variables:
-mode: sgml
-sgml-omittag:t
-sgml-shorttag:t
-sgml-minimize-attributes:nil
-sgml-always-quote-attributes:t
-sgml-indent-step:2
-sgml-indent-data:t
-sgml-parent-document:nil
-sgml-default-dtd-file:nil
-sgml-exposed-tags:nil
-sgml-local-catalogs:nil
-sgml-local-ecat-files:nil
-End:
--->
+<!doctype refentry PUBLIC "-//OASIS//DTD DocBook V4.1//EN" [ + +<!-- Process this file with docbook-to-man to generate an nroff manual + page: `docbook-to-man manpage.sgml > manpage.1'. You may view + the manual page with: `docbook-to-man manpage.sgml | nroff -man | + less'. A typical entry in a Makefile or Makefile.am is: + +manpage.1: manpage.sgml + docbook-to-man $< > $@ + + + The docbook-to-man binary is found in the docbook-to-man package. + Please remember that if you create the nroff version in one of the + debian/rules file targets (such as build), you will need to include + docbook-to-man in your Build-Depends control field. + + --> + + <!-- Fill in your name for FIRSTNAME and SURNAME. --> + <!ENTITY dhfirstname "<firstname>Behdad</firstname>"> + <!ENTITY dhsurname "<surname>Esfahbod</surname>"> + <!-- Please adjust the date whenever revising the manpage. --> + <!ENTITY dhdate "<date>Jan 15, 2009</date>"> + <!-- SECTION should be 1-8, maybe w/ subsection other parameters are + allowed: see man(7), man(1). --> + <!ENTITY dhsection "<manvolnum>1</manvolnum>"> + <!ENTITY dhemail "<email>behdad@behdad.org</email>"> + <!ENTITY dhusername "Behdad Esfahbod"> + <!ENTITY dhucpackage "<refentrytitle>fc-scan</refentrytitle>"> + <!ENTITY dhpackage "fc-scan"> + + <!ENTITY gnu "<acronym>GNU</acronym>"> + <!ENTITY gpl "&gnu; <acronym>GPL</acronym>"> +]> + +<refentry> + <refentryinfo> + <address> + &dhemail; + </address> + <author> + &dhfirstname; + &dhsurname; + </author> + <copyright> + <year>2008</year> + <holder>&dhusername;</holder> + </copyright> + &dhdate; + </refentryinfo> + <refmeta> + &dhucpackage; + + &dhsection; + </refmeta> + <refnamediv> + <refname>&dhpackage;</refname> + + <refpurpose>scan font files or directories</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>&dhpackage;</command> + + <arg><option>-Vh</option></arg> + <sbr> + <group> + <arg><option>-f</option> <option><replaceable>format</replaceable></option></arg> + <arg><option>--format</option> <option><replaceable>format</replaceable></option></arg> + </group> + <arg><option>--version</option></arg> + <arg><option>--help</option></arg> + <arg choice="req" rep="repeat"><option><replaceable>file</replaceable></option></arg> + + </cmdsynopsis> + </refsynopsisdiv> + <refsect1> + <title>DESCRIPTION</title> + + <para><command>&dhpackage;</command> scans + <replaceable>file</replaceable>(s) recursively + and prints out font pattern for each face found.</para> + + </refsect1> + <refsect1> + <title>OPTIONS</title> + + <para>This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below.</para> + + <variablelist> + <varlistentry> + <term><option>-f</option> + <option>--format</option> + <option><replaceable>format</replaceable></option> + </term> + <listitem> + <para>Format output according to the format specifier + <replaceable>format</replaceable>.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-V</option> + <option>--version</option> + </term> + <listitem> + <para>Show version of the program and exit.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-h</option> + <option>--help</option> + </term> + <listitem> + <para>Show summary of options.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option><replaceable>file</replaceable></option> + </term> + <listitem> + <para>Scan <replaceable>file</replaceable> recursively for font faces.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>RETURN CODES</title> + <para><command>fc-scan</command> returns error code 0 if at least one font + was found or 1 otherwise.</para> + </refsect1> + + <refsect1> + <title>SEE ALSO</title> + + <para> + <command>fc-query</command>(1) + <function>FcFileScan</function>(3) + <function>FcDirScan</function>(3) + <function>FcPatternFormat</function>(3) + <command>fc-cat</command>(1) + <command>fc-cache</command>(1) + <command>fc-list</command>(1) + <command>fc-match</command>(1) + <command>fc-pattern</command>(1) + </para> + + <para>The fontconfig user's guide, in HTML format: + <filename>/usr/share/doc/fontconfig/fontconfig-user.html</filename>.</para> + + </refsect1> + <refsect1> + <title>AUTHOR</title> + + <para>This manual page was updated by &dhusername; &dhemail;.</para> + + </refsect1> +</refentry> + +<!-- Keep this comment at the end of the file +Local variables: +mode: sgml +sgml-omittag:t +sgml-shorttag:t +sgml-minimize-attributes:nil +sgml-always-quote-attributes:t +sgml-indent-step:2 +sgml-indent-data:t +sgml-parent-document:nil +sgml-default-dtd-file:nil +sgml-exposed-tags:nil +sgml-local-catalogs:nil +sgml-local-ecat-files:nil +End: +--> diff --git a/fontconfig/fontconfig.pc.in b/fontconfig/fontconfig.pc.in index 811419764..7d846a533 100644 --- a/fontconfig/fontconfig.pc.in +++ b/fontconfig/fontconfig.pc.in @@ -1,16 +1,16 @@ -prefix=@prefix@
-exec_prefix=@exec_prefix@
-libdir=@libdir@
-includedir=@includedir@
-sysconfdir=@sysconfdir@
-localstatedir=@localstatedir@
-PACKAGE=@PACKAGE@
-confdir=@confdir@
-cachedir=@fc_cachedir@
-
-Name: Fontconfig
-Description: Font configuration and customization library
-Version: @VERSION@
-Libs: -L${libdir} -lfontconfig
-Libs.private: @LIBXML2_LIBS@ @EXPAT_LIBS@ @FREETYPE_LIBS@ @ICONV_LIBS@
-Cflags: -I${includedir}
+prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +sysconfdir=@sysconfdir@ +localstatedir=@localstatedir@ +PACKAGE=@PACKAGE@ +confdir=@confdir@ +cachedir=@fc_cachedir@ + +Name: Fontconfig +Description: Font configuration and customization library +Version: @VERSION@ +Libs: -L${libdir} -lfontconfig +Libs.private: @LIBXML2_LIBS@ @EXPAT_LIBS@ @FREETYPE_LIBS@ @ICONV_LIBS@ +Cflags: -I${includedir} diff --git a/fontconfig/fontconfig/fcfreetype.h b/fontconfig/fontconfig/fcfreetype.h index 09799dc9d..753fdf9da 100644 --- a/fontconfig/fontconfig/fcfreetype.h +++ b/fontconfig/fontconfig/fcfreetype.h @@ -1,59 +1,59 @@ -/*
- * fontconfig/fontconfig/fcfreetype.h
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _FCFREETYPE_H_
-#define _FCFREETYPE_H_
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#ifndef FcPublic
-#define FcPublic
-#endif
-
-_FCFUNCPROTOBEGIN
-
-FcPublic FT_UInt
-FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4);
-
-FcPublic FcCharSet *
-FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing);
-
-FcPublic FcCharSet *
-FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks);
-
-FcPublic FcResult
-FcPatternGetFTFace (const FcPattern *p, const char *object, int n, FT_Face *f);
-
-FcPublic FcBool
-FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f);
-
-FcPublic FcPattern *
-FcFreeTypeQueryFace (const FT_Face face,
- const FcChar8 *file,
- int id,
- FcBlanks *blanks);
-
-_FCFUNCPROTOEND
-
-#endif
+/* + * fontconfig/fontconfig/fcfreetype.h + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _FCFREETYPE_H_ +#define _FCFREETYPE_H_ +#include <ft2build.h> +#include FT_FREETYPE_H + +#ifndef FcPublic +#define FcPublic +#endif + +_FCFUNCPROTOBEGIN + +FcPublic FT_UInt +FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4); + +FcPublic FcCharSet * +FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing); + +FcPublic FcCharSet * +FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks); + +FcPublic FcResult +FcPatternGetFTFace (const FcPattern *p, const char *object, int n, FT_Face *f); + +FcPublic FcBool +FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f); + +FcPublic FcPattern * +FcFreeTypeQueryFace (const FT_Face face, + const FcChar8 *file, + int id, + FcBlanks *blanks); + +_FCFUNCPROTOEND + +#endif diff --git a/fontconfig/fontconfig/fcprivate.h b/fontconfig/fontconfig/fcprivate.h index e65ff9cc5..18b8c08ca 100644 --- a/fontconfig/fontconfig/fcprivate.h +++ b/fontconfig/fontconfig/fcprivate.h @@ -1,123 +1,123 @@ -/*
- * fontconfig/fontconfig/fcprivate.h
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _FCPRIVATE_H_
-#define _FCPRIVATE_H_
-
-/*
- * I tried this with functions that took va_list* arguments
- * but portability concerns made me change these functions
- * into macros (sigh).
- */
-
-#define FcPatternVapBuild(result, orig, va) \
-{ \
- FcPattern *__p__ = (orig); \
- const char *__o__; \
- FcValue __v__; \
- \
- if (!__p__) \
- { \
- __p__ = FcPatternCreate (); \
- if (!__p__) \
- goto _FcPatternVapBuild_bail0; \
- } \
- for (;;) \
- { \
- __o__ = va_arg (va, const char *); \
- if (!__o__) \
- break; \
- __v__.type = va_arg (va, FcType); \
- switch (__v__.type) { \
- case FcTypeVoid: \
- goto _FcPatternVapBuild_bail1; \
- case FcTypeInteger: \
- __v__.u.i = va_arg (va, int); \
- break; \
- case FcTypeDouble: \
- __v__.u.d = va_arg (va, double); \
- break; \
- case FcTypeString: \
- __v__.u.s = va_arg (va, const FcChar8 *); \
- break; \
- case FcTypeBool: \
- __v__.u.b = va_arg (va, FcBool); \
- break; \
- case FcTypeMatrix: \
- __v__.u.m = va_arg (va, const FcMatrix *); \
- break; \
- case FcTypeCharSet: \
- __v__.u.c = va_arg (va, const FcCharSet *); \
- break; \
- case FcTypeFTFace: \
- __v__.u.f = va_arg (va, FT_Face); \
- break; \
- case FcTypeLangSet: \
- __v__.u.l = va_arg (va, const FcLangSet *); \
- break; \
- } \
- if (!FcPatternAdd (__p__, __o__, __v__, FcTrue)) \
- goto _FcPatternVapBuild_bail1; \
- } \
- result = __p__; \
- goto _FcPatternVapBuild_return; \
- \
-_FcPatternVapBuild_bail1: \
- if (!orig) \
- FcPatternDestroy (__p__); \
-_FcPatternVapBuild_bail0: \
- result = (void*)0; \
- \
-_FcPatternVapBuild_return: \
- ; \
-}
-
-
-#define FcObjectSetVapBuild(__ret__, __first__, __va__) \
-{ \
- FcObjectSet *__os__; \
- const char *__ob__; \
- \
- __ret__ = 0; \
- __os__ = FcObjectSetCreate (); \
- if (!__os__) \
- goto _FcObjectSetVapBuild_bail0; \
- __ob__ = __first__; \
- while (__ob__) \
- { \
- if (!FcObjectSetAdd (__os__, __ob__)) \
- goto _FcObjectSetVapBuild_bail1; \
- __ob__ = va_arg (__va__, const char *); \
- } \
- __ret__ = __os__; \
- \
-_FcObjectSetVapBuild_bail1: \
- if (!__ret__ && __os__) \
- FcObjectSetDestroy (__os__); \
-_FcObjectSetVapBuild_bail0: \
- ; \
-}
-
-#endif /* _FCPRIVATE_H_ */
-
+/* + * fontconfig/fontconfig/fcprivate.h + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _FCPRIVATE_H_ +#define _FCPRIVATE_H_ + +/* + * I tried this with functions that took va_list* arguments + * but portability concerns made me change these functions + * into macros (sigh). + */ + +#define FcPatternVapBuild(result, orig, va) \ +{ \ + FcPattern *__p__ = (orig); \ + const char *__o__; \ + FcValue __v__; \ + \ + if (!__p__) \ + { \ + __p__ = FcPatternCreate (); \ + if (!__p__) \ + goto _FcPatternVapBuild_bail0; \ + } \ + for (;;) \ + { \ + __o__ = va_arg (va, const char *); \ + if (!__o__) \ + break; \ + __v__.type = va_arg (va, FcType); \ + switch (__v__.type) { \ + case FcTypeVoid: \ + goto _FcPatternVapBuild_bail1; \ + case FcTypeInteger: \ + __v__.u.i = va_arg (va, int); \ + break; \ + case FcTypeDouble: \ + __v__.u.d = va_arg (va, double); \ + break; \ + case FcTypeString: \ + __v__.u.s = va_arg (va, const FcChar8 *); \ + break; \ + case FcTypeBool: \ + __v__.u.b = va_arg (va, FcBool); \ + break; \ + case FcTypeMatrix: \ + __v__.u.m = va_arg (va, const FcMatrix *); \ + break; \ + case FcTypeCharSet: \ + __v__.u.c = va_arg (va, const FcCharSet *); \ + break; \ + case FcTypeFTFace: \ + __v__.u.f = va_arg (va, FT_Face); \ + break; \ + case FcTypeLangSet: \ + __v__.u.l = va_arg (va, const FcLangSet *); \ + break; \ + } \ + if (!FcPatternAdd (__p__, __o__, __v__, FcTrue)) \ + goto _FcPatternVapBuild_bail1; \ + } \ + result = __p__; \ + goto _FcPatternVapBuild_return; \ + \ +_FcPatternVapBuild_bail1: \ + if (!orig) \ + FcPatternDestroy (__p__); \ +_FcPatternVapBuild_bail0: \ + result = (void*)0; \ + \ +_FcPatternVapBuild_return: \ + ; \ +} + + +#define FcObjectSetVapBuild(__ret__, __first__, __va__) \ +{ \ + FcObjectSet *__os__; \ + const char *__ob__; \ + \ + __ret__ = 0; \ + __os__ = FcObjectSetCreate (); \ + if (!__os__) \ + goto _FcObjectSetVapBuild_bail0; \ + __ob__ = __first__; \ + while (__ob__) \ + { \ + if (!FcObjectSetAdd (__os__, __ob__)) \ + goto _FcObjectSetVapBuild_bail1; \ + __ob__ = va_arg (__va__, const char *); \ + } \ + __ret__ = __os__; \ + \ +_FcObjectSetVapBuild_bail1: \ + if (!__ret__ && __os__) \ + FcObjectSetDestroy (__os__); \ +_FcObjectSetVapBuild_bail0: \ + ; \ +} + +#endif /* _FCPRIVATE_H_ */ + diff --git a/fontconfig/fontconfig/fontconfig.h b/fontconfig/fontconfig/fontconfig.h index 45b23dd23..29a6ed460 100644 --- a/fontconfig/fontconfig/fontconfig.h +++ b/fontconfig/fontconfig/fontconfig.h @@ -1,974 +1,974 @@ -/*
- * fontconfig/fontconfig/fontconfig.h
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _FONTCONFIG_H_
-#define _FONTCONFIG_H_
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <stdarg.h>
-
-#if defined(__GNUC__) && (__GNUC__ >= 4)
-#define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0)))
-#else
-#define FC_ATTRIBUTE_SENTINEL(x)
-#endif
-
-#ifndef FcPublic
-#define FcPublic
-#endif
-
-typedef unsigned char FcChar8;
-typedef unsigned short FcChar16;
-typedef unsigned int FcChar32;
-typedef int FcBool;
-
-/*
- * Current Fontconfig version number. This same number
- * must appear in the fontconfig configure.in file. Yes,
- * it'a a pain to synchronize version numbers like this.
- */
-
-#define FC_MAJOR 2
-#define FC_MINOR 8
-#define FC_REVISION 0
-
-#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION))
-
-/*
- * Current font cache file format version
- * This is appended to the cache files so that multiple
- * versions of the library will peacefully coexist
- *
- * Change this value whenever the disk format for the cache file
- * changes in any non-compatible way. Try to avoid such changes as
- * it means multiple copies of the font information.
- */
-
-#define FC_CACHE_VERSION "3"
-
-#define FcTrue 1
-#define FcFalse 0
-
-#define FC_FAMILY "family" /* String */
-#define FC_STYLE "style" /* String */
-#define FC_SLANT "slant" /* Int */
-#define FC_WEIGHT "weight" /* Int */
-#define FC_SIZE "size" /* Double */
-#define FC_ASPECT "aspect" /* Double */
-#define FC_PIXEL_SIZE "pixelsize" /* Double */
-#define FC_SPACING "spacing" /* Int */
-#define FC_FOUNDRY "foundry" /* String */
-#define FC_ANTIALIAS "antialias" /* Bool (depends) */
-#define FC_HINTING "hinting" /* Bool (true) */
-#define FC_HINT_STYLE "hintstyle" /* Int */
-#define FC_VERTICAL_LAYOUT "verticallayout" /* Bool (false) */
-#define FC_AUTOHINT "autohint" /* Bool (false) */
-#define FC_GLOBAL_ADVANCE "globaladvance" /* Bool (true) */
-#define FC_WIDTH "width" /* Int */
-#define FC_FILE "file" /* String */
-#define FC_INDEX "index" /* Int */
-#define FC_FT_FACE "ftface" /* FT_Face */
-#define FC_RASTERIZER "rasterizer" /* String */
-#define FC_OUTLINE "outline" /* Bool */
-#define FC_SCALABLE "scalable" /* Bool */
-#define FC_SCALE "scale" /* double */
-#define FC_DPI "dpi" /* double */
-#define FC_RGBA "rgba" /* Int */
-#define FC_MINSPACE "minspace" /* Bool use minimum line spacing */
-#define FC_SOURCE "source" /* String (deprecated) */
-#define FC_CHARSET "charset" /* CharSet */
-#define FC_LANG "lang" /* String RFC 3066 langs */
-#define FC_FONTVERSION "fontversion" /* Int from 'head' table */
-#define FC_FULLNAME "fullname" /* String */
-#define FC_FAMILYLANG "familylang" /* String RFC 3066 langs */
-#define FC_STYLELANG "stylelang" /* String RFC 3066 langs */
-#define FC_FULLNAMELANG "fullnamelang" /* String RFC 3066 langs */
-#define FC_CAPABILITY "capability" /* String */
-#define FC_FONTFORMAT "fontformat" /* String */
-#define FC_EMBOLDEN "embolden" /* Bool - true if emboldening needed*/
-#define FC_EMBEDDED_BITMAP "embeddedbitmap" /* Bool - true to enable embedded bitmaps */
-#define FC_DECORATIVE "decorative" /* Bool - true if style is a decorative variant */
-#define FC_LCD_FILTER "lcdfilter" /* Int */
-
-#define FC_CACHE_SUFFIX ".cache-"FC_CACHE_VERSION
-#define FC_DIR_CACHE_FILE "fonts.cache-"FC_CACHE_VERSION
-#define FC_USER_CACHE_FILE ".fonts.cache-"FC_CACHE_VERSION
-
-/* Adjust outline rasterizer */
-#define FC_CHAR_WIDTH "charwidth" /* Int */
-#define FC_CHAR_HEIGHT "charheight"/* Int */
-#define FC_MATRIX "matrix" /* FcMatrix */
-
-#define FC_WEIGHT_THIN 0
-#define FC_WEIGHT_EXTRALIGHT 40
-#define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT
-#define FC_WEIGHT_LIGHT 50
-#define FC_WEIGHT_BOOK 75
-#define FC_WEIGHT_REGULAR 80
-#define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR
-#define FC_WEIGHT_MEDIUM 100
-#define FC_WEIGHT_DEMIBOLD 180
-#define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD
-#define FC_WEIGHT_BOLD 200
-#define FC_WEIGHT_EXTRABOLD 205
-#define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD
-#define FC_WEIGHT_BLACK 210
-#define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK
-#define FC_WEIGHT_EXTRABLACK 215
-#define FC_WEIGHT_ULTRABLACK FC_WEIGHT_EXTRABLACK
-
-#define FC_SLANT_ROMAN 0
-#define FC_SLANT_ITALIC 100
-#define FC_SLANT_OBLIQUE 110
-
-#define FC_WIDTH_ULTRACONDENSED 50
-#define FC_WIDTH_EXTRACONDENSED 63
-#define FC_WIDTH_CONDENSED 75
-#define FC_WIDTH_SEMICONDENSED 87
-#define FC_WIDTH_NORMAL 100
-#define FC_WIDTH_SEMIEXPANDED 113
-#define FC_WIDTH_EXPANDED 125
-#define FC_WIDTH_EXTRAEXPANDED 150
-#define FC_WIDTH_ULTRAEXPANDED 200
-
-#define FC_PROPORTIONAL 0
-#define FC_DUAL 90
-#define FC_MONO 100
-#define FC_CHARCELL 110
-
-/* sub-pixel order */
-#define FC_RGBA_UNKNOWN 0
-#define FC_RGBA_RGB 1
-#define FC_RGBA_BGR 2
-#define FC_RGBA_VRGB 3
-#define FC_RGBA_VBGR 4
-#define FC_RGBA_NONE 5
-
-/* hinting style */
-#define FC_HINT_NONE 0
-#define FC_HINT_SLIGHT 1
-#define FC_HINT_MEDIUM 2
-#define FC_HINT_FULL 3
-
-/* LCD filter */
-#define FC_LCD_NONE 0
-#define FC_LCD_DEFAULT 1
-#define FC_LCD_LIGHT 2
-#define FC_LCD_LEGACY 3
-
-typedef enum _FcType {
- FcTypeVoid,
- FcTypeInteger,
- FcTypeDouble,
- FcTypeString,
- FcTypeBool,
- FcTypeMatrix,
- FcTypeCharSet,
- FcTypeFTFace,
- FcTypeLangSet
-} FcType;
-
-typedef struct _FcMatrix {
- double xx, xy, yx, yy;
-} FcMatrix;
-
-#define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \
- (m)->xy = (m)->yx = 0)
-
-/*
- * A data structure to represent the available glyphs in a font.
- * This is represented as a sparse boolean btree.
- */
-
-typedef struct _FcCharSet FcCharSet;
-
-typedef struct _FcObjectType {
- const char *object;
- FcType type;
-} FcObjectType;
-
-typedef struct _FcConstant {
- const FcChar8 *name;
- const char *object;
- int value;
-} FcConstant;
-
-typedef enum _FcResult {
- FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId,
- FcResultOutOfMemory
-} FcResult;
-
-typedef struct _FcPattern FcPattern;
-
-typedef struct _FcLangSet FcLangSet;
-
-typedef struct _FcValue {
- FcType type;
- union {
- const FcChar8 *s;
- int i;
- FcBool b;
- double d;
- const FcMatrix *m;
- const FcCharSet *c;
- void *f;
- const FcLangSet *l;
- } u;
-} FcValue;
-
-typedef struct _FcFontSet {
- int nfont;
- int sfont;
- FcPattern **fonts;
-} FcFontSet;
-
-typedef struct _FcObjectSet {
- int nobject;
- int sobject;
- const char **objects;
-} FcObjectSet;
-
-typedef enum _FcMatchKind {
- FcMatchPattern, FcMatchFont, FcMatchScan
-} FcMatchKind;
-
-typedef enum _FcLangResult {
- FcLangEqual = 0,
- FcLangDifferentCountry = 1,
- FcLangDifferentTerritory = 1,
- FcLangDifferentLang = 2
-} FcLangResult;
-
-typedef enum _FcSetName {
- FcSetSystem = 0,
- FcSetApplication = 1
-} FcSetName;
-
-typedef struct _FcAtomic FcAtomic;
-
-#if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */
-#define _FCFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */
-#define _FCFUNCPROTOEND }
-#else
-#define _FCFUNCPROTOBEGIN
-#define _FCFUNCPROTOEND
-#endif
-
-typedef enum { FcEndianBig, FcEndianLittle } FcEndian;
-
-typedef struct _FcConfig FcConfig;
-
-typedef struct _FcGlobalCache FcFileCache;
-
-typedef struct _FcBlanks FcBlanks;
-
-typedef struct _FcStrList FcStrList;
-
-typedef struct _FcStrSet FcStrSet;
-
-typedef struct _FcCache FcCache;
-
-_FCFUNCPROTOBEGIN
-
-/* fcblanks.c */
-FcPublic FcBlanks *
-FcBlanksCreate (void);
-
-FcPublic void
-FcBlanksDestroy (FcBlanks *b);
-
-FcPublic FcBool
-FcBlanksAdd (FcBlanks *b, FcChar32 ucs4);
-
-FcPublic FcBool
-FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4);
-
-/* fccache.c */
-
-FcPublic const FcChar8 *
-FcCacheDir(const FcCache *c);
-
-FcPublic FcFontSet *
-FcCacheCopySet(const FcCache *c);
-
-FcPublic const FcChar8 *
-FcCacheSubdir (const FcCache *c, int i);
-
-FcPublic int
-FcCacheNumSubdir (const FcCache *c);
-
-FcPublic int
-FcCacheNumFont (const FcCache *c);
-
-FcPublic FcBool
-FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config);
-
-FcPublic FcBool
-FcDirCacheValid (const FcChar8 *cache_file);
-
-/* fccfg.c */
-FcPublic FcChar8 *
-FcConfigHome (void);
-
-FcPublic FcBool
-FcConfigEnableHome (FcBool enable);
-
-FcPublic FcChar8 *
-FcConfigFilename (const FcChar8 *url);
-
-FcPublic FcConfig *
-FcConfigCreate (void);
-
-FcPublic FcConfig *
-FcConfigReference (FcConfig *config);
-
-FcPublic void
-FcConfigDestroy (FcConfig *config);
-
-FcPublic FcBool
-FcConfigSetCurrent (FcConfig *config);
-
-FcPublic FcConfig *
-FcConfigGetCurrent (void);
-
-FcPublic FcBool
-FcConfigUptoDate (FcConfig *config);
-
-FcPublic FcBool
-FcConfigBuildFonts (FcConfig *config);
-
-FcPublic FcStrList *
-FcConfigGetFontDirs (FcConfig *config);
-
-FcPublic FcStrList *
-FcConfigGetConfigDirs (FcConfig *config);
-
-FcPublic FcStrList *
-FcConfigGetConfigFiles (FcConfig *config);
-
-FcPublic FcChar8 *
-FcConfigGetCache (FcConfig *config);
-
-FcPublic FcBlanks *
-FcConfigGetBlanks (FcConfig *config);
-
-FcPublic FcStrList *
-FcConfigGetCacheDirs (FcConfig *config);
-
-FcPublic int
-FcConfigGetRescanInterval (FcConfig *config);
-
-FcPublic FcBool
-FcConfigSetRescanInterval (FcConfig *config, int rescanInterval);
-
-FcPublic FcFontSet *
-FcConfigGetFonts (FcConfig *config,
- FcSetName set);
-
-FcPublic FcBool
-FcConfigAppFontAddFile (FcConfig *config,
- const FcChar8 *file);
-
-FcPublic FcBool
-FcConfigAppFontAddDir (FcConfig *config,
- const FcChar8 *dir);
-
-FcPublic void
-FcConfigAppFontClear (FcConfig *config);
-
-FcPublic FcBool
-FcConfigSubstituteWithPat (FcConfig *config,
- FcPattern *p,
- FcPattern *p_pat,
- FcMatchKind kind);
-
-FcPublic FcBool
-FcConfigSubstitute (FcConfig *config,
- FcPattern *p,
- FcMatchKind kind);
-
-/* fccharset.c */
-FcPublic FcCharSet*
-FcCharSetCreate (void);
-
-/* deprecated alias for FcCharSetCreate */
-FcPublic FcCharSet *
-FcCharSetNew (void);
-
-FcPublic void
-FcCharSetDestroy (FcCharSet *fcs);
-
-FcPublic FcBool
-FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4);
-
-FcPublic FcBool
-FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4);
-
-FcPublic FcCharSet*
-FcCharSetCopy (FcCharSet *src);
-
-FcPublic FcBool
-FcCharSetEqual (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcCharSet*
-FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcCharSet*
-FcCharSetUnion (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcCharSet*
-FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcBool
-FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed);
-
-FcPublic FcBool
-FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4);
-
-FcPublic FcChar32
-FcCharSetCount (const FcCharSet *a);
-
-FcPublic FcChar32
-FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcChar32
-FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b);
-
-FcPublic FcBool
-FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b);
-
-#define FC_CHARSET_MAP_SIZE (256/32)
-#define FC_CHARSET_DONE ((FcChar32) -1)
-
-FcPublic FcChar32
-FcCharSetFirstPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next);
-
-FcPublic FcChar32
-FcCharSetNextPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next);
-
-/*
- * old coverage API, rather hard to use correctly
- */
-
-FcPublic FcChar32
-FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result);
-
-/* fcdbg.c */
-FcPublic void
-FcValuePrint (const FcValue v);
-
-FcPublic void
-FcPatternPrint (const FcPattern *p);
-
-FcPublic void
-FcFontSetPrint (const FcFontSet *s);
-
-/* fcdefault.c */
-FcPublic void
-FcDefaultSubstitute (FcPattern *pattern);
-
-/* fcdir.c */
-FcPublic FcBool
-FcFileIsDir (const FcChar8 *file);
-
-FcPublic FcBool
-FcFileScan (FcFontSet *set,
- FcStrSet *dirs,
- FcFileCache *cache,
- FcBlanks *blanks,
- const FcChar8 *file,
- FcBool force);
-
-FcPublic FcBool
-FcDirScan (FcFontSet *set,
- FcStrSet *dirs,
- FcFileCache *cache,
- FcBlanks *blanks,
- const FcChar8 *dir,
- FcBool force);
-
-FcPublic FcBool
-FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir);
-
-FcPublic FcCache *
-FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file);
-
-FcPublic FcCache *
-FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config);
-
-FcPublic FcCache *
-FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat);
-
-FcPublic void
-FcDirCacheUnload (FcCache *cache);
-
-/* fcfreetype.c */
-FcPublic FcPattern *
-FcFreeTypeQuery (const FcChar8 *file, int id, FcBlanks *blanks, int *count);
-
-/* fcfs.c */
-
-FcPublic FcFontSet *
-FcFontSetCreate (void);
-
-FcPublic void
-FcFontSetDestroy (FcFontSet *s);
-
-FcPublic FcBool
-FcFontSetAdd (FcFontSet *s, FcPattern *font);
-
-/* fcinit.c */
-FcPublic FcConfig *
-FcInitLoadConfig (void);
-
-FcPublic FcConfig *
-FcInitLoadConfigAndFonts (void);
-
-FcPublic FcBool
-FcInit (void);
-
-FcPublic void
-FcFini (void);
-
-FcPublic int
-FcGetVersion (void);
-
-FcPublic FcBool
-FcInitReinitialize (void);
-
-FcPublic FcBool
-FcInitBringUptoDate (void);
-
-/* fclang.c */
-FcPublic FcStrSet *
-FcGetLangs (void);
-
-FcPublic const FcCharSet *
-FcLangGetCharSet (const FcChar8 *lang);
-
-FcPublic FcLangSet*
-FcLangSetCreate (void);
-
-FcPublic void
-FcLangSetDestroy (FcLangSet *ls);
-
-FcPublic FcLangSet*
-FcLangSetCopy (const FcLangSet *ls);
-
-FcPublic FcBool
-FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang);
-
-FcPublic FcBool
-FcLangSetDel (FcLangSet *ls, const FcChar8 *lang);
-
-FcPublic FcLangResult
-FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang);
-
-FcPublic FcLangResult
-FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb);
-
-FcPublic FcBool
-FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb);
-
-FcPublic FcBool
-FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb);
-
-FcPublic FcChar32
-FcLangSetHash (const FcLangSet *ls);
-
-FcPublic FcStrSet *
-FcLangSetGetLangs (const FcLangSet *ls);
-
-FcLangSet *
-FcLangSetUnion (const FcLangSet *a, const FcLangSet *b);
-
-FcLangSet *
-FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b);
-
-/* fclist.c */
-FcPublic FcObjectSet *
-FcObjectSetCreate (void);
-
-FcPublic FcBool
-FcObjectSetAdd (FcObjectSet *os, const char *object);
-
-FcPublic void
-FcObjectSetDestroy (FcObjectSet *os);
-
-FcPublic FcObjectSet *
-FcObjectSetVaBuild (const char *first, va_list va);
-
-FcPublic FcObjectSet *
-FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL(0);
-
-FcPublic FcFontSet *
-FcFontSetList (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcObjectSet *os);
-
-FcPublic FcFontSet *
-FcFontList (FcConfig *config,
- FcPattern *p,
- FcObjectSet *os);
-
-/* fcatomic.c */
-
-FcPublic FcAtomic *
-FcAtomicCreate (const FcChar8 *file);
-
-FcPublic FcBool
-FcAtomicLock (FcAtomic *atomic);
-
-FcPublic FcChar8 *
-FcAtomicNewFile (FcAtomic *atomic);
-
-FcPublic FcChar8 *
-FcAtomicOrigFile (FcAtomic *atomic);
-
-FcPublic FcBool
-FcAtomicReplaceOrig (FcAtomic *atomic);
-
-FcPublic void
-FcAtomicDeleteNew (FcAtomic *atomic);
-
-FcPublic void
-FcAtomicUnlock (FcAtomic *atomic);
-
-FcPublic void
-FcAtomicDestroy (FcAtomic *atomic);
-
-/* fcmatch.c */
-FcPublic FcPattern *
-FcFontSetMatch (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcResult *result);
-
-FcPublic FcPattern *
-FcFontMatch (FcConfig *config,
- FcPattern *p,
- FcResult *result);
-
-FcPublic FcPattern *
-FcFontRenderPrepare (FcConfig *config,
- FcPattern *pat,
- FcPattern *font);
-
-FcPublic FcFontSet *
-FcFontSetSort (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcBool trim,
- FcCharSet **csp,
- FcResult *result);
-
-FcPublic FcFontSet *
-FcFontSort (FcConfig *config,
- FcPattern *p,
- FcBool trim,
- FcCharSet **csp,
- FcResult *result);
-
-FcPublic void
-FcFontSetSortDestroy (FcFontSet *fs);
-
-/* fcmatrix.c */
-FcPublic FcMatrix *
-FcMatrixCopy (const FcMatrix *mat);
-
-FcPublic FcBool
-FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2);
-
-FcPublic void
-FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b);
-
-FcPublic void
-FcMatrixRotate (FcMatrix *m, double c, double s);
-
-FcPublic void
-FcMatrixScale (FcMatrix *m, double sx, double sy);
-
-FcPublic void
-FcMatrixShear (FcMatrix *m, double sh, double sv);
-
-/* fcname.c */
-
-FcPublic FcBool
-FcNameRegisterObjectTypes (const FcObjectType *types, int ntype);
-
-FcPublic FcBool
-FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype);
-
-FcPublic const FcObjectType *
-FcNameGetObjectType (const char *object);
-
-FcPublic FcBool
-FcNameRegisterConstants (const FcConstant *consts, int nconsts);
-
-FcPublic FcBool
-FcNameUnregisterConstants (const FcConstant *consts, int nconsts);
-
-FcPublic const FcConstant *
-FcNameGetConstant (FcChar8 *string);
-
-FcPublic FcBool
-FcNameConstant (FcChar8 *string, int *result);
-
-FcPublic FcPattern *
-FcNameParse (const FcChar8 *name);
-
-FcPublic FcChar8 *
-FcNameUnparse (FcPattern *pat);
-
-/* fcpat.c */
-FcPublic FcPattern *
-FcPatternCreate (void);
-
-FcPublic FcPattern *
-FcPatternDuplicate (const FcPattern *p);
-
-FcPublic void
-FcPatternReference (FcPattern *p);
-
-FcPublic FcPattern *
-FcPatternFilter (FcPattern *p, const FcObjectSet *os);
-
-FcPublic void
-FcValueDestroy (FcValue v);
-
-FcPublic FcBool
-FcValueEqual (FcValue va, FcValue vb);
-
-FcPublic FcValue
-FcValueSave (FcValue v);
-
-FcPublic void
-FcPatternDestroy (FcPattern *p);
-
-FcPublic FcBool
-FcPatternEqual (const FcPattern *pa, const FcPattern *pb);
-
-FcPublic FcBool
-FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os);
-
-FcPublic FcChar32
-FcPatternHash (const FcPattern *p);
-
-FcPublic FcBool
-FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append);
-
-FcPublic FcBool
-FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append);
-
-FcPublic FcResult
-FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v);
-
-FcPublic FcBool
-FcPatternDel (FcPattern *p, const char *object);
-
-FcPublic FcBool
-FcPatternRemove (FcPattern *p, const char *object, int id);
-
-FcPublic FcBool
-FcPatternAddInteger (FcPattern *p, const char *object, int i);
-
-FcPublic FcBool
-FcPatternAddDouble (FcPattern *p, const char *object, double d);
-
-FcPublic FcBool
-FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s);
-
-FcPublic FcBool
-FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s);
-
-FcPublic FcBool
-FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c);
-
-FcPublic FcBool
-FcPatternAddBool (FcPattern *p, const char *object, FcBool b);
-
-FcPublic FcBool
-FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls);
-
-FcPublic FcResult
-FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i);
-
-FcPublic FcResult
-FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d);
-
-FcPublic FcResult
-FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 ** s);
-
-FcPublic FcResult
-FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s);
-
-FcPublic FcResult
-FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c);
-
-FcPublic FcResult
-FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b);
-
-FcPublic FcResult
-FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls);
-
-FcPublic FcPattern *
-FcPatternVaBuild (FcPattern *p, va_list va);
-
-FcPublic FcPattern *
-FcPatternBuild (FcPattern *p, ...) FC_ATTRIBUTE_SENTINEL(0);
-
-FcPublic FcChar8 *
-FcPatternFormat (FcPattern *pat, const FcChar8 *format);
-
-/* fcstr.c */
-
-FcPublic FcChar8 *
-FcStrCopy (const FcChar8 *s);
-
-FcPublic FcChar8 *
-FcStrCopyFilename (const FcChar8 *s);
-
-FcPublic FcChar8 *
-FcStrPlus (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic void
-FcStrFree (FcChar8 *s);
-
-/* These are ASCII only, suitable only for pattern element names */
-#define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132))
-#define FcIsLower(c) ((0141 <= (c) && (c) <= 0172))
-#define FcToLower(c) (FcIsUpper(c) ? (c) - 0101 + 0141 : (c))
-
-FcPublic FcChar8 *
-FcStrDowncase (const FcChar8 *s);
-
-FcPublic int
-FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic int
-FcStrCmp (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic const FcChar8 *
-FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic const FcChar8 *
-FcStrStr (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPublic int
-FcUtf8ToUcs4 (const FcChar8 *src_orig,
- FcChar32 *dst,
- int len);
-
-FcPublic FcBool
-FcUtf8Len (const FcChar8 *string,
- int len,
- int *nchar,
- int *wchar);
-
-#define FC_UTF8_MAX_LEN 6
-
-FcPublic int
-FcUcs4ToUtf8 (FcChar32 ucs4,
- FcChar8 dest[FC_UTF8_MAX_LEN]);
-
-FcPublic int
-FcUtf16ToUcs4 (const FcChar8 *src_orig,
- FcEndian endian,
- FcChar32 *dst,
- int len); /* in bytes */
-
-FcPublic FcBool
-FcUtf16Len (const FcChar8 *string,
- FcEndian endian,
- int len, /* in bytes */
- int *nchar,
- int *wchar);
-
-FcPublic FcChar8 *
-FcStrDirname (const FcChar8 *file);
-
-FcPublic FcChar8 *
-FcStrBasename (const FcChar8 *file);
-
-FcPublic FcStrSet *
-FcStrSetCreate (void);
-
-FcPublic FcBool
-FcStrSetMember (FcStrSet *set, const FcChar8 *s);
-
-FcPublic FcBool
-FcStrSetEqual (FcStrSet *sa, FcStrSet *sb);
-
-FcPublic FcBool
-FcStrSetAdd (FcStrSet *set, const FcChar8 *s);
-
-FcPublic FcBool
-FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s);
-
-FcPublic FcBool
-FcStrSetDel (FcStrSet *set, const FcChar8 *s);
-
-FcPublic void
-FcStrSetDestroy (FcStrSet *set);
-
-FcPublic FcStrList *
-FcStrListCreate (FcStrSet *set);
-
-FcPublic FcChar8 *
-FcStrListNext (FcStrList *list);
-
-FcPublic void
-FcStrListDone (FcStrList *list);
-
-/* fcxml.c */
-FcPublic FcBool
-FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain);
-
-_FCFUNCPROTOEND
-
-#undef FC_ATTRIBUTE_SENTINEL
-
-
-#ifndef _FCINT_H_
-
-/*
- * Deprecated functions are placed here to help users fix their code without
- * digging through documentation
- */
-
-#define FcConfigGetRescanInverval FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval
-#define FcConfigSetRescanInverval FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval
-
-#endif
-
-#endif /* _FONTCONFIG_H_ */
+/* + * fontconfig/fontconfig/fontconfig.h + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _FONTCONFIG_H_ +#define _FONTCONFIG_H_ + +#include <sys/types.h> +#include <sys/stat.h> +#include <stdarg.h> + +#if defined(__GNUC__) && (__GNUC__ >= 4) +#define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0))) +#else +#define FC_ATTRIBUTE_SENTINEL(x) +#endif + +#ifndef FcPublic +#define FcPublic +#endif + +typedef unsigned char FcChar8; +typedef unsigned short FcChar16; +typedef unsigned int FcChar32; +typedef int FcBool; + +/* + * Current Fontconfig version number. This same number + * must appear in the fontconfig configure.in file. Yes, + * it'a a pain to synchronize version numbers like this. + */ + +#define FC_MAJOR 2 +#define FC_MINOR 8 +#define FC_REVISION 0 + +#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION)) + +/* + * Current font cache file format version + * This is appended to the cache files so that multiple + * versions of the library will peacefully coexist + * + * Change this value whenever the disk format for the cache file + * changes in any non-compatible way. Try to avoid such changes as + * it means multiple copies of the font information. + */ + +#define FC_CACHE_VERSION "3" + +#define FcTrue 1 +#define FcFalse 0 + +#define FC_FAMILY "family" /* String */ +#define FC_STYLE "style" /* String */ +#define FC_SLANT "slant" /* Int */ +#define FC_WEIGHT "weight" /* Int */ +#define FC_SIZE "size" /* Double */ +#define FC_ASPECT "aspect" /* Double */ +#define FC_PIXEL_SIZE "pixelsize" /* Double */ +#define FC_SPACING "spacing" /* Int */ +#define FC_FOUNDRY "foundry" /* String */ +#define FC_ANTIALIAS "antialias" /* Bool (depends) */ +#define FC_HINTING "hinting" /* Bool (true) */ +#define FC_HINT_STYLE "hintstyle" /* Int */ +#define FC_VERTICAL_LAYOUT "verticallayout" /* Bool (false) */ +#define FC_AUTOHINT "autohint" /* Bool (false) */ +#define FC_GLOBAL_ADVANCE "globaladvance" /* Bool (true) */ +#define FC_WIDTH "width" /* Int */ +#define FC_FILE "file" /* String */ +#define FC_INDEX "index" /* Int */ +#define FC_FT_FACE "ftface" /* FT_Face */ +#define FC_RASTERIZER "rasterizer" /* String */ +#define FC_OUTLINE "outline" /* Bool */ +#define FC_SCALABLE "scalable" /* Bool */ +#define FC_SCALE "scale" /* double */ +#define FC_DPI "dpi" /* double */ +#define FC_RGBA "rgba" /* Int */ +#define FC_MINSPACE "minspace" /* Bool use minimum line spacing */ +#define FC_SOURCE "source" /* String (deprecated) */ +#define FC_CHARSET "charset" /* CharSet */ +#define FC_LANG "lang" /* String RFC 3066 langs */ +#define FC_FONTVERSION "fontversion" /* Int from 'head' table */ +#define FC_FULLNAME "fullname" /* String */ +#define FC_FAMILYLANG "familylang" /* String RFC 3066 langs */ +#define FC_STYLELANG "stylelang" /* String RFC 3066 langs */ +#define FC_FULLNAMELANG "fullnamelang" /* String RFC 3066 langs */ +#define FC_CAPABILITY "capability" /* String */ +#define FC_FONTFORMAT "fontformat" /* String */ +#define FC_EMBOLDEN "embolden" /* Bool - true if emboldening needed*/ +#define FC_EMBEDDED_BITMAP "embeddedbitmap" /* Bool - true to enable embedded bitmaps */ +#define FC_DECORATIVE "decorative" /* Bool - true if style is a decorative variant */ +#define FC_LCD_FILTER "lcdfilter" /* Int */ + +#define FC_CACHE_SUFFIX ".cache-"FC_CACHE_VERSION +#define FC_DIR_CACHE_FILE "fonts.cache-"FC_CACHE_VERSION +#define FC_USER_CACHE_FILE ".fonts.cache-"FC_CACHE_VERSION + +/* Adjust outline rasterizer */ +#define FC_CHAR_WIDTH "charwidth" /* Int */ +#define FC_CHAR_HEIGHT "charheight"/* Int */ +#define FC_MATRIX "matrix" /* FcMatrix */ + +#define FC_WEIGHT_THIN 0 +#define FC_WEIGHT_EXTRALIGHT 40 +#define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT +#define FC_WEIGHT_LIGHT 50 +#define FC_WEIGHT_BOOK 75 +#define FC_WEIGHT_REGULAR 80 +#define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR +#define FC_WEIGHT_MEDIUM 100 +#define FC_WEIGHT_DEMIBOLD 180 +#define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD +#define FC_WEIGHT_BOLD 200 +#define FC_WEIGHT_EXTRABOLD 205 +#define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD +#define FC_WEIGHT_BLACK 210 +#define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK +#define FC_WEIGHT_EXTRABLACK 215 +#define FC_WEIGHT_ULTRABLACK FC_WEIGHT_EXTRABLACK + +#define FC_SLANT_ROMAN 0 +#define FC_SLANT_ITALIC 100 +#define FC_SLANT_OBLIQUE 110 + +#define FC_WIDTH_ULTRACONDENSED 50 +#define FC_WIDTH_EXTRACONDENSED 63 +#define FC_WIDTH_CONDENSED 75 +#define FC_WIDTH_SEMICONDENSED 87 +#define FC_WIDTH_NORMAL 100 +#define FC_WIDTH_SEMIEXPANDED 113 +#define FC_WIDTH_EXPANDED 125 +#define FC_WIDTH_EXTRAEXPANDED 150 +#define FC_WIDTH_ULTRAEXPANDED 200 + +#define FC_PROPORTIONAL 0 +#define FC_DUAL 90 +#define FC_MONO 100 +#define FC_CHARCELL 110 + +/* sub-pixel order */ +#define FC_RGBA_UNKNOWN 0 +#define FC_RGBA_RGB 1 +#define FC_RGBA_BGR 2 +#define FC_RGBA_VRGB 3 +#define FC_RGBA_VBGR 4 +#define FC_RGBA_NONE 5 + +/* hinting style */ +#define FC_HINT_NONE 0 +#define FC_HINT_SLIGHT 1 +#define FC_HINT_MEDIUM 2 +#define FC_HINT_FULL 3 + +/* LCD filter */ +#define FC_LCD_NONE 0 +#define FC_LCD_DEFAULT 1 +#define FC_LCD_LIGHT 2 +#define FC_LCD_LEGACY 3 + +typedef enum _FcType { + FcTypeVoid, + FcTypeInteger, + FcTypeDouble, + FcTypeString, + FcTypeBool, + FcTypeMatrix, + FcTypeCharSet, + FcTypeFTFace, + FcTypeLangSet +} FcType; + +typedef struct _FcMatrix { + double xx, xy, yx, yy; +} FcMatrix; + +#define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \ + (m)->xy = (m)->yx = 0) + +/* + * A data structure to represent the available glyphs in a font. + * This is represented as a sparse boolean btree. + */ + +typedef struct _FcCharSet FcCharSet; + +typedef struct _FcObjectType { + const char *object; + FcType type; +} FcObjectType; + +typedef struct _FcConstant { + const FcChar8 *name; + const char *object; + int value; +} FcConstant; + +typedef enum _FcResult { + FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId, + FcResultOutOfMemory +} FcResult; + +typedef struct _FcPattern FcPattern; + +typedef struct _FcLangSet FcLangSet; + +typedef struct _FcValue { + FcType type; + union { + const FcChar8 *s; + int i; + FcBool b; + double d; + const FcMatrix *m; + const FcCharSet *c; + void *f; + const FcLangSet *l; + } u; +} FcValue; + +typedef struct _FcFontSet { + int nfont; + int sfont; + FcPattern **fonts; +} FcFontSet; + +typedef struct _FcObjectSet { + int nobject; + int sobject; + const char **objects; +} FcObjectSet; + +typedef enum _FcMatchKind { + FcMatchPattern, FcMatchFont, FcMatchScan +} FcMatchKind; + +typedef enum _FcLangResult { + FcLangEqual = 0, + FcLangDifferentCountry = 1, + FcLangDifferentTerritory = 1, + FcLangDifferentLang = 2 +} FcLangResult; + +typedef enum _FcSetName { + FcSetSystem = 0, + FcSetApplication = 1 +} FcSetName; + +typedef struct _FcAtomic FcAtomic; + +#if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */ +#define _FCFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */ +#define _FCFUNCPROTOEND } +#else +#define _FCFUNCPROTOBEGIN +#define _FCFUNCPROTOEND +#endif + +typedef enum { FcEndianBig, FcEndianLittle } FcEndian; + +typedef struct _FcConfig FcConfig; + +typedef struct _FcGlobalCache FcFileCache; + +typedef struct _FcBlanks FcBlanks; + +typedef struct _FcStrList FcStrList; + +typedef struct _FcStrSet FcStrSet; + +typedef struct _FcCache FcCache; + +_FCFUNCPROTOBEGIN + +/* fcblanks.c */ +FcPublic FcBlanks * +FcBlanksCreate (void); + +FcPublic void +FcBlanksDestroy (FcBlanks *b); + +FcPublic FcBool +FcBlanksAdd (FcBlanks *b, FcChar32 ucs4); + +FcPublic FcBool +FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4); + +/* fccache.c */ + +FcPublic const FcChar8 * +FcCacheDir(const FcCache *c); + +FcPublic FcFontSet * +FcCacheCopySet(const FcCache *c); + +FcPublic const FcChar8 * +FcCacheSubdir (const FcCache *c, int i); + +FcPublic int +FcCacheNumSubdir (const FcCache *c); + +FcPublic int +FcCacheNumFont (const FcCache *c); + +FcPublic FcBool +FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config); + +FcPublic FcBool +FcDirCacheValid (const FcChar8 *cache_file); + +/* fccfg.c */ +FcPublic FcChar8 * +FcConfigHome (void); + +FcPublic FcBool +FcConfigEnableHome (FcBool enable); + +FcPublic FcChar8 * +FcConfigFilename (const FcChar8 *url); + +FcPublic FcConfig * +FcConfigCreate (void); + +FcPublic FcConfig * +FcConfigReference (FcConfig *config); + +FcPublic void +FcConfigDestroy (FcConfig *config); + +FcPublic FcBool +FcConfigSetCurrent (FcConfig *config); + +FcPublic FcConfig * +FcConfigGetCurrent (void); + +FcPublic FcBool +FcConfigUptoDate (FcConfig *config); + +FcPublic FcBool +FcConfigBuildFonts (FcConfig *config); + +FcPublic FcStrList * +FcConfigGetFontDirs (FcConfig *config); + +FcPublic FcStrList * +FcConfigGetConfigDirs (FcConfig *config); + +FcPublic FcStrList * +FcConfigGetConfigFiles (FcConfig *config); + +FcPublic FcChar8 * +FcConfigGetCache (FcConfig *config); + +FcPublic FcBlanks * +FcConfigGetBlanks (FcConfig *config); + +FcPublic FcStrList * +FcConfigGetCacheDirs (FcConfig *config); + +FcPublic int +FcConfigGetRescanInterval (FcConfig *config); + +FcPublic FcBool +FcConfigSetRescanInterval (FcConfig *config, int rescanInterval); + +FcPublic FcFontSet * +FcConfigGetFonts (FcConfig *config, + FcSetName set); + +FcPublic FcBool +FcConfigAppFontAddFile (FcConfig *config, + const FcChar8 *file); + +FcPublic FcBool +FcConfigAppFontAddDir (FcConfig *config, + const FcChar8 *dir); + +FcPublic void +FcConfigAppFontClear (FcConfig *config); + +FcPublic FcBool +FcConfigSubstituteWithPat (FcConfig *config, + FcPattern *p, + FcPattern *p_pat, + FcMatchKind kind); + +FcPublic FcBool +FcConfigSubstitute (FcConfig *config, + FcPattern *p, + FcMatchKind kind); + +/* fccharset.c */ +FcPublic FcCharSet* +FcCharSetCreate (void); + +/* deprecated alias for FcCharSetCreate */ +FcPublic FcCharSet * +FcCharSetNew (void); + +FcPublic void +FcCharSetDestroy (FcCharSet *fcs); + +FcPublic FcBool +FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4); + +FcPublic FcBool +FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4); + +FcPublic FcCharSet* +FcCharSetCopy (FcCharSet *src); + +FcPublic FcBool +FcCharSetEqual (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcCharSet* +FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcCharSet* +FcCharSetUnion (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcCharSet* +FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcBool +FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed); + +FcPublic FcBool +FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4); + +FcPublic FcChar32 +FcCharSetCount (const FcCharSet *a); + +FcPublic FcChar32 +FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcChar32 +FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcBool +FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b); + +#define FC_CHARSET_MAP_SIZE (256/32) +#define FC_CHARSET_DONE ((FcChar32) -1) + +FcPublic FcChar32 +FcCharSetFirstPage (const FcCharSet *a, + FcChar32 map[FC_CHARSET_MAP_SIZE], + FcChar32 *next); + +FcPublic FcChar32 +FcCharSetNextPage (const FcCharSet *a, + FcChar32 map[FC_CHARSET_MAP_SIZE], + FcChar32 *next); + +/* + * old coverage API, rather hard to use correctly + */ + +FcPublic FcChar32 +FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result); + +/* fcdbg.c */ +FcPublic void +FcValuePrint (const FcValue v); + +FcPublic void +FcPatternPrint (const FcPattern *p); + +FcPublic void +FcFontSetPrint (const FcFontSet *s); + +/* fcdefault.c */ +FcPublic void +FcDefaultSubstitute (FcPattern *pattern); + +/* fcdir.c */ +FcPublic FcBool +FcFileIsDir (const FcChar8 *file); + +FcPublic FcBool +FcFileScan (FcFontSet *set, + FcStrSet *dirs, + FcFileCache *cache, + FcBlanks *blanks, + const FcChar8 *file, + FcBool force); + +FcPublic FcBool +FcDirScan (FcFontSet *set, + FcStrSet *dirs, + FcFileCache *cache, + FcBlanks *blanks, + const FcChar8 *dir, + FcBool force); + +FcPublic FcBool +FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir); + +FcPublic FcCache * +FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file); + +FcPublic FcCache * +FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config); + +FcPublic FcCache * +FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat); + +FcPublic void +FcDirCacheUnload (FcCache *cache); + +/* fcfreetype.c */ +FcPublic FcPattern * +FcFreeTypeQuery (const FcChar8 *file, int id, FcBlanks *blanks, int *count); + +/* fcfs.c */ + +FcPublic FcFontSet * +FcFontSetCreate (void); + +FcPublic void +FcFontSetDestroy (FcFontSet *s); + +FcPublic FcBool +FcFontSetAdd (FcFontSet *s, FcPattern *font); + +/* fcinit.c */ +FcPublic FcConfig * +FcInitLoadConfig (void); + +FcPublic FcConfig * +FcInitLoadConfigAndFonts (void); + +FcPublic FcBool +FcInit (void); + +FcPublic void +FcFini (void); + +FcPublic int +FcGetVersion (void); + +FcPublic FcBool +FcInitReinitialize (void); + +FcPublic FcBool +FcInitBringUptoDate (void); + +/* fclang.c */ +FcPublic FcStrSet * +FcGetLangs (void); + +FcPublic const FcCharSet * +FcLangGetCharSet (const FcChar8 *lang); + +FcPublic FcLangSet* +FcLangSetCreate (void); + +FcPublic void +FcLangSetDestroy (FcLangSet *ls); + +FcPublic FcLangSet* +FcLangSetCopy (const FcLangSet *ls); + +FcPublic FcBool +FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang); + +FcPublic FcBool +FcLangSetDel (FcLangSet *ls, const FcChar8 *lang); + +FcPublic FcLangResult +FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang); + +FcPublic FcLangResult +FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb); + +FcPublic FcBool +FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb); + +FcPublic FcBool +FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb); + +FcPublic FcChar32 +FcLangSetHash (const FcLangSet *ls); + +FcPublic FcStrSet * +FcLangSetGetLangs (const FcLangSet *ls); + +FcLangSet * +FcLangSetUnion (const FcLangSet *a, const FcLangSet *b); + +FcLangSet * +FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b); + +/* fclist.c */ +FcPublic FcObjectSet * +FcObjectSetCreate (void); + +FcPublic FcBool +FcObjectSetAdd (FcObjectSet *os, const char *object); + +FcPublic void +FcObjectSetDestroy (FcObjectSet *os); + +FcPublic FcObjectSet * +FcObjectSetVaBuild (const char *first, va_list va); + +FcPublic FcObjectSet * +FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL(0); + +FcPublic FcFontSet * +FcFontSetList (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcObjectSet *os); + +FcPublic FcFontSet * +FcFontList (FcConfig *config, + FcPattern *p, + FcObjectSet *os); + +/* fcatomic.c */ + +FcPublic FcAtomic * +FcAtomicCreate (const FcChar8 *file); + +FcPublic FcBool +FcAtomicLock (FcAtomic *atomic); + +FcPublic FcChar8 * +FcAtomicNewFile (FcAtomic *atomic); + +FcPublic FcChar8 * +FcAtomicOrigFile (FcAtomic *atomic); + +FcPublic FcBool +FcAtomicReplaceOrig (FcAtomic *atomic); + +FcPublic void +FcAtomicDeleteNew (FcAtomic *atomic); + +FcPublic void +FcAtomicUnlock (FcAtomic *atomic); + +FcPublic void +FcAtomicDestroy (FcAtomic *atomic); + +/* fcmatch.c */ +FcPublic FcPattern * +FcFontSetMatch (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcResult *result); + +FcPublic FcPattern * +FcFontMatch (FcConfig *config, + FcPattern *p, + FcResult *result); + +FcPublic FcPattern * +FcFontRenderPrepare (FcConfig *config, + FcPattern *pat, + FcPattern *font); + +FcPublic FcFontSet * +FcFontSetSort (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcBool trim, + FcCharSet **csp, + FcResult *result); + +FcPublic FcFontSet * +FcFontSort (FcConfig *config, + FcPattern *p, + FcBool trim, + FcCharSet **csp, + FcResult *result); + +FcPublic void +FcFontSetSortDestroy (FcFontSet *fs); + +/* fcmatrix.c */ +FcPublic FcMatrix * +FcMatrixCopy (const FcMatrix *mat); + +FcPublic FcBool +FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2); + +FcPublic void +FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b); + +FcPublic void +FcMatrixRotate (FcMatrix *m, double c, double s); + +FcPublic void +FcMatrixScale (FcMatrix *m, double sx, double sy); + +FcPublic void +FcMatrixShear (FcMatrix *m, double sh, double sv); + +/* fcname.c */ + +FcPublic FcBool +FcNameRegisterObjectTypes (const FcObjectType *types, int ntype); + +FcPublic FcBool +FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype); + +FcPublic const FcObjectType * +FcNameGetObjectType (const char *object); + +FcPublic FcBool +FcNameRegisterConstants (const FcConstant *consts, int nconsts); + +FcPublic FcBool +FcNameUnregisterConstants (const FcConstant *consts, int nconsts); + +FcPublic const FcConstant * +FcNameGetConstant (FcChar8 *string); + +FcPublic FcBool +FcNameConstant (FcChar8 *string, int *result); + +FcPublic FcPattern * +FcNameParse (const FcChar8 *name); + +FcPublic FcChar8 * +FcNameUnparse (FcPattern *pat); + +/* fcpat.c */ +FcPublic FcPattern * +FcPatternCreate (void); + +FcPublic FcPattern * +FcPatternDuplicate (const FcPattern *p); + +FcPublic void +FcPatternReference (FcPattern *p); + +FcPublic FcPattern * +FcPatternFilter (FcPattern *p, const FcObjectSet *os); + +FcPublic void +FcValueDestroy (FcValue v); + +FcPublic FcBool +FcValueEqual (FcValue va, FcValue vb); + +FcPublic FcValue +FcValueSave (FcValue v); + +FcPublic void +FcPatternDestroy (FcPattern *p); + +FcPublic FcBool +FcPatternEqual (const FcPattern *pa, const FcPattern *pb); + +FcPublic FcBool +FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os); + +FcPublic FcChar32 +FcPatternHash (const FcPattern *p); + +FcPublic FcBool +FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append); + +FcPublic FcBool +FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append); + +FcPublic FcResult +FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v); + +FcPublic FcBool +FcPatternDel (FcPattern *p, const char *object); + +FcPublic FcBool +FcPatternRemove (FcPattern *p, const char *object, int id); + +FcPublic FcBool +FcPatternAddInteger (FcPattern *p, const char *object, int i); + +FcPublic FcBool +FcPatternAddDouble (FcPattern *p, const char *object, double d); + +FcPublic FcBool +FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s); + +FcPublic FcBool +FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s); + +FcPublic FcBool +FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c); + +FcPublic FcBool +FcPatternAddBool (FcPattern *p, const char *object, FcBool b); + +FcPublic FcBool +FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls); + +FcPublic FcResult +FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i); + +FcPublic FcResult +FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d); + +FcPublic FcResult +FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 ** s); + +FcPublic FcResult +FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s); + +FcPublic FcResult +FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c); + +FcPublic FcResult +FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b); + +FcPublic FcResult +FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls); + +FcPublic FcPattern * +FcPatternVaBuild (FcPattern *p, va_list va); + +FcPublic FcPattern * +FcPatternBuild (FcPattern *p, ...) FC_ATTRIBUTE_SENTINEL(0); + +FcPublic FcChar8 * +FcPatternFormat (FcPattern *pat, const FcChar8 *format); + +/* fcstr.c */ + +FcPublic FcChar8 * +FcStrCopy (const FcChar8 *s); + +FcPublic FcChar8 * +FcStrCopyFilename (const FcChar8 *s); + +FcPublic FcChar8 * +FcStrPlus (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic void +FcStrFree (FcChar8 *s); + +/* These are ASCII only, suitable only for pattern element names */ +#define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132)) +#define FcIsLower(c) ((0141 <= (c) && (c) <= 0172)) +#define FcToLower(c) (FcIsUpper(c) ? (c) - 0101 + 0141 : (c)) + +FcPublic FcChar8 * +FcStrDowncase (const FcChar8 *s); + +FcPublic int +FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic int +FcStrCmp (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic const FcChar8 * +FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic const FcChar8 * +FcStrStr (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic int +FcUtf8ToUcs4 (const FcChar8 *src_orig, + FcChar32 *dst, + int len); + +FcPublic FcBool +FcUtf8Len (const FcChar8 *string, + int len, + int *nchar, + int *wchar); + +#define FC_UTF8_MAX_LEN 6 + +FcPublic int +FcUcs4ToUtf8 (FcChar32 ucs4, + FcChar8 dest[FC_UTF8_MAX_LEN]); + +FcPublic int +FcUtf16ToUcs4 (const FcChar8 *src_orig, + FcEndian endian, + FcChar32 *dst, + int len); /* in bytes */ + +FcPublic FcBool +FcUtf16Len (const FcChar8 *string, + FcEndian endian, + int len, /* in bytes */ + int *nchar, + int *wchar); + +FcPublic FcChar8 * +FcStrDirname (const FcChar8 *file); + +FcPublic FcChar8 * +FcStrBasename (const FcChar8 *file); + +FcPublic FcStrSet * +FcStrSetCreate (void); + +FcPublic FcBool +FcStrSetMember (FcStrSet *set, const FcChar8 *s); + +FcPublic FcBool +FcStrSetEqual (FcStrSet *sa, FcStrSet *sb); + +FcPublic FcBool +FcStrSetAdd (FcStrSet *set, const FcChar8 *s); + +FcPublic FcBool +FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s); + +FcPublic FcBool +FcStrSetDel (FcStrSet *set, const FcChar8 *s); + +FcPublic void +FcStrSetDestroy (FcStrSet *set); + +FcPublic FcStrList * +FcStrListCreate (FcStrSet *set); + +FcPublic FcChar8 * +FcStrListNext (FcStrList *list); + +FcPublic void +FcStrListDone (FcStrList *list); + +/* fcxml.c */ +FcPublic FcBool +FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain); + +_FCFUNCPROTOEND + +#undef FC_ATTRIBUTE_SENTINEL + + +#ifndef _FCINT_H_ + +/* + * Deprecated functions are placed here to help users fix their code without + * digging through documentation + */ + +#define FcConfigGetRescanInverval FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval +#define FcConfigSetRescanInverval FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval + +#endif + +#endif /* _FONTCONFIG_H_ */ diff --git a/fontconfig/fonts.dtd b/fontconfig/fonts.dtd index 3e315b840..5f072ee44 100644 --- a/fontconfig/fonts.dtd +++ b/fontconfig/fonts.dtd @@ -1,225 +1,225 @@ -<!-- This is the Document Type Definition for font configuration files -->
-<!ELEMENT fontconfig (dir |
- cache |
- cachedir |
- include |
- config |
- selectfont |
- match |
- alias)* >
-
-<!--
- Add a directory that provides fonts
--->
-<!ELEMENT dir (#PCDATA)>
-<!ATTLIST dir xml:space (default|preserve) 'preserve'>
-
-<!--
- Define the per-user file that holds cache font information.
-
- If the filename begins with '~', it is replaced with the users
- home directory path.
--->
-<!ELEMENT cache (#PCDATA)>
-<!ATTLIST cache xml:space (default|preserve) 'preserve'>
-
-<!--
- Add a directory that is searched for font cache files.
- These hold per-directory cache data and are searched in
- order for each directory. When writing cache files, the first
- directory which allows the cache file to be created is used.
-
- A leading '~' in a directory name is replaced with the users
- home directory path.
--->
-<!ELEMENT cachedir (#PCDATA)>
-<!ATTLIST cachedir xml:space (default|preserve) 'preserve'>
-
-<!--
- Reference another configuration file; note that this
- is another complete font configuration file and not
- just a file included by the XML parser.
-
- Set 'ignore_missing' to 'yes' if errors are to be ignored.
-
- If the filename begins with '~', it is replaced with the users
- home directory path.
--->
-<!ELEMENT include (#PCDATA)>
-<!ATTLIST include
- ignore_missing (no|yes) "no"
- xml:space (default|preserve) "preserve">
-
-<!--
- Global library configuration data
- -->
-<!ELEMENT config (blank|rescan)*>
-
-<!--
- Specify the set of Unicode encoding values which
- represent glyphs that are allowed to contain no
- data. With this list, fontconfig can examine
- fonts for broken glyphs and eliminate them from
- the set of valid Unicode chars. This idea
- was borrowed from Mozilla
- -->
-<!ELEMENT blank (int|range)*>
-
-<!--
- Aliases are just a special case for multiple match elements
-
- They are syntactically equivalent to:
-
- <match>
- <test name="family">
- <string value=[family]/>
- </test>
- <edit name="family" mode="prepend">
- <string value=[prefer]/>
- ...
- </edit>
- <edit name="family" mode="append">
- <string value=[accept]/>
- ...
- </edit>
- <edit name="family" mode="append_last">
- <string value=[default]/>
- ...
- </edit>
- </match>
--->
-<!--
- Periodically rescan the font configuration and
- directories to synch internal state with filesystem
- -->
-<!ELEMENT rescan (int)>
-
-<!--
- Edit list of available fonts at startup/reload time
- -->
-<!ELEMENT selectfont (rejectfont | acceptfont)* >
-
-<!ELEMENT rejectfont (glob | pattern)*>
-
-<!ELEMENT acceptfont (glob | pattern)*>
-
-<!ELEMENT glob (#PCDATA)>
-
-<!ELEMENT pattern (patelt)*>
-
-<!ENTITY % constant 'int|double|string|matrix|bool|charset|langset|const'>
-
-<!ELEMENT patelt (%constant;)*>
-<!ATTLIST patelt
- name CDATA #REQUIRED>
-
-<!ELEMENT alias (family*, prefer?, accept?, default?)>
-<!ATTLIST alias
- binding (weak|strong|same) "weak">
-<!ELEMENT prefer (family)*>
-<!ELEMENT accept (family)*>
-<!ELEMENT default (family)*>
-<!ELEMENT family (#PCDATA)>
-<!ATTLIST family xml:space (default|preserve) 'preserve'>
-
-<!ENTITY % expr 'int|double|string|matrix|bool|charset|langset
- |name|const
- |or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains
- |plus|minus|times|divide|not|if|floor|ceil|round|trunc'>
-
-<!--
- Match and edit patterns.
-
- If 'target' is 'pattern', execute the match before selecting a font.
- if 'target' is 'font', execute the match on the result of a font
- selection.
--->
-<!ELEMENT match (test*, edit*)>
-<!ATTLIST match
- target (pattern|font|scan) "pattern">
-
-<!--
- Match a field in a pattern
-
- if 'qual' is 'any', then the match succeeds if any value in the field matches.
- if 'qual' is 'all', then the match succeeds only if all values match.
- if 'qual' is 'first', then the match succeeds only if the first value matches.
- if 'qual' is 'not_first', then the match succeeds only if any value other than
- the first matches.
- For match elements with target=font, if test 'target' is 'pattern',
- then the test is applied to the pattern used in matching rather than
- to the resulting font.
-
- Match elements with target=scan are applied as fonts are scanned.
- They edit the pattern generated from the scanned font and affect
- what the fontconfig database contains.
--->
-<!ELEMENT test (%expr;)*>
-<!ATTLIST test
- qual (any|all|first|not_first) "any"
- name CDATA #REQUIRED
- target (pattern|font|default) "default"
- compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains) "eq">
-
-<!--
- Edit a field in a pattern
-
- The enclosed values are used together to edit the list of values
- associated with 'name'.
-
- If 'name' matches one of those used in a test element for this match element:
- if 'mode' is 'assign', replace the matched value.
- if 'mode' is 'assign_replace', replace all of the values
- if 'mode' is 'prepend', insert before the matched value
- if 'mode' is 'append', insert after the matched value
- if 'mode' is 'prepend_first', insert before all of the values
- if 'mode' is 'append_last', insert after all of the values
- If 'name' doesn't match any of those used in a test element:
- if 'mode' is 'assign' or 'assign_replace, replace all of the values
- if 'mode' is 'prepend' or 'prepend_first', insert before all of the values
- if 'mode' is 'append' or 'append_last', insert after all of the values
--->
-<!ELEMENT edit (%expr;)*>
-<!ATTLIST edit
- name CDATA #REQUIRED
- mode (assign|assign_replace|prepend|append|prepend_first|append_last) "assign"
- binding (weak|strong|same) "weak">
-
-<!--
- Elements of expressions follow
--->
-<!ELEMENT int (#PCDATA)>
-<!ATTLIST int xml:space (default|preserve) 'preserve'>
-<!ELEMENT double (#PCDATA)>
-<!ATTLIST double xml:space (default|preserve) 'preserve'>
-<!ELEMENT string (#PCDATA)>
-<!ATTLIST string xml:space (default|preserve) 'preserve'>
-<!ELEMENT matrix (double,double,double,double)>
-<!ELEMENT bool (#PCDATA)>
-<!ELEMENT charset (int|range)*>
-<!ELEMENT range (int,int)>
-<!ELEMENT langset (string)*>
-<!ELEMENT name (#PCDATA)>
-<!ATTLIST name xml:space (default|preserve) 'preserve'>
-<!ELEMENT const (#PCDATA)>
-<!ATTLIST const xml:space (default|preserve) 'preserve'>
-<!ELEMENT or (%expr;)*>
-<!ELEMENT and (%expr;)*>
-<!ELEMENT eq ((%expr;), (%expr;))>
-<!ELEMENT not_eq ((%expr;), (%expr;))>
-<!ELEMENT less ((%expr;), (%expr;))>
-<!ELEMENT less_eq ((%expr;), (%expr;))>
-<!ELEMENT more ((%expr;), (%expr;))>
-<!ELEMENT more_eq ((%expr;), (%expr;))>
-<!ELEMENT contains ((%expr;), (%expr;))>
-<!ELEMENT not_contains ((%expr;), (%expr;))>
-<!ELEMENT plus (%expr;)*>
-<!ELEMENT minus (%expr;)*>
-<!ELEMENT times (%expr;)*>
-<!ELEMENT divide (%expr;)*>
-<!ELEMENT not (%expr;)>
-<!ELEMENT if ((%expr;), (%expr;), (%expr;))>
-<!ELEMENT floor (%expr;)>
-<!ELEMENT ceil (%expr;)>
-<!ELEMENT round (%expr;)>
-<!ELEMENT trunc (%expr;)>
+<!-- This is the Document Type Definition for font configuration files --> +<!ELEMENT fontconfig (dir | + cache | + cachedir | + include | + config | + selectfont | + match | + alias)* > + +<!-- + Add a directory that provides fonts +--> +<!ELEMENT dir (#PCDATA)> +<!ATTLIST dir xml:space (default|preserve) 'preserve'> + +<!-- + Define the per-user file that holds cache font information. + + If the filename begins with '~', it is replaced with the users + home directory path. +--> +<!ELEMENT cache (#PCDATA)> +<!ATTLIST cache xml:space (default|preserve) 'preserve'> + +<!-- + Add a directory that is searched for font cache files. + These hold per-directory cache data and are searched in + order for each directory. When writing cache files, the first + directory which allows the cache file to be created is used. + + A leading '~' in a directory name is replaced with the users + home directory path. +--> +<!ELEMENT cachedir (#PCDATA)> +<!ATTLIST cachedir xml:space (default|preserve) 'preserve'> + +<!-- + Reference another configuration file; note that this + is another complete font configuration file and not + just a file included by the XML parser. + + Set 'ignore_missing' to 'yes' if errors are to be ignored. + + If the filename begins with '~', it is replaced with the users + home directory path. +--> +<!ELEMENT include (#PCDATA)> +<!ATTLIST include + ignore_missing (no|yes) "no" + xml:space (default|preserve) "preserve"> + +<!-- + Global library configuration data + --> +<!ELEMENT config (blank|rescan)*> + +<!-- + Specify the set of Unicode encoding values which + represent glyphs that are allowed to contain no + data. With this list, fontconfig can examine + fonts for broken glyphs and eliminate them from + the set of valid Unicode chars. This idea + was borrowed from Mozilla + --> +<!ELEMENT blank (int|range)*> + +<!-- + Aliases are just a special case for multiple match elements + + They are syntactically equivalent to: + + <match> + <test name="family"> + <string value=[family]/> + </test> + <edit name="family" mode="prepend"> + <string value=[prefer]/> + ... + </edit> + <edit name="family" mode="append"> + <string value=[accept]/> + ... + </edit> + <edit name="family" mode="append_last"> + <string value=[default]/> + ... + </edit> + </match> +--> +<!-- + Periodically rescan the font configuration and + directories to synch internal state with filesystem + --> +<!ELEMENT rescan (int)> + +<!-- + Edit list of available fonts at startup/reload time + --> +<!ELEMENT selectfont (rejectfont | acceptfont)* > + +<!ELEMENT rejectfont (glob | pattern)*> + +<!ELEMENT acceptfont (glob | pattern)*> + +<!ELEMENT glob (#PCDATA)> + +<!ELEMENT pattern (patelt)*> + +<!ENTITY % constant 'int|double|string|matrix|bool|charset|langset|const'> + +<!ELEMENT patelt (%constant;)*> +<!ATTLIST patelt + name CDATA #REQUIRED> + +<!ELEMENT alias (family*, prefer?, accept?, default?)> +<!ATTLIST alias + binding (weak|strong|same) "weak"> +<!ELEMENT prefer (family)*> +<!ELEMENT accept (family)*> +<!ELEMENT default (family)*> +<!ELEMENT family (#PCDATA)> +<!ATTLIST family xml:space (default|preserve) 'preserve'> + +<!ENTITY % expr 'int|double|string|matrix|bool|charset|langset + |name|const + |or|and|eq|not_eq|less|less_eq|more|more_eq|contains|not_contains + |plus|minus|times|divide|not|if|floor|ceil|round|trunc'> + +<!-- + Match and edit patterns. + + If 'target' is 'pattern', execute the match before selecting a font. + if 'target' is 'font', execute the match on the result of a font + selection. +--> +<!ELEMENT match (test*, edit*)> +<!ATTLIST match + target (pattern|font|scan) "pattern"> + +<!-- + Match a field in a pattern + + if 'qual' is 'any', then the match succeeds if any value in the field matches. + if 'qual' is 'all', then the match succeeds only if all values match. + if 'qual' is 'first', then the match succeeds only if the first value matches. + if 'qual' is 'not_first', then the match succeeds only if any value other than + the first matches. + For match elements with target=font, if test 'target' is 'pattern', + then the test is applied to the pattern used in matching rather than + to the resulting font. + + Match elements with target=scan are applied as fonts are scanned. + They edit the pattern generated from the scanned font and affect + what the fontconfig database contains. +--> +<!ELEMENT test (%expr;)*> +<!ATTLIST test + qual (any|all|first|not_first) "any" + name CDATA #REQUIRED + target (pattern|font|default) "default" + compare (eq|not_eq|less|less_eq|more|more_eq|contains|not_contains) "eq"> + +<!-- + Edit a field in a pattern + + The enclosed values are used together to edit the list of values + associated with 'name'. + + If 'name' matches one of those used in a test element for this match element: + if 'mode' is 'assign', replace the matched value. + if 'mode' is 'assign_replace', replace all of the values + if 'mode' is 'prepend', insert before the matched value + if 'mode' is 'append', insert after the matched value + if 'mode' is 'prepend_first', insert before all of the values + if 'mode' is 'append_last', insert after all of the values + If 'name' doesn't match any of those used in a test element: + if 'mode' is 'assign' or 'assign_replace, replace all of the values + if 'mode' is 'prepend' or 'prepend_first', insert before all of the values + if 'mode' is 'append' or 'append_last', insert after all of the values +--> +<!ELEMENT edit (%expr;)*> +<!ATTLIST edit + name CDATA #REQUIRED + mode (assign|assign_replace|prepend|append|prepend_first|append_last) "assign" + binding (weak|strong|same) "weak"> + +<!-- + Elements of expressions follow +--> +<!ELEMENT int (#PCDATA)> +<!ATTLIST int xml:space (default|preserve) 'preserve'> +<!ELEMENT double (#PCDATA)> +<!ATTLIST double xml:space (default|preserve) 'preserve'> +<!ELEMENT string (#PCDATA)> +<!ATTLIST string xml:space (default|preserve) 'preserve'> +<!ELEMENT matrix (double,double,double,double)> +<!ELEMENT bool (#PCDATA)> +<!ELEMENT charset (int|range)*> +<!ELEMENT range (int,int)> +<!ELEMENT langset (string)*> +<!ELEMENT name (#PCDATA)> +<!ATTLIST name xml:space (default|preserve) 'preserve'> +<!ELEMENT const (#PCDATA)> +<!ATTLIST const xml:space (default|preserve) 'preserve'> +<!ELEMENT or (%expr;)*> +<!ELEMENT and (%expr;)*> +<!ELEMENT eq ((%expr;), (%expr;))> +<!ELEMENT not_eq ((%expr;), (%expr;))> +<!ELEMENT less ((%expr;), (%expr;))> +<!ELEMENT less_eq ((%expr;), (%expr;))> +<!ELEMENT more ((%expr;), (%expr;))> +<!ELEMENT more_eq ((%expr;), (%expr;))> +<!ELEMENT contains ((%expr;), (%expr;))> +<!ELEMENT not_contains ((%expr;), (%expr;))> +<!ELEMENT plus (%expr;)*> +<!ELEMENT minus (%expr;)*> +<!ELEMENT times (%expr;)*> +<!ELEMENT divide (%expr;)*> +<!ELEMENT not (%expr;)> +<!ELEMENT if ((%expr;), (%expr;), (%expr;))> +<!ELEMENT floor (%expr;)> +<!ELEMENT ceil (%expr;)> +<!ELEMENT round (%expr;)> +<!ELEMENT trunc (%expr;)> diff --git a/fontconfig/src/Makefile.am b/fontconfig/src/Makefile.am index 7ecbc1b62..090f9b1ab 100644 --- a/fontconfig/src/Makefile.am +++ b/fontconfig/src/Makefile.am @@ -1,167 +1,167 @@ -#
-# fontconfig/src/Makefile.am
-#
-# Copyright © 2003 Keith Packard
-#
-# Permission to use, copy, modify, distribute, and sell this software and its
-# documentation for any purpose is hereby granted without fee, provided that
-# the above copyright notice appear in all copies and that both that
-# copyright notice and this permission notice appear in supporting
-# documentation, and that the name of the author(s) not be used in
-# advertising or publicity pertaining to distribution of the software without
-# specific, written prior permission. The authors make no
-# representations about the suitability of this software for any purpose. It
-# is provided "as is" without express or implied warranty.
-#
-# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
-# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
-# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
-# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
-# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
-# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-# PERFORMANCE OF THIS SOFTWARE.
-
-if OS_WIN32
-
-export_symbols = -export-symbols fontconfig.def
-
-fontconfig_def_dependency = fontconfig.def
-
-# gcc import library install/uninstall
-
-install-libtool-import-lib:
- $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir)
- $(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def
-
-uninstall-libtool-import-lib:
- -rm $(DESTDIR)$(libdir)/libfontconfig.dll.a $(DESTDIR)$(libdir)/fontconfig.def
-
-else
-
-install-libtool-import-lib:
-uninstall-libtool-import-lib:
-
-fontconfig_def_dependency =
-
-endif
-
-if MS_LIB_AVAILABLE
-
-# Microsoft import library install/uninstall
-
-noinst_DATA = fontconfig.lib
-
-fontconfig.lib : libfontconfig.la
- lib -name:libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll -def:fontconfig.def -out:$@
-
-install-ms-import-lib:
- $(INSTALL) fontconfig.lib $(DESTDIR)$(libdir)
-
-uninstall-ms-import-lib:
- -rm $(DESTDIR)$(libdir)/fontconfig.lib
-
-else
-
-install-ms-import-lib:
-uninstall-ms-import-lib:
-
-endif
-
-INCLUDES = \
- -I$(top_srcdir) \
- -I$(top_srcdir)/src \
- $(FREETYPE_CFLAGS) \
- $(LIBXML2_CFLAGS) \
- $(EXPAT_CFLAGS) \
- $(WARN_CFLAGS) \
- -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \
- -DFONTCONFIG_PATH='"$(CONFDIR)"'
-
-EXTRA_DIST = makealias
-
-noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h
-
-ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h
-
-BUILT_SOURCES = $(ALIAS_FILES) \
- ../fc-case/fccase.h \
- ../fc-glyphname/fcglyphname.h \
- ../fc-lang/fclang.h
-
-noinst_PROGRAMS = fcarch
-
-../fc-case/fccase.h:
- cd ../fc-case && $(MAKE) $(AM_MAKEFLAGS) fccase.h
-../fc-glyphname/fcglyphname.h:
- cd ../fc-glyphname && $(MAKE) $(AM_MAKEFLAGS) fcglyphname.h
-../fc-lang/fclang.h:
- cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) fclang.h
-
-libfontconfig_la_SOURCES = \
- fcarch.h \
- fcatomic.c \
- fcblanks.c \
- fccache.c \
- fccfg.c \
- fccharset.c \
- fcdbg.c \
- fcdefault.c \
- fcdir.c \
- fcformat.c \
- fcfreetype.c \
- fcfs.c \
- fcinit.c \
- fclang.c \
- fclist.c \
- fcmatch.c \
- fcmatrix.c \
- fcname.c \
- fcpat.c \
- fcserialize.c \
- fcstr.c \
- fcxml.c \
- ftglue.h \
- ftglue.c
-
-lib_LTLIBRARIES = libfontconfig.la
-
-libfontconfig_la_LDFLAGS = \
- -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols)
-
-libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS)
-
-libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency)
-
-install-data-local: install-ms-import-lib install-libtool-import-lib
-
-uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib
-
-PUBLIC_FILES = \
- $(top_srcdir)/fontconfig/fontconfig.h \
- $(top_srcdir)/src/fcdeprecate.h \
- $(top_srcdir)/fontconfig/fcprivate.h
-
-PUBLIC_FT_FILES = \
- $(top_srcdir)/fontconfig/fcfreetype.h
-
-fcaliastail.h: fcalias.h
-
-fcalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FILES)
- sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcalias.h fcaliastail.h $(PUBLIC_FILES)
-
-fcftaliastail.h: fcftalias.h
-
-fcftalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FT_FILES)
- sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcftalias.h fcftaliastail.h $(PUBLIC_FT_FILES)
-
-CLEANFILES = $(ALIAS_FILES)
-
-fontconfig.def: $(PUBLIC_FILES) $(PUBLIC_FT_FILES)
- echo Generating $@
- (echo EXPORTS; \
- (cat $(PUBLIC_FILES) $(PUBLIC_FT_FILES) || echo 'FcERROR ()' ) | \
- grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$$//' -e 's/^/ /' | \
- sort; \
- echo LIBRARY libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll; \
- echo VERSION @LIBT_CURRENT@.@LIBT_REVISION@) >$@
- @ ! grep -q FcERROR $@ || ($(RM) $@; false)
+# +# fontconfig/src/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +if OS_WIN32 + +export_symbols = -export-symbols fontconfig.def + +fontconfig_def_dependency = fontconfig.def + +# gcc import library install/uninstall + +install-libtool-import-lib: + $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir) + $(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def + +uninstall-libtool-import-lib: + -rm $(DESTDIR)$(libdir)/libfontconfig.dll.a $(DESTDIR)$(libdir)/fontconfig.def + +else + +install-libtool-import-lib: +uninstall-libtool-import-lib: + +fontconfig_def_dependency = + +endif + +if MS_LIB_AVAILABLE + +# Microsoft import library install/uninstall + +noinst_DATA = fontconfig.lib + +fontconfig.lib : libfontconfig.la + lib -name:libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll -def:fontconfig.def -out:$@ + +install-ms-import-lib: + $(INSTALL) fontconfig.lib $(DESTDIR)$(libdir) + +uninstall-ms-import-lib: + -rm $(DESTDIR)$(libdir)/fontconfig.lib + +else + +install-ms-import-lib: +uninstall-ms-import-lib: + +endif + +INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src \ + $(FREETYPE_CFLAGS) \ + $(LIBXML2_CFLAGS) \ + $(EXPAT_CFLAGS) \ + $(WARN_CFLAGS) \ + -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \ + -DFONTCONFIG_PATH='"$(CONFDIR)"' + +EXTRA_DIST = makealias + +noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h + +ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h + +BUILT_SOURCES = $(ALIAS_FILES) \ + ../fc-case/fccase.h \ + ../fc-glyphname/fcglyphname.h \ + ../fc-lang/fclang.h + +noinst_PROGRAMS = fcarch + +../fc-case/fccase.h: + cd ../fc-case && $(MAKE) $(AM_MAKEFLAGS) fccase.h +../fc-glyphname/fcglyphname.h: + cd ../fc-glyphname && $(MAKE) $(AM_MAKEFLAGS) fcglyphname.h +../fc-lang/fclang.h: + cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) fclang.h + +libfontconfig_la_SOURCES = \ + fcarch.h \ + fcatomic.c \ + fcblanks.c \ + fccache.c \ + fccfg.c \ + fccharset.c \ + fcdbg.c \ + fcdefault.c \ + fcdir.c \ + fcformat.c \ + fcfreetype.c \ + fcfs.c \ + fcinit.c \ + fclang.c \ + fclist.c \ + fcmatch.c \ + fcmatrix.c \ + fcname.c \ + fcpat.c \ + fcserialize.c \ + fcstr.c \ + fcxml.c \ + ftglue.h \ + ftglue.c + +lib_LTLIBRARIES = libfontconfig.la + +libfontconfig_la_LDFLAGS = \ + -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols) + +libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) + +libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency) + +install-data-local: install-ms-import-lib install-libtool-import-lib + +uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib + +PUBLIC_FILES = \ + $(top_srcdir)/fontconfig/fontconfig.h \ + $(top_srcdir)/src/fcdeprecate.h \ + $(top_srcdir)/fontconfig/fcprivate.h + +PUBLIC_FT_FILES = \ + $(top_srcdir)/fontconfig/fcfreetype.h + +fcaliastail.h: fcalias.h + +fcalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FILES) + sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcalias.h fcaliastail.h $(PUBLIC_FILES) + +fcftaliastail.h: fcftalias.h + +fcftalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FT_FILES) + sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcftalias.h fcftaliastail.h $(PUBLIC_FT_FILES) + +CLEANFILES = $(ALIAS_FILES) + +fontconfig.def: $(PUBLIC_FILES) $(PUBLIC_FT_FILES) + echo Generating $@ + (echo EXPORTS; \ + (cat $(PUBLIC_FILES) $(PUBLIC_FT_FILES) || echo 'FcERROR ()' ) | \ + grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$$//' -e 's/^/ /' | \ + sort; \ + echo LIBRARY libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll; \ + echo VERSION @LIBT_CURRENT@.@LIBT_REVISION@) >$@ + @ ! grep -q FcERROR $@ || ($(RM) $@; false) diff --git a/fontconfig/src/fcatomic.c b/fontconfig/src/fcatomic.c index cc16a9c96..b5f3d5aaa 100644 --- a/fontconfig/src/fcatomic.c +++ b/fontconfig/src/fcatomic.c @@ -1,217 +1,217 @@ -/*
- * fontconfig/src/fcatomic.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- * fcatomic.c
- *
- * Lock cache and configuration files for atomic update
- *
- * Uses only regular filesystem calls so it should
- * work even in the absense of functioning file locking
- *
- * On Unix, four files are used:
- * file - the data file accessed by other apps.
- * new - a new version of the data file while it's being written
- * lck - the lock file
- * tmp - a temporary file made unique with mkstemp
- *
- * Here's how it works:
- * Create 'tmp' and store our PID in it
- * Attempt to link it to 'lck'
- * Unlink 'tmp'
- * If the link succeeded, the lock is held
- *
- * On Windows, where there are no links, no tmp file is used, and lck
- * is a directory that's mkdir'ed. If the mkdir succeeds, the lock is
- * held.
- */
-
-#include "fcint.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <time.h>
-
-#ifdef _WIN32
-#undef mkdir
-#define mkdir(path,mode) _mkdir(path)
-#endif
-
-#define NEW_NAME ".NEW"
-#define LCK_NAME ".LCK"
-#define TMP_NAME ".TMP-XXXXXX"
-
-FcAtomic *
-FcAtomicCreate (const FcChar8 *file)
-{
- int file_len = strlen ((char *) file);
- int new_len = file_len + sizeof (NEW_NAME);
- int lck_len = file_len + sizeof (LCK_NAME);
- int tmp_len = file_len + sizeof (TMP_NAME);
- int total_len = (sizeof (FcAtomic) +
- file_len + 1 +
- new_len + 1 +
- lck_len + 1 +
- tmp_len + 1);
- FcAtomic *atomic = malloc (total_len);
- if (!atomic)
- return 0;
- FcMemAlloc (FC_MEM_ATOMIC, total_len);
-
- atomic->file = (FcChar8 *) (atomic + 1);
- strcpy ((char *) atomic->file, (char *) file);
-
- atomic->new = atomic->file + file_len + 1;
- strcpy ((char *) atomic->new, (char *) file);
- strcat ((char *) atomic->new, NEW_NAME);
-
- atomic->lck = atomic->new + new_len + 1;
- strcpy ((char *) atomic->lck, (char *) file);
- strcat ((char *) atomic->lck, LCK_NAME);
-
- atomic->tmp = atomic->lck + lck_len + 1;
-
- return atomic;
-}
-
-FcBool
-FcAtomicLock (FcAtomic *atomic)
-{
- int fd = -1;
- FILE *f = 0;
- int ret;
- struct stat lck_stat;
-
-#ifdef HAVE_LINK
- strcpy ((char *) atomic->tmp, (char *) atomic->file);
- strcat ((char *) atomic->tmp, TMP_NAME);
- fd = mkstemp ((char *) atomic->tmp);
- if (fd < 0)
- return FcFalse;
- f = fdopen (fd, "w");
- if (!f)
- {
- close (fd);
- unlink ((char *) atomic->tmp);
- return FcFalse;
- }
- ret = fprintf (f, "%ld\n", (long)getpid());
- if (ret <= 0)
- {
- fclose (f);
- unlink ((char *) atomic->tmp);
- return FcFalse;
- }
- if (fclose (f) == EOF)
- {
- unlink ((char *) atomic->tmp);
- return FcFalse;
- }
- ret = link ((char *) atomic->tmp, (char *) atomic->lck);
- (void) unlink ((char *) atomic->tmp);
-#else
- ret = mkdir ((char *) atomic->lck, 0600);
-#endif
- if (ret < 0)
- {
- /*
- * If the file is around and old (> 10 minutes),
- * assume the lock is stale. This assumes that any
- * machines sharing the same filesystem will have clocks
- * reasonably close to each other.
- */
- if (FcStat (atomic->lck, &lck_stat) >= 0)
- {
- time_t now = time (0);
- if ((long int) (now - lck_stat.st_mtime) > 10 * 60)
- {
-#ifdef HAVE_LINK
- if (unlink ((char *) atomic->lck) == 0)
- return FcAtomicLock (atomic);
-#else
- if (rmdir ((char *) atomic->lck) == 0)
- return FcAtomicLock (atomic);
-#endif
- }
- }
- return FcFalse;
- }
- (void) unlink ((char *) atomic->new);
- return FcTrue;
-}
-
-FcChar8 *
-FcAtomicNewFile (FcAtomic *atomic)
-{
- return atomic->new;
-}
-
-FcChar8 *
-FcAtomicOrigFile (FcAtomic *atomic)
-{
- return atomic->file;
-}
-
-FcBool
-FcAtomicReplaceOrig (FcAtomic *atomic)
-{
-#ifdef _WIN32
- unlink (atomic->file);
-#endif
- if (rename ((char *) atomic->new, (char *) atomic->file) < 0)
- return FcFalse;
- return FcTrue;
-}
-
-void
-FcAtomicDeleteNew (FcAtomic *atomic)
-{
- unlink ((char *) atomic->new);
-}
-
-void
-FcAtomicUnlock (FcAtomic *atomic)
-{
-#ifdef HAVE_LINK
- unlink ((char *) atomic->lck);
-#else
- rmdir ((char *) atomic->lck);
-#endif
-}
-
-void
-FcAtomicDestroy (FcAtomic *atomic)
-{
- FcMemFree (FC_MEM_ATOMIC, sizeof (FcAtomic) +
- strlen ((char *) atomic->file) * 4 + 4 +
- sizeof (NEW_NAME) + sizeof (LCK_NAME) +
- sizeof (TMP_NAME));
-
- free (atomic);
-}
-#define __fcatomic__
-#include "fcaliastail.h"
-#undef __fcatomic__
+/* + * fontconfig/src/fcatomic.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * fcatomic.c + * + * Lock cache and configuration files for atomic update + * + * Uses only regular filesystem calls so it should + * work even in the absense of functioning file locking + * + * On Unix, four files are used: + * file - the data file accessed by other apps. + * new - a new version of the data file while it's being written + * lck - the lock file + * tmp - a temporary file made unique with mkstemp + * + * Here's how it works: + * Create 'tmp' and store our PID in it + * Attempt to link it to 'lck' + * Unlink 'tmp' + * If the link succeeded, the lock is held + * + * On Windows, where there are no links, no tmp file is used, and lck + * is a directory that's mkdir'ed. If the mkdir succeeds, the lock is + * held. + */ + +#include "fcint.h" +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <unistd.h> +#include <stdlib.h> +#include <time.h> + +#ifdef _WIN32 +#undef mkdir +#define mkdir(path,mode) _mkdir(path) +#endif + +#define NEW_NAME ".NEW" +#define LCK_NAME ".LCK" +#define TMP_NAME ".TMP-XXXXXX" + +FcAtomic * +FcAtomicCreate (const FcChar8 *file) +{ + int file_len = strlen ((char *) file); + int new_len = file_len + sizeof (NEW_NAME); + int lck_len = file_len + sizeof (LCK_NAME); + int tmp_len = file_len + sizeof (TMP_NAME); + int total_len = (sizeof (FcAtomic) + + file_len + 1 + + new_len + 1 + + lck_len + 1 + + tmp_len + 1); + FcAtomic *atomic = malloc (total_len); + if (!atomic) + return 0; + FcMemAlloc (FC_MEM_ATOMIC, total_len); + + atomic->file = (FcChar8 *) (atomic + 1); + strcpy ((char *) atomic->file, (char *) file); + + atomic->new = atomic->file + file_len + 1; + strcpy ((char *) atomic->new, (char *) file); + strcat ((char *) atomic->new, NEW_NAME); + + atomic->lck = atomic->new + new_len + 1; + strcpy ((char *) atomic->lck, (char *) file); + strcat ((char *) atomic->lck, LCK_NAME); + + atomic->tmp = atomic->lck + lck_len + 1; + + return atomic; +} + +FcBool +FcAtomicLock (FcAtomic *atomic) +{ + int fd = -1; + FILE *f = 0; + int ret; + struct stat lck_stat; + +#ifdef HAVE_LINK + strcpy ((char *) atomic->tmp, (char *) atomic->file); + strcat ((char *) atomic->tmp, TMP_NAME); + fd = mkstemp ((char *) atomic->tmp); + if (fd < 0) + return FcFalse; + f = fdopen (fd, "w"); + if (!f) + { + close (fd); + unlink ((char *) atomic->tmp); + return FcFalse; + } + ret = fprintf (f, "%ld\n", (long)getpid()); + if (ret <= 0) + { + fclose (f); + unlink ((char *) atomic->tmp); + return FcFalse; + } + if (fclose (f) == EOF) + { + unlink ((char *) atomic->tmp); + return FcFalse; + } + ret = link ((char *) atomic->tmp, (char *) atomic->lck); + (void) unlink ((char *) atomic->tmp); +#else + ret = mkdir ((char *) atomic->lck, 0600); +#endif + if (ret < 0) + { + /* + * If the file is around and old (> 10 minutes), + * assume the lock is stale. This assumes that any + * machines sharing the same filesystem will have clocks + * reasonably close to each other. + */ + if (FcStat (atomic->lck, &lck_stat) >= 0) + { + time_t now = time (0); + if ((long int) (now - lck_stat.st_mtime) > 10 * 60) + { +#ifdef HAVE_LINK + if (unlink ((char *) atomic->lck) == 0) + return FcAtomicLock (atomic); +#else + if (rmdir ((char *) atomic->lck) == 0) + return FcAtomicLock (atomic); +#endif + } + } + return FcFalse; + } + (void) unlink ((char *) atomic->new); + return FcTrue; +} + +FcChar8 * +FcAtomicNewFile (FcAtomic *atomic) +{ + return atomic->new; +} + +FcChar8 * +FcAtomicOrigFile (FcAtomic *atomic) +{ + return atomic->file; +} + +FcBool +FcAtomicReplaceOrig (FcAtomic *atomic) +{ +#ifdef _WIN32 + unlink (atomic->file); +#endif + if (rename ((char *) atomic->new, (char *) atomic->file) < 0) + return FcFalse; + return FcTrue; +} + +void +FcAtomicDeleteNew (FcAtomic *atomic) +{ + unlink ((char *) atomic->new); +} + +void +FcAtomicUnlock (FcAtomic *atomic) +{ +#ifdef HAVE_LINK + unlink ((char *) atomic->lck); +#else + rmdir ((char *) atomic->lck); +#endif +} + +void +FcAtomicDestroy (FcAtomic *atomic) +{ + FcMemFree (FC_MEM_ATOMIC, sizeof (FcAtomic) + + strlen ((char *) atomic->file) * 4 + 4 + + sizeof (NEW_NAME) + sizeof (LCK_NAME) + + sizeof (TMP_NAME)); + + free (atomic); +} +#define __fcatomic__ +#include "fcaliastail.h" +#undef __fcatomic__ diff --git a/fontconfig/src/fcblanks.c b/fontconfig/src/fcblanks.c index eab2ecf78..a80a1344f 100644 --- a/fontconfig/src/fcblanks.c +++ b/fontconfig/src/fcblanks.c @@ -1,95 +1,95 @@ -/*
- * fontconfig/src/fcblanks.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-
-FcBlanks *
-FcBlanksCreate (void)
-{
- FcBlanks *b;
-
- b = malloc (sizeof (FcBlanks));
- if (!b)
- return 0;
- FcMemAlloc (FC_MEM_BLANKS, sizeof (FcBlanks));
- b->nblank = 0;
- b->sblank = 0;
- b->blanks = 0;
- return b;
-}
-
-void
-FcBlanksDestroy (FcBlanks *b)
-{
- if (b->blanks)
- {
- FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32));
- free (b->blanks);
- }
- FcMemFree (FC_MEM_BLANKS, sizeof (FcBlanks));
- free (b);
-}
-
-FcBool
-FcBlanksAdd (FcBlanks *b, FcChar32 ucs4)
-{
- FcChar32 *c;
- int sblank;
-
- for (sblank = 0; sblank < b->nblank; sblank++)
- if (b->blanks[sblank] == ucs4)
- return FcTrue;
-
- if (b->nblank == b->sblank)
- {
- sblank = b->sblank + 32;
- if (b->blanks)
- c = (FcChar32 *) realloc (b->blanks, sblank * sizeof (FcChar32));
- else
- c = (FcChar32 *) malloc (sblank * sizeof (FcChar32));
- if (!c)
- return FcFalse;
- if (b->sblank)
- FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32));
- FcMemAlloc (FC_MEM_BLANKS, sblank * sizeof (FcChar32));
- b->sblank = sblank;
- b->blanks = c;
- }
- b->blanks[b->nblank++] = ucs4;
- return FcTrue;
-}
-
-FcBool
-FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4)
-{
- int i;
-
- for (i = 0; i < b->nblank; i++)
- if (b->blanks[i] == ucs4)
- return FcTrue;
- return FcFalse;
-}
-#define __fcblanks__
-#include "fcaliastail.h"
-#undef __fcblanks__
+/* + * fontconfig/src/fcblanks.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" + +FcBlanks * +FcBlanksCreate (void) +{ + FcBlanks *b; + + b = malloc (sizeof (FcBlanks)); + if (!b) + return 0; + FcMemAlloc (FC_MEM_BLANKS, sizeof (FcBlanks)); + b->nblank = 0; + b->sblank = 0; + b->blanks = 0; + return b; +} + +void +FcBlanksDestroy (FcBlanks *b) +{ + if (b->blanks) + { + FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32)); + free (b->blanks); + } + FcMemFree (FC_MEM_BLANKS, sizeof (FcBlanks)); + free (b); +} + +FcBool +FcBlanksAdd (FcBlanks *b, FcChar32 ucs4) +{ + FcChar32 *c; + int sblank; + + for (sblank = 0; sblank < b->nblank; sblank++) + if (b->blanks[sblank] == ucs4) + return FcTrue; + + if (b->nblank == b->sblank) + { + sblank = b->sblank + 32; + if (b->blanks) + c = (FcChar32 *) realloc (b->blanks, sblank * sizeof (FcChar32)); + else + c = (FcChar32 *) malloc (sblank * sizeof (FcChar32)); + if (!c) + return FcFalse; + if (b->sblank) + FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32)); + FcMemAlloc (FC_MEM_BLANKS, sblank * sizeof (FcChar32)); + b->sblank = sblank; + b->blanks = c; + } + b->blanks[b->nblank++] = ucs4; + return FcTrue; +} + +FcBool +FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4) +{ + int i; + + for (i = 0; i < b->nblank; i++) + if (b->blanks[i] == ucs4) + return FcTrue; + return FcFalse; +} +#define __fcblanks__ +#include "fcaliastail.h" +#undef __fcblanks__ diff --git a/fontconfig/src/fccache.c b/fontconfig/src/fccache.c index b27e3d39e..392e66f80 100644 --- a/fontconfig/src/fccache.c +++ b/fontconfig/src/fccache.c @@ -1,1273 +1,1273 @@ -/*
- * Copyright © 2000 Keith Packard
- * Copyright © 2005 Patrick Lam
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include "fcarch.h"
-#include <stdio.h>
-#include <fcntl.h>
-#include <dirent.h>
-#include <string.h>
-#include <sys/types.h>
-#include <assert.h>
-#if defined(HAVE_MMAP) || defined(__CYGWIN__)
-# include <unistd.h>
-# include <sys/mman.h>
-#endif
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-
-struct MD5Context {
- FcChar32 buf[4];
- FcChar32 bits[2];
- unsigned char in[64];
-};
-
-static void MD5Init(struct MD5Context *ctx);
-static void MD5Update(struct MD5Context *ctx, const unsigned char *buf, unsigned len);
-static void MD5Final(unsigned char digest[16], struct MD5Context *ctx);
-static void MD5Transform(FcChar32 buf[4], FcChar32 in[16]);
-
-#define CACHEBASE_LEN (1 + 32 + 1 + sizeof (FC_ARCHITECTURE) + sizeof (FC_CACHE_SUFFIX))
-
-#ifdef _WIN32
-
-#include <windows.h>
-
-#ifdef __GNUC__
-typedef long long INT64;
-#define EPOCH_OFFSET 11644473600ll
-#else
-#define EPOCH_OFFSET 11644473600i64
-typedef __int64 INT64;
-#endif
-
-/* Workaround for problems in the stat() in the Microsoft C library:
- *
- * 1) stat() uses FindFirstFile() to get the file
- * attributes. Unfortunately this API doesn't return correct values
- * for modification time of a directory until some time after a file
- * or subdirectory has been added to the directory. (This causes
- * run-test.sh to fail, for instance.) GetFileAttributesEx() is
- * better, it returns the updated timestamp right away.
- *
- * 2) stat() does some strange things related to backward
- * compatibility with the local time timestamps on FAT volumes and
- * daylight saving time. This causes problems after the switches
- * to/from daylight saving time. See
- * http://bugzilla.gnome.org/show_bug.cgi?id=154968 , especially
- * comment #30, and http://www.codeproject.com/datetime/dstbugs.asp .
- * We don't need any of that, FAT and Win9x are as good as dead. So
- * just use the UTC timestamps from NTFS, converted to the Unix epoch.
- */
-
-int
-FcStat (const char *file, struct stat *statb)
-{
- WIN32_FILE_ATTRIBUTE_DATA wfad;
- char full_path_name[MAX_PATH];
- char *basename;
- DWORD rc;
-
- if (!GetFileAttributesEx (file, GetFileExInfoStandard, &wfad))
- return -1;
-
- statb->st_dev = 0;
-
- /* Calculate a pseudo inode number as a hash of the full path name.
- * Call GetLongPathName() to get the spelling of the path name as it
- * is on disk.
- */
- rc = GetFullPathName (file, sizeof (full_path_name), full_path_name, &basename);
- if (rc == 0 || rc > sizeof (full_path_name))
- return -1;
-
- rc = GetLongPathName (full_path_name, full_path_name, sizeof (full_path_name));
- statb->st_ino = FcStringHash (full_path_name);
-
- statb->st_mode = _S_IREAD | _S_IWRITE;
- statb->st_mode |= (statb->st_mode >> 3) | (statb->st_mode >> 6);
-
- if (wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
- statb->st_mode |= _S_IFDIR;
- else
- statb->st_mode |= _S_IFREG;
-
- statb->st_nlink = 1;
- statb->st_uid = statb->st_gid = 0;
- statb->st_rdev = 0;
-
- if (wfad.nFileSizeHigh > 0)
- return -1;
- statb->st_size = wfad.nFileSizeLow;
-
- statb->st_atime = (*(INT64 *)&wfad.ftLastAccessTime)/10000000 - EPOCH_OFFSET;
- statb->st_mtime = (*(INT64 *)&wfad.ftLastWriteTime)/10000000 - EPOCH_OFFSET;
- statb->st_ctime = statb->st_mtime;
-
- return 0;
-}
-
-#else
-
-int
-FcStat (const char *file, struct stat *statb)
-{
- return stat ((char *) file, statb);
-}
-
-#endif
-
-static const char bin2hex[] = { '0', '1', '2', '3',
- '4', '5', '6', '7',
- '8', '9', 'a', 'b',
- 'c', 'd', 'e', 'f' };
-
-static FcChar8 *
-FcDirCacheBasename (const FcChar8 * dir, FcChar8 cache_base[CACHEBASE_LEN])
-{
- unsigned char hash[16];
- FcChar8 *hex_hash;
- int cnt;
- struct MD5Context ctx;
-
- MD5Init (&ctx);
- MD5Update (&ctx, (const unsigned char *)dir, strlen ((const char *) dir));
-
- MD5Final (hash, &ctx);
-
- cache_base[0] = '/';
- hex_hash = cache_base + 1;
- for (cnt = 0; cnt < 16; ++cnt)
- {
- hex_hash[2*cnt ] = bin2hex[hash[cnt] >> 4];
- hex_hash[2*cnt+1] = bin2hex[hash[cnt] & 0xf];
- }
- hex_hash[2*cnt] = 0;
- strcat ((char *) cache_base, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX);
-
- return cache_base;
-}
-
-FcBool
-FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config)
-{
- FcChar8 *cache_hashed = NULL;
- FcChar8 cache_base[CACHEBASE_LEN];
- FcStrList *list;
- FcChar8 *cache_dir;
-
- FcDirCacheBasename (dir, cache_base);
-
- list = FcStrListCreate (config->cacheDirs);
- if (!list)
- return FcFalse;
-
- while ((cache_dir = FcStrListNext (list)))
- {
- cache_hashed = FcStrPlus (cache_dir, cache_base);
- if (!cache_hashed)
- break;
- (void) unlink ((char *) cache_hashed);
- FcStrFree (cache_hashed);
- }
- FcStrListDone (list);
- /* return FcFalse if something went wrong */
- if (cache_dir)
- return FcFalse;
- return FcTrue;
-}
-
-static int
-FcDirCacheOpenFile (const FcChar8 *cache_file, struct stat *file_stat)
-{
- int fd;
-
-#ifdef _WIN32
- if (FcStat (cache_file, file_stat) < 0)
- return -1;
-#endif
- fd = open((char *) cache_file, O_RDONLY | O_BINARY);
- if (fd < 0)
- return fd;
-#ifndef _WIN32
- if (fstat (fd, file_stat) < 0)
- {
- close (fd);
- return -1;
- }
-#endif
- return fd;
-}
-
-/*
- * Look for a cache file for the specified dir. Attempt
- * to use each one we find, stopping when the callback
- * indicates success
- */
-static FcBool
-FcDirCacheProcess (FcConfig *config, const FcChar8 *dir,
- FcBool (*callback) (int fd, struct stat *fd_stat,
- struct stat *dir_stat, void *closure),
- void *closure, FcChar8 **cache_file_ret)
-{
- int fd = -1;
- FcChar8 cache_base[CACHEBASE_LEN];
- FcStrList *list;
- FcChar8 *cache_dir;
- struct stat file_stat, dir_stat;
- FcBool ret = FcFalse;
-
- if (FcStat (dir, &dir_stat) < 0)
- return FcFalse;
-
- FcDirCacheBasename (dir, cache_base);
-
- list = FcStrListCreate (config->cacheDirs);
- if (!list)
- return FcFalse;
-
- while ((cache_dir = FcStrListNext (list)))
- {
- FcChar8 *cache_hashed = FcStrPlus (cache_dir, cache_base);
- if (!cache_hashed)
- break;
- fd = FcDirCacheOpenFile (cache_hashed, &file_stat);
- if (fd >= 0) {
- ret = (*callback) (fd, &file_stat, &dir_stat, closure);
- close (fd);
- if (ret)
- {
- if (cache_file_ret)
- *cache_file_ret = cache_hashed;
- else
- FcStrFree (cache_hashed);
- break;
- }
- }
- FcStrFree (cache_hashed);
- }
- FcStrListDone (list);
-
- return ret;
-}
-
-#define FC_CACHE_MIN_MMAP 1024
-
-/*
- * Skip list element, make sure the 'next' pointer is the last thing
- * in the structure, it will be allocated large enough to hold all
- * of the necessary pointers
- */
-
-typedef struct _FcCacheSkip FcCacheSkip;
-
-struct _FcCacheSkip {
- FcCache *cache;
- int ref;
- intptr_t size;
- dev_t cache_dev;
- ino_t cache_ino;
- time_t cache_mtime;
- FcCacheSkip *next[1];
-};
-
-/*
- * The head of the skip list; pointers for every possible level
- * in the skip list, plus the largest level in the list
- */
-
-#define FC_CACHE_MAX_LEVEL 16
-
-static FcCacheSkip *fcCacheChains[FC_CACHE_MAX_LEVEL];
-static int fcCacheMaxLevel;
-
-#if HAVE_RANDOM
-# define FcRandom() random()
-#else
-# if HAVE_LRAND48
-# define FcRandom() lrand48()
-# else
-# if HAVE_RAND
-# define FcRandom() rand()
-# endif
-# endif
-#endif
-/*
- * Generate a random level number, distributed
- * so that each level is 1/4 as likely as the one before
- *
- * Note that level numbers run 1 <= level <= MAX_LEVEL
- */
-static int
-random_level (void)
-{
- /* tricky bit -- each bit is '1' 75% of the time */
- long int bits = FcRandom () | FcRandom ();
- int level = 0;
-
- while (++level < FC_CACHE_MAX_LEVEL)
- {
- if (bits & 1)
- break;
- bits >>= 1;
- }
- return level;
-}
-
-/*
- * Insert cache into the list
- */
-static FcBool
-FcCacheInsert (FcCache *cache, struct stat *cache_stat)
-{
- FcCacheSkip **update[FC_CACHE_MAX_LEVEL];
- FcCacheSkip *s, **next;
- int i, level;
-
- /*
- * Find links along each chain
- */
- next = fcCacheChains;
- for (i = fcCacheMaxLevel; --i >= 0; )
- {
- for (; (s = next[i]); next = s->next)
- if (s->cache > cache)
- break;
- update[i] = &next[i];
- }
-
- /*
- * Create new list element
- */
- level = random_level ();
- if (level > fcCacheMaxLevel)
- {
- level = fcCacheMaxLevel + 1;
- update[fcCacheMaxLevel] = &fcCacheChains[fcCacheMaxLevel];
- fcCacheMaxLevel = level;
- }
-
- s = malloc (sizeof (FcCacheSkip) + (level - 1) * sizeof (FcCacheSkip *));
- if (!s)
- return FcFalse;
-
- s->cache = cache;
- s->size = cache->size;
- s->ref = 1;
- if (cache_stat)
- {
- s->cache_dev = cache_stat->st_dev;
- s->cache_ino = cache_stat->st_ino;
- s->cache_mtime = cache_stat->st_mtime;
- }
- else
- {
- s->cache_dev = 0;
- s->cache_ino = 0;
- s->cache_mtime = 0;
- }
-
- /*
- * Insert into all fcCacheChains
- */
- for (i = 0; i < level; i++)
- {
- s->next[i] = *update[i];
- *update[i] = s;
- }
- return FcTrue;
-}
-
-static FcCacheSkip *
-FcCacheFindByAddr (void *object)
-{
- int i;
- FcCacheSkip **next = fcCacheChains;
- FcCacheSkip *s;
-
- /*
- * Walk chain pointers one level at a time
- */
- for (i = fcCacheMaxLevel; --i >= 0;)
- while (next[i] && (char *) object >= ((char *) next[i]->cache + next[i]->size))
- next = next[i]->next;
- /*
- * Here we are
- */
- s = next[0];
- if (s && (char *) object < ((char *) s->cache + s->size))
- return s;
- return NULL;
-}
-
-static void
-FcCacheRemove (FcCache *cache)
-{
- FcCacheSkip **update[FC_CACHE_MAX_LEVEL];
- FcCacheSkip *s, **next;
- int i;
-
- /*
- * Find links along each chain
- */
- next = fcCacheChains;
- for (i = fcCacheMaxLevel; --i >= 0; )
- {
- for (; (s = next[i]); next = s->next)
- if (s->cache >= cache)
- break;
- update[i] = &next[i];
- }
- s = next[0];
- for (i = 0; i < fcCacheMaxLevel && *update[i] == s; i++)
- *update[i] = s->next[i];
- while (fcCacheMaxLevel > 0 && fcCacheChains[fcCacheMaxLevel - 1] == NULL)
- fcCacheMaxLevel--;
- free (s);
-}
-
-static FcCache *
-FcCacheFindByStat (struct stat *cache_stat)
-{
- FcCacheSkip *s;
-
- for (s = fcCacheChains[0]; s; s = s->next[0])
- if (s->cache_dev == cache_stat->st_dev &&
- s->cache_ino == cache_stat->st_ino &&
- s->cache_mtime == cache_stat->st_mtime)
- {
- s->ref++;
- return s->cache;
- }
- return NULL;
-}
-
-static void
-FcDirCacheDispose (FcCache *cache)
-{
- switch (cache->magic) {
- case FC_CACHE_MAGIC_ALLOC:
- free (cache);
- break;
- case FC_CACHE_MAGIC_MMAP:
-#if defined(HAVE_MMAP) || defined(__CYGWIN__)
- munmap (cache, cache->size);
-#elif defined(_WIN32)
- UnmapViewOfFile (cache);
-#endif
- break;
- }
- FcCacheRemove (cache);
-}
-
-void
-FcCacheObjectReference (void *object)
-{
- FcCacheSkip *skip = FcCacheFindByAddr (object);
-
- if (skip)
- skip->ref++;
-}
-
-void
-FcCacheObjectDereference (void *object)
-{
- FcCacheSkip *skip = FcCacheFindByAddr (object);
-
- if (skip)
- {
- skip->ref--;
- if (skip->ref <= 0)
- FcDirCacheDispose (skip->cache);
- }
-}
-
-void
-FcCacheFini (void)
-{
- int i;
-
- for (i = 0; i < FC_CACHE_MAX_LEVEL; i++)
- assert (fcCacheChains[i] == NULL);
- assert (fcCacheMaxLevel == 0);
-}
-
-static FcBool
-FcCacheTimeValid (FcCache *cache, struct stat *dir_stat)
-{
- struct stat dir_static;
-
- if (!dir_stat)
- {
- if (FcStat (FcCacheDir (cache), &dir_static) < 0)
- return FcFalse;
- dir_stat = &dir_static;
- }
- if (FcDebug () & FC_DBG_CACHE)
- printf ("FcCacheTimeValid dir \"%s\" cache time %d dir time %d\n",
- FcCacheDir (cache), cache->mtime, (int) dir_stat->st_mtime);
- return cache->mtime == (int) dir_stat->st_mtime;
-}
-
-/*
- * Map a cache file into memory
- */
-static FcCache *
-FcDirCacheMapFd (int fd, struct stat *fd_stat, struct stat *dir_stat)
-{
- FcCache *cache;
- FcBool allocated = FcFalse;
-
- if (fd_stat->st_size < sizeof (FcCache))
- return NULL;
- cache = FcCacheFindByStat (fd_stat);
- if (cache)
- {
- if (FcCacheTimeValid (cache, dir_stat))
- return cache;
- FcDirCacheUnload (cache);
- cache = NULL;
- }
-
- /*
- * Lage cache files are mmap'ed, smaller cache files are read. This
- * balances the system cost of mmap against per-process memory usage.
- */
- if (fd_stat->st_size >= FC_CACHE_MIN_MMAP)
- {
-#if defined(HAVE_MMAP) || defined(__CYGWIN__)
- cache = mmap (0, fd_stat->st_size, PROT_READ, MAP_SHARED, fd, 0);
- if (cache == MAP_FAILED)
- cache = NULL;
-#elif defined(_WIN32)
- {
- HANDLE hFileMap;
-
- cache = NULL;
- hFileMap = CreateFileMapping((HANDLE) _get_osfhandle(fd), NULL,
- PAGE_READONLY, 0, 0, NULL);
- if (hFileMap != NULL)
- {
- cache = MapViewOfFile (hFileMap, FILE_MAP_READ, 0, 0,
- fd_stat->st_size);
- CloseHandle (hFileMap);
- }
- }
-#endif
- }
- if (!cache)
- {
- cache = malloc (fd_stat->st_size);
- if (!cache)
- return NULL;
-
- if (read (fd, cache, fd_stat->st_size) != fd_stat->st_size)
- {
- free (cache);
- return NULL;
- }
- allocated = FcTrue;
- }
- if (cache->magic != FC_CACHE_MAGIC_MMAP ||
- cache->version < FC_CACHE_CONTENT_VERSION ||
- cache->size != fd_stat->st_size ||
- !FcCacheTimeValid (cache, dir_stat) ||
- !FcCacheInsert (cache, fd_stat))
- {
- if (allocated)
- free (cache);
- else
- {
-#if defined(HAVE_MMAP) || defined(__CYGWIN__)
- munmap (cache, fd_stat->st_size);
-#elif defined(_WIN32)
- UnmapViewOfFile (cache);
-#endif
- }
- return NULL;
- }
-
- /* Mark allocated caches so they're freed rather than unmapped */
- if (allocated)
- cache->magic = FC_CACHE_MAGIC_ALLOC;
-
- return cache;
-}
-
-void
-FcDirCacheReference (FcCache *cache, int nref)
-{
- FcCacheSkip *skip = FcCacheFindByAddr (cache);
-
- if (skip)
- skip->ref += nref;
-}
-
-void
-FcDirCacheUnload (FcCache *cache)
-{
- FcCacheObjectDereference (cache);
-}
-
-static FcBool
-FcDirCacheMapHelper (int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure)
-{
- FcCache *cache = FcDirCacheMapFd (fd, fd_stat, dir_stat);
-
- if (!cache)
- return FcFalse;
- *((FcCache **) closure) = cache;
- return FcTrue;
-}
-
-FcCache *
-FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file)
-{
- FcCache *cache = NULL;
-
- if (!FcDirCacheProcess (config, dir,
- FcDirCacheMapHelper,
- &cache, cache_file))
- return NULL;
- return cache;
-}
-
-FcCache *
-FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat)
-{
- int fd;
- FcCache *cache;
- struct stat my_file_stat;
-
- if (!file_stat)
- file_stat = &my_file_stat;
- fd = FcDirCacheOpenFile (cache_file, file_stat);
- if (fd < 0)
- return NULL;
- cache = FcDirCacheMapFd (fd, file_stat, NULL);
- close (fd);
- return cache;
-}
-
-/*
- * Validate a cache file by reading the header and checking
- * the magic number and the size field
- */
-static FcBool
-FcDirCacheValidateHelper (int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure)
-{
- FcBool ret = FcTrue;
- FcCache c;
-
- if (read (fd, &c, sizeof (FcCache)) != sizeof (FcCache))
- ret = FcFalse;
- else if (c.magic != FC_CACHE_MAGIC_MMAP)
- ret = FcFalse;
- else if (c.version < FC_CACHE_CONTENT_VERSION)
- ret = FcFalse;
- else if (fd_stat->st_size != c.size)
- ret = FcFalse;
- else if (c.mtime != (int) dir_stat->st_mtime)
- ret = FcFalse;
- return ret;
-}
-
-static FcBool
-FcDirCacheValidConfig (const FcChar8 *dir, FcConfig *config)
-{
- return FcDirCacheProcess (config, dir,
- FcDirCacheValidateHelper,
- NULL, NULL);
-}
-
-FcBool
-FcDirCacheValid (const FcChar8 *dir)
-{
- FcConfig *config;
-
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
-
- return FcDirCacheValidConfig (dir, config);
-}
-
-/*
- * Build a cache structure from the given contents
- */
-FcCache *
-FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs)
-{
- FcSerialize *serialize = FcSerializeCreate ();
- FcCache *cache;
- int i;
- intptr_t cache_offset;
- intptr_t dirs_offset;
- FcChar8 *dir_serialize;
- intptr_t *dirs_serialize;
- FcFontSet *set_serialize;
-
- if (!serialize)
- return NULL;
- /*
- * Space for cache structure
- */
- cache_offset = FcSerializeReserve (serialize, sizeof (FcCache));
- /*
- * Directory name
- */
- if (!FcStrSerializeAlloc (serialize, dir))
- goto bail1;
- /*
- * Subdirs
- */
- dirs_offset = FcSerializeAlloc (serialize, dirs, dirs->num * sizeof (FcChar8 *));
- for (i = 0; i < dirs->num; i++)
- if (!FcStrSerializeAlloc (serialize, dirs->strs[i]))
- goto bail1;
-
- /*
- * Patterns
- */
- if (!FcFontSetSerializeAlloc (serialize, set))
- goto bail1;
-
- /* Serialize layout complete. Now allocate space and fill it */
- cache = malloc (serialize->size);
- if (!cache)
- goto bail1;
- /* shut up valgrind */
- memset (cache, 0, serialize->size);
-
- serialize->linear = cache;
-
- cache->magic = FC_CACHE_MAGIC_ALLOC;
- cache->version = FC_CACHE_CONTENT_VERSION;
- cache->size = serialize->size;
- cache->mtime = (int) dir_stat->st_mtime;
-
- /*
- * Serialize directory name
- */
- dir_serialize = FcStrSerialize (serialize, dir);
- if (!dir_serialize)
- goto bail2;
- cache->dir = FcPtrToOffset (cache, dir_serialize);
-
- /*
- * Serialize sub dirs
- */
- dirs_serialize = FcSerializePtr (serialize, dirs);
- if (!dirs_serialize)
- goto bail2;
- cache->dirs = FcPtrToOffset (cache, dirs_serialize);
- cache->dirs_count = dirs->num;
- for (i = 0; i < dirs->num; i++)
- {
- FcChar8 *d_serialize = FcStrSerialize (serialize, dirs->strs[i]);
- if (!d_serialize)
- goto bail2;
- dirs_serialize[i] = FcPtrToOffset (dirs_serialize, d_serialize);
- }
-
- /*
- * Serialize font set
- */
- set_serialize = FcFontSetSerialize (serialize, set);
- if (!set_serialize)
- goto bail2;
- cache->set = FcPtrToOffset (cache, set_serialize);
-
- FcSerializeDestroy (serialize);
-
- FcCacheInsert (cache, NULL);
-
- return cache;
-
-bail2:
- free (cache);
-bail1:
- FcSerializeDestroy (serialize);
- return NULL;
-}
-
-
-#ifdef _WIN32
-#undef mkdir
-#define mkdir(path,mode) _mkdir(path)
-#endif
-
-static FcBool
-FcMakeDirectory (const FcChar8 *dir)
-{
- FcChar8 *parent;
- FcBool ret;
-
- if (strlen ((char *) dir) == 0)
- return FcFalse;
-
- parent = FcStrDirname (dir);
- if (!parent)
- return FcFalse;
- if (access ((char *) parent, F_OK) == 0)
- ret = mkdir ((char *) dir, 0755) == 0 && chmod ((char *) dir, 0755) == 0;
- else if (access ((char *) parent, F_OK) == -1)
- ret = FcMakeDirectory (parent) && (mkdir ((char *) dir, 0755) == 0) && chmod ((char *) dir, 0755) == 0;
- else
- ret = FcFalse;
- FcStrFree (parent);
- return ret;
-}
-
-/* write serialized state to the cache file */
-FcBool
-FcDirCacheWrite (FcCache *cache, FcConfig *config)
-{
- FcChar8 *dir = FcCacheDir (cache);
- FcChar8 cache_base[CACHEBASE_LEN];
- FcChar8 *cache_hashed;
- int fd;
- FcAtomic *atomic;
- FcStrList *list;
- FcChar8 *cache_dir = NULL;
- FcChar8 *test_dir;
- FcCacheSkip *skip;
- struct stat cache_stat;
- int magic;
- int written;
-
- /*
- * Write it to the first directory in the list which is writable
- */
-
- list = FcStrListCreate (config->cacheDirs);
- if (!list)
- return FcFalse;
- while ((test_dir = FcStrListNext (list))) {
- if (access ((char *) test_dir, W_OK|X_OK) == 0)
- {
- cache_dir = test_dir;
- break;
- }
- else
- {
- /*
- * If the directory doesn't exist, try to create it
- */
- if (access ((char *) test_dir, F_OK) == -1) {
- if (FcMakeDirectory (test_dir))
- {
- cache_dir = test_dir;
- break;
- }
- }
- /*
- * Otherwise, try making it writable
- */
- else if (chmod ((char *) test_dir, 0755) == 0)
- {
- cache_dir = test_dir;
- break;
- }
- }
- }
- FcStrListDone (list);
- if (!cache_dir)
- return FcFalse;
-
- FcDirCacheBasename (dir, cache_base);
- cache_hashed = FcStrPlus (cache_dir, cache_base);
- if (!cache_hashed)
- return FcFalse;
-
- if (FcDebug () & FC_DBG_CACHE)
- printf ("FcDirCacheWriteDir dir \"%s\" file \"%s\"\n",
- dir, cache_hashed);
-
- atomic = FcAtomicCreate ((FcChar8 *)cache_hashed);
- if (!atomic)
- goto bail1;
-
- if (!FcAtomicLock (atomic))
- goto bail3;
-
- fd = open((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY, 0666);
- if (fd == -1)
- goto bail4;
-
- /* Temporarily switch magic to MMAP while writing to file */
- magic = cache->magic;
- if (magic != FC_CACHE_MAGIC_MMAP)
- cache->magic = FC_CACHE_MAGIC_MMAP;
-
- /*
- * Write cache contents to file
- */
- written = write (fd, cache, cache->size);
-
- /* Switch magic back */
- if (magic != FC_CACHE_MAGIC_MMAP)
- cache->magic = magic;
-
- if (written != cache->size)
- {
- perror ("write cache");
- goto bail5;
- }
-
- close(fd);
- if (!FcAtomicReplaceOrig(atomic))
- goto bail4;
-
- /* If the file is small, update the cache chain entry such that the
- * new cache file is not read again. If it's large, we don't do that
- * such that we reload it, using mmap, which is shared across processes.
- */
- if (cache->size < FC_CACHE_MIN_MMAP &&
- (skip = FcCacheFindByAddr (cache)) &&
- FcStat (cache_hashed, &cache_stat))
- {
- skip->cache_dev = cache_stat.st_dev;
- skip->cache_ino = cache_stat.st_ino;
- skip->cache_mtime = cache_stat.st_mtime;
- }
-
- FcStrFree (cache_hashed);
- FcAtomicUnlock (atomic);
- FcAtomicDestroy (atomic);
- return FcTrue;
-
- bail5:
- close (fd);
- bail4:
- FcAtomicUnlock (atomic);
- bail3:
- FcAtomicDestroy (atomic);
- bail1:
- FcStrFree (cache_hashed);
- return FcFalse;
-}
-
-/*
- * Hokey little macro trick to permit the definitions of C functions
- * with the same name as CPP macros
- */
-#define args1(x) (x)
-#define args2(x,y) (x,y)
-
-const FcChar8 *
-FcCacheDir args1(const FcCache *c)
-{
- return FcCacheDir (c);
-}
-
-FcFontSet *
-FcCacheCopySet args1(const FcCache *c)
-{
- FcFontSet *old = FcCacheSet (c);
- FcFontSet *new = FcFontSetCreate ();
- int i;
-
- if (!new)
- return NULL;
- for (i = 0; i < old->nfont; i++)
- {
- FcPattern *font = FcFontSetFont (old, i);
-
- FcPatternReference (font);
- if (!FcFontSetAdd (new, font))
- {
- FcFontSetDestroy (new);
- return NULL;
- }
- }
- return new;
-}
-
-const FcChar8 *
-FcCacheSubdir args2(const FcCache *c, int i)
-{
- return FcCacheSubdir (c, i);
-}
-
-int
-FcCacheNumSubdir args1(const FcCache *c)
-{
- return c->dirs_count;
-}
-
-int
-FcCacheNumFont args1(const FcCache *c)
-{
- return FcCacheSet(c)->nfont;
-}
-
-/*
- * This code implements the MD5 message-digest algorithm.
- * The algorithm is due to Ron Rivest. This code was
- * written by Colin Plumb in 1993, no copyright is claimed.
- * This code is in the public domain; do with it what you wish.
- *
- * Equivalent code is available from RSA Data Security, Inc.
- * This code has been tested against that, and is equivalent,
- * except that you don't need to include two pages of legalese
- * with every copy.
- *
- * To compute the message digest of a chunk of bytes, declare an
- * MD5Context structure, pass it to MD5Init, call MD5Update as
- * needed on buffers full of bytes, and then call MD5Final, which
- * will fill a supplied 16-byte array with the digest.
- */
-
-#ifndef HIGHFIRST
-#define byteReverse(buf, len) /* Nothing */
-#else
-/*
- * Note: this code is harmless on little-endian machines.
- */
-void byteReverse(unsigned char *buf, unsigned longs)
-{
- FcChar32 t;
- do {
- t = (FcChar32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
- ((unsigned) buf[1] << 8 | buf[0]);
- *(FcChar32 *) buf = t;
- buf += 4;
- } while (--longs);
-}
-#endif
-
-/*
- * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
- * initialization constants.
- */
-static void MD5Init(struct MD5Context *ctx)
-{
- ctx->buf[0] = 0x67452301;
- ctx->buf[1] = 0xefcdab89;
- ctx->buf[2] = 0x98badcfe;
- ctx->buf[3] = 0x10325476;
-
- ctx->bits[0] = 0;
- ctx->bits[1] = 0;
-}
-
-/*
- * Update context to reflect the concatenation of another buffer full
- * of bytes.
- */
-static void MD5Update(struct MD5Context *ctx, const unsigned char *buf, unsigned len)
-{
- FcChar32 t;
-
- /* Update bitcount */
-
- t = ctx->bits[0];
- if ((ctx->bits[0] = t + ((FcChar32) len << 3)) < t)
- ctx->bits[1]++; /* Carry from low to high */
- ctx->bits[1] += len >> 29;
-
- t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
-
- /* Handle any leading odd-sized chunks */
-
- if (t) {
- unsigned char *p = (unsigned char *) ctx->in + t;
-
- t = 64 - t;
- if (len < t) {
- memcpy(p, buf, len);
- return;
- }
- memcpy(p, buf, t);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
- buf += t;
- len -= t;
- }
- /* Process data in 64-byte chunks */
-
- while (len >= 64) {
- memcpy(ctx->in, buf, 64);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
- buf += 64;
- len -= 64;
- }
-
- /* Handle any remaining bytes of data. */
-
- memcpy(ctx->in, buf, len);
-}
-
-/*
- * Final wrapup - pad to 64-byte boundary with the bit pattern
- * 1 0* (64-bit count of bits processed, MSB-first)
- */
-static void MD5Final(unsigned char digest[16], struct MD5Context *ctx)
-{
- unsigned count;
- unsigned char *p;
-
- /* Compute number of bytes mod 64 */
- count = (ctx->bits[0] >> 3) & 0x3F;
-
- /* Set the first char of padding to 0x80. This is safe since there is
- always at least one byte free */
- p = ctx->in + count;
- *p++ = 0x80;
-
- /* Bytes of padding needed to make 64 bytes */
- count = 64 - 1 - count;
-
- /* Pad out to 56 mod 64 */
- if (count < 8) {
- /* Two lots of padding: Pad the first block to 64 bytes */
- memset(p, 0, count);
- byteReverse(ctx->in, 16);
- MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
-
- /* Now fill the next block with 56 bytes */
- memset(ctx->in, 0, 56);
- } else {
- /* Pad block to 56 bytes */
- memset(p, 0, count - 8);
- }
- byteReverse(ctx->in, 14);
-
- /* Append length in bits and transform */
- ((FcChar32 *) ctx->in)[14] = ctx->bits[0];
- ((FcChar32 *) ctx->in)[15] = ctx->bits[1];
-
- MD5Transform(ctx->buf, (FcChar32 *) ctx->in);
- byteReverse((unsigned char *) ctx->buf, 4);
- memcpy(digest, ctx->buf, 16);
- memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */
-}
-
-
-/* The four core functions - F1 is optimized somewhat */
-
-/* #define F1(x, y, z) (x & y | ~x & z) */
-#define F1(x, y, z) (z ^ (x & (y ^ z)))
-#define F2(x, y, z) F1(z, x, y)
-#define F3(x, y, z) (x ^ y ^ z)
-#define F4(x, y, z) (y ^ (x | ~z))
-
-/* This is the central step in the MD5 algorithm. */
-#define MD5STEP(f, w, x, y, z, data, s) \
- ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
-
-/*
- * The core of the MD5 algorithm, this alters an existing MD5 hash to
- * reflect the addition of 16 longwords of new data. MD5Update blocks
- * the data and converts bytes into longwords for this routine.
- */
-static void MD5Transform(FcChar32 buf[4], FcChar32 in[16])
-{
- register FcChar32 a, b, c, d;
-
- a = buf[0];
- b = buf[1];
- c = buf[2];
- d = buf[3];
-
- MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
- MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
- MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
- MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
- MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
- MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
- MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
- MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
- MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
- MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
- MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
- MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
- MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
- MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
- MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
- MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
-
- MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
- MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
- MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
- MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
- MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
- MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
- MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
- MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
- MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
- MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
- MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
- MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
- MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
- MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
- MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
- MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
-
- MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
- MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
- MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
- MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
- MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
- MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
- MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
- MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
- MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
- MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
- MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
- MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
- MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
- MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
- MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
- MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
-
- MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
- MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
- MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
- MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
- MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
- MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
- MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
- MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
- MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
- MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
- MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
- MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
- MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
- MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
- MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
- MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
-
- buf[0] += a;
- buf[1] += b;
- buf[2] += c;
- buf[3] += d;
-}
-#define __fccache__
-#include "fcaliastail.h"
-#undef __fccache__
+/* + * Copyright © 2000 Keith Packard + * Copyright © 2005 Patrick Lam + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include "fcarch.h" +#include <stdio.h> +#include <fcntl.h> +#include <dirent.h> +#include <string.h> +#include <sys/types.h> +#include <assert.h> +#if defined(HAVE_MMAP) || defined(__CYGWIN__) +# include <unistd.h> +# include <sys/mman.h> +#endif + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + + +struct MD5Context { + FcChar32 buf[4]; + FcChar32 bits[2]; + unsigned char in[64]; +}; + +static void MD5Init(struct MD5Context *ctx); +static void MD5Update(struct MD5Context *ctx, const unsigned char *buf, unsigned len); +static void MD5Final(unsigned char digest[16], struct MD5Context *ctx); +static void MD5Transform(FcChar32 buf[4], FcChar32 in[16]); + +#define CACHEBASE_LEN (1 + 32 + 1 + sizeof (FC_ARCHITECTURE) + sizeof (FC_CACHE_SUFFIX)) + +#ifdef _WIN32 + +#include <windows.h> + +#ifdef __GNUC__ +typedef long long INT64; +#define EPOCH_OFFSET 11644473600ll +#else +#define EPOCH_OFFSET 11644473600i64 +typedef __int64 INT64; +#endif + +/* Workaround for problems in the stat() in the Microsoft C library: + * + * 1) stat() uses FindFirstFile() to get the file + * attributes. Unfortunately this API doesn't return correct values + * for modification time of a directory until some time after a file + * or subdirectory has been added to the directory. (This causes + * run-test.sh to fail, for instance.) GetFileAttributesEx() is + * better, it returns the updated timestamp right away. + * + * 2) stat() does some strange things related to backward + * compatibility with the local time timestamps on FAT volumes and + * daylight saving time. This causes problems after the switches + * to/from daylight saving time. See + * http://bugzilla.gnome.org/show_bug.cgi?id=154968 , especially + * comment #30, and http://www.codeproject.com/datetime/dstbugs.asp . + * We don't need any of that, FAT and Win9x are as good as dead. So + * just use the UTC timestamps from NTFS, converted to the Unix epoch. + */ + +int +FcStat (const char *file, struct stat *statb) +{ + WIN32_FILE_ATTRIBUTE_DATA wfad; + char full_path_name[MAX_PATH]; + char *basename; + DWORD rc; + + if (!GetFileAttributesEx (file, GetFileExInfoStandard, &wfad)) + return -1; + + statb->st_dev = 0; + + /* Calculate a pseudo inode number as a hash of the full path name. + * Call GetLongPathName() to get the spelling of the path name as it + * is on disk. + */ + rc = GetFullPathName (file, sizeof (full_path_name), full_path_name, &basename); + if (rc == 0 || rc > sizeof (full_path_name)) + return -1; + + rc = GetLongPathName (full_path_name, full_path_name, sizeof (full_path_name)); + statb->st_ino = FcStringHash (full_path_name); + + statb->st_mode = _S_IREAD | _S_IWRITE; + statb->st_mode |= (statb->st_mode >> 3) | (statb->st_mode >> 6); + + if (wfad.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + statb->st_mode |= _S_IFDIR; + else + statb->st_mode |= _S_IFREG; + + statb->st_nlink = 1; + statb->st_uid = statb->st_gid = 0; + statb->st_rdev = 0; + + if (wfad.nFileSizeHigh > 0) + return -1; + statb->st_size = wfad.nFileSizeLow; + + statb->st_atime = (*(INT64 *)&wfad.ftLastAccessTime)/10000000 - EPOCH_OFFSET; + statb->st_mtime = (*(INT64 *)&wfad.ftLastWriteTime)/10000000 - EPOCH_OFFSET; + statb->st_ctime = statb->st_mtime; + + return 0; +} + +#else + +int +FcStat (const char *file, struct stat *statb) +{ + return stat ((char *) file, statb); +} + +#endif + +static const char bin2hex[] = { '0', '1', '2', '3', + '4', '5', '6', '7', + '8', '9', 'a', 'b', + 'c', 'd', 'e', 'f' }; + +static FcChar8 * +FcDirCacheBasename (const FcChar8 * dir, FcChar8 cache_base[CACHEBASE_LEN]) +{ + unsigned char hash[16]; + FcChar8 *hex_hash; + int cnt; + struct MD5Context ctx; + + MD5Init (&ctx); + MD5Update (&ctx, (const unsigned char *)dir, strlen ((const char *) dir)); + + MD5Final (hash, &ctx); + + cache_base[0] = '/'; + hex_hash = cache_base + 1; + for (cnt = 0; cnt < 16; ++cnt) + { + hex_hash[2*cnt ] = bin2hex[hash[cnt] >> 4]; + hex_hash[2*cnt+1] = bin2hex[hash[cnt] & 0xf]; + } + hex_hash[2*cnt] = 0; + strcat ((char *) cache_base, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX); + + return cache_base; +} + +FcBool +FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config) +{ + FcChar8 *cache_hashed = NULL; + FcChar8 cache_base[CACHEBASE_LEN]; + FcStrList *list; + FcChar8 *cache_dir; + + FcDirCacheBasename (dir, cache_base); + + list = FcStrListCreate (config->cacheDirs); + if (!list) + return FcFalse; + + while ((cache_dir = FcStrListNext (list))) + { + cache_hashed = FcStrPlus (cache_dir, cache_base); + if (!cache_hashed) + break; + (void) unlink ((char *) cache_hashed); + FcStrFree (cache_hashed); + } + FcStrListDone (list); + /* return FcFalse if something went wrong */ + if (cache_dir) + return FcFalse; + return FcTrue; +} + +static int +FcDirCacheOpenFile (const FcChar8 *cache_file, struct stat *file_stat) +{ + int fd; + +#ifdef _WIN32 + if (FcStat (cache_file, file_stat) < 0) + return -1; +#endif + fd = open((char *) cache_file, O_RDONLY | O_BINARY); + if (fd < 0) + return fd; +#ifndef _WIN32 + if (fstat (fd, file_stat) < 0) + { + close (fd); + return -1; + } +#endif + return fd; +} + +/* + * Look for a cache file for the specified dir. Attempt + * to use each one we find, stopping when the callback + * indicates success + */ +static FcBool +FcDirCacheProcess (FcConfig *config, const FcChar8 *dir, + FcBool (*callback) (int fd, struct stat *fd_stat, + struct stat *dir_stat, void *closure), + void *closure, FcChar8 **cache_file_ret) +{ + int fd = -1; + FcChar8 cache_base[CACHEBASE_LEN]; + FcStrList *list; + FcChar8 *cache_dir; + struct stat file_stat, dir_stat; + FcBool ret = FcFalse; + + if (FcStat (dir, &dir_stat) < 0) + return FcFalse; + + FcDirCacheBasename (dir, cache_base); + + list = FcStrListCreate (config->cacheDirs); + if (!list) + return FcFalse; + + while ((cache_dir = FcStrListNext (list))) + { + FcChar8 *cache_hashed = FcStrPlus (cache_dir, cache_base); + if (!cache_hashed) + break; + fd = FcDirCacheOpenFile (cache_hashed, &file_stat); + if (fd >= 0) { + ret = (*callback) (fd, &file_stat, &dir_stat, closure); + close (fd); + if (ret) + { + if (cache_file_ret) + *cache_file_ret = cache_hashed; + else + FcStrFree (cache_hashed); + break; + } + } + FcStrFree (cache_hashed); + } + FcStrListDone (list); + + return ret; +} + +#define FC_CACHE_MIN_MMAP 1024 + +/* + * Skip list element, make sure the 'next' pointer is the last thing + * in the structure, it will be allocated large enough to hold all + * of the necessary pointers + */ + +typedef struct _FcCacheSkip FcCacheSkip; + +struct _FcCacheSkip { + FcCache *cache; + int ref; + intptr_t size; + dev_t cache_dev; + ino_t cache_ino; + time_t cache_mtime; + FcCacheSkip *next[1]; +}; + +/* + * The head of the skip list; pointers for every possible level + * in the skip list, plus the largest level in the list + */ + +#define FC_CACHE_MAX_LEVEL 16 + +static FcCacheSkip *fcCacheChains[FC_CACHE_MAX_LEVEL]; +static int fcCacheMaxLevel; + +#if HAVE_RANDOM +# define FcRandom() random() +#else +# if HAVE_LRAND48 +# define FcRandom() lrand48() +# else +# if HAVE_RAND +# define FcRandom() rand() +# endif +# endif +#endif +/* + * Generate a random level number, distributed + * so that each level is 1/4 as likely as the one before + * + * Note that level numbers run 1 <= level <= MAX_LEVEL + */ +static int +random_level (void) +{ + /* tricky bit -- each bit is '1' 75% of the time */ + long int bits = FcRandom () | FcRandom (); + int level = 0; + + while (++level < FC_CACHE_MAX_LEVEL) + { + if (bits & 1) + break; + bits >>= 1; + } + return level; +} + +/* + * Insert cache into the list + */ +static FcBool +FcCacheInsert (FcCache *cache, struct stat *cache_stat) +{ + FcCacheSkip **update[FC_CACHE_MAX_LEVEL]; + FcCacheSkip *s, **next; + int i, level; + + /* + * Find links along each chain + */ + next = fcCacheChains; + for (i = fcCacheMaxLevel; --i >= 0; ) + { + for (; (s = next[i]); next = s->next) + if (s->cache > cache) + break; + update[i] = &next[i]; + } + + /* + * Create new list element + */ + level = random_level (); + if (level > fcCacheMaxLevel) + { + level = fcCacheMaxLevel + 1; + update[fcCacheMaxLevel] = &fcCacheChains[fcCacheMaxLevel]; + fcCacheMaxLevel = level; + } + + s = malloc (sizeof (FcCacheSkip) + (level - 1) * sizeof (FcCacheSkip *)); + if (!s) + return FcFalse; + + s->cache = cache; + s->size = cache->size; + s->ref = 1; + if (cache_stat) + { + s->cache_dev = cache_stat->st_dev; + s->cache_ino = cache_stat->st_ino; + s->cache_mtime = cache_stat->st_mtime; + } + else + { + s->cache_dev = 0; + s->cache_ino = 0; + s->cache_mtime = 0; + } + + /* + * Insert into all fcCacheChains + */ + for (i = 0; i < level; i++) + { + s->next[i] = *update[i]; + *update[i] = s; + } + return FcTrue; +} + +static FcCacheSkip * +FcCacheFindByAddr (void *object) +{ + int i; + FcCacheSkip **next = fcCacheChains; + FcCacheSkip *s; + + /* + * Walk chain pointers one level at a time + */ + for (i = fcCacheMaxLevel; --i >= 0;) + while (next[i] && (char *) object >= ((char *) next[i]->cache + next[i]->size)) + next = next[i]->next; + /* + * Here we are + */ + s = next[0]; + if (s && (char *) object < ((char *) s->cache + s->size)) + return s; + return NULL; +} + +static void +FcCacheRemove (FcCache *cache) +{ + FcCacheSkip **update[FC_CACHE_MAX_LEVEL]; + FcCacheSkip *s, **next; + int i; + + /* + * Find links along each chain + */ + next = fcCacheChains; + for (i = fcCacheMaxLevel; --i >= 0; ) + { + for (; (s = next[i]); next = s->next) + if (s->cache >= cache) + break; + update[i] = &next[i]; + } + s = next[0]; + for (i = 0; i < fcCacheMaxLevel && *update[i] == s; i++) + *update[i] = s->next[i]; + while (fcCacheMaxLevel > 0 && fcCacheChains[fcCacheMaxLevel - 1] == NULL) + fcCacheMaxLevel--; + free (s); +} + +static FcCache * +FcCacheFindByStat (struct stat *cache_stat) +{ + FcCacheSkip *s; + + for (s = fcCacheChains[0]; s; s = s->next[0]) + if (s->cache_dev == cache_stat->st_dev && + s->cache_ino == cache_stat->st_ino && + s->cache_mtime == cache_stat->st_mtime) + { + s->ref++; + return s->cache; + } + return NULL; +} + +static void +FcDirCacheDispose (FcCache *cache) +{ + switch (cache->magic) { + case FC_CACHE_MAGIC_ALLOC: + free (cache); + break; + case FC_CACHE_MAGIC_MMAP: +#if defined(HAVE_MMAP) || defined(__CYGWIN__) + munmap (cache, cache->size); +#elif defined(_WIN32) + UnmapViewOfFile (cache); +#endif + break; + } + FcCacheRemove (cache); +} + +void +FcCacheObjectReference (void *object) +{ + FcCacheSkip *skip = FcCacheFindByAddr (object); + + if (skip) + skip->ref++; +} + +void +FcCacheObjectDereference (void *object) +{ + FcCacheSkip *skip = FcCacheFindByAddr (object); + + if (skip) + { + skip->ref--; + if (skip->ref <= 0) + FcDirCacheDispose (skip->cache); + } +} + +void +FcCacheFini (void) +{ + int i; + + for (i = 0; i < FC_CACHE_MAX_LEVEL; i++) + assert (fcCacheChains[i] == NULL); + assert (fcCacheMaxLevel == 0); +} + +static FcBool +FcCacheTimeValid (FcCache *cache, struct stat *dir_stat) +{ + struct stat dir_static; + + if (!dir_stat) + { + if (FcStat (FcCacheDir (cache), &dir_static) < 0) + return FcFalse; + dir_stat = &dir_static; + } + if (FcDebug () & FC_DBG_CACHE) + printf ("FcCacheTimeValid dir \"%s\" cache time %d dir time %d\n", + FcCacheDir (cache), cache->mtime, (int) dir_stat->st_mtime); + return cache->mtime == (int) dir_stat->st_mtime; +} + +/* + * Map a cache file into memory + */ +static FcCache * +FcDirCacheMapFd (int fd, struct stat *fd_stat, struct stat *dir_stat) +{ + FcCache *cache; + FcBool allocated = FcFalse; + + if (fd_stat->st_size < sizeof (FcCache)) + return NULL; + cache = FcCacheFindByStat (fd_stat); + if (cache) + { + if (FcCacheTimeValid (cache, dir_stat)) + return cache; + FcDirCacheUnload (cache); + cache = NULL; + } + + /* + * Lage cache files are mmap'ed, smaller cache files are read. This + * balances the system cost of mmap against per-process memory usage. + */ + if (fd_stat->st_size >= FC_CACHE_MIN_MMAP) + { +#if defined(HAVE_MMAP) || defined(__CYGWIN__) + cache = mmap (0, fd_stat->st_size, PROT_READ, MAP_SHARED, fd, 0); + if (cache == MAP_FAILED) + cache = NULL; +#elif defined(_WIN32) + { + HANDLE hFileMap; + + cache = NULL; + hFileMap = CreateFileMapping((HANDLE) _get_osfhandle(fd), NULL, + PAGE_READONLY, 0, 0, NULL); + if (hFileMap != NULL) + { + cache = MapViewOfFile (hFileMap, FILE_MAP_READ, 0, 0, + fd_stat->st_size); + CloseHandle (hFileMap); + } + } +#endif + } + if (!cache) + { + cache = malloc (fd_stat->st_size); + if (!cache) + return NULL; + + if (read (fd, cache, fd_stat->st_size) != fd_stat->st_size) + { + free (cache); + return NULL; + } + allocated = FcTrue; + } + if (cache->magic != FC_CACHE_MAGIC_MMAP || + cache->version < FC_CACHE_CONTENT_VERSION || + cache->size != fd_stat->st_size || + !FcCacheTimeValid (cache, dir_stat) || + !FcCacheInsert (cache, fd_stat)) + { + if (allocated) + free (cache); + else + { +#if defined(HAVE_MMAP) || defined(__CYGWIN__) + munmap (cache, fd_stat->st_size); +#elif defined(_WIN32) + UnmapViewOfFile (cache); +#endif + } + return NULL; + } + + /* Mark allocated caches so they're freed rather than unmapped */ + if (allocated) + cache->magic = FC_CACHE_MAGIC_ALLOC; + + return cache; +} + +void +FcDirCacheReference (FcCache *cache, int nref) +{ + FcCacheSkip *skip = FcCacheFindByAddr (cache); + + if (skip) + skip->ref += nref; +} + +void +FcDirCacheUnload (FcCache *cache) +{ + FcCacheObjectDereference (cache); +} + +static FcBool +FcDirCacheMapHelper (int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure) +{ + FcCache *cache = FcDirCacheMapFd (fd, fd_stat, dir_stat); + + if (!cache) + return FcFalse; + *((FcCache **) closure) = cache; + return FcTrue; +} + +FcCache * +FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file) +{ + FcCache *cache = NULL; + + if (!FcDirCacheProcess (config, dir, + FcDirCacheMapHelper, + &cache, cache_file)) + return NULL; + return cache; +} + +FcCache * +FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat) +{ + int fd; + FcCache *cache; + struct stat my_file_stat; + + if (!file_stat) + file_stat = &my_file_stat; + fd = FcDirCacheOpenFile (cache_file, file_stat); + if (fd < 0) + return NULL; + cache = FcDirCacheMapFd (fd, file_stat, NULL); + close (fd); + return cache; +} + +/* + * Validate a cache file by reading the header and checking + * the magic number and the size field + */ +static FcBool +FcDirCacheValidateHelper (int fd, struct stat *fd_stat, struct stat *dir_stat, void *closure) +{ + FcBool ret = FcTrue; + FcCache c; + + if (read (fd, &c, sizeof (FcCache)) != sizeof (FcCache)) + ret = FcFalse; + else if (c.magic != FC_CACHE_MAGIC_MMAP) + ret = FcFalse; + else if (c.version < FC_CACHE_CONTENT_VERSION) + ret = FcFalse; + else if (fd_stat->st_size != c.size) + ret = FcFalse; + else if (c.mtime != (int) dir_stat->st_mtime) + ret = FcFalse; + return ret; +} + +static FcBool +FcDirCacheValidConfig (const FcChar8 *dir, FcConfig *config) +{ + return FcDirCacheProcess (config, dir, + FcDirCacheValidateHelper, + NULL, NULL); +} + +FcBool +FcDirCacheValid (const FcChar8 *dir) +{ + FcConfig *config; + + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + + return FcDirCacheValidConfig (dir, config); +} + +/* + * Build a cache structure from the given contents + */ +FcCache * +FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs) +{ + FcSerialize *serialize = FcSerializeCreate (); + FcCache *cache; + int i; + intptr_t cache_offset; + intptr_t dirs_offset; + FcChar8 *dir_serialize; + intptr_t *dirs_serialize; + FcFontSet *set_serialize; + + if (!serialize) + return NULL; + /* + * Space for cache structure + */ + cache_offset = FcSerializeReserve (serialize, sizeof (FcCache)); + /* + * Directory name + */ + if (!FcStrSerializeAlloc (serialize, dir)) + goto bail1; + /* + * Subdirs + */ + dirs_offset = FcSerializeAlloc (serialize, dirs, dirs->num * sizeof (FcChar8 *)); + for (i = 0; i < dirs->num; i++) + if (!FcStrSerializeAlloc (serialize, dirs->strs[i])) + goto bail1; + + /* + * Patterns + */ + if (!FcFontSetSerializeAlloc (serialize, set)) + goto bail1; + + /* Serialize layout complete. Now allocate space and fill it */ + cache = malloc (serialize->size); + if (!cache) + goto bail1; + /* shut up valgrind */ + memset (cache, 0, serialize->size); + + serialize->linear = cache; + + cache->magic = FC_CACHE_MAGIC_ALLOC; + cache->version = FC_CACHE_CONTENT_VERSION; + cache->size = serialize->size; + cache->mtime = (int) dir_stat->st_mtime; + + /* + * Serialize directory name + */ + dir_serialize = FcStrSerialize (serialize, dir); + if (!dir_serialize) + goto bail2; + cache->dir = FcPtrToOffset (cache, dir_serialize); + + /* + * Serialize sub dirs + */ + dirs_serialize = FcSerializePtr (serialize, dirs); + if (!dirs_serialize) + goto bail2; + cache->dirs = FcPtrToOffset (cache, dirs_serialize); + cache->dirs_count = dirs->num; + for (i = 0; i < dirs->num; i++) + { + FcChar8 *d_serialize = FcStrSerialize (serialize, dirs->strs[i]); + if (!d_serialize) + goto bail2; + dirs_serialize[i] = FcPtrToOffset (dirs_serialize, d_serialize); + } + + /* + * Serialize font set + */ + set_serialize = FcFontSetSerialize (serialize, set); + if (!set_serialize) + goto bail2; + cache->set = FcPtrToOffset (cache, set_serialize); + + FcSerializeDestroy (serialize); + + FcCacheInsert (cache, NULL); + + return cache; + +bail2: + free (cache); +bail1: + FcSerializeDestroy (serialize); + return NULL; +} + + +#ifdef _WIN32 +#undef mkdir +#define mkdir(path,mode) _mkdir(path) +#endif + +static FcBool +FcMakeDirectory (const FcChar8 *dir) +{ + FcChar8 *parent; + FcBool ret; + + if (strlen ((char *) dir) == 0) + return FcFalse; + + parent = FcStrDirname (dir); + if (!parent) + return FcFalse; + if (access ((char *) parent, F_OK) == 0) + ret = mkdir ((char *) dir, 0755) == 0 && chmod ((char *) dir, 0755) == 0; + else if (access ((char *) parent, F_OK) == -1) + ret = FcMakeDirectory (parent) && (mkdir ((char *) dir, 0755) == 0) && chmod ((char *) dir, 0755) == 0; + else + ret = FcFalse; + FcStrFree (parent); + return ret; +} + +/* write serialized state to the cache file */ +FcBool +FcDirCacheWrite (FcCache *cache, FcConfig *config) +{ + FcChar8 *dir = FcCacheDir (cache); + FcChar8 cache_base[CACHEBASE_LEN]; + FcChar8 *cache_hashed; + int fd; + FcAtomic *atomic; + FcStrList *list; + FcChar8 *cache_dir = NULL; + FcChar8 *test_dir; + FcCacheSkip *skip; + struct stat cache_stat; + int magic; + int written; + + /* + * Write it to the first directory in the list which is writable + */ + + list = FcStrListCreate (config->cacheDirs); + if (!list) + return FcFalse; + while ((test_dir = FcStrListNext (list))) { + if (access ((char *) test_dir, W_OK|X_OK) == 0) + { + cache_dir = test_dir; + break; + } + else + { + /* + * If the directory doesn't exist, try to create it + */ + if (access ((char *) test_dir, F_OK) == -1) { + if (FcMakeDirectory (test_dir)) + { + cache_dir = test_dir; + break; + } + } + /* + * Otherwise, try making it writable + */ + else if (chmod ((char *) test_dir, 0755) == 0) + { + cache_dir = test_dir; + break; + } + } + } + FcStrListDone (list); + if (!cache_dir) + return FcFalse; + + FcDirCacheBasename (dir, cache_base); + cache_hashed = FcStrPlus (cache_dir, cache_base); + if (!cache_hashed) + return FcFalse; + + if (FcDebug () & FC_DBG_CACHE) + printf ("FcDirCacheWriteDir dir \"%s\" file \"%s\"\n", + dir, cache_hashed); + + atomic = FcAtomicCreate ((FcChar8 *)cache_hashed); + if (!atomic) + goto bail1; + + if (!FcAtomicLock (atomic)) + goto bail3; + + fd = open((char *)FcAtomicNewFile (atomic), O_RDWR | O_CREAT | O_BINARY, 0666); + if (fd == -1) + goto bail4; + + /* Temporarily switch magic to MMAP while writing to file */ + magic = cache->magic; + if (magic != FC_CACHE_MAGIC_MMAP) + cache->magic = FC_CACHE_MAGIC_MMAP; + + /* + * Write cache contents to file + */ + written = write (fd, cache, cache->size); + + /* Switch magic back */ + if (magic != FC_CACHE_MAGIC_MMAP) + cache->magic = magic; + + if (written != cache->size) + { + perror ("write cache"); + goto bail5; + } + + close(fd); + if (!FcAtomicReplaceOrig(atomic)) + goto bail4; + + /* If the file is small, update the cache chain entry such that the + * new cache file is not read again. If it's large, we don't do that + * such that we reload it, using mmap, which is shared across processes. + */ + if (cache->size < FC_CACHE_MIN_MMAP && + (skip = FcCacheFindByAddr (cache)) && + FcStat (cache_hashed, &cache_stat)) + { + skip->cache_dev = cache_stat.st_dev; + skip->cache_ino = cache_stat.st_ino; + skip->cache_mtime = cache_stat.st_mtime; + } + + FcStrFree (cache_hashed); + FcAtomicUnlock (atomic); + FcAtomicDestroy (atomic); + return FcTrue; + + bail5: + close (fd); + bail4: + FcAtomicUnlock (atomic); + bail3: + FcAtomicDestroy (atomic); + bail1: + FcStrFree (cache_hashed); + return FcFalse; +} + +/* + * Hokey little macro trick to permit the definitions of C functions + * with the same name as CPP macros + */ +#define args1(x) (x) +#define args2(x,y) (x,y) + +const FcChar8 * +FcCacheDir args1(const FcCache *c) +{ + return FcCacheDir (c); +} + +FcFontSet * +FcCacheCopySet args1(const FcCache *c) +{ + FcFontSet *old = FcCacheSet (c); + FcFontSet *new = FcFontSetCreate (); + int i; + + if (!new) + return NULL; + for (i = 0; i < old->nfont; i++) + { + FcPattern *font = FcFontSetFont (old, i); + + FcPatternReference (font); + if (!FcFontSetAdd (new, font)) + { + FcFontSetDestroy (new); + return NULL; + } + } + return new; +} + +const FcChar8 * +FcCacheSubdir args2(const FcCache *c, int i) +{ + return FcCacheSubdir (c, i); +} + +int +FcCacheNumSubdir args1(const FcCache *c) +{ + return c->dirs_count; +} + +int +FcCacheNumFont args1(const FcCache *c) +{ + return FcCacheSet(c)->nfont; +} + +/* + * This code implements the MD5 message-digest algorithm. + * The algorithm is due to Ron Rivest. This code was + * written by Colin Plumb in 1993, no copyright is claimed. + * This code is in the public domain; do with it what you wish. + * + * Equivalent code is available from RSA Data Security, Inc. + * This code has been tested against that, and is equivalent, + * except that you don't need to include two pages of legalese + * with every copy. + * + * To compute the message digest of a chunk of bytes, declare an + * MD5Context structure, pass it to MD5Init, call MD5Update as + * needed on buffers full of bytes, and then call MD5Final, which + * will fill a supplied 16-byte array with the digest. + */ + +#ifndef HIGHFIRST +#define byteReverse(buf, len) /* Nothing */ +#else +/* + * Note: this code is harmless on little-endian machines. + */ +void byteReverse(unsigned char *buf, unsigned longs) +{ + FcChar32 t; + do { + t = (FcChar32) ((unsigned) buf[3] << 8 | buf[2]) << 16 | + ((unsigned) buf[1] << 8 | buf[0]); + *(FcChar32 *) buf = t; + buf += 4; + } while (--longs); +} +#endif + +/* + * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious + * initialization constants. + */ +static void MD5Init(struct MD5Context *ctx) +{ + ctx->buf[0] = 0x67452301; + ctx->buf[1] = 0xefcdab89; + ctx->buf[2] = 0x98badcfe; + ctx->buf[3] = 0x10325476; + + ctx->bits[0] = 0; + ctx->bits[1] = 0; +} + +/* + * Update context to reflect the concatenation of another buffer full + * of bytes. + */ +static void MD5Update(struct MD5Context *ctx, const unsigned char *buf, unsigned len) +{ + FcChar32 t; + + /* Update bitcount */ + + t = ctx->bits[0]; + if ((ctx->bits[0] = t + ((FcChar32) len << 3)) < t) + ctx->bits[1]++; /* Carry from low to high */ + ctx->bits[1] += len >> 29; + + t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */ + + /* Handle any leading odd-sized chunks */ + + if (t) { + unsigned char *p = (unsigned char *) ctx->in + t; + + t = 64 - t; + if (len < t) { + memcpy(p, buf, len); + return; + } + memcpy(p, buf, t); + byteReverse(ctx->in, 16); + MD5Transform(ctx->buf, (FcChar32 *) ctx->in); + buf += t; + len -= t; + } + /* Process data in 64-byte chunks */ + + while (len >= 64) { + memcpy(ctx->in, buf, 64); + byteReverse(ctx->in, 16); + MD5Transform(ctx->buf, (FcChar32 *) ctx->in); + buf += 64; + len -= 64; + } + + /* Handle any remaining bytes of data. */ + + memcpy(ctx->in, buf, len); +} + +/* + * Final wrapup - pad to 64-byte boundary with the bit pattern + * 1 0* (64-bit count of bits processed, MSB-first) + */ +static void MD5Final(unsigned char digest[16], struct MD5Context *ctx) +{ + unsigned count; + unsigned char *p; + + /* Compute number of bytes mod 64 */ + count = (ctx->bits[0] >> 3) & 0x3F; + + /* Set the first char of padding to 0x80. This is safe since there is + always at least one byte free */ + p = ctx->in + count; + *p++ = 0x80; + + /* Bytes of padding needed to make 64 bytes */ + count = 64 - 1 - count; + + /* Pad out to 56 mod 64 */ + if (count < 8) { + /* Two lots of padding: Pad the first block to 64 bytes */ + memset(p, 0, count); + byteReverse(ctx->in, 16); + MD5Transform(ctx->buf, (FcChar32 *) ctx->in); + + /* Now fill the next block with 56 bytes */ + memset(ctx->in, 0, 56); + } else { + /* Pad block to 56 bytes */ + memset(p, 0, count - 8); + } + byteReverse(ctx->in, 14); + + /* Append length in bits and transform */ + ((FcChar32 *) ctx->in)[14] = ctx->bits[0]; + ((FcChar32 *) ctx->in)[15] = ctx->bits[1]; + + MD5Transform(ctx->buf, (FcChar32 *) ctx->in); + byteReverse((unsigned char *) ctx->buf, 4); + memcpy(digest, ctx->buf, 16); + memset(ctx, 0, sizeof(ctx)); /* In case it's sensitive */ +} + + +/* The four core functions - F1 is optimized somewhat */ + +/* #define F1(x, y, z) (x & y | ~x & z) */ +#define F1(x, y, z) (z ^ (x & (y ^ z))) +#define F2(x, y, z) F1(z, x, y) +#define F3(x, y, z) (x ^ y ^ z) +#define F4(x, y, z) (y ^ (x | ~z)) + +/* This is the central step in the MD5 algorithm. */ +#define MD5STEP(f, w, x, y, z, data, s) \ + ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x ) + +/* + * The core of the MD5 algorithm, this alters an existing MD5 hash to + * reflect the addition of 16 longwords of new data. MD5Update blocks + * the data and converts bytes into longwords for this routine. + */ +static void MD5Transform(FcChar32 buf[4], FcChar32 in[16]) +{ + register FcChar32 a, b, c, d; + + a = buf[0]; + b = buf[1]; + c = buf[2]; + d = buf[3]; + + MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); + MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); + MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); + MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); + MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); + MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); + MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); + MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); + MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); + MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); + MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); + MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); + MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); + MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); + MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); + MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); + + MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); + MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); + MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); + MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); + MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); + MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); + MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); + MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); + MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); + MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); + MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); + MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); + MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); + MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); + MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); + MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); + + MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); + MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); + MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); + MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); + MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); + MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); + MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); + MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); + MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); + MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); + MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); + MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); + MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); + MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); + MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); + MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); + + MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); + MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); + MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); + MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); + MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); + MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); + MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); + MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); + MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); + MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); + MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); + MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); + MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); + MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); + MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); + MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); + + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; +} +#define __fccache__ +#include "fcaliastail.h" +#undef __fccache__ diff --git a/fontconfig/src/fccfg.c b/fontconfig/src/fccfg.c index d948ab8d5..09c59919d 100644 --- a/fontconfig/src/fccfg.c +++ b/fontconfig/src/fccfg.c @@ -1,2108 +1,2108 @@ -/*
- * fontconfig/src/fccfg.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <dirent.h>
-#include <sys/types.h>
-
-#if defined (_WIN32) && (defined (PIC) || defined (DLL_EXPORT))
-#define STRICT
-#include <windows.h>
-#undef STRICT
-#endif
-
-#if defined (_WIN32) && !defined (R_OK)
-#define R_OK 4
-#endif
-
-FcConfig *_fcConfig;
-
-FcConfig *
-FcConfigCreate (void)
-{
- FcSetName set;
- FcConfig *config;
-
- config = malloc (sizeof (FcConfig));
- if (!config)
- goto bail0;
- FcMemAlloc (FC_MEM_CONFIG, sizeof (FcConfig));
-
- config->configDirs = FcStrSetCreate ();
- if (!config->configDirs)
- goto bail1;
-
- config->configFiles = FcStrSetCreate ();
- if (!config->configFiles)
- goto bail2;
-
- config->fontDirs = FcStrSetCreate ();
- if (!config->fontDirs)
- goto bail3;
-
- config->acceptGlobs = FcStrSetCreate ();
- if (!config->acceptGlobs)
- goto bail4;
-
- config->rejectGlobs = FcStrSetCreate ();
- if (!config->rejectGlobs)
- goto bail5;
-
- config->acceptPatterns = FcFontSetCreate ();
- if (!config->acceptPatterns)
- goto bail6;
-
- config->rejectPatterns = FcFontSetCreate ();
- if (!config->rejectPatterns)
- goto bail7;
-
- config->cacheDirs = FcStrSetCreate ();
- if (!config->cacheDirs)
- goto bail8;
-
- config->blanks = 0;
-
- config->substPattern = 0;
- config->substFont = 0;
- config->substScan = 0;
- config->maxObjects = 0;
- for (set = FcSetSystem; set <= FcSetApplication; set++)
- config->fonts[set] = 0;
-
- config->rescanTime = time(0);
- config->rescanInterval = 30;
-
- config->expr_pool = NULL;
-
- config->ref = 1;
-
- return config;
-
-bail8:
- FcFontSetDestroy (config->rejectPatterns);
-bail7:
- FcFontSetDestroy (config->acceptPatterns);
-bail6:
- FcStrSetDestroy (config->rejectGlobs);
-bail5:
- FcStrSetDestroy (config->acceptGlobs);
-bail4:
- FcStrSetDestroy (config->fontDirs);
-bail3:
- FcStrSetDestroy (config->configFiles);
-bail2:
- FcStrSetDestroy (config->configDirs);
-bail1:
- free (config);
- FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig));
-bail0:
- return 0;
-}
-
-static FcFileTime
-FcConfigNewestFile (FcStrSet *files)
-{
- FcStrList *list = FcStrListCreate (files);
- FcFileTime newest = { 0, FcFalse };
- FcChar8 *file;
- struct stat statb;
-
- if (list)
- {
- while ((file = FcStrListNext (list)))
- if (FcStat (file, &statb) == 0)
- if (!newest.set || statb.st_mtime - newest.time > 0)
- {
- newest.set = FcTrue;
- newest.time = statb.st_mtime;
- }
- FcStrListDone (list);
- }
- return newest;
-}
-
-FcBool
-FcConfigUptoDate (FcConfig *config)
-{
- FcFileTime config_time, config_dir_time, font_time;
- time_t now = time(0);
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
- config_time = FcConfigNewestFile (config->configFiles);
- config_dir_time = FcConfigNewestFile (config->configDirs);
- font_time = FcConfigNewestFile (config->fontDirs);
- if ((config_time.set && config_time.time - config->rescanTime > 0) ||
- (config_dir_time.set && (config_dir_time.time - config->rescanTime) > 0) ||
- (font_time.set && (font_time.time - config->rescanTime) > 0))
- {
- /* We need to check for potential clock problems here (OLPC ticket #6046) */
- if ((config_time.set && (config_time.time - now) > 0) ||
- (config_dir_time.set && (config_dir_time.time - now) > 0) ||
- (font_time.set && (font_time.time - now) > 0))
- {
- fprintf (stderr,
- "Fontconfig warning: Directory/file mtime in the future. New fonts may not be detected\n");
- config->rescanTime = now;
- return FcTrue;
- }
- else
- return FcFalse;
- }
- config->rescanTime = now;
- return FcTrue;
-}
-
-static void
-FcSubstDestroy (FcSubst *s)
-{
- FcSubst *n;
-
- while (s)
- {
- n = s->next;
- if (s->test)
- FcTestDestroy (s->test);
- if (s->edit)
- FcEditDestroy (s->edit);
- free (s);
- FcMemFree (FC_MEM_SUBST, sizeof (FcSubst));
- s = n;
- }
-}
-
-FcExpr *
-FcConfigAllocExpr (FcConfig *config)
-{
- if (!config->expr_pool || config->expr_pool->next == config->expr_pool->end)
- {
- FcExprPage *new_page;
-
- new_page = malloc (sizeof (FcExprPage));
- if (!new_page)
- return 0;
- FcMemAlloc (FC_MEM_EXPR, sizeof (FcExprPage));
-
- new_page->next_page = config->expr_pool;
- new_page->next = new_page->exprs;
- config->expr_pool = new_page;
- }
-
- return config->expr_pool->next++;
-}
-
-FcConfig *
-FcConfigReference (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
-
- config->ref++;
-
- return config;
-}
-
-void
-FcConfigDestroy (FcConfig *config)
-{
- FcSetName set;
- FcExprPage *page;
-
- if (--config->ref > 0)
- return;
-
- if (config == _fcConfig)
- _fcConfig = 0;
-
- FcStrSetDestroy (config->configDirs);
- FcStrSetDestroy (config->fontDirs);
- FcStrSetDestroy (config->cacheDirs);
- FcStrSetDestroy (config->configFiles);
- FcStrSetDestroy (config->acceptGlobs);
- FcStrSetDestroy (config->rejectGlobs);
- FcFontSetDestroy (config->acceptPatterns);
- FcFontSetDestroy (config->rejectPatterns);
-
- if (config->blanks)
- FcBlanksDestroy (config->blanks);
-
- FcSubstDestroy (config->substPattern);
- FcSubstDestroy (config->substFont);
- FcSubstDestroy (config->substScan);
- for (set = FcSetSystem; set <= FcSetApplication; set++)
- if (config->fonts[set])
- FcFontSetDestroy (config->fonts[set]);
-
- page = config->expr_pool;
- while (page)
- {
- FcExprPage *next = page->next_page;
- FcMemFree (FC_MEM_EXPR, sizeof (FcExprPage));
- free (page);
- page = next;
- }
-
- free (config);
- FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig));
-}
-
-/*
- * Add cache to configuration, adding fonts and directories
- */
-
-FcBool
-FcConfigAddCache (FcConfig *config, FcCache *cache,
- FcSetName set, FcStrSet *dirSet)
-{
- FcFontSet *fs;
- intptr_t *dirs;
- int i;
-
- /*
- * Add fonts
- */
- fs = FcCacheSet (cache);
- if (fs)
- {
- int nref = 0;
-
- for (i = 0; i < fs->nfont; i++)
- {
- FcPattern *font = FcFontSetFont (fs, i);
- FcChar8 *font_file;
-
- /*
- * Check to see if font is banned by filename
- */
- if (FcPatternObjectGetString (font, FC_FILE_OBJECT,
- 0, &font_file) == FcResultMatch &&
- !FcConfigAcceptFilename (config, font_file))
- {
- continue;
- }
-
- /*
- * Check to see if font is banned by pattern
- */
- if (!FcConfigAcceptFont (config, font))
- continue;
-
- nref++;
- FcFontSetAdd (config->fonts[set], font);
- }
- FcDirCacheReference (cache, nref);
- }
-
- /*
- * Add directories
- */
- dirs = FcCacheDirs (cache);
- if (dirs)
- {
- for (i = 0; i < cache->dirs_count; i++)
- {
- FcChar8 *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8);
- if (FcConfigAcceptFilename (config, dir))
- FcStrSetAddFilename (dirSet, dir);
- }
- }
- return FcTrue;
-}
-
-static FcBool
-FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet)
-{
- FcStrList *dirlist;
- FcChar8 *dir;
- FcCache *cache;
-
- dirlist = FcStrListCreate (dirSet);
- if (!dirlist)
- return FcFalse;
-
- while ((dir = FcStrListNext (dirlist)))
- {
- if (FcDebug () & FC_DBG_FONTSET)
- printf ("adding fonts from%s\n", dir);
- cache = FcDirCacheRead (dir, FcFalse, config);
- if (!cache)
- continue;
- FcConfigAddCache (config, cache, set, dirSet);
- FcDirCacheUnload (cache);
- }
- FcStrListDone (dirlist);
- return FcTrue;
-}
-
-/*
- * Scan the current list of directories in the configuration
- * and build the set of available fonts.
- */
-
-FcBool
-FcConfigBuildFonts (FcConfig *config)
-{
- FcFontSet *fonts;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
-
- fonts = FcFontSetCreate ();
- if (!fonts)
- return FcFalse;
-
- FcConfigSetFonts (config, fonts, FcSetSystem);
-
- if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs))
- return FcFalse;
- if (FcDebug () & FC_DBG_FONTSET)
- FcFontSetPrint (fonts);
- return FcTrue;
-}
-
-FcBool
-FcConfigSetCurrent (FcConfig *config)
-{
- if (config == _fcConfig)
- return FcTrue;
-
- if (!config->fonts)
- if (!FcConfigBuildFonts (config))
- return FcFalse;
-
- if (_fcConfig)
- FcConfigDestroy (_fcConfig);
- _fcConfig = config;
- return FcTrue;
-}
-
-FcConfig *
-FcConfigGetCurrent (void)
-{
- if (!_fcConfig)
- if (!FcInit ())
- return 0;
- return _fcConfig;
-}
-
-FcBool
-FcConfigAddConfigDir (FcConfig *config,
- const FcChar8 *d)
-{
- return FcStrSetAddFilename (config->configDirs, d);
-}
-
-FcStrList *
-FcConfigGetConfigDirs (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return FcStrListCreate (config->configDirs);
-}
-
-FcBool
-FcConfigAddFontDir (FcConfig *config,
- const FcChar8 *d)
-{
- return FcStrSetAddFilename (config->fontDirs, d);
-}
-
-FcBool
-FcConfigAddDir (FcConfig *config,
- const FcChar8 *d)
-{
- return (FcConfigAddConfigDir (config, d) &&
- FcConfigAddFontDir (config, d));
-}
-
-FcStrList *
-FcConfigGetFontDirs (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return FcStrListCreate (config->fontDirs);
-}
-
-FcBool
-FcConfigAddCacheDir (FcConfig *config,
- const FcChar8 *d)
-{
- return FcStrSetAddFilename (config->cacheDirs, d);
-}
-
-FcStrList *
-FcConfigGetCacheDirs (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return FcStrListCreate (config->cacheDirs);
-}
-
-FcBool
-FcConfigAddConfigFile (FcConfig *config,
- const FcChar8 *f)
-{
- FcBool ret;
- FcChar8 *file = FcConfigFilename (f);
-
- if (!file)
- return FcFalse;
-
- ret = FcStrSetAdd (config->configFiles, file);
- FcStrFree (file);
- return ret;
-}
-
-FcStrList *
-FcConfigGetConfigFiles (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return FcStrListCreate (config->configFiles);
-}
-
-FcChar8 *
-FcConfigGetCache (FcConfig *config)
-{
- return NULL;
-}
-
-FcFontSet *
-FcConfigGetFonts (FcConfig *config,
- FcSetName set)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return config->fonts[set];
-}
-
-void
-FcConfigSetFonts (FcConfig *config,
- FcFontSet *fonts,
- FcSetName set)
-{
- if (config->fonts[set])
- FcFontSetDestroy (config->fonts[set]);
- config->fonts[set] = fonts;
-}
-
-FcBlanks *
-FcConfigGetBlanks (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return config->blanks;
-}
-
-FcBool
-FcConfigAddBlank (FcConfig *config,
- FcChar32 blank)
-{
- FcBlanks *b, *freeme = 0;
-
- b = config->blanks;
- if (!b)
- {
- freeme = b = FcBlanksCreate ();
- if (!b)
- return FcFalse;
- }
- if (!FcBlanksAdd (b, blank))
- {
- if (freeme)
- FcBlanksDestroy (freeme);
- return FcFalse;
- }
- config->blanks = b;
- return FcTrue;
-}
-
-int
-FcConfigGetRescanInterval (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- return config->rescanInterval;
-}
-
-FcBool
-FcConfigSetRescanInterval (FcConfig *config, int rescanInterval)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
- config->rescanInterval = rescanInterval;
- return FcTrue;
-}
-
-/*
- * A couple of typos escaped into the library
- */
-int
-FcConfigGetRescanInverval (FcConfig *config)
-{
- return FcConfigGetRescanInterval (config);
-}
-
-FcBool
-FcConfigSetRescanInverval (FcConfig *config, int rescanInterval)
-{
- return FcConfigSetRescanInterval (config, rescanInterval);
-}
-
-
-FcBool
-FcConfigAddEdit (FcConfig *config,
- FcTest *test,
- FcEdit *edit,
- FcMatchKind kind)
-{
- FcSubst *subst, **prev;
- FcTest *t;
- int num;
-
- switch (kind) {
- case FcMatchPattern:
- prev = &config->substPattern;
- break;
- case FcMatchFont:
- prev = &config->substFont;
- break;
- case FcMatchScan:
- prev = &config->substScan;
- break;
- default:
- return FcFalse;
- }
- subst = (FcSubst *) malloc (sizeof (FcSubst));
- if (!subst)
- return FcFalse;
- FcMemAlloc (FC_MEM_SUBST, sizeof (FcSubst));
- for (; *prev; prev = &(*prev)->next);
- *prev = subst;
- subst->next = 0;
- subst->test = test;
- subst->edit = edit;
- num = 0;
- for (t = test; t; t = t->next)
- {
- if (t->kind == FcMatchDefault)
- t->kind = kind;
- num++;
- }
- if (config->maxObjects < num)
- config->maxObjects = num;
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("Add Subst ");
- FcSubstPrint (subst);
- }
- return FcTrue;
-}
-
-typedef struct _FcSubState {
- FcPatternElt *elt;
- FcValueList *value;
-} FcSubState;
-
-static FcValue
-FcConfigPromote (FcValue v, FcValue u)
-{
- if (v.type == FcTypeInteger)
- {
- v.type = FcTypeDouble;
- v.u.d = (double) v.u.i;
- }
- else if (v.type == FcTypeVoid && u.type == FcTypeMatrix)
- {
- v.u.m = &FcIdentityMatrix;
- v.type = FcTypeMatrix;
- }
- else if (v.type == FcTypeString && u.type == FcTypeLangSet)
- {
- v.u.l = FcLangSetPromote (v.u.s);
- v.type = FcTypeLangSet;
- }
- return v;
-}
-
-FcBool
-FcConfigCompareValue (const FcValue *left_o,
- FcOp op,
- const FcValue *right_o)
-{
- FcValue left = FcValueCanonicalize(left_o);
- FcValue right = FcValueCanonicalize(right_o);
- FcBool ret = FcFalse;
-
- left = FcConfigPromote (left, right);
- right = FcConfigPromote (right, left);
- if (left.type == right.type)
- {
- switch (left.type) {
- case FcTypeInteger:
- break; /* FcConfigPromote prevents this from happening */
- case FcTypeDouble:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = left.u.d == right.u.d;
- break;
- case FcOpNotEqual:
- case FcOpNotContains:
- ret = left.u.d != right.u.d;
- break;
- case FcOpLess:
- ret = left.u.d < right.u.d;
- break;
- case FcOpLessEqual:
- ret = left.u.d <= right.u.d;
- break;
- case FcOpMore:
- ret = left.u.d > right.u.d;
- break;
- case FcOpMoreEqual:
- ret = left.u.d >= right.u.d;
- break;
- default:
- break;
- }
- break;
- case FcTypeBool:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = left.u.b == right.u.b;
- break;
- case FcOpNotEqual:
- case FcOpNotContains:
- ret = left.u.b != right.u.b;
- break;
- default:
- break;
- }
- break;
- case FcTypeString:
- switch (op) {
- case FcOpEqual:
- case FcOpListing:
- ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) == 0;
- break;
- case FcOpContains:
- ret = FcStrStrIgnoreCase (left.u.s, right.u.s) != 0;
- break;
- case FcOpNotEqual:
- ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) != 0;
- break;
- case FcOpNotContains:
- ret = FcStrStrIgnoreCase (left.u.s, right.u.s) == 0;
- break;
- default:
- break;
- }
- break;
- case FcTypeMatrix:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = FcMatrixEqual (left.u.m, right.u.m);
- break;
- case FcOpNotEqual:
- case FcOpNotContains:
- ret = !FcMatrixEqual (left.u.m, right.u.m);
- break;
- default:
- break;
- }
- break;
- case FcTypeCharSet:
- switch (op) {
- case FcOpContains:
- case FcOpListing:
- /* left contains right if right is a subset of left */
- ret = FcCharSetIsSubset (right.u.c, left.u.c);
- break;
- case FcOpNotContains:
- /* left contains right if right is a subset of left */
- ret = !FcCharSetIsSubset (right.u.c, left.u.c);
- break;
- case FcOpEqual:
- ret = FcCharSetEqual (left.u.c, right.u.c);
- break;
- case FcOpNotEqual:
- ret = !FcCharSetEqual (left.u.c, right.u.c);
- break;
- default:
- break;
- }
- break;
- case FcTypeLangSet:
- switch (op) {
- case FcOpContains:
- case FcOpListing:
- ret = FcLangSetContains (left.u.l, right.u.l);
- break;
- case FcOpNotContains:
- ret = !FcLangSetContains (left.u.l, right.u.l);
- break;
- case FcOpEqual:
- ret = FcLangSetEqual (left.u.l, right.u.l);
- break;
- case FcOpNotEqual:
- ret = !FcLangSetEqual (left.u.l, right.u.l);
- break;
- default:
- break;
- }
- break;
- case FcTypeVoid:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = FcTrue;
- break;
- default:
- break;
- }
- break;
- case FcTypeFTFace:
- switch (op) {
- case FcOpEqual:
- case FcOpContains:
- case FcOpListing:
- ret = left.u.f == right.u.f;
- break;
- case FcOpNotEqual:
- case FcOpNotContains:
- ret = left.u.f != right.u.f;
- break;
- default:
- break;
- }
- break;
- }
- }
- else
- {
- if (op == FcOpNotEqual || op == FcOpNotContains)
- ret = FcTrue;
- }
- return ret;
-}
-
-
-#define _FcDoubleFloor(d) ((int) (d))
-#define _FcDoubleCeil(d) ((double) (int) (d) == (d) ? (int) (d) : (int) ((d) + 1))
-#define FcDoubleFloor(d) ((d) >= 0 ? _FcDoubleFloor(d) : -_FcDoubleCeil(-(d)))
-#define FcDoubleCeil(d) ((d) >= 0 ? _FcDoubleCeil(d) : -_FcDoubleFloor(-(d)))
-#define FcDoubleRound(d) FcDoubleFloor ((d) + 0.5)
-#define FcDoubleTrunc(d) ((d) >= 0 ? _FcDoubleFloor (d) : -_FcDoubleFloor (-(d)))
-
-static FcValue
-FcConfigEvaluate (FcPattern *p, FcExpr *e)
-{
- FcValue v, vl, vr;
- FcResult r;
- FcMatrix *m;
- FcChar8 *str;
-
- switch (e->op) {
- case FcOpInteger:
- v.type = FcTypeInteger;
- v.u.i = e->u.ival;
- break;
- case FcOpDouble:
- v.type = FcTypeDouble;
- v.u.d = e->u.dval;
- break;
- case FcOpString:
- v.type = FcTypeString;
- v.u.s = e->u.sval;
- v = FcValueSave (v);
- break;
- case FcOpMatrix:
- v.type = FcTypeMatrix;
- v.u.m = e->u.mval;
- v = FcValueSave (v);
- break;
- case FcOpCharSet:
- v.type = FcTypeCharSet;
- v.u.c = e->u.cval;
- v = FcValueSave (v);
- break;
- case FcOpLangSet:
- v.type = FcTypeLangSet;
- v.u.l = e->u.lval;
- v = FcValueSave (v);
- break;
- case FcOpBool:
- v.type = FcTypeBool;
- v.u.b = e->u.bval;
- break;
- case FcOpField:
- r = FcPatternObjectGet (p, e->u.object, 0, &v);
- if (r != FcResultMatch)
- v.type = FcTypeVoid;
- v = FcValueSave (v);
- break;
- case FcOpConst:
- if (FcNameConstant (e->u.constant, &v.u.i))
- v.type = FcTypeInteger;
- else
- v.type = FcTypeVoid;
- break;
- case FcOpQuest:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- if (vl.type == FcTypeBool)
- {
- if (vl.u.b)
- v = FcConfigEvaluate (p, e->u.tree.right->u.tree.left);
- else
- v = FcConfigEvaluate (p, e->u.tree.right->u.tree.right);
- }
- else
- v.type = FcTypeVoid;
- FcValueDestroy (vl);
- break;
- case FcOpEqual:
- case FcOpNotEqual:
- case FcOpLess:
- case FcOpLessEqual:
- case FcOpMore:
- case FcOpMoreEqual:
- case FcOpContains:
- case FcOpNotContains:
- case FcOpListing:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- vr = FcConfigEvaluate (p, e->u.tree.right);
- v.type = FcTypeBool;
- v.u.b = FcConfigCompareValue (&vl, e->op, &vr);
- FcValueDestroy (vl);
- FcValueDestroy (vr);
- break;
- case FcOpOr:
- case FcOpAnd:
- case FcOpPlus:
- case FcOpMinus:
- case FcOpTimes:
- case FcOpDivide:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- vr = FcConfigEvaluate (p, e->u.tree.right);
- vl = FcConfigPromote (vl, vr);
- vr = FcConfigPromote (vr, vl);
- if (vl.type == vr.type)
- {
- switch (vl.type) {
- case FcTypeDouble:
- switch (e->op) {
- case FcOpPlus:
- v.type = FcTypeDouble;
- v.u.d = vl.u.d + vr.u.d;
- break;
- case FcOpMinus:
- v.type = FcTypeDouble;
- v.u.d = vl.u.d - vr.u.d;
- break;
- case FcOpTimes:
- v.type = FcTypeDouble;
- v.u.d = vl.u.d * vr.u.d;
- break;
- case FcOpDivide:
- v.type = FcTypeDouble;
- v.u.d = vl.u.d / vr.u.d;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- if (v.type == FcTypeDouble &&
- v.u.d == (double) (int) v.u.d)
- {
- v.type = FcTypeInteger;
- v.u.i = (int) v.u.d;
- }
- break;
- case FcTypeBool:
- switch (e->op) {
- case FcOpOr:
- v.type = FcTypeBool;
- v.u.b = vl.u.b || vr.u.b;
- break;
- case FcOpAnd:
- v.type = FcTypeBool;
- v.u.b = vl.u.b && vr.u.b;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- break;
- case FcTypeString:
- switch (e->op) {
- case FcOpPlus:
- v.type = FcTypeString;
- str = FcStrPlus (vl.u.s, vr.u.s);
- v.u.s = FcStrStaticName (str);
- FcStrFree (str);
-
- if (!v.u.s)
- v.type = FcTypeVoid;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- break;
- case FcTypeMatrix:
- switch (e->op) {
- case FcOpTimes:
- v.type = FcTypeMatrix;
- m = malloc (sizeof (FcMatrix));
- if (m)
- {
- FcMemAlloc (FC_MEM_MATRIX, sizeof (FcMatrix));
- FcMatrixMultiply (m, vl.u.m, vr.u.m);
- v.u.m = m;
- }
- else
- {
- v.type = FcTypeVoid;
- }
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- break;
- case FcTypeCharSet:
- switch (e->op) {
- case FcOpPlus:
- v.type = FcTypeCharSet;
- v.u.c = FcCharSetUnion (vl.u.c, vr.u.c);
- if (!v.u.c)
- v.type = FcTypeVoid;
- break;
- case FcOpMinus:
- v.type = FcTypeCharSet;
- v.u.c = FcCharSetSubtract (vl.u.c, vr.u.c);
- if (!v.u.c)
- v.type = FcTypeVoid;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- break;
- case FcTypeLangSet:
- switch (e->op) {
- case FcOpPlus:
- v.type = FcTypeLangSet;
- v.u.l = FcLangSetUnion (vl.u.l, vr.u.l);
- if (!v.u.l)
- v.type = FcTypeVoid;
- break;
- case FcOpMinus:
- v.type = FcTypeLangSet;
- v.u.l = FcLangSetSubtract (vl.u.l, vr.u.l);
- if (!v.u.l)
- v.type = FcTypeVoid;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- }
- else
- v.type = FcTypeVoid;
- FcValueDestroy (vl);
- FcValueDestroy (vr);
- break;
- case FcOpNot:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeBool:
- v.type = FcTypeBool;
- v.u.b = !vl.u.b;
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- case FcOpFloor:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeInteger:
- v = vl;
- break;
- case FcTypeDouble:
- v.type = FcTypeInteger;
- v.u.i = FcDoubleFloor (vl.u.d);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- case FcOpCeil:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeInteger:
- v = vl;
- break;
- case FcTypeDouble:
- v.type = FcTypeInteger;
- v.u.i = FcDoubleCeil (vl.u.d);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- case FcOpRound:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeInteger:
- v = vl;
- break;
- case FcTypeDouble:
- v.type = FcTypeInteger;
- v.u.i = FcDoubleRound (vl.u.d);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- case FcOpTrunc:
- vl = FcConfigEvaluate (p, e->u.tree.left);
- switch (vl.type) {
- case FcTypeInteger:
- v = vl;
- break;
- case FcTypeDouble:
- v.type = FcTypeInteger;
- v.u.i = FcDoubleTrunc (vl.u.d);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- FcValueDestroy (vl);
- break;
- default:
- v.type = FcTypeVoid;
- break;
- }
- return v;
-}
-
-static FcValueList *
-FcConfigMatchValueList (FcPattern *p,
- FcTest *t,
- FcValueList *values)
-{
- FcValueList *ret = 0;
- FcExpr *e = t->expr;
- FcValue value;
- FcValueList *v;
-
- while (e)
- {
- /* Compute the value of the match expression */
- if (e->op == FcOpComma)
- {
- value = FcConfigEvaluate (p, e->u.tree.left);
- e = e->u.tree.right;
- }
- else
- {
- value = FcConfigEvaluate (p, e);
- e = 0;
- }
-
- for (v = values; v; v = FcValueListNext(v))
- {
- /* Compare the pattern value to the match expression value */
- if (FcConfigCompareValue (&v->value, t->op, &value))
- {
- if (!ret)
- ret = v;
- }
- else
- {
- if (t->qual == FcQualAll)
- {
- ret = 0;
- break;
- }
- }
- }
- FcValueDestroy (value);
- }
- return ret;
-}
-
-static FcValueList *
-FcConfigValues (FcPattern *p, FcExpr *e, FcValueBinding binding)
-{
- FcValueList *l;
-
- if (!e)
- return 0;
- l = (FcValueList *) malloc (sizeof (FcValueList));
- if (!l)
- return 0;
- FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList));
- if (e->op == FcOpComma)
- {
- l->value = FcConfigEvaluate (p, e->u.tree.left);
- l->next = FcConfigValues (p, e->u.tree.right, binding);
- }
- else
- {
- l->value = FcConfigEvaluate (p, e);
- l->next = NULL;
- }
- l->binding = binding;
- if (l->value.type == FcTypeVoid)
- {
- FcValueList *next = FcValueListNext(l);
-
- FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
- free (l);
- l = next;
- }
-
- return l;
-}
-
-static FcBool
-FcConfigAdd (FcValueListPtr *head,
- FcValueList *position,
- FcBool append,
- FcValueList *new)
-{
- FcValueListPtr *prev, last, v;
- FcValueBinding sameBinding;
-
- if (position)
- sameBinding = position->binding;
- else
- sameBinding = FcValueBindingWeak;
- for (v = new; v != NULL; v = FcValueListNext(v))
- if (v->binding == FcValueBindingSame)
- v->binding = sameBinding;
- if (append)
- {
- if (position)
- prev = &position->next;
- else
- for (prev = head; *prev != NULL;
- prev = &(*prev)->next)
- ;
- }
- else
- {
- if (position)
- {
- for (prev = head; *prev != NULL;
- prev = &(*prev)->next)
- {
- if (*prev == position)
- break;
- }
- }
- else
- prev = head;
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- if (*prev == NULL)
- printf ("position not on list\n");
- }
- }
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("%s list before ", append ? "Append" : "Prepend");
- FcValueListPrint (*head);
- printf ("\n");
- }
-
- if (new)
- {
- last = new;
- while (last->next != NULL)
- last = last->next;
-
- last->next = *prev;
- *prev = new;
- }
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("%s list after ", append ? "Append" : "Prepend");
- FcValueListPrint (*head);
- printf ("\n");
- }
-
- return FcTrue;
-}
-
-static void
-FcConfigDel (FcValueListPtr *head,
- FcValueList *position)
-{
- FcValueListPtr *prev;
-
- for (prev = head; *prev != NULL; prev = &(*prev)->next)
- {
- if (*prev == position)
- {
- *prev = position->next;
- position->next = NULL;
- FcValueListDestroy (position);
- break;
- }
- }
-}
-
-static void
-FcConfigPatternAdd (FcPattern *p,
- FcObject object,
- FcValueList *list,
- FcBool append)
-{
- if (list)
- {
- FcPatternElt *e = FcPatternObjectInsertElt (p, object);
-
- if (!e)
- return;
- FcConfigAdd (&e->values, 0, append, list);
- }
-}
-
-/*
- * Delete all values associated with a field
- */
-static void
-FcConfigPatternDel (FcPattern *p,
- FcObject object)
-{
- FcPatternElt *e = FcPatternObjectFindElt (p, object);
- if (!e)
- return;
- while (e->values != NULL)
- FcConfigDel (&e->values, e->values);
-}
-
-static void
-FcConfigPatternCanon (FcPattern *p,
- FcObject object)
-{
- FcPatternElt *e = FcPatternObjectFindElt (p, object);
- if (!e)
- return;
- if (e->values == NULL)
- FcPatternObjectDel (p, object);
-}
-
-FcBool
-FcConfigSubstituteWithPat (FcConfig *config,
- FcPattern *p,
- FcPattern *p_pat,
- FcMatchKind kind)
-{
- FcSubst *s;
- FcSubState *st;
- int i;
- FcTest *t;
- FcEdit *e;
- FcValueList *l;
- FcPattern *m;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
-
- switch (kind) {
- case FcMatchPattern:
- s = config->substPattern;
- break;
- case FcMatchFont:
- s = config->substFont;
- break;
- case FcMatchScan:
- s = config->substScan;
- break;
- default:
- return FcFalse;
- }
-
- st = (FcSubState *) malloc (config->maxObjects * sizeof (FcSubState));
- if (!st && config->maxObjects)
- return FcFalse;
- FcMemAlloc (FC_MEM_SUBSTATE, config->maxObjects * sizeof (FcSubState));
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("FcConfigSubstitute ");
- FcPatternPrint (p);
- }
- for (; s; s = s->next)
- {
- /*
- * Check the tests to see if
- * they all match the pattern
- */
- for (t = s->test, i = 0; t; t = t->next, i++)
- {
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("FcConfigSubstitute test ");
- FcTestPrint (t);
- }
- st[i].elt = 0;
- if (kind == FcMatchFont && t->kind == FcMatchPattern)
- m = p_pat;
- else
- m = p;
- if (m)
- st[i].elt = FcPatternObjectFindElt (m, t->object);
- else
- st[i].elt = 0;
- /*
- * If there's no such field in the font,
- * then FcQualAll matches while FcQualAny does not
- */
- if (!st[i].elt)
- {
- if (t->qual == FcQualAll)
- {
- st[i].value = 0;
- continue;
- }
- else
- break;
- }
- /*
- * Check to see if there is a match, mark the location
- * to apply match-relative edits
- */
- st[i].value = FcConfigMatchValueList (m, t, st[i].elt->values);
- if (!st[i].value)
- break;
- if (t->qual == FcQualFirst && st[i].value != st[i].elt->values)
- break;
- if (t->qual == FcQualNotFirst && st[i].value == st[i].elt->values)
- break;
- }
- if (t)
- {
- if (FcDebug () & FC_DBG_EDIT)
- printf ("No match\n");
- continue;
- }
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("Substitute ");
- FcSubstPrint (s);
- }
- for (e = s->edit; e; e = e->next)
- {
- /*
- * Evaluate the list of expressions
- */
- l = FcConfigValues (p, e->expr, e->binding);
- /*
- * Locate any test associated with this field, skipping
- * tests associated with the pattern when substituting in
- * the font
- */
- for (t = s->test, i = 0; t; t = t->next, i++)
- {
- if ((t->kind == FcMatchFont || kind == FcMatchPattern) &&
- t->object == e->object)
- {
- /*
- * KLUDGE - the pattern may have been reallocated or
- * things may have been inserted or deleted above
- * this element by other edits. Go back and find
- * the element again
- */
- if (e != s->edit && st[i].elt)
- st[i].elt = FcPatternObjectFindElt (p, t->object);
- if (!st[i].elt)
- t = 0;
- break;
- }
- }
- switch (e->op) {
- case FcOpAssign:
- /*
- * If there was a test, then replace the matched
- * value with the new list of values
- */
- if (t)
- {
- FcValueList *thisValue = st[i].value;
- FcValueList *nextValue = thisValue;
-
- /*
- * Append the new list of values after the current value
- */
- FcConfigAdd (&st[i].elt->values, thisValue, FcTrue, l);
- /*
- * Delete the marked value
- */
- if (thisValue)
- FcConfigDel (&st[i].elt->values, thisValue);
- /*
- * Adjust any pointers into the value list to ensure
- * future edits occur at the same place
- */
- for (t = s->test, i = 0; t; t = t->next, i++)
- {
- if (st[i].value == thisValue)
- st[i].value = nextValue;
- }
- break;
- }
- /* fall through ... */
- case FcOpAssignReplace:
- /*
- * Delete all of the values and insert
- * the new set
- */
- FcConfigPatternDel (p, e->object);
- FcConfigPatternAdd (p, e->object, l, FcTrue);
- /*
- * Adjust any pointers into the value list as they no
- * longer point to anything valid
- */
- if (t)
- {
- FcPatternElt *thisElt = st[i].elt;
- for (t = s->test, i = 0; t; t = t->next, i++)
- {
- if (st[i].elt == thisElt)
- st[i].value = 0;
- }
- }
- break;
- case FcOpPrepend:
- if (t)
- {
- FcConfigAdd (&st[i].elt->values, st[i].value, FcFalse, l);
- break;
- }
- /* fall through ... */
- case FcOpPrependFirst:
- FcConfigPatternAdd (p, e->object, l, FcFalse);
- break;
- case FcOpAppend:
- if (t)
- {
- FcConfigAdd (&st[i].elt->values, st[i].value, FcTrue, l);
- break;
- }
- /* fall through ... */
- case FcOpAppendLast:
- FcConfigPatternAdd (p, e->object, l, FcTrue);
- break;
- default:
- FcValueListDestroy (l);
- break;
- }
- }
- /*
- * Now go through the pattern and eliminate
- * any properties without data
- */
- for (e = s->edit; e; e = e->next)
- FcConfigPatternCanon (p, e->object);
-
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("FcConfigSubstitute edit");
- FcPatternPrint (p);
- }
- }
- FcMemFree (FC_MEM_SUBSTATE, config->maxObjects * sizeof (FcSubState));
- free (st);
- if (FcDebug () & FC_DBG_EDIT)
- {
- printf ("FcConfigSubstitute done");
- FcPatternPrint (p);
- }
- return FcTrue;
-}
-
-FcBool
-FcConfigSubstitute (FcConfig *config,
- FcPattern *p,
- FcMatchKind kind)
-{
- return FcConfigSubstituteWithPat (config, p, 0, kind);
-}
-
-#if defined (_WIN32)
-
-# define WIN32_LEAN_AND_MEAN
-# define WIN32_EXTRA_LEAN
-# include <windows.h>
-
-static FcChar8 fontconfig_path[1000] = "";
-
-# if (defined (PIC) || defined (DLL_EXPORT))
-
-BOOL WINAPI
-DllMain (HINSTANCE hinstDLL,
- DWORD fdwReason,
- LPVOID lpvReserved)
-{
- FcChar8 *p;
-
- switch (fdwReason) {
- case DLL_PROCESS_ATTACH:
- if (!GetModuleFileName ((HMODULE) hinstDLL, fontconfig_path,
- sizeof (fontconfig_path)))
- break;
-
- /* If the fontconfig DLL is in a "bin" or "lib" subfolder,
- * assume it's a Unix-style installation tree, and use
- * "etc/fonts" in there as FONTCONFIG_PATH. Otherwise use the
- * folder where the DLL is as FONTCONFIG_PATH.
- */
- p = strrchr (fontconfig_path, '\\');
- if (p)
- {
- *p = '\0';
- p = strrchr (fontconfig_path, '\\');
- if (p && (FcStrCmpIgnoreCase (p + 1, "bin") == 0 ||
- FcStrCmpIgnoreCase (p + 1, "lib") == 0))
- *p = '\0';
- strcat (fontconfig_path, "\\etc\\fonts");
- }
- else
- fontconfig_path[0] = '\0';
-
- break;
- }
-
- return TRUE;
-}
-
-# endif /* !PIC */
-
-#undef FONTCONFIG_PATH
-#define FONTCONFIG_PATH fontconfig_path
-
-#endif /* !_WIN32 */
-
-#ifndef FONTCONFIG_FILE
-#define FONTCONFIG_FILE "fonts.conf"
-#endif
-
-static FcChar8 *
-FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file)
-{
- FcChar8 *path;
- int size;
-
- if (!dir)
- dir = (FcChar8 *) "";
-
- size = strlen ((char *) dir) + 1 + strlen ((char *) file) + 1;
- /*
- * workaround valgrind warning because glibc takes advantage of how it knows memory is
- * allocated to implement strlen by reading in groups of 4
- */
- size = (size + 3) & ~3;
-
- path = malloc (size);
- if (!path)
- return 0;
-
- strcpy ((char *) path, (const char *) dir);
- /* make sure there's a single separator */
-#ifdef _WIN32
- if ((!path[0] || (path[strlen((char *) path)-1] != '/' &&
- path[strlen((char *) path)-1] != '\\')) &&
- !(file[0] == '/' ||
- file[0] == '\\' ||
- (isalpha (file[0]) && file[1] == ':' && (file[2] == '/' || file[2] == '\\'))))
- strcat ((char *) path, "\\");
-#else
- if ((!path[0] || path[strlen((char *) path)-1] != '/') && file[0] != '/')
- strcat ((char *) path, "/");
-#endif
- strcat ((char *) path, (char *) file);
-
- FcMemAlloc (FC_MEM_STRING, size);
- if (access ((char *) path, R_OK) == 0)
- return path;
-
- FcStrFree (path);
- return 0;
-}
-
-static FcChar8 **
-FcConfigGetPath (void)
-{
- FcChar8 **path;
- FcChar8 *env, *e, *colon;
- FcChar8 *dir;
- int npath;
- int i;
-
- npath = 2; /* default dir + null */
- env = (FcChar8 *) getenv ("FONTCONFIG_PATH");
- if (env)
- {
- e = env;
- npath++;
- while (*e)
- if (*e++ == FC_SEARCH_PATH_SEPARATOR)
- npath++;
- }
- path = calloc (npath, sizeof (FcChar8 *));
- if (!path)
- goto bail0;
- i = 0;
-
- if (env)
- {
- e = env;
- while (*e)
- {
- colon = (FcChar8 *) strchr ((char *) e, FC_SEARCH_PATH_SEPARATOR);
- if (!colon)
- colon = e + strlen ((char *) e);
- path[i] = malloc (colon - e + 1);
- if (!path[i])
- goto bail1;
- strncpy ((char *) path[i], (const char *) e, colon - e);
- path[i][colon - e] = '\0';
- if (*colon)
- e = colon + 1;
- else
- e = colon;
- i++;
- }
- }
-
-#ifdef _WIN32
- if (fontconfig_path[0] == '\0')
- {
- char *p;
- if(!GetModuleFileName(NULL, fontconfig_path, sizeof(fontconfig_path)))
- goto bail1;
- p = strrchr (fontconfig_path, '\\');
- if (p) *p = '\0';
- strcat (fontconfig_path, "\\fonts");
- }
-#endif
- dir = (FcChar8 *) FONTCONFIG_PATH;
- path[i] = malloc (strlen ((char *) dir) + 1);
- if (!path[i])
- goto bail1;
- strcpy ((char *) path[i], (const char *) dir);
- return path;
-
-bail1:
- for (i = 0; path[i]; i++)
- free (path[i]);
- free (path);
-bail0:
- return 0;
-}
-
-static void
-FcConfigFreePath (FcChar8 **path)
-{
- FcChar8 **p;
-
- for (p = path; *p; p++)
- free (*p);
- free (path);
-}
-
-static FcBool _FcConfigHomeEnabled = FcTrue;
-
-FcChar8 *
-FcConfigHome (void)
-{
- if (_FcConfigHomeEnabled)
- {
- char *home = getenv ("HOME");
-
-#ifdef _WIN32
- if (home == NULL)
- home = getenv ("USERPROFILE");
-#endif
-
- return (FcChar8 *) home;
- }
- return 0;
-}
-
-FcBool
-FcConfigEnableHome (FcBool enable)
-{
- FcBool prev = _FcConfigHomeEnabled;
- _FcConfigHomeEnabled = enable;
- return prev;
-}
-
-FcChar8 *
-FcConfigFilename (const FcChar8 *url)
-{
- FcChar8 *file, *dir, **path, **p;
-
- if (!url || !*url)
- {
- url = (FcChar8 *) getenv ("FONTCONFIG_FILE");
- if (!url)
- url = (FcChar8 *) FONTCONFIG_FILE;
- }
- file = 0;
-
-#ifdef _WIN32
- if (isalpha (*url) &&
- url[1] == ':' &&
- (url[2] == '/' || url[2] == '\\'))
- goto absolute_path;
-#endif
-
- switch (*url) {
- case '~':
- dir = FcConfigHome ();
- if (dir)
- file = FcConfigFileExists (dir, url + 1);
- else
- file = 0;
- break;
-#ifdef _WIN32
- case '\\':
- absolute_path:
-#endif
- case '/':
- file = FcConfigFileExists (0, url);
- break;
- default:
- path = FcConfigGetPath ();
- if (!path)
- return 0;
- for (p = path; *p; p++)
- {
- file = FcConfigFileExists (*p, url);
- if (file)
- break;
- }
- FcConfigFreePath (path);
- break;
- }
- return file;
-}
-
-/*
- * Manage the application-specific fonts
- */
-
-FcBool
-FcConfigAppFontAddFile (FcConfig *config,
- const FcChar8 *file)
-{
- FcFontSet *set;
- FcStrSet *subdirs;
- FcStrList *sublist;
- FcChar8 *subdir;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
-
- subdirs = FcStrSetCreate ();
- if (!subdirs)
- return FcFalse;
-
- set = FcConfigGetFonts (config, FcSetApplication);
- if (!set)
- {
- set = FcFontSetCreate ();
- if (!set)
- {
- FcStrSetDestroy (subdirs);
- return FcFalse;
- }
- FcConfigSetFonts (config, set, FcSetApplication);
- }
-
- if (!FcFileScanConfig (set, subdirs, config->blanks, file, config))
- {
- FcStrSetDestroy (subdirs);
- return FcFalse;
- }
- if ((sublist = FcStrListCreate (subdirs)))
- {
- while ((subdir = FcStrListNext (sublist)))
- {
- FcConfigAppFontAddDir (config, subdir);
- }
- FcStrListDone (sublist);
- }
- FcStrSetDestroy (subdirs);
- return FcTrue;
-}
-
-FcBool
-FcConfigAppFontAddDir (FcConfig *config,
- const FcChar8 *dir)
-{
- FcFontSet *set;
- FcStrSet *dirs;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return FcFalse;
- }
-
- dirs = FcStrSetCreate ();
- if (!dirs)
- return FcFalse;
-
- set = FcConfigGetFonts (config, FcSetApplication);
- if (!set)
- {
- set = FcFontSetCreate ();
- if (!set)
- {
- FcStrSetDestroy (dirs);
- return FcFalse;
- }
- FcConfigSetFonts (config, set, FcSetApplication);
- }
-
- FcStrSetAddFilename (dirs, dir);
-
- if (!FcConfigAddDirList (config, FcSetApplication, dirs))
- {
- FcStrSetDestroy (dirs);
- return FcFalse;
- }
- FcStrSetDestroy (dirs);
- return FcTrue;
-}
-
-void
-FcConfigAppFontClear (FcConfig *config)
-{
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return;
- }
-
- FcConfigSetFonts (config, 0, FcSetApplication);
-}
-
-/*
- * Manage filename-based font source selectors
- */
-
-FcBool
-FcConfigGlobAdd (FcConfig *config,
- const FcChar8 *glob,
- FcBool accept)
-{
- FcStrSet *set = accept ? config->acceptGlobs : config->rejectGlobs;
-
- return FcStrSetAdd (set, glob);
-}
-
-static FcBool
-FcConfigGlobMatch (const FcChar8 *glob,
- const FcChar8 *string)
-{
- FcChar8 c;
-
- while ((c = *glob++))
- {
- switch (c) {
- case '*':
- /* short circuit common case */
- if (!*glob)
- return FcTrue;
- /* short circuit another common case */
- if (strchr ((char *) glob, '*') == 0)
- string += strlen ((char *) string) - strlen ((char *) glob);
- while (*string)
- {
- if (FcConfigGlobMatch (glob, string))
- return FcTrue;
- string++;
- }
- return FcFalse;
- case '?':
- if (*string++ == '\0')
- return FcFalse;
- break;
- default:
- if (*string++ != c)
- return FcFalse;
- break;
- }
- }
- return *string == '\0';
-}
-
-static FcBool
-FcConfigGlobsMatch (const FcStrSet *globs,
- const FcChar8 *string)
-{
- int i;
-
- for (i = 0; i < globs->num; i++)
- if (FcConfigGlobMatch (globs->strs[i], string))
- return FcTrue;
- return FcFalse;
-}
-
-FcBool
-FcConfigAcceptFilename (FcConfig *config,
- const FcChar8 *filename)
-{
- if (FcConfigGlobsMatch (config->acceptGlobs, filename))
- return FcTrue;
- if (FcConfigGlobsMatch (config->rejectGlobs, filename))
- return FcFalse;
- return FcTrue;
-}
-
-/*
- * Manage font-pattern based font source selectors
- */
-
-FcBool
-FcConfigPatternsAdd (FcConfig *config,
- FcPattern *pattern,
- FcBool accept)
-{
- FcFontSet *set = accept ? config->acceptPatterns : config->rejectPatterns;
-
- return FcFontSetAdd (set, pattern);
-}
-
-static FcBool
-FcConfigPatternsMatch (const FcFontSet *patterns,
- const FcPattern *font)
-{
- int i;
-
- for (i = 0; i < patterns->nfont; i++)
- if (FcListPatternMatchAny (patterns->fonts[i], font))
- return FcTrue;
- return FcFalse;
-}
-
-FcBool
-FcConfigAcceptFont (FcConfig *config,
- const FcPattern *font)
-{
- if (FcConfigPatternsMatch (config->acceptPatterns, font))
- return FcTrue;
- if (FcConfigPatternsMatch (config->rejectPatterns, font))
- return FcFalse;
- return FcTrue;
-}
-#define __fccfg__
-#include "fcaliastail.h"
-#undef __fccfg__
+/* + * fontconfig/src/fccfg.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <dirent.h> +#include <sys/types.h> + +#if defined (_WIN32) && (defined (PIC) || defined (DLL_EXPORT)) +#define STRICT +#include <windows.h> +#undef STRICT +#endif + +#if defined (_WIN32) && !defined (R_OK) +#define R_OK 4 +#endif + +FcConfig *_fcConfig; + +FcConfig * +FcConfigCreate (void) +{ + FcSetName set; + FcConfig *config; + + config = malloc (sizeof (FcConfig)); + if (!config) + goto bail0; + FcMemAlloc (FC_MEM_CONFIG, sizeof (FcConfig)); + + config->configDirs = FcStrSetCreate (); + if (!config->configDirs) + goto bail1; + + config->configFiles = FcStrSetCreate (); + if (!config->configFiles) + goto bail2; + + config->fontDirs = FcStrSetCreate (); + if (!config->fontDirs) + goto bail3; + + config->acceptGlobs = FcStrSetCreate (); + if (!config->acceptGlobs) + goto bail4; + + config->rejectGlobs = FcStrSetCreate (); + if (!config->rejectGlobs) + goto bail5; + + config->acceptPatterns = FcFontSetCreate (); + if (!config->acceptPatterns) + goto bail6; + + config->rejectPatterns = FcFontSetCreate (); + if (!config->rejectPatterns) + goto bail7; + + config->cacheDirs = FcStrSetCreate (); + if (!config->cacheDirs) + goto bail8; + + config->blanks = 0; + + config->substPattern = 0; + config->substFont = 0; + config->substScan = 0; + config->maxObjects = 0; + for (set = FcSetSystem; set <= FcSetApplication; set++) + config->fonts[set] = 0; + + config->rescanTime = time(0); + config->rescanInterval = 30; + + config->expr_pool = NULL; + + config->ref = 1; + + return config; + +bail8: + FcFontSetDestroy (config->rejectPatterns); +bail7: + FcFontSetDestroy (config->acceptPatterns); +bail6: + FcStrSetDestroy (config->rejectGlobs); +bail5: + FcStrSetDestroy (config->acceptGlobs); +bail4: + FcStrSetDestroy (config->fontDirs); +bail3: + FcStrSetDestroy (config->configFiles); +bail2: + FcStrSetDestroy (config->configDirs); +bail1: + free (config); + FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig)); +bail0: + return 0; +} + +static FcFileTime +FcConfigNewestFile (FcStrSet *files) +{ + FcStrList *list = FcStrListCreate (files); + FcFileTime newest = { 0, FcFalse }; + FcChar8 *file; + struct stat statb; + + if (list) + { + while ((file = FcStrListNext (list))) + if (FcStat (file, &statb) == 0) + if (!newest.set || statb.st_mtime - newest.time > 0) + { + newest.set = FcTrue; + newest.time = statb.st_mtime; + } + FcStrListDone (list); + } + return newest; +} + +FcBool +FcConfigUptoDate (FcConfig *config) +{ + FcFileTime config_time, config_dir_time, font_time; + time_t now = time(0); + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + config_time = FcConfigNewestFile (config->configFiles); + config_dir_time = FcConfigNewestFile (config->configDirs); + font_time = FcConfigNewestFile (config->fontDirs); + if ((config_time.set && config_time.time - config->rescanTime > 0) || + (config_dir_time.set && (config_dir_time.time - config->rescanTime) > 0) || + (font_time.set && (font_time.time - config->rescanTime) > 0)) + { + /* We need to check for potential clock problems here (OLPC ticket #6046) */ + if ((config_time.set && (config_time.time - now) > 0) || + (config_dir_time.set && (config_dir_time.time - now) > 0) || + (font_time.set && (font_time.time - now) > 0)) + { + fprintf (stderr, + "Fontconfig warning: Directory/file mtime in the future. New fonts may not be detected\n"); + config->rescanTime = now; + return FcTrue; + } + else + return FcFalse; + } + config->rescanTime = now; + return FcTrue; +} + +static void +FcSubstDestroy (FcSubst *s) +{ + FcSubst *n; + + while (s) + { + n = s->next; + if (s->test) + FcTestDestroy (s->test); + if (s->edit) + FcEditDestroy (s->edit); + free (s); + FcMemFree (FC_MEM_SUBST, sizeof (FcSubst)); + s = n; + } +} + +FcExpr * +FcConfigAllocExpr (FcConfig *config) +{ + if (!config->expr_pool || config->expr_pool->next == config->expr_pool->end) + { + FcExprPage *new_page; + + new_page = malloc (sizeof (FcExprPage)); + if (!new_page) + return 0; + FcMemAlloc (FC_MEM_EXPR, sizeof (FcExprPage)); + + new_page->next_page = config->expr_pool; + new_page->next = new_page->exprs; + config->expr_pool = new_page; + } + + return config->expr_pool->next++; +} + +FcConfig * +FcConfigReference (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + + config->ref++; + + return config; +} + +void +FcConfigDestroy (FcConfig *config) +{ + FcSetName set; + FcExprPage *page; + + if (--config->ref > 0) + return; + + if (config == _fcConfig) + _fcConfig = 0; + + FcStrSetDestroy (config->configDirs); + FcStrSetDestroy (config->fontDirs); + FcStrSetDestroy (config->cacheDirs); + FcStrSetDestroy (config->configFiles); + FcStrSetDestroy (config->acceptGlobs); + FcStrSetDestroy (config->rejectGlobs); + FcFontSetDestroy (config->acceptPatterns); + FcFontSetDestroy (config->rejectPatterns); + + if (config->blanks) + FcBlanksDestroy (config->blanks); + + FcSubstDestroy (config->substPattern); + FcSubstDestroy (config->substFont); + FcSubstDestroy (config->substScan); + for (set = FcSetSystem; set <= FcSetApplication; set++) + if (config->fonts[set]) + FcFontSetDestroy (config->fonts[set]); + + page = config->expr_pool; + while (page) + { + FcExprPage *next = page->next_page; + FcMemFree (FC_MEM_EXPR, sizeof (FcExprPage)); + free (page); + page = next; + } + + free (config); + FcMemFree (FC_MEM_CONFIG, sizeof (FcConfig)); +} + +/* + * Add cache to configuration, adding fonts and directories + */ + +FcBool +FcConfigAddCache (FcConfig *config, FcCache *cache, + FcSetName set, FcStrSet *dirSet) +{ + FcFontSet *fs; + intptr_t *dirs; + int i; + + /* + * Add fonts + */ + fs = FcCacheSet (cache); + if (fs) + { + int nref = 0; + + for (i = 0; i < fs->nfont; i++) + { + FcPattern *font = FcFontSetFont (fs, i); + FcChar8 *font_file; + + /* + * Check to see if font is banned by filename + */ + if (FcPatternObjectGetString (font, FC_FILE_OBJECT, + 0, &font_file) == FcResultMatch && + !FcConfigAcceptFilename (config, font_file)) + { + continue; + } + + /* + * Check to see if font is banned by pattern + */ + if (!FcConfigAcceptFont (config, font)) + continue; + + nref++; + FcFontSetAdd (config->fonts[set], font); + } + FcDirCacheReference (cache, nref); + } + + /* + * Add directories + */ + dirs = FcCacheDirs (cache); + if (dirs) + { + for (i = 0; i < cache->dirs_count; i++) + { + FcChar8 *dir = FcOffsetToPtr (dirs, dirs[i], FcChar8); + if (FcConfigAcceptFilename (config, dir)) + FcStrSetAddFilename (dirSet, dir); + } + } + return FcTrue; +} + +static FcBool +FcConfigAddDirList (FcConfig *config, FcSetName set, FcStrSet *dirSet) +{ + FcStrList *dirlist; + FcChar8 *dir; + FcCache *cache; + + dirlist = FcStrListCreate (dirSet); + if (!dirlist) + return FcFalse; + + while ((dir = FcStrListNext (dirlist))) + { + if (FcDebug () & FC_DBG_FONTSET) + printf ("adding fonts from%s\n", dir); + cache = FcDirCacheRead (dir, FcFalse, config); + if (!cache) + continue; + FcConfigAddCache (config, cache, set, dirSet); + FcDirCacheUnload (cache); + } + FcStrListDone (dirlist); + return FcTrue; +} + +/* + * Scan the current list of directories in the configuration + * and build the set of available fonts. + */ + +FcBool +FcConfigBuildFonts (FcConfig *config) +{ + FcFontSet *fonts; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + + fonts = FcFontSetCreate (); + if (!fonts) + return FcFalse; + + FcConfigSetFonts (config, fonts, FcSetSystem); + + if (!FcConfigAddDirList (config, FcSetSystem, config->fontDirs)) + return FcFalse; + if (FcDebug () & FC_DBG_FONTSET) + FcFontSetPrint (fonts); + return FcTrue; +} + +FcBool +FcConfigSetCurrent (FcConfig *config) +{ + if (config == _fcConfig) + return FcTrue; + + if (!config->fonts) + if (!FcConfigBuildFonts (config)) + return FcFalse; + + if (_fcConfig) + FcConfigDestroy (_fcConfig); + _fcConfig = config; + return FcTrue; +} + +FcConfig * +FcConfigGetCurrent (void) +{ + if (!_fcConfig) + if (!FcInit ()) + return 0; + return _fcConfig; +} + +FcBool +FcConfigAddConfigDir (FcConfig *config, + const FcChar8 *d) +{ + return FcStrSetAddFilename (config->configDirs, d); +} + +FcStrList * +FcConfigGetConfigDirs (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + return FcStrListCreate (config->configDirs); +} + +FcBool +FcConfigAddFontDir (FcConfig *config, + const FcChar8 *d) +{ + return FcStrSetAddFilename (config->fontDirs, d); +} + +FcBool +FcConfigAddDir (FcConfig *config, + const FcChar8 *d) +{ + return (FcConfigAddConfigDir (config, d) && + FcConfigAddFontDir (config, d)); +} + +FcStrList * +FcConfigGetFontDirs (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + return FcStrListCreate (config->fontDirs); +} + +FcBool +FcConfigAddCacheDir (FcConfig *config, + const FcChar8 *d) +{ + return FcStrSetAddFilename (config->cacheDirs, d); +} + +FcStrList * +FcConfigGetCacheDirs (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + return FcStrListCreate (config->cacheDirs); +} + +FcBool +FcConfigAddConfigFile (FcConfig *config, + const FcChar8 *f) +{ + FcBool ret; + FcChar8 *file = FcConfigFilename (f); + + if (!file) + return FcFalse; + + ret = FcStrSetAdd (config->configFiles, file); + FcStrFree (file); + return ret; +} + +FcStrList * +FcConfigGetConfigFiles (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + return FcStrListCreate (config->configFiles); +} + +FcChar8 * +FcConfigGetCache (FcConfig *config) +{ + return NULL; +} + +FcFontSet * +FcConfigGetFonts (FcConfig *config, + FcSetName set) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + return config->fonts[set]; +} + +void +FcConfigSetFonts (FcConfig *config, + FcFontSet *fonts, + FcSetName set) +{ + if (config->fonts[set]) + FcFontSetDestroy (config->fonts[set]); + config->fonts[set] = fonts; +} + +FcBlanks * +FcConfigGetBlanks (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + return config->blanks; +} + +FcBool +FcConfigAddBlank (FcConfig *config, + FcChar32 blank) +{ + FcBlanks *b, *freeme = 0; + + b = config->blanks; + if (!b) + { + freeme = b = FcBlanksCreate (); + if (!b) + return FcFalse; + } + if (!FcBlanksAdd (b, blank)) + { + if (freeme) + FcBlanksDestroy (freeme); + return FcFalse; + } + config->blanks = b; + return FcTrue; +} + +int +FcConfigGetRescanInterval (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + return config->rescanInterval; +} + +FcBool +FcConfigSetRescanInterval (FcConfig *config, int rescanInterval) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + config->rescanInterval = rescanInterval; + return FcTrue; +} + +/* + * A couple of typos escaped into the library + */ +int +FcConfigGetRescanInverval (FcConfig *config) +{ + return FcConfigGetRescanInterval (config); +} + +FcBool +FcConfigSetRescanInverval (FcConfig *config, int rescanInterval) +{ + return FcConfigSetRescanInterval (config, rescanInterval); +} + + +FcBool +FcConfigAddEdit (FcConfig *config, + FcTest *test, + FcEdit *edit, + FcMatchKind kind) +{ + FcSubst *subst, **prev; + FcTest *t; + int num; + + switch (kind) { + case FcMatchPattern: + prev = &config->substPattern; + break; + case FcMatchFont: + prev = &config->substFont; + break; + case FcMatchScan: + prev = &config->substScan; + break; + default: + return FcFalse; + } + subst = (FcSubst *) malloc (sizeof (FcSubst)); + if (!subst) + return FcFalse; + FcMemAlloc (FC_MEM_SUBST, sizeof (FcSubst)); + for (; *prev; prev = &(*prev)->next); + *prev = subst; + subst->next = 0; + subst->test = test; + subst->edit = edit; + num = 0; + for (t = test; t; t = t->next) + { + if (t->kind == FcMatchDefault) + t->kind = kind; + num++; + } + if (config->maxObjects < num) + config->maxObjects = num; + if (FcDebug () & FC_DBG_EDIT) + { + printf ("Add Subst "); + FcSubstPrint (subst); + } + return FcTrue; +} + +typedef struct _FcSubState { + FcPatternElt *elt; + FcValueList *value; +} FcSubState; + +static FcValue +FcConfigPromote (FcValue v, FcValue u) +{ + if (v.type == FcTypeInteger) + { + v.type = FcTypeDouble; + v.u.d = (double) v.u.i; + } + else if (v.type == FcTypeVoid && u.type == FcTypeMatrix) + { + v.u.m = &FcIdentityMatrix; + v.type = FcTypeMatrix; + } + else if (v.type == FcTypeString && u.type == FcTypeLangSet) + { + v.u.l = FcLangSetPromote (v.u.s); + v.type = FcTypeLangSet; + } + return v; +} + +FcBool +FcConfigCompareValue (const FcValue *left_o, + FcOp op, + const FcValue *right_o) +{ + FcValue left = FcValueCanonicalize(left_o); + FcValue right = FcValueCanonicalize(right_o); + FcBool ret = FcFalse; + + left = FcConfigPromote (left, right); + right = FcConfigPromote (right, left); + if (left.type == right.type) + { + switch (left.type) { + case FcTypeInteger: + break; /* FcConfigPromote prevents this from happening */ + case FcTypeDouble: + switch (op) { + case FcOpEqual: + case FcOpContains: + case FcOpListing: + ret = left.u.d == right.u.d; + break; + case FcOpNotEqual: + case FcOpNotContains: + ret = left.u.d != right.u.d; + break; + case FcOpLess: + ret = left.u.d < right.u.d; + break; + case FcOpLessEqual: + ret = left.u.d <= right.u.d; + break; + case FcOpMore: + ret = left.u.d > right.u.d; + break; + case FcOpMoreEqual: + ret = left.u.d >= right.u.d; + break; + default: + break; + } + break; + case FcTypeBool: + switch (op) { + case FcOpEqual: + case FcOpContains: + case FcOpListing: + ret = left.u.b == right.u.b; + break; + case FcOpNotEqual: + case FcOpNotContains: + ret = left.u.b != right.u.b; + break; + default: + break; + } + break; + case FcTypeString: + switch (op) { + case FcOpEqual: + case FcOpListing: + ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) == 0; + break; + case FcOpContains: + ret = FcStrStrIgnoreCase (left.u.s, right.u.s) != 0; + break; + case FcOpNotEqual: + ret = FcStrCmpIgnoreCase (left.u.s, right.u.s) != 0; + break; + case FcOpNotContains: + ret = FcStrStrIgnoreCase (left.u.s, right.u.s) == 0; + break; + default: + break; + } + break; + case FcTypeMatrix: + switch (op) { + case FcOpEqual: + case FcOpContains: + case FcOpListing: + ret = FcMatrixEqual (left.u.m, right.u.m); + break; + case FcOpNotEqual: + case FcOpNotContains: + ret = !FcMatrixEqual (left.u.m, right.u.m); + break; + default: + break; + } + break; + case FcTypeCharSet: + switch (op) { + case FcOpContains: + case FcOpListing: + /* left contains right if right is a subset of left */ + ret = FcCharSetIsSubset (right.u.c, left.u.c); + break; + case FcOpNotContains: + /* left contains right if right is a subset of left */ + ret = !FcCharSetIsSubset (right.u.c, left.u.c); + break; + case FcOpEqual: + ret = FcCharSetEqual (left.u.c, right.u.c); + break; + case FcOpNotEqual: + ret = !FcCharSetEqual (left.u.c, right.u.c); + break; + default: + break; + } + break; + case FcTypeLangSet: + switch (op) { + case FcOpContains: + case FcOpListing: + ret = FcLangSetContains (left.u.l, right.u.l); + break; + case FcOpNotContains: + ret = !FcLangSetContains (left.u.l, right.u.l); + break; + case FcOpEqual: + ret = FcLangSetEqual (left.u.l, right.u.l); + break; + case FcOpNotEqual: + ret = !FcLangSetEqual (left.u.l, right.u.l); + break; + default: + break; + } + break; + case FcTypeVoid: + switch (op) { + case FcOpEqual: + case FcOpContains: + case FcOpListing: + ret = FcTrue; + break; + default: + break; + } + break; + case FcTypeFTFace: + switch (op) { + case FcOpEqual: + case FcOpContains: + case FcOpListing: + ret = left.u.f == right.u.f; + break; + case FcOpNotEqual: + case FcOpNotContains: + ret = left.u.f != right.u.f; + break; + default: + break; + } + break; + } + } + else + { + if (op == FcOpNotEqual || op == FcOpNotContains) + ret = FcTrue; + } + return ret; +} + + +#define _FcDoubleFloor(d) ((int) (d)) +#define _FcDoubleCeil(d) ((double) (int) (d) == (d) ? (int) (d) : (int) ((d) + 1)) +#define FcDoubleFloor(d) ((d) >= 0 ? _FcDoubleFloor(d) : -_FcDoubleCeil(-(d))) +#define FcDoubleCeil(d) ((d) >= 0 ? _FcDoubleCeil(d) : -_FcDoubleFloor(-(d))) +#define FcDoubleRound(d) FcDoubleFloor ((d) + 0.5) +#define FcDoubleTrunc(d) ((d) >= 0 ? _FcDoubleFloor (d) : -_FcDoubleFloor (-(d))) + +static FcValue +FcConfigEvaluate (FcPattern *p, FcExpr *e) +{ + FcValue v, vl, vr; + FcResult r; + FcMatrix *m; + FcChar8 *str; + + switch (e->op) { + case FcOpInteger: + v.type = FcTypeInteger; + v.u.i = e->u.ival; + break; + case FcOpDouble: + v.type = FcTypeDouble; + v.u.d = e->u.dval; + break; + case FcOpString: + v.type = FcTypeString; + v.u.s = e->u.sval; + v = FcValueSave (v); + break; + case FcOpMatrix: + v.type = FcTypeMatrix; + v.u.m = e->u.mval; + v = FcValueSave (v); + break; + case FcOpCharSet: + v.type = FcTypeCharSet; + v.u.c = e->u.cval; + v = FcValueSave (v); + break; + case FcOpLangSet: + v.type = FcTypeLangSet; + v.u.l = e->u.lval; + v = FcValueSave (v); + break; + case FcOpBool: + v.type = FcTypeBool; + v.u.b = e->u.bval; + break; + case FcOpField: + r = FcPatternObjectGet (p, e->u.object, 0, &v); + if (r != FcResultMatch) + v.type = FcTypeVoid; + v = FcValueSave (v); + break; + case FcOpConst: + if (FcNameConstant (e->u.constant, &v.u.i)) + v.type = FcTypeInteger; + else + v.type = FcTypeVoid; + break; + case FcOpQuest: + vl = FcConfigEvaluate (p, e->u.tree.left); + if (vl.type == FcTypeBool) + { + if (vl.u.b) + v = FcConfigEvaluate (p, e->u.tree.right->u.tree.left); + else + v = FcConfigEvaluate (p, e->u.tree.right->u.tree.right); + } + else + v.type = FcTypeVoid; + FcValueDestroy (vl); + break; + case FcOpEqual: + case FcOpNotEqual: + case FcOpLess: + case FcOpLessEqual: + case FcOpMore: + case FcOpMoreEqual: + case FcOpContains: + case FcOpNotContains: + case FcOpListing: + vl = FcConfigEvaluate (p, e->u.tree.left); + vr = FcConfigEvaluate (p, e->u.tree.right); + v.type = FcTypeBool; + v.u.b = FcConfigCompareValue (&vl, e->op, &vr); + FcValueDestroy (vl); + FcValueDestroy (vr); + break; + case FcOpOr: + case FcOpAnd: + case FcOpPlus: + case FcOpMinus: + case FcOpTimes: + case FcOpDivide: + vl = FcConfigEvaluate (p, e->u.tree.left); + vr = FcConfigEvaluate (p, e->u.tree.right); + vl = FcConfigPromote (vl, vr); + vr = FcConfigPromote (vr, vl); + if (vl.type == vr.type) + { + switch (vl.type) { + case FcTypeDouble: + switch (e->op) { + case FcOpPlus: + v.type = FcTypeDouble; + v.u.d = vl.u.d + vr.u.d; + break; + case FcOpMinus: + v.type = FcTypeDouble; + v.u.d = vl.u.d - vr.u.d; + break; + case FcOpTimes: + v.type = FcTypeDouble; + v.u.d = vl.u.d * vr.u.d; + break; + case FcOpDivide: + v.type = FcTypeDouble; + v.u.d = vl.u.d / vr.u.d; + break; + default: + v.type = FcTypeVoid; + break; + } + if (v.type == FcTypeDouble && + v.u.d == (double) (int) v.u.d) + { + v.type = FcTypeInteger; + v.u.i = (int) v.u.d; + } + break; + case FcTypeBool: + switch (e->op) { + case FcOpOr: + v.type = FcTypeBool; + v.u.b = vl.u.b || vr.u.b; + break; + case FcOpAnd: + v.type = FcTypeBool; + v.u.b = vl.u.b && vr.u.b; + break; + default: + v.type = FcTypeVoid; + break; + } + break; + case FcTypeString: + switch (e->op) { + case FcOpPlus: + v.type = FcTypeString; + str = FcStrPlus (vl.u.s, vr.u.s); + v.u.s = FcStrStaticName (str); + FcStrFree (str); + + if (!v.u.s) + v.type = FcTypeVoid; + break; + default: + v.type = FcTypeVoid; + break; + } + break; + case FcTypeMatrix: + switch (e->op) { + case FcOpTimes: + v.type = FcTypeMatrix; + m = malloc (sizeof (FcMatrix)); + if (m) + { + FcMemAlloc (FC_MEM_MATRIX, sizeof (FcMatrix)); + FcMatrixMultiply (m, vl.u.m, vr.u.m); + v.u.m = m; + } + else + { + v.type = FcTypeVoid; + } + break; + default: + v.type = FcTypeVoid; + break; + } + break; + case FcTypeCharSet: + switch (e->op) { + case FcOpPlus: + v.type = FcTypeCharSet; + v.u.c = FcCharSetUnion (vl.u.c, vr.u.c); + if (!v.u.c) + v.type = FcTypeVoid; + break; + case FcOpMinus: + v.type = FcTypeCharSet; + v.u.c = FcCharSetSubtract (vl.u.c, vr.u.c); + if (!v.u.c) + v.type = FcTypeVoid; + break; + default: + v.type = FcTypeVoid; + break; + } + break; + case FcTypeLangSet: + switch (e->op) { + case FcOpPlus: + v.type = FcTypeLangSet; + v.u.l = FcLangSetUnion (vl.u.l, vr.u.l); + if (!v.u.l) + v.type = FcTypeVoid; + break; + case FcOpMinus: + v.type = FcTypeLangSet; + v.u.l = FcLangSetSubtract (vl.u.l, vr.u.l); + if (!v.u.l) + v.type = FcTypeVoid; + break; + default: + v.type = FcTypeVoid; + break; + } + break; + default: + v.type = FcTypeVoid; + break; + } + } + else + v.type = FcTypeVoid; + FcValueDestroy (vl); + FcValueDestroy (vr); + break; + case FcOpNot: + vl = FcConfigEvaluate (p, e->u.tree.left); + switch (vl.type) { + case FcTypeBool: + v.type = FcTypeBool; + v.u.b = !vl.u.b; + break; + default: + v.type = FcTypeVoid; + break; + } + FcValueDestroy (vl); + break; + case FcOpFloor: + vl = FcConfigEvaluate (p, e->u.tree.left); + switch (vl.type) { + case FcTypeInteger: + v = vl; + break; + case FcTypeDouble: + v.type = FcTypeInteger; + v.u.i = FcDoubleFloor (vl.u.d); + break; + default: + v.type = FcTypeVoid; + break; + } + FcValueDestroy (vl); + break; + case FcOpCeil: + vl = FcConfigEvaluate (p, e->u.tree.left); + switch (vl.type) { + case FcTypeInteger: + v = vl; + break; + case FcTypeDouble: + v.type = FcTypeInteger; + v.u.i = FcDoubleCeil (vl.u.d); + break; + default: + v.type = FcTypeVoid; + break; + } + FcValueDestroy (vl); + break; + case FcOpRound: + vl = FcConfigEvaluate (p, e->u.tree.left); + switch (vl.type) { + case FcTypeInteger: + v = vl; + break; + case FcTypeDouble: + v.type = FcTypeInteger; + v.u.i = FcDoubleRound (vl.u.d); + break; + default: + v.type = FcTypeVoid; + break; + } + FcValueDestroy (vl); + break; + case FcOpTrunc: + vl = FcConfigEvaluate (p, e->u.tree.left); + switch (vl.type) { + case FcTypeInteger: + v = vl; + break; + case FcTypeDouble: + v.type = FcTypeInteger; + v.u.i = FcDoubleTrunc (vl.u.d); + break; + default: + v.type = FcTypeVoid; + break; + } + FcValueDestroy (vl); + break; + default: + v.type = FcTypeVoid; + break; + } + return v; +} + +static FcValueList * +FcConfigMatchValueList (FcPattern *p, + FcTest *t, + FcValueList *values) +{ + FcValueList *ret = 0; + FcExpr *e = t->expr; + FcValue value; + FcValueList *v; + + while (e) + { + /* Compute the value of the match expression */ + if (e->op == FcOpComma) + { + value = FcConfigEvaluate (p, e->u.tree.left); + e = e->u.tree.right; + } + else + { + value = FcConfigEvaluate (p, e); + e = 0; + } + + for (v = values; v; v = FcValueListNext(v)) + { + /* Compare the pattern value to the match expression value */ + if (FcConfigCompareValue (&v->value, t->op, &value)) + { + if (!ret) + ret = v; + } + else + { + if (t->qual == FcQualAll) + { + ret = 0; + break; + } + } + } + FcValueDestroy (value); + } + return ret; +} + +static FcValueList * +FcConfigValues (FcPattern *p, FcExpr *e, FcValueBinding binding) +{ + FcValueList *l; + + if (!e) + return 0; + l = (FcValueList *) malloc (sizeof (FcValueList)); + if (!l) + return 0; + FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList)); + if (e->op == FcOpComma) + { + l->value = FcConfigEvaluate (p, e->u.tree.left); + l->next = FcConfigValues (p, e->u.tree.right, binding); + } + else + { + l->value = FcConfigEvaluate (p, e); + l->next = NULL; + } + l->binding = binding; + if (l->value.type == FcTypeVoid) + { + FcValueList *next = FcValueListNext(l); + + FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList)); + free (l); + l = next; + } + + return l; +} + +static FcBool +FcConfigAdd (FcValueListPtr *head, + FcValueList *position, + FcBool append, + FcValueList *new) +{ + FcValueListPtr *prev, last, v; + FcValueBinding sameBinding; + + if (position) + sameBinding = position->binding; + else + sameBinding = FcValueBindingWeak; + for (v = new; v != NULL; v = FcValueListNext(v)) + if (v->binding == FcValueBindingSame) + v->binding = sameBinding; + if (append) + { + if (position) + prev = &position->next; + else + for (prev = head; *prev != NULL; + prev = &(*prev)->next) + ; + } + else + { + if (position) + { + for (prev = head; *prev != NULL; + prev = &(*prev)->next) + { + if (*prev == position) + break; + } + } + else + prev = head; + + if (FcDebug () & FC_DBG_EDIT) + { + if (*prev == NULL) + printf ("position not on list\n"); + } + } + + if (FcDebug () & FC_DBG_EDIT) + { + printf ("%s list before ", append ? "Append" : "Prepend"); + FcValueListPrint (*head); + printf ("\n"); + } + + if (new) + { + last = new; + while (last->next != NULL) + last = last->next; + + last->next = *prev; + *prev = new; + } + + if (FcDebug () & FC_DBG_EDIT) + { + printf ("%s list after ", append ? "Append" : "Prepend"); + FcValueListPrint (*head); + printf ("\n"); + } + + return FcTrue; +} + +static void +FcConfigDel (FcValueListPtr *head, + FcValueList *position) +{ + FcValueListPtr *prev; + + for (prev = head; *prev != NULL; prev = &(*prev)->next) + { + if (*prev == position) + { + *prev = position->next; + position->next = NULL; + FcValueListDestroy (position); + break; + } + } +} + +static void +FcConfigPatternAdd (FcPattern *p, + FcObject object, + FcValueList *list, + FcBool append) +{ + if (list) + { + FcPatternElt *e = FcPatternObjectInsertElt (p, object); + + if (!e) + return; + FcConfigAdd (&e->values, 0, append, list); + } +} + +/* + * Delete all values associated with a field + */ +static void +FcConfigPatternDel (FcPattern *p, + FcObject object) +{ + FcPatternElt *e = FcPatternObjectFindElt (p, object); + if (!e) + return; + while (e->values != NULL) + FcConfigDel (&e->values, e->values); +} + +static void +FcConfigPatternCanon (FcPattern *p, + FcObject object) +{ + FcPatternElt *e = FcPatternObjectFindElt (p, object); + if (!e) + return; + if (e->values == NULL) + FcPatternObjectDel (p, object); +} + +FcBool +FcConfigSubstituteWithPat (FcConfig *config, + FcPattern *p, + FcPattern *p_pat, + FcMatchKind kind) +{ + FcSubst *s; + FcSubState *st; + int i; + FcTest *t; + FcEdit *e; + FcValueList *l; + FcPattern *m; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + + switch (kind) { + case FcMatchPattern: + s = config->substPattern; + break; + case FcMatchFont: + s = config->substFont; + break; + case FcMatchScan: + s = config->substScan; + break; + default: + return FcFalse; + } + + st = (FcSubState *) malloc (config->maxObjects * sizeof (FcSubState)); + if (!st && config->maxObjects) + return FcFalse; + FcMemAlloc (FC_MEM_SUBSTATE, config->maxObjects * sizeof (FcSubState)); + + if (FcDebug () & FC_DBG_EDIT) + { + printf ("FcConfigSubstitute "); + FcPatternPrint (p); + } + for (; s; s = s->next) + { + /* + * Check the tests to see if + * they all match the pattern + */ + for (t = s->test, i = 0; t; t = t->next, i++) + { + if (FcDebug () & FC_DBG_EDIT) + { + printf ("FcConfigSubstitute test "); + FcTestPrint (t); + } + st[i].elt = 0; + if (kind == FcMatchFont && t->kind == FcMatchPattern) + m = p_pat; + else + m = p; + if (m) + st[i].elt = FcPatternObjectFindElt (m, t->object); + else + st[i].elt = 0; + /* + * If there's no such field in the font, + * then FcQualAll matches while FcQualAny does not + */ + if (!st[i].elt) + { + if (t->qual == FcQualAll) + { + st[i].value = 0; + continue; + } + else + break; + } + /* + * Check to see if there is a match, mark the location + * to apply match-relative edits + */ + st[i].value = FcConfigMatchValueList (m, t, st[i].elt->values); + if (!st[i].value) + break; + if (t->qual == FcQualFirst && st[i].value != st[i].elt->values) + break; + if (t->qual == FcQualNotFirst && st[i].value == st[i].elt->values) + break; + } + if (t) + { + if (FcDebug () & FC_DBG_EDIT) + printf ("No match\n"); + continue; + } + if (FcDebug () & FC_DBG_EDIT) + { + printf ("Substitute "); + FcSubstPrint (s); + } + for (e = s->edit; e; e = e->next) + { + /* + * Evaluate the list of expressions + */ + l = FcConfigValues (p, e->expr, e->binding); + /* + * Locate any test associated with this field, skipping + * tests associated with the pattern when substituting in + * the font + */ + for (t = s->test, i = 0; t; t = t->next, i++) + { + if ((t->kind == FcMatchFont || kind == FcMatchPattern) && + t->object == e->object) + { + /* + * KLUDGE - the pattern may have been reallocated or + * things may have been inserted or deleted above + * this element by other edits. Go back and find + * the element again + */ + if (e != s->edit && st[i].elt) + st[i].elt = FcPatternObjectFindElt (p, t->object); + if (!st[i].elt) + t = 0; + break; + } + } + switch (e->op) { + case FcOpAssign: + /* + * If there was a test, then replace the matched + * value with the new list of values + */ + if (t) + { + FcValueList *thisValue = st[i].value; + FcValueList *nextValue = thisValue; + + /* + * Append the new list of values after the current value + */ + FcConfigAdd (&st[i].elt->values, thisValue, FcTrue, l); + /* + * Delete the marked value + */ + if (thisValue) + FcConfigDel (&st[i].elt->values, thisValue); + /* + * Adjust any pointers into the value list to ensure + * future edits occur at the same place + */ + for (t = s->test, i = 0; t; t = t->next, i++) + { + if (st[i].value == thisValue) + st[i].value = nextValue; + } + break; + } + /* fall through ... */ + case FcOpAssignReplace: + /* + * Delete all of the values and insert + * the new set + */ + FcConfigPatternDel (p, e->object); + FcConfigPatternAdd (p, e->object, l, FcTrue); + /* + * Adjust any pointers into the value list as they no + * longer point to anything valid + */ + if (t) + { + FcPatternElt *thisElt = st[i].elt; + for (t = s->test, i = 0; t; t = t->next, i++) + { + if (st[i].elt == thisElt) + st[i].value = 0; + } + } + break; + case FcOpPrepend: + if (t) + { + FcConfigAdd (&st[i].elt->values, st[i].value, FcFalse, l); + break; + } + /* fall through ... */ + case FcOpPrependFirst: + FcConfigPatternAdd (p, e->object, l, FcFalse); + break; + case FcOpAppend: + if (t) + { + FcConfigAdd (&st[i].elt->values, st[i].value, FcTrue, l); + break; + } + /* fall through ... */ + case FcOpAppendLast: + FcConfigPatternAdd (p, e->object, l, FcTrue); + break; + default: + FcValueListDestroy (l); + break; + } + } + /* + * Now go through the pattern and eliminate + * any properties without data + */ + for (e = s->edit; e; e = e->next) + FcConfigPatternCanon (p, e->object); + + if (FcDebug () & FC_DBG_EDIT) + { + printf ("FcConfigSubstitute edit"); + FcPatternPrint (p); + } + } + FcMemFree (FC_MEM_SUBSTATE, config->maxObjects * sizeof (FcSubState)); + free (st); + if (FcDebug () & FC_DBG_EDIT) + { + printf ("FcConfigSubstitute done"); + FcPatternPrint (p); + } + return FcTrue; +} + +FcBool +FcConfigSubstitute (FcConfig *config, + FcPattern *p, + FcMatchKind kind) +{ + return FcConfigSubstituteWithPat (config, p, 0, kind); +} + +#if defined (_WIN32) + +# define WIN32_LEAN_AND_MEAN +# define WIN32_EXTRA_LEAN +# include <windows.h> + +static FcChar8 fontconfig_path[1000] = ""; + +# if (defined (PIC) || defined (DLL_EXPORT)) + +BOOL WINAPI +DllMain (HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +{ + FcChar8 *p; + + switch (fdwReason) { + case DLL_PROCESS_ATTACH: + if (!GetModuleFileName ((HMODULE) hinstDLL, fontconfig_path, + sizeof (fontconfig_path))) + break; + + /* If the fontconfig DLL is in a "bin" or "lib" subfolder, + * assume it's a Unix-style installation tree, and use + * "etc/fonts" in there as FONTCONFIG_PATH. Otherwise use the + * folder where the DLL is as FONTCONFIG_PATH. + */ + p = strrchr (fontconfig_path, '\\'); + if (p) + { + *p = '\0'; + p = strrchr (fontconfig_path, '\\'); + if (p && (FcStrCmpIgnoreCase (p + 1, "bin") == 0 || + FcStrCmpIgnoreCase (p + 1, "lib") == 0)) + *p = '\0'; + strcat (fontconfig_path, "\\etc\\fonts"); + } + else + fontconfig_path[0] = '\0'; + + break; + } + + return TRUE; +} + +# endif /* !PIC */ + +#undef FONTCONFIG_PATH +#define FONTCONFIG_PATH fontconfig_path + +#endif /* !_WIN32 */ + +#ifndef FONTCONFIG_FILE +#define FONTCONFIG_FILE "fonts.conf" +#endif + +static FcChar8 * +FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file) +{ + FcChar8 *path; + int size; + + if (!dir) + dir = (FcChar8 *) ""; + + size = strlen ((char *) dir) + 1 + strlen ((char *) file) + 1; + /* + * workaround valgrind warning because glibc takes advantage of how it knows memory is + * allocated to implement strlen by reading in groups of 4 + */ + size = (size + 3) & ~3; + + path = malloc (size); + if (!path) + return 0; + + strcpy ((char *) path, (const char *) dir); + /* make sure there's a single separator */ +#ifdef _WIN32 + if ((!path[0] || (path[strlen((char *) path)-1] != '/' && + path[strlen((char *) path)-1] != '\\')) && + !(file[0] == '/' || + file[0] == '\\' || + (isalpha (file[0]) && file[1] == ':' && (file[2] == '/' || file[2] == '\\')))) + strcat ((char *) path, "\\"); +#else + if ((!path[0] || path[strlen((char *) path)-1] != '/') && file[0] != '/') + strcat ((char *) path, "/"); +#endif + strcat ((char *) path, (char *) file); + + FcMemAlloc (FC_MEM_STRING, size); + if (access ((char *) path, R_OK) == 0) + return path; + + FcStrFree (path); + return 0; +} + +static FcChar8 ** +FcConfigGetPath (void) +{ + FcChar8 **path; + FcChar8 *env, *e, *colon; + FcChar8 *dir; + int npath; + int i; + + npath = 2; /* default dir + null */ + env = (FcChar8 *) getenv ("FONTCONFIG_PATH"); + if (env) + { + e = env; + npath++; + while (*e) + if (*e++ == FC_SEARCH_PATH_SEPARATOR) + npath++; + } + path = calloc (npath, sizeof (FcChar8 *)); + if (!path) + goto bail0; + i = 0; + + if (env) + { + e = env; + while (*e) + { + colon = (FcChar8 *) strchr ((char *) e, FC_SEARCH_PATH_SEPARATOR); + if (!colon) + colon = e + strlen ((char *) e); + path[i] = malloc (colon - e + 1); + if (!path[i]) + goto bail1; + strncpy ((char *) path[i], (const char *) e, colon - e); + path[i][colon - e] = '\0'; + if (*colon) + e = colon + 1; + else + e = colon; + i++; + } + } + +#ifdef _WIN32 + if (fontconfig_path[0] == '\0') + { + char *p; + if(!GetModuleFileName(NULL, fontconfig_path, sizeof(fontconfig_path))) + goto bail1; + p = strrchr (fontconfig_path, '\\'); + if (p) *p = '\0'; + strcat (fontconfig_path, "\\fonts"); + } +#endif + dir = (FcChar8 *) FONTCONFIG_PATH; + path[i] = malloc (strlen ((char *) dir) + 1); + if (!path[i]) + goto bail1; + strcpy ((char *) path[i], (const char *) dir); + return path; + +bail1: + for (i = 0; path[i]; i++) + free (path[i]); + free (path); +bail0: + return 0; +} + +static void +FcConfigFreePath (FcChar8 **path) +{ + FcChar8 **p; + + for (p = path; *p; p++) + free (*p); + free (path); +} + +static FcBool _FcConfigHomeEnabled = FcTrue; + +FcChar8 * +FcConfigHome (void) +{ + if (_FcConfigHomeEnabled) + { + char *home = getenv ("HOME"); + +#ifdef _WIN32 + if (home == NULL) + home = getenv ("USERPROFILE"); +#endif + + return (FcChar8 *) home; + } + return 0; +} + +FcBool +FcConfigEnableHome (FcBool enable) +{ + FcBool prev = _FcConfigHomeEnabled; + _FcConfigHomeEnabled = enable; + return prev; +} + +FcChar8 * +FcConfigFilename (const FcChar8 *url) +{ + FcChar8 *file, *dir, **path, **p; + + if (!url || !*url) + { + url = (FcChar8 *) getenv ("FONTCONFIG_FILE"); + if (!url) + url = (FcChar8 *) FONTCONFIG_FILE; + } + file = 0; + +#ifdef _WIN32 + if (isalpha (*url) && + url[1] == ':' && + (url[2] == '/' || url[2] == '\\')) + goto absolute_path; +#endif + + switch (*url) { + case '~': + dir = FcConfigHome (); + if (dir) + file = FcConfigFileExists (dir, url + 1); + else + file = 0; + break; +#ifdef _WIN32 + case '\\': + absolute_path: +#endif + case '/': + file = FcConfigFileExists (0, url); + break; + default: + path = FcConfigGetPath (); + if (!path) + return 0; + for (p = path; *p; p++) + { + file = FcConfigFileExists (*p, url); + if (file) + break; + } + FcConfigFreePath (path); + break; + } + return file; +} + +/* + * Manage the application-specific fonts + */ + +FcBool +FcConfigAppFontAddFile (FcConfig *config, + const FcChar8 *file) +{ + FcFontSet *set; + FcStrSet *subdirs; + FcStrList *sublist; + FcChar8 *subdir; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + + subdirs = FcStrSetCreate (); + if (!subdirs) + return FcFalse; + + set = FcConfigGetFonts (config, FcSetApplication); + if (!set) + { + set = FcFontSetCreate (); + if (!set) + { + FcStrSetDestroy (subdirs); + return FcFalse; + } + FcConfigSetFonts (config, set, FcSetApplication); + } + + if (!FcFileScanConfig (set, subdirs, config->blanks, file, config)) + { + FcStrSetDestroy (subdirs); + return FcFalse; + } + if ((sublist = FcStrListCreate (subdirs))) + { + while ((subdir = FcStrListNext (sublist))) + { + FcConfigAppFontAddDir (config, subdir); + } + FcStrListDone (sublist); + } + FcStrSetDestroy (subdirs); + return FcTrue; +} + +FcBool +FcConfigAppFontAddDir (FcConfig *config, + const FcChar8 *dir) +{ + FcFontSet *set; + FcStrSet *dirs; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + + dirs = FcStrSetCreate (); + if (!dirs) + return FcFalse; + + set = FcConfigGetFonts (config, FcSetApplication); + if (!set) + { + set = FcFontSetCreate (); + if (!set) + { + FcStrSetDestroy (dirs); + return FcFalse; + } + FcConfigSetFonts (config, set, FcSetApplication); + } + + FcStrSetAddFilename (dirs, dir); + + if (!FcConfigAddDirList (config, FcSetApplication, dirs)) + { + FcStrSetDestroy (dirs); + return FcFalse; + } + FcStrSetDestroy (dirs); + return FcTrue; +} + +void +FcConfigAppFontClear (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return; + } + + FcConfigSetFonts (config, 0, FcSetApplication); +} + +/* + * Manage filename-based font source selectors + */ + +FcBool +FcConfigGlobAdd (FcConfig *config, + const FcChar8 *glob, + FcBool accept) +{ + FcStrSet *set = accept ? config->acceptGlobs : config->rejectGlobs; + + return FcStrSetAdd (set, glob); +} + +static FcBool +FcConfigGlobMatch (const FcChar8 *glob, + const FcChar8 *string) +{ + FcChar8 c; + + while ((c = *glob++)) + { + switch (c) { + case '*': + /* short circuit common case */ + if (!*glob) + return FcTrue; + /* short circuit another common case */ + if (strchr ((char *) glob, '*') == 0) + string += strlen ((char *) string) - strlen ((char *) glob); + while (*string) + { + if (FcConfigGlobMatch (glob, string)) + return FcTrue; + string++; + } + return FcFalse; + case '?': + if (*string++ == '\0') + return FcFalse; + break; + default: + if (*string++ != c) + return FcFalse; + break; + } + } + return *string == '\0'; +} + +static FcBool +FcConfigGlobsMatch (const FcStrSet *globs, + const FcChar8 *string) +{ + int i; + + for (i = 0; i < globs->num; i++) + if (FcConfigGlobMatch (globs->strs[i], string)) + return FcTrue; + return FcFalse; +} + +FcBool +FcConfigAcceptFilename (FcConfig *config, + const FcChar8 *filename) +{ + if (FcConfigGlobsMatch (config->acceptGlobs, filename)) + return FcTrue; + if (FcConfigGlobsMatch (config->rejectGlobs, filename)) + return FcFalse; + return FcTrue; +} + +/* + * Manage font-pattern based font source selectors + */ + +FcBool +FcConfigPatternsAdd (FcConfig *config, + FcPattern *pattern, + FcBool accept) +{ + FcFontSet *set = accept ? config->acceptPatterns : config->rejectPatterns; + + return FcFontSetAdd (set, pattern); +} + +static FcBool +FcConfigPatternsMatch (const FcFontSet *patterns, + const FcPattern *font) +{ + int i; + + for (i = 0; i < patterns->nfont; i++) + if (FcListPatternMatchAny (patterns->fonts[i], font)) + return FcTrue; + return FcFalse; +} + +FcBool +FcConfigAcceptFont (FcConfig *config, + const FcPattern *font) +{ + if (FcConfigPatternsMatch (config->acceptPatterns, font)) + return FcTrue; + if (FcConfigPatternsMatch (config->rejectPatterns, font)) + return FcFalse; + return FcTrue; +} +#define __fccfg__ +#include "fcaliastail.h" +#undef __fccfg__ diff --git a/fontconfig/src/fccharset.c b/fontconfig/src/fccharset.c index 54e396bce..df1d2b538 100644 --- a/fontconfig/src/fccharset.c +++ b/fontconfig/src/fccharset.c @@ -1,1439 +1,1439 @@ -/*
- * fontconfig/src/fccharset.c
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-
-/* #define CHECK */
-
-FcCharSet *
-FcCharSetCreate (void)
-{
- FcCharSet *fcs;
-
- fcs = (FcCharSet *) malloc (sizeof (FcCharSet));
- if (!fcs)
- return 0;
- FcMemAlloc (FC_MEM_CHARSET, sizeof (FcCharSet));
- fcs->ref = 1;
- fcs->num = 0;
- fcs->leaves_offset = 0;
- fcs->numbers_offset = 0;
- return fcs;
-}
-
-FcCharSet *
-FcCharSetNew (void)
-{
- return FcCharSetCreate ();
-}
-
-void
-FcCharSetDestroy (FcCharSet *fcs)
-{
- int i;
-
- if (fcs->ref == FC_REF_CONSTANT)
- {
- FcCacheObjectDereference (fcs);
- return;
- }
- if (--fcs->ref > 0)
- return;
- for (i = 0; i < fcs->num; i++)
- {
- FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
- free (FcCharSetLeaf (fcs, i));
- }
- if (fcs->num)
- {
- /* the numbers here are estimates */
- FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (intptr_t));
- free (FcCharSetLeaves (fcs));
- FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (FcChar16));
- free (FcCharSetNumbers (fcs));
- }
- FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
- free (fcs);
-}
-
-/*
- * Search for the leaf containing with the specified num.
- * Return its index if it exists, otherwise return negative of
- * the (position + 1) where it should be inserted
- */
-
-
-static int
-FcCharSetFindLeafForward (const FcCharSet *fcs, int start, FcChar16 num)
-{
- FcChar16 *numbers = FcCharSetNumbers(fcs);
- FcChar16 page;
- int low = start;
- int high = fcs->num - 1;
-
- if (!numbers)
- return -1;
- while (low <= high)
- {
- int mid = (low + high) >> 1;
- page = numbers[mid];
- if (page == num)
- return mid;
- if (page < num)
- low = mid + 1;
- else
- high = mid - 1;
- }
- if (high < 0 || (high < fcs->num && numbers[high] < num))
- high++;
- return -(high + 1);
-}
-
-/*
- * Locate the leaf containing the specified char, return
- * its index if it exists, otherwise return negative of
- * the (position + 1) where it should be inserted
- */
-
-static int
-FcCharSetFindLeafPos (const FcCharSet *fcs, FcChar32 ucs4)
-{
- return FcCharSetFindLeafForward (fcs, 0, ucs4 >> 8);
-}
-
-static FcCharLeaf *
-FcCharSetFindLeaf (const FcCharSet *fcs, FcChar32 ucs4)
-{
- int pos = FcCharSetFindLeafPos (fcs, ucs4);
- if (pos >= 0)
- return FcCharSetLeaf(fcs, pos);
- return 0;
-}
-
-#define FC_IS_ZERO_OR_POWER_OF_TWO(x) (!((x) & ((x)-1)))
-
-static FcBool
-FcCharSetPutLeaf (FcCharSet *fcs,
- FcChar32 ucs4,
- FcCharLeaf *leaf,
- int pos)
-{
- intptr_t *leaves = FcCharSetLeaves (fcs);
- FcChar16 *numbers = FcCharSetNumbers (fcs);
-
- ucs4 >>= 8;
- if (ucs4 >= 0x10000)
- return FcFalse;
-
- if (FC_IS_ZERO_OR_POWER_OF_TWO (fcs->num))
- {
- if (!fcs->num)
- {
- unsigned int alloced = 8;
- leaves = malloc (alloced * sizeof (*leaves));
- numbers = malloc (alloced * sizeof (*numbers));
- FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves));
- FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers));
- }
- else
- {
- unsigned int alloced = fcs->num;
- intptr_t *new_leaves, distance;
-
- FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*leaves));
- FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*numbers));
-
- alloced *= 2;
- new_leaves = realloc (leaves, alloced * sizeof (*leaves));
- numbers = realloc (numbers, alloced * sizeof (*numbers));
-
- FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves));
- FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers));
-
- distance = (intptr_t) new_leaves - (intptr_t) leaves;
- if (new_leaves && distance)
- {
- int i;
- for (i = 0; i < fcs->num; i++)
- new_leaves[i] -= distance;
- }
- leaves = new_leaves;
- }
-
- if (!leaves || !numbers)
- return FcFalse;
-
- fcs->leaves_offset = FcPtrToOffset (fcs, leaves);
- fcs->numbers_offset = FcPtrToOffset (fcs, numbers);
- }
-
- memmove (leaves + pos + 1, leaves + pos,
- (fcs->num - pos) * sizeof (*leaves));
- memmove (numbers + pos + 1, numbers + pos,
- (fcs->num - pos) * sizeof (*numbers));
- numbers[pos] = (FcChar16) ucs4;
- leaves[pos] = FcPtrToOffset (leaves, leaf);
- fcs->num++;
- return FcTrue;
-}
-
-/*
- * Locate the leaf containing the specified char, creating it
- * if desired
- */
-
-FcCharLeaf *
-FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4)
-{
- int pos;
- FcCharLeaf *leaf;
-
- pos = FcCharSetFindLeafPos (fcs, ucs4);
- if (pos >= 0)
- return FcCharSetLeaf(fcs, pos);
-
- leaf = calloc (1, sizeof (FcCharLeaf));
- if (!leaf)
- return 0;
-
- pos = -pos - 1;
- if (!FcCharSetPutLeaf (fcs, ucs4, leaf, pos))
- {
- free (leaf);
- return 0;
- }
- FcMemAlloc (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
- return leaf;
-}
-
-static FcBool
-FcCharSetInsertLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf)
-{
- int pos;
-
- pos = FcCharSetFindLeafPos (fcs, ucs4);
- if (pos >= 0)
- {
- FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf));
- free (FcCharSetLeaf (fcs, pos));
- FcCharSetLeaves(fcs)[pos] = FcPtrToOffset (FcCharSetLeaves(fcs),
- leaf);
- return FcTrue;
- }
- pos = -pos - 1;
- return FcCharSetPutLeaf (fcs, ucs4, leaf, pos);
-}
-
-FcBool
-FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4)
-{
- FcCharLeaf *leaf;
- FcChar32 *b;
-
- if (fcs->ref == FC_REF_CONSTANT)
- return FcFalse;
- leaf = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!leaf)
- return FcFalse;
- b = &leaf->map[(ucs4 & 0xff) >> 5];
- *b |= (1 << (ucs4 & 0x1f));
- return FcTrue;
-}
-
-FcBool
-FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4)
-{
- FcCharLeaf *leaf;
- FcChar32 *b;
-
- if (fcs->ref == FC_REF_CONSTANT)
- return FcFalse;
- leaf = FcCharSetFindLeaf (fcs, ucs4);
- if (!leaf)
- return FcTrue;
- b = &leaf->map[(ucs4 & 0xff) >> 5];
- *b &= ~(1 << (ucs4 & 0x1f));
- /* We don't bother removing the leaf if it's empty */
- return FcTrue;
-}
-
-/*
- * An iterator for the leaves of a charset
- */
-
-typedef struct _fcCharSetIter {
- FcCharLeaf *leaf;
- FcChar32 ucs4;
- int pos;
-} FcCharSetIter;
-
-/*
- * Set iter->leaf to the leaf containing iter->ucs4 or higher
- */
-
-static void
-FcCharSetIterSet (const FcCharSet *fcs, FcCharSetIter *iter)
-{
- int pos = FcCharSetFindLeafPos (fcs, iter->ucs4);
-
- if (pos < 0)
- {
- pos = -pos - 1;
- if (pos == fcs->num)
- {
- iter->ucs4 = ~0;
- iter->leaf = 0;
- return;
- }
- iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8;
- }
- iter->leaf = FcCharSetLeaf(fcs, pos);
- iter->pos = pos;
-}
-
-static void
-FcCharSetIterNext (const FcCharSet *fcs, FcCharSetIter *iter)
-{
- int pos = iter->pos + 1;
- if (pos >= fcs->num)
- {
- iter->ucs4 = ~0;
- iter->leaf = 0;
- }
- else
- {
- iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8;
- iter->leaf = FcCharSetLeaf(fcs, pos);
- iter->pos = pos;
- }
-}
-
-
-static void
-FcCharSetIterStart (const FcCharSet *fcs, FcCharSetIter *iter)
-{
- iter->ucs4 = 0;
- iter->pos = 0;
- FcCharSetIterSet (fcs, iter);
-}
-
-FcCharSet *
-FcCharSetCopy (FcCharSet *src)
-{
- if (src->ref != FC_REF_CONSTANT)
- src->ref++;
- else
- FcCacheObjectReference (src);
- return src;
-}
-
-FcBool
-FcCharSetEqual (const FcCharSet *a, const FcCharSet *b)
-{
- FcCharSetIter ai, bi;
- int i;
-
- if (a == b)
- return FcTrue;
- for (FcCharSetIterStart (a, &ai), FcCharSetIterStart (b, &bi);
- ai.leaf && bi.leaf;
- FcCharSetIterNext (a, &ai), FcCharSetIterNext (b, &bi))
- {
- if (ai.ucs4 != bi.ucs4)
- return FcFalse;
- for (i = 0; i < 256/32; i++)
- if (ai.leaf->map[i] != bi.leaf->map[i])
- return FcFalse;
- }
- return ai.leaf == bi.leaf;
-}
-
-static FcBool
-FcCharSetAddLeaf (FcCharSet *fcs,
- FcChar32 ucs4,
- FcCharLeaf *leaf)
-{
- FcCharLeaf *new = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!new)
- return FcFalse;
- *new = *leaf;
- return FcTrue;
-}
-
-static FcCharSet *
-FcCharSetOperate (const FcCharSet *a,
- const FcCharSet *b,
- FcBool (*overlap) (FcCharLeaf *result,
- const FcCharLeaf *al,
- const FcCharLeaf *bl),
- FcBool aonly,
- FcBool bonly)
-{
- FcCharSet *fcs;
- FcCharSetIter ai, bi;
-
- fcs = FcCharSetCreate ();
- if (!fcs)
- goto bail0;
- FcCharSetIterStart (a, &ai);
- FcCharSetIterStart (b, &bi);
- while ((ai.leaf || (bonly && bi.leaf)) && (bi.leaf || (aonly && ai.leaf)))
- {
- if (ai.ucs4 < bi.ucs4)
- {
- if (aonly)
- {
- if (!FcCharSetAddLeaf (fcs, ai.ucs4, ai.leaf))
- goto bail1;
- FcCharSetIterNext (a, &ai);
- }
- else
- {
- ai.ucs4 = bi.ucs4;
- FcCharSetIterSet (a, &ai);
- }
- }
- else if (bi.ucs4 < ai.ucs4 )
- {
- if (bonly)
- {
- if (!FcCharSetAddLeaf (fcs, bi.ucs4, bi.leaf))
- goto bail1;
- FcCharSetIterNext (b, &bi);
- }
- else
- {
- bi.ucs4 = ai.ucs4;
- FcCharSetIterSet (b, &bi);
- }
- }
- else
- {
- FcCharLeaf leaf;
-
- if ((*overlap) (&leaf, ai.leaf, bi.leaf))
- {
- if (!FcCharSetAddLeaf (fcs, ai.ucs4, &leaf))
- goto bail1;
- }
- FcCharSetIterNext (a, &ai);
- FcCharSetIterNext (b, &bi);
- }
- }
- return fcs;
-bail1:
- FcCharSetDestroy (fcs);
-bail0:
- return 0;
-}
-
-static FcBool
-FcCharSetIntersectLeaf (FcCharLeaf *result,
- const FcCharLeaf *al,
- const FcCharLeaf *bl)
-{
- int i;
- FcBool nonempty = FcFalse;
-
- for (i = 0; i < 256/32; i++)
- if ((result->map[i] = al->map[i] & bl->map[i]))
- nonempty = FcTrue;
- return nonempty;
-}
-
-FcCharSet *
-FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b)
-{
- return FcCharSetOperate (a, b, FcCharSetIntersectLeaf, FcFalse, FcFalse);
-}
-
-static FcBool
-FcCharSetUnionLeaf (FcCharLeaf *result,
- const FcCharLeaf *al,
- const FcCharLeaf *bl)
-{
- int i;
-
- for (i = 0; i < 256/32; i++)
- result->map[i] = al->map[i] | bl->map[i];
- return FcTrue;
-}
-
-FcCharSet *
-FcCharSetUnion (const FcCharSet *a, const FcCharSet *b)
-{
- return FcCharSetOperate (a, b, FcCharSetUnionLeaf, FcTrue, FcTrue);
-}
-
-FcBool
-FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed)
-{
- int ai = 0, bi = 0;
- FcChar16 an, bn;
-
- if (a->ref == FC_REF_CONSTANT) {
- if (changed)
- *changed = FcFalse;
- return FcFalse;
- }
-
- if (changed) {
- *changed = !FcCharSetIsSubset(b, a);
- if (!*changed)
- return FcTrue;
- }
-
- while (bi < b->num)
- {
- an = ai < a->num ? FcCharSetNumbers(a)[ai] : ~0;
- bn = FcCharSetNumbers(b)[bi];
-
- if (an < bn)
- {
- ai = FcCharSetFindLeafForward (a, ai + 1, bn);
- if (ai < 0)
- ai = -ai - 1;
- }
- else
- {
- FcCharLeaf *bl = FcCharSetLeaf(b, bi);
- if (bn < an)
- {
- if (!FcCharSetAddLeaf (a, bn << 8, bl))
- return FcFalse;
- }
- else
- {
- FcCharLeaf *al = FcCharSetLeaf(a, ai);
- FcCharSetUnionLeaf (al, al, bl);
- }
-
- ai++;
- bi++;
- }
- }
-
- return FcTrue;
-}
-
-static FcBool
-FcCharSetSubtractLeaf (FcCharLeaf *result,
- const FcCharLeaf *al,
- const FcCharLeaf *bl)
-{
- int i;
- FcBool nonempty = FcFalse;
-
- for (i = 0; i < 256/32; i++)
- if ((result->map[i] = al->map[i] & ~bl->map[i]))
- nonempty = FcTrue;
- return nonempty;
-}
-
-FcCharSet *
-FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b)
-{
- return FcCharSetOperate (a, b, FcCharSetSubtractLeaf, FcTrue, FcFalse);
-}
-
-FcBool
-FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4)
-{
- FcCharLeaf *leaf = FcCharSetFindLeaf (fcs, ucs4);
- if (!leaf)
- return FcFalse;
- return (leaf->map[(ucs4 & 0xff) >> 5] & (1 << (ucs4 & 0x1f))) != 0;
-}
-
-static FcChar32
-FcCharSetPopCount (FcChar32 c1)
-{
-#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
- return __builtin_popcount (c1);
-#else
- /* hackmem 169 */
- FcChar32 c2 = (c1 >> 1) & 033333333333;
- c2 = c1 - c2 - ((c2 >> 1) & 033333333333);
- return (((c2 + (c2 >> 3)) & 030707070707) % 077);
-#endif
-}
-
-FcChar32
-FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b)
-{
- FcCharSetIter ai, bi;
- FcChar32 count = 0;
-
- FcCharSetIterStart (a, &ai);
- FcCharSetIterStart (b, &bi);
- while (ai.leaf && bi.leaf)
- {
- if (ai.ucs4 == bi.ucs4)
- {
- FcChar32 *am = ai.leaf->map;
- FcChar32 *bm = bi.leaf->map;
- int i = 256/32;
- while (i--)
- count += FcCharSetPopCount (*am++ & *bm++);
- FcCharSetIterNext (a, &ai);
- }
- else if (ai.ucs4 < bi.ucs4)
- {
- ai.ucs4 = bi.ucs4;
- FcCharSetIterSet (a, &ai);
- }
- if (bi.ucs4 < ai.ucs4)
- {
- bi.ucs4 = ai.ucs4;
- FcCharSetIterSet (b, &bi);
- }
- }
- return count;
-}
-
-FcChar32
-FcCharSetCount (const FcCharSet *a)
-{
- FcCharSetIter ai;
- FcChar32 count = 0;
-
- for (FcCharSetIterStart (a, &ai); ai.leaf; FcCharSetIterNext (a, &ai))
- {
- int i = 256/32;
- FcChar32 *am = ai.leaf->map;
-
- while (i--)
- count += FcCharSetPopCount (*am++);
- }
- return count;
-}
-
-FcChar32
-FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b)
-{
- FcCharSetIter ai, bi;
- FcChar32 count = 0;
-
- FcCharSetIterStart (a, &ai);
- FcCharSetIterStart (b, &bi);
- while (ai.leaf)
- {
- if (ai.ucs4 <= bi.ucs4)
- {
- FcChar32 *am = ai.leaf->map;
- int i = 256/32;
- if (ai.ucs4 == bi.ucs4)
- {
- FcChar32 *bm = bi.leaf->map;
- while (i--)
- count += FcCharSetPopCount (*am++ & ~*bm++);
- }
- else
- {
- while (i--)
- count += FcCharSetPopCount (*am++);
- }
- FcCharSetIterNext (a, &ai);
- }
- else if (bi.leaf)
- {
- bi.ucs4 = ai.ucs4;
- FcCharSetIterSet (b, &bi);
- }
- }
- return count;
-}
-
-/*
- * return FcTrue iff a is a subset of b
- */
-FcBool
-FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b)
-{
- int ai, bi;
- FcChar16 an, bn;
-
- if (a == b) return FcTrue;
- bi = 0;
- ai = 0;
- while (ai < a->num && bi < b->num)
- {
- an = FcCharSetNumbers(a)[ai];
- bn = FcCharSetNumbers(b)[bi];
- /*
- * Check matching pages
- */
- if (an == bn)
- {
- FcChar32 *am = FcCharSetLeaf(a, ai)->map;
- FcChar32 *bm = FcCharSetLeaf(b, bi)->map;
-
- if (am != bm)
- {
- int i = 256/32;
- /*
- * Does am have any bits not in bm?
- */
- while (i--)
- if (*am++ & ~*bm++)
- return FcFalse;
- }
- ai++;
- bi++;
- }
- /*
- * Does a have any pages not in b?
- */
- else if (an < bn)
- return FcFalse;
- else
- {
- bi = FcCharSetFindLeafForward (b, bi + 1, an);
- if (bi < 0)
- bi = -bi - 1;
- }
- }
- /*
- * did we look at every page?
- */
- return ai >= a->num;
-}
-
-/*
- * These two functions efficiently walk the entire charmap for
- * other software (like pango) that want their own copy
- */
-
-FcChar32
-FcCharSetNextPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next)
-{
- FcCharSetIter ai;
- FcChar32 page;
-
- ai.ucs4 = *next;
- FcCharSetIterSet (a, &ai);
- if (!ai.leaf)
- return FC_CHARSET_DONE;
-
- /*
- * Save current information
- */
- page = ai.ucs4;
- memcpy (map, ai.leaf->map, sizeof (ai.leaf->map));
- /*
- * Step to next page
- */
- FcCharSetIterNext (a, &ai);
- *next = ai.ucs4;
-
- return page;
-}
-
-FcChar32
-FcCharSetFirstPage (const FcCharSet *a,
- FcChar32 map[FC_CHARSET_MAP_SIZE],
- FcChar32 *next)
-{
- *next = 0;
- return FcCharSetNextPage (a, map, next);
-}
-
-/*
- * old coverage API, rather hard to use correctly
- */
-
-FcChar32
-FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result)
-{
- FcCharSetIter ai;
-
- ai.ucs4 = page;
- FcCharSetIterSet (a, &ai);
- if (!ai.leaf)
- {
- memset (result, '\0', 256 / 8);
- page = 0;
- }
- else
- {
- memcpy (result, ai.leaf->map, sizeof (ai.leaf->map));
- FcCharSetIterNext (a, &ai);
- page = ai.ucs4;
- }
- return page;
-}
-
-/*
- * ASCII representation of charsets.
- *
- * Each leaf is represented as 9 32-bit values, the code of the first character followed
- * by 8 32 bit values for the leaf itself. Each value is encoded as 5 ASCII characters,
- * only 85 different values are used to avoid control characters as well as the other
- * characters used to encode font names. 85**5 > 2^32 so things work out, but
- * it's not exactly human readable output. As a special case, 0 is encoded as a space
- */
-
-static const unsigned char charToValue[256] = {
- /* "" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\b" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\020" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\030" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* " " */ 0xff, 0x00, 0xff, 0x01, 0x02, 0x03, 0x04, 0xff,
- /* "(" */ 0x05, 0x06, 0x07, 0x08, 0xff, 0xff, 0x09, 0x0a,
- /* "0" */ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12,
- /* "8" */ 0x13, 0x14, 0xff, 0x15, 0x16, 0xff, 0x17, 0x18,
- /* "@" */ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20,
- /* "H" */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
- /* "P" */ 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30,
- /* "X" */ 0x31, 0x32, 0x33, 0x34, 0xff, 0x35, 0x36, 0xff,
- /* "`" */ 0xff, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d,
- /* "h" */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45,
- /* "p" */ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d,
- /* "x" */ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0xff,
- /* "\200" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\210" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\220" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\230" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\240" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\250" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\260" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\270" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\300" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\310" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\320" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\330" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\340" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\350" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\360" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
- /* "\370" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-};
-
-static const FcChar8 valueToChar[0x55] = {
- /* 0x00 */ '!', '#', '$', '%', '&', '(', ')', '*',
- /* 0x08 */ '+', '.', '/', '0', '1', '2', '3', '4',
- /* 0x10 */ '5', '6', '7', '8', '9', ';', '<', '>',
- /* 0x18 */ '?', '@', 'A', 'B', 'C', 'D', 'E', 'F',
- /* 0x20 */ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N',
- /* 0x28 */ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
- /* 0x30 */ 'W', 'X', 'Y', 'Z', '[', ']', '^', 'a',
- /* 0x38 */ 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i',
- /* 0x40 */ 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q',
- /* 0x48 */ 'r', 's', 't', 'u', 'v', 'w', 'x', 'y',
- /* 0x50 */ 'z', '{', '|', '}', '~',
-};
-
-static FcChar8 *
-FcCharSetParseValue (FcChar8 *string, FcChar32 *value)
-{
- int i;
- FcChar32 v;
- FcChar32 c;
-
- if (*string == ' ')
- {
- v = 0;
- string++;
- }
- else
- {
- v = 0;
- for (i = 0; i < 5; i++)
- {
- if (!(c = (FcChar32) (unsigned char) *string++))
- return 0;
- c = charToValue[c];
- if (c == 0xff)
- return 0;
- v = v * 85 + c;
- }
- }
- *value = v;
- return string;
-}
-
-static FcBool
-FcCharSetUnparseValue (FcStrBuf *buf, FcChar32 value)
-{
- int i;
- if (value == 0)
- {
- return FcStrBufChar (buf, ' ');
- }
- else
- {
- FcChar8 string[6];
- FcChar8 *s = string + 5;
- string[5] = '\0';
- for (i = 0; i < 5; i++)
- {
- *--s = valueToChar[value % 85];
- value /= 85;
- }
- for (i = 0; i < 5; i++)
- if (!FcStrBufChar (buf, *s++))
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcCharSet *
-FcNameParseCharSet (FcChar8 *string)
-{
- FcCharSet *c;
- FcChar32 ucs4;
- FcCharLeaf *leaf;
- FcCharLeaf temp;
- FcChar32 bits;
- int i;
-
- c = FcCharSetCreate ();
- if (!c)
- goto bail0;
- while (*string)
- {
- string = FcCharSetParseValue (string, &ucs4);
- if (!string)
- goto bail1;
- bits = 0;
- for (i = 0; i < 256/32; i++)
- {
- string = FcCharSetParseValue (string, &temp.map[i]);
- if (!string)
- goto bail1;
- bits |= temp.map[i];
- }
- if (bits)
- {
- leaf = malloc (sizeof (FcCharLeaf));
- if (!leaf)
- goto bail1;
- *leaf = temp;
- if (!FcCharSetInsertLeaf (c, ucs4, leaf))
- goto bail1;
- }
- }
- return c;
-bail1:
- if (c->num)
- {
- FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcCharLeaf *));
- free (FcCharSetLeaves (c));
- }
- if (c->num)
- {
- FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcChar16));
- free (FcCharSetNumbers (c));
- }
- FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
- free (c);
-bail0:
- return NULL;
-}
-
-FcBool
-FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c)
-{
- FcCharSetIter ci;
- int i;
-#ifdef CHECK
- int len = buf->len;
-#endif
-
- for (FcCharSetIterStart (c, &ci);
- ci.leaf;
- FcCharSetIterNext (c, &ci))
- {
- if (!FcCharSetUnparseValue (buf, ci.ucs4))
- return FcFalse;
- for (i = 0; i < 256/32; i++)
- if (!FcCharSetUnparseValue (buf, ci.leaf->map[i]))
- return FcFalse;
- }
-#ifdef CHECK
- {
- FcCharSet *check;
- FcChar32 missing;
- FcCharSetIter ci, checki;
-
- /* null terminate for parser */
- FcStrBufChar (buf, '\0');
- /* step back over null for life after test */
- buf->len--;
- check = FcNameParseCharSet (buf->buf + len);
- FcCharSetIterStart (c, &ci);
- FcCharSetIterStart (check, &checki);
- while (ci.leaf || checki.leaf)
- {
- if (ci.ucs4 < checki.ucs4)
- {
- printf ("Missing leaf node at 0x%x\n", ci.ucs4);
- FcCharSetIterNext (c, &ci);
- }
- else if (checki.ucs4 < ci.ucs4)
- {
- printf ("Extra leaf node at 0x%x\n", checki.ucs4);
- FcCharSetIterNext (check, &checki);
- }
- else
- {
- int i = 256/32;
- FcChar32 *cm = ci.leaf->map;
- FcChar32 *checkm = checki.leaf->map;
-
- for (i = 0; i < 256; i += 32)
- {
- if (*cm != *checkm)
- printf ("Mismatching sets at 0x%08x: 0x%08x != 0x%08x\n",
- ci.ucs4 + i, *cm, *checkm);
- cm++;
- checkm++;
- }
- FcCharSetIterNext (c, &ci);
- FcCharSetIterNext (check, &checki);
- }
- }
- if ((missing = FcCharSetSubtractCount (c, check)))
- printf ("%d missing in reparsed result\n", missing);
- if ((missing = FcCharSetSubtractCount (check, c)))
- printf ("%d extra in reparsed result\n", missing);
- FcCharSetDestroy (check);
- }
-#endif
-
- return FcTrue;
-}
-
-typedef struct _FcCharLeafEnt FcCharLeafEnt;
-
-struct _FcCharLeafEnt {
- FcCharLeafEnt *next;
- FcChar32 hash;
- FcCharLeaf leaf;
-};
-
-#define FC_CHAR_LEAF_BLOCK (4096 / sizeof (FcCharLeafEnt))
-#define FC_CHAR_LEAF_HASH_SIZE 257
-
-typedef struct _FcCharSetEnt FcCharSetEnt;
-
-struct _FcCharSetEnt {
- FcCharSetEnt *next;
- FcChar32 hash;
- FcCharSet set;
-};
-
-typedef struct _FcCharSetOrigEnt FcCharSetOrigEnt;
-
-struct _FcCharSetOrigEnt {
- FcCharSetOrigEnt *next;
- const FcCharSet *orig;
- const FcCharSet *frozen;
-};
-
-#define FC_CHAR_SET_HASH_SIZE 67
-
-struct _FcCharSetFreezer {
- FcCharLeafEnt *leaf_hash_table[FC_CHAR_LEAF_HASH_SIZE];
- FcCharLeafEnt **leaf_blocks;
- int leaf_block_count;
- FcCharSetEnt *set_hash_table[FC_CHAR_SET_HASH_SIZE];
- FcCharSetOrigEnt *orig_hash_table[FC_CHAR_SET_HASH_SIZE];
- FcCharLeafEnt *current_block;
- int leaf_remain;
- int leaves_seen;
- int charsets_seen;
- int leaves_allocated;
- int charsets_allocated;
-};
-
-static FcCharLeafEnt *
-FcCharLeafEntCreate (FcCharSetFreezer *freezer)
-{
- if (!freezer->leaf_remain)
- {
- FcCharLeafEnt **newBlocks;
-
- freezer->leaf_block_count++;
- newBlocks = realloc (freezer->leaf_blocks, freezer->leaf_block_count * sizeof (FcCharLeafEnt *));
- if (!newBlocks)
- return 0;
- freezer->leaf_blocks = newBlocks;
- freezer->current_block = freezer->leaf_blocks[freezer->leaf_block_count-1] = malloc (FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
- if (!freezer->current_block)
- return 0;
- FcMemAlloc (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
- freezer->leaf_remain = FC_CHAR_LEAF_BLOCK;
- }
- freezer->leaf_remain--;
- freezer->leaves_allocated++;
- return freezer->current_block++;
-}
-
-static FcChar32
-FcCharLeafHash (FcCharLeaf *leaf)
-{
- FcChar32 hash = 0;
- int i;
-
- for (i = 0; i < 256/32; i++)
- hash = ((hash << 1) | (hash >> 31)) ^ leaf->map[i];
- return hash;
-}
-
-static FcCharLeaf *
-FcCharSetFreezeLeaf (FcCharSetFreezer *freezer, FcCharLeaf *leaf)
-{
- FcChar32 hash = FcCharLeafHash (leaf);
- FcCharLeafEnt **bucket = &freezer->leaf_hash_table[hash % FC_CHAR_LEAF_HASH_SIZE];
- FcCharLeafEnt *ent;
-
- for (ent = *bucket; ent; ent = ent->next)
- {
- if (ent->hash == hash && !memcmp (&ent->leaf, leaf, sizeof (FcCharLeaf)))
- return &ent->leaf;
- }
-
- ent = FcCharLeafEntCreate(freezer);
- if (!ent)
- return 0;
- ent->leaf = *leaf;
- ent->hash = hash;
- ent->next = *bucket;
- *bucket = ent;
- return &ent->leaf;
-}
-
-static FcChar32
-FcCharSetHash (FcCharSet *fcs)
-{
- FcChar32 hash = 0;
- int i;
-
- /* hash in leaves */
- for (i = 0; i < fcs->num; i++)
- hash = ((hash << 1) | (hash >> 31)) ^ FcCharLeafHash (FcCharSetLeaf(fcs,i));
- /* hash in numbers */
- for (i = 0; i < fcs->num; i++)
- hash = ((hash << 1) | (hash >> 31)) ^ *FcCharSetNumbers(fcs);
- return hash;
-}
-
-static FcBool
-FcCharSetFreezeOrig (FcCharSetFreezer *freezer, const FcCharSet *orig, const FcCharSet *frozen)
-{
- FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE];
- FcCharSetOrigEnt *ent;
-
- ent = malloc (sizeof (FcCharSetOrigEnt));
- if (!ent)
- return FcFalse;
- ent->orig = orig;
- ent->frozen = frozen;
- ent->next = *bucket;
- *bucket = ent;
- return FcTrue;
-}
-
-static FcCharSet *
-FcCharSetFreezeBase (FcCharSetFreezer *freezer, FcCharSet *fcs, const FcCharSet *orig)
-{
- FcChar32 hash = FcCharSetHash (fcs);
- FcCharSetEnt **bucket = &freezer->set_hash_table[hash % FC_CHAR_SET_HASH_SIZE];
- FcCharSetEnt *ent;
- int size;
- int i;
-
- for (ent = *bucket; ent; ent = ent->next)
- {
- if (ent->hash == hash &&
- ent->set.num == fcs->num &&
- !memcmp (FcCharSetNumbers(&ent->set),
- FcCharSetNumbers(fcs),
- fcs->num * sizeof (FcChar16)))
- {
- FcBool ok = FcTrue;
- int i;
-
- for (i = 0; i < fcs->num; i++)
- if (FcCharSetLeaf(&ent->set, i) != FcCharSetLeaf(fcs, i))
- ok = FcFalse;
- if (ok)
- return &ent->set;
- }
- }
-
- size = (sizeof (FcCharSetEnt) +
- fcs->num * sizeof (FcCharLeaf *) +
- fcs->num * sizeof (FcChar16));
- ent = malloc (size);
- if (!ent)
- return 0;
- FcMemAlloc (FC_MEM_CHARSET, size);
-
- freezer->charsets_allocated++;
-
- ent->set.ref = FC_REF_CONSTANT;
- ent->set.num = fcs->num;
- if (fcs->num)
- {
- intptr_t *ent_leaves;
-
- ent->set.leaves_offset = sizeof (ent->set);
- ent->set.numbers_offset = (ent->set.leaves_offset +
- fcs->num * sizeof (intptr_t));
-
- ent_leaves = FcCharSetLeaves (&ent->set);
- for (i = 0; i < fcs->num; i++)
- ent_leaves[i] = FcPtrToOffset (ent_leaves,
- FcCharSetLeaf (fcs, i));
- memcpy (FcCharSetNumbers (&ent->set),
- FcCharSetNumbers (fcs),
- fcs->num * sizeof (FcChar16));
- }
- else
- {
- ent->set.leaves_offset = 0;
- ent->set.numbers_offset = 0;
- }
-
- ent->hash = hash;
- ent->next = *bucket;
- *bucket = ent;
-
- return &ent->set;
-}
-
-static const FcCharSet *
-FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig)
-{
- FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE];
- FcCharSetOrigEnt *ent;
-
- for (ent = *bucket; ent; ent = ent->next)
- if (ent->orig == orig)
- return ent->frozen;
- return NULL;
-}
-
-const FcCharSet *
-FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs)
-{
- FcCharSet *b;
- const FcCharSet *n = 0;
- FcCharLeaf *l;
- int i;
-
- b = FcCharSetCreate ();
- if (!b)
- goto bail0;
- for (i = 0; i < fcs->num; i++)
- {
- l = FcCharSetFreezeLeaf (freezer, FcCharSetLeaf(fcs, i));
- if (!l)
- goto bail1;
- if (!FcCharSetInsertLeaf (b, FcCharSetNumbers(fcs)[i] << 8, l))
- goto bail1;
- }
- n = FcCharSetFreezeBase (freezer, b, fcs);
- if (!FcCharSetFreezeOrig (freezer, fcs, n))
- {
- n = NULL;
- goto bail1;
- }
- freezer->charsets_seen++;
- freezer->leaves_seen += fcs->num;
-bail1:
- if (b->num)
- {
- FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcCharLeaf *));
- free (FcCharSetLeaves (b));
- }
- if (b->num)
- {
- FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcChar16));
- free (FcCharSetNumbers (b));
- }
- FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet));
- free (b);
-bail0:
- return n;
-}
-
-FcCharSetFreezer *
-FcCharSetFreezerCreate (void)
-{
- FcCharSetFreezer *freezer;
-
- freezer = calloc (1, sizeof (FcCharSetFreezer));
- return freezer;
-}
-
-void
-FcCharSetFreezerDestroy (FcCharSetFreezer *freezer)
-{
- int i;
-
- if (FcDebug() & FC_DBG_CACHE)
- {
- printf ("\ncharsets %d -> %d leaves %d -> %d\n",
- freezer->charsets_seen, freezer->charsets_allocated,
- freezer->leaves_seen, freezer->leaves_allocated);
- }
- for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++)
- {
- FcCharSetEnt *ent, *next;
- for (ent = freezer->set_hash_table[i]; ent; ent = next)
- {
- next = ent->next;
- FcMemFree (FC_MEM_CHARSET, (sizeof (FcCharSetEnt) +
- ent->set.num * sizeof (FcCharLeaf *) +
- ent->set.num * sizeof (FcChar16)));
- free (ent);
- }
- }
-
- for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++)
- {
- FcCharSetOrigEnt *ent, *next;
- for (ent = freezer->orig_hash_table[i]; ent; ent = next)
- {
- next = ent->next;
- free (ent);
- }
- }
-
- for (i = 0; i < freezer->leaf_block_count; i++)
- {
- free (freezer->leaf_blocks[i]);
- FcMemFree (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt));
- }
-
- free (freezer->leaf_blocks);
- free (freezer);
-}
-
-FcBool
-FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs)
-{
- intptr_t *leaves;
- FcChar16 *numbers;
- int i;
-
- if (cs->ref != FC_REF_CONSTANT)
- {
- if (!serialize->cs_freezer)
- {
- serialize->cs_freezer = FcCharSetFreezerCreate ();
- if (!serialize->cs_freezer)
- return FcFalse;
- }
- if (FcCharSetFindFrozen (serialize->cs_freezer, cs))
- return FcTrue;
-
- cs = FcCharSetFreeze (serialize->cs_freezer, cs);
- }
-
- leaves = FcCharSetLeaves (cs);
- numbers = FcCharSetNumbers (cs);
-
- if (!FcSerializeAlloc (serialize, cs, sizeof (FcCharSet)))
- return FcFalse;
- if (!FcSerializeAlloc (serialize, leaves, cs->num * sizeof (intptr_t)))
- return FcFalse;
- if (!FcSerializeAlloc (serialize, numbers, cs->num * sizeof (FcChar16)))
- return FcFalse;
- for (i = 0; i < cs->num; i++)
- if (!FcSerializeAlloc (serialize, FcCharSetLeaf(cs, i),
- sizeof (FcCharLeaf)))
- return FcFalse;
- return FcTrue;
-}
-
-FcCharSet *
-FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs)
-{
- FcCharSet *cs_serialized;
- intptr_t *leaves, *leaves_serialized;
- FcChar16 *numbers, *numbers_serialized;
- FcCharLeaf *leaf, *leaf_serialized;
- int i;
-
- if (cs->ref != FC_REF_CONSTANT && serialize->cs_freezer)
- {
- cs = FcCharSetFindFrozen (serialize->cs_freezer, cs);
- if (!cs)
- return NULL;
- }
-
- cs_serialized = FcSerializePtr (serialize, cs);
- if (!cs_serialized)
- return NULL;
-
- cs_serialized->ref = FC_REF_CONSTANT;
- cs_serialized->num = cs->num;
-
- if (cs->num)
- {
- leaves = FcCharSetLeaves (cs);
- leaves_serialized = FcSerializePtr (serialize, leaves);
- if (!leaves_serialized)
- return NULL;
-
- cs_serialized->leaves_offset = FcPtrToOffset (cs_serialized,
- leaves_serialized);
-
- numbers = FcCharSetNumbers (cs);
- numbers_serialized = FcSerializePtr (serialize, numbers);
- if (!numbers)
- return NULL;
-
- cs_serialized->numbers_offset = FcPtrToOffset (cs_serialized,
- numbers_serialized);
-
- for (i = 0; i < cs->num; i++)
- {
- leaf = FcCharSetLeaf (cs, i);
- leaf_serialized = FcSerializePtr (serialize, leaf);
- if (!leaf_serialized)
- return NULL;
- *leaf_serialized = *leaf;
- leaves_serialized[i] = FcPtrToOffset (leaves_serialized,
- leaf_serialized);
- numbers_serialized[i] = numbers[i];
- }
- }
- else
- {
- cs_serialized->leaves_offset = 0;
- cs_serialized->numbers_offset = 0;
- }
-
- return cs_serialized;
-}
-#define __fccharset__
-#include "fcaliastail.h"
-#undef __fccharset__
+/* + * fontconfig/src/fccharset.c + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <stdlib.h> + +/* #define CHECK */ + +FcCharSet * +FcCharSetCreate (void) +{ + FcCharSet *fcs; + + fcs = (FcCharSet *) malloc (sizeof (FcCharSet)); + if (!fcs) + return 0; + FcMemAlloc (FC_MEM_CHARSET, sizeof (FcCharSet)); + fcs->ref = 1; + fcs->num = 0; + fcs->leaves_offset = 0; + fcs->numbers_offset = 0; + return fcs; +} + +FcCharSet * +FcCharSetNew (void) +{ + return FcCharSetCreate (); +} + +void +FcCharSetDestroy (FcCharSet *fcs) +{ + int i; + + if (fcs->ref == FC_REF_CONSTANT) + { + FcCacheObjectDereference (fcs); + return; + } + if (--fcs->ref > 0) + return; + for (i = 0; i < fcs->num; i++) + { + FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); + free (FcCharSetLeaf (fcs, i)); + } + if (fcs->num) + { + /* the numbers here are estimates */ + FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (intptr_t)); + free (FcCharSetLeaves (fcs)); + FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (FcChar16)); + free (FcCharSetNumbers (fcs)); + } + FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); + free (fcs); +} + +/* + * Search for the leaf containing with the specified num. + * Return its index if it exists, otherwise return negative of + * the (position + 1) where it should be inserted + */ + + +static int +FcCharSetFindLeafForward (const FcCharSet *fcs, int start, FcChar16 num) +{ + FcChar16 *numbers = FcCharSetNumbers(fcs); + FcChar16 page; + int low = start; + int high = fcs->num - 1; + + if (!numbers) + return -1; + while (low <= high) + { + int mid = (low + high) >> 1; + page = numbers[mid]; + if (page == num) + return mid; + if (page < num) + low = mid + 1; + else + high = mid - 1; + } + if (high < 0 || (high < fcs->num && numbers[high] < num)) + high++; + return -(high + 1); +} + +/* + * Locate the leaf containing the specified char, return + * its index if it exists, otherwise return negative of + * the (position + 1) where it should be inserted + */ + +static int +FcCharSetFindLeafPos (const FcCharSet *fcs, FcChar32 ucs4) +{ + return FcCharSetFindLeafForward (fcs, 0, ucs4 >> 8); +} + +static FcCharLeaf * +FcCharSetFindLeaf (const FcCharSet *fcs, FcChar32 ucs4) +{ + int pos = FcCharSetFindLeafPos (fcs, ucs4); + if (pos >= 0) + return FcCharSetLeaf(fcs, pos); + return 0; +} + +#define FC_IS_ZERO_OR_POWER_OF_TWO(x) (!((x) & ((x)-1))) + +static FcBool +FcCharSetPutLeaf (FcCharSet *fcs, + FcChar32 ucs4, + FcCharLeaf *leaf, + int pos) +{ + intptr_t *leaves = FcCharSetLeaves (fcs); + FcChar16 *numbers = FcCharSetNumbers (fcs); + + ucs4 >>= 8; + if (ucs4 >= 0x10000) + return FcFalse; + + if (FC_IS_ZERO_OR_POWER_OF_TWO (fcs->num)) + { + if (!fcs->num) + { + unsigned int alloced = 8; + leaves = malloc (alloced * sizeof (*leaves)); + numbers = malloc (alloced * sizeof (*numbers)); + FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves)); + FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers)); + } + else + { + unsigned int alloced = fcs->num; + intptr_t *new_leaves, distance; + + FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*leaves)); + FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*numbers)); + + alloced *= 2; + new_leaves = realloc (leaves, alloced * sizeof (*leaves)); + numbers = realloc (numbers, alloced * sizeof (*numbers)); + + FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves)); + FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers)); + + distance = (intptr_t) new_leaves - (intptr_t) leaves; + if (new_leaves && distance) + { + int i; + for (i = 0; i < fcs->num; i++) + new_leaves[i] -= distance; + } + leaves = new_leaves; + } + + if (!leaves || !numbers) + return FcFalse; + + fcs->leaves_offset = FcPtrToOffset (fcs, leaves); + fcs->numbers_offset = FcPtrToOffset (fcs, numbers); + } + + memmove (leaves + pos + 1, leaves + pos, + (fcs->num - pos) * sizeof (*leaves)); + memmove (numbers + pos + 1, numbers + pos, + (fcs->num - pos) * sizeof (*numbers)); + numbers[pos] = (FcChar16) ucs4; + leaves[pos] = FcPtrToOffset (leaves, leaf); + fcs->num++; + return FcTrue; +} + +/* + * Locate the leaf containing the specified char, creating it + * if desired + */ + +FcCharLeaf * +FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4) +{ + int pos; + FcCharLeaf *leaf; + + pos = FcCharSetFindLeafPos (fcs, ucs4); + if (pos >= 0) + return FcCharSetLeaf(fcs, pos); + + leaf = calloc (1, sizeof (FcCharLeaf)); + if (!leaf) + return 0; + + pos = -pos - 1; + if (!FcCharSetPutLeaf (fcs, ucs4, leaf, pos)) + { + free (leaf); + return 0; + } + FcMemAlloc (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); + return leaf; +} + +static FcBool +FcCharSetInsertLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf) +{ + int pos; + + pos = FcCharSetFindLeafPos (fcs, ucs4); + if (pos >= 0) + { + FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); + free (FcCharSetLeaf (fcs, pos)); + FcCharSetLeaves(fcs)[pos] = FcPtrToOffset (FcCharSetLeaves(fcs), + leaf); + return FcTrue; + } + pos = -pos - 1; + return FcCharSetPutLeaf (fcs, ucs4, leaf, pos); +} + +FcBool +FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4) +{ + FcCharLeaf *leaf; + FcChar32 *b; + + if (fcs->ref == FC_REF_CONSTANT) + return FcFalse; + leaf = FcCharSetFindLeafCreate (fcs, ucs4); + if (!leaf) + return FcFalse; + b = &leaf->map[(ucs4 & 0xff) >> 5]; + *b |= (1 << (ucs4 & 0x1f)); + return FcTrue; +} + +FcBool +FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4) +{ + FcCharLeaf *leaf; + FcChar32 *b; + + if (fcs->ref == FC_REF_CONSTANT) + return FcFalse; + leaf = FcCharSetFindLeaf (fcs, ucs4); + if (!leaf) + return FcTrue; + b = &leaf->map[(ucs4 & 0xff) >> 5]; + *b &= ~(1 << (ucs4 & 0x1f)); + /* We don't bother removing the leaf if it's empty */ + return FcTrue; +} + +/* + * An iterator for the leaves of a charset + */ + +typedef struct _fcCharSetIter { + FcCharLeaf *leaf; + FcChar32 ucs4; + int pos; +} FcCharSetIter; + +/* + * Set iter->leaf to the leaf containing iter->ucs4 or higher + */ + +static void +FcCharSetIterSet (const FcCharSet *fcs, FcCharSetIter *iter) +{ + int pos = FcCharSetFindLeafPos (fcs, iter->ucs4); + + if (pos < 0) + { + pos = -pos - 1; + if (pos == fcs->num) + { + iter->ucs4 = ~0; + iter->leaf = 0; + return; + } + iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8; + } + iter->leaf = FcCharSetLeaf(fcs, pos); + iter->pos = pos; +} + +static void +FcCharSetIterNext (const FcCharSet *fcs, FcCharSetIter *iter) +{ + int pos = iter->pos + 1; + if (pos >= fcs->num) + { + iter->ucs4 = ~0; + iter->leaf = 0; + } + else + { + iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8; + iter->leaf = FcCharSetLeaf(fcs, pos); + iter->pos = pos; + } +} + + +static void +FcCharSetIterStart (const FcCharSet *fcs, FcCharSetIter *iter) +{ + iter->ucs4 = 0; + iter->pos = 0; + FcCharSetIterSet (fcs, iter); +} + +FcCharSet * +FcCharSetCopy (FcCharSet *src) +{ + if (src->ref != FC_REF_CONSTANT) + src->ref++; + else + FcCacheObjectReference (src); + return src; +} + +FcBool +FcCharSetEqual (const FcCharSet *a, const FcCharSet *b) +{ + FcCharSetIter ai, bi; + int i; + + if (a == b) + return FcTrue; + for (FcCharSetIterStart (a, &ai), FcCharSetIterStart (b, &bi); + ai.leaf && bi.leaf; + FcCharSetIterNext (a, &ai), FcCharSetIterNext (b, &bi)) + { + if (ai.ucs4 != bi.ucs4) + return FcFalse; + for (i = 0; i < 256/32; i++) + if (ai.leaf->map[i] != bi.leaf->map[i]) + return FcFalse; + } + return ai.leaf == bi.leaf; +} + +static FcBool +FcCharSetAddLeaf (FcCharSet *fcs, + FcChar32 ucs4, + FcCharLeaf *leaf) +{ + FcCharLeaf *new = FcCharSetFindLeafCreate (fcs, ucs4); + if (!new) + return FcFalse; + *new = *leaf; + return FcTrue; +} + +static FcCharSet * +FcCharSetOperate (const FcCharSet *a, + const FcCharSet *b, + FcBool (*overlap) (FcCharLeaf *result, + const FcCharLeaf *al, + const FcCharLeaf *bl), + FcBool aonly, + FcBool bonly) +{ + FcCharSet *fcs; + FcCharSetIter ai, bi; + + fcs = FcCharSetCreate (); + if (!fcs) + goto bail0; + FcCharSetIterStart (a, &ai); + FcCharSetIterStart (b, &bi); + while ((ai.leaf || (bonly && bi.leaf)) && (bi.leaf || (aonly && ai.leaf))) + { + if (ai.ucs4 < bi.ucs4) + { + if (aonly) + { + if (!FcCharSetAddLeaf (fcs, ai.ucs4, ai.leaf)) + goto bail1; + FcCharSetIterNext (a, &ai); + } + else + { + ai.ucs4 = bi.ucs4; + FcCharSetIterSet (a, &ai); + } + } + else if (bi.ucs4 < ai.ucs4 ) + { + if (bonly) + { + if (!FcCharSetAddLeaf (fcs, bi.ucs4, bi.leaf)) + goto bail1; + FcCharSetIterNext (b, &bi); + } + else + { + bi.ucs4 = ai.ucs4; + FcCharSetIterSet (b, &bi); + } + } + else + { + FcCharLeaf leaf; + + if ((*overlap) (&leaf, ai.leaf, bi.leaf)) + { + if (!FcCharSetAddLeaf (fcs, ai.ucs4, &leaf)) + goto bail1; + } + FcCharSetIterNext (a, &ai); + FcCharSetIterNext (b, &bi); + } + } + return fcs; +bail1: + FcCharSetDestroy (fcs); +bail0: + return 0; +} + +static FcBool +FcCharSetIntersectLeaf (FcCharLeaf *result, + const FcCharLeaf *al, + const FcCharLeaf *bl) +{ + int i; + FcBool nonempty = FcFalse; + + for (i = 0; i < 256/32; i++) + if ((result->map[i] = al->map[i] & bl->map[i])) + nonempty = FcTrue; + return nonempty; +} + +FcCharSet * +FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b) +{ + return FcCharSetOperate (a, b, FcCharSetIntersectLeaf, FcFalse, FcFalse); +} + +static FcBool +FcCharSetUnionLeaf (FcCharLeaf *result, + const FcCharLeaf *al, + const FcCharLeaf *bl) +{ + int i; + + for (i = 0; i < 256/32; i++) + result->map[i] = al->map[i] | bl->map[i]; + return FcTrue; +} + +FcCharSet * +FcCharSetUnion (const FcCharSet *a, const FcCharSet *b) +{ + return FcCharSetOperate (a, b, FcCharSetUnionLeaf, FcTrue, FcTrue); +} + +FcBool +FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed) +{ + int ai = 0, bi = 0; + FcChar16 an, bn; + + if (a->ref == FC_REF_CONSTANT) { + if (changed) + *changed = FcFalse; + return FcFalse; + } + + if (changed) { + *changed = !FcCharSetIsSubset(b, a); + if (!*changed) + return FcTrue; + } + + while (bi < b->num) + { + an = ai < a->num ? FcCharSetNumbers(a)[ai] : ~0; + bn = FcCharSetNumbers(b)[bi]; + + if (an < bn) + { + ai = FcCharSetFindLeafForward (a, ai + 1, bn); + if (ai < 0) + ai = -ai - 1; + } + else + { + FcCharLeaf *bl = FcCharSetLeaf(b, bi); + if (bn < an) + { + if (!FcCharSetAddLeaf (a, bn << 8, bl)) + return FcFalse; + } + else + { + FcCharLeaf *al = FcCharSetLeaf(a, ai); + FcCharSetUnionLeaf (al, al, bl); + } + + ai++; + bi++; + } + } + + return FcTrue; +} + +static FcBool +FcCharSetSubtractLeaf (FcCharLeaf *result, + const FcCharLeaf *al, + const FcCharLeaf *bl) +{ + int i; + FcBool nonempty = FcFalse; + + for (i = 0; i < 256/32; i++) + if ((result->map[i] = al->map[i] & ~bl->map[i])) + nonempty = FcTrue; + return nonempty; +} + +FcCharSet * +FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b) +{ + return FcCharSetOperate (a, b, FcCharSetSubtractLeaf, FcTrue, FcFalse); +} + +FcBool +FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4) +{ + FcCharLeaf *leaf = FcCharSetFindLeaf (fcs, ucs4); + if (!leaf) + return FcFalse; + return (leaf->map[(ucs4 & 0xff) >> 5] & (1 << (ucs4 & 0x1f))) != 0; +} + +static FcChar32 +FcCharSetPopCount (FcChar32 c1) +{ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + return __builtin_popcount (c1); +#else + /* hackmem 169 */ + FcChar32 c2 = (c1 >> 1) & 033333333333; + c2 = c1 - c2 - ((c2 >> 1) & 033333333333); + return (((c2 + (c2 >> 3)) & 030707070707) % 077); +#endif +} + +FcChar32 +FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b) +{ + FcCharSetIter ai, bi; + FcChar32 count = 0; + + FcCharSetIterStart (a, &ai); + FcCharSetIterStart (b, &bi); + while (ai.leaf && bi.leaf) + { + if (ai.ucs4 == bi.ucs4) + { + FcChar32 *am = ai.leaf->map; + FcChar32 *bm = bi.leaf->map; + int i = 256/32; + while (i--) + count += FcCharSetPopCount (*am++ & *bm++); + FcCharSetIterNext (a, &ai); + } + else if (ai.ucs4 < bi.ucs4) + { + ai.ucs4 = bi.ucs4; + FcCharSetIterSet (a, &ai); + } + if (bi.ucs4 < ai.ucs4) + { + bi.ucs4 = ai.ucs4; + FcCharSetIterSet (b, &bi); + } + } + return count; +} + +FcChar32 +FcCharSetCount (const FcCharSet *a) +{ + FcCharSetIter ai; + FcChar32 count = 0; + + for (FcCharSetIterStart (a, &ai); ai.leaf; FcCharSetIterNext (a, &ai)) + { + int i = 256/32; + FcChar32 *am = ai.leaf->map; + + while (i--) + count += FcCharSetPopCount (*am++); + } + return count; +} + +FcChar32 +FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b) +{ + FcCharSetIter ai, bi; + FcChar32 count = 0; + + FcCharSetIterStart (a, &ai); + FcCharSetIterStart (b, &bi); + while (ai.leaf) + { + if (ai.ucs4 <= bi.ucs4) + { + FcChar32 *am = ai.leaf->map; + int i = 256/32; + if (ai.ucs4 == bi.ucs4) + { + FcChar32 *bm = bi.leaf->map; + while (i--) + count += FcCharSetPopCount (*am++ & ~*bm++); + } + else + { + while (i--) + count += FcCharSetPopCount (*am++); + } + FcCharSetIterNext (a, &ai); + } + else if (bi.leaf) + { + bi.ucs4 = ai.ucs4; + FcCharSetIterSet (b, &bi); + } + } + return count; +} + +/* + * return FcTrue iff a is a subset of b + */ +FcBool +FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b) +{ + int ai, bi; + FcChar16 an, bn; + + if (a == b) return FcTrue; + bi = 0; + ai = 0; + while (ai < a->num && bi < b->num) + { + an = FcCharSetNumbers(a)[ai]; + bn = FcCharSetNumbers(b)[bi]; + /* + * Check matching pages + */ + if (an == bn) + { + FcChar32 *am = FcCharSetLeaf(a, ai)->map; + FcChar32 *bm = FcCharSetLeaf(b, bi)->map; + + if (am != bm) + { + int i = 256/32; + /* + * Does am have any bits not in bm? + */ + while (i--) + if (*am++ & ~*bm++) + return FcFalse; + } + ai++; + bi++; + } + /* + * Does a have any pages not in b? + */ + else if (an < bn) + return FcFalse; + else + { + bi = FcCharSetFindLeafForward (b, bi + 1, an); + if (bi < 0) + bi = -bi - 1; + } + } + /* + * did we look at every page? + */ + return ai >= a->num; +} + +/* + * These two functions efficiently walk the entire charmap for + * other software (like pango) that want their own copy + */ + +FcChar32 +FcCharSetNextPage (const FcCharSet *a, + FcChar32 map[FC_CHARSET_MAP_SIZE], + FcChar32 *next) +{ + FcCharSetIter ai; + FcChar32 page; + + ai.ucs4 = *next; + FcCharSetIterSet (a, &ai); + if (!ai.leaf) + return FC_CHARSET_DONE; + + /* + * Save current information + */ + page = ai.ucs4; + memcpy (map, ai.leaf->map, sizeof (ai.leaf->map)); + /* + * Step to next page + */ + FcCharSetIterNext (a, &ai); + *next = ai.ucs4; + + return page; +} + +FcChar32 +FcCharSetFirstPage (const FcCharSet *a, + FcChar32 map[FC_CHARSET_MAP_SIZE], + FcChar32 *next) +{ + *next = 0; + return FcCharSetNextPage (a, map, next); +} + +/* + * old coverage API, rather hard to use correctly + */ + +FcChar32 +FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result) +{ + FcCharSetIter ai; + + ai.ucs4 = page; + FcCharSetIterSet (a, &ai); + if (!ai.leaf) + { + memset (result, '\0', 256 / 8); + page = 0; + } + else + { + memcpy (result, ai.leaf->map, sizeof (ai.leaf->map)); + FcCharSetIterNext (a, &ai); + page = ai.ucs4; + } + return page; +} + +/* + * ASCII representation of charsets. + * + * Each leaf is represented as 9 32-bit values, the code of the first character followed + * by 8 32 bit values for the leaf itself. Each value is encoded as 5 ASCII characters, + * only 85 different values are used to avoid control characters as well as the other + * characters used to encode font names. 85**5 > 2^32 so things work out, but + * it's not exactly human readable output. As a special case, 0 is encoded as a space + */ + +static const unsigned char charToValue[256] = { + /* "" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\b" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\020" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\030" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* " " */ 0xff, 0x00, 0xff, 0x01, 0x02, 0x03, 0x04, 0xff, + /* "(" */ 0x05, 0x06, 0x07, 0x08, 0xff, 0xff, 0x09, 0x0a, + /* "0" */ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + /* "8" */ 0x13, 0x14, 0xff, 0x15, 0x16, 0xff, 0x17, 0x18, + /* "@" */ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + /* "H" */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + /* "P" */ 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + /* "X" */ 0x31, 0x32, 0x33, 0x34, 0xff, 0x35, 0x36, 0xff, + /* "`" */ 0xff, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + /* "h" */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + /* "p" */ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + /* "x" */ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0xff, + /* "\200" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\210" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\220" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\230" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\240" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\250" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\260" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\270" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\300" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\310" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\320" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\330" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\340" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\350" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\360" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\370" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +static const FcChar8 valueToChar[0x55] = { + /* 0x00 */ '!', '#', '$', '%', '&', '(', ')', '*', + /* 0x08 */ '+', '.', '/', '0', '1', '2', '3', '4', + /* 0x10 */ '5', '6', '7', '8', '9', ';', '<', '>', + /* 0x18 */ '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', + /* 0x20 */ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + /* 0x28 */ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + /* 0x30 */ 'W', 'X', 'Y', 'Z', '[', ']', '^', 'a', + /* 0x38 */ 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', + /* 0x40 */ 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', + /* 0x48 */ 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', + /* 0x50 */ 'z', '{', '|', '}', '~', +}; + +static FcChar8 * +FcCharSetParseValue (FcChar8 *string, FcChar32 *value) +{ + int i; + FcChar32 v; + FcChar32 c; + + if (*string == ' ') + { + v = 0; + string++; + } + else + { + v = 0; + for (i = 0; i < 5; i++) + { + if (!(c = (FcChar32) (unsigned char) *string++)) + return 0; + c = charToValue[c]; + if (c == 0xff) + return 0; + v = v * 85 + c; + } + } + *value = v; + return string; +} + +static FcBool +FcCharSetUnparseValue (FcStrBuf *buf, FcChar32 value) +{ + int i; + if (value == 0) + { + return FcStrBufChar (buf, ' '); + } + else + { + FcChar8 string[6]; + FcChar8 *s = string + 5; + string[5] = '\0'; + for (i = 0; i < 5; i++) + { + *--s = valueToChar[value % 85]; + value /= 85; + } + for (i = 0; i < 5; i++) + if (!FcStrBufChar (buf, *s++)) + return FcFalse; + } + return FcTrue; +} + +FcCharSet * +FcNameParseCharSet (FcChar8 *string) +{ + FcCharSet *c; + FcChar32 ucs4; + FcCharLeaf *leaf; + FcCharLeaf temp; + FcChar32 bits; + int i; + + c = FcCharSetCreate (); + if (!c) + goto bail0; + while (*string) + { + string = FcCharSetParseValue (string, &ucs4); + if (!string) + goto bail1; + bits = 0; + for (i = 0; i < 256/32; i++) + { + string = FcCharSetParseValue (string, &temp.map[i]); + if (!string) + goto bail1; + bits |= temp.map[i]; + } + if (bits) + { + leaf = malloc (sizeof (FcCharLeaf)); + if (!leaf) + goto bail1; + *leaf = temp; + if (!FcCharSetInsertLeaf (c, ucs4, leaf)) + goto bail1; + } + } + return c; +bail1: + if (c->num) + { + FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcCharLeaf *)); + free (FcCharSetLeaves (c)); + } + if (c->num) + { + FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcChar16)); + free (FcCharSetNumbers (c)); + } + FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); + free (c); +bail0: + return NULL; +} + +FcBool +FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c) +{ + FcCharSetIter ci; + int i; +#ifdef CHECK + int len = buf->len; +#endif + + for (FcCharSetIterStart (c, &ci); + ci.leaf; + FcCharSetIterNext (c, &ci)) + { + if (!FcCharSetUnparseValue (buf, ci.ucs4)) + return FcFalse; + for (i = 0; i < 256/32; i++) + if (!FcCharSetUnparseValue (buf, ci.leaf->map[i])) + return FcFalse; + } +#ifdef CHECK + { + FcCharSet *check; + FcChar32 missing; + FcCharSetIter ci, checki; + + /* null terminate for parser */ + FcStrBufChar (buf, '\0'); + /* step back over null for life after test */ + buf->len--; + check = FcNameParseCharSet (buf->buf + len); + FcCharSetIterStart (c, &ci); + FcCharSetIterStart (check, &checki); + while (ci.leaf || checki.leaf) + { + if (ci.ucs4 < checki.ucs4) + { + printf ("Missing leaf node at 0x%x\n", ci.ucs4); + FcCharSetIterNext (c, &ci); + } + else if (checki.ucs4 < ci.ucs4) + { + printf ("Extra leaf node at 0x%x\n", checki.ucs4); + FcCharSetIterNext (check, &checki); + } + else + { + int i = 256/32; + FcChar32 *cm = ci.leaf->map; + FcChar32 *checkm = checki.leaf->map; + + for (i = 0; i < 256; i += 32) + { + if (*cm != *checkm) + printf ("Mismatching sets at 0x%08x: 0x%08x != 0x%08x\n", + ci.ucs4 + i, *cm, *checkm); + cm++; + checkm++; + } + FcCharSetIterNext (c, &ci); + FcCharSetIterNext (check, &checki); + } + } + if ((missing = FcCharSetSubtractCount (c, check))) + printf ("%d missing in reparsed result\n", missing); + if ((missing = FcCharSetSubtractCount (check, c))) + printf ("%d extra in reparsed result\n", missing); + FcCharSetDestroy (check); + } +#endif + + return FcTrue; +} + +typedef struct _FcCharLeafEnt FcCharLeafEnt; + +struct _FcCharLeafEnt { + FcCharLeafEnt *next; + FcChar32 hash; + FcCharLeaf leaf; +}; + +#define FC_CHAR_LEAF_BLOCK (4096 / sizeof (FcCharLeafEnt)) +#define FC_CHAR_LEAF_HASH_SIZE 257 + +typedef struct _FcCharSetEnt FcCharSetEnt; + +struct _FcCharSetEnt { + FcCharSetEnt *next; + FcChar32 hash; + FcCharSet set; +}; + +typedef struct _FcCharSetOrigEnt FcCharSetOrigEnt; + +struct _FcCharSetOrigEnt { + FcCharSetOrigEnt *next; + const FcCharSet *orig; + const FcCharSet *frozen; +}; + +#define FC_CHAR_SET_HASH_SIZE 67 + +struct _FcCharSetFreezer { + FcCharLeafEnt *leaf_hash_table[FC_CHAR_LEAF_HASH_SIZE]; + FcCharLeafEnt **leaf_blocks; + int leaf_block_count; + FcCharSetEnt *set_hash_table[FC_CHAR_SET_HASH_SIZE]; + FcCharSetOrigEnt *orig_hash_table[FC_CHAR_SET_HASH_SIZE]; + FcCharLeafEnt *current_block; + int leaf_remain; + int leaves_seen; + int charsets_seen; + int leaves_allocated; + int charsets_allocated; +}; + +static FcCharLeafEnt * +FcCharLeafEntCreate (FcCharSetFreezer *freezer) +{ + if (!freezer->leaf_remain) + { + FcCharLeafEnt **newBlocks; + + freezer->leaf_block_count++; + newBlocks = realloc (freezer->leaf_blocks, freezer->leaf_block_count * sizeof (FcCharLeafEnt *)); + if (!newBlocks) + return 0; + freezer->leaf_blocks = newBlocks; + freezer->current_block = freezer->leaf_blocks[freezer->leaf_block_count-1] = malloc (FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); + if (!freezer->current_block) + return 0; + FcMemAlloc (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); + freezer->leaf_remain = FC_CHAR_LEAF_BLOCK; + } + freezer->leaf_remain--; + freezer->leaves_allocated++; + return freezer->current_block++; +} + +static FcChar32 +FcCharLeafHash (FcCharLeaf *leaf) +{ + FcChar32 hash = 0; + int i; + + for (i = 0; i < 256/32; i++) + hash = ((hash << 1) | (hash >> 31)) ^ leaf->map[i]; + return hash; +} + +static FcCharLeaf * +FcCharSetFreezeLeaf (FcCharSetFreezer *freezer, FcCharLeaf *leaf) +{ + FcChar32 hash = FcCharLeafHash (leaf); + FcCharLeafEnt **bucket = &freezer->leaf_hash_table[hash % FC_CHAR_LEAF_HASH_SIZE]; + FcCharLeafEnt *ent; + + for (ent = *bucket; ent; ent = ent->next) + { + if (ent->hash == hash && !memcmp (&ent->leaf, leaf, sizeof (FcCharLeaf))) + return &ent->leaf; + } + + ent = FcCharLeafEntCreate(freezer); + if (!ent) + return 0; + ent->leaf = *leaf; + ent->hash = hash; + ent->next = *bucket; + *bucket = ent; + return &ent->leaf; +} + +static FcChar32 +FcCharSetHash (FcCharSet *fcs) +{ + FcChar32 hash = 0; + int i; + + /* hash in leaves */ + for (i = 0; i < fcs->num; i++) + hash = ((hash << 1) | (hash >> 31)) ^ FcCharLeafHash (FcCharSetLeaf(fcs,i)); + /* hash in numbers */ + for (i = 0; i < fcs->num; i++) + hash = ((hash << 1) | (hash >> 31)) ^ *FcCharSetNumbers(fcs); + return hash; +} + +static FcBool +FcCharSetFreezeOrig (FcCharSetFreezer *freezer, const FcCharSet *orig, const FcCharSet *frozen) +{ + FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE]; + FcCharSetOrigEnt *ent; + + ent = malloc (sizeof (FcCharSetOrigEnt)); + if (!ent) + return FcFalse; + ent->orig = orig; + ent->frozen = frozen; + ent->next = *bucket; + *bucket = ent; + return FcTrue; +} + +static FcCharSet * +FcCharSetFreezeBase (FcCharSetFreezer *freezer, FcCharSet *fcs, const FcCharSet *orig) +{ + FcChar32 hash = FcCharSetHash (fcs); + FcCharSetEnt **bucket = &freezer->set_hash_table[hash % FC_CHAR_SET_HASH_SIZE]; + FcCharSetEnt *ent; + int size; + int i; + + for (ent = *bucket; ent; ent = ent->next) + { + if (ent->hash == hash && + ent->set.num == fcs->num && + !memcmp (FcCharSetNumbers(&ent->set), + FcCharSetNumbers(fcs), + fcs->num * sizeof (FcChar16))) + { + FcBool ok = FcTrue; + int i; + + for (i = 0; i < fcs->num; i++) + if (FcCharSetLeaf(&ent->set, i) != FcCharSetLeaf(fcs, i)) + ok = FcFalse; + if (ok) + return &ent->set; + } + } + + size = (sizeof (FcCharSetEnt) + + fcs->num * sizeof (FcCharLeaf *) + + fcs->num * sizeof (FcChar16)); + ent = malloc (size); + if (!ent) + return 0; + FcMemAlloc (FC_MEM_CHARSET, size); + + freezer->charsets_allocated++; + + ent->set.ref = FC_REF_CONSTANT; + ent->set.num = fcs->num; + if (fcs->num) + { + intptr_t *ent_leaves; + + ent->set.leaves_offset = sizeof (ent->set); + ent->set.numbers_offset = (ent->set.leaves_offset + + fcs->num * sizeof (intptr_t)); + + ent_leaves = FcCharSetLeaves (&ent->set); + for (i = 0; i < fcs->num; i++) + ent_leaves[i] = FcPtrToOffset (ent_leaves, + FcCharSetLeaf (fcs, i)); + memcpy (FcCharSetNumbers (&ent->set), + FcCharSetNumbers (fcs), + fcs->num * sizeof (FcChar16)); + } + else + { + ent->set.leaves_offset = 0; + ent->set.numbers_offset = 0; + } + + ent->hash = hash; + ent->next = *bucket; + *bucket = ent; + + return &ent->set; +} + +static const FcCharSet * +FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig) +{ + FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE]; + FcCharSetOrigEnt *ent; + + for (ent = *bucket; ent; ent = ent->next) + if (ent->orig == orig) + return ent->frozen; + return NULL; +} + +const FcCharSet * +FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs) +{ + FcCharSet *b; + const FcCharSet *n = 0; + FcCharLeaf *l; + int i; + + b = FcCharSetCreate (); + if (!b) + goto bail0; + for (i = 0; i < fcs->num; i++) + { + l = FcCharSetFreezeLeaf (freezer, FcCharSetLeaf(fcs, i)); + if (!l) + goto bail1; + if (!FcCharSetInsertLeaf (b, FcCharSetNumbers(fcs)[i] << 8, l)) + goto bail1; + } + n = FcCharSetFreezeBase (freezer, b, fcs); + if (!FcCharSetFreezeOrig (freezer, fcs, n)) + { + n = NULL; + goto bail1; + } + freezer->charsets_seen++; + freezer->leaves_seen += fcs->num; +bail1: + if (b->num) + { + FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcCharLeaf *)); + free (FcCharSetLeaves (b)); + } + if (b->num) + { + FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcChar16)); + free (FcCharSetNumbers (b)); + } + FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); + free (b); +bail0: + return n; +} + +FcCharSetFreezer * +FcCharSetFreezerCreate (void) +{ + FcCharSetFreezer *freezer; + + freezer = calloc (1, sizeof (FcCharSetFreezer)); + return freezer; +} + +void +FcCharSetFreezerDestroy (FcCharSetFreezer *freezer) +{ + int i; + + if (FcDebug() & FC_DBG_CACHE) + { + printf ("\ncharsets %d -> %d leaves %d -> %d\n", + freezer->charsets_seen, freezer->charsets_allocated, + freezer->leaves_seen, freezer->leaves_allocated); + } + for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++) + { + FcCharSetEnt *ent, *next; + for (ent = freezer->set_hash_table[i]; ent; ent = next) + { + next = ent->next; + FcMemFree (FC_MEM_CHARSET, (sizeof (FcCharSetEnt) + + ent->set.num * sizeof (FcCharLeaf *) + + ent->set.num * sizeof (FcChar16))); + free (ent); + } + } + + for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++) + { + FcCharSetOrigEnt *ent, *next; + for (ent = freezer->orig_hash_table[i]; ent; ent = next) + { + next = ent->next; + free (ent); + } + } + + for (i = 0; i < freezer->leaf_block_count; i++) + { + free (freezer->leaf_blocks[i]); + FcMemFree (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); + } + + free (freezer->leaf_blocks); + free (freezer); +} + +FcBool +FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs) +{ + intptr_t *leaves; + FcChar16 *numbers; + int i; + + if (cs->ref != FC_REF_CONSTANT) + { + if (!serialize->cs_freezer) + { + serialize->cs_freezer = FcCharSetFreezerCreate (); + if (!serialize->cs_freezer) + return FcFalse; + } + if (FcCharSetFindFrozen (serialize->cs_freezer, cs)) + return FcTrue; + + cs = FcCharSetFreeze (serialize->cs_freezer, cs); + } + + leaves = FcCharSetLeaves (cs); + numbers = FcCharSetNumbers (cs); + + if (!FcSerializeAlloc (serialize, cs, sizeof (FcCharSet))) + return FcFalse; + if (!FcSerializeAlloc (serialize, leaves, cs->num * sizeof (intptr_t))) + return FcFalse; + if (!FcSerializeAlloc (serialize, numbers, cs->num * sizeof (FcChar16))) + return FcFalse; + for (i = 0; i < cs->num; i++) + if (!FcSerializeAlloc (serialize, FcCharSetLeaf(cs, i), + sizeof (FcCharLeaf))) + return FcFalse; + return FcTrue; +} + +FcCharSet * +FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs) +{ + FcCharSet *cs_serialized; + intptr_t *leaves, *leaves_serialized; + FcChar16 *numbers, *numbers_serialized; + FcCharLeaf *leaf, *leaf_serialized; + int i; + + if (cs->ref != FC_REF_CONSTANT && serialize->cs_freezer) + { + cs = FcCharSetFindFrozen (serialize->cs_freezer, cs); + if (!cs) + return NULL; + } + + cs_serialized = FcSerializePtr (serialize, cs); + if (!cs_serialized) + return NULL; + + cs_serialized->ref = FC_REF_CONSTANT; + cs_serialized->num = cs->num; + + if (cs->num) + { + leaves = FcCharSetLeaves (cs); + leaves_serialized = FcSerializePtr (serialize, leaves); + if (!leaves_serialized) + return NULL; + + cs_serialized->leaves_offset = FcPtrToOffset (cs_serialized, + leaves_serialized); + + numbers = FcCharSetNumbers (cs); + numbers_serialized = FcSerializePtr (serialize, numbers); + if (!numbers) + return NULL; + + cs_serialized->numbers_offset = FcPtrToOffset (cs_serialized, + numbers_serialized); + + for (i = 0; i < cs->num; i++) + { + leaf = FcCharSetLeaf (cs, i); + leaf_serialized = FcSerializePtr (serialize, leaf); + if (!leaf_serialized) + return NULL; + *leaf_serialized = *leaf; + leaves_serialized[i] = FcPtrToOffset (leaves_serialized, + leaf_serialized); + numbers_serialized[i] = numbers[i]; + } + } + else + { + cs_serialized->leaves_offset = 0; + cs_serialized->numbers_offset = 0; + } + + return cs_serialized; +} +#define __fccharset__ +#include "fcaliastail.h" +#undef __fccharset__ diff --git a/fontconfig/src/fcdbg.c b/fontconfig/src/fcdbg.c index b8cb079fc..cf2ff0870 100644 --- a/fontconfig/src/fcdbg.c +++ b/fontconfig/src/fcdbg.c @@ -1,406 +1,406 @@ -/*
- * fontconfig/src/fcdbg.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdio.h>
-#include <stdlib.h>
-
-void
-FcValuePrint (const FcValue v)
-{
- switch (v.type) {
- case FcTypeVoid:
- printf (" <void>");
- break;
- case FcTypeInteger:
- printf (" %d(i)", v.u.i);
- break;
- case FcTypeDouble:
- printf (" %g(f)", v.u.d);
- break;
- case FcTypeString:
- printf (" \"%s\"", v.u.s);
- break;
- case FcTypeBool:
- printf (" %s", v.u.b ? "FcTrue" : "FcFalse");
- break;
- case FcTypeMatrix:
- printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
- break;
- case FcTypeCharSet: /* XXX */
- printf (" ");
- FcCharSetPrint (v.u.c);
- break;
- case FcTypeLangSet:
- printf (" ");
- FcLangSetPrint (v.u.l);
- break;
- case FcTypeFTFace:
- printf (" face");
- break;
- }
-}
-
-void
-FcValueListPrint (FcValueListPtr l)
-{
- for (; l != NULL; l = FcValueListNext(l))
- {
- FcValuePrint (FcValueCanonicalize(&l->value));
- switch (l->binding) {
- case FcValueBindingWeak:
- printf ("(w)");
- break;
- case FcValueBindingStrong:
- printf ("(s)");
- break;
- case FcValueBindingSame:
- printf ("(=)");
- break;
- }
- }
-}
-
-void
-FcLangSetPrint (const FcLangSet *ls)
-{
- FcStrBuf buf;
- FcChar8 init_buf[1024];
-
- FcStrBufInit (&buf, init_buf, sizeof (init_buf));
- if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0'))
- printf ("%s", buf.buf);
- else
- printf ("langset (alloc error)");
- FcStrBufDestroy (&buf);
-}
-
-void
-FcCharSetPrint (const FcCharSet *c)
-{
- int i, j;
- intptr_t *leaves = FcCharSetLeaves (c);
- FcChar16 *numbers = FcCharSetNumbers (c);
-
-#if 0
- printf ("CharSet 0x%x\n", (intptr_t) c);
- printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves);
- printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers);
-
- for (i = 0; i < c->num; i++)
- {
- printf ("Page %d: %04x +%d = 0x%x\n",
- i, numbers[i], leaves[i],
- (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf));
- }
-#endif
-
- printf ("\n");
- for (i = 0; i < c->num; i++)
- {
- intptr_t leaf_offset = leaves[i];
- FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf);
-
- printf ("\t");
- printf ("%04x:", numbers[i]);
- for (j = 0; j < 256/32; j++)
- printf (" %08x", leaf->map[j]);
- printf ("\n");
- }
-}
-
-void
-FcPatternPrint (const FcPattern *p)
-{
- int i;
- FcPatternElt *e;
-
- if (!p)
- {
- printf ("Null pattern\n");
- return;
- }
- printf ("Pattern has %d elts (size %d)\n", p->num, p->size);
- for (i = 0; i < p->num; i++)
- {
- e = &FcPatternElts(p)[i];
- printf ("\t%s:", FcObjectName(e->object));
- FcValueListPrint (FcPatternEltValues(e));
- printf ("\n");
- }
- printf ("\n");
-}
-
-void
-FcOpPrint (FcOp op)
-{
- switch (op) {
- case FcOpInteger: printf ("Integer"); break;
- case FcOpDouble: printf ("Double"); break;
- case FcOpString: printf ("String"); break;
- case FcOpMatrix: printf ("Matrix"); break;
- case FcOpRange: printf ("Range"); break;
- case FcOpBool: printf ("Bool"); break;
- case FcOpCharSet: printf ("CharSet"); break;
- case FcOpLangSet: printf ("LangSet"); break;
- case FcOpField: printf ("Field"); break;
- case FcOpConst: printf ("Const"); break;
- case FcOpAssign: printf ("Assign"); break;
- case FcOpAssignReplace: printf ("AssignReplace"); break;
- case FcOpPrepend: printf ("Prepend"); break;
- case FcOpPrependFirst: printf ("PrependFirst"); break;
- case FcOpAppend: printf ("Append"); break;
- case FcOpAppendLast: printf ("AppendLast"); break;
- case FcOpQuest: printf ("Quest"); break;
- case FcOpOr: printf ("Or"); break;
- case FcOpAnd: printf ("And"); break;
- case FcOpEqual: printf ("Equal"); break;
- case FcOpNotEqual: printf ("NotEqual"); break;
- case FcOpLess: printf ("Less"); break;
- case FcOpLessEqual: printf ("LessEqual"); break;
- case FcOpMore: printf ("More"); break;
- case FcOpMoreEqual: printf ("MoreEqual"); break;
- case FcOpContains: printf ("Contains"); break;
- case FcOpNotContains: printf ("NotContains"); break;
- case FcOpPlus: printf ("Plus"); break;
- case FcOpMinus: printf ("Minus"); break;
- case FcOpTimes: printf ("Times"); break;
- case FcOpDivide: printf ("Divide"); break;
- case FcOpNot: printf ("Not"); break;
- case FcOpNil: printf ("Nil"); break;
- case FcOpComma: printf ("Comma"); break;
- case FcOpFloor: printf ("Floor"); break;
- case FcOpCeil: printf ("Ceil"); break;
- case FcOpRound: printf ("Round"); break;
- case FcOpTrunc: printf ("Trunc"); break;
- case FcOpListing: printf ("Listing"); break;
- case FcOpInvalid: printf ("Invalid"); break;
- }
-}
-
-void
-FcExprPrint (const FcExpr *expr)
-{
- if (!expr) printf ("none");
- else switch (expr->op) {
- case FcOpInteger: printf ("%d", expr->u.ival); break;
- case FcOpDouble: printf ("%g", expr->u.dval); break;
- case FcOpString: printf ("\"%s\"", expr->u.sval); break;
- case FcOpMatrix: printf ("[%g %g %g %g]",
- expr->u.mval->xx,
- expr->u.mval->xy,
- expr->u.mval->yx,
- expr->u.mval->yy); break;
- case FcOpRange: break;
- case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break;
- case FcOpCharSet: printf ("charset\n"); break;
- case FcOpLangSet:
- printf ("langset:");
- FcLangSetPrint(expr->u.lval);
- printf ("\n");
- break;
- case FcOpNil: printf ("nil\n"); break;
- case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break;
- case FcOpConst: printf ("%s", expr->u.constant); break;
- case FcOpQuest:
- FcExprPrint (expr->u.tree.left);
- printf (" quest ");
- FcExprPrint (expr->u.tree.right->u.tree.left);
- printf (" colon ");
- FcExprPrint (expr->u.tree.right->u.tree.right);
- break;
- case FcOpAssign:
- case FcOpAssignReplace:
- case FcOpPrependFirst:
- case FcOpPrepend:
- case FcOpAppend:
- case FcOpAppendLast:
- case FcOpOr:
- case FcOpAnd:
- case FcOpEqual:
- case FcOpNotEqual:
- case FcOpLess:
- case FcOpLessEqual:
- case FcOpMore:
- case FcOpMoreEqual:
- case FcOpContains:
- case FcOpListing:
- case FcOpNotContains:
- case FcOpPlus:
- case FcOpMinus:
- case FcOpTimes:
- case FcOpDivide:
- case FcOpComma:
- FcExprPrint (expr->u.tree.left);
- printf (" ");
- switch (expr->op) {
- case FcOpAssign: printf ("Assign"); break;
- case FcOpAssignReplace: printf ("AssignReplace"); break;
- case FcOpPrependFirst: printf ("PrependFirst"); break;
- case FcOpPrepend: printf ("Prepend"); break;
- case FcOpAppend: printf ("Append"); break;
- case FcOpAppendLast: printf ("AppendLast"); break;
- case FcOpOr: printf ("Or"); break;
- case FcOpAnd: printf ("And"); break;
- case FcOpEqual: printf ("Equal"); break;
- case FcOpNotEqual: printf ("NotEqual"); break;
- case FcOpLess: printf ("Less"); break;
- case FcOpLessEqual: printf ("LessEqual"); break;
- case FcOpMore: printf ("More"); break;
- case FcOpMoreEqual: printf ("MoreEqual"); break;
- case FcOpContains: printf ("Contains"); break;
- case FcOpListing: printf ("Listing"); break;
- case FcOpNotContains: printf ("NotContains"); break;
- case FcOpPlus: printf ("Plus"); break;
- case FcOpMinus: printf ("Minus"); break;
- case FcOpTimes: printf ("Times"); break;
- case FcOpDivide: printf ("Divide"); break;
- case FcOpComma: printf ("Comma"); break;
- default: break;
- }
- printf (" ");
- FcExprPrint (expr->u.tree.right);
- break;
- case FcOpNot:
- printf ("Not ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpFloor:
- printf ("Floor ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpCeil:
- printf ("Ceil ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpRound:
- printf ("Round ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpTrunc:
- printf ("Trunc ");
- FcExprPrint (expr->u.tree.left);
- break;
- case FcOpInvalid: printf ("Invalid"); break;
- }
-}
-
-void
-FcTestPrint (const FcTest *test)
-{
- switch (test->kind) {
- case FcMatchPattern:
- printf ("pattern ");
- break;
- case FcMatchFont:
- printf ("font ");
- break;
- case FcMatchScan:
- printf ("scan ");
- break;
- }
- switch (test->qual) {
- case FcQualAny:
- printf ("any ");
- break;
- case FcQualAll:
- printf ("all ");
- break;
- case FcQualFirst:
- printf ("first ");
- break;
- case FcQualNotFirst:
- printf ("not_first ");
- break;
- }
- printf ("%s ", FcObjectName (test->object));
- FcOpPrint (test->op);
- printf (" ");
- FcExprPrint (test->expr);
- printf ("\n");
-}
-
-void
-FcEditPrint (const FcEdit *edit)
-{
- printf ("Edit %s ", FcObjectName (edit->object));
- FcOpPrint (edit->op);
- printf (" ");
- FcExprPrint (edit->expr);
-}
-
-void
-FcSubstPrint (const FcSubst *subst)
-{
- FcEdit *e;
- FcTest *t;
-
- printf ("match\n");
- for (t = subst->test; t; t = t->next)
- {
- printf ("\t");
- FcTestPrint (t);
- }
- printf ("edit\n");
- for (e = subst->edit; e; e = e->next)
- {
- printf ("\t");
- FcEditPrint (e);
- printf (";\n");
- }
- printf ("\n");
-}
-
-void
-FcFontSetPrint (const FcFontSet *s)
-{
- int i;
-
- printf ("FontSet %d of %d\n", s->nfont, s->sfont);
- for (i = 0; i < s->nfont; i++)
- {
- printf ("Font %d ", i);
- FcPatternPrint (s->fonts[i]);
- }
-}
-
-int FcDebugVal;
-
-void
-FcInitDebug (void)
-{
- char *e;
-
- e = getenv ("FC_DEBUG");
- if (e)
- {
- printf ("FC_DEBUG=%s\n", e);
- FcDebugVal = atoi (e);
- if (FcDebugVal < 0)
- FcDebugVal = 0;
- }
-}
-#define __fcdbg__
-#include "fcaliastail.h"
-#undef __fcdbg__
+/* + * fontconfig/src/fcdbg.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <stdio.h> +#include <stdlib.h> + +void +FcValuePrint (const FcValue v) +{ + switch (v.type) { + case FcTypeVoid: + printf (" <void>"); + break; + case FcTypeInteger: + printf (" %d(i)", v.u.i); + break; + case FcTypeDouble: + printf (" %g(f)", v.u.d); + break; + case FcTypeString: + printf (" \"%s\"", v.u.s); + break; + case FcTypeBool: + printf (" %s", v.u.b ? "FcTrue" : "FcFalse"); + break; + case FcTypeMatrix: + printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); + break; + case FcTypeCharSet: /* XXX */ + printf (" "); + FcCharSetPrint (v.u.c); + break; + case FcTypeLangSet: + printf (" "); + FcLangSetPrint (v.u.l); + break; + case FcTypeFTFace: + printf (" face"); + break; + } +} + +void +FcValueListPrint (FcValueListPtr l) +{ + for (; l != NULL; l = FcValueListNext(l)) + { + FcValuePrint (FcValueCanonicalize(&l->value)); + switch (l->binding) { + case FcValueBindingWeak: + printf ("(w)"); + break; + case FcValueBindingStrong: + printf ("(s)"); + break; + case FcValueBindingSame: + printf ("(=)"); + break; + } + } +} + +void +FcLangSetPrint (const FcLangSet *ls) +{ + FcStrBuf buf; + FcChar8 init_buf[1024]; + + FcStrBufInit (&buf, init_buf, sizeof (init_buf)); + if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0')) + printf ("%s", buf.buf); + else + printf ("langset (alloc error)"); + FcStrBufDestroy (&buf); +} + +void +FcCharSetPrint (const FcCharSet *c) +{ + int i, j; + intptr_t *leaves = FcCharSetLeaves (c); + FcChar16 *numbers = FcCharSetNumbers (c); + +#if 0 + printf ("CharSet 0x%x\n", (intptr_t) c); + printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves); + printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers); + + for (i = 0; i < c->num; i++) + { + printf ("Page %d: %04x +%d = 0x%x\n", + i, numbers[i], leaves[i], + (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf)); + } +#endif + + printf ("\n"); + for (i = 0; i < c->num; i++) + { + intptr_t leaf_offset = leaves[i]; + FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf); + + printf ("\t"); + printf ("%04x:", numbers[i]); + for (j = 0; j < 256/32; j++) + printf (" %08x", leaf->map[j]); + printf ("\n"); + } +} + +void +FcPatternPrint (const FcPattern *p) +{ + int i; + FcPatternElt *e; + + if (!p) + { + printf ("Null pattern\n"); + return; + } + printf ("Pattern has %d elts (size %d)\n", p->num, p->size); + for (i = 0; i < p->num; i++) + { + e = &FcPatternElts(p)[i]; + printf ("\t%s:", FcObjectName(e->object)); + FcValueListPrint (FcPatternEltValues(e)); + printf ("\n"); + } + printf ("\n"); +} + +void +FcOpPrint (FcOp op) +{ + switch (op) { + case FcOpInteger: printf ("Integer"); break; + case FcOpDouble: printf ("Double"); break; + case FcOpString: printf ("String"); break; + case FcOpMatrix: printf ("Matrix"); break; + case FcOpRange: printf ("Range"); break; + case FcOpBool: printf ("Bool"); break; + case FcOpCharSet: printf ("CharSet"); break; + case FcOpLangSet: printf ("LangSet"); break; + case FcOpField: printf ("Field"); break; + case FcOpConst: printf ("Const"); break; + case FcOpAssign: printf ("Assign"); break; + case FcOpAssignReplace: printf ("AssignReplace"); break; + case FcOpPrepend: printf ("Prepend"); break; + case FcOpPrependFirst: printf ("PrependFirst"); break; + case FcOpAppend: printf ("Append"); break; + case FcOpAppendLast: printf ("AppendLast"); break; + case FcOpQuest: printf ("Quest"); break; + case FcOpOr: printf ("Or"); break; + case FcOpAnd: printf ("And"); break; + case FcOpEqual: printf ("Equal"); break; + case FcOpNotEqual: printf ("NotEqual"); break; + case FcOpLess: printf ("Less"); break; + case FcOpLessEqual: printf ("LessEqual"); break; + case FcOpMore: printf ("More"); break; + case FcOpMoreEqual: printf ("MoreEqual"); break; + case FcOpContains: printf ("Contains"); break; + case FcOpNotContains: printf ("NotContains"); break; + case FcOpPlus: printf ("Plus"); break; + case FcOpMinus: printf ("Minus"); break; + case FcOpTimes: printf ("Times"); break; + case FcOpDivide: printf ("Divide"); break; + case FcOpNot: printf ("Not"); break; + case FcOpNil: printf ("Nil"); break; + case FcOpComma: printf ("Comma"); break; + case FcOpFloor: printf ("Floor"); break; + case FcOpCeil: printf ("Ceil"); break; + case FcOpRound: printf ("Round"); break; + case FcOpTrunc: printf ("Trunc"); break; + case FcOpListing: printf ("Listing"); break; + case FcOpInvalid: printf ("Invalid"); break; + } +} + +void +FcExprPrint (const FcExpr *expr) +{ + if (!expr) printf ("none"); + else switch (expr->op) { + case FcOpInteger: printf ("%d", expr->u.ival); break; + case FcOpDouble: printf ("%g", expr->u.dval); break; + case FcOpString: printf ("\"%s\"", expr->u.sval); break; + case FcOpMatrix: printf ("[%g %g %g %g]", + expr->u.mval->xx, + expr->u.mval->xy, + expr->u.mval->yx, + expr->u.mval->yy); break; + case FcOpRange: break; + case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break; + case FcOpCharSet: printf ("charset\n"); break; + case FcOpLangSet: + printf ("langset:"); + FcLangSetPrint(expr->u.lval); + printf ("\n"); + break; + case FcOpNil: printf ("nil\n"); break; + case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break; + case FcOpConst: printf ("%s", expr->u.constant); break; + case FcOpQuest: + FcExprPrint (expr->u.tree.left); + printf (" quest "); + FcExprPrint (expr->u.tree.right->u.tree.left); + printf (" colon "); + FcExprPrint (expr->u.tree.right->u.tree.right); + break; + case FcOpAssign: + case FcOpAssignReplace: + case FcOpPrependFirst: + case FcOpPrepend: + case FcOpAppend: + case FcOpAppendLast: + case FcOpOr: + case FcOpAnd: + case FcOpEqual: + case FcOpNotEqual: + case FcOpLess: + case FcOpLessEqual: + case FcOpMore: + case FcOpMoreEqual: + case FcOpContains: + case FcOpListing: + case FcOpNotContains: + case FcOpPlus: + case FcOpMinus: + case FcOpTimes: + case FcOpDivide: + case FcOpComma: + FcExprPrint (expr->u.tree.left); + printf (" "); + switch (expr->op) { + case FcOpAssign: printf ("Assign"); break; + case FcOpAssignReplace: printf ("AssignReplace"); break; + case FcOpPrependFirst: printf ("PrependFirst"); break; + case FcOpPrepend: printf ("Prepend"); break; + case FcOpAppend: printf ("Append"); break; + case FcOpAppendLast: printf ("AppendLast"); break; + case FcOpOr: printf ("Or"); break; + case FcOpAnd: printf ("And"); break; + case FcOpEqual: printf ("Equal"); break; + case FcOpNotEqual: printf ("NotEqual"); break; + case FcOpLess: printf ("Less"); break; + case FcOpLessEqual: printf ("LessEqual"); break; + case FcOpMore: printf ("More"); break; + case FcOpMoreEqual: printf ("MoreEqual"); break; + case FcOpContains: printf ("Contains"); break; + case FcOpListing: printf ("Listing"); break; + case FcOpNotContains: printf ("NotContains"); break; + case FcOpPlus: printf ("Plus"); break; + case FcOpMinus: printf ("Minus"); break; + case FcOpTimes: printf ("Times"); break; + case FcOpDivide: printf ("Divide"); break; + case FcOpComma: printf ("Comma"); break; + default: break; + } + printf (" "); + FcExprPrint (expr->u.tree.right); + break; + case FcOpNot: + printf ("Not "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpFloor: + printf ("Floor "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpCeil: + printf ("Ceil "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpRound: + printf ("Round "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpTrunc: + printf ("Trunc "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpInvalid: printf ("Invalid"); break; + } +} + +void +FcTestPrint (const FcTest *test) +{ + switch (test->kind) { + case FcMatchPattern: + printf ("pattern "); + break; + case FcMatchFont: + printf ("font "); + break; + case FcMatchScan: + printf ("scan "); + break; + } + switch (test->qual) { + case FcQualAny: + printf ("any "); + break; + case FcQualAll: + printf ("all "); + break; + case FcQualFirst: + printf ("first "); + break; + case FcQualNotFirst: + printf ("not_first "); + break; + } + printf ("%s ", FcObjectName (test->object)); + FcOpPrint (test->op); + printf (" "); + FcExprPrint (test->expr); + printf ("\n"); +} + +void +FcEditPrint (const FcEdit *edit) +{ + printf ("Edit %s ", FcObjectName (edit->object)); + FcOpPrint (edit->op); + printf (" "); + FcExprPrint (edit->expr); +} + +void +FcSubstPrint (const FcSubst *subst) +{ + FcEdit *e; + FcTest *t; + + printf ("match\n"); + for (t = subst->test; t; t = t->next) + { + printf ("\t"); + FcTestPrint (t); + } + printf ("edit\n"); + for (e = subst->edit; e; e = e->next) + { + printf ("\t"); + FcEditPrint (e); + printf (";\n"); + } + printf ("\n"); +} + +void +FcFontSetPrint (const FcFontSet *s) +{ + int i; + + printf ("FontSet %d of %d\n", s->nfont, s->sfont); + for (i = 0; i < s->nfont; i++) + { + printf ("Font %d ", i); + FcPatternPrint (s->fonts[i]); + } +} + +int FcDebugVal; + +void +FcInitDebug (void) +{ + char *e; + + e = getenv ("FC_DEBUG"); + if (e) + { + printf ("FC_DEBUG=%s\n", e); + FcDebugVal = atoi (e); + if (FcDebugVal < 0) + FcDebugVal = 0; + } +} +#define __fcdbg__ +#include "fcaliastail.h" +#undef __fcdbg__ diff --git a/fontconfig/src/fcdefault.c b/fontconfig/src/fcdefault.c index 92ab8f0e6..a9165facd 100644 --- a/fontconfig/src/fcdefault.c +++ b/fontconfig/src/fcdefault.c @@ -1,181 +1,181 @@ -/*
- * fontconfig/src/fcdefault.c
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <locale.h>
-
-static const struct {
- FcObject field;
- FcBool value;
-} FcBoolDefaults[] = {
- { FC_HINTING_OBJECT, FcTrue }, /* !FT_LOAD_NO_HINTING */
- { FC_VERTICAL_LAYOUT_OBJECT, FcFalse }, /* FC_LOAD_VERTICAL_LAYOUT */
- { FC_AUTOHINT_OBJECT, FcFalse }, /* FC_LOAD_FORCE_AUTOHINT */
- { FC_GLOBAL_ADVANCE_OBJECT, FcTrue }, /* !FC_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */
- { FC_EMBEDDED_BITMAP_OBJECT, FcTrue }, /* !FC_LOAD_NO_BITMAP */
- { FC_DECORATIVE_OBJECT, FcFalse },
-};
-
-#define NUM_FC_BOOL_DEFAULTS (int) (sizeof FcBoolDefaults / sizeof FcBoolDefaults[0])
-
-FcChar8 *
-FcGetDefaultLang (void)
-{
- static char lang_local [128] = {0};
- char *ctype;
- char *territory;
- char *after;
- int lang_len, territory_len;
-
- if (lang_local [0])
- return (FcChar8 *) lang_local;
-
- ctype = setlocale (LC_CTYPE, NULL);
-
- /*
- * Check if setlocale (LC_ALL, "") has been called
- */
- if (!ctype || !strcmp (ctype, "C"))
- {
- ctype = getenv ("LC_ALL");
- if (!ctype)
- {
- ctype = getenv ("LC_CTYPE");
- if (!ctype)
- ctype = getenv ("LANG");
- }
- }
-
- /* ignore missing or empty ctype */
- if (ctype && *ctype != '\0')
- {
- territory = strchr (ctype, '_');
- if (territory)
- {
- lang_len = territory - ctype;
- territory = territory + 1;
- after = strchr (territory, '.');
- if (!after)
- {
- after = strchr (territory, '@');
- if (!after)
- after = territory + strlen (territory);
- }
- territory_len = after - territory;
- if (lang_len + 1 + territory_len + 1 <= (int) sizeof (lang_local))
- {
- strncpy (lang_local, ctype, lang_len);
- lang_local[lang_len] = '-';
- strncpy (lang_local + lang_len + 1, territory, territory_len);
- lang_local[lang_len + 1 + territory_len] = '\0';
- }
- }
- else
- {
- after = strchr (ctype, '.');
- if (!after)
- {
- after = strchr (ctype, '@');
- if (!after)
- after = ctype + strlen (ctype);
- }
- lang_len = after - ctype;
- if (lang_len + 1 <= (int) sizeof (lang_local))
- {
- strncpy (lang_local, ctype, lang_len);
- lang_local[lang_len] = '\0';
- }
- }
- }
-
- /* set default lang to en */
- if (!lang_local [0])
- strcpy (lang_local, "en");
-
- return (FcChar8 *) lang_local;
-}
-
-void
-FcDefaultSubstitute (FcPattern *pattern)
-{
- FcValue v;
- int i;
-
- if (FcPatternObjectGet (pattern, FC_WEIGHT_OBJECT, 0, &v) == FcResultNoMatch )
- FcPatternObjectAddInteger (pattern, FC_WEIGHT_OBJECT, FC_WEIGHT_MEDIUM);
-
- if (FcPatternObjectGet (pattern, FC_SLANT_OBJECT, 0, &v) == FcResultNoMatch)
- FcPatternObjectAddInteger (pattern, FC_SLANT_OBJECT, FC_SLANT_ROMAN);
-
- if (FcPatternObjectGet (pattern, FC_WIDTH_OBJECT, 0, &v) == FcResultNoMatch)
- FcPatternObjectAddInteger (pattern, FC_WIDTH_OBJECT, FC_WIDTH_NORMAL);
-
- for (i = 0; i < NUM_FC_BOOL_DEFAULTS; i++)
- if (FcPatternObjectGet (pattern, FcBoolDefaults[i].field, 0, &v) == FcResultNoMatch)
- FcPatternObjectAddBool (pattern, FcBoolDefaults[i].field, FcBoolDefaults[i].value);
-
- if (FcPatternObjectGet (pattern, FC_PIXEL_SIZE_OBJECT, 0, &v) == FcResultNoMatch)
- {
- double dpi, size, scale;
-
- if (FcPatternObjectGetDouble (pattern, FC_SIZE_OBJECT, 0, &size) != FcResultMatch)
- {
- size = 12.0;
- (void) FcPatternObjectDel (pattern, FC_SIZE_OBJECT);
- FcPatternObjectAddDouble (pattern, FC_SIZE_OBJECT, size);
- }
- if (FcPatternObjectGetDouble (pattern, FC_SCALE_OBJECT, 0, &scale) != FcResultMatch)
- {
- scale = 1.0;
- (void) FcPatternObjectDel (pattern, FC_SCALE_OBJECT);
- FcPatternObjectAddDouble (pattern, FC_SCALE_OBJECT, scale);
- }
- size *= scale;
- if (FcPatternObjectGetDouble (pattern, FC_DPI_OBJECT, 0, &dpi) != FcResultMatch)
- {
- dpi = 75.0;
- (void) FcPatternObjectDel (pattern, FC_DPI_OBJECT);
- FcPatternObjectAddDouble (pattern, FC_DPI_OBJECT, dpi);
- }
- size *= dpi / 72.0;
- FcPatternObjectAddDouble (pattern, FC_PIXEL_SIZE_OBJECT, size);
- }
-
- if (FcPatternObjectGet (pattern, FC_LANG_OBJECT, 0, &v) == FcResultNoMatch)
- {
- FcPatternObjectAddString (pattern, FC_LANG_OBJECT, FcGetDefaultLang ());
- }
- if (FcPatternObjectGet (pattern, FC_FONTVERSION_OBJECT, 0, &v) == FcResultNoMatch)
- {
- FcPatternObjectAddInteger (pattern, FC_FONTVERSION_OBJECT, 0x7fffffff);
- }
-
- if (FcPatternObjectGet (pattern, FC_HINT_STYLE_OBJECT, 0, &v) == FcResultNoMatch)
- {
- FcPatternObjectAddInteger (pattern, FC_HINT_STYLE_OBJECT, FC_HINT_FULL);
- }
-}
-#define __fcdefault__
-#include "fcaliastail.h"
-#undef __fcdefault__
+/* + * fontconfig/src/fcdefault.c + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <locale.h> + +static const struct { + FcObject field; + FcBool value; +} FcBoolDefaults[] = { + { FC_HINTING_OBJECT, FcTrue }, /* !FT_LOAD_NO_HINTING */ + { FC_VERTICAL_LAYOUT_OBJECT, FcFalse }, /* FC_LOAD_VERTICAL_LAYOUT */ + { FC_AUTOHINT_OBJECT, FcFalse }, /* FC_LOAD_FORCE_AUTOHINT */ + { FC_GLOBAL_ADVANCE_OBJECT, FcTrue }, /* !FC_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */ + { FC_EMBEDDED_BITMAP_OBJECT, FcTrue }, /* !FC_LOAD_NO_BITMAP */ + { FC_DECORATIVE_OBJECT, FcFalse }, +}; + +#define NUM_FC_BOOL_DEFAULTS (int) (sizeof FcBoolDefaults / sizeof FcBoolDefaults[0]) + +FcChar8 * +FcGetDefaultLang (void) +{ + static char lang_local [128] = {0}; + char *ctype; + char *territory; + char *after; + int lang_len, territory_len; + + if (lang_local [0]) + return (FcChar8 *) lang_local; + + ctype = setlocale (LC_CTYPE, NULL); + + /* + * Check if setlocale (LC_ALL, "") has been called + */ + if (!ctype || !strcmp (ctype, "C")) + { + ctype = getenv ("LC_ALL"); + if (!ctype) + { + ctype = getenv ("LC_CTYPE"); + if (!ctype) + ctype = getenv ("LANG"); + } + } + + /* ignore missing or empty ctype */ + if (ctype && *ctype != '\0') + { + territory = strchr (ctype, '_'); + if (territory) + { + lang_len = territory - ctype; + territory = territory + 1; + after = strchr (territory, '.'); + if (!after) + { + after = strchr (territory, '@'); + if (!after) + after = territory + strlen (territory); + } + territory_len = after - territory; + if (lang_len + 1 + territory_len + 1 <= (int) sizeof (lang_local)) + { + strncpy (lang_local, ctype, lang_len); + lang_local[lang_len] = '-'; + strncpy (lang_local + lang_len + 1, territory, territory_len); + lang_local[lang_len + 1 + territory_len] = '\0'; + } + } + else + { + after = strchr (ctype, '.'); + if (!after) + { + after = strchr (ctype, '@'); + if (!after) + after = ctype + strlen (ctype); + } + lang_len = after - ctype; + if (lang_len + 1 <= (int) sizeof (lang_local)) + { + strncpy (lang_local, ctype, lang_len); + lang_local[lang_len] = '\0'; + } + } + } + + /* set default lang to en */ + if (!lang_local [0]) + strcpy (lang_local, "en"); + + return (FcChar8 *) lang_local; +} + +void +FcDefaultSubstitute (FcPattern *pattern) +{ + FcValue v; + int i; + + if (FcPatternObjectGet (pattern, FC_WEIGHT_OBJECT, 0, &v) == FcResultNoMatch ) + FcPatternObjectAddInteger (pattern, FC_WEIGHT_OBJECT, FC_WEIGHT_MEDIUM); + + if (FcPatternObjectGet (pattern, FC_SLANT_OBJECT, 0, &v) == FcResultNoMatch) + FcPatternObjectAddInteger (pattern, FC_SLANT_OBJECT, FC_SLANT_ROMAN); + + if (FcPatternObjectGet (pattern, FC_WIDTH_OBJECT, 0, &v) == FcResultNoMatch) + FcPatternObjectAddInteger (pattern, FC_WIDTH_OBJECT, FC_WIDTH_NORMAL); + + for (i = 0; i < NUM_FC_BOOL_DEFAULTS; i++) + if (FcPatternObjectGet (pattern, FcBoolDefaults[i].field, 0, &v) == FcResultNoMatch) + FcPatternObjectAddBool (pattern, FcBoolDefaults[i].field, FcBoolDefaults[i].value); + + if (FcPatternObjectGet (pattern, FC_PIXEL_SIZE_OBJECT, 0, &v) == FcResultNoMatch) + { + double dpi, size, scale; + + if (FcPatternObjectGetDouble (pattern, FC_SIZE_OBJECT, 0, &size) != FcResultMatch) + { + size = 12.0; + (void) FcPatternObjectDel (pattern, FC_SIZE_OBJECT); + FcPatternObjectAddDouble (pattern, FC_SIZE_OBJECT, size); + } + if (FcPatternObjectGetDouble (pattern, FC_SCALE_OBJECT, 0, &scale) != FcResultMatch) + { + scale = 1.0; + (void) FcPatternObjectDel (pattern, FC_SCALE_OBJECT); + FcPatternObjectAddDouble (pattern, FC_SCALE_OBJECT, scale); + } + size *= scale; + if (FcPatternObjectGetDouble (pattern, FC_DPI_OBJECT, 0, &dpi) != FcResultMatch) + { + dpi = 75.0; + (void) FcPatternObjectDel (pattern, FC_DPI_OBJECT); + FcPatternObjectAddDouble (pattern, FC_DPI_OBJECT, dpi); + } + size *= dpi / 72.0; + FcPatternObjectAddDouble (pattern, FC_PIXEL_SIZE_OBJECT, size); + } + + if (FcPatternObjectGet (pattern, FC_LANG_OBJECT, 0, &v) == FcResultNoMatch) + { + FcPatternObjectAddString (pattern, FC_LANG_OBJECT, FcGetDefaultLang ()); + } + if (FcPatternObjectGet (pattern, FC_FONTVERSION_OBJECT, 0, &v) == FcResultNoMatch) + { + FcPatternObjectAddInteger (pattern, FC_FONTVERSION_OBJECT, 0x7fffffff); + } + + if (FcPatternObjectGet (pattern, FC_HINT_STYLE_OBJECT, 0, &v) == FcResultNoMatch) + { + FcPatternObjectAddInteger (pattern, FC_HINT_STYLE_OBJECT, FC_HINT_FULL); + } +} +#define __fcdefault__ +#include "fcaliastail.h" +#undef __fcdefault__ diff --git a/fontconfig/src/fcdir.c b/fontconfig/src/fcdir.c index 7db7961a2..8a2b97625 100644 --- a/fontconfig/src/fcdir.c +++ b/fontconfig/src/fcdir.c @@ -1,325 +1,325 @@ -/*
- * fontconfig/src/fcdir.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <dirent.h>
-
-FcBool
-FcFileIsDir (const FcChar8 *file)
-{
- struct stat statb;
-
- if (FcStat (file, &statb) != 0)
- return FcFalse;
- return S_ISDIR(statb.st_mode);
-}
-
-static FcBool
-FcFileScanFontConfig (FcFontSet *set,
- FcBlanks *blanks,
- const FcChar8 *file,
- FcConfig *config)
-{
- FcPattern *font;
- FcBool ret = FcTrue;
- int id;
- int count = 0;
-
- id = 0;
- do
- {
- font = 0;
- /*
- * Nothing in the cache, scan the file
- */
- if (FcDebug () & FC_DBG_SCAN)
- {
- printf ("\tScanning file %s...", file);
- fflush (stdout);
- }
- font = FcFreeTypeQuery (file, id, blanks, &count);
- if (FcDebug () & FC_DBG_SCAN)
- printf ("done\n");
-
- /*
- * Edit pattern with user-defined rules
- */
- if (font && config && !FcConfigSubstitute (config, font, FcMatchScan))
- {
- FcPatternDestroy (font);
- font = NULL;
- ret = FcFalse;
- }
-
- /*
- * Add the font
- */
- if (font)
- {
- if (FcDebug() & FC_DBG_SCANV)
- {
- printf ("Final font pattern:\n");
- FcPatternPrint (font);
- }
- if (!FcFontSetAdd (set, font))
- {
- FcPatternDestroy (font);
- font = NULL;
- ret = FcFalse;
- }
- }
- else if (font)
- FcPatternDestroy (font);
- id++;
- } while (font && ret && id < count);
- return ret;
-}
-
-FcBool
-FcFileScanConfig (FcFontSet *set,
- FcStrSet *dirs,
- FcBlanks *blanks,
- const FcChar8 *file,
- FcConfig *config)
-{
- if (FcFileIsDir (file))
- return FcStrSetAdd (dirs, file);
- else
- return FcFileScanFontConfig (set, blanks, file, config);
-}
-
-FcBool
-FcFileScan (FcFontSet *set,
- FcStrSet *dirs,
- FcFileCache *cache, /* XXX unused */
- FcBlanks *blanks,
- const FcChar8 *file,
- FcBool force)
-{
- return FcFileScanConfig (set, dirs, blanks, file, FcConfigGetCurrent ());
-}
-
-/*
- * Strcmp helper that takes pointers to pointers, copied from qsort(3) manpage
- */
-static int
-cmpstringp(const void *p1, const void *p2)
-{
- return strcmp(* (char **) p1, * (char **) p2);
-}
-
-FcBool
-FcDirScanConfig (FcFontSet *set,
- FcStrSet *dirs,
- FcBlanks *blanks,
- const FcChar8 *dir,
- FcBool force, /* XXX unused */
- FcConfig *config)
-{
- DIR *d;
- struct dirent *e;
- FcStrSet *files;
- FcChar8 *file;
- FcChar8 *base;
- FcBool ret = FcTrue;
- int i;
-
- if (!force)
- return FcFalse;
-
- if (!set && !dirs)
- return FcTrue;
-
- if (!blanks)
- blanks = FcConfigGetBlanks (config);
-
- /* freed below */
- file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1);
- if (!file) {
- ret = FcFalse;
- goto bail;
- }
-
- strcpy ((char *) file, (char *) dir);
- strcat ((char *) file, "/");
- base = file + strlen ((char *) file);
-
- if (FcDebug () & FC_DBG_SCAN)
- printf ("\tScanning dir %s\n", dir);
-
- d = opendir ((char *) dir);
- if (!d)
- {
- /* Don't complain about missing directories */
- if (errno != ENOENT)
- ret = FcFalse;
- goto bail;
- }
-
- files = FcStrSetCreate ();
- if (!files)
- {
- ret = FcFalse;
- goto bail1;
- }
- while ((e = readdir (d)))
- {
- if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN)
- {
- strcpy ((char *) base, (char *) e->d_name);
- if (!FcStrSetAdd (files, file)) {
- ret = FcFalse;
- goto bail2;
- }
- }
- }
-
- /*
- * Sort files to make things prettier
- */
- qsort(files->strs, files->num, sizeof(FcChar8 *), cmpstringp);
-
- /*
- * Scan file files to build font patterns
- */
- for (i = 0; i < files->num; i++)
- FcFileScanConfig (set, dirs, blanks, files->strs[i], config);
-
-bail2:
- FcStrSetDestroy (files);
-bail1:
- closedir (d);
-bail:
- return ret;
-}
-
-FcBool
-FcDirScan (FcFontSet *set,
- FcStrSet *dirs,
- FcFileCache *cache, /* XXX unused */
- FcBlanks *blanks,
- const FcChar8 *dir,
- FcBool force /* XXX unused */)
-{
- if (cache || !force)
- return FcFalse;
-
- return FcDirScanConfig (set, dirs, blanks, dir, force, FcConfigGetCurrent ());
-}
-
-/*
- * Scan the specified directory and construct a cache of its contents
- */
-FcCache *
-FcDirCacheScan (const FcChar8 *dir, FcConfig *config)
-{
- FcStrSet *dirs;
- FcBool ret = FcTrue;
- FcFontSet *set;
- FcCache *cache = NULL;
- struct stat dir_stat;
-
- if (FcDebug () & FC_DBG_FONTSET)
- printf ("cache scan dir %s\n", dir);
-
- if (FcStat (dir, &dir_stat) < 0)
- {
- if (errno != ENOENT)
- ret = FcFalse;
- goto bail;
- }
-
- set = FcFontSetCreate();
- if (!set)
- {
- ret = FcFalse;
- goto bail;
- }
-
- dirs = FcStrSetCreate ();
- if (!dirs)
- {
- ret = FcFalse;
- goto bail1;
- }
-
- /*
- * Scan the dir
- */
- if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config))
- {
- ret = FcFalse;
- goto bail2;
- }
-
- /*
- * Build the cache object
- */
- cache = FcDirCacheBuild (set, dir, &dir_stat, dirs);
- if (!cache)
- {
- ret = FcFalse;
- goto bail2;
- }
-
- /*
- * Write out the cache file, ignoring any troubles
- */
- FcDirCacheWrite (cache, config);
-
- bail2:
- FcStrSetDestroy (dirs);
- bail1:
- FcFontSetDestroy (set);
- bail:
- return cache;
-}
-
-/*
- * Read (or construct) the cache for a directory
- */
-FcCache *
-FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config)
-{
- FcCache *cache = NULL;
-
- /* Try to use existing cache file */
- if (!force)
- cache = FcDirCacheLoad (dir, config, NULL);
-
- /* Not using existing cache file, construct new cache */
- if (!cache)
- cache = FcDirCacheScan (dir, config);
-
- return cache;
-}
-
-FcBool
-FcDirSave (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir)
-{
- return FcFalse; /* XXX deprecated */
-}
-#define __fcdir__
-#include "fcaliastail.h"
-#undef __fcdir__
+/* + * fontconfig/src/fcdir.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <dirent.h> + +FcBool +FcFileIsDir (const FcChar8 *file) +{ + struct stat statb; + + if (FcStat (file, &statb) != 0) + return FcFalse; + return S_ISDIR(statb.st_mode); +} + +static FcBool +FcFileScanFontConfig (FcFontSet *set, + FcBlanks *blanks, + const FcChar8 *file, + FcConfig *config) +{ + FcPattern *font; + FcBool ret = FcTrue; + int id; + int count = 0; + + id = 0; + do + { + font = 0; + /* + * Nothing in the cache, scan the file + */ + if (FcDebug () & FC_DBG_SCAN) + { + printf ("\tScanning file %s...", file); + fflush (stdout); + } + font = FcFreeTypeQuery (file, id, blanks, &count); + if (FcDebug () & FC_DBG_SCAN) + printf ("done\n"); + + /* + * Edit pattern with user-defined rules + */ + if (font && config && !FcConfigSubstitute (config, font, FcMatchScan)) + { + FcPatternDestroy (font); + font = NULL; + ret = FcFalse; + } + + /* + * Add the font + */ + if (font) + { + if (FcDebug() & FC_DBG_SCANV) + { + printf ("Final font pattern:\n"); + FcPatternPrint (font); + } + if (!FcFontSetAdd (set, font)) + { + FcPatternDestroy (font); + font = NULL; + ret = FcFalse; + } + } + else if (font) + FcPatternDestroy (font); + id++; + } while (font && ret && id < count); + return ret; +} + +FcBool +FcFileScanConfig (FcFontSet *set, + FcStrSet *dirs, + FcBlanks *blanks, + const FcChar8 *file, + FcConfig *config) +{ + if (FcFileIsDir (file)) + return FcStrSetAdd (dirs, file); + else + return FcFileScanFontConfig (set, blanks, file, config); +} + +FcBool +FcFileScan (FcFontSet *set, + FcStrSet *dirs, + FcFileCache *cache, /* XXX unused */ + FcBlanks *blanks, + const FcChar8 *file, + FcBool force) +{ + return FcFileScanConfig (set, dirs, blanks, file, FcConfigGetCurrent ()); +} + +/* + * Strcmp helper that takes pointers to pointers, copied from qsort(3) manpage + */ +static int +cmpstringp(const void *p1, const void *p2) +{ + return strcmp(* (char **) p1, * (char **) p2); +} + +FcBool +FcDirScanConfig (FcFontSet *set, + FcStrSet *dirs, + FcBlanks *blanks, + const FcChar8 *dir, + FcBool force, /* XXX unused */ + FcConfig *config) +{ + DIR *d; + struct dirent *e; + FcStrSet *files; + FcChar8 *file; + FcChar8 *base; + FcBool ret = FcTrue; + int i; + + if (!force) + return FcFalse; + + if (!set && !dirs) + return FcTrue; + + if (!blanks) + blanks = FcConfigGetBlanks (config); + + /* freed below */ + file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1); + if (!file) { + ret = FcFalse; + goto bail; + } + + strcpy ((char *) file, (char *) dir); + strcat ((char *) file, "/"); + base = file + strlen ((char *) file); + + if (FcDebug () & FC_DBG_SCAN) + printf ("\tScanning dir %s\n", dir); + + d = opendir ((char *) dir); + if (!d) + { + /* Don't complain about missing directories */ + if (errno != ENOENT) + ret = FcFalse; + goto bail; + } + + files = FcStrSetCreate (); + if (!files) + { + ret = FcFalse; + goto bail1; + } + while ((e = readdir (d))) + { + if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN) + { + strcpy ((char *) base, (char *) e->d_name); + if (!FcStrSetAdd (files, file)) { + ret = FcFalse; + goto bail2; + } + } + } + + /* + * Sort files to make things prettier + */ + qsort(files->strs, files->num, sizeof(FcChar8 *), cmpstringp); + + /* + * Scan file files to build font patterns + */ + for (i = 0; i < files->num; i++) + FcFileScanConfig (set, dirs, blanks, files->strs[i], config); + +bail2: + FcStrSetDestroy (files); +bail1: + closedir (d); +bail: + return ret; +} + +FcBool +FcDirScan (FcFontSet *set, + FcStrSet *dirs, + FcFileCache *cache, /* XXX unused */ + FcBlanks *blanks, + const FcChar8 *dir, + FcBool force /* XXX unused */) +{ + if (cache || !force) + return FcFalse; + + return FcDirScanConfig (set, dirs, blanks, dir, force, FcConfigGetCurrent ()); +} + +/* + * Scan the specified directory and construct a cache of its contents + */ +FcCache * +FcDirCacheScan (const FcChar8 *dir, FcConfig *config) +{ + FcStrSet *dirs; + FcBool ret = FcTrue; + FcFontSet *set; + FcCache *cache = NULL; + struct stat dir_stat; + + if (FcDebug () & FC_DBG_FONTSET) + printf ("cache scan dir %s\n", dir); + + if (FcStat (dir, &dir_stat) < 0) + { + if (errno != ENOENT) + ret = FcFalse; + goto bail; + } + + set = FcFontSetCreate(); + if (!set) + { + ret = FcFalse; + goto bail; + } + + dirs = FcStrSetCreate (); + if (!dirs) + { + ret = FcFalse; + goto bail1; + } + + /* + * Scan the dir + */ + if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config)) + { + ret = FcFalse; + goto bail2; + } + + /* + * Build the cache object + */ + cache = FcDirCacheBuild (set, dir, &dir_stat, dirs); + if (!cache) + { + ret = FcFalse; + goto bail2; + } + + /* + * Write out the cache file, ignoring any troubles + */ + FcDirCacheWrite (cache, config); + + bail2: + FcStrSetDestroy (dirs); + bail1: + FcFontSetDestroy (set); + bail: + return cache; +} + +/* + * Read (or construct) the cache for a directory + */ +FcCache * +FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config) +{ + FcCache *cache = NULL; + + /* Try to use existing cache file */ + if (!force) + cache = FcDirCacheLoad (dir, config, NULL); + + /* Not using existing cache file, construct new cache */ + if (!cache) + cache = FcDirCacheScan (dir, config); + + return cache; +} + +FcBool +FcDirSave (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir) +{ + return FcFalse; /* XXX deprecated */ +} +#define __fcdir__ +#include "fcaliastail.h" +#undef __fcdir__ diff --git a/fontconfig/src/fcformat.c b/fontconfig/src/fcformat.c index df184f704..d8518f458 100644 --- a/fontconfig/src/fcformat.c +++ b/fontconfig/src/fcformat.c @@ -1,1214 +1,1214 @@ -/*
- * Copyright © 2008,2009 Red Hat, Inc.
- *
- * Red Hat Author(s): Behdad Esfahbod
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-#include <string.h>
-#include <stdarg.h>
-
-
-/* The language is documented in doc/fcformat.fncs
- * These are the features implemented:
- *
- * simple %{elt}
- * width %width{elt}
- * index %{elt[idx]}
- * name= %{elt=}
- * :name= %{:elt}
- * default %{elt:-word}
- * count %{#elt}
- * subexpr %{{expr}}
- * filter-out %{-elt1,elt2,elt3{expr}}
- * filter-in %{+elt1,elt2,elt3{expr}}
- * conditional %{?elt1,elt2,!elt3{}{}}
- * enumerate %{[]elt1,elt2{expr}}
- * langset langset enumeration using the same syntax
- * builtin %{=blt}
- * convert %{elt|conv1|conv2|conv3}
- *
- * converters:
- * basename FcStrBasename
- * dirname FcStrDirname
- * downcase FcStrDowncase
- * shescape
- * cescape
- * xmlescape
- * delete delete chars
- * escape escape chars
- * translate translate chars
- *
- * builtins:
- * unparse FcNameUnparse
- * fcmatch fc-match default
- * fclist fc-list default
- * fccat fc-cat default
- * pkgkit PackageKit package tag format
- *
- *
- * Some ideas for future syntax extensions:
- *
- * - verbose builtin that is like FcPatternPrint
- * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}'
- * - allow indexing in +, -, ? filtering?
- * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation)
- */
-
-
-#define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\""
-#define FCMATCH_FORMAT "%{file:-<unknown filename>|basename}: \"%{family[0]:-<unknown family>}\" \"%{style[0]:-<unknown style>}\""
-#define FCLIST_FORMAT "%{?file{%{file}: }}%{-file{%{=unparse}}}"
-#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}"
-
-
-static void
-message (const char *fmt, ...)
-{
- va_list args;
- va_start (args, fmt);
- fprintf (stderr, "Fontconfig: Pattern format error: ");
- vfprintf (stderr, fmt, args);
- fprintf (stderr, ".\n");
- va_end (args);
-}
-
-
-typedef struct _FcFormatContext
-{
- const FcChar8 *format_orig;
- const FcChar8 *format;
- int format_len;
- FcChar8 *word;
- FcBool word_allocated;
-} FcFormatContext;
-
-static FcBool
-FcFormatContextInit (FcFormatContext *c,
- const FcChar8 *format,
- FcChar8 *scratch,
- int scratch_len)
-{
- c->format_orig = c->format = format;
- c->format_len = strlen ((const char *) format);
-
- if (c->format_len < scratch_len)
- {
- c->word = scratch;
- c->word_allocated = FcFalse;
- }
- else
- {
- c->word = malloc (c->format_len + 1);
- c->word_allocated = FcTrue;
- }
-
- return c->word != NULL;
-}
-
-static void
-FcFormatContextDone (FcFormatContext *c)
-{
- if (c && c->word_allocated)
- {
- free (c->word);
- }
-}
-
-static FcBool
-consume_char (FcFormatContext *c,
- FcChar8 term)
-{
- if (*c->format != term)
- return FcFalse;
-
- c->format++;
- return FcTrue;
-}
-
-static FcBool
-expect_char (FcFormatContext *c,
- FcChar8 term)
-{
- FcBool res = consume_char (c, term);
- if (!res)
- {
- if (c->format == c->format_orig + c->format_len)
- message ("format ended while expecting '%c'",
- term);
- else
- message ("expected '%c' at %d",
- term, c->format - c->format_orig + 1);
- }
- return res;
-}
-
-static FcBool
-FcCharIsPunct (const FcChar8 c)
-{
- if (c < '0')
- return FcTrue;
- if (c <= '9')
- return FcFalse;
- if (c < 'A')
- return FcTrue;
- if (c <= 'Z')
- return FcFalse;
- if (c < 'a')
- return FcTrue;
- if (c <= 'z')
- return FcFalse;
- if (c <= '~')
- return FcTrue;
- return FcFalse;
-}
-
-static char escaped_char(const char ch)
-{
- switch (ch) {
- case 'a': return '\a';
- case 'b': return '\b';
- case 'f': return '\f';
- case 'n': return '\n';
- case 'r': return '\r';
- case 't': return '\t';
- case 'v': return '\v';
- default: return ch;
- }
-}
-
-static FcBool
-read_word (FcFormatContext *c)
-{
- FcChar8 *p;
-
- p = c->word;
-
- while (*c->format)
- {
- if (*c->format == '\\')
- {
- c->format++;
- if (*c->format)
- *p++ = escaped_char (*c->format++);
- continue;
- }
- else if (FcCharIsPunct (*c->format))
- break;
-
- *p++ = *c->format++;
- }
- *p = '\0';
-
- if (p == c->word)
- {
- message ("expected identifier at %d",
- c->format - c->format_orig + 1);
- return FcFalse;
- }
-
- return FcTrue;
-}
-
-static FcBool
-read_chars (FcFormatContext *c,
- FcChar8 term)
-{
- FcChar8 *p;
-
- p = c->word;
-
- while (*c->format && *c->format != '}' && *c->format != term)
- {
- if (*c->format == '\\')
- {
- c->format++;
- if (*c->format)
- *p++ = escaped_char (*c->format++);
- continue;
- }
-
- *p++ = *c->format++;
- }
- *p = '\0';
-
- if (p == c->word)
- {
- message ("expected character data at %d",
- c->format - c->format_orig + 1);
- return FcFalse;
- }
-
- return FcTrue;
-}
-
-static FcBool
-FcPatternFormatToBuf (FcPattern *pat,
- const FcChar8 *format,
- FcStrBuf *buf);
-
-static FcBool
-interpret_builtin (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcChar8 *new_str;
- FcBool ret;
-
- if (!expect_char (c, '=') ||
- !read_word (c))
- return FcFalse;
-
- /* try simple builtins first */
- if (0) { }
-#define BUILTIN(name, func) \
- else if (0 == strcmp ((const char *) c->word, name))\
- do { new_str = func (pat); ret = FcTrue; } while (0)
- BUILTIN ("unparse", FcNameUnparse);
- /* BUILTIN ("verbose", FcPatternPrint); XXX */
-#undef BUILTIN
- else
- ret = FcFalse;
-
- if (ret)
- {
- if (new_str)
- {
- FcStrBufString (buf, new_str);
- free (new_str);
- return FcTrue;
- }
- else
- return FcFalse;
- }
-
- /* now try our custom formats */
- if (0) { }
-#define BUILTIN(name, format) \
- else if (0 == strcmp ((const char *) c->word, name))\
- ret = FcPatternFormatToBuf (pat, (const FcChar8 *) format, buf)
- BUILTIN ("fccat", FCCAT_FORMAT);
- BUILTIN ("fcmatch", FCMATCH_FORMAT);
- BUILTIN ("fclist", FCLIST_FORMAT);
- BUILTIN ("pkgkit", PKGKIT_FORMAT);
-#undef BUILTIN
- else
- ret = FcFalse;
-
- if (!ret)
- message ("unknown builtin \"%s\"",
- c->word);
-
- return ret;
-}
-
-static FcBool
-interpret_expr (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf,
- FcChar8 term);
-
-static FcBool
-interpret_subexpr (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- return expect_char (c, '{') &&
- interpret_expr (c, pat, buf, '}') &&
- expect_char (c, '}');
-}
-
-static FcBool
-maybe_interpret_subexpr (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- return (*c->format == '{') ?
- interpret_subexpr (c, pat, buf) :
- FcTrue;
-}
-
-static FcBool
-skip_subexpr (FcFormatContext *c);
-
-static FcBool
-skip_percent (FcFormatContext *c)
-{
- int width;
-
- if (!expect_char (c, '%'))
- return FcFalse;
-
- /* skip an optional width specifier */
- width = strtol ((const char *) c->format, (char **) &c->format, 10);
-
- if (!expect_char (c, '{'))
- return FcFalse;
-
- while(*c->format && *c->format != '}')
- {
- switch (*c->format)
- {
- case '\\':
- c->format++; /* skip over '\\' */
- if (*c->format)
- c->format++;
- continue;
- case '{':
- if (!skip_subexpr (c))
- return FcFalse;
- continue;
- }
- c->format++;
- }
-
- return expect_char (c, '}');
-}
-
-static FcBool
-skip_expr (FcFormatContext *c)
-{
- while(*c->format && *c->format != '}')
- {
- switch (*c->format)
- {
- case '\\':
- c->format++; /* skip over '\\' */
- if (*c->format)
- c->format++;
- continue;
- case '%':
- if (!skip_percent (c))
- return FcFalse;
- continue;
- }
- c->format++;
- }
-
- return FcTrue;
-}
-
-static FcBool
-skip_subexpr (FcFormatContext *c)
-{
- return expect_char (c, '{') &&
- skip_expr (c) &&
- expect_char (c, '}');
-}
-
-static FcBool
-maybe_skip_subexpr (FcFormatContext *c)
-{
- return (*c->format == '{') ?
- skip_subexpr (c) :
- FcTrue;
-}
-
-static FcBool
-interpret_filter_in (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcObjectSet *os;
- FcPattern *subpat;
-
- if (!expect_char (c, '+'))
- return FcFalse;
-
- os = FcObjectSetCreate ();
- if (!os)
- return FcFalse;
-
- do
- {
- /* XXX binding */
- if (!read_word (c) ||
- !FcObjectSetAdd (os, (const char *) c->word))
- {
- FcObjectSetDestroy (os);
- return FcFalse;
- }
- }
- while (consume_char (c, ','));
-
- subpat = FcPatternFilter (pat, os);
- FcObjectSetDestroy (os);
-
- if (!subpat ||
- !interpret_subexpr (c, subpat, buf))
- return FcFalse;
-
- FcPatternDestroy (subpat);
- return FcTrue;
-}
-
-static FcBool
-interpret_filter_out (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcPattern *subpat;
-
- if (!expect_char (c, '-'))
- return FcFalse;
-
- subpat = FcPatternDuplicate (pat);
- if (!subpat)
- return FcFalse;
-
- do
- {
- if (!read_word (c))
- {
- FcPatternDestroy (subpat);
- return FcFalse;
- }
-
- FcPatternDel (subpat, (const char *) c->word);
- }
- while (consume_char (c, ','));
-
- if (!interpret_subexpr (c, subpat, buf))
- return FcFalse;
-
- FcPatternDestroy (subpat);
- return FcTrue;
-}
-
-static FcBool
-interpret_cond (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcBool pass;
-
- if (!expect_char (c, '?'))
- return FcFalse;
-
- pass = FcTrue;
-
- do
- {
- FcBool negate;
- FcValue v;
-
- negate = consume_char (c, '!');
-
- if (!read_word (c))
- return FcFalse;
-
- pass = pass &&
- (negate ^
- (FcResultMatch ==
- FcPatternGet (pat, (const char *) c->word, 0, &v)));
- }
- while (consume_char (c, ','));
-
- if (pass)
- {
- if (!interpret_subexpr (c, pat, buf) ||
- !maybe_skip_subexpr (c))
- return FcFalse;
- }
- else
- {
- if (!skip_subexpr (c) ||
- !maybe_interpret_subexpr (c, pat, buf))
- return FcFalse;
- }
-
- return FcTrue;
-}
-
-static FcBool
-interpret_count (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- int count;
- FcPatternElt *e;
- FcChar8 buf_static[64];
-
- if (!expect_char (c, '#'))
- return FcFalse;
-
- if (!read_word (c))
- return FcFalse;
-
- count = 0;
- e = FcPatternObjectFindElt (pat,
- FcObjectFromName ((const char *) c->word));
- if (e)
- {
- FcValueListPtr l;
- count++;
- for (l = FcPatternEltValues(e);
- l->next;
- l = l->next)
- count++;
- }
-
- snprintf ((char *) buf_static, sizeof (buf_static), "%d", count);
- FcStrBufString (buf, buf_static);
-
- return FcTrue;
-}
-
-static FcBool
-interpret_enumerate (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcObjectSet *os;
- FcPattern *subpat;
- const FcChar8 *format_save;
- int idx;
- FcBool ret, done;
- FcStrList *lang_strs;
-
- if (!expect_char (c, '[') ||
- !expect_char (c, ']'))
- return FcFalse;
-
- os = FcObjectSetCreate ();
- if (!os)
- return FcFalse;
-
- ret = FcTrue;
-
- do
- {
- if (!read_word (c) ||
- !FcObjectSetAdd (os, (const char *) c->word))
- {
- FcObjectSetDestroy (os);
- return FcFalse;
- }
- }
- while (consume_char (c, ','));
-
- /* If we have one element and it's of type FcLangSet, we want
- * to enumerate the languages in it. */
- lang_strs = NULL;
- if (os->nobject == 1)
- {
- FcLangSet *langset;
- if (FcResultMatch ==
- FcPatternGetLangSet (pat, os->objects[0], 0, &langset))
- {
- FcStrSet *ss;
- if (!(ss = FcLangSetGetLangs (langset)) ||
- !(lang_strs = FcStrListCreate (ss)))
- goto bail0;
- }
- }
-
- subpat = FcPatternDuplicate (pat);
- if (!subpat)
- goto bail0;
-
- format_save = c->format;
- idx = 0;
- do
- {
- int i;
-
- done = FcTrue;
-
- if (lang_strs)
- {
- FcChar8 *lang;
-
- FcPatternDel (subpat, os->objects[0]);
- if ((lang = FcStrListNext (lang_strs)))
- {
- /* XXX binding? */
- FcPatternAddString (subpat, os->objects[0], lang);
- done = FcFalse;
- }
- }
- else
- {
- for (i = 0; i < os->nobject; i++)
- {
- FcValue v;
-
- /* XXX this can be optimized by accessing valuelist linked lists
- * directly and remembering where we were. Most (all) value lists
- * in normal uses are pretty short though (language tags are
- * stored as a LangSet, not separate values.). */
- FcPatternDel (subpat, os->objects[i]);
- if (FcResultMatch ==
- FcPatternGet (pat, os->objects[i], idx, &v))
- {
- /* XXX binding */
- FcPatternAdd (subpat, os->objects[i], v, FcFalse);
- done = FcFalse;
- }
- }
- }
-
- if (!done)
- {
- c->format = format_save;
- ret = interpret_subexpr (c, subpat, buf);
- if (!ret)
- goto bail;
- }
-
- idx++;
- } while (!done);
-
- if (c->format == format_save)
- skip_subexpr (c);
-
-bail:
- FcPatternDestroy (subpat);
-bail0:
- if (lang_strs)
- FcStrListDone (lang_strs);
- FcObjectSetDestroy (os);
-
- return ret;
-}
-
-static FcBool
-interpret_simple (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- FcPatternElt *e;
- FcBool add_colon = FcFalse;
- FcBool add_elt_name = FcFalse;
- int idx;
- FcChar8 *else_string;
-
- if (consume_char (c, ':'))
- add_colon = FcTrue;
-
- if (!read_word (c))
- return FcFalse;
-
- idx = -1;
- if (consume_char (c, '['))
- {
- idx = strtol ((const char *) c->format, (char **) &c->format, 10);
- if (idx < 0)
- {
- message ("expected non-negative number at %d",
- c->format-1 - c->format_orig + 1);
- return FcFalse;
- }
- if (!expect_char (c, ']'))
- return FcFalse;
- }
-
- if (consume_char (c, '='))
- add_elt_name = FcTrue;
-
- /* modifiers */
- else_string = NULL;
- if (consume_char (c, ':'))
- {
- FcChar8 *orig;
- /* divert the c->word for now */
- orig = c->word;
- c->word = c->word + strlen ((const char *) c->word) + 1;
- /* for now we just support 'default value' */
- if (!expect_char (c, '-') ||
- !read_chars (c, '|'))
- {
- c->word = orig;
- return FcFalse;
- }
- else_string = c->word;
- c->word = orig;
- }
-
- e = FcPatternObjectFindElt (pat,
- FcObjectFromName ((const char *) c->word));
- if (e || else_string)
- {
- FcValueListPtr l = NULL;
-
- if (add_colon)
- FcStrBufChar (buf, ':');
- if (add_elt_name)
- {
- FcStrBufString (buf, c->word);
- FcStrBufChar (buf, '=');
- }
-
- if (e)
- l = FcPatternEltValues(e);
-
- if (idx != -1)
- {
- while (l && idx > 0)
- {
- l = FcValueListNext(l);
- idx--;
- }
- if (l && idx == 0)
- {
- if (!FcNameUnparseValue (buf, &l->value, '\0'))
- return FcFalse;
- }
- else goto notfound;
- }
- else if (l)
- {
- FcNameUnparseValueList (buf, l, '\0');
- }
- else
- {
- notfound:
- if (else_string)
- FcStrBufString (buf, else_string);
- }
- }
-
- return FcTrue;
-}
-
-static FcBool
-cescape (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- /* XXX escape \n etc? */
-
- while(*str)
- {
- switch (*str)
- {
- case '\\':
- case '"':
- FcStrBufChar (buf, '\\');
- break;
- }
- FcStrBufChar (buf, *str++);
- }
- return FcTrue;
-}
-
-static FcBool
-shescape (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- FcStrBufChar (buf, '\'');
- while(*str)
- {
- if (*str == '\'')
- FcStrBufString (buf, (const FcChar8 *) "'\\''");
- else
- FcStrBufChar (buf, *str);
- str++;
- }
- FcStrBufChar (buf, '\'');
- return FcTrue;
-}
-
-static FcBool
-xmlescape (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- /* XXX escape \n etc? */
-
- while(*str)
- {
- switch (*str)
- {
- case '&': FcStrBufString (buf, (const FcChar8 *) "&"); break;
- case '<': FcStrBufString (buf, (const FcChar8 *) "<"); break;
- case '>': FcStrBufString (buf, (const FcChar8 *) ">"); break;
- default: FcStrBufChar (buf, *str); break;
- }
- str++;
- }
- return FcTrue;
-}
-
-static FcBool
-delete_chars (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- /* XXX not UTF-8 aware */
-
- if (!expect_char (c, '(') ||
- !read_chars (c, ')') ||
- !expect_char (c, ')'))
- return FcFalse;
-
- while(*str)
- {
- FcChar8 *p;
-
- p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word);
- if (p)
- {
- FcStrBufData (buf, str, p - str);
- str = p + 1;
- }
- else
- {
- FcStrBufString (buf, str);
- break;
- }
-
- }
-
- return FcTrue;
-}
-
-static FcBool
-escape_chars (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- /* XXX not UTF-8 aware */
-
- if (!expect_char (c, '(') ||
- !read_chars (c, ')') ||
- !expect_char (c, ')'))
- return FcFalse;
-
- while(*str)
- {
- FcChar8 *p;
-
- p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word);
- if (p)
- {
- FcStrBufData (buf, str, p - str);
- FcStrBufChar (buf, c->word[0]);
- FcStrBufChar (buf, *p);
- str = p + 1;
- }
- else
- {
- FcStrBufString (buf, str);
- break;
- }
-
- }
-
- return FcTrue;
-}
-
-static FcBool
-translate_chars (FcFormatContext *c,
- const FcChar8 *str,
- FcStrBuf *buf)
-{
- char *from, *to, repeat;
- int from_len, to_len;
-
- /* XXX not UTF-8 aware */
-
- if (!expect_char (c, '(') ||
- !read_chars (c, ',') ||
- !expect_char (c, ','))
- return FcFalse;
-
- from = (char *) c->word;
- from_len = strlen (from);
- to = from + from_len + 1;
-
- /* hack: we temporarily divert c->word */
- c->word = (FcChar8 *) to;
- if (!read_chars (c, ')'))
- {
- c->word = (FcChar8 *) from;
- return FcFalse;
- }
- c->word = (FcChar8 *) from;
-
- to_len = strlen (to);
- repeat = to[to_len - 1];
-
- if (!expect_char (c, ')'))
- return FcFalse;
-
- while(*str)
- {
- FcChar8 *p;
-
- p = (FcChar8 *) strpbrk ((const char *) str, (const char *) from);
- if (p)
- {
- int i;
- FcStrBufData (buf, str, p - str);
- i = strchr (from, *p) - from;
- FcStrBufChar (buf, i < to_len ? to[i] : repeat);
- str = p + 1;
- }
- else
- {
- FcStrBufString (buf, str);
- break;
- }
-
- }
-
- return FcTrue;
-}
-
-static FcBool
-interpret_convert (FcFormatContext *c,
- FcStrBuf *buf,
- int start)
-{
- const FcChar8 *str;
- FcChar8 *new_str;
- FcStrBuf new_buf;
- FcChar8 buf_static[8192];
- FcBool ret;
-
- if (!expect_char (c, '|') ||
- !read_word (c))
- return FcFalse;
-
- /* prepare the buffer */
- FcStrBufChar (buf, '\0');
- if (buf->failed)
- return FcFalse;
- str = buf->buf + start;
- buf->len = start;
-
- /* try simple converters first */
- if (0) { }
-#define CONVERTER(name, func) \
- else if (0 == strcmp ((const char *) c->word, name))\
- do { new_str = func (str); ret = FcTrue; } while (0)
- CONVERTER ("downcase", FcStrDowncase);
- CONVERTER ("basename", FcStrBasename);
- CONVERTER ("dirname", FcStrDirname);
-#undef CONVERTER
- else
- ret = FcFalse;
-
- if (ret)
- {
- if (new_str)
- {
- FcStrBufString (buf, new_str);
- free (new_str);
- return FcTrue;
- }
- else
- return FcFalse;
- }
-
- FcStrBufInit (&new_buf, buf_static, sizeof (buf_static));
-
- /* now try our custom converters */
- if (0) { }
-#define CONVERTER(name, func) \
- else if (0 == strcmp ((const char *) c->word, name))\
- ret = func (c, str, &new_buf)
- CONVERTER ("cescape", cescape);
- CONVERTER ("shescape", shescape);
- CONVERTER ("xmlescape", xmlescape);
- CONVERTER ("delete", delete_chars);
- CONVERTER ("escape", escape_chars);
- CONVERTER ("translate", translate_chars);
-#undef CONVERTER
- else
- ret = FcFalse;
-
- if (ret)
- {
- FcStrBufChar (&new_buf, '\0');
- FcStrBufString (buf, new_buf.buf);
- }
- else
- message ("unknown converter \"%s\"",
- c->word);
-
- FcStrBufDestroy (&new_buf);
-
- return ret;
-}
-
-static FcBool
-maybe_interpret_converts (FcFormatContext *c,
- FcStrBuf *buf,
- int start)
-{
- while (*c->format == '|')
- if (!interpret_convert (c, buf, start))
- return FcFalse;
-
- return FcTrue;
-}
-
-static FcBool
-align_to_width (FcStrBuf *buf,
- int start,
- int width)
-{
- int len;
-
- if (buf->failed)
- return FcFalse;
-
- len = buf->len - start;
- if (len < -width)
- {
- /* left align */
- while (len++ < -width)
- FcStrBufChar (buf, ' ');
- }
- else if (len < width)
- {
- int old_len;
- old_len = len;
- /* right align */
- while (len++ < width)
- FcStrBufChar (buf, ' ');
- if (buf->failed)
- return FcFalse;
- len = old_len;
- memmove (buf->buf + buf->len - len,
- buf->buf + buf->len - width,
- len);
- memset (buf->buf + buf->len - width,
- ' ',
- width - len);
- }
-
- return !buf->failed;
-}
-static FcBool
-interpret_percent (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf)
-{
- int width, start;
- FcBool ret;
-
- if (!expect_char (c, '%'))
- return FcFalse;
-
- if (consume_char (c, '%')) /* "%%" */
- {
- FcStrBufChar (buf, '%');
- return FcTrue;
- }
-
- /* parse an optional width specifier */
- width = strtol ((const char *) c->format, (char **) &c->format, 10);
-
- if (!expect_char (c, '{'))
- return FcFalse;
-
- start = buf->len;
-
- switch (*c->format) {
- case '=': ret = interpret_builtin (c, pat, buf); break;
- case '{': ret = interpret_subexpr (c, pat, buf); break;
- case '+': ret = interpret_filter_in (c, pat, buf); break;
- case '-': ret = interpret_filter_out (c, pat, buf); break;
- case '?': ret = interpret_cond (c, pat, buf); break;
- case '#': ret = interpret_count (c, pat, buf); break;
- case '[': ret = interpret_enumerate (c, pat, buf); break;
- default: ret = interpret_simple (c, pat, buf); break;
- }
-
- return ret &&
- maybe_interpret_converts (c, buf, start) &&
- align_to_width (buf, start, width) &&
- expect_char (c, '}');
-}
-
-static FcBool
-interpret_expr (FcFormatContext *c,
- FcPattern *pat,
- FcStrBuf *buf,
- FcChar8 term)
-{
- while (*c->format && *c->format != term)
- {
- switch (*c->format)
- {
- case '\\':
- c->format++; /* skip over '\\' */
- if (*c->format)
- FcStrBufChar (buf, escaped_char (*c->format++));
- continue;
- case '%':
- if (!interpret_percent (c, pat, buf))
- return FcFalse;
- continue;
- }
- FcStrBufChar (buf, *c->format++);
- }
- return FcTrue;
-}
-
-static FcBool
-FcPatternFormatToBuf (FcPattern *pat,
- const FcChar8 *format,
- FcStrBuf *buf)
-{
- FcFormatContext c;
- FcChar8 word_static[1024];
- FcBool ret;
-
- if (!FcFormatContextInit (&c, format, word_static, sizeof (word_static)))
- return FcFalse;
-
- ret = interpret_expr (&c, pat, buf, '\0');
-
- FcFormatContextDone (&c);
-
- return ret;
-}
-
-FcChar8 *
-FcPatternFormat (FcPattern *pat,
- const FcChar8 *format)
-{
- FcStrBuf buf;
- FcChar8 buf_static[8192 - 1024];
- FcBool ret;
-
- FcStrBufInit (&buf, buf_static, sizeof (buf_static));
-
- ret = FcPatternFormatToBuf (pat, format, &buf);
-
- if (ret)
- return FcStrBufDone (&buf);
- else
- {
- FcStrBufDestroy (&buf);
- return NULL;
- }
-}
-
-#define __fcformat__
-#include "fcaliastail.h"
-#undef __fcformat__
+/* + * Copyright © 2008,2009 Red Hat, Inc. + * + * Red Hat Author(s): Behdad Esfahbod + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <stdlib.h> +#include <string.h> +#include <stdarg.h> + + +/* The language is documented in doc/fcformat.fncs + * These are the features implemented: + * + * simple %{elt} + * width %width{elt} + * index %{elt[idx]} + * name= %{elt=} + * :name= %{:elt} + * default %{elt:-word} + * count %{#elt} + * subexpr %{{expr}} + * filter-out %{-elt1,elt2,elt3{expr}} + * filter-in %{+elt1,elt2,elt3{expr}} + * conditional %{?elt1,elt2,!elt3{}{}} + * enumerate %{[]elt1,elt2{expr}} + * langset langset enumeration using the same syntax + * builtin %{=blt} + * convert %{elt|conv1|conv2|conv3} + * + * converters: + * basename FcStrBasename + * dirname FcStrDirname + * downcase FcStrDowncase + * shescape + * cescape + * xmlescape + * delete delete chars + * escape escape chars + * translate translate chars + * + * builtins: + * unparse FcNameUnparse + * fcmatch fc-match default + * fclist fc-list default + * fccat fc-cat default + * pkgkit PackageKit package tag format + * + * + * Some ideas for future syntax extensions: + * + * - verbose builtin that is like FcPatternPrint + * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}' + * - allow indexing in +, -, ? filtering? + * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation) + */ + + +#define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\"" +#define FCMATCH_FORMAT "%{file:-<unknown filename>|basename}: \"%{family[0]:-<unknown family>}\" \"%{style[0]:-<unknown style>}\"" +#define FCLIST_FORMAT "%{?file{%{file}: }}%{-file{%{=unparse}}}" +#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}" + + +static void +message (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + fprintf (stderr, "Fontconfig: Pattern format error: "); + vfprintf (stderr, fmt, args); + fprintf (stderr, ".\n"); + va_end (args); +} + + +typedef struct _FcFormatContext +{ + const FcChar8 *format_orig; + const FcChar8 *format; + int format_len; + FcChar8 *word; + FcBool word_allocated; +} FcFormatContext; + +static FcBool +FcFormatContextInit (FcFormatContext *c, + const FcChar8 *format, + FcChar8 *scratch, + int scratch_len) +{ + c->format_orig = c->format = format; + c->format_len = strlen ((const char *) format); + + if (c->format_len < scratch_len) + { + c->word = scratch; + c->word_allocated = FcFalse; + } + else + { + c->word = malloc (c->format_len + 1); + c->word_allocated = FcTrue; + } + + return c->word != NULL; +} + +static void +FcFormatContextDone (FcFormatContext *c) +{ + if (c && c->word_allocated) + { + free (c->word); + } +} + +static FcBool +consume_char (FcFormatContext *c, + FcChar8 term) +{ + if (*c->format != term) + return FcFalse; + + c->format++; + return FcTrue; +} + +static FcBool +expect_char (FcFormatContext *c, + FcChar8 term) +{ + FcBool res = consume_char (c, term); + if (!res) + { + if (c->format == c->format_orig + c->format_len) + message ("format ended while expecting '%c'", + term); + else + message ("expected '%c' at %d", + term, c->format - c->format_orig + 1); + } + return res; +} + +static FcBool +FcCharIsPunct (const FcChar8 c) +{ + if (c < '0') + return FcTrue; + if (c <= '9') + return FcFalse; + if (c < 'A') + return FcTrue; + if (c <= 'Z') + return FcFalse; + if (c < 'a') + return FcTrue; + if (c <= 'z') + return FcFalse; + if (c <= '~') + return FcTrue; + return FcFalse; +} + +static char escaped_char(const char ch) +{ + switch (ch) { + case 'a': return '\a'; + case 'b': return '\b'; + case 'f': return '\f'; + case 'n': return '\n'; + case 'r': return '\r'; + case 't': return '\t'; + case 'v': return '\v'; + default: return ch; + } +} + +static FcBool +read_word (FcFormatContext *c) +{ + FcChar8 *p; + + p = c->word; + + while (*c->format) + { + if (*c->format == '\\') + { + c->format++; + if (*c->format) + *p++ = escaped_char (*c->format++); + continue; + } + else if (FcCharIsPunct (*c->format)) + break; + + *p++ = *c->format++; + } + *p = '\0'; + + if (p == c->word) + { + message ("expected identifier at %d", + c->format - c->format_orig + 1); + return FcFalse; + } + + return FcTrue; +} + +static FcBool +read_chars (FcFormatContext *c, + FcChar8 term) +{ + FcChar8 *p; + + p = c->word; + + while (*c->format && *c->format != '}' && *c->format != term) + { + if (*c->format == '\\') + { + c->format++; + if (*c->format) + *p++ = escaped_char (*c->format++); + continue; + } + + *p++ = *c->format++; + } + *p = '\0'; + + if (p == c->word) + { + message ("expected character data at %d", + c->format - c->format_orig + 1); + return FcFalse; + } + + return FcTrue; +} + +static FcBool +FcPatternFormatToBuf (FcPattern *pat, + const FcChar8 *format, + FcStrBuf *buf); + +static FcBool +interpret_builtin (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcChar8 *new_str; + FcBool ret; + + if (!expect_char (c, '=') || + !read_word (c)) + return FcFalse; + + /* try simple builtins first */ + if (0) { } +#define BUILTIN(name, func) \ + else if (0 == strcmp ((const char *) c->word, name))\ + do { new_str = func (pat); ret = FcTrue; } while (0) + BUILTIN ("unparse", FcNameUnparse); + /* BUILTIN ("verbose", FcPatternPrint); XXX */ +#undef BUILTIN + else + ret = FcFalse; + + if (ret) + { + if (new_str) + { + FcStrBufString (buf, new_str); + free (new_str); + return FcTrue; + } + else + return FcFalse; + } + + /* now try our custom formats */ + if (0) { } +#define BUILTIN(name, format) \ + else if (0 == strcmp ((const char *) c->word, name))\ + ret = FcPatternFormatToBuf (pat, (const FcChar8 *) format, buf) + BUILTIN ("fccat", FCCAT_FORMAT); + BUILTIN ("fcmatch", FCMATCH_FORMAT); + BUILTIN ("fclist", FCLIST_FORMAT); + BUILTIN ("pkgkit", PKGKIT_FORMAT); +#undef BUILTIN + else + ret = FcFalse; + + if (!ret) + message ("unknown builtin \"%s\"", + c->word); + + return ret; +} + +static FcBool +interpret_expr (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf, + FcChar8 term); + +static FcBool +interpret_subexpr (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + return expect_char (c, '{') && + interpret_expr (c, pat, buf, '}') && + expect_char (c, '}'); +} + +static FcBool +maybe_interpret_subexpr (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + return (*c->format == '{') ? + interpret_subexpr (c, pat, buf) : + FcTrue; +} + +static FcBool +skip_subexpr (FcFormatContext *c); + +static FcBool +skip_percent (FcFormatContext *c) +{ + int width; + + if (!expect_char (c, '%')) + return FcFalse; + + /* skip an optional width specifier */ + width = strtol ((const char *) c->format, (char **) &c->format, 10); + + if (!expect_char (c, '{')) + return FcFalse; + + while(*c->format && *c->format != '}') + { + switch (*c->format) + { + case '\\': + c->format++; /* skip over '\\' */ + if (*c->format) + c->format++; + continue; + case '{': + if (!skip_subexpr (c)) + return FcFalse; + continue; + } + c->format++; + } + + return expect_char (c, '}'); +} + +static FcBool +skip_expr (FcFormatContext *c) +{ + while(*c->format && *c->format != '}') + { + switch (*c->format) + { + case '\\': + c->format++; /* skip over '\\' */ + if (*c->format) + c->format++; + continue; + case '%': + if (!skip_percent (c)) + return FcFalse; + continue; + } + c->format++; + } + + return FcTrue; +} + +static FcBool +skip_subexpr (FcFormatContext *c) +{ + return expect_char (c, '{') && + skip_expr (c) && + expect_char (c, '}'); +} + +static FcBool +maybe_skip_subexpr (FcFormatContext *c) +{ + return (*c->format == '{') ? + skip_subexpr (c) : + FcTrue; +} + +static FcBool +interpret_filter_in (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcObjectSet *os; + FcPattern *subpat; + + if (!expect_char (c, '+')) + return FcFalse; + + os = FcObjectSetCreate (); + if (!os) + return FcFalse; + + do + { + /* XXX binding */ + if (!read_word (c) || + !FcObjectSetAdd (os, (const char *) c->word)) + { + FcObjectSetDestroy (os); + return FcFalse; + } + } + while (consume_char (c, ',')); + + subpat = FcPatternFilter (pat, os); + FcObjectSetDestroy (os); + + if (!subpat || + !interpret_subexpr (c, subpat, buf)) + return FcFalse; + + FcPatternDestroy (subpat); + return FcTrue; +} + +static FcBool +interpret_filter_out (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcPattern *subpat; + + if (!expect_char (c, '-')) + return FcFalse; + + subpat = FcPatternDuplicate (pat); + if (!subpat) + return FcFalse; + + do + { + if (!read_word (c)) + { + FcPatternDestroy (subpat); + return FcFalse; + } + + FcPatternDel (subpat, (const char *) c->word); + } + while (consume_char (c, ',')); + + if (!interpret_subexpr (c, subpat, buf)) + return FcFalse; + + FcPatternDestroy (subpat); + return FcTrue; +} + +static FcBool +interpret_cond (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcBool pass; + + if (!expect_char (c, '?')) + return FcFalse; + + pass = FcTrue; + + do + { + FcBool negate; + FcValue v; + + negate = consume_char (c, '!'); + + if (!read_word (c)) + return FcFalse; + + pass = pass && + (negate ^ + (FcResultMatch == + FcPatternGet (pat, (const char *) c->word, 0, &v))); + } + while (consume_char (c, ',')); + + if (pass) + { + if (!interpret_subexpr (c, pat, buf) || + !maybe_skip_subexpr (c)) + return FcFalse; + } + else + { + if (!skip_subexpr (c) || + !maybe_interpret_subexpr (c, pat, buf)) + return FcFalse; + } + + return FcTrue; +} + +static FcBool +interpret_count (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + int count; + FcPatternElt *e; + FcChar8 buf_static[64]; + + if (!expect_char (c, '#')) + return FcFalse; + + if (!read_word (c)) + return FcFalse; + + count = 0; + e = FcPatternObjectFindElt (pat, + FcObjectFromName ((const char *) c->word)); + if (e) + { + FcValueListPtr l; + count++; + for (l = FcPatternEltValues(e); + l->next; + l = l->next) + count++; + } + + snprintf ((char *) buf_static, sizeof (buf_static), "%d", count); + FcStrBufString (buf, buf_static); + + return FcTrue; +} + +static FcBool +interpret_enumerate (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcObjectSet *os; + FcPattern *subpat; + const FcChar8 *format_save; + int idx; + FcBool ret, done; + FcStrList *lang_strs; + + if (!expect_char (c, '[') || + !expect_char (c, ']')) + return FcFalse; + + os = FcObjectSetCreate (); + if (!os) + return FcFalse; + + ret = FcTrue; + + do + { + if (!read_word (c) || + !FcObjectSetAdd (os, (const char *) c->word)) + { + FcObjectSetDestroy (os); + return FcFalse; + } + } + while (consume_char (c, ',')); + + /* If we have one element and it's of type FcLangSet, we want + * to enumerate the languages in it. */ + lang_strs = NULL; + if (os->nobject == 1) + { + FcLangSet *langset; + if (FcResultMatch == + FcPatternGetLangSet (pat, os->objects[0], 0, &langset)) + { + FcStrSet *ss; + if (!(ss = FcLangSetGetLangs (langset)) || + !(lang_strs = FcStrListCreate (ss))) + goto bail0; + } + } + + subpat = FcPatternDuplicate (pat); + if (!subpat) + goto bail0; + + format_save = c->format; + idx = 0; + do + { + int i; + + done = FcTrue; + + if (lang_strs) + { + FcChar8 *lang; + + FcPatternDel (subpat, os->objects[0]); + if ((lang = FcStrListNext (lang_strs))) + { + /* XXX binding? */ + FcPatternAddString (subpat, os->objects[0], lang); + done = FcFalse; + } + } + else + { + for (i = 0; i < os->nobject; i++) + { + FcValue v; + + /* XXX this can be optimized by accessing valuelist linked lists + * directly and remembering where we were. Most (all) value lists + * in normal uses are pretty short though (language tags are + * stored as a LangSet, not separate values.). */ + FcPatternDel (subpat, os->objects[i]); + if (FcResultMatch == + FcPatternGet (pat, os->objects[i], idx, &v)) + { + /* XXX binding */ + FcPatternAdd (subpat, os->objects[i], v, FcFalse); + done = FcFalse; + } + } + } + + if (!done) + { + c->format = format_save; + ret = interpret_subexpr (c, subpat, buf); + if (!ret) + goto bail; + } + + idx++; + } while (!done); + + if (c->format == format_save) + skip_subexpr (c); + +bail: + FcPatternDestroy (subpat); +bail0: + if (lang_strs) + FcStrListDone (lang_strs); + FcObjectSetDestroy (os); + + return ret; +} + +static FcBool +interpret_simple (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcPatternElt *e; + FcBool add_colon = FcFalse; + FcBool add_elt_name = FcFalse; + int idx; + FcChar8 *else_string; + + if (consume_char (c, ':')) + add_colon = FcTrue; + + if (!read_word (c)) + return FcFalse; + + idx = -1; + if (consume_char (c, '[')) + { + idx = strtol ((const char *) c->format, (char **) &c->format, 10); + if (idx < 0) + { + message ("expected non-negative number at %d", + c->format-1 - c->format_orig + 1); + return FcFalse; + } + if (!expect_char (c, ']')) + return FcFalse; + } + + if (consume_char (c, '=')) + add_elt_name = FcTrue; + + /* modifiers */ + else_string = NULL; + if (consume_char (c, ':')) + { + FcChar8 *orig; + /* divert the c->word for now */ + orig = c->word; + c->word = c->word + strlen ((const char *) c->word) + 1; + /* for now we just support 'default value' */ + if (!expect_char (c, '-') || + !read_chars (c, '|')) + { + c->word = orig; + return FcFalse; + } + else_string = c->word; + c->word = orig; + } + + e = FcPatternObjectFindElt (pat, + FcObjectFromName ((const char *) c->word)); + if (e || else_string) + { + FcValueListPtr l = NULL; + + if (add_colon) + FcStrBufChar (buf, ':'); + if (add_elt_name) + { + FcStrBufString (buf, c->word); + FcStrBufChar (buf, '='); + } + + if (e) + l = FcPatternEltValues(e); + + if (idx != -1) + { + while (l && idx > 0) + { + l = FcValueListNext(l); + idx--; + } + if (l && idx == 0) + { + if (!FcNameUnparseValue (buf, &l->value, '\0')) + return FcFalse; + } + else goto notfound; + } + else if (l) + { + FcNameUnparseValueList (buf, l, '\0'); + } + else + { + notfound: + if (else_string) + FcStrBufString (buf, else_string); + } + } + + return FcTrue; +} + +static FcBool +cescape (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + /* XXX escape \n etc? */ + + while(*str) + { + switch (*str) + { + case '\\': + case '"': + FcStrBufChar (buf, '\\'); + break; + } + FcStrBufChar (buf, *str++); + } + return FcTrue; +} + +static FcBool +shescape (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + FcStrBufChar (buf, '\''); + while(*str) + { + if (*str == '\'') + FcStrBufString (buf, (const FcChar8 *) "'\\''"); + else + FcStrBufChar (buf, *str); + str++; + } + FcStrBufChar (buf, '\''); + return FcTrue; +} + +static FcBool +xmlescape (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + /* XXX escape \n etc? */ + + while(*str) + { + switch (*str) + { + case '&': FcStrBufString (buf, (const FcChar8 *) "&"); break; + case '<': FcStrBufString (buf, (const FcChar8 *) "<"); break; + case '>': FcStrBufString (buf, (const FcChar8 *) ">"); break; + default: FcStrBufChar (buf, *str); break; + } + str++; + } + return FcTrue; +} + +static FcBool +delete_chars (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + /* XXX not UTF-8 aware */ + + if (!expect_char (c, '(') || + !read_chars (c, ')') || + !expect_char (c, ')')) + return FcFalse; + + while(*str) + { + FcChar8 *p; + + p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word); + if (p) + { + FcStrBufData (buf, str, p - str); + str = p + 1; + } + else + { + FcStrBufString (buf, str); + break; + } + + } + + return FcTrue; +} + +static FcBool +escape_chars (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + /* XXX not UTF-8 aware */ + + if (!expect_char (c, '(') || + !read_chars (c, ')') || + !expect_char (c, ')')) + return FcFalse; + + while(*str) + { + FcChar8 *p; + + p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word); + if (p) + { + FcStrBufData (buf, str, p - str); + FcStrBufChar (buf, c->word[0]); + FcStrBufChar (buf, *p); + str = p + 1; + } + else + { + FcStrBufString (buf, str); + break; + } + + } + + return FcTrue; +} + +static FcBool +translate_chars (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + char *from, *to, repeat; + int from_len, to_len; + + /* XXX not UTF-8 aware */ + + if (!expect_char (c, '(') || + !read_chars (c, ',') || + !expect_char (c, ',')) + return FcFalse; + + from = (char *) c->word; + from_len = strlen (from); + to = from + from_len + 1; + + /* hack: we temporarily divert c->word */ + c->word = (FcChar8 *) to; + if (!read_chars (c, ')')) + { + c->word = (FcChar8 *) from; + return FcFalse; + } + c->word = (FcChar8 *) from; + + to_len = strlen (to); + repeat = to[to_len - 1]; + + if (!expect_char (c, ')')) + return FcFalse; + + while(*str) + { + FcChar8 *p; + + p = (FcChar8 *) strpbrk ((const char *) str, (const char *) from); + if (p) + { + int i; + FcStrBufData (buf, str, p - str); + i = strchr (from, *p) - from; + FcStrBufChar (buf, i < to_len ? to[i] : repeat); + str = p + 1; + } + else + { + FcStrBufString (buf, str); + break; + } + + } + + return FcTrue; +} + +static FcBool +interpret_convert (FcFormatContext *c, + FcStrBuf *buf, + int start) +{ + const FcChar8 *str; + FcChar8 *new_str; + FcStrBuf new_buf; + FcChar8 buf_static[8192]; + FcBool ret; + + if (!expect_char (c, '|') || + !read_word (c)) + return FcFalse; + + /* prepare the buffer */ + FcStrBufChar (buf, '\0'); + if (buf->failed) + return FcFalse; + str = buf->buf + start; + buf->len = start; + + /* try simple converters first */ + if (0) { } +#define CONVERTER(name, func) \ + else if (0 == strcmp ((const char *) c->word, name))\ + do { new_str = func (str); ret = FcTrue; } while (0) + CONVERTER ("downcase", FcStrDowncase); + CONVERTER ("basename", FcStrBasename); + CONVERTER ("dirname", FcStrDirname); +#undef CONVERTER + else + ret = FcFalse; + + if (ret) + { + if (new_str) + { + FcStrBufString (buf, new_str); + free (new_str); + return FcTrue; + } + else + return FcFalse; + } + + FcStrBufInit (&new_buf, buf_static, sizeof (buf_static)); + + /* now try our custom converters */ + if (0) { } +#define CONVERTER(name, func) \ + else if (0 == strcmp ((const char *) c->word, name))\ + ret = func (c, str, &new_buf) + CONVERTER ("cescape", cescape); + CONVERTER ("shescape", shescape); + CONVERTER ("xmlescape", xmlescape); + CONVERTER ("delete", delete_chars); + CONVERTER ("escape", escape_chars); + CONVERTER ("translate", translate_chars); +#undef CONVERTER + else + ret = FcFalse; + + if (ret) + { + FcStrBufChar (&new_buf, '\0'); + FcStrBufString (buf, new_buf.buf); + } + else + message ("unknown converter \"%s\"", + c->word); + + FcStrBufDestroy (&new_buf); + + return ret; +} + +static FcBool +maybe_interpret_converts (FcFormatContext *c, + FcStrBuf *buf, + int start) +{ + while (*c->format == '|') + if (!interpret_convert (c, buf, start)) + return FcFalse; + + return FcTrue; +} + +static FcBool +align_to_width (FcStrBuf *buf, + int start, + int width) +{ + int len; + + if (buf->failed) + return FcFalse; + + len = buf->len - start; + if (len < -width) + { + /* left align */ + while (len++ < -width) + FcStrBufChar (buf, ' '); + } + else if (len < width) + { + int old_len; + old_len = len; + /* right align */ + while (len++ < width) + FcStrBufChar (buf, ' '); + if (buf->failed) + return FcFalse; + len = old_len; + memmove (buf->buf + buf->len - len, + buf->buf + buf->len - width, + len); + memset (buf->buf + buf->len - width, + ' ', + width - len); + } + + return !buf->failed; +} +static FcBool +interpret_percent (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + int width, start; + FcBool ret; + + if (!expect_char (c, '%')) + return FcFalse; + + if (consume_char (c, '%')) /* "%%" */ + { + FcStrBufChar (buf, '%'); + return FcTrue; + } + + /* parse an optional width specifier */ + width = strtol ((const char *) c->format, (char **) &c->format, 10); + + if (!expect_char (c, '{')) + return FcFalse; + + start = buf->len; + + switch (*c->format) { + case '=': ret = interpret_builtin (c, pat, buf); break; + case '{': ret = interpret_subexpr (c, pat, buf); break; + case '+': ret = interpret_filter_in (c, pat, buf); break; + case '-': ret = interpret_filter_out (c, pat, buf); break; + case '?': ret = interpret_cond (c, pat, buf); break; + case '#': ret = interpret_count (c, pat, buf); break; + case '[': ret = interpret_enumerate (c, pat, buf); break; + default: ret = interpret_simple (c, pat, buf); break; + } + + return ret && + maybe_interpret_converts (c, buf, start) && + align_to_width (buf, start, width) && + expect_char (c, '}'); +} + +static FcBool +interpret_expr (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf, + FcChar8 term) +{ + while (*c->format && *c->format != term) + { + switch (*c->format) + { + case '\\': + c->format++; /* skip over '\\' */ + if (*c->format) + FcStrBufChar (buf, escaped_char (*c->format++)); + continue; + case '%': + if (!interpret_percent (c, pat, buf)) + return FcFalse; + continue; + } + FcStrBufChar (buf, *c->format++); + } + return FcTrue; +} + +static FcBool +FcPatternFormatToBuf (FcPattern *pat, + const FcChar8 *format, + FcStrBuf *buf) +{ + FcFormatContext c; + FcChar8 word_static[1024]; + FcBool ret; + + if (!FcFormatContextInit (&c, format, word_static, sizeof (word_static))) + return FcFalse; + + ret = interpret_expr (&c, pat, buf, '\0'); + + FcFormatContextDone (&c); + + return ret; +} + +FcChar8 * +FcPatternFormat (FcPattern *pat, + const FcChar8 *format) +{ + FcStrBuf buf; + FcChar8 buf_static[8192 - 1024]; + FcBool ret; + + FcStrBufInit (&buf, buf_static, sizeof (buf_static)); + + ret = FcPatternFormatToBuf (pat, format, &buf); + + if (ret) + return FcStrBufDone (&buf); + else + { + FcStrBufDestroy (&buf); + return NULL; + } +} + +#define __fcformat__ +#include "fcaliastail.h" +#undef __fcformat__ diff --git a/fontconfig/src/fcfreetype.c b/fontconfig/src/fcfreetype.c index 78a37b0a9..d37af2d0e 100644 --- a/fontconfig/src/fcfreetype.c +++ b/fontconfig/src/fcfreetype.c @@ -1,3005 +1,3005 @@ -/*
- * fontconfig/src/fcfreetype.c
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-/*
- Copyright © 2002-2003 by Juliusz Chroboczek
-
- Permission is hereby granted, free of charge, to any person obtaining a copy
- of this software and associated documentation files (the "Software"), to deal
- in the Software without restriction, including without limitation the rights
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
- copies of the Software, and to permit persons to whom the Software is
- furnished to do so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
- THE SOFTWARE.
-*/
-
-#include "fcint.h"
-#include "fcftint.h"
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_TRUETYPE_TABLES_H
-#include FT_SFNT_NAMES_H
-#include FT_TRUETYPE_IDS_H
-#include FT_TYPE1_TABLES_H
-#if HAVE_FT_GET_X11_FONT_FORMAT
-#include FT_XFREE86_H
-#endif
-#if HAVE_FT_GET_BDF_PROPERTY
-#include FT_BDF_H
-#include FT_MODULE_H
-#endif
-
-#include "ftglue.h"
-
-#if HAVE_WARNING_CPP_DIRECTIVE
-#if !HAVE_FT_GET_BDF_PROPERTY
-#warning "No FT_Get_BDF_Property: Please install freetype 2.1.4 or later"
-#endif
-
-#if !HAVE_FT_GET_PS_FONT_INFO
-#warning "No FT_Get_PS_Font_Info: Please install freetype 2.1.1 or later"
-#endif
-#endif
-
-/*
- * Keep Han languages separated by eliminating languages
- * that the codePageRange bits says aren't supported
- */
-
-static const struct {
- char bit;
- const FcChar8 lang[6];
-} FcCodePageRange[] = {
- { 17, "ja" },
- { 18, "zh-cn" },
- { 19, "ko" },
- { 20, "zh-tw" },
-};
-
-#define NUM_CODE_PAGE_RANGE (int) (sizeof FcCodePageRange / sizeof FcCodePageRange[0])
-
-FcBool
-FcFreeTypeIsExclusiveLang (const FcChar8 *lang)
-{
- int i;
-
- for (i = 0; i < NUM_CODE_PAGE_RANGE; i++)
- {
- if (FcLangCompare (lang, FcCodePageRange[i].lang) == FcLangEqual)
- return FcTrue;
- }
- return FcFalse;
-}
-
-typedef struct {
- const FT_UShort platform_id;
- const FT_UShort encoding_id;
- const char fromcode[12];
-} FcFtEncoding;
-
-#define TT_ENCODING_DONT_CARE 0xffff
-#define FC_ENCODING_MAC_ROMAN "MACINTOSH"
-
-static const FcFtEncoding fcFtEncoding[] = {
- { TT_PLATFORM_APPLE_UNICODE, TT_ENCODING_DONT_CARE, "UTF-16BE" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, "MACINTOSH" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_ID_JAPANESE, "SJIS" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_SYMBOL_CS, "UTF-16BE" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, "UTF-16BE" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, "SJIS-WIN" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_GB2312, "GB2312" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, "BIG-5" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, "Wansung" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, "Johab" },
- { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, "UTF-16BE" },
- { TT_PLATFORM_ISO, TT_ISO_ID_7BIT_ASCII, "ASCII" },
- { TT_PLATFORM_ISO, TT_ISO_ID_10646, "UTF-16BE" },
- { TT_PLATFORM_ISO, TT_ISO_ID_8859_1, "ISO-8859-1" },
-};
-
-#define NUM_FC_FT_ENCODING (int) (sizeof (fcFtEncoding) / sizeof (fcFtEncoding[0]))
-
-typedef struct {
- const FT_UShort platform_id;
- const FT_UShort language_id;
- const char lang[8];
-} FcFtLanguage;
-
-#define TT_LANGUAGE_DONT_CARE 0xffff
-
-static const FcFtLanguage fcFtLanguage[] = {
- { TT_PLATFORM_APPLE_UNICODE, TT_LANGUAGE_DONT_CARE, "" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ENGLISH, "en" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FRENCH, "fr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GERMAN, "de" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ITALIAN, "it" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DUTCH, "nl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWEDISH, "sv" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SPANISH, "es" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DANISH, "da" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PORTUGUESE, "pt" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NORWEGIAN, "no" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HEBREW, "he" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAPANESE, "ja" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARABIC, "ar" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FINNISH, "fi" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK, "el" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ICELANDIC, "is" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALTESE, "mt" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKISH, "tr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CROATIAN, "hr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_TRADITIONAL, "zh-tw" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_URDU, "ur" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HINDI, "hi" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_THAI, "th" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KOREAN, "ko" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LITHUANIAN, "lt" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_POLISH, "pl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HUNGARIAN, "hu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESTONIAN, "et" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LETTISH, "lv" },
-/* { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SAAMISK, ??? */
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FAEROESE, "fo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FARSI, "fa" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUSSIAN, "ru" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_SIMPLIFIED, "zh-cn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FLEMISH, "nl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH, "ga" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ALBANIAN, "sq" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ROMANIAN, "ro" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CZECH, "cs" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVAK, "sk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVENIAN, "sl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_YIDDISH, "yi" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SERBIAN, "sr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MACEDONIAN, "mk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BULGARIAN, "bg" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UKRAINIAN, "uk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BYELORUSSIAN, "be" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UZBEK, "uz" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KAZAKH, "kk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI, "az" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT, "az" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT, "ar" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARMENIAN, "hy" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GEORGIAN, "ka" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MOLDAVIAN, "mo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KIRGHIZ, "ky" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAJIKI, "tg" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKMEN, "tk" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN, "mo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT,"mo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT, "mo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PASHTO, "ps" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KURDISH, "ku" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KASHMIRI, "ks" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINDHI, "sd" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIBETAN, "bo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NEPALI, "ne" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SANSKRIT, "sa" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MARATHI, "mr" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BENGALI, "bn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ASSAMESE, "as" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUJARATI, "gu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PUNJABI, "pa" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ORIYA, "or" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAYALAM, "ml" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KANNADA, "kn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAMIL, "ta" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TELUGU, "te" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINHALESE, "si" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BURMESE, "my" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KHMER, "km" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LAO, "lo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_VIETNAMESE, "vi" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INDONESIAN, "id" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAGALOG, "tl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ROMAN_SCRIPT, "ms" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ARABIC_SCRIPT, "ms" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AMHARIC, "am" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIGRINYA, "ti" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALLA, "om" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SOMALI, "so" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWAHILI, "sw" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUANDA, "rw" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUNDI, "rn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHEWA, "ny" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAGASY, "mg" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESPERANTO, "eo" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_WELSH, "cy" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BASQUE, "eu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CATALAN, "ca" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LATIN, "la" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_QUECHUA, "qu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUARANI, "gn" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AYMARA, "ay" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TATAR, "tt" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UIGHUR, "ug" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DZONGKHA, "dz" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAVANESE, "jw" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SUNDANESE, "su" },
-
-#if 0 /* these seem to be errors that have been dropped */
-
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC },
-
-#endif
-
- /* The following codes are new as of 2000-03-10 */
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALICIAN, "gl" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AFRIKAANS, "af" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BRETON, "br" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INUKTITUT, "iu" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC, "gd" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MANX_GAELIC, "gv" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC, "ga" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TONGAN, "to" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK_POLYTONIC, "el" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREELANDIC, "ik" },
- { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT,"az" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SAUDI_ARABIA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_IRAQ, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_EGYPT, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LIBYA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_ALGERIA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_MOROCCO, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_TUNISIA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_OMAN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_YEMEN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SYRIA, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_JORDAN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LEBANON, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_KUWAIT, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_UAE, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_BAHRAIN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_QATAR, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BULGARIAN_BULGARIA, "bg" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CATALAN_SPAIN, "ca" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_TAIWAN, "zh-tw" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_PRC, "zh-cn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_HONG_KONG, "zh-hk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_SINGAPORE, "zh-sg" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_MACAU, "zh-mo" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CZECH_CZECH_REPUBLIC, "cs" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DANISH_DENMARK, "da" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_GERMANY, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_SWITZERLAND, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_AUSTRIA, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LUXEMBOURG, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LIECHTENSTEI, "de" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE, "el" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_STATES, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_KINGDOM, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_AUSTRALIA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CANADA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_NEW_ZEALAND, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_IRELAND, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SOUTH_AFRICA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_JAMAICA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CARIBBEAN, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_BELIZE, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_TRINIDAD, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_ZIMBABWE, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_PHILIPPINES, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT,"es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_MEXICO, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT,"es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_GUATEMALA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COSTA_RICA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PANAMA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC,"es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_VENEZUELA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COLOMBIA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PERU, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ARGENTINA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ECUADOR, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_CHILE, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_URUGUAY, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PARAGUAY, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_BOLIVIA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_EL_SALVADOR, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_HONDURAS, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_NICARAGUA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PUERTO_RICO, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FINNISH_FINLAND, "fi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_FRANCE, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_BELGIUM, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CANADA, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SWITZERLAND, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_LUXEMBOURG, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MONACO, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HEBREW_ISRAEL, "he" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HUNGARIAN_HUNGARY, "hu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ICELANDIC_ICELAND, "is" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_ITALY, "it" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_SWITZERLAND, "it" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_JAPANESE_JAPAN, "ja" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA,"ko" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_JOHAB_KOREA, "ko" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_NETHERLANDS, "nl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_BELGIUM, "nl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL, "no" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK, "nn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_POLISH_POLAND, "pl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_BRAZIL, "pt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_PORTUGAL, "pt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND,"rm" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ROMANIAN_ROMANIA, "ro" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MOLDAVIAN_MOLDAVIA, "mo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_RUSSIA, "ru" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_MOLDAVIA, "ru" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CROATIAN_CROATIA, "hr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_LATIN, "sr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC, "sr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVAK_SLOVAKIA, "sk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ALBANIAN_ALBANIA, "sq" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_SWEDEN, "sv" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_FINLAND, "sv" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_THAI_THAILAND, "th" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKISH_TURKEY, "tr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_PAKISTAN, "ur" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INDONESIAN_INDONESIA, "id" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UKRAINIAN_UKRAINE, "uk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BELARUSIAN_BELARUS, "be" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVENE_SLOVENIA, "sl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ESTONIAN_ESTONIA, "et" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATVIAN_LATVIA, "lv" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LITHUANIAN_LITHUANIA, "lt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA,"lt" },
-
-#ifdef TT_MS_LANGID_MAORI_NEW_ZELAND
- /* this seems to be an error that have been dropped */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MAORI_NEW_ZEALAND, "mi" },
-#endif
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FARSI_IRAN, "fa" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VIETNAMESE_VIET_NAM, "vi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARMENIAN_ARMENIA, "hy" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN, "az" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC, "az" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BASQUE_SPAIN, "eu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SORBIAN_GERMANY, "wen" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MACEDONIAN_MACEDONIA, "mk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SUTU_SOUTH_AFRICA, "st" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSONGA_SOUTH_AFRICA, "ts" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSWANA_SOUTH_AFRICA, "tn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VENDA_SOUTH_AFRICA, "ven" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_XHOSA_SOUTH_AFRICA, "xh" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ZULU_SOUTH_AFRICA, "zu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA, "af" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GEORGIAN_GEORGIA, "ka" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS, "fo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HINDI_INDIA, "hi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALTESE_MALTA, "mt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SAAMI_LAPONIA, "se" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM,"gd" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IRISH_GAELIC_IRELAND, "ga" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_MALAYSIA, "ms" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM, "ms" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KAZAK_KAZAKSTAN, "kk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWAHILI_KENYA, "sw" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN, "uz" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC, "uz" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TATAR_TATARSTAN, "tt" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_INDIA, "bn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_INDIA, "pa" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUJARATI_INDIA, "gu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ORIYA_INDIA, "or" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMIL_INDIA, "ta" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TELUGU_INDIA, "te" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANNADA_INDIA, "kn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAYALAM_INDIA, "ml" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ASSAMESE_INDIA, "as" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MARATHI_INDIA, "mr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SANSKRIT_INDIA, "sa" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KONKANI_INDIA, "kok" },
-
- /* new as of 2001-01-01 */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_GENERAL, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_GENERAL, "zh" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_GENERAL, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_WEST_INDIES, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_REUNION, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CONGO, "fr" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SENEGAL, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CAMEROON, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_COTE_D_IVOIRE, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MALI, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA,"bs" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_INDIA, "ur" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAJIK_TAJIKISTAN, "tg" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YIDDISH_GERMANY, "yi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN, "ky" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKMEN_TURKMENISTAN, "tk" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA, "mn" },
-
- /* the following seems to be inconsistent;
- here is the current "official" way: */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_BHUTAN, "bo" },
- /* and here is what is used by Passport SDK */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_CHINA, "bo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DZONGHKA_BHUTAN, "dz" },
- /* end of inconsistency */
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_WELSH_WALES, "cy" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KHMER_CAMBODIA, "km" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LAO_LAOS, "lo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BURMESE_MYANMAR, "my" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GALICIAN_SPAIN, "gl" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MANIPURI_INDIA, "mni" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINDHI_INDIA, "sd" },
- /* the following one is only encountered in Microsoft RTF specification */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_PAKISTAN, "ks" },
- /* the following one is not in the Passport list, looks like an omission */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_INDIA, "ks" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_NEPAL, "ne" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_INDIA, "ne" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRISIAN_NETHERLANDS, "fy" },
-
- /* new as of 2001-03-01 (from Office Xp) */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_HONG_KONG, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_INDIA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_MALAYSIA, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SINGAPORE, "en" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SYRIAC_SYRIA, "syr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINHALESE_SRI_LANKA, "si" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHEROKEE_UNITED_STATES, "chr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INUKTITUT_CANADA, "iu" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AMHARIC_ETHIOPIA, "am" },
-#if 0
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN },
-#endif
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PASHTO_AFGHANISTAN, "ps" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FILIPINO_PHILIPPINES, "phi" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DHIVEHI_MALDIVES, "div" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_OROMO_ETHIOPIA, "om" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ETHIOPIA, "ti" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ERYTHREA, "ti" },
-
- /* New additions from Windows Xp/Passport SDK 2001-11-10. */
-
- /* don't ask what this one means... It is commented out currently. */
-#if 0
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE2 },
-#endif
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_UNITED_STATES, "es" },
- /* The following two IDs blatantly violate MS specs by using a */
- /* sublanguage >,. */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_LATIN_AMERICA, "es" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_NORTH_AFRICA, "fr" },
-
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MOROCCO, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_HAITI, "fr" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_BANGLADESH, "bn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN, "ar" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN,"mn" },
-#if 0
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_EDO_NIGERIA },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FULFULDE_NIGERIA },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IBIBIO_NIGERIA },
-#endif
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAUSA_NIGERIA, "ha" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YORUBA_NIGERIA, "yo" },
- /* language codes from, to, are (still) unknown. */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IGBO_NIGERIA, "ibo" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANURI_NIGERIA, "kau" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUARANI_PARAGUAY, "gn" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAWAIIAN_UNITED_STATES, "haw" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATIN, "la" },
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SOMALI_SOMALIA, "so" },
-#if 0
- /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */
- /* not written (but OTOH the peculiar writing system is worth */
- /* studying). */
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YI_CHINA },
-#endif
- { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES,"pap" },
-};
-
-#define NUM_FC_FT_LANGUAGE (int) (sizeof (fcFtLanguage) / sizeof (fcFtLanguage[0]))
-
-typedef struct {
- FT_UShort language_id;
- char fromcode[12];
-} FcMacRomanFake;
-
-static const FcMacRomanFake fcMacRomanFake[] = {
- { TT_MS_LANGID_JAPANESE_JAPAN, "SJIS-WIN" },
- { TT_MS_LANGID_ENGLISH_UNITED_STATES, "ASCII" },
-};
-
-static FcChar8 *
-FcFontCapabilities(FT_Face face);
-
-#define NUM_FC_MAC_ROMAN_FAKE (int) (sizeof (fcMacRomanFake) / sizeof (fcMacRomanFake[0]))
-
-#if USE_ICONV
-#include <iconv.h>
-#endif
-
-/*
- * A shift-JIS will have many high bits turned on
- */
-static FcBool
-FcLooksLikeSJIS (FcChar8 *string, int len)
-{
- int nhigh = 0, nlow = 0;
-
- while (len-- > 0)
- {
- if (*string++ & 0x80) nhigh++;
- else nlow++;
- }
- /*
- * Heuristic -- if more than 1/3 of the bytes have the high-bit set,
- * this is likely to be SJIS and not ROMAN
- */
- if (nhigh * 2 > nlow)
- return FcTrue;
- return FcFalse;
-}
-
-static FcChar8 *
-FcSfntNameTranscode (FT_SfntName *sname)
-{
- int i;
- const char *fromcode;
-#if USE_ICONV
- iconv_t cd;
-#endif
- FcChar8 *utf8;
-
- for (i = 0; i < NUM_FC_FT_ENCODING; i++)
- if (fcFtEncoding[i].platform_id == sname->platform_id &&
- (fcFtEncoding[i].encoding_id == TT_ENCODING_DONT_CARE ||
- fcFtEncoding[i].encoding_id == sname->encoding_id))
- break;
- if (i == NUM_FC_FT_ENCODING)
- return 0;
- fromcode = fcFtEncoding[i].fromcode;
-
- /*
- * Many names encoded for TT_PLATFORM_MACINTOSH are broken
- * in various ways. Kludge around them.
- */
- if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN))
- {
- if (sname->language_id == TT_MAC_LANGID_ENGLISH &&
- FcLooksLikeSJIS (sname->string, sname->string_len))
- {
- fromcode = "SJIS";
- }
- else if (sname->language_id >= 0x100)
- {
- /*
- * "real" Mac language IDs are all less than 150.
- * Names using one of the MS language IDs are assumed
- * to use an associated encoding (Yes, this is a kludge)
- */
- int f;
-
- fromcode = NULL;
- for (f = 0; f < NUM_FC_MAC_ROMAN_FAKE; f++)
- if (fcMacRomanFake[f].language_id == sname->language_id)
- {
- fromcode = fcMacRomanFake[f].fromcode;
- break;
- }
- if (!fromcode)
- return 0;
- }
- }
- if (!strcmp (fromcode, "UCS-2BE") || !strcmp (fromcode, "UTF-16BE"))
- {
- FcChar8 *src = sname->string;
- int src_len = sname->string_len;
- int len;
- int wchar;
- int ilen, olen;
- FcChar8 *u8;
- FcChar32 ucs4;
-
- /*
- * Convert Utf16 to Utf8
- */
-
- if (!FcUtf16Len (src, FcEndianBig, src_len, &len, &wchar))
- return 0;
-
- /*
- * Allocate plenty of space. Freed below
- */
- utf8 = malloc (len * FC_UTF8_MAX_LEN + 1);
- if (!utf8)
- return 0;
-
- u8 = utf8;
-
- while ((ilen = FcUtf16ToUcs4 (src, FcEndianBig, &ucs4, src_len)) > 0)
- {
- src_len -= ilen;
- src += ilen;
- olen = FcUcs4ToUtf8 (ucs4, u8);
- u8 += olen;
- }
- *u8 = '\0';
- goto done;
- }
- if (!strcmp (fromcode, "ASCII") || !strcmp (fromcode, "ISO-8859-1"))
- {
- FcChar8 *src = sname->string;
- int src_len = sname->string_len;
- int olen;
- FcChar8 *u8;
- FcChar32 ucs4;
-
- /*
- * Convert Latin1 to Utf8. Freed below
- */
- utf8 = malloc (src_len * 2 + 1);
- if (!utf8)
- return 0;
-
- u8 = utf8;
- while (src_len > 0)
- {
- ucs4 = *src++;
- src_len--;
- olen = FcUcs4ToUtf8 (ucs4, u8);
- u8 += olen;
- }
- *u8 = '\0';
- goto done;
- }
- if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN))
- {
- FcChar8 *u8;
- const FcCharMap *map = FcFreeTypeGetPrivateMap (ft_encoding_apple_roman);
- FcChar8 *src = (FcChar8 *) sname->string;
- int src_len = sname->string_len;
-
- /*
- * Convert AppleRoman to Utf8
- */
- if (!map)
- return 0;
-
- utf8 = malloc (sname->string_len * 3 + 1);
- if (!utf8)
- return 0;
-
- u8 = utf8;
- while (src_len > 0)
- {
- FcChar32 ucs4 = FcFreeTypePrivateToUcs4 (*src++, map);
- int olen = FcUcs4ToUtf8 (ucs4, u8);
- src_len--;
- u8 += olen;
- }
- *u8 = '\0';
- goto done;
- }
-#if USE_ICONV
- cd = iconv_open ("UTF-8", fromcode);
- if (cd && cd != (iconv_t) (-1))
- {
- size_t in_bytes_left = sname->string_len;
- size_t out_bytes_left = sname->string_len * FC_UTF8_MAX_LEN;
- char *inbuf, *outbuf;
-
- utf8 = malloc (out_bytes_left + 1);
- if (!utf8)
- {
- iconv_close (cd);
- return 0;
- }
-
- outbuf = (char *) utf8;
- inbuf = (char *) sname->string;
-
- while (in_bytes_left)
- {
- size_t did = iconv (cd,
- &inbuf, &in_bytes_left,
- &outbuf, &out_bytes_left);
- if (did == (size_t) (-1))
- {
- iconv_close (cd);
- free (utf8);
- return 0;
- }
- }
- iconv_close (cd);
- *outbuf = '\0';
- goto done;
- }
-#endif
- return 0;
-done:
- if (FcStrCmpIgnoreBlanksAndCase (utf8, (FcChar8 *) "") == 0)
- {
- free (utf8);
- return 0;
- }
- return utf8;
-}
-
-static const FcChar8 *
-FcSfntNameLanguage (FT_SfntName *sname)
-{
- int i;
- FT_UShort platform_id = sname->platform_id;
- FT_UShort language_id = sname->language_id;
-
- /*
- * Many names encoded for TT_PLATFORM_MACINTOSH are broken
- * in various ways. Kludge around them.
- */
- if (platform_id == TT_PLATFORM_MACINTOSH &&
- sname->encoding_id == TT_MAC_ID_ROMAN &&
- FcLooksLikeSJIS (sname->string, sname->string_len))
- {
- language_id = TT_MAC_LANGID_JAPANESE;
- }
-
- for (i = 0; i < NUM_FC_FT_LANGUAGE; i++)
- if (fcFtLanguage[i].platform_id == platform_id &&
- (fcFtLanguage[i].language_id == TT_LANGUAGE_DONT_CARE ||
- fcFtLanguage[i].language_id == language_id))
- {
- if (fcFtLanguage[i].lang[0] == '\0')
- return NULL;
- else
- return (FcChar8 *) fcFtLanguage[i].lang;
- }
- return 0;
-}
-
-/* Order is significant. For example, some B&H fonts are hinted by
- URW++, and both strings appear in the notice. */
-
-static const char notice_foundry_data[] =
- "Bigelow\0b&h\0"
- "Adobe\0adobe\0"
- "Bitstream\0bitstream\0"
- "Monotype\0monotype\0"
- "Linotype\0linotype\0"
- "LINOTYPE-HELL\0linotype\0"
- "IBM\0ibm\0"
- "URW\0urw\0"
- "International Typeface Corporation\0itc\0"
- "Tiro Typeworks\0tiro\0"
- "XFree86\0xfree86\0"
- "Microsoft\0microsoft\0"
- "Omega\0omega\0"
- "Font21\0hwan\0"
- "HanYang System\0hanyang";
-
-struct _notice_foundry {
- /* these are the offsets into the
- * notice_foundry_data array.
- */
- unsigned char notice_offset;
- unsigned char foundry_offset;
-};
-
-static const struct _notice_foundry FcNoticeFoundries[] = {
- { 0, 8 },
- { 12, 18 },
- { 24, 34 },
- { 44, 53 },
- { 62, 71 },
- { 80, 94 },
- { 103, 107 },
- { 111, 115 },
- { 119, 154 },
- { 158, 173 },
- { 178, 186 },
- { 194, 204 },
- { 214, 220 },
- { 226, 233 },
- { 238, 253 }
-};
-
-#define NUM_NOTICE_FOUNDRIES (int) (sizeof (FcNoticeFoundries) / sizeof (FcNoticeFoundries[0]))
-
-static const FcChar8 *
-FcNoticeFoundry(const FT_String *notice)
-{
- int i;
-
- if (notice)
- for(i = 0; i < NUM_NOTICE_FOUNDRIES; i++)
- {
- const struct _notice_foundry *nf = &FcNoticeFoundries[i];
- const char *n = notice_foundry_data + nf->notice_offset;
- const char *f = notice_foundry_data + nf->foundry_offset;
-
- if (strstr ((const char *) notice, n))
- return (const FcChar8 *) f;
- }
- return 0;
-}
-
-static FcBool
-FcVendorMatch(const FT_Char vendor[4], const FT_Char *vendor_string)
-{
- /* vendor is not necessarily NUL-terminated. */
- int i, len;
-
- len = strlen((char *) vendor_string);
- if (memcmp(vendor, vendor_string, len) != 0)
- return FcFalse;
- for (i = len; i < 4; i++)
- if (vendor[i] != ' ' && vendor[i] != '\0')
- return FcFalse;
- return FcTrue;
-}
-
-/* This table is partly taken from ttmkfdir by Joerg Pommnitz. */
-
-/* It should not contain useless entries (such as UNKN) nor duplicate
- entries for padding both with spaces and NULs. */
-
-static const struct {
- const FT_Char vendor[5];
- const FcChar8 foundry[13];
-} FcVendorFoundries[] = {
- { "ADBE", "adobe"},
- { "AGFA", "agfa"},
- { "ALTS", "altsys"},
- { "APPL", "apple"},
- { "ARPH", "arphic"},
- { "ATEC", "alltype"},
- { "B&H", "b&h"},
- { "BITS", "bitstream"},
- { "CANO", "cannon"},
- { "DYNA", "dynalab"},
- { "EPSN", "epson"},
- { "FJ", "fujitsu"},
- { "IBM", "ibm"},
- { "ITC", "itc"},
- { "IMPR", "impress"},
- { "LARA", "larabiefonts"},
- { "LEAF", "interleaf"},
- { "LETR", "letraset"},
- { "LINO", "linotype"},
- { "MACR", "macromedia"},
- { "MONO", "monotype"},
- { "MS", "microsoft"},
- { "MT", "monotype"},
- { "NEC", "nec"},
- { "PARA", "paratype"},
- { "QMSI", "qms"},
- { "RICO", "ricoh"},
- { "URW", "urw"},
- { "Y&Y", "y&y"}
-};
-
-#define NUM_VENDOR_FOUNDRIES (int) (sizeof (FcVendorFoundries) / sizeof (FcVendorFoundries[0]))
-
-static const FcChar8 *
-FcVendorFoundry(const FT_Char vendor[4])
-{
- int i;
-
- if (vendor)
- for(i = 0; i < NUM_VENDOR_FOUNDRIES; i++)
- if (FcVendorMatch (vendor, FcVendorFoundries[i].vendor))
- return FcVendorFoundries[i].foundry;
- return 0;
-}
-
-typedef struct _FcStringConst {
- const FcChar8 *name;
- int value;
-} FcStringConst;
-
-static int
-FcStringIsConst (const FcChar8 *string,
- const FcStringConst *c,
- int nc)
-{
- int i;
-
- for (i = 0; i < nc; i++)
- if (FcStrCmpIgnoreBlanksAndCase (string, c[i].name) == 0)
- return c[i].value;
- return -1;
-}
-
-static int
-FcStringContainsConst (const FcChar8 *string,
- const FcStringConst *c,
- int nc)
-{
- int i;
-
- for (i = 0; i < nc; i++)
- {
- if (c[i].name[0] == '<')
- {
- if (FcStrContainsWord (string, c[i].name + 1))
- return c[i].value;
- }
- else
- {
- if (FcStrContainsIgnoreBlanksAndCase (string, c[i].name))
- return c[i].value;
- }
- }
- return -1;
-}
-
-typedef FcChar8 *FC8;
-
-static const FcStringConst weightConsts[] = {
- { (FC8) "thin", FC_WEIGHT_THIN },
- { (FC8) "extralight", FC_WEIGHT_EXTRALIGHT },
- { (FC8) "ultralight", FC_WEIGHT_ULTRALIGHT },
- { (FC8) "light", FC_WEIGHT_LIGHT },
- { (FC8) "book", FC_WEIGHT_BOOK },
- { (FC8) "regular", FC_WEIGHT_REGULAR },
- { (FC8) "normal", FC_WEIGHT_NORMAL },
- { (FC8) "medium", FC_WEIGHT_MEDIUM },
- { (FC8) "demibold", FC_WEIGHT_DEMIBOLD },
- { (FC8) "demi", FC_WEIGHT_DEMIBOLD },
- { (FC8) "semibold", FC_WEIGHT_SEMIBOLD },
- { (FC8) "extrabold", FC_WEIGHT_EXTRABOLD },
- { (FC8) "superbold", FC_WEIGHT_EXTRABOLD },
- { (FC8) "ultrabold", FC_WEIGHT_ULTRABOLD },
- { (FC8) "bold", FC_WEIGHT_BOLD },
- { (FC8) "ultrablack", FC_WEIGHT_ULTRABLACK },
- { (FC8) "superblack", FC_WEIGHT_EXTRABLACK },
- { (FC8) "extrablack", FC_WEIGHT_EXTRABLACK },
- { (FC8) "<ultra", FC_WEIGHT_ULTRABOLD }, /* only if a word */
- { (FC8) "black", FC_WEIGHT_BLACK },
- { (FC8) "heavy", FC_WEIGHT_HEAVY },
-};
-
-#define NUM_WEIGHT_CONSTS (int) (sizeof (weightConsts) / sizeof (weightConsts[0]))
-
-#define FcIsWeight(s) FcStringIsConst(s,weightConsts,NUM_WEIGHT_CONSTS)
-#define FcContainsWeight(s) FcStringContainsConst (s,weightConsts,NUM_WEIGHT_CONSTS)
-
-static const FcStringConst widthConsts[] = {
- { (FC8) "ultracondensed", FC_WIDTH_ULTRACONDENSED },
- { (FC8) "extracondensed", FC_WIDTH_EXTRACONDENSED },
- { (FC8) "semicondensed", FC_WIDTH_SEMICONDENSED },
- { (FC8) "condensed", FC_WIDTH_CONDENSED }, /* must be after *condensed */
- { (FC8) "normal", FC_WIDTH_NORMAL },
- { (FC8) "semiexpanded", FC_WIDTH_SEMIEXPANDED },
- { (FC8) "extraexpanded", FC_WIDTH_EXTRAEXPANDED },
- { (FC8) "ultraexpanded", FC_WIDTH_ULTRAEXPANDED },
- { (FC8) "expanded", FC_WIDTH_EXPANDED }, /* must be after *expanded */
- { (FC8) "extended", FC_WIDTH_EXPANDED },
-};
-
-#define NUM_WIDTH_CONSTS (int) (sizeof (widthConsts) / sizeof (widthConsts[0]))
-
-#define FcIsWidth(s) FcStringIsConst(s,widthConsts,NUM_WIDTH_CONSTS)
-#define FcContainsWidth(s) FcStringContainsConst (s,widthConsts,NUM_WIDTH_CONSTS)
-
-static const FcStringConst slantConsts[] = {
- { (FC8) "italic", FC_SLANT_ITALIC },
- { (FC8) "kursiv", FC_SLANT_ITALIC },
- { (FC8) "oblique", FC_SLANT_OBLIQUE },
-};
-
-#define NUM_SLANT_CONSTS (int) (sizeof (slantConsts) / sizeof (slantConsts[0]))
-
-#define FcIsSlant(s) FcStringIsConst(s,slantConsts,NUM_SLANT_CONSTS)
-#define FcContainsSlant(s) FcStringContainsConst (s,slantConsts,NUM_SLANT_CONSTS)
-
-static const FcStringConst decorativeConsts[] = {
- { (FC8) "shadow", FcTrue },
- { (FC8) "caps", FcTrue },
- { (FC8) "antiqua", FcTrue },
- { (FC8) "romansc", FcTrue },
- { (FC8) "embosed", FcTrue },
- { (FC8) "dunhill", FcTrue },
-};
-
-#define NUM_DECORATIVE_CONSTS (int) (sizeof (decorativeConsts) / sizeof (decorativeConsts[0]))
-
-#define FcIsDecorative(s) FcStringIsConst(s,decorativeConsts,NUM_DECORATIVE_CONSTS)
-#define FcContainsDecorative(s) FcStringContainsConst (s,decorativeConsts,NUM_DECORATIVE_CONSTS)
-
-static double
-FcGetPixelSize (FT_Face face, int i)
-{
-#if HAVE_FT_GET_BDF_PROPERTY
- if (face->num_fixed_sizes == 1)
- {
- BDF_PropertyRec prop;
- int rc;
-
- rc = FT_Get_BDF_Property (face, "PIXEL_SIZE", &prop);
- if (rc == 0 && prop.type == BDF_PROPERTY_TYPE_INTEGER)
- return (double) prop.u.integer;
- }
-#endif
-#if HAVE_FT_BITMAP_SIZE_Y_PPEM
- return (double) face->available_sizes[i].y_ppem / 64.0;
-#else
- return (double) face->available_sizes[i].height;
-#endif
-}
-
-static FcBool
-FcStringInPatternElement (FcPattern *pat, const char *elt, FcChar8 *string)
-{
- int e;
- FcChar8 *old;
- for (e = 0; FcPatternGetString (pat, elt, e, &old) == FcResultMatch; e++)
- if (!FcStrCmpIgnoreBlanksAndCase (old, string))
- {
- return FcTrue;
- }
- return FcFalse;
-}
-
-static const FT_UShort platform_order[] = {
- TT_PLATFORM_MICROSOFT,
- TT_PLATFORM_APPLE_UNICODE,
- TT_PLATFORM_MACINTOSH,
-};
-#define NUM_PLATFORM_ORDER (sizeof (platform_order) / sizeof (platform_order[0]))
-
-static const FT_UShort nameid_order[] = {
-#ifdef TT_NAME_ID_WWS_FAMILY
- TT_NAME_ID_WWS_FAMILY,
-#endif
- TT_NAME_ID_PREFERRED_FAMILY,
- TT_NAME_ID_FONT_FAMILY,
- TT_NAME_ID_MAC_FULL_NAME,
- TT_NAME_ID_FULL_NAME,
-#ifdef TT_NAME_ID_WWS_SUBFAMILY
- TT_NAME_ID_WWS_SUBFAMILY,
-#endif
- TT_NAME_ID_PREFERRED_SUBFAMILY,
- TT_NAME_ID_FONT_SUBFAMILY,
- TT_NAME_ID_TRADEMARK,
- TT_NAME_ID_MANUFACTURER,
-};
-
-#define NUM_NAMEID_ORDER (sizeof (nameid_order) / sizeof (nameid_order[0]))
-FcPattern *
-FcFreeTypeQueryFace (const FT_Face face,
- const FcChar8 *file,
- int id,
- FcBlanks *blanks)
-{
- FcPattern *pat;
- int slant = -1;
- int weight = -1;
- int width = -1;
- FcBool decorative = FcFalse;
- int i;
- FcCharSet *cs;
- FcLangSet *ls;
-#if 0
- FcChar8 *family = 0;
-#endif
- FcChar8 *complex_;
- const FcChar8 *foundry = 0;
- int spacing;
- TT_OS2 *os2;
-#if HAVE_FT_GET_PS_FONT_INFO
- PS_FontInfoRec psfontinfo;
-#endif
-#if HAVE_FT_GET_BDF_PROPERTY
- BDF_PropertyRec prop;
-#endif
- TT_Header *head;
- const FcChar8 *exclusiveLang = 0;
- FT_SfntName sname;
- FT_UInt snamei, snamec;
-
- int nfamily = 0;
- int nfamily_lang = 0;
- int nstyle = 0;
- int nstyle_lang = 0;
- int nfullname = 0;
- int nfullname_lang = 0;
- int p, platform;
- int n, nameid;
-
- FcChar8 *style = 0;
- int st;
-
- pat = FcPatternCreate ();
- if (!pat)
- goto bail0;
-
- if (!FcPatternAddBool (pat, FC_OUTLINE,
- (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0))
- goto bail1;
-
- if (!FcPatternAddBool (pat, FC_SCALABLE,
- (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0))
- goto bail1;
-
-
- /*
- * Get the OS/2 table
- */
- os2 = (TT_OS2 *) FT_Get_Sfnt_Table (face, ft_sfnt_os2);
-
- /*
- * Look first in the OS/2 table for the foundry, if
- * not found here, the various notices will be searched for
- * that information, either from the sfnt name tables or
- * the Postscript FontInfo dictionary. Finally, the
- * BDF properties will queried.
- */
-
- if (os2 && os2->version >= 0x0001 && os2->version != 0xffff)
- foundry = FcVendorFoundry(os2->achVendID);
-
- if (FcDebug () & FC_DBG_SCANV)
- printf ("\n");
- /*
- * Grub through the name table looking for family
- * and style names. FreeType makes quite a hash
- * of them
- */
- snamec = FT_Get_Sfnt_Name_Count (face);
- for (p = 0; p <= NUM_PLATFORM_ORDER; p++)
- {
- if (p < NUM_PLATFORM_ORDER)
- platform = platform_order[p];
- else
- platform = 0xffff;
-
- /*
- * Order nameids so preferred names appear first
- * in the resulting list
- */
- for (n = 0; n < NUM_NAMEID_ORDER; n++)
- {
- nameid = nameid_order[n];
-
- for (snamei = 0; snamei < snamec; snamei++)
- {
- FcChar8 *utf8;
- const FcChar8 *lang;
- const char *elt = 0, *eltlang = 0;
- int *np = 0, *nlangp = 0;
-
- if (FT_Get_Sfnt_Name (face, snamei, &sname) != 0)
- continue;
- if (sname.name_id != nameid)
- continue;
-
- /*
- * Sort platforms in preference order, accepting
- * all other platforms last
- */
- if (p < NUM_PLATFORM_ORDER)
- {
- if (sname.platform_id != platform)
- continue;
- }
- else
- {
- int sp;
-
- for (sp = 0; sp < NUM_PLATFORM_ORDER; sp++)
- if (sname.platform_id == platform_order[sp])
- break;
- if (sp != NUM_PLATFORM_ORDER)
- continue;
- }
- utf8 = FcSfntNameTranscode (&sname);
- lang = FcSfntNameLanguage (&sname);
-
- if (!utf8)
- continue;
-
- switch (sname.name_id) {
-#ifdef TT_NAME_ID_WWS_FAMILY
- case TT_NAME_ID_WWS_FAMILY:
-#endif
- case TT_NAME_ID_PREFERRED_FAMILY:
- case TT_NAME_ID_FONT_FAMILY:
-#if 0
- case TT_NAME_ID_PS_NAME:
- case TT_NAME_ID_UNIQUE_ID:
-#endif
- if (FcDebug () & FC_DBG_SCANV)
- printf ("found family (n %2d p %d e %d l 0x%04x) %s\n",
- sname.name_id, sname.platform_id,
- sname.encoding_id, sname.language_id,
- utf8);
-
- elt = FC_FAMILY;
- eltlang = FC_FAMILYLANG;
- np = &nfamily;
- nlangp = &nfamily_lang;
- break;
- case TT_NAME_ID_MAC_FULL_NAME:
- case TT_NAME_ID_FULL_NAME:
- if (FcDebug () & FC_DBG_SCANV)
- printf ("found full (n %2d p %d e %d l 0x%04x) %s\n",
- sname.name_id, sname.platform_id,
- sname.encoding_id, sname.language_id,
- utf8);
-
- elt = FC_FULLNAME;
- eltlang = FC_FULLNAMELANG;
- np = &nfullname;
- nlangp = &nfullname_lang;
- break;
-#ifdef TT_NAME_ID_WWS_SUBFAMILY
- case TT_NAME_ID_WWS_SUBFAMILY:
-#endif
- case TT_NAME_ID_PREFERRED_SUBFAMILY:
- case TT_NAME_ID_FONT_SUBFAMILY:
- if (FcDebug () & FC_DBG_SCANV)
- printf ("found style (n %2d p %d e %d l 0x%04x) %s\n",
- sname.name_id, sname.platform_id,
- sname.encoding_id, sname.language_id,
- utf8);
-
- elt = FC_STYLE;
- eltlang = FC_STYLELANG;
- np = &nstyle;
- nlangp = &nstyle_lang;
- break;
- case TT_NAME_ID_TRADEMARK:
- case TT_NAME_ID_MANUFACTURER:
- /* If the foundry wasn't found in the OS/2 table, look here */
- if(!foundry)
- foundry = FcNoticeFoundry((FT_String *) utf8);
- break;
- }
- if (elt)
- {
- if (FcStringInPatternElement (pat, elt, utf8))
- {
- free (utf8);
- continue;
- }
-
- /* add new element */
- if (!FcPatternAddString (pat, elt, utf8))
- {
- free (utf8);
- goto bail1;
- }
- free (utf8);
- if (lang)
- {
- /* pad lang list with 'xx' to line up with elt */
- while (*nlangp < *np)
- {
- if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "xx"))
- goto bail1;
- ++*nlangp;
- }
- if (!FcPatternAddString (pat, eltlang, lang))
- goto bail1;
- ++*nlangp;
- }
- ++*np;
- }
- else
- free (utf8);
- }
- }
- }
-
- if (!nfamily && face->family_name &&
- FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->family_name, (FcChar8 *) "") != 0)
- {
- if (FcDebug () & FC_DBG_SCANV)
- printf ("using FreeType family \"%s\"\n", face->family_name);
- if (!FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) face->family_name))
- goto bail1;
- ++nfamily;
- }
-
- if (!nstyle && face->style_name &&
- FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->style_name, (FcChar8 *) "") != 0)
- {
- if (FcDebug () & FC_DBG_SCANV)
- printf ("using FreeType style \"%s\"\n", face->style_name);
- if (!FcPatternAddString (pat, FC_STYLE, (FcChar8 *) face->style_name))
- goto bail1;
- ++nstyle;
- }
-
- if (!nfamily)
- {
- FcChar8 *start, *end;
- FcChar8 *family;
-
- start = (FcChar8 *) strrchr ((char *) file, '/');
- if (start)
- start++;
- else
- start = (FcChar8 *) file;
- end = (FcChar8 *) strrchr ((char *) start, '.');
- if (!end)
- end = start + strlen ((char *) start);
- /* freed below */
- family = malloc (end - start + 1);
- strncpy ((char *) family, (char *) start, end - start);
- family[end - start] = '\0';
- if (FcDebug () & FC_DBG_SCANV)
- printf ("using filename for family %s\n", family);
- if (!FcPatternAddString (pat, FC_FAMILY, family))
- {
- free (family);
- goto bail1;
- }
- free (family);
- ++nfamily;
- }
-
- if (!FcPatternAddString (pat, FC_FILE, file))
- goto bail1;
-
- if (!FcPatternAddInteger (pat, FC_INDEX, id))
- goto bail1;
-
-#if 0
- /*
- * don't even try this -- CJK 'monospace' fonts are really
- * dual width, and most other fonts don't bother to set
- * the attribute. Sigh.
- */
- if ((face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) != 0)
- if (!FcPatternAddInteger (pat, FC_SPACING, FC_MONO))
- goto bail1;
-#endif
-
- /*
- * Find the font revision (if available)
- */
- head = (TT_Header *) FT_Get_Sfnt_Table (face, ft_sfnt_head);
- if (head)
- {
- if (!FcPatternAddInteger (pat, FC_FONTVERSION, head->Font_Revision))
- goto bail1;
- }
- else
- {
- if (!FcPatternAddInteger (pat, FC_FONTVERSION, 0))
- goto bail1;
- }
-
- if (os2 && os2->version >= 0x0001 && os2->version != 0xffff)
- {
- for (i = 0; i < NUM_CODE_PAGE_RANGE; i++)
- {
- FT_ULong bits;
- int bit;
- if (FcCodePageRange[i].bit < 32)
- {
- bits = os2->ulCodePageRange1;
- bit = FcCodePageRange[i].bit;
- }
- else
- {
- bits = os2->ulCodePageRange2;
- bit = FcCodePageRange[i].bit - 32;
- }
- if (bits & (1 << bit))
- {
- /*
- * If the font advertises support for multiple
- * "exclusive" languages, then include support
- * for any language found to have coverage
- */
- if (exclusiveLang)
- {
- exclusiveLang = 0;
- break;
- }
- exclusiveLang = FcCodePageRange[i].lang;
- }
- }
- }
-
- if (os2 && os2->version != 0xffff)
- {
- if (os2->usWeightClass == 0)
- ;
- else if (os2->usWeightClass < 150)
- weight = FC_WEIGHT_THIN;
- else if (os2->usWeightClass < 250)
- weight = FC_WEIGHT_EXTRALIGHT;
- else if (os2->usWeightClass < 350)
- weight = FC_WEIGHT_LIGHT;
- else if (os2->usWeightClass < 450)
- weight = FC_WEIGHT_REGULAR;
- else if (os2->usWeightClass < 550)
- weight = FC_WEIGHT_MEDIUM;
- else if (os2->usWeightClass < 650)
- weight = FC_WEIGHT_SEMIBOLD;
- else if (os2->usWeightClass < 750)
- weight = FC_WEIGHT_BOLD;
- else if (os2->usWeightClass < 850)
- weight = FC_WEIGHT_EXTRABOLD;
- else if (os2->usWeightClass < 925)
- weight = FC_WEIGHT_BLACK;
- else if (os2->usWeightClass < 1000)
- weight = FC_WEIGHT_EXTRABLACK;
- if ((FcDebug() & FC_DBG_SCANV) && weight != -1)
- printf ("\tos2 weight class %d maps to weight %d\n",
- os2->usWeightClass, weight);
-
- switch (os2->usWidthClass) {
- case 1: width = FC_WIDTH_ULTRACONDENSED; break;
- case 2: width = FC_WIDTH_EXTRACONDENSED; break;
- case 3: width = FC_WIDTH_CONDENSED; break;
- case 4: width = FC_WIDTH_SEMICONDENSED; break;
- case 5: width = FC_WIDTH_NORMAL; break;
- case 6: width = FC_WIDTH_SEMIEXPANDED; break;
- case 7: width = FC_WIDTH_EXPANDED; break;
- case 8: width = FC_WIDTH_EXTRAEXPANDED; break;
- case 9: width = FC_WIDTH_ULTRAEXPANDED; break;
- }
- if ((FcDebug() & FC_DBG_SCANV) && width != -1)
- printf ("\tos2 width class %d maps to width %d\n",
- os2->usWidthClass, width);
- }
- if (os2 && (complex_ = FcFontCapabilities(face)))
- {
- if (!FcPatternAddString (pat, FC_CAPABILITY, complex_))
- {
- free (complex_);
- goto bail1;
- }
- free (complex_);
- }
-
- /*
- * Type 1: Check for FontInfo dictionary information
- * Code from g2@magestudios.net (Gerard Escalante)
- */
-
-#if HAVE_FT_GET_PS_FONT_INFO
- if (FT_Get_PS_Font_Info(face, &psfontinfo) == 0)
- {
- if (weight == -1 && psfontinfo.weight)
- {
- weight = FcIsWeight ((FcChar8 *) psfontinfo.weight);
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tType1 weight %s maps to %d\n",
- psfontinfo.weight, weight);
- }
-
-#if 0
- /*
- * Don't bother with italic_angle; FreeType already extracts that
- * information for us and sticks it into style_flags
- */
- if (psfontinfo.italic_angle)
- slant = FC_SLANT_ITALIC;
- else
- slant = FC_SLANT_ROMAN;
-#endif
-
- if(!foundry)
- foundry = FcNoticeFoundry(psfontinfo.notice);
- }
-#endif /* HAVE_FT_GET_PS_FONT_INFO */
-
-#if HAVE_FT_GET_BDF_PROPERTY
- /*
- * Finally, look for a FOUNDRY BDF property if no other
- * mechanism has managed to locate a foundry
- */
-
- if (!foundry)
- {
- int rc;
- rc = FT_Get_BDF_Property(face, "FOUNDRY", &prop);
- if(rc == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM)
- foundry = (FcChar8 *) prop.u.atom;
- }
-
- if (width == -1)
- {
- if (FT_Get_BDF_Property(face, "RELATIVE_SETWIDTH", &prop) == 0 &&
- (prop.type == BDF_PROPERTY_TYPE_INTEGER ||
- prop.type == BDF_PROPERTY_TYPE_CARDINAL))
- {
- FT_Int32 value;
-
- if (prop.type == BDF_PROPERTY_TYPE_INTEGER)
- value = prop.u.integer;
- else
- value = (FT_Int32) prop.u.cardinal;
- switch ((value + 5) / 10) {
- case 1: width = FC_WIDTH_ULTRACONDENSED; break;
- case 2: width = FC_WIDTH_EXTRACONDENSED; break;
- case 3: width = FC_WIDTH_CONDENSED; break;
- case 4: width = FC_WIDTH_SEMICONDENSED; break;
- case 5: width = FC_WIDTH_NORMAL; break;
- case 6: width = FC_WIDTH_SEMIEXPANDED; break;
- case 7: width = FC_WIDTH_EXPANDED; break;
- case 8: width = FC_WIDTH_EXTRAEXPANDED; break;
- case 9: width = FC_WIDTH_ULTRAEXPANDED; break;
- }
- }
- if (width == -1 &&
- FT_Get_BDF_Property (face, "SETWIDTH_NAME", &prop) == 0 &&
- prop.type == BDF_PROPERTY_TYPE_ATOM)
- {
- width = FcIsWidth ((FcChar8 *) prop.u.atom);
- if (FcDebug () & FC_DBG_SCANV)
- printf ("\tsetwidth %s maps to %d\n", prop.u.atom, width);
- }
- }
-#endif
-
- /*
- * Look for weight, width and slant names in the style value
- */
- for (st = 0; FcPatternGetString (pat, FC_STYLE, st, &style) == FcResultMatch; st++)
- {
- if (weight == -1)
- {
- weight = FcContainsWeight (style);
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tStyle %s maps to weight %d\n", style, weight);
- }
- if (width == -1)
- {
- width = FcContainsWidth (style);
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tStyle %s maps to width %d\n", style, width);
- }
- if (slant == -1)
- {
- slant = FcContainsSlant (style);
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tStyle %s maps to slant %d\n", style, slant);
- }
- if (decorative == FcFalse)
- {
- decorative = FcContainsDecorative (style) > 0;
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\tStyle %s maps to decorative %d\n", style, decorative);
- }
- }
- /*
- * Pull default values from the FreeType flags if more
- * specific values not found above
- */
- if (slant == -1)
- {
- slant = FC_SLANT_ROMAN;
- if (face->style_flags & FT_STYLE_FLAG_ITALIC)
- slant = FC_SLANT_ITALIC;
- }
-
- if (weight == -1)
- {
- weight = FC_WEIGHT_MEDIUM;
- if (face->style_flags & FT_STYLE_FLAG_BOLD)
- weight = FC_WEIGHT_BOLD;
- }
-
- if (width == -1)
- width = FC_WIDTH_NORMAL;
-
- if (foundry == 0)
- foundry = (FcChar8 *) "unknown";
-
- if (!FcPatternAddInteger (pat, FC_SLANT, slant))
- goto bail1;
-
- if (!FcPatternAddInteger (pat, FC_WEIGHT, weight))
- goto bail1;
-
- if (!FcPatternAddInteger (pat, FC_WIDTH, width))
- goto bail1;
-
- if (!FcPatternAddString (pat, FC_FOUNDRY, foundry))
- goto bail1;
-
- if (!FcPatternAddBool (pat, FC_DECORATIVE, decorative))
- goto bail1;
-
- /*
- * Compute the unicode coverage for the font
- */
- cs = FcFreeTypeCharSetAndSpacing (face, blanks, &spacing);
- if (!cs)
- goto bail1;
-
-#if HAVE_FT_GET_BDF_PROPERTY
- /* For PCF fonts, override the computed spacing with the one from
- the property */
- if(FT_Get_BDF_Property(face, "SPACING", &prop) == 0 &&
- prop.type == BDF_PROPERTY_TYPE_ATOM) {
- if(!strcmp(prop.u.atom, "c") || !strcmp(prop.u.atom, "C"))
- spacing = FC_CHARCELL;
- else if(!strcmp(prop.u.atom, "m") || !strcmp(prop.u.atom, "M"))
- spacing = FC_MONO;
- else if(!strcmp(prop.u.atom, "p") || !strcmp(prop.u.atom, "P"))
- spacing = FC_PROPORTIONAL;
- }
-#endif
-
- /*
- * Skip over PCF fonts that have no encoded characters; they're
- * usually just Unicode fonts transcoded to some legacy encoding
- * FT forces us to approximate whether a font is a PCF font
- * or not by whether it has any BDF properties. Try PIXEL_SIZE;
- * I don't know how to get a list of BDF properties on the font. -PL
- */
- if (FcCharSetCount (cs) == 0)
- {
-#if HAVE_FT_GET_BDF_PROPERTY
- if(FT_Get_BDF_Property(face, "PIXEL_SIZE", &prop) == 0)
- goto bail2;
-#endif
- }
-
- if (!FcPatternAddCharSet (pat, FC_CHARSET, cs))
- goto bail2;
-
- ls = FcFreeTypeLangSet (cs, exclusiveLang);
- if (!ls)
- goto bail2;
-
- if (!FcPatternAddLangSet (pat, FC_LANG, ls))
- {
- FcLangSetDestroy (ls);
- goto bail2;
- }
-
- FcLangSetDestroy (ls);
-
- if (spacing != FC_PROPORTIONAL)
- if (!FcPatternAddInteger (pat, FC_SPACING, spacing))
- goto bail2;
-
- if (!(face->face_flags & FT_FACE_FLAG_SCALABLE))
- {
- for (i = 0; i < face->num_fixed_sizes; i++)
- if (!FcPatternAddDouble (pat, FC_PIXEL_SIZE,
- FcGetPixelSize (face, i)))
- goto bail2;
- if (!FcPatternAddBool (pat, FC_ANTIALIAS, FcFalse))
- goto bail2;
- }
-#if HAVE_FT_GET_X11_FONT_FORMAT
- /*
- * Use the (not well documented or supported) X-specific function
- * from FreeType to figure out the font format
- */
- {
- const char *font_format = FT_Get_X11_Font_Format (face);
- if (font_format)
- FcPatternAddString (pat, FC_FONTFORMAT, (FcChar8 *) font_format);
- }
-#endif
-
- /*
- * Drop our reference to the charset
- */
- FcCharSetDestroy (cs);
-
- return pat;
-
-bail2:
- FcCharSetDestroy (cs);
-bail1:
- FcPatternDestroy (pat);
-bail0:
- return NULL;
-}
-
-FcPattern *
-FcFreeTypeQuery(const FcChar8 *file,
- int id,
- FcBlanks *blanks,
- int *count)
-{
- FT_Face face;
- FT_Library ftLibrary;
- FcPattern *pat = NULL;
-
- if (FT_Init_FreeType (&ftLibrary))
- return NULL;
-
- if (FT_New_Face (ftLibrary, (char *) file, id, &face))
- goto bail;
-
- *count = face->num_faces;
-
- pat = FcFreeTypeQueryFace (face, file, id, blanks);
-
- FT_Done_Face (face);
-bail:
- FT_Done_FreeType (ftLibrary);
- return pat;
-}
-
-/*
- * For our purposes, this approximation is sufficient
- */
-#if !HAVE_FT_GET_NEXT_CHAR
-#define FT_Get_Next_Char(face, ucs4, gi) ((ucs4) >= 0xffffff ? \
- (*(gi) = 0), 0 : \
- (*(gi) = 1), (ucs4) + 1)
-#warning "No FT_Get_Next_Char: Please install freetype version 2.1.0 or newer"
-#endif
-
-typedef struct _FcCharEnt {
- FcChar16 bmp;
- unsigned char encode;
-} FcCharEnt;
-
-struct _FcCharMap {
- const FcCharEnt *ent;
- int nent;
-};
-
-typedef struct _FcFontDecode {
- FT_Encoding encoding;
- const FcCharMap *map;
- FcChar32 max;
-} FcFontDecode;
-
-static const FcCharEnt AppleRomanEnt[] = {
- { 0x0020, 0x20 }, /* SPACE */
- { 0x0021, 0x21 }, /* EXCLAMATION MARK */
- { 0x0022, 0x22 }, /* QUOTATION MARK */
- { 0x0023, 0x23 }, /* NUMBER SIGN */
- { 0x0024, 0x24 }, /* DOLLAR SIGN */
- { 0x0025, 0x25 }, /* PERCENT SIGN */
- { 0x0026, 0x26 }, /* AMPERSAND */
- { 0x0027, 0x27 }, /* APOSTROPHE */
- { 0x0028, 0x28 }, /* LEFT PARENTHESIS */
- { 0x0029, 0x29 }, /* RIGHT PARENTHESIS */
- { 0x002A, 0x2A }, /* ASTERISK */
- { 0x002B, 0x2B }, /* PLUS SIGN */
- { 0x002C, 0x2C }, /* COMMA */
- { 0x002D, 0x2D }, /* HYPHEN-MINUS */
- { 0x002E, 0x2E }, /* FULL STOP */
- { 0x002F, 0x2F }, /* SOLIDUS */
- { 0x0030, 0x30 }, /* DIGIT ZERO */
- { 0x0031, 0x31 }, /* DIGIT ONE */
- { 0x0032, 0x32 }, /* DIGIT TWO */
- { 0x0033, 0x33 }, /* DIGIT THREE */
- { 0x0034, 0x34 }, /* DIGIT FOUR */
- { 0x0035, 0x35 }, /* DIGIT FIVE */
- { 0x0036, 0x36 }, /* DIGIT SIX */
- { 0x0037, 0x37 }, /* DIGIT SEVEN */
- { 0x0038, 0x38 }, /* DIGIT EIGHT */
- { 0x0039, 0x39 }, /* DIGIT NINE */
- { 0x003A, 0x3A }, /* COLON */
- { 0x003B, 0x3B }, /* SEMICOLON */
- { 0x003C, 0x3C }, /* LESS-THAN SIGN */
- { 0x003D, 0x3D }, /* EQUALS SIGN */
- { 0x003E, 0x3E }, /* GREATER-THAN SIGN */
- { 0x003F, 0x3F }, /* QUESTION MARK */
- { 0x0040, 0x40 }, /* COMMERCIAL AT */
- { 0x0041, 0x41 }, /* LATIN CAPITAL LETTER A */
- { 0x0042, 0x42 }, /* LATIN CAPITAL LETTER B */
- { 0x0043, 0x43 }, /* LATIN CAPITAL LETTER C */
- { 0x0044, 0x44 }, /* LATIN CAPITAL LETTER D */
- { 0x0045, 0x45 }, /* LATIN CAPITAL LETTER E */
- { 0x0046, 0x46 }, /* LATIN CAPITAL LETTER F */
- { 0x0047, 0x47 }, /* LATIN CAPITAL LETTER G */
- { 0x0048, 0x48 }, /* LATIN CAPITAL LETTER H */
- { 0x0049, 0x49 }, /* LATIN CAPITAL LETTER I */
- { 0x004A, 0x4A }, /* LATIN CAPITAL LETTER J */
- { 0x004B, 0x4B }, /* LATIN CAPITAL LETTER K */
- { 0x004C, 0x4C }, /* LATIN CAPITAL LETTER L */
- { 0x004D, 0x4D }, /* LATIN CAPITAL LETTER M */
- { 0x004E, 0x4E }, /* LATIN CAPITAL LETTER N */
- { 0x004F, 0x4F }, /* LATIN CAPITAL LETTER O */
- { 0x0050, 0x50 }, /* LATIN CAPITAL LETTER P */
- { 0x0051, 0x51 }, /* LATIN CAPITAL LETTER Q */
- { 0x0052, 0x52 }, /* LATIN CAPITAL LETTER R */
- { 0x0053, 0x53 }, /* LATIN CAPITAL LETTER S */
- { 0x0054, 0x54 }, /* LATIN CAPITAL LETTER T */
- { 0x0055, 0x55 }, /* LATIN CAPITAL LETTER U */
- { 0x0056, 0x56 }, /* LATIN CAPITAL LETTER V */
- { 0x0057, 0x57 }, /* LATIN CAPITAL LETTER W */
- { 0x0058, 0x58 }, /* LATIN CAPITAL LETTER X */
- { 0x0059, 0x59 }, /* LATIN CAPITAL LETTER Y */
- { 0x005A, 0x5A }, /* LATIN CAPITAL LETTER Z */
- { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET */
- { 0x005C, 0x5C }, /* REVERSE SOLIDUS */
- { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET */
- { 0x005E, 0x5E }, /* CIRCUMFLEX ACCENT */
- { 0x005F, 0x5F }, /* LOW LINE */
- { 0x0060, 0x60 }, /* GRAVE ACCENT */
- { 0x0061, 0x61 }, /* LATIN SMALL LETTER A */
- { 0x0062, 0x62 }, /* LATIN SMALL LETTER B */
- { 0x0063, 0x63 }, /* LATIN SMALL LETTER C */
- { 0x0064, 0x64 }, /* LATIN SMALL LETTER D */
- { 0x0065, 0x65 }, /* LATIN SMALL LETTER E */
- { 0x0066, 0x66 }, /* LATIN SMALL LETTER F */
- { 0x0067, 0x67 }, /* LATIN SMALL LETTER G */
- { 0x0068, 0x68 }, /* LATIN SMALL LETTER H */
- { 0x0069, 0x69 }, /* LATIN SMALL LETTER I */
- { 0x006A, 0x6A }, /* LATIN SMALL LETTER J */
- { 0x006B, 0x6B }, /* LATIN SMALL LETTER K */
- { 0x006C, 0x6C }, /* LATIN SMALL LETTER L */
- { 0x006D, 0x6D }, /* LATIN SMALL LETTER M */
- { 0x006E, 0x6E }, /* LATIN SMALL LETTER N */
- { 0x006F, 0x6F }, /* LATIN SMALL LETTER O */
- { 0x0070, 0x70 }, /* LATIN SMALL LETTER P */
- { 0x0071, 0x71 }, /* LATIN SMALL LETTER Q */
- { 0x0072, 0x72 }, /* LATIN SMALL LETTER R */
- { 0x0073, 0x73 }, /* LATIN SMALL LETTER S */
- { 0x0074, 0x74 }, /* LATIN SMALL LETTER T */
- { 0x0075, 0x75 }, /* LATIN SMALL LETTER U */
- { 0x0076, 0x76 }, /* LATIN SMALL LETTER V */
- { 0x0077, 0x77 }, /* LATIN SMALL LETTER W */
- { 0x0078, 0x78 }, /* LATIN SMALL LETTER X */
- { 0x0079, 0x79 }, /* LATIN SMALL LETTER Y */
- { 0x007A, 0x7A }, /* LATIN SMALL LETTER Z */
- { 0x007B, 0x7B }, /* LEFT CURLY BRACKET */
- { 0x007C, 0x7C }, /* VERTICAL LINE */
- { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET */
- { 0x007E, 0x7E }, /* TILDE */
- { 0x00A0, 0xCA }, /* NO-BREAK SPACE */
- { 0x00A1, 0xC1 }, /* INVERTED EXCLAMATION MARK */
- { 0x00A2, 0xA2 }, /* CENT SIGN */
- { 0x00A3, 0xA3 }, /* POUND SIGN */
- { 0x00A5, 0xB4 }, /* YEN SIGN */
- { 0x00A7, 0xA4 }, /* SECTION SIGN */
- { 0x00A8, 0xAC }, /* DIAERESIS */
- { 0x00A9, 0xA9 }, /* COPYRIGHT SIGN */
- { 0x00AA, 0xBB }, /* FEMININE ORDINAL INDICATOR */
- { 0x00AB, 0xC7 }, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */
- { 0x00AC, 0xC2 }, /* NOT SIGN */
- { 0x00AE, 0xA8 }, /* REGISTERED SIGN */
- { 0x00AF, 0xF8 }, /* MACRON */
- { 0x00B0, 0xA1 }, /* DEGREE SIGN */
- { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN */
- { 0x00B4, 0xAB }, /* ACUTE ACCENT */
- { 0x00B5, 0xB5 }, /* MICRO SIGN */
- { 0x00B6, 0xA6 }, /* PILCROW SIGN */
- { 0x00B7, 0xE1 }, /* MIDDLE DOT */
- { 0x00B8, 0xFC }, /* CEDILLA */
- { 0x00BA, 0xBC }, /* MASCULINE ORDINAL INDICATOR */
- { 0x00BB, 0xC8 }, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */
- { 0x00BF, 0xC0 }, /* INVERTED QUESTION MARK */
- { 0x00C0, 0xCB }, /* LATIN CAPITAL LETTER A WITH GRAVE */
- { 0x00C1, 0xE7 }, /* LATIN CAPITAL LETTER A WITH ACUTE */
- { 0x00C2, 0xE5 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */
- { 0x00C3, 0xCC }, /* LATIN CAPITAL LETTER A WITH TILDE */
- { 0x00C4, 0x80 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */
- { 0x00C5, 0x81 }, /* LATIN CAPITAL LETTER A WITH RING ABOVE */
- { 0x00C6, 0xAE }, /* LATIN CAPITAL LETTER AE */
- { 0x00C7, 0x82 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */
- { 0x00C8, 0xE9 }, /* LATIN CAPITAL LETTER E WITH GRAVE */
- { 0x00C9, 0x83 }, /* LATIN CAPITAL LETTER E WITH ACUTE */
- { 0x00CA, 0xE6 }, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */
- { 0x00CB, 0xE8 }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */
- { 0x00CC, 0xED }, /* LATIN CAPITAL LETTER I WITH GRAVE */
- { 0x00CD, 0xEA }, /* LATIN CAPITAL LETTER I WITH ACUTE */
- { 0x00CE, 0xEB }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */
- { 0x00CF, 0xEC }, /* LATIN CAPITAL LETTER I WITH DIAERESIS */
- { 0x00D1, 0x84 }, /* LATIN CAPITAL LETTER N WITH TILDE */
- { 0x00D2, 0xF1 }, /* LATIN CAPITAL LETTER O WITH GRAVE */
- { 0x00D3, 0xEE }, /* LATIN CAPITAL LETTER O WITH ACUTE */
- { 0x00D4, 0xEF }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */
- { 0x00D5, 0xCD }, /* LATIN CAPITAL LETTER O WITH TILDE */
- { 0x00D6, 0x85 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */
- { 0x00D8, 0xAF }, /* LATIN CAPITAL LETTER O WITH STROKE */
- { 0x00D9, 0xF4 }, /* LATIN CAPITAL LETTER U WITH GRAVE */
- { 0x00DA, 0xF2 }, /* LATIN CAPITAL LETTER U WITH ACUTE */
- { 0x00DB, 0xF3 }, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */
- { 0x00DC, 0x86 }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */
- { 0x00DF, 0xA7 }, /* LATIN SMALL LETTER SHARP S */
- { 0x00E0, 0x88 }, /* LATIN SMALL LETTER A WITH GRAVE */
- { 0x00E1, 0x87 }, /* LATIN SMALL LETTER A WITH ACUTE */
- { 0x00E2, 0x89 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */
- { 0x00E3, 0x8B }, /* LATIN SMALL LETTER A WITH TILDE */
- { 0x00E4, 0x8A }, /* LATIN SMALL LETTER A WITH DIAERESIS */
- { 0x00E5, 0x8C }, /* LATIN SMALL LETTER A WITH RING ABOVE */
- { 0x00E6, 0xBE }, /* LATIN SMALL LETTER AE */
- { 0x00E7, 0x8D }, /* LATIN SMALL LETTER C WITH CEDILLA */
- { 0x00E8, 0x8F }, /* LATIN SMALL LETTER E WITH GRAVE */
- { 0x00E9, 0x8E }, /* LATIN SMALL LETTER E WITH ACUTE */
- { 0x00EA, 0x90 }, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */
- { 0x00EB, 0x91 }, /* LATIN SMALL LETTER E WITH DIAERESIS */
- { 0x00EC, 0x93 }, /* LATIN SMALL LETTER I WITH GRAVE */
- { 0x00ED, 0x92 }, /* LATIN SMALL LETTER I WITH ACUTE */
- { 0x00EE, 0x94 }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */
- { 0x00EF, 0x95 }, /* LATIN SMALL LETTER I WITH DIAERESIS */
- { 0x00F1, 0x96 }, /* LATIN SMALL LETTER N WITH TILDE */
- { 0x00F2, 0x98 }, /* LATIN SMALL LETTER O WITH GRAVE */
- { 0x00F3, 0x97 }, /* LATIN SMALL LETTER O WITH ACUTE */
- { 0x00F4, 0x99 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */
- { 0x00F5, 0x9B }, /* LATIN SMALL LETTER O WITH TILDE */
- { 0x00F6, 0x9A }, /* LATIN SMALL LETTER O WITH DIAERESIS */
- { 0x00F7, 0xD6 }, /* DIVISION SIGN */
- { 0x00F8, 0xBF }, /* LATIN SMALL LETTER O WITH STROKE */
- { 0x00F9, 0x9D }, /* LATIN SMALL LETTER U WITH GRAVE */
- { 0x00FA, 0x9C }, /* LATIN SMALL LETTER U WITH ACUTE */
- { 0x00FB, 0x9E }, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */
- { 0x00FC, 0x9F }, /* LATIN SMALL LETTER U WITH DIAERESIS */
- { 0x00FF, 0xD8 }, /* LATIN SMALL LETTER Y WITH DIAERESIS */
- { 0x0131, 0xF5 }, /* LATIN SMALL LETTER DOTLESS I */
- { 0x0152, 0xCE }, /* LATIN CAPITAL LIGATURE OE */
- { 0x0153, 0xCF }, /* LATIN SMALL LIGATURE OE */
- { 0x0178, 0xD9 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */
- { 0x0192, 0xC4 }, /* LATIN SMALL LETTER F WITH HOOK */
- { 0x02C6, 0xF6 }, /* MODIFIER LETTER CIRCUMFLEX ACCENT */
- { 0x02C7, 0xFF }, /* CARON */
- { 0x02D8, 0xF9 }, /* BREVE */
- { 0x02D9, 0xFA }, /* DOT ABOVE */
- { 0x02DA, 0xFB }, /* RING ABOVE */
- { 0x02DB, 0xFE }, /* OGONEK */
- { 0x02DC, 0xF7 }, /* SMALL TILDE */
- { 0x02DD, 0xFD }, /* DOUBLE ACUTE ACCENT */
- { 0x03A9, 0xBD }, /* GREEK CAPITAL LETTER OMEGA */
- { 0x03C0, 0xB9 }, /* GREEK SMALL LETTER PI */
- { 0x2013, 0xD0 }, /* EN DASH */
- { 0x2014, 0xD1 }, /* EM DASH */
- { 0x2018, 0xD4 }, /* LEFT SINGLE QUOTATION MARK */
- { 0x2019, 0xD5 }, /* RIGHT SINGLE QUOTATION MARK */
- { 0x201A, 0xE2 }, /* SINGLE LOW-9 QUOTATION MARK */
- { 0x201C, 0xD2 }, /* LEFT DOUBLE QUOTATION MARK */
- { 0x201D, 0xD3 }, /* RIGHT DOUBLE QUOTATION MARK */
- { 0x201E, 0xE3 }, /* DOUBLE LOW-9 QUOTATION MARK */
- { 0x2020, 0xA0 }, /* DAGGER */
- { 0x2021, 0xE0 }, /* DOUBLE DAGGER */
- { 0x2022, 0xA5 }, /* BULLET */
- { 0x2026, 0xC9 }, /* HORIZONTAL ELLIPSIS */
- { 0x2030, 0xE4 }, /* PER MILLE SIGN */
- { 0x2039, 0xDC }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */
- { 0x203A, 0xDD }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */
- { 0x2044, 0xDA }, /* FRACTION SLASH */
- { 0x20AC, 0xDB }, /* EURO SIGN */
- { 0x2122, 0xAA }, /* TRADE MARK SIGN */
- { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL */
- { 0x2206, 0xC6 }, /* INCREMENT */
- { 0x220F, 0xB8 }, /* N-ARY PRODUCT */
- { 0x2211, 0xB7 }, /* N-ARY SUMMATION */
- { 0x221A, 0xC3 }, /* SQUARE ROOT */
- { 0x221E, 0xB0 }, /* INFINITY */
- { 0x222B, 0xBA }, /* INTEGRAL */
- { 0x2248, 0xC5 }, /* ALMOST EQUAL TO */
- { 0x2260, 0xAD }, /* NOT EQUAL TO */
- { 0x2264, 0xB2 }, /* LESS-THAN OR EQUAL TO */
- { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO */
- { 0x25CA, 0xD7 }, /* LOZENGE */
- { 0xF8FF, 0xF0 }, /* Apple logo */
- { 0xFB01, 0xDE }, /* LATIN SMALL LIGATURE FI */
- { 0xFB02, 0xDF }, /* LATIN SMALL LIGATURE FL */
-};
-
-static const FcCharMap AppleRoman = {
- AppleRomanEnt,
- sizeof (AppleRomanEnt) / sizeof (AppleRomanEnt[0])
-};
-
-static const FcCharEnt AdobeSymbolEnt[] = {
- { 0x0020, 0x20 }, /* SPACE # space */
- { 0x0021, 0x21 }, /* EXCLAMATION MARK # exclam */
- { 0x0023, 0x23 }, /* NUMBER SIGN # numbersign */
- { 0x0025, 0x25 }, /* PERCENT SIGN # percent */
- { 0x0026, 0x26 }, /* AMPERSAND # ampersand */
- { 0x0028, 0x28 }, /* LEFT PARENTHESIS # parenleft */
- { 0x0029, 0x29 }, /* RIGHT PARENTHESIS # parenright */
- { 0x002B, 0x2B }, /* PLUS SIGN # plus */
- { 0x002C, 0x2C }, /* COMMA # comma */
- { 0x002E, 0x2E }, /* FULL STOP # period */
- { 0x002F, 0x2F }, /* SOLIDUS # slash */
- { 0x0030, 0x30 }, /* DIGIT ZERO # zero */
- { 0x0031, 0x31 }, /* DIGIT ONE # one */
- { 0x0032, 0x32 }, /* DIGIT TWO # two */
- { 0x0033, 0x33 }, /* DIGIT THREE # three */
- { 0x0034, 0x34 }, /* DIGIT FOUR # four */
- { 0x0035, 0x35 }, /* DIGIT FIVE # five */
- { 0x0036, 0x36 }, /* DIGIT SIX # six */
- { 0x0037, 0x37 }, /* DIGIT SEVEN # seven */
- { 0x0038, 0x38 }, /* DIGIT EIGHT # eight */
- { 0x0039, 0x39 }, /* DIGIT NINE # nine */
- { 0x003A, 0x3A }, /* COLON # colon */
- { 0x003B, 0x3B }, /* SEMICOLON # semicolon */
- { 0x003C, 0x3C }, /* LESS-THAN SIGN # less */
- { 0x003D, 0x3D }, /* EQUALS SIGN # equal */
- { 0x003E, 0x3E }, /* GREATER-THAN SIGN # greater */
- { 0x003F, 0x3F }, /* QUESTION MARK # question */
- { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET # bracketleft */
- { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET # bracketright */
- { 0x005F, 0x5F }, /* LOW LINE # underscore */
- { 0x007B, 0x7B }, /* LEFT CURLY BRACKET # braceleft */
- { 0x007C, 0x7C }, /* VERTICAL LINE # bar */
- { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET # braceright */
- { 0x00A0, 0x20 }, /* NO-BREAK SPACE # space */
- { 0x00AC, 0xD8 }, /* NOT SIGN # logicalnot */
- { 0x00B0, 0xB0 }, /* DEGREE SIGN # degree */
- { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN # plusminus */
- { 0x00B5, 0x6D }, /* MICRO SIGN # mu */
- { 0x00D7, 0xB4 }, /* MULTIPLICATION SIGN # multiply */
- { 0x00F7, 0xB8 }, /* DIVISION SIGN # divide */
- { 0x0192, 0xA6 }, /* LATIN SMALL LETTER F WITH HOOK # florin */
- { 0x0391, 0x41 }, /* GREEK CAPITAL LETTER ALPHA # Alpha */
- { 0x0392, 0x42 }, /* GREEK CAPITAL LETTER BETA # Beta */
- { 0x0393, 0x47 }, /* GREEK CAPITAL LETTER GAMMA # Gamma */
- { 0x0394, 0x44 }, /* GREEK CAPITAL LETTER DELTA # Delta */
- { 0x0395, 0x45 }, /* GREEK CAPITAL LETTER EPSILON # Epsilon */
- { 0x0396, 0x5A }, /* GREEK CAPITAL LETTER ZETA # Zeta */
- { 0x0397, 0x48 }, /* GREEK CAPITAL LETTER ETA # Eta */
- { 0x0398, 0x51 }, /* GREEK CAPITAL LETTER THETA # Theta */
- { 0x0399, 0x49 }, /* GREEK CAPITAL LETTER IOTA # Iota */
- { 0x039A, 0x4B }, /* GREEK CAPITAL LETTER KAPPA # Kappa */
- { 0x039B, 0x4C }, /* GREEK CAPITAL LETTER LAMDA # Lambda */
- { 0x039C, 0x4D }, /* GREEK CAPITAL LETTER MU # Mu */
- { 0x039D, 0x4E }, /* GREEK CAPITAL LETTER NU # Nu */
- { 0x039E, 0x58 }, /* GREEK CAPITAL LETTER XI # Xi */
- { 0x039F, 0x4F }, /* GREEK CAPITAL LETTER OMICRON # Omicron */
- { 0x03A0, 0x50 }, /* GREEK CAPITAL LETTER PI # Pi */
- { 0x03A1, 0x52 }, /* GREEK CAPITAL LETTER RHO # Rho */
- { 0x03A3, 0x53 }, /* GREEK CAPITAL LETTER SIGMA # Sigma */
- { 0x03A4, 0x54 }, /* GREEK CAPITAL LETTER TAU # Tau */
- { 0x03A5, 0x55 }, /* GREEK CAPITAL LETTER UPSILON # Upsilon */
- { 0x03A6, 0x46 }, /* GREEK CAPITAL LETTER PHI # Phi */
- { 0x03A7, 0x43 }, /* GREEK CAPITAL LETTER CHI # Chi */
- { 0x03A8, 0x59 }, /* GREEK CAPITAL LETTER PSI # Psi */
- { 0x03A9, 0x57 }, /* GREEK CAPITAL LETTER OMEGA # Omega */
- { 0x03B1, 0x61 }, /* GREEK SMALL LETTER ALPHA # alpha */
- { 0x03B2, 0x62 }, /* GREEK SMALL LETTER BETA # beta */
- { 0x03B3, 0x67 }, /* GREEK SMALL LETTER GAMMA # gamma */
- { 0x03B4, 0x64 }, /* GREEK SMALL LETTER DELTA # delta */
- { 0x03B5, 0x65 }, /* GREEK SMALL LETTER EPSILON # epsilon */
- { 0x03B6, 0x7A }, /* GREEK SMALL LETTER ZETA # zeta */
- { 0x03B7, 0x68 }, /* GREEK SMALL LETTER ETA # eta */
- { 0x03B8, 0x71 }, /* GREEK SMALL LETTER THETA # theta */
- { 0x03B9, 0x69 }, /* GREEK SMALL LETTER IOTA # iota */
- { 0x03BA, 0x6B }, /* GREEK SMALL LETTER KAPPA # kappa */
- { 0x03BB, 0x6C }, /* GREEK SMALL LETTER LAMDA # lambda */
- { 0x03BC, 0x6D }, /* GREEK SMALL LETTER MU # mu */
- { 0x03BD, 0x6E }, /* GREEK SMALL LETTER NU # nu */
- { 0x03BE, 0x78 }, /* GREEK SMALL LETTER XI # xi */
- { 0x03BF, 0x6F }, /* GREEK SMALL LETTER OMICRON # omicron */
- { 0x03C0, 0x70 }, /* GREEK SMALL LETTER PI # pi */
- { 0x03C1, 0x72 }, /* GREEK SMALL LETTER RHO # rho */
- { 0x03C2, 0x56 }, /* GREEK SMALL LETTER FINAL SIGMA # sigma1 */
- { 0x03C3, 0x73 }, /* GREEK SMALL LETTER SIGMA # sigma */
- { 0x03C4, 0x74 }, /* GREEK SMALL LETTER TAU # tau */
- { 0x03C5, 0x75 }, /* GREEK SMALL LETTER UPSILON # upsilon */
- { 0x03C6, 0x66 }, /* GREEK SMALL LETTER PHI # phi */
- { 0x03C7, 0x63 }, /* GREEK SMALL LETTER CHI # chi */
- { 0x03C8, 0x79 }, /* GREEK SMALL LETTER PSI # psi */
- { 0x03C9, 0x77 }, /* GREEK SMALL LETTER OMEGA # omega */
- { 0x03D1, 0x4A }, /* GREEK THETA SYMBOL # theta1 */
- { 0x03D2, 0xA1 }, /* GREEK UPSILON WITH HOOK SYMBOL # Upsilon1 */
- { 0x03D5, 0x6A }, /* GREEK PHI SYMBOL # phi1 */
- { 0x03D6, 0x76 }, /* GREEK PI SYMBOL # omega1 */
- { 0x2022, 0xB7 }, /* BULLET # bullet */
- { 0x2026, 0xBC }, /* HORIZONTAL ELLIPSIS # ellipsis */
- { 0x2032, 0xA2 }, /* PRIME # minute */
- { 0x2033, 0xB2 }, /* DOUBLE PRIME # second */
- { 0x2044, 0xA4 }, /* FRACTION SLASH # fraction */
- { 0x20AC, 0xA0 }, /* EURO SIGN # Euro */
- { 0x2111, 0xC1 }, /* BLACK-LETTER CAPITAL I # Ifraktur */
- { 0x2118, 0xC3 }, /* SCRIPT CAPITAL P # weierstrass */
- { 0x211C, 0xC2 }, /* BLACK-LETTER CAPITAL R # Rfraktur */
- { 0x2126, 0x57 }, /* OHM SIGN # Omega */
- { 0x2135, 0xC0 }, /* ALEF SYMBOL # aleph */
- { 0x2190, 0xAC }, /* LEFTWARDS ARROW # arrowleft */
- { 0x2191, 0xAD }, /* UPWARDS ARROW # arrowup */
- { 0x2192, 0xAE }, /* RIGHTWARDS ARROW # arrowright */
- { 0x2193, 0xAF }, /* DOWNWARDS ARROW # arrowdown */
- { 0x2194, 0xAB }, /* LEFT RIGHT ARROW # arrowboth */
- { 0x21B5, 0xBF }, /* DOWNWARDS ARROW WITH CORNER LEFTWARDS # carriagereturn */
- { 0x21D0, 0xDC }, /* LEFTWARDS DOUBLE ARROW # arrowdblleft */
- { 0x21D1, 0xDD }, /* UPWARDS DOUBLE ARROW # arrowdblup */
- { 0x21D2, 0xDE }, /* RIGHTWARDS DOUBLE ARROW # arrowdblright */
- { 0x21D3, 0xDF }, /* DOWNWARDS DOUBLE ARROW # arrowdbldown */
- { 0x21D4, 0xDB }, /* LEFT RIGHT DOUBLE ARROW # arrowdblboth */
- { 0x2200, 0x22 }, /* FOR ALL # universal */
- { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL # partialdiff */
- { 0x2203, 0x24 }, /* THERE EXISTS # existential */
- { 0x2205, 0xC6 }, /* EMPTY SET # emptyset */
- { 0x2206, 0x44 }, /* INCREMENT # Delta */
- { 0x2207, 0xD1 }, /* NABLA # gradient */
- { 0x2208, 0xCE }, /* ELEMENT OF # element */
- { 0x2209, 0xCF }, /* NOT AN ELEMENT OF # notelement */
- { 0x220B, 0x27 }, /* CONTAINS AS MEMBER # suchthat */
- { 0x220F, 0xD5 }, /* N-ARY PRODUCT # product */
- { 0x2211, 0xE5 }, /* N-ARY SUMMATION # summation */
- { 0x2212, 0x2D }, /* MINUS SIGN # minus */
- { 0x2215, 0xA4 }, /* DIVISION SLASH # fraction */
- { 0x2217, 0x2A }, /* ASTERISK OPERATOR # asteriskmath */
- { 0x221A, 0xD6 }, /* SQUARE ROOT # radical */
- { 0x221D, 0xB5 }, /* PROPORTIONAL TO # proportional */
- { 0x221E, 0xA5 }, /* INFINITY # infinity */
- { 0x2220, 0xD0 }, /* ANGLE # angle */
- { 0x2227, 0xD9 }, /* LOGICAL AND # logicaland */
- { 0x2228, 0xDA }, /* LOGICAL OR # logicalor */
- { 0x2229, 0xC7 }, /* INTERSECTION # intersection */
- { 0x222A, 0xC8 }, /* UNION # union */
- { 0x222B, 0xF2 }, /* INTEGRAL # integral */
- { 0x2234, 0x5C }, /* THEREFORE # therefore */
- { 0x223C, 0x7E }, /* TILDE OPERATOR # similar */
- { 0x2245, 0x40 }, /* APPROXIMATELY EQUAL TO # congruent */
- { 0x2248, 0xBB }, /* ALMOST EQUAL TO # approxequal */
- { 0x2260, 0xB9 }, /* NOT EQUAL TO # notequal */
- { 0x2261, 0xBA }, /* IDENTICAL TO # equivalence */
- { 0x2264, 0xA3 }, /* LESS-THAN OR EQUAL TO # lessequal */
- { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO # greaterequal */
- { 0x2282, 0xCC }, /* SUBSET OF # propersubset */
- { 0x2283, 0xC9 }, /* SUPERSET OF # propersuperset */
- { 0x2284, 0xCB }, /* NOT A SUBSET OF # notsubset */
- { 0x2286, 0xCD }, /* SUBSET OF OR EQUAL TO # reflexsubset */
- { 0x2287, 0xCA }, /* SUPERSET OF OR EQUAL TO # reflexsuperset */
- { 0x2295, 0xC5 }, /* CIRCLED PLUS # circleplus */
- { 0x2297, 0xC4 }, /* CIRCLED TIMES # circlemultiply */
- { 0x22A5, 0x5E }, /* UP TACK # perpendicular */
- { 0x22C5, 0xD7 }, /* DOT OPERATOR # dotmath */
- { 0x2320, 0xF3 }, /* TOP HALF INTEGRAL # integraltp */
- { 0x2321, 0xF5 }, /* BOTTOM HALF INTEGRAL # integralbt */
- { 0x2329, 0xE1 }, /* LEFT-POINTING ANGLE BRACKET # angleleft */
- { 0x232A, 0xF1 }, /* RIGHT-POINTING ANGLE BRACKET # angleright */
- { 0x25CA, 0xE0 }, /* LOZENGE # lozenge */
- { 0x2660, 0xAA }, /* BLACK SPADE SUIT # spade */
- { 0x2663, 0xA7 }, /* BLACK CLUB SUIT # club */
- { 0x2665, 0xA9 }, /* BLACK HEART SUIT # heart */
- { 0x2666, 0xA8 }, /* BLACK DIAMOND SUIT # diamond */
- { 0xF6D9, 0xD3 }, /* COPYRIGHT SIGN SERIF # copyrightserif (CUS) */
- { 0xF6DA, 0xD2 }, /* REGISTERED SIGN SERIF # registerserif (CUS) */
- { 0xF6DB, 0xD4 }, /* TRADE MARK SIGN SERIF # trademarkserif (CUS) */
- { 0xF8E5, 0x60 }, /* RADICAL EXTENDER # radicalex (CUS) */
- { 0xF8E6, 0xBD }, /* VERTICAL ARROW EXTENDER # arrowvertex (CUS) */
- { 0xF8E7, 0xBE }, /* HORIZONTAL ARROW EXTENDER # arrowhorizex (CUS) */
- { 0xF8E8, 0xE2 }, /* REGISTERED SIGN SANS SERIF # registersans (CUS) */
- { 0xF8E9, 0xE3 }, /* COPYRIGHT SIGN SANS SERIF # copyrightsans (CUS) */
- { 0xF8EA, 0xE4 }, /* TRADE MARK SIGN SANS SERIF # trademarksans (CUS) */
- { 0xF8EB, 0xE6 }, /* LEFT PAREN TOP # parenlefttp (CUS) */
- { 0xF8EC, 0xE7 }, /* LEFT PAREN EXTENDER # parenleftex (CUS) */
- { 0xF8ED, 0xE8 }, /* LEFT PAREN BOTTOM # parenleftbt (CUS) */
- { 0xF8EE, 0xE9 }, /* LEFT SQUARE BRACKET TOP # bracketlefttp (CUS) */
- { 0xF8EF, 0xEA }, /* LEFT SQUARE BRACKET EXTENDER # bracketleftex (CUS) */
- { 0xF8F0, 0xEB }, /* LEFT SQUARE BRACKET BOTTOM # bracketleftbt (CUS) */
- { 0xF8F1, 0xEC }, /* LEFT CURLY BRACKET TOP # bracelefttp (CUS) */
- { 0xF8F2, 0xED }, /* LEFT CURLY BRACKET MID # braceleftmid (CUS) */
- { 0xF8F3, 0xEE }, /* LEFT CURLY BRACKET BOTTOM # braceleftbt (CUS) */
- { 0xF8F4, 0xEF }, /* CURLY BRACKET EXTENDER # braceex (CUS) */
- { 0xF8F5, 0xF4 }, /* INTEGRAL EXTENDER # integralex (CUS) */
- { 0xF8F6, 0xF6 }, /* RIGHT PAREN TOP # parenrighttp (CUS) */
- { 0xF8F7, 0xF7 }, /* RIGHT PAREN EXTENDER # parenrightex (CUS) */
- { 0xF8F8, 0xF8 }, /* RIGHT PAREN BOTTOM # parenrightbt (CUS) */
- { 0xF8F9, 0xF9 }, /* RIGHT SQUARE BRACKET TOP # bracketrighttp (CUS) */
- { 0xF8FA, 0xFA }, /* RIGHT SQUARE BRACKET EXTENDER # bracketrightex (CUS) */
- { 0xF8FB, 0xFB }, /* RIGHT SQUARE BRACKET BOTTOM # bracketrightbt (CUS) */
- { 0xF8FC, 0xFC }, /* RIGHT CURLY BRACKET TOP # bracerighttp (CUS) */
- { 0xF8FD, 0xFD }, /* RIGHT CURLY BRACKET MID # bracerightmid (CUS) */
- { 0xF8FE, 0xFE }, /* RIGHT CURLY BRACKET BOTTOM # bracerightbt (CUS) */
-};
-
-static const FcCharMap AdobeSymbol = {
- AdobeSymbolEnt,
- sizeof (AdobeSymbolEnt) / sizeof (AdobeSymbolEnt[0]),
-};
-
-static const FcFontDecode fcFontDecoders[] = {
- { ft_encoding_unicode, 0, (1 << 21) - 1 },
- { ft_encoding_symbol, &AdobeSymbol, (1 << 16) - 1 },
- { ft_encoding_apple_roman, &AppleRoman, (1 << 16) - 1 },
-};
-
-#define NUM_DECODE (int) (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0]))
-
-static const FcChar32 prefer_unicode[] = {
- 0x20ac, /* EURO SIGN */
-};
-
-#define NUM_PREFER_UNICODE (int) (sizeof (prefer_unicode) / sizeof (prefer_unicode[0]))
-
-FcChar32
-FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map)
-{
- int low, high, mid;
- FcChar16 bmp;
-
- low = 0;
- high = map->nent - 1;
- if (ucs4 < map->ent[low].bmp || map->ent[high].bmp < ucs4)
- return ~0;
- while (low <= high)
- {
- mid = (high + low) >> 1;
- bmp = map->ent[mid].bmp;
- if (ucs4 == bmp)
- return (FT_ULong) map->ent[mid].encode;
- if (ucs4 < bmp)
- high = mid - 1;
- else
- low = mid + 1;
- }
- return ~0;
-}
-
-FcChar32
-FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map)
-{
- int i;
-
- for (i = 0; i < map->nent; i++)
- if (map->ent[i].encode == private)
- return (FcChar32) map->ent[i].bmp;
- return ~0;
-}
-
-const FcCharMap *
-FcFreeTypeGetPrivateMap (FT_Encoding encoding)
-{
- int i;
-
- for (i = 0; i < NUM_DECODE; i++)
- if (fcFontDecoders[i].encoding == encoding)
- return fcFontDecoders[i].map;
- return 0;
-}
-
-#include "../fc-glyphname/fcglyphname.h"
-
-static FcChar32
-FcHashGlyphName (const FcChar8 *name)
-{
- FcChar32 h = 0;
- FcChar8 c;
-
- while ((c = *name++))
- {
- h = ((h << 1) | (h >> 31)) ^ c;
- }
- return h;
-}
-
-#if HAVE_FT_HAS_PS_GLYPH_NAMES
-/*
- * Use Type1 glyph names for fonts which have reliable names
- * and which export an Adobe Custom mapping
- */
-static FcBool
-FcFreeTypeUseNames (FT_Face face)
-{
- FT_Int map;
-
- if (!FT_Has_PS_Glyph_Names (face))
- return FcFalse;
- for (map = 0; map < face->num_charmaps; map++)
- if (face->charmaps[map]->encoding == ft_encoding_adobe_custom)
- return FcTrue;
- return FcFalse;
-}
-
-static const FcChar8 *
-FcUcs4ToGlyphName (FcChar32 ucs4)
-{
- int i = (int) (ucs4 % FC_GLYPHNAME_HASH);
- int r = 0;
- FcGlyphId gn;
-
- while ((gn = _fc_ucs_to_name[i]) != -1)
- {
- if (_fc_glyph_names[gn].ucs == ucs4)
- return _fc_glyph_names[gn].name;
- if (!r)
- {
- r = (int) (ucs4 % FC_GLYPHNAME_REHASH);
- if (!r)
- r = 1;
- }
- i += r;
- if (i >= FC_GLYPHNAME_HASH)
- i -= FC_GLYPHNAME_HASH;
- }
- return 0;
-}
-
-static FcChar32
-FcGlyphNameToUcs4 (FcChar8 *name)
-{
- FcChar32 h = FcHashGlyphName (name);
- int i = (int) (h % FC_GLYPHNAME_HASH);
- int r = 0;
- FcGlyphId gn;
-
- while ((gn = _fc_name_to_ucs[i]) != -1)
- {
- if (!strcmp ((char *) name, (char *) _fc_glyph_names[gn].name))
- return _fc_glyph_names[gn].ucs;
- if (!r)
- {
- r = (int) (h % FC_GLYPHNAME_REHASH);
- if (!r)
- r = 1;
- }
- i += r;
- if (i >= FC_GLYPHNAME_HASH)
- i -= FC_GLYPHNAME_HASH;
- }
- return 0xffff;
-}
-
-/*
- * Work around a bug in some FreeType versions which fail
- * to correctly bounds check glyph name buffers and overwrite
- * the stack. As Postscript names have a limit of 127 characters,
- * this should be sufficient.
- */
-
-#if FC_GLYPHNAME_MAXLEN < 127
-# define FC_GLYPHNAME_BUFLEN 127
-#else
-# define FC_GLYPHNAME_BUFLEN FC_GLYPHNAME_MAXLEN
-#endif
-
-/*
- * Search through a font for a glyph by name. This is
- * currently a linear search as there doesn't appear to be
- * any defined order within the font
- */
-static FT_UInt
-FcFreeTypeGlyphNameIndex (FT_Face face, const FcChar8 *name)
-{
- FT_UInt gindex;
- FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2];
-
- for (gindex = 0; gindex < (FT_UInt) face->num_glyphs; gindex++)
- {
- if (FT_Get_Glyph_Name (face, gindex, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0)
- if (!strcmp ((char *) name, (char *) name_buf))
- return gindex;
- }
- return 0;
-}
-#endif
-
-/*
- * Map a UCS4 glyph to a glyph index. Use all available encoding
- * tables to try and find one that works. This information is expected
- * to be cached by higher levels, so performance isn't critical
- */
-
-FT_UInt
-FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4)
-{
- int initial, offset, decode;
- FT_UInt glyphindex;
- FcChar32 charcode;
- int p;
-
- initial = 0;
-
- if (!face)
- return 0;
-
- /*
- * Find the current encoding
- */
- if (face->charmap)
- {
- for (; initial < NUM_DECODE; initial++)
- if (fcFontDecoders[initial].encoding == face->charmap->encoding)
- break;
- if (initial == NUM_DECODE)
- initial = 0;
- }
- for (p = 0; p < NUM_PREFER_UNICODE; p++)
- if (ucs4 == prefer_unicode[p])
- {
- initial = 0;
- break;
- }
- /*
- * Check each encoding for the glyph, starting with the current one
- */
- for (offset = 0; offset < NUM_DECODE; offset++)
- {
- decode = (initial + offset) % NUM_DECODE;
- if (!face->charmap || face->charmap->encoding != fcFontDecoders[decode].encoding)
- if (FT_Select_Charmap (face, fcFontDecoders[decode].encoding) != 0)
- continue;
- if (fcFontDecoders[decode].map)
- {
- charcode = FcFreeTypeUcs4ToPrivate (ucs4, fcFontDecoders[decode].map);
- if (charcode == ~0U)
- continue;
- }
- else
- charcode = ucs4;
- glyphindex = FT_Get_Char_Index (face, (FT_ULong) charcode);
- if (glyphindex)
- return glyphindex;
- }
-#if HAVE_FT_HAS_PS_GLYPH_NAMES
- /*
- * Check postscript name table if present
- */
- if (FcFreeTypeUseNames (face))
- {
- const FcChar8 *name = FcUcs4ToGlyphName (ucs4);
- if (name)
- {
- glyphindex = FcFreeTypeGlyphNameIndex (face, name);
- if (glyphindex)
- return glyphindex;
- }
- }
-#endif
- return 0;
-}
-
-static FcBool
-FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4,
- FT_UInt glyph, FcBlanks *blanks,
- FT_Pos *advance,
- FcBool using_strike)
-{
- FT_Int load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING;
- FT_GlyphSlot slot;
-
- if (using_strike)
- load_flags &= ~FT_LOAD_NO_SCALE;
-
- /*
- * When using scalable fonts, only report those glyphs
- * which can be scaled; otherwise those fonts will
- * only be available at some sizes, and never when
- * transformed. Avoid this by simply reporting bitmap-only
- * glyphs as missing
- */
- if (face->face_flags & FT_FACE_FLAG_SCALABLE)
- load_flags |= FT_LOAD_NO_BITMAP;
-
- if (FT_Load_Glyph (face, glyph, load_flags))
- return FcFalse;
-
- slot = face->glyph;
- if (!glyph)
- return FcFalse;
-
- *advance = slot->metrics.horiAdvance;
-
- switch (slot->format) {
- case ft_glyph_format_bitmap:
- /*
- * Bitmaps are assumed to be reasonable; if
- * this proves to be a rash assumption, this
- * code can be easily modified
- */
- return FcTrue;
- case ft_glyph_format_outline:
- /*
- * Glyphs with contours are always OK
- */
- if (slot->outline.n_contours != 0)
- return FcTrue;
- /*
- * Glyphs with no contours are only OK if
- * they're members of the Blanks set specified
- * in the configuration. If blanks isn't set,
- * then allow any glyph to be blank
- */
- if (!blanks || FcBlanksIsMember (blanks, ucs4))
- return FcTrue;
- /* fall through ... */
- default:
- break;
- }
- return FcFalse;
-}
-
-#define APPROXIMATELY_EQUAL(x,y) (FC_ABS ((x) - (y)) <= FC_MAX (FC_ABS (x), FC_ABS (y)) / 33)
-
-static FcCharSet *
-FcFreeTypeCharSetAndSpacingForSize (FT_Face face, FcBlanks *blanks, int *spacing, FT_Int strike_index)
-{
- FcChar32 page, off, ucs4;
-#ifdef CHECK
- FcChar32 font_max = 0;
-#endif
- FcCharSet *fcs;
- FcCharLeaf *leaf;
- const FcCharMap *map;
- int o;
- int i;
- FT_UInt glyph;
- FT_Pos advance, advance_one = 0, advance_two = 0;
- FcBool has_advance = FcFalse, fixed_advance = FcTrue, dual_advance = FcFalse;
- FcBool using_strike = FcFalse;
-
- fcs = FcCharSetCreate ();
- if (!fcs)
- goto bail0;
-
-#if HAVE_FT_SELECT_SIZE
- if (strike_index >= 0) {
- if (FT_Select_Size (face, strike_index) != FT_Err_Ok)
- goto bail1;
- using_strike = FcTrue;
- }
-#endif
-
-#ifdef CHECK
- printf ("Family %s style %s\n", face->family_name, face->style_name);
-#endif
- for (o = 0; o < NUM_DECODE; o++)
- {
- if (FT_Select_Charmap (face, fcFontDecoders[o].encoding) != 0)
- continue;
- map = fcFontDecoders[o].map;
- if (map)
- {
- /*
- * Non-Unicode tables are easy; there's a list of all possible
- * characters
- */
- for (i = 0; i < map->nent; i++)
- {
- ucs4 = map->ent[i].bmp;
- glyph = FT_Get_Char_Index (face, map->ent[i].encode);
- if (glyph &&
- FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
- {
- /*
- * ignore glyphs with zero advance. They’re
- * combining characters, and while their behaviour
- * isn’t well defined for monospaced applications in
- * Unicode, there are many fonts which include
- * zero-width combining characters in otherwise
- * monospaced fonts.
- */
- if (advance)
- {
- if (!has_advance)
- {
- has_advance = FcTrue;
- advance_one = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_one))
- {
- if (fixed_advance)
- {
- dual_advance = FcTrue;
- fixed_advance = FcFalse;
- advance_two = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_two))
- dual_advance = FcFalse;
- }
- }
-
- leaf = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!leaf)
- goto bail1;
- leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f));
-#ifdef CHECK
- if (ucs4 > font_max)
- font_max = ucs4;
-#endif
- }
- }
- }
- else
- {
- page = ~0;
- leaf = NULL;
- ucs4 = FT_Get_First_Char (face, &glyph);
- while (glyph != 0)
- {
- if (FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
- {
- if (advance)
- {
- if (!has_advance)
- {
- has_advance = FcTrue;
- advance_one = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_one))
- {
- if (fixed_advance)
- {
- dual_advance = FcTrue;
- fixed_advance = FcFalse;
- advance_two = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_two))
- dual_advance = FcFalse;
- }
- }
-
- if ((ucs4 >> 8) != page)
- {
- page = (ucs4 >> 8);
- leaf = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!leaf)
- goto bail1;
- }
- off = ucs4 & 0xff;
- leaf->map[off >> 5] |= (1 << (off & 0x1f));
-#ifdef CHECK
- if (ucs4 > font_max)
- font_max = ucs4;
-#endif
- }
- ucs4 = FT_Get_Next_Char (face, ucs4, &glyph);
- }
-#ifdef CHECK
- for (ucs4 = 0; ucs4 < 0x10000; ucs4++)
- {
- FcBool FT_Has, FC_Has;
-
- FT_Has = FT_Get_Char_Index (face, ucs4) != 0;
- FC_Has = FcCharSetHasChar (fcs, ucs4);
- if (FT_Has != FC_Has)
- {
- printf ("0x%08x FT says %d FC says %d\n", ucs4, FT_Has, FC_Has);
- }
- }
-#endif
- }
- }
-#if HAVE_FT_HAS_PS_GLYPH_NAMES
- /*
- * Add mapping from PS glyph names if available
- */
- if (FcFreeTypeUseNames (face))
- {
- FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2];
-
- for (glyph = 0; glyph < (FT_UInt) face->num_glyphs; glyph++)
- {
- if (FT_Get_Glyph_Name (face, glyph, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0)
- {
- ucs4 = FcGlyphNameToUcs4 (name_buf);
- if (ucs4 != 0xffff &&
- FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
- {
- if (advance)
- {
- if (!has_advance)
- {
- has_advance = FcTrue;
- advance_one = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_one))
- {
- if (fixed_advance)
- {
- dual_advance = FcTrue;
- fixed_advance = FcFalse;
- advance_two = advance;
- }
- else if (!APPROXIMATELY_EQUAL (advance, advance_two))
- dual_advance = FcFalse;
- }
- }
- leaf = FcCharSetFindLeafCreate (fcs, ucs4);
- if (!leaf)
- goto bail1;
- leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f));
-#ifdef CHECK
- if (ucs4 > font_max)
- font_max = ucs4;
-#endif
- }
- }
- }
- }
-#endif
-#ifdef CHECK
- printf ("%d glyphs %d encoded\n", (int) face->num_glyphs, FcCharSetCount (fcs));
- for (ucs4 = 0; ucs4 <= font_max; ucs4++)
- {
- FcBool has_char = (glyph = FcFreeTypeCharIndex (face, ucs4)) != 0;
- FcBool has_bit = FcCharSetHasChar (fcs, ucs4);
-
- if (has_char && !has_bit)
- {
- if (!FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike))
- printf ("Bitmap missing broken char 0x%x\n", ucs4);
- else
- printf ("Bitmap missing char 0x%x\n", ucs4);
- }
- else if (!has_char && has_bit)
- printf ("Bitmap extra char 0x%x\n", ucs4);
- }
-#endif
- if (fixed_advance)
- *spacing = FC_MONO;
- else if (dual_advance && APPROXIMATELY_EQUAL (2 * FC_MIN (advance_one, advance_two), FC_MAX (advance_one, advance_two)))
- *spacing = FC_DUAL;
- else
- *spacing = FC_PROPORTIONAL;
- return fcs;
-bail1:
- FcCharSetDestroy (fcs);
-bail0:
- return 0;
-}
-
-FcCharSet *
-FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing)
-{
- FcCharSet *cs;
-
- cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, -1);
- /*
- * Check for bitmap-only ttf fonts that are missing the glyf table.
- * In that case, pick a size and look for glyphs in that size instead
- */
- if (FcCharSetCount (cs) == 0)
- {
- /* Check for non-scalable TT fonts */
- if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) &&
- face->num_fixed_sizes > 0 &&
- FT_Get_Sfnt_Table (face, ft_sfnt_head))
- {
- FT_Int strike_index = 0;
- int i;
-
- /* Select the face closest to 16 pixels tall */
- for (i = 1; i < face->num_fixed_sizes; i++) {
- if (abs (face->available_sizes[i].height - 16) <
- abs (face->available_sizes[strike_index].height - 16))
- strike_index = i;
- }
- FcCharSetDestroy (cs);
- cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, strike_index);
- }
- }
- return cs;
-}
-
-FcCharSet *
-FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks)
-{
- int spacing;
-
- return FcFreeTypeCharSetAndSpacing (face, blanks, &spacing);
-}
-
-
-#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' )
-#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' )
-#define TTAG_SILF FT_MAKE_TAG( 'S', 'i', 'l', 'f')
-
-#define OTLAYOUT_HEAD "otlayout:"
-#define OTLAYOUT_HEAD_LEN 9
-#define OTLAYOUT_ID_LEN 4
-/* space + head + id */
-#define OTLAYOUT_LEN (1 + OTLAYOUT_HEAD_LEN + OTLAYOUT_ID_LEN)
-
-/*
- * This is a bit generous; the registry has only lower case and space
- * except for 'DFLT'.
- */
-#define FcIsSpace(x) (040 == (x))
-#define FcIsValidScript(x) (FcIsLower(x) || FcIsUpper (x) || FcIsSpace(x))
-
-static void
-addtag(FcChar8 *complex_, FT_ULong tag)
-{
- FcChar8 tagstring[OTLAYOUT_ID_LEN + 1];
-
- tagstring[0] = (FcChar8)(tag >> 24),
- tagstring[1] = (FcChar8)(tag >> 16),
- tagstring[2] = (FcChar8)(tag >> 8),
- tagstring[3] = (FcChar8)(tag);
- tagstring[4] = '\0';
-
- /* skip tags which aren't alphabetic, under the assumption that
- * they're probably broken
- */
- if (!FcIsValidScript(tagstring[0]) ||
- !FcIsValidScript(tagstring[1]) ||
- !FcIsValidScript(tagstring[2]) ||
- !FcIsValidScript(tagstring[3]))
- return;
-
- if (*complex_ != '\0')
- strcat ((char *) complex_, " ");
- strcat ((char *) complex_, "otlayout:");
- strcat ((char *) complex_, (char *) tagstring);
-}
-
-static int
-compareulong (const void *a, const void *b)
-{
- const FT_ULong *ua = (const FT_ULong *) a;
- const FT_ULong *ub = (const FT_ULong *) b;
- return *ua - *ub;
-}
-
-
-static int
-GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags)
-{
- FT_ULong cur_offset, new_offset, base_offset;
- FT_Stream stream = face->stream;
- FT_Error error;
- FT_UShort n, p;
- FT_Memory memory;
- int script_count;
-
- if (!stream)
- return 0;
-
- memory = stream->memory;
-
- if (( error = ftglue_face_goto_table( face, tabletag, stream ) ))
- return 0;
-
- base_offset = ftglue_stream_pos ( stream );
-
- /* skip version */
-
- if ( ftglue_stream_seek ( stream, base_offset + 4L ) || ftglue_stream_frame_enter( stream, 2L ) )
- return 0;
-
- new_offset = GET_UShort() + base_offset;
-
- ftglue_stream_frame_exit( stream );
-
- cur_offset = ftglue_stream_pos( stream );
-
- if ( ftglue_stream_seek( stream, new_offset ) != FT_Err_Ok )
- return 0;
-
- base_offset = ftglue_stream_pos( stream );
-
- if ( ftglue_stream_frame_enter( stream, 2L ) )
- return 0;
-
- script_count = GET_UShort ();
-
- ftglue_stream_frame_exit( stream );
-
- *stags = malloc(script_count * sizeof (FT_ULong));
- if (!stags)
- return 0;
-
- p = 0;
- for ( n = 0; n < script_count; n++ )
- {
- if ( ftglue_stream_frame_enter( stream, 6L ) )
- goto Fail;
-
- (*stags)[p] = GET_ULong ();
- new_offset = GET_UShort () + base_offset;
-
- ftglue_stream_frame_exit( stream );
-
- cur_offset = ftglue_stream_pos( stream );
-
- error = ftglue_stream_seek( stream, new_offset );
-
- if ( error == FT_Err_Ok )
- p++;
-
- (void)ftglue_stream_seek( stream, cur_offset );
- }
-
- if (!p)
- goto Fail;
-
- /* sort the tag list before returning it */
- qsort(*stags, script_count, sizeof(FT_ULong), compareulong);
-
- return script_count;
-
-Fail:
- free(*stags);
- *stags = NULL;
- return 0;
-}
-
-static FcChar8 *
-FcFontCapabilities(FT_Face face)
-{
- FcBool issilgraphitefont = 0;
- FT_Error err;
- FT_ULong len = 0;
- FT_ULong *gsubtags=NULL, *gpostags=NULL;
- FT_UShort gsub_count=0, gpos_count=0;
- FT_ULong maxsize;
- FcChar8 *complex_ = NULL;
- int indx1 = 0, indx2 = 0;
-
- err = FT_Load_Sfnt_Table(face, TTAG_SILF, 0, 0, &len);
- issilgraphitefont = ( err == FT_Err_Ok);
-
- gpos_count = GetScriptTags(face, TTAG_GPOS, &gpostags);
- gsub_count = GetScriptTags(face, TTAG_GSUB, &gsubtags);
-
- if (!issilgraphitefont && !gsub_count && !gpos_count)
- goto bail;
-
- maxsize = (((FT_ULong) gpos_count + (FT_ULong) gsub_count) * OTLAYOUT_LEN +
- (issilgraphitefont ? 13 : 0));
- complex_ = malloc (sizeof (FcChar8) * maxsize);
- if (!complex_)
- goto bail;
-
- complex_[0] = '\0';
- if (issilgraphitefont)
- strcpy((char *) complex_, "ttable:Silf ");
-
- while ((indx1 < gsub_count) || (indx2 < gpos_count)) {
- if (indx1 == gsub_count) {
- addtag(complex_, gpostags[indx2]);
- indx2++;
- } else if ((indx2 == gpos_count) || (gsubtags[indx1] < gpostags[indx2])) {
- addtag(complex_, gsubtags[indx1]);
- indx1++;
- } else if (gsubtags[indx1] == gpostags[indx2]) {
- addtag(complex_, gsubtags[indx1]);
- indx1++;
- indx2++;
- } else {
- addtag(complex_, gpostags[indx2]);
- indx2++;
- }
- }
- if (FcDebug () & FC_DBG_SCANV)
- printf("complex_ features in this font: %s\n", complex_);
-bail:
- free(gsubtags);
- free(gpostags);
- return complex_;
-}
-
-#define __fcfreetype__
-#include "fcaliastail.h"
-#include "fcftaliastail.h"
-#undef __fcfreetype__
+/* + * fontconfig/src/fcfreetype.c + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + Copyright © 2002-2003 by Juliusz Chroboczek + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + THE SOFTWARE. +*/ + +#include "fcint.h" +#include "fcftint.h" +#include <stdlib.h> +#include <stdio.h> +#include <string.h> +#include <ft2build.h> +#include FT_FREETYPE_H +#include FT_TRUETYPE_TABLES_H +#include FT_SFNT_NAMES_H +#include FT_TRUETYPE_IDS_H +#include FT_TYPE1_TABLES_H +#if HAVE_FT_GET_X11_FONT_FORMAT +#include FT_XFREE86_H +#endif +#if HAVE_FT_GET_BDF_PROPERTY +#include FT_BDF_H +#include FT_MODULE_H +#endif + +#include "ftglue.h" + +#if HAVE_WARNING_CPP_DIRECTIVE +#if !HAVE_FT_GET_BDF_PROPERTY +#warning "No FT_Get_BDF_Property: Please install freetype 2.1.4 or later" +#endif + +#if !HAVE_FT_GET_PS_FONT_INFO +#warning "No FT_Get_PS_Font_Info: Please install freetype 2.1.1 or later" +#endif +#endif + +/* + * Keep Han languages separated by eliminating languages + * that the codePageRange bits says aren't supported + */ + +static const struct { + char bit; + const FcChar8 lang[6]; +} FcCodePageRange[] = { + { 17, "ja" }, + { 18, "zh-cn" }, + { 19, "ko" }, + { 20, "zh-tw" }, +}; + +#define NUM_CODE_PAGE_RANGE (int) (sizeof FcCodePageRange / sizeof FcCodePageRange[0]) + +FcBool +FcFreeTypeIsExclusiveLang (const FcChar8 *lang) +{ + int i; + + for (i = 0; i < NUM_CODE_PAGE_RANGE; i++) + { + if (FcLangCompare (lang, FcCodePageRange[i].lang) == FcLangEqual) + return FcTrue; + } + return FcFalse; +} + +typedef struct { + const FT_UShort platform_id; + const FT_UShort encoding_id; + const char fromcode[12]; +} FcFtEncoding; + +#define TT_ENCODING_DONT_CARE 0xffff +#define FC_ENCODING_MAC_ROMAN "MACINTOSH" + +static const FcFtEncoding fcFtEncoding[] = { + { TT_PLATFORM_APPLE_UNICODE, TT_ENCODING_DONT_CARE, "UTF-16BE" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, "MACINTOSH" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_ID_JAPANESE, "SJIS" }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_SYMBOL_CS, "UTF-16BE" }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_UNICODE_CS, "UTF-16BE" }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_SJIS, "SJIS-WIN" }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_GB2312, "GB2312" }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_BIG_5, "BIG-5" }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_WANSUNG, "Wansung" }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_JOHAB, "Johab" }, + { TT_PLATFORM_MICROSOFT, TT_MS_ID_UCS_4, "UTF-16BE" }, + { TT_PLATFORM_ISO, TT_ISO_ID_7BIT_ASCII, "ASCII" }, + { TT_PLATFORM_ISO, TT_ISO_ID_10646, "UTF-16BE" }, + { TT_PLATFORM_ISO, TT_ISO_ID_8859_1, "ISO-8859-1" }, +}; + +#define NUM_FC_FT_ENCODING (int) (sizeof (fcFtEncoding) / sizeof (fcFtEncoding[0])) + +typedef struct { + const FT_UShort platform_id; + const FT_UShort language_id; + const char lang[8]; +} FcFtLanguage; + +#define TT_LANGUAGE_DONT_CARE 0xffff + +static const FcFtLanguage fcFtLanguage[] = { + { TT_PLATFORM_APPLE_UNICODE, TT_LANGUAGE_DONT_CARE, "" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ENGLISH, "en" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FRENCH, "fr" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GERMAN, "de" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ITALIAN, "it" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DUTCH, "nl" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWEDISH, "sv" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SPANISH, "es" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DANISH, "da" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PORTUGUESE, "pt" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NORWEGIAN, "no" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HEBREW, "he" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAPANESE, "ja" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARABIC, "ar" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FINNISH, "fi" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK, "el" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ICELANDIC, "is" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALTESE, "mt" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKISH, "tr" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CROATIAN, "hr" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_TRADITIONAL, "zh-tw" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_URDU, "ur" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HINDI, "hi" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_THAI, "th" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KOREAN, "ko" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LITHUANIAN, "lt" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_POLISH, "pl" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_HUNGARIAN, "hu" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESTONIAN, "et" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LETTISH, "lv" }, +/* { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SAAMISK, ??? */ + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FAEROESE, "fo" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FARSI, "fa" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUSSIAN, "ru" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHINESE_SIMPLIFIED, "zh-cn" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_FLEMISH, "nl" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH, "ga" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ALBANIAN, "sq" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ROMANIAN, "ro" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CZECH, "cs" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVAK, "sk" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SLOVENIAN, "sl" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_YIDDISH, "yi" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SERBIAN, "sr" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MACEDONIAN, "mk" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BULGARIAN, "bg" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UKRAINIAN, "uk" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BYELORUSSIAN, "be" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UZBEK, "uz" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KAZAKH, "kk" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI, "az" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_CYRILLIC_SCRIPT, "az" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ARABIC_SCRIPT, "ar" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ARMENIAN, "hy" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GEORGIAN, "ka" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MOLDAVIAN, "mo" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KIRGHIZ, "ky" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAJIKI, "tg" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TURKMEN, "tk" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN, "mo" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_MONGOLIAN_SCRIPT,"mo" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MONGOLIAN_CYRILLIC_SCRIPT, "mo" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PASHTO, "ps" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KURDISH, "ku" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KASHMIRI, "ks" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINDHI, "sd" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIBETAN, "bo" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_NEPALI, "ne" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SANSKRIT, "sa" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MARATHI, "mr" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BENGALI, "bn" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ASSAMESE, "as" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUJARATI, "gu" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_PUNJABI, "pa" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ORIYA, "or" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAYALAM, "ml" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KANNADA, "kn" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAMIL, "ta" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TELUGU, "te" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SINHALESE, "si" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BURMESE, "my" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_KHMER, "km" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LAO, "lo" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_VIETNAMESE, "vi" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INDONESIAN, "id" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TAGALOG, "tl" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ROMAN_SCRIPT, "ms" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAY_ARABIC_SCRIPT, "ms" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AMHARIC, "am" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TIGRINYA, "ti" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALLA, "om" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SOMALI, "so" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SWAHILI, "sw" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUANDA, "rw" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_RUNDI, "rn" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CHEWA, "ny" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MALAGASY, "mg" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_ESPERANTO, "eo" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_WELSH, "cy" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BASQUE, "eu" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_CATALAN, "ca" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_LATIN, "la" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_QUECHUA, "qu" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GUARANI, "gn" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AYMARA, "ay" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TATAR, "tt" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_UIGHUR, "ug" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_DZONGKHA, "dz" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_JAVANESE, "jw" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SUNDANESE, "su" }, + +#if 0 /* these seem to be errors that have been dropped */ + + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC }, + +#endif + + /* The following codes are new as of 2000-03-10 */ + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GALICIAN, "gl" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AFRIKAANS, "af" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_BRETON, "br" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_INUKTITUT, "iu" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_SCOTTISH_GAELIC, "gd" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_MANX_GAELIC, "gv" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_IRISH_GAELIC, "ga" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_TONGAN, "to" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREEK_POLYTONIC, "el" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_GREELANDIC, "ik" }, + { TT_PLATFORM_MACINTOSH, TT_MAC_LANGID_AZERBAIJANI_ROMAN_SCRIPT,"az" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SAUDI_ARABIA, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_IRAQ, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_EGYPT, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LIBYA, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_ALGERIA, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_MOROCCO, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_TUNISIA, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_OMAN, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_YEMEN, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_SYRIA, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_JORDAN, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_LEBANON, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_KUWAIT, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_UAE, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_BAHRAIN, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_QATAR, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BULGARIAN_BULGARIA, "bg" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CATALAN_SPAIN, "ca" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_TAIWAN, "zh-tw" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_PRC, "zh-cn" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_HONG_KONG, "zh-hk" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_SINGAPORE, "zh-sg" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_MACAU, "zh-mo" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CZECH_CZECH_REPUBLIC, "cs" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DANISH_DENMARK, "da" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_GERMANY, "de" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_SWITZERLAND, "de" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_AUSTRIA, "de" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LUXEMBOURG, "de" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GERMAN_LIECHTENSTEI, "de" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE, "el" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_STATES, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_UNITED_KINGDOM, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_AUSTRALIA, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CANADA, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_NEW_ZEALAND, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_IRELAND, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SOUTH_AFRICA, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_JAMAICA, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_CARIBBEAN, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_BELIZE, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_TRINIDAD, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_ZIMBABWE, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_PHILIPPINES, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_TRADITIONAL_SORT,"es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_MEXICO, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_SPAIN_INTERNATIONAL_SORT,"es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_GUATEMALA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COSTA_RICA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PANAMA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_DOMINICAN_REPUBLIC,"es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_VENEZUELA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_COLOMBIA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PERU, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ARGENTINA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_ECUADOR, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_CHILE, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_URUGUAY, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PARAGUAY, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_BOLIVIA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_EL_SALVADOR, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_HONDURAS, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_NICARAGUA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_PUERTO_RICO, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FINNISH_FINLAND, "fi" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_FRANCE, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_BELGIUM, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CANADA, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SWITZERLAND, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_LUXEMBOURG, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MONACO, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HEBREW_ISRAEL, "he" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HUNGARIAN_HUNGARY, "hu" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ICELANDIC_ICELAND, "is" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_ITALY, "it" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ITALIAN_SWITZERLAND, "it" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_JAPANESE_JAPAN, "ja" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_EXTENDED_WANSUNG_KOREA,"ko" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KOREAN_JOHAB_KOREA, "ko" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_NETHERLANDS, "nl" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DUTCH_BELGIUM, "nl" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_BOKMAL, "no" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NORWEGIAN_NORWAY_NYNORSK, "nn" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_POLISH_POLAND, "pl" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_BRAZIL, "pt" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PORTUGUESE_PORTUGAL, "pt" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RHAETO_ROMANIC_SWITZERLAND,"rm" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ROMANIAN_ROMANIA, "ro" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MOLDAVIAN_MOLDAVIA, "mo" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_RUSSIA, "ru" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_RUSSIAN_MOLDAVIA, "ru" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CROATIAN_CROATIA, "hr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_LATIN, "sr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SERBIAN_SERBIA_CYRILLIC, "sr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVAK_SLOVAKIA, "sk" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ALBANIAN_ALBANIA, "sq" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_SWEDEN, "sv" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWEDISH_FINLAND, "sv" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_THAI_THAILAND, "th" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKISH_TURKEY, "tr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_PAKISTAN, "ur" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INDONESIAN_INDONESIA, "id" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UKRAINIAN_UKRAINE, "uk" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BELARUSIAN_BELARUS, "be" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SLOVENE_SLOVENIA, "sl" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ESTONIAN_ESTONIA, "et" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATVIAN_LATVIA, "lv" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LITHUANIAN_LITHUANIA, "lt" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CLASSIC_LITHUANIAN_LITHUANIA,"lt" }, + +#ifdef TT_MS_LANGID_MAORI_NEW_ZELAND + /* this seems to be an error that have been dropped */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MAORI_NEW_ZEALAND, "mi" }, +#endif + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FARSI_IRAN, "fa" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VIETNAMESE_VIET_NAM, "vi" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARMENIAN_ARMENIA, "hy" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_LATIN, "az" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AZERI_AZERBAIJAN_CYRILLIC, "az" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BASQUE_SPAIN, "eu" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SORBIAN_GERMANY, "wen" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MACEDONIAN_MACEDONIA, "mk" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SUTU_SOUTH_AFRICA, "st" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSONGA_SOUTH_AFRICA, "ts" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TSWANA_SOUTH_AFRICA, "tn" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_VENDA_SOUTH_AFRICA, "ven" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_XHOSA_SOUTH_AFRICA, "xh" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ZULU_SOUTH_AFRICA, "zu" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AFRIKAANS_SOUTH_AFRICA, "af" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GEORGIAN_GEORGIA, "ka" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FAEROESE_FAEROE_ISLANDS, "fo" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HINDI_INDIA, "hi" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALTESE_MALTA, "mt" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SAAMI_LAPONIA, "se" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SCOTTISH_GAELIC_UNITED_KINGDOM,"gd" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IRISH_GAELIC_IRELAND, "ga" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_MALAYSIA, "ms" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAY_BRUNEI_DARUSSALAM, "ms" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KAZAK_KAZAKSTAN, "kk" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SWAHILI_KENYA, "sw" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_LATIN, "uz" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_UZBEK_UZBEKISTAN_CYRILLIC, "uz" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TATAR_TATARSTAN, "tt" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_INDIA, "bn" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_INDIA, "pa" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUJARATI_INDIA, "gu" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ORIYA_INDIA, "or" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMIL_INDIA, "ta" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TELUGU_INDIA, "te" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANNADA_INDIA, "kn" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MALAYALAM_INDIA, "ml" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ASSAMESE_INDIA, "as" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MARATHI_INDIA, "mr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SANSKRIT_INDIA, "sa" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KONKANI_INDIA, "kok" }, + + /* new as of 2001-01-01 */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ARABIC_GENERAL, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHINESE_GENERAL, "zh" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_GENERAL, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_WEST_INDIES, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_REUNION, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CONGO, "fr" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_SENEGAL, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_CAMEROON, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_COTE_D_IVOIRE, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MALI, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BOSNIAN_BOSNIA_HERZEGOVINA,"bs" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_URDU_INDIA, "ur" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAJIK_TAJIKISTAN, "tg" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YIDDISH_GERMANY, "yi" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KIRGHIZ_KIRGHIZSTAN, "ky" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TURKMEN_TURKMENISTAN, "tk" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA, "mn" }, + + /* the following seems to be inconsistent; + here is the current "official" way: */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_BHUTAN, "bo" }, + /* and here is what is used by Passport SDK */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIBETAN_CHINA, "bo" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DZONGHKA_BHUTAN, "dz" }, + /* end of inconsistency */ + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_WELSH_WALES, "cy" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KHMER_CAMBODIA, "km" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LAO_LAOS, "lo" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BURMESE_MYANMAR, "my" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GALICIAN_SPAIN, "gl" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MANIPURI_INDIA, "mni" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINDHI_INDIA, "sd" }, + /* the following one is only encountered in Microsoft RTF specification */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_PAKISTAN, "ks" }, + /* the following one is not in the Passport list, looks like an omission */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KASHMIRI_INDIA, "ks" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_NEPAL, "ne" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_NEPALI_INDIA, "ne" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRISIAN_NETHERLANDS, "fy" }, + + /* new as of 2001-03-01 (from Office Xp) */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_HONG_KONG, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_INDIA, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_MALAYSIA, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_ENGLISH_SINGAPORE, "en" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SYRIAC_SYRIA, "syr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SINHALESE_SRI_LANKA, "si" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_CHEROKEE_UNITED_STATES, "chr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_INUKTITUT_CANADA, "iu" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_AMHARIC_ETHIOPIA, "am" }, +#if 0 + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TAMAZIGHT_MOROCCO_LATIN }, +#endif + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PASHTO_AFGHANISTAN, "ps" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FILIPINO_PHILIPPINES, "phi" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_DHIVEHI_MALDIVES, "div" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_OROMO_ETHIOPIA, "om" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ETHIOPIA, "ti" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_TIGRIGNA_ERYTHREA, "ti" }, + + /* New additions from Windows Xp/Passport SDK 2001-11-10. */ + + /* don't ask what this one means... It is commented out currently. */ +#if 0 + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GREEK_GREECE2 }, +#endif + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_UNITED_STATES, "es" }, + /* The following two IDs blatantly violate MS specs by using a */ + /* sublanguage >,. */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SPANISH_LATIN_AMERICA, "es" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_NORTH_AFRICA, "fr" }, + + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_MOROCCO, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FRENCH_HAITI, "fr" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_BENGALI_BANGLADESH, "bn" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PUNJABI_ARABIC_PAKISTAN, "ar" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_MONGOLIAN_MONGOLIA_MONGOLIAN,"mn" }, +#if 0 + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_EDO_NIGERIA }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_FULFULDE_NIGERIA }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IBIBIO_NIGERIA }, +#endif + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAUSA_NIGERIA, "ha" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YORUBA_NIGERIA, "yo" }, + /* language codes from, to, are (still) unknown. */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_IGBO_NIGERIA, "ibo" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_KANURI_NIGERIA, "kau" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_GUARANI_PARAGUAY, "gn" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_HAWAIIAN_UNITED_STATES, "haw" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_LATIN, "la" }, + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_SOMALI_SOMALIA, "so" }, +#if 0 + /* Note: Yi does not have a (proper) ISO 639-2 code, since it is mostly */ + /* not written (but OTOH the peculiar writing system is worth */ + /* studying). */ + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_YI_CHINA }, +#endif + { TT_PLATFORM_MICROSOFT, TT_MS_LANGID_PAPIAMENTU_NETHERLANDS_ANTILLES,"pap" }, +}; + +#define NUM_FC_FT_LANGUAGE (int) (sizeof (fcFtLanguage) / sizeof (fcFtLanguage[0])) + +typedef struct { + FT_UShort language_id; + char fromcode[12]; +} FcMacRomanFake; + +static const FcMacRomanFake fcMacRomanFake[] = { + { TT_MS_LANGID_JAPANESE_JAPAN, "SJIS-WIN" }, + { TT_MS_LANGID_ENGLISH_UNITED_STATES, "ASCII" }, +}; + +static FcChar8 * +FcFontCapabilities(FT_Face face); + +#define NUM_FC_MAC_ROMAN_FAKE (int) (sizeof (fcMacRomanFake) / sizeof (fcMacRomanFake[0])) + +#if USE_ICONV +#include <iconv.h> +#endif + +/* + * A shift-JIS will have many high bits turned on + */ +static FcBool +FcLooksLikeSJIS (FcChar8 *string, int len) +{ + int nhigh = 0, nlow = 0; + + while (len-- > 0) + { + if (*string++ & 0x80) nhigh++; + else nlow++; + } + /* + * Heuristic -- if more than 1/3 of the bytes have the high-bit set, + * this is likely to be SJIS and not ROMAN + */ + if (nhigh * 2 > nlow) + return FcTrue; + return FcFalse; +} + +static FcChar8 * +FcSfntNameTranscode (FT_SfntName *sname) +{ + int i; + const char *fromcode; +#if USE_ICONV + iconv_t cd; +#endif + FcChar8 *utf8; + + for (i = 0; i < NUM_FC_FT_ENCODING; i++) + if (fcFtEncoding[i].platform_id == sname->platform_id && + (fcFtEncoding[i].encoding_id == TT_ENCODING_DONT_CARE || + fcFtEncoding[i].encoding_id == sname->encoding_id)) + break; + if (i == NUM_FC_FT_ENCODING) + return 0; + fromcode = fcFtEncoding[i].fromcode; + + /* + * Many names encoded for TT_PLATFORM_MACINTOSH are broken + * in various ways. Kludge around them. + */ + if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN)) + { + if (sname->language_id == TT_MAC_LANGID_ENGLISH && + FcLooksLikeSJIS (sname->string, sname->string_len)) + { + fromcode = "SJIS"; + } + else if (sname->language_id >= 0x100) + { + /* + * "real" Mac language IDs are all less than 150. + * Names using one of the MS language IDs are assumed + * to use an associated encoding (Yes, this is a kludge) + */ + int f; + + fromcode = NULL; + for (f = 0; f < NUM_FC_MAC_ROMAN_FAKE; f++) + if (fcMacRomanFake[f].language_id == sname->language_id) + { + fromcode = fcMacRomanFake[f].fromcode; + break; + } + if (!fromcode) + return 0; + } + } + if (!strcmp (fromcode, "UCS-2BE") || !strcmp (fromcode, "UTF-16BE")) + { + FcChar8 *src = sname->string; + int src_len = sname->string_len; + int len; + int wchar; + int ilen, olen; + FcChar8 *u8; + FcChar32 ucs4; + + /* + * Convert Utf16 to Utf8 + */ + + if (!FcUtf16Len (src, FcEndianBig, src_len, &len, &wchar)) + return 0; + + /* + * Allocate plenty of space. Freed below + */ + utf8 = malloc (len * FC_UTF8_MAX_LEN + 1); + if (!utf8) + return 0; + + u8 = utf8; + + while ((ilen = FcUtf16ToUcs4 (src, FcEndianBig, &ucs4, src_len)) > 0) + { + src_len -= ilen; + src += ilen; + olen = FcUcs4ToUtf8 (ucs4, u8); + u8 += olen; + } + *u8 = '\0'; + goto done; + } + if (!strcmp (fromcode, "ASCII") || !strcmp (fromcode, "ISO-8859-1")) + { + FcChar8 *src = sname->string; + int src_len = sname->string_len; + int olen; + FcChar8 *u8; + FcChar32 ucs4; + + /* + * Convert Latin1 to Utf8. Freed below + */ + utf8 = malloc (src_len * 2 + 1); + if (!utf8) + return 0; + + u8 = utf8; + while (src_len > 0) + { + ucs4 = *src++; + src_len--; + olen = FcUcs4ToUtf8 (ucs4, u8); + u8 += olen; + } + *u8 = '\0'; + goto done; + } + if (!strcmp (fromcode, FC_ENCODING_MAC_ROMAN)) + { + FcChar8 *u8; + const FcCharMap *map = FcFreeTypeGetPrivateMap (ft_encoding_apple_roman); + FcChar8 *src = (FcChar8 *) sname->string; + int src_len = sname->string_len; + + /* + * Convert AppleRoman to Utf8 + */ + if (!map) + return 0; + + utf8 = malloc (sname->string_len * 3 + 1); + if (!utf8) + return 0; + + u8 = utf8; + while (src_len > 0) + { + FcChar32 ucs4 = FcFreeTypePrivateToUcs4 (*src++, map); + int olen = FcUcs4ToUtf8 (ucs4, u8); + src_len--; + u8 += olen; + } + *u8 = '\0'; + goto done; + } +#if USE_ICONV + cd = iconv_open ("UTF-8", fromcode); + if (cd && cd != (iconv_t) (-1)) + { + size_t in_bytes_left = sname->string_len; + size_t out_bytes_left = sname->string_len * FC_UTF8_MAX_LEN; + char *inbuf, *outbuf; + + utf8 = malloc (out_bytes_left + 1); + if (!utf8) + { + iconv_close (cd); + return 0; + } + + outbuf = (char *) utf8; + inbuf = (char *) sname->string; + + while (in_bytes_left) + { + size_t did = iconv (cd, + &inbuf, &in_bytes_left, + &outbuf, &out_bytes_left); + if (did == (size_t) (-1)) + { + iconv_close (cd); + free (utf8); + return 0; + } + } + iconv_close (cd); + *outbuf = '\0'; + goto done; + } +#endif + return 0; +done: + if (FcStrCmpIgnoreBlanksAndCase (utf8, (FcChar8 *) "") == 0) + { + free (utf8); + return 0; + } + return utf8; +} + +static const FcChar8 * +FcSfntNameLanguage (FT_SfntName *sname) +{ + int i; + FT_UShort platform_id = sname->platform_id; + FT_UShort language_id = sname->language_id; + + /* + * Many names encoded for TT_PLATFORM_MACINTOSH are broken + * in various ways. Kludge around them. + */ + if (platform_id == TT_PLATFORM_MACINTOSH && + sname->encoding_id == TT_MAC_ID_ROMAN && + FcLooksLikeSJIS (sname->string, sname->string_len)) + { + language_id = TT_MAC_LANGID_JAPANESE; + } + + for (i = 0; i < NUM_FC_FT_LANGUAGE; i++) + if (fcFtLanguage[i].platform_id == platform_id && + (fcFtLanguage[i].language_id == TT_LANGUAGE_DONT_CARE || + fcFtLanguage[i].language_id == language_id)) + { + if (fcFtLanguage[i].lang[0] == '\0') + return NULL; + else + return (FcChar8 *) fcFtLanguage[i].lang; + } + return 0; +} + +/* Order is significant. For example, some B&H fonts are hinted by + URW++, and both strings appear in the notice. */ + +static const char notice_foundry_data[] = + "Bigelow\0b&h\0" + "Adobe\0adobe\0" + "Bitstream\0bitstream\0" + "Monotype\0monotype\0" + "Linotype\0linotype\0" + "LINOTYPE-HELL\0linotype\0" + "IBM\0ibm\0" + "URW\0urw\0" + "International Typeface Corporation\0itc\0" + "Tiro Typeworks\0tiro\0" + "XFree86\0xfree86\0" + "Microsoft\0microsoft\0" + "Omega\0omega\0" + "Font21\0hwan\0" + "HanYang System\0hanyang"; + +struct _notice_foundry { + /* these are the offsets into the + * notice_foundry_data array. + */ + unsigned char notice_offset; + unsigned char foundry_offset; +}; + +static const struct _notice_foundry FcNoticeFoundries[] = { + { 0, 8 }, + { 12, 18 }, + { 24, 34 }, + { 44, 53 }, + { 62, 71 }, + { 80, 94 }, + { 103, 107 }, + { 111, 115 }, + { 119, 154 }, + { 158, 173 }, + { 178, 186 }, + { 194, 204 }, + { 214, 220 }, + { 226, 233 }, + { 238, 253 } +}; + +#define NUM_NOTICE_FOUNDRIES (int) (sizeof (FcNoticeFoundries) / sizeof (FcNoticeFoundries[0])) + +static const FcChar8 * +FcNoticeFoundry(const FT_String *notice) +{ + int i; + + if (notice) + for(i = 0; i < NUM_NOTICE_FOUNDRIES; i++) + { + const struct _notice_foundry *nf = &FcNoticeFoundries[i]; + const char *n = notice_foundry_data + nf->notice_offset; + const char *f = notice_foundry_data + nf->foundry_offset; + + if (strstr ((const char *) notice, n)) + return (const FcChar8 *) f; + } + return 0; +} + +static FcBool +FcVendorMatch(const FT_Char vendor[4], const FT_Char *vendor_string) +{ + /* vendor is not necessarily NUL-terminated. */ + int i, len; + + len = strlen((char *) vendor_string); + if (memcmp(vendor, vendor_string, len) != 0) + return FcFalse; + for (i = len; i < 4; i++) + if (vendor[i] != ' ' && vendor[i] != '\0') + return FcFalse; + return FcTrue; +} + +/* This table is partly taken from ttmkfdir by Joerg Pommnitz. */ + +/* It should not contain useless entries (such as UNKN) nor duplicate + entries for padding both with spaces and NULs. */ + +static const struct { + const FT_Char vendor[5]; + const FcChar8 foundry[13]; +} FcVendorFoundries[] = { + { "ADBE", "adobe"}, + { "AGFA", "agfa"}, + { "ALTS", "altsys"}, + { "APPL", "apple"}, + { "ARPH", "arphic"}, + { "ATEC", "alltype"}, + { "B&H", "b&h"}, + { "BITS", "bitstream"}, + { "CANO", "cannon"}, + { "DYNA", "dynalab"}, + { "EPSN", "epson"}, + { "FJ", "fujitsu"}, + { "IBM", "ibm"}, + { "ITC", "itc"}, + { "IMPR", "impress"}, + { "LARA", "larabiefonts"}, + { "LEAF", "interleaf"}, + { "LETR", "letraset"}, + { "LINO", "linotype"}, + { "MACR", "macromedia"}, + { "MONO", "monotype"}, + { "MS", "microsoft"}, + { "MT", "monotype"}, + { "NEC", "nec"}, + { "PARA", "paratype"}, + { "QMSI", "qms"}, + { "RICO", "ricoh"}, + { "URW", "urw"}, + { "Y&Y", "y&y"} +}; + +#define NUM_VENDOR_FOUNDRIES (int) (sizeof (FcVendorFoundries) / sizeof (FcVendorFoundries[0])) + +static const FcChar8 * +FcVendorFoundry(const FT_Char vendor[4]) +{ + int i; + + if (vendor) + for(i = 0; i < NUM_VENDOR_FOUNDRIES; i++) + if (FcVendorMatch (vendor, FcVendorFoundries[i].vendor)) + return FcVendorFoundries[i].foundry; + return 0; +} + +typedef struct _FcStringConst { + const FcChar8 *name; + int value; +} FcStringConst; + +static int +FcStringIsConst (const FcChar8 *string, + const FcStringConst *c, + int nc) +{ + int i; + + for (i = 0; i < nc; i++) + if (FcStrCmpIgnoreBlanksAndCase (string, c[i].name) == 0) + return c[i].value; + return -1; +} + +static int +FcStringContainsConst (const FcChar8 *string, + const FcStringConst *c, + int nc) +{ + int i; + + for (i = 0; i < nc; i++) + { + if (c[i].name[0] == '<') + { + if (FcStrContainsWord (string, c[i].name + 1)) + return c[i].value; + } + else + { + if (FcStrContainsIgnoreBlanksAndCase (string, c[i].name)) + return c[i].value; + } + } + return -1; +} + +typedef FcChar8 *FC8; + +static const FcStringConst weightConsts[] = { + { (FC8) "thin", FC_WEIGHT_THIN }, + { (FC8) "extralight", FC_WEIGHT_EXTRALIGHT }, + { (FC8) "ultralight", FC_WEIGHT_ULTRALIGHT }, + { (FC8) "light", FC_WEIGHT_LIGHT }, + { (FC8) "book", FC_WEIGHT_BOOK }, + { (FC8) "regular", FC_WEIGHT_REGULAR }, + { (FC8) "normal", FC_WEIGHT_NORMAL }, + { (FC8) "medium", FC_WEIGHT_MEDIUM }, + { (FC8) "demibold", FC_WEIGHT_DEMIBOLD }, + { (FC8) "demi", FC_WEIGHT_DEMIBOLD }, + { (FC8) "semibold", FC_WEIGHT_SEMIBOLD }, + { (FC8) "extrabold", FC_WEIGHT_EXTRABOLD }, + { (FC8) "superbold", FC_WEIGHT_EXTRABOLD }, + { (FC8) "ultrabold", FC_WEIGHT_ULTRABOLD }, + { (FC8) "bold", FC_WEIGHT_BOLD }, + { (FC8) "ultrablack", FC_WEIGHT_ULTRABLACK }, + { (FC8) "superblack", FC_WEIGHT_EXTRABLACK }, + { (FC8) "extrablack", FC_WEIGHT_EXTRABLACK }, + { (FC8) "<ultra", FC_WEIGHT_ULTRABOLD }, /* only if a word */ + { (FC8) "black", FC_WEIGHT_BLACK }, + { (FC8) "heavy", FC_WEIGHT_HEAVY }, +}; + +#define NUM_WEIGHT_CONSTS (int) (sizeof (weightConsts) / sizeof (weightConsts[0])) + +#define FcIsWeight(s) FcStringIsConst(s,weightConsts,NUM_WEIGHT_CONSTS) +#define FcContainsWeight(s) FcStringContainsConst (s,weightConsts,NUM_WEIGHT_CONSTS) + +static const FcStringConst widthConsts[] = { + { (FC8) "ultracondensed", FC_WIDTH_ULTRACONDENSED }, + { (FC8) "extracondensed", FC_WIDTH_EXTRACONDENSED }, + { (FC8) "semicondensed", FC_WIDTH_SEMICONDENSED }, + { (FC8) "condensed", FC_WIDTH_CONDENSED }, /* must be after *condensed */ + { (FC8) "normal", FC_WIDTH_NORMAL }, + { (FC8) "semiexpanded", FC_WIDTH_SEMIEXPANDED }, + { (FC8) "extraexpanded", FC_WIDTH_EXTRAEXPANDED }, + { (FC8) "ultraexpanded", FC_WIDTH_ULTRAEXPANDED }, + { (FC8) "expanded", FC_WIDTH_EXPANDED }, /* must be after *expanded */ + { (FC8) "extended", FC_WIDTH_EXPANDED }, +}; + +#define NUM_WIDTH_CONSTS (int) (sizeof (widthConsts) / sizeof (widthConsts[0])) + +#define FcIsWidth(s) FcStringIsConst(s,widthConsts,NUM_WIDTH_CONSTS) +#define FcContainsWidth(s) FcStringContainsConst (s,widthConsts,NUM_WIDTH_CONSTS) + +static const FcStringConst slantConsts[] = { + { (FC8) "italic", FC_SLANT_ITALIC }, + { (FC8) "kursiv", FC_SLANT_ITALIC }, + { (FC8) "oblique", FC_SLANT_OBLIQUE }, +}; + +#define NUM_SLANT_CONSTS (int) (sizeof (slantConsts) / sizeof (slantConsts[0])) + +#define FcIsSlant(s) FcStringIsConst(s,slantConsts,NUM_SLANT_CONSTS) +#define FcContainsSlant(s) FcStringContainsConst (s,slantConsts,NUM_SLANT_CONSTS) + +static const FcStringConst decorativeConsts[] = { + { (FC8) "shadow", FcTrue }, + { (FC8) "caps", FcTrue }, + { (FC8) "antiqua", FcTrue }, + { (FC8) "romansc", FcTrue }, + { (FC8) "embosed", FcTrue }, + { (FC8) "dunhill", FcTrue }, +}; + +#define NUM_DECORATIVE_CONSTS (int) (sizeof (decorativeConsts) / sizeof (decorativeConsts[0])) + +#define FcIsDecorative(s) FcStringIsConst(s,decorativeConsts,NUM_DECORATIVE_CONSTS) +#define FcContainsDecorative(s) FcStringContainsConst (s,decorativeConsts,NUM_DECORATIVE_CONSTS) + +static double +FcGetPixelSize (FT_Face face, int i) +{ +#if HAVE_FT_GET_BDF_PROPERTY + if (face->num_fixed_sizes == 1) + { + BDF_PropertyRec prop; + int rc; + + rc = FT_Get_BDF_Property (face, "PIXEL_SIZE", &prop); + if (rc == 0 && prop.type == BDF_PROPERTY_TYPE_INTEGER) + return (double) prop.u.integer; + } +#endif +#if HAVE_FT_BITMAP_SIZE_Y_PPEM + return (double) face->available_sizes[i].y_ppem / 64.0; +#else + return (double) face->available_sizes[i].height; +#endif +} + +static FcBool +FcStringInPatternElement (FcPattern *pat, const char *elt, FcChar8 *string) +{ + int e; + FcChar8 *old; + for (e = 0; FcPatternGetString (pat, elt, e, &old) == FcResultMatch; e++) + if (!FcStrCmpIgnoreBlanksAndCase (old, string)) + { + return FcTrue; + } + return FcFalse; +} + +static const FT_UShort platform_order[] = { + TT_PLATFORM_MICROSOFT, + TT_PLATFORM_APPLE_UNICODE, + TT_PLATFORM_MACINTOSH, +}; +#define NUM_PLATFORM_ORDER (sizeof (platform_order) / sizeof (platform_order[0])) + +static const FT_UShort nameid_order[] = { +#ifdef TT_NAME_ID_WWS_FAMILY + TT_NAME_ID_WWS_FAMILY, +#endif + TT_NAME_ID_PREFERRED_FAMILY, + TT_NAME_ID_FONT_FAMILY, + TT_NAME_ID_MAC_FULL_NAME, + TT_NAME_ID_FULL_NAME, +#ifdef TT_NAME_ID_WWS_SUBFAMILY + TT_NAME_ID_WWS_SUBFAMILY, +#endif + TT_NAME_ID_PREFERRED_SUBFAMILY, + TT_NAME_ID_FONT_SUBFAMILY, + TT_NAME_ID_TRADEMARK, + TT_NAME_ID_MANUFACTURER, +}; + +#define NUM_NAMEID_ORDER (sizeof (nameid_order) / sizeof (nameid_order[0])) +FcPattern * +FcFreeTypeQueryFace (const FT_Face face, + const FcChar8 *file, + int id, + FcBlanks *blanks) +{ + FcPattern *pat; + int slant = -1; + int weight = -1; + int width = -1; + FcBool decorative = FcFalse; + int i; + FcCharSet *cs; + FcLangSet *ls; +#if 0 + FcChar8 *family = 0; +#endif + FcChar8 *complex_; + const FcChar8 *foundry = 0; + int spacing; + TT_OS2 *os2; +#if HAVE_FT_GET_PS_FONT_INFO + PS_FontInfoRec psfontinfo; +#endif +#if HAVE_FT_GET_BDF_PROPERTY + BDF_PropertyRec prop; +#endif + TT_Header *head; + const FcChar8 *exclusiveLang = 0; + FT_SfntName sname; + FT_UInt snamei, snamec; + + int nfamily = 0; + int nfamily_lang = 0; + int nstyle = 0; + int nstyle_lang = 0; + int nfullname = 0; + int nfullname_lang = 0; + int p, platform; + int n, nameid; + + FcChar8 *style = 0; + int st; + + pat = FcPatternCreate (); + if (!pat) + goto bail0; + + if (!FcPatternAddBool (pat, FC_OUTLINE, + (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0)) + goto bail1; + + if (!FcPatternAddBool (pat, FC_SCALABLE, + (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0)) + goto bail1; + + + /* + * Get the OS/2 table + */ + os2 = (TT_OS2 *) FT_Get_Sfnt_Table (face, ft_sfnt_os2); + + /* + * Look first in the OS/2 table for the foundry, if + * not found here, the various notices will be searched for + * that information, either from the sfnt name tables or + * the Postscript FontInfo dictionary. Finally, the + * BDF properties will queried. + */ + + if (os2 && os2->version >= 0x0001 && os2->version != 0xffff) + foundry = FcVendorFoundry(os2->achVendID); + + if (FcDebug () & FC_DBG_SCANV) + printf ("\n"); + /* + * Grub through the name table looking for family + * and style names. FreeType makes quite a hash + * of them + */ + snamec = FT_Get_Sfnt_Name_Count (face); + for (p = 0; p <= NUM_PLATFORM_ORDER; p++) + { + if (p < NUM_PLATFORM_ORDER) + platform = platform_order[p]; + else + platform = 0xffff; + + /* + * Order nameids so preferred names appear first + * in the resulting list + */ + for (n = 0; n < NUM_NAMEID_ORDER; n++) + { + nameid = nameid_order[n]; + + for (snamei = 0; snamei < snamec; snamei++) + { + FcChar8 *utf8; + const FcChar8 *lang; + const char *elt = 0, *eltlang = 0; + int *np = 0, *nlangp = 0; + + if (FT_Get_Sfnt_Name (face, snamei, &sname) != 0) + continue; + if (sname.name_id != nameid) + continue; + + /* + * Sort platforms in preference order, accepting + * all other platforms last + */ + if (p < NUM_PLATFORM_ORDER) + { + if (sname.platform_id != platform) + continue; + } + else + { + int sp; + + for (sp = 0; sp < NUM_PLATFORM_ORDER; sp++) + if (sname.platform_id == platform_order[sp]) + break; + if (sp != NUM_PLATFORM_ORDER) + continue; + } + utf8 = FcSfntNameTranscode (&sname); + lang = FcSfntNameLanguage (&sname); + + if (!utf8) + continue; + + switch (sname.name_id) { +#ifdef TT_NAME_ID_WWS_FAMILY + case TT_NAME_ID_WWS_FAMILY: +#endif + case TT_NAME_ID_PREFERRED_FAMILY: + case TT_NAME_ID_FONT_FAMILY: +#if 0 + case TT_NAME_ID_PS_NAME: + case TT_NAME_ID_UNIQUE_ID: +#endif + if (FcDebug () & FC_DBG_SCANV) + printf ("found family (n %2d p %d e %d l 0x%04x) %s\n", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id, + utf8); + + elt = FC_FAMILY; + eltlang = FC_FAMILYLANG; + np = &nfamily; + nlangp = &nfamily_lang; + break; + case TT_NAME_ID_MAC_FULL_NAME: + case TT_NAME_ID_FULL_NAME: + if (FcDebug () & FC_DBG_SCANV) + printf ("found full (n %2d p %d e %d l 0x%04x) %s\n", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id, + utf8); + + elt = FC_FULLNAME; + eltlang = FC_FULLNAMELANG; + np = &nfullname; + nlangp = &nfullname_lang; + break; +#ifdef TT_NAME_ID_WWS_SUBFAMILY + case TT_NAME_ID_WWS_SUBFAMILY: +#endif + case TT_NAME_ID_PREFERRED_SUBFAMILY: + case TT_NAME_ID_FONT_SUBFAMILY: + if (FcDebug () & FC_DBG_SCANV) + printf ("found style (n %2d p %d e %d l 0x%04x) %s\n", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id, + utf8); + + elt = FC_STYLE; + eltlang = FC_STYLELANG; + np = &nstyle; + nlangp = &nstyle_lang; + break; + case TT_NAME_ID_TRADEMARK: + case TT_NAME_ID_MANUFACTURER: + /* If the foundry wasn't found in the OS/2 table, look here */ + if(!foundry) + foundry = FcNoticeFoundry((FT_String *) utf8); + break; + } + if (elt) + { + if (FcStringInPatternElement (pat, elt, utf8)) + { + free (utf8); + continue; + } + + /* add new element */ + if (!FcPatternAddString (pat, elt, utf8)) + { + free (utf8); + goto bail1; + } + free (utf8); + if (lang) + { + /* pad lang list with 'xx' to line up with elt */ + while (*nlangp < *np) + { + if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "xx")) + goto bail1; + ++*nlangp; + } + if (!FcPatternAddString (pat, eltlang, lang)) + goto bail1; + ++*nlangp; + } + ++*np; + } + else + free (utf8); + } + } + } + + if (!nfamily && face->family_name && + FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->family_name, (FcChar8 *) "") != 0) + { + if (FcDebug () & FC_DBG_SCANV) + printf ("using FreeType family \"%s\"\n", face->family_name); + if (!FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) face->family_name)) + goto bail1; + ++nfamily; + } + + if (!nstyle && face->style_name && + FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->style_name, (FcChar8 *) "") != 0) + { + if (FcDebug () & FC_DBG_SCANV) + printf ("using FreeType style \"%s\"\n", face->style_name); + if (!FcPatternAddString (pat, FC_STYLE, (FcChar8 *) face->style_name)) + goto bail1; + ++nstyle; + } + + if (!nfamily) + { + FcChar8 *start, *end; + FcChar8 *family; + + start = (FcChar8 *) strrchr ((char *) file, '/'); + if (start) + start++; + else + start = (FcChar8 *) file; + end = (FcChar8 *) strrchr ((char *) start, '.'); + if (!end) + end = start + strlen ((char *) start); + /* freed below */ + family = malloc (end - start + 1); + strncpy ((char *) family, (char *) start, end - start); + family[end - start] = '\0'; + if (FcDebug () & FC_DBG_SCANV) + printf ("using filename for family %s\n", family); + if (!FcPatternAddString (pat, FC_FAMILY, family)) + { + free (family); + goto bail1; + } + free (family); + ++nfamily; + } + + if (!FcPatternAddString (pat, FC_FILE, file)) + goto bail1; + + if (!FcPatternAddInteger (pat, FC_INDEX, id)) + goto bail1; + +#if 0 + /* + * don't even try this -- CJK 'monospace' fonts are really + * dual width, and most other fonts don't bother to set + * the attribute. Sigh. + */ + if ((face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) != 0) + if (!FcPatternAddInteger (pat, FC_SPACING, FC_MONO)) + goto bail1; +#endif + + /* + * Find the font revision (if available) + */ + head = (TT_Header *) FT_Get_Sfnt_Table (face, ft_sfnt_head); + if (head) + { + if (!FcPatternAddInteger (pat, FC_FONTVERSION, head->Font_Revision)) + goto bail1; + } + else + { + if (!FcPatternAddInteger (pat, FC_FONTVERSION, 0)) + goto bail1; + } + + if (os2 && os2->version >= 0x0001 && os2->version != 0xffff) + { + for (i = 0; i < NUM_CODE_PAGE_RANGE; i++) + { + FT_ULong bits; + int bit; + if (FcCodePageRange[i].bit < 32) + { + bits = os2->ulCodePageRange1; + bit = FcCodePageRange[i].bit; + } + else + { + bits = os2->ulCodePageRange2; + bit = FcCodePageRange[i].bit - 32; + } + if (bits & (1 << bit)) + { + /* + * If the font advertises support for multiple + * "exclusive" languages, then include support + * for any language found to have coverage + */ + if (exclusiveLang) + { + exclusiveLang = 0; + break; + } + exclusiveLang = FcCodePageRange[i].lang; + } + } + } + + if (os2 && os2->version != 0xffff) + { + if (os2->usWeightClass == 0) + ; + else if (os2->usWeightClass < 150) + weight = FC_WEIGHT_THIN; + else if (os2->usWeightClass < 250) + weight = FC_WEIGHT_EXTRALIGHT; + else if (os2->usWeightClass < 350) + weight = FC_WEIGHT_LIGHT; + else if (os2->usWeightClass < 450) + weight = FC_WEIGHT_REGULAR; + else if (os2->usWeightClass < 550) + weight = FC_WEIGHT_MEDIUM; + else if (os2->usWeightClass < 650) + weight = FC_WEIGHT_SEMIBOLD; + else if (os2->usWeightClass < 750) + weight = FC_WEIGHT_BOLD; + else if (os2->usWeightClass < 850) + weight = FC_WEIGHT_EXTRABOLD; + else if (os2->usWeightClass < 925) + weight = FC_WEIGHT_BLACK; + else if (os2->usWeightClass < 1000) + weight = FC_WEIGHT_EXTRABLACK; + if ((FcDebug() & FC_DBG_SCANV) && weight != -1) + printf ("\tos2 weight class %d maps to weight %d\n", + os2->usWeightClass, weight); + + switch (os2->usWidthClass) { + case 1: width = FC_WIDTH_ULTRACONDENSED; break; + case 2: width = FC_WIDTH_EXTRACONDENSED; break; + case 3: width = FC_WIDTH_CONDENSED; break; + case 4: width = FC_WIDTH_SEMICONDENSED; break; + case 5: width = FC_WIDTH_NORMAL; break; + case 6: width = FC_WIDTH_SEMIEXPANDED; break; + case 7: width = FC_WIDTH_EXPANDED; break; + case 8: width = FC_WIDTH_EXTRAEXPANDED; break; + case 9: width = FC_WIDTH_ULTRAEXPANDED; break; + } + if ((FcDebug() & FC_DBG_SCANV) && width != -1) + printf ("\tos2 width class %d maps to width %d\n", + os2->usWidthClass, width); + } + if (os2 && (complex_ = FcFontCapabilities(face))) + { + if (!FcPatternAddString (pat, FC_CAPABILITY, complex_)) + { + free (complex_); + goto bail1; + } + free (complex_); + } + + /* + * Type 1: Check for FontInfo dictionary information + * Code from g2@magestudios.net (Gerard Escalante) + */ + +#if HAVE_FT_GET_PS_FONT_INFO + if (FT_Get_PS_Font_Info(face, &psfontinfo) == 0) + { + if (weight == -1 && psfontinfo.weight) + { + weight = FcIsWeight ((FcChar8 *) psfontinfo.weight); + if (FcDebug() & FC_DBG_SCANV) + printf ("\tType1 weight %s maps to %d\n", + psfontinfo.weight, weight); + } + +#if 0 + /* + * Don't bother with italic_angle; FreeType already extracts that + * information for us and sticks it into style_flags + */ + if (psfontinfo.italic_angle) + slant = FC_SLANT_ITALIC; + else + slant = FC_SLANT_ROMAN; +#endif + + if(!foundry) + foundry = FcNoticeFoundry(psfontinfo.notice); + } +#endif /* HAVE_FT_GET_PS_FONT_INFO */ + +#if HAVE_FT_GET_BDF_PROPERTY + /* + * Finally, look for a FOUNDRY BDF property if no other + * mechanism has managed to locate a foundry + */ + + if (!foundry) + { + int rc; + rc = FT_Get_BDF_Property(face, "FOUNDRY", &prop); + if(rc == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM) + foundry = (FcChar8 *) prop.u.atom; + } + + if (width == -1) + { + if (FT_Get_BDF_Property(face, "RELATIVE_SETWIDTH", &prop) == 0 && + (prop.type == BDF_PROPERTY_TYPE_INTEGER || + prop.type == BDF_PROPERTY_TYPE_CARDINAL)) + { + FT_Int32 value; + + if (prop.type == BDF_PROPERTY_TYPE_INTEGER) + value = prop.u.integer; + else + value = (FT_Int32) prop.u.cardinal; + switch ((value + 5) / 10) { + case 1: width = FC_WIDTH_ULTRACONDENSED; break; + case 2: width = FC_WIDTH_EXTRACONDENSED; break; + case 3: width = FC_WIDTH_CONDENSED; break; + case 4: width = FC_WIDTH_SEMICONDENSED; break; + case 5: width = FC_WIDTH_NORMAL; break; + case 6: width = FC_WIDTH_SEMIEXPANDED; break; + case 7: width = FC_WIDTH_EXPANDED; break; + case 8: width = FC_WIDTH_EXTRAEXPANDED; break; + case 9: width = FC_WIDTH_ULTRAEXPANDED; break; + } + } + if (width == -1 && + FT_Get_BDF_Property (face, "SETWIDTH_NAME", &prop) == 0 && + prop.type == BDF_PROPERTY_TYPE_ATOM) + { + width = FcIsWidth ((FcChar8 *) prop.u.atom); + if (FcDebug () & FC_DBG_SCANV) + printf ("\tsetwidth %s maps to %d\n", prop.u.atom, width); + } + } +#endif + + /* + * Look for weight, width and slant names in the style value + */ + for (st = 0; FcPatternGetString (pat, FC_STYLE, st, &style) == FcResultMatch; st++) + { + if (weight == -1) + { + weight = FcContainsWeight (style); + if (FcDebug() & FC_DBG_SCANV) + printf ("\tStyle %s maps to weight %d\n", style, weight); + } + if (width == -1) + { + width = FcContainsWidth (style); + if (FcDebug() & FC_DBG_SCANV) + printf ("\tStyle %s maps to width %d\n", style, width); + } + if (slant == -1) + { + slant = FcContainsSlant (style); + if (FcDebug() & FC_DBG_SCANV) + printf ("\tStyle %s maps to slant %d\n", style, slant); + } + if (decorative == FcFalse) + { + decorative = FcContainsDecorative (style) > 0; + if (FcDebug() & FC_DBG_SCANV) + printf ("\tStyle %s maps to decorative %d\n", style, decorative); + } + } + /* + * Pull default values from the FreeType flags if more + * specific values not found above + */ + if (slant == -1) + { + slant = FC_SLANT_ROMAN; + if (face->style_flags & FT_STYLE_FLAG_ITALIC) + slant = FC_SLANT_ITALIC; + } + + if (weight == -1) + { + weight = FC_WEIGHT_MEDIUM; + if (face->style_flags & FT_STYLE_FLAG_BOLD) + weight = FC_WEIGHT_BOLD; + } + + if (width == -1) + width = FC_WIDTH_NORMAL; + + if (foundry == 0) + foundry = (FcChar8 *) "unknown"; + + if (!FcPatternAddInteger (pat, FC_SLANT, slant)) + goto bail1; + + if (!FcPatternAddInteger (pat, FC_WEIGHT, weight)) + goto bail1; + + if (!FcPatternAddInteger (pat, FC_WIDTH, width)) + goto bail1; + + if (!FcPatternAddString (pat, FC_FOUNDRY, foundry)) + goto bail1; + + if (!FcPatternAddBool (pat, FC_DECORATIVE, decorative)) + goto bail1; + + /* + * Compute the unicode coverage for the font + */ + cs = FcFreeTypeCharSetAndSpacing (face, blanks, &spacing); + if (!cs) + goto bail1; + +#if HAVE_FT_GET_BDF_PROPERTY + /* For PCF fonts, override the computed spacing with the one from + the property */ + if(FT_Get_BDF_Property(face, "SPACING", &prop) == 0 && + prop.type == BDF_PROPERTY_TYPE_ATOM) { + if(!strcmp(prop.u.atom, "c") || !strcmp(prop.u.atom, "C")) + spacing = FC_CHARCELL; + else if(!strcmp(prop.u.atom, "m") || !strcmp(prop.u.atom, "M")) + spacing = FC_MONO; + else if(!strcmp(prop.u.atom, "p") || !strcmp(prop.u.atom, "P")) + spacing = FC_PROPORTIONAL; + } +#endif + + /* + * Skip over PCF fonts that have no encoded characters; they're + * usually just Unicode fonts transcoded to some legacy encoding + * FT forces us to approximate whether a font is a PCF font + * or not by whether it has any BDF properties. Try PIXEL_SIZE; + * I don't know how to get a list of BDF properties on the font. -PL + */ + if (FcCharSetCount (cs) == 0) + { +#if HAVE_FT_GET_BDF_PROPERTY + if(FT_Get_BDF_Property(face, "PIXEL_SIZE", &prop) == 0) + goto bail2; +#endif + } + + if (!FcPatternAddCharSet (pat, FC_CHARSET, cs)) + goto bail2; + + ls = FcFreeTypeLangSet (cs, exclusiveLang); + if (!ls) + goto bail2; + + if (!FcPatternAddLangSet (pat, FC_LANG, ls)) + { + FcLangSetDestroy (ls); + goto bail2; + } + + FcLangSetDestroy (ls); + + if (spacing != FC_PROPORTIONAL) + if (!FcPatternAddInteger (pat, FC_SPACING, spacing)) + goto bail2; + + if (!(face->face_flags & FT_FACE_FLAG_SCALABLE)) + { + for (i = 0; i < face->num_fixed_sizes; i++) + if (!FcPatternAddDouble (pat, FC_PIXEL_SIZE, + FcGetPixelSize (face, i))) + goto bail2; + if (!FcPatternAddBool (pat, FC_ANTIALIAS, FcFalse)) + goto bail2; + } +#if HAVE_FT_GET_X11_FONT_FORMAT + /* + * Use the (not well documented or supported) X-specific function + * from FreeType to figure out the font format + */ + { + const char *font_format = FT_Get_X11_Font_Format (face); + if (font_format) + FcPatternAddString (pat, FC_FONTFORMAT, (FcChar8 *) font_format); + } +#endif + + /* + * Drop our reference to the charset + */ + FcCharSetDestroy (cs); + + return pat; + +bail2: + FcCharSetDestroy (cs); +bail1: + FcPatternDestroy (pat); +bail0: + return NULL; +} + +FcPattern * +FcFreeTypeQuery(const FcChar8 *file, + int id, + FcBlanks *blanks, + int *count) +{ + FT_Face face; + FT_Library ftLibrary; + FcPattern *pat = NULL; + + if (FT_Init_FreeType (&ftLibrary)) + return NULL; + + if (FT_New_Face (ftLibrary, (char *) file, id, &face)) + goto bail; + + *count = face->num_faces; + + pat = FcFreeTypeQueryFace (face, file, id, blanks); + + FT_Done_Face (face); +bail: + FT_Done_FreeType (ftLibrary); + return pat; +} + +/* + * For our purposes, this approximation is sufficient + */ +#if !HAVE_FT_GET_NEXT_CHAR +#define FT_Get_Next_Char(face, ucs4, gi) ((ucs4) >= 0xffffff ? \ + (*(gi) = 0), 0 : \ + (*(gi) = 1), (ucs4) + 1) +#warning "No FT_Get_Next_Char: Please install freetype version 2.1.0 or newer" +#endif + +typedef struct _FcCharEnt { + FcChar16 bmp; + unsigned char encode; +} FcCharEnt; + +struct _FcCharMap { + const FcCharEnt *ent; + int nent; +}; + +typedef struct _FcFontDecode { + FT_Encoding encoding; + const FcCharMap *map; + FcChar32 max; +} FcFontDecode; + +static const FcCharEnt AppleRomanEnt[] = { + { 0x0020, 0x20 }, /* SPACE */ + { 0x0021, 0x21 }, /* EXCLAMATION MARK */ + { 0x0022, 0x22 }, /* QUOTATION MARK */ + { 0x0023, 0x23 }, /* NUMBER SIGN */ + { 0x0024, 0x24 }, /* DOLLAR SIGN */ + { 0x0025, 0x25 }, /* PERCENT SIGN */ + { 0x0026, 0x26 }, /* AMPERSAND */ + { 0x0027, 0x27 }, /* APOSTROPHE */ + { 0x0028, 0x28 }, /* LEFT PARENTHESIS */ + { 0x0029, 0x29 }, /* RIGHT PARENTHESIS */ + { 0x002A, 0x2A }, /* ASTERISK */ + { 0x002B, 0x2B }, /* PLUS SIGN */ + { 0x002C, 0x2C }, /* COMMA */ + { 0x002D, 0x2D }, /* HYPHEN-MINUS */ + { 0x002E, 0x2E }, /* FULL STOP */ + { 0x002F, 0x2F }, /* SOLIDUS */ + { 0x0030, 0x30 }, /* DIGIT ZERO */ + { 0x0031, 0x31 }, /* DIGIT ONE */ + { 0x0032, 0x32 }, /* DIGIT TWO */ + { 0x0033, 0x33 }, /* DIGIT THREE */ + { 0x0034, 0x34 }, /* DIGIT FOUR */ + { 0x0035, 0x35 }, /* DIGIT FIVE */ + { 0x0036, 0x36 }, /* DIGIT SIX */ + { 0x0037, 0x37 }, /* DIGIT SEVEN */ + { 0x0038, 0x38 }, /* DIGIT EIGHT */ + { 0x0039, 0x39 }, /* DIGIT NINE */ + { 0x003A, 0x3A }, /* COLON */ + { 0x003B, 0x3B }, /* SEMICOLON */ + { 0x003C, 0x3C }, /* LESS-THAN SIGN */ + { 0x003D, 0x3D }, /* EQUALS SIGN */ + { 0x003E, 0x3E }, /* GREATER-THAN SIGN */ + { 0x003F, 0x3F }, /* QUESTION MARK */ + { 0x0040, 0x40 }, /* COMMERCIAL AT */ + { 0x0041, 0x41 }, /* LATIN CAPITAL LETTER A */ + { 0x0042, 0x42 }, /* LATIN CAPITAL LETTER B */ + { 0x0043, 0x43 }, /* LATIN CAPITAL LETTER C */ + { 0x0044, 0x44 }, /* LATIN CAPITAL LETTER D */ + { 0x0045, 0x45 }, /* LATIN CAPITAL LETTER E */ + { 0x0046, 0x46 }, /* LATIN CAPITAL LETTER F */ + { 0x0047, 0x47 }, /* LATIN CAPITAL LETTER G */ + { 0x0048, 0x48 }, /* LATIN CAPITAL LETTER H */ + { 0x0049, 0x49 }, /* LATIN CAPITAL LETTER I */ + { 0x004A, 0x4A }, /* LATIN CAPITAL LETTER J */ + { 0x004B, 0x4B }, /* LATIN CAPITAL LETTER K */ + { 0x004C, 0x4C }, /* LATIN CAPITAL LETTER L */ + { 0x004D, 0x4D }, /* LATIN CAPITAL LETTER M */ + { 0x004E, 0x4E }, /* LATIN CAPITAL LETTER N */ + { 0x004F, 0x4F }, /* LATIN CAPITAL LETTER O */ + { 0x0050, 0x50 }, /* LATIN CAPITAL LETTER P */ + { 0x0051, 0x51 }, /* LATIN CAPITAL LETTER Q */ + { 0x0052, 0x52 }, /* LATIN CAPITAL LETTER R */ + { 0x0053, 0x53 }, /* LATIN CAPITAL LETTER S */ + { 0x0054, 0x54 }, /* LATIN CAPITAL LETTER T */ + { 0x0055, 0x55 }, /* LATIN CAPITAL LETTER U */ + { 0x0056, 0x56 }, /* LATIN CAPITAL LETTER V */ + { 0x0057, 0x57 }, /* LATIN CAPITAL LETTER W */ + { 0x0058, 0x58 }, /* LATIN CAPITAL LETTER X */ + { 0x0059, 0x59 }, /* LATIN CAPITAL LETTER Y */ + { 0x005A, 0x5A }, /* LATIN CAPITAL LETTER Z */ + { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET */ + { 0x005C, 0x5C }, /* REVERSE SOLIDUS */ + { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET */ + { 0x005E, 0x5E }, /* CIRCUMFLEX ACCENT */ + { 0x005F, 0x5F }, /* LOW LINE */ + { 0x0060, 0x60 }, /* GRAVE ACCENT */ + { 0x0061, 0x61 }, /* LATIN SMALL LETTER A */ + { 0x0062, 0x62 }, /* LATIN SMALL LETTER B */ + { 0x0063, 0x63 }, /* LATIN SMALL LETTER C */ + { 0x0064, 0x64 }, /* LATIN SMALL LETTER D */ + { 0x0065, 0x65 }, /* LATIN SMALL LETTER E */ + { 0x0066, 0x66 }, /* LATIN SMALL LETTER F */ + { 0x0067, 0x67 }, /* LATIN SMALL LETTER G */ + { 0x0068, 0x68 }, /* LATIN SMALL LETTER H */ + { 0x0069, 0x69 }, /* LATIN SMALL LETTER I */ + { 0x006A, 0x6A }, /* LATIN SMALL LETTER J */ + { 0x006B, 0x6B }, /* LATIN SMALL LETTER K */ + { 0x006C, 0x6C }, /* LATIN SMALL LETTER L */ + { 0x006D, 0x6D }, /* LATIN SMALL LETTER M */ + { 0x006E, 0x6E }, /* LATIN SMALL LETTER N */ + { 0x006F, 0x6F }, /* LATIN SMALL LETTER O */ + { 0x0070, 0x70 }, /* LATIN SMALL LETTER P */ + { 0x0071, 0x71 }, /* LATIN SMALL LETTER Q */ + { 0x0072, 0x72 }, /* LATIN SMALL LETTER R */ + { 0x0073, 0x73 }, /* LATIN SMALL LETTER S */ + { 0x0074, 0x74 }, /* LATIN SMALL LETTER T */ + { 0x0075, 0x75 }, /* LATIN SMALL LETTER U */ + { 0x0076, 0x76 }, /* LATIN SMALL LETTER V */ + { 0x0077, 0x77 }, /* LATIN SMALL LETTER W */ + { 0x0078, 0x78 }, /* LATIN SMALL LETTER X */ + { 0x0079, 0x79 }, /* LATIN SMALL LETTER Y */ + { 0x007A, 0x7A }, /* LATIN SMALL LETTER Z */ + { 0x007B, 0x7B }, /* LEFT CURLY BRACKET */ + { 0x007C, 0x7C }, /* VERTICAL LINE */ + { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET */ + { 0x007E, 0x7E }, /* TILDE */ + { 0x00A0, 0xCA }, /* NO-BREAK SPACE */ + { 0x00A1, 0xC1 }, /* INVERTED EXCLAMATION MARK */ + { 0x00A2, 0xA2 }, /* CENT SIGN */ + { 0x00A3, 0xA3 }, /* POUND SIGN */ + { 0x00A5, 0xB4 }, /* YEN SIGN */ + { 0x00A7, 0xA4 }, /* SECTION SIGN */ + { 0x00A8, 0xAC }, /* DIAERESIS */ + { 0x00A9, 0xA9 }, /* COPYRIGHT SIGN */ + { 0x00AA, 0xBB }, /* FEMININE ORDINAL INDICATOR */ + { 0x00AB, 0xC7 }, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ + { 0x00AC, 0xC2 }, /* NOT SIGN */ + { 0x00AE, 0xA8 }, /* REGISTERED SIGN */ + { 0x00AF, 0xF8 }, /* MACRON */ + { 0x00B0, 0xA1 }, /* DEGREE SIGN */ + { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN */ + { 0x00B4, 0xAB }, /* ACUTE ACCENT */ + { 0x00B5, 0xB5 }, /* MICRO SIGN */ + { 0x00B6, 0xA6 }, /* PILCROW SIGN */ + { 0x00B7, 0xE1 }, /* MIDDLE DOT */ + { 0x00B8, 0xFC }, /* CEDILLA */ + { 0x00BA, 0xBC }, /* MASCULINE ORDINAL INDICATOR */ + { 0x00BB, 0xC8 }, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ + { 0x00BF, 0xC0 }, /* INVERTED QUESTION MARK */ + { 0x00C0, 0xCB }, /* LATIN CAPITAL LETTER A WITH GRAVE */ + { 0x00C1, 0xE7 }, /* LATIN CAPITAL LETTER A WITH ACUTE */ + { 0x00C2, 0xE5 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ + { 0x00C3, 0xCC }, /* LATIN CAPITAL LETTER A WITH TILDE */ + { 0x00C4, 0x80 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + { 0x00C5, 0x81 }, /* LATIN CAPITAL LETTER A WITH RING ABOVE */ + { 0x00C6, 0xAE }, /* LATIN CAPITAL LETTER AE */ + { 0x00C7, 0x82 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */ + { 0x00C8, 0xE9 }, /* LATIN CAPITAL LETTER E WITH GRAVE */ + { 0x00C9, 0x83 }, /* LATIN CAPITAL LETTER E WITH ACUTE */ + { 0x00CA, 0xE6 }, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ + { 0x00CB, 0xE8 }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */ + { 0x00CC, 0xED }, /* LATIN CAPITAL LETTER I WITH GRAVE */ + { 0x00CD, 0xEA }, /* LATIN CAPITAL LETTER I WITH ACUTE */ + { 0x00CE, 0xEB }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ + { 0x00CF, 0xEC }, /* LATIN CAPITAL LETTER I WITH DIAERESIS */ + { 0x00D1, 0x84 }, /* LATIN CAPITAL LETTER N WITH TILDE */ + { 0x00D2, 0xF1 }, /* LATIN CAPITAL LETTER O WITH GRAVE */ + { 0x00D3, 0xEE }, /* LATIN CAPITAL LETTER O WITH ACUTE */ + { 0x00D4, 0xEF }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ + { 0x00D5, 0xCD }, /* LATIN CAPITAL LETTER O WITH TILDE */ + { 0x00D6, 0x85 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */ + { 0x00D8, 0xAF }, /* LATIN CAPITAL LETTER O WITH STROKE */ + { 0x00D9, 0xF4 }, /* LATIN CAPITAL LETTER U WITH GRAVE */ + { 0x00DA, 0xF2 }, /* LATIN CAPITAL LETTER U WITH ACUTE */ + { 0x00DB, 0xF3 }, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ + { 0x00DC, 0x86 }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */ + { 0x00DF, 0xA7 }, /* LATIN SMALL LETTER SHARP S */ + { 0x00E0, 0x88 }, /* LATIN SMALL LETTER A WITH GRAVE */ + { 0x00E1, 0x87 }, /* LATIN SMALL LETTER A WITH ACUTE */ + { 0x00E2, 0x89 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ + { 0x00E3, 0x8B }, /* LATIN SMALL LETTER A WITH TILDE */ + { 0x00E4, 0x8A }, /* LATIN SMALL LETTER A WITH DIAERESIS */ + { 0x00E5, 0x8C }, /* LATIN SMALL LETTER A WITH RING ABOVE */ + { 0x00E6, 0xBE }, /* LATIN SMALL LETTER AE */ + { 0x00E7, 0x8D }, /* LATIN SMALL LETTER C WITH CEDILLA */ + { 0x00E8, 0x8F }, /* LATIN SMALL LETTER E WITH GRAVE */ + { 0x00E9, 0x8E }, /* LATIN SMALL LETTER E WITH ACUTE */ + { 0x00EA, 0x90 }, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ + { 0x00EB, 0x91 }, /* LATIN SMALL LETTER E WITH DIAERESIS */ + { 0x00EC, 0x93 }, /* LATIN SMALL LETTER I WITH GRAVE */ + { 0x00ED, 0x92 }, /* LATIN SMALL LETTER I WITH ACUTE */ + { 0x00EE, 0x94 }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ + { 0x00EF, 0x95 }, /* LATIN SMALL LETTER I WITH DIAERESIS */ + { 0x00F1, 0x96 }, /* LATIN SMALL LETTER N WITH TILDE */ + { 0x00F2, 0x98 }, /* LATIN SMALL LETTER O WITH GRAVE */ + { 0x00F3, 0x97 }, /* LATIN SMALL LETTER O WITH ACUTE */ + { 0x00F4, 0x99 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ + { 0x00F5, 0x9B }, /* LATIN SMALL LETTER O WITH TILDE */ + { 0x00F6, 0x9A }, /* LATIN SMALL LETTER O WITH DIAERESIS */ + { 0x00F7, 0xD6 }, /* DIVISION SIGN */ + { 0x00F8, 0xBF }, /* LATIN SMALL LETTER O WITH STROKE */ + { 0x00F9, 0x9D }, /* LATIN SMALL LETTER U WITH GRAVE */ + { 0x00FA, 0x9C }, /* LATIN SMALL LETTER U WITH ACUTE */ + { 0x00FB, 0x9E }, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ + { 0x00FC, 0x9F }, /* LATIN SMALL LETTER U WITH DIAERESIS */ + { 0x00FF, 0xD8 }, /* LATIN SMALL LETTER Y WITH DIAERESIS */ + { 0x0131, 0xF5 }, /* LATIN SMALL LETTER DOTLESS I */ + { 0x0152, 0xCE }, /* LATIN CAPITAL LIGATURE OE */ + { 0x0153, 0xCF }, /* LATIN SMALL LIGATURE OE */ + { 0x0178, 0xD9 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ + { 0x0192, 0xC4 }, /* LATIN SMALL LETTER F WITH HOOK */ + { 0x02C6, 0xF6 }, /* MODIFIER LETTER CIRCUMFLEX ACCENT */ + { 0x02C7, 0xFF }, /* CARON */ + { 0x02D8, 0xF9 }, /* BREVE */ + { 0x02D9, 0xFA }, /* DOT ABOVE */ + { 0x02DA, 0xFB }, /* RING ABOVE */ + { 0x02DB, 0xFE }, /* OGONEK */ + { 0x02DC, 0xF7 }, /* SMALL TILDE */ + { 0x02DD, 0xFD }, /* DOUBLE ACUTE ACCENT */ + { 0x03A9, 0xBD }, /* GREEK CAPITAL LETTER OMEGA */ + { 0x03C0, 0xB9 }, /* GREEK SMALL LETTER PI */ + { 0x2013, 0xD0 }, /* EN DASH */ + { 0x2014, 0xD1 }, /* EM DASH */ + { 0x2018, 0xD4 }, /* LEFT SINGLE QUOTATION MARK */ + { 0x2019, 0xD5 }, /* RIGHT SINGLE QUOTATION MARK */ + { 0x201A, 0xE2 }, /* SINGLE LOW-9 QUOTATION MARK */ + { 0x201C, 0xD2 }, /* LEFT DOUBLE QUOTATION MARK */ + { 0x201D, 0xD3 }, /* RIGHT DOUBLE QUOTATION MARK */ + { 0x201E, 0xE3 }, /* DOUBLE LOW-9 QUOTATION MARK */ + { 0x2020, 0xA0 }, /* DAGGER */ + { 0x2021, 0xE0 }, /* DOUBLE DAGGER */ + { 0x2022, 0xA5 }, /* BULLET */ + { 0x2026, 0xC9 }, /* HORIZONTAL ELLIPSIS */ + { 0x2030, 0xE4 }, /* PER MILLE SIGN */ + { 0x2039, 0xDC }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */ + { 0x203A, 0xDD }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */ + { 0x2044, 0xDA }, /* FRACTION SLASH */ + { 0x20AC, 0xDB }, /* EURO SIGN */ + { 0x2122, 0xAA }, /* TRADE MARK SIGN */ + { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL */ + { 0x2206, 0xC6 }, /* INCREMENT */ + { 0x220F, 0xB8 }, /* N-ARY PRODUCT */ + { 0x2211, 0xB7 }, /* N-ARY SUMMATION */ + { 0x221A, 0xC3 }, /* SQUARE ROOT */ + { 0x221E, 0xB0 }, /* INFINITY */ + { 0x222B, 0xBA }, /* INTEGRAL */ + { 0x2248, 0xC5 }, /* ALMOST EQUAL TO */ + { 0x2260, 0xAD }, /* NOT EQUAL TO */ + { 0x2264, 0xB2 }, /* LESS-THAN OR EQUAL TO */ + { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO */ + { 0x25CA, 0xD7 }, /* LOZENGE */ + { 0xF8FF, 0xF0 }, /* Apple logo */ + { 0xFB01, 0xDE }, /* LATIN SMALL LIGATURE FI */ + { 0xFB02, 0xDF }, /* LATIN SMALL LIGATURE FL */ +}; + +static const FcCharMap AppleRoman = { + AppleRomanEnt, + sizeof (AppleRomanEnt) / sizeof (AppleRomanEnt[0]) +}; + +static const FcCharEnt AdobeSymbolEnt[] = { + { 0x0020, 0x20 }, /* SPACE # space */ + { 0x0021, 0x21 }, /* EXCLAMATION MARK # exclam */ + { 0x0023, 0x23 }, /* NUMBER SIGN # numbersign */ + { 0x0025, 0x25 }, /* PERCENT SIGN # percent */ + { 0x0026, 0x26 }, /* AMPERSAND # ampersand */ + { 0x0028, 0x28 }, /* LEFT PARENTHESIS # parenleft */ + { 0x0029, 0x29 }, /* RIGHT PARENTHESIS # parenright */ + { 0x002B, 0x2B }, /* PLUS SIGN # plus */ + { 0x002C, 0x2C }, /* COMMA # comma */ + { 0x002E, 0x2E }, /* FULL STOP # period */ + { 0x002F, 0x2F }, /* SOLIDUS # slash */ + { 0x0030, 0x30 }, /* DIGIT ZERO # zero */ + { 0x0031, 0x31 }, /* DIGIT ONE # one */ + { 0x0032, 0x32 }, /* DIGIT TWO # two */ + { 0x0033, 0x33 }, /* DIGIT THREE # three */ + { 0x0034, 0x34 }, /* DIGIT FOUR # four */ + { 0x0035, 0x35 }, /* DIGIT FIVE # five */ + { 0x0036, 0x36 }, /* DIGIT SIX # six */ + { 0x0037, 0x37 }, /* DIGIT SEVEN # seven */ + { 0x0038, 0x38 }, /* DIGIT EIGHT # eight */ + { 0x0039, 0x39 }, /* DIGIT NINE # nine */ + { 0x003A, 0x3A }, /* COLON # colon */ + { 0x003B, 0x3B }, /* SEMICOLON # semicolon */ + { 0x003C, 0x3C }, /* LESS-THAN SIGN # less */ + { 0x003D, 0x3D }, /* EQUALS SIGN # equal */ + { 0x003E, 0x3E }, /* GREATER-THAN SIGN # greater */ + { 0x003F, 0x3F }, /* QUESTION MARK # question */ + { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET # bracketleft */ + { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET # bracketright */ + { 0x005F, 0x5F }, /* LOW LINE # underscore */ + { 0x007B, 0x7B }, /* LEFT CURLY BRACKET # braceleft */ + { 0x007C, 0x7C }, /* VERTICAL LINE # bar */ + { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET # braceright */ + { 0x00A0, 0x20 }, /* NO-BREAK SPACE # space */ + { 0x00AC, 0xD8 }, /* NOT SIGN # logicalnot */ + { 0x00B0, 0xB0 }, /* DEGREE SIGN # degree */ + { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN # plusminus */ + { 0x00B5, 0x6D }, /* MICRO SIGN # mu */ + { 0x00D7, 0xB4 }, /* MULTIPLICATION SIGN # multiply */ + { 0x00F7, 0xB8 }, /* DIVISION SIGN # divide */ + { 0x0192, 0xA6 }, /* LATIN SMALL LETTER F WITH HOOK # florin */ + { 0x0391, 0x41 }, /* GREEK CAPITAL LETTER ALPHA # Alpha */ + { 0x0392, 0x42 }, /* GREEK CAPITAL LETTER BETA # Beta */ + { 0x0393, 0x47 }, /* GREEK CAPITAL LETTER GAMMA # Gamma */ + { 0x0394, 0x44 }, /* GREEK CAPITAL LETTER DELTA # Delta */ + { 0x0395, 0x45 }, /* GREEK CAPITAL LETTER EPSILON # Epsilon */ + { 0x0396, 0x5A }, /* GREEK CAPITAL LETTER ZETA # Zeta */ + { 0x0397, 0x48 }, /* GREEK CAPITAL LETTER ETA # Eta */ + { 0x0398, 0x51 }, /* GREEK CAPITAL LETTER THETA # Theta */ + { 0x0399, 0x49 }, /* GREEK CAPITAL LETTER IOTA # Iota */ + { 0x039A, 0x4B }, /* GREEK CAPITAL LETTER KAPPA # Kappa */ + { 0x039B, 0x4C }, /* GREEK CAPITAL LETTER LAMDA # Lambda */ + { 0x039C, 0x4D }, /* GREEK CAPITAL LETTER MU # Mu */ + { 0x039D, 0x4E }, /* GREEK CAPITAL LETTER NU # Nu */ + { 0x039E, 0x58 }, /* GREEK CAPITAL LETTER XI # Xi */ + { 0x039F, 0x4F }, /* GREEK CAPITAL LETTER OMICRON # Omicron */ + { 0x03A0, 0x50 }, /* GREEK CAPITAL LETTER PI # Pi */ + { 0x03A1, 0x52 }, /* GREEK CAPITAL LETTER RHO # Rho */ + { 0x03A3, 0x53 }, /* GREEK CAPITAL LETTER SIGMA # Sigma */ + { 0x03A4, 0x54 }, /* GREEK CAPITAL LETTER TAU # Tau */ + { 0x03A5, 0x55 }, /* GREEK CAPITAL LETTER UPSILON # Upsilon */ + { 0x03A6, 0x46 }, /* GREEK CAPITAL LETTER PHI # Phi */ + { 0x03A7, 0x43 }, /* GREEK CAPITAL LETTER CHI # Chi */ + { 0x03A8, 0x59 }, /* GREEK CAPITAL LETTER PSI # Psi */ + { 0x03A9, 0x57 }, /* GREEK CAPITAL LETTER OMEGA # Omega */ + { 0x03B1, 0x61 }, /* GREEK SMALL LETTER ALPHA # alpha */ + { 0x03B2, 0x62 }, /* GREEK SMALL LETTER BETA # beta */ + { 0x03B3, 0x67 }, /* GREEK SMALL LETTER GAMMA # gamma */ + { 0x03B4, 0x64 }, /* GREEK SMALL LETTER DELTA # delta */ + { 0x03B5, 0x65 }, /* GREEK SMALL LETTER EPSILON # epsilon */ + { 0x03B6, 0x7A }, /* GREEK SMALL LETTER ZETA # zeta */ + { 0x03B7, 0x68 }, /* GREEK SMALL LETTER ETA # eta */ + { 0x03B8, 0x71 }, /* GREEK SMALL LETTER THETA # theta */ + { 0x03B9, 0x69 }, /* GREEK SMALL LETTER IOTA # iota */ + { 0x03BA, 0x6B }, /* GREEK SMALL LETTER KAPPA # kappa */ + { 0x03BB, 0x6C }, /* GREEK SMALL LETTER LAMDA # lambda */ + { 0x03BC, 0x6D }, /* GREEK SMALL LETTER MU # mu */ + { 0x03BD, 0x6E }, /* GREEK SMALL LETTER NU # nu */ + { 0x03BE, 0x78 }, /* GREEK SMALL LETTER XI # xi */ + { 0x03BF, 0x6F }, /* GREEK SMALL LETTER OMICRON # omicron */ + { 0x03C0, 0x70 }, /* GREEK SMALL LETTER PI # pi */ + { 0x03C1, 0x72 }, /* GREEK SMALL LETTER RHO # rho */ + { 0x03C2, 0x56 }, /* GREEK SMALL LETTER FINAL SIGMA # sigma1 */ + { 0x03C3, 0x73 }, /* GREEK SMALL LETTER SIGMA # sigma */ + { 0x03C4, 0x74 }, /* GREEK SMALL LETTER TAU # tau */ + { 0x03C5, 0x75 }, /* GREEK SMALL LETTER UPSILON # upsilon */ + { 0x03C6, 0x66 }, /* GREEK SMALL LETTER PHI # phi */ + { 0x03C7, 0x63 }, /* GREEK SMALL LETTER CHI # chi */ + { 0x03C8, 0x79 }, /* GREEK SMALL LETTER PSI # psi */ + { 0x03C9, 0x77 }, /* GREEK SMALL LETTER OMEGA # omega */ + { 0x03D1, 0x4A }, /* GREEK THETA SYMBOL # theta1 */ + { 0x03D2, 0xA1 }, /* GREEK UPSILON WITH HOOK SYMBOL # Upsilon1 */ + { 0x03D5, 0x6A }, /* GREEK PHI SYMBOL # phi1 */ + { 0x03D6, 0x76 }, /* GREEK PI SYMBOL # omega1 */ + { 0x2022, 0xB7 }, /* BULLET # bullet */ + { 0x2026, 0xBC }, /* HORIZONTAL ELLIPSIS # ellipsis */ + { 0x2032, 0xA2 }, /* PRIME # minute */ + { 0x2033, 0xB2 }, /* DOUBLE PRIME # second */ + { 0x2044, 0xA4 }, /* FRACTION SLASH # fraction */ + { 0x20AC, 0xA0 }, /* EURO SIGN # Euro */ + { 0x2111, 0xC1 }, /* BLACK-LETTER CAPITAL I # Ifraktur */ + { 0x2118, 0xC3 }, /* SCRIPT CAPITAL P # weierstrass */ + { 0x211C, 0xC2 }, /* BLACK-LETTER CAPITAL R # Rfraktur */ + { 0x2126, 0x57 }, /* OHM SIGN # Omega */ + { 0x2135, 0xC0 }, /* ALEF SYMBOL # aleph */ + { 0x2190, 0xAC }, /* LEFTWARDS ARROW # arrowleft */ + { 0x2191, 0xAD }, /* UPWARDS ARROW # arrowup */ + { 0x2192, 0xAE }, /* RIGHTWARDS ARROW # arrowright */ + { 0x2193, 0xAF }, /* DOWNWARDS ARROW # arrowdown */ + { 0x2194, 0xAB }, /* LEFT RIGHT ARROW # arrowboth */ + { 0x21B5, 0xBF }, /* DOWNWARDS ARROW WITH CORNER LEFTWARDS # carriagereturn */ + { 0x21D0, 0xDC }, /* LEFTWARDS DOUBLE ARROW # arrowdblleft */ + { 0x21D1, 0xDD }, /* UPWARDS DOUBLE ARROW # arrowdblup */ + { 0x21D2, 0xDE }, /* RIGHTWARDS DOUBLE ARROW # arrowdblright */ + { 0x21D3, 0xDF }, /* DOWNWARDS DOUBLE ARROW # arrowdbldown */ + { 0x21D4, 0xDB }, /* LEFT RIGHT DOUBLE ARROW # arrowdblboth */ + { 0x2200, 0x22 }, /* FOR ALL # universal */ + { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL # partialdiff */ + { 0x2203, 0x24 }, /* THERE EXISTS # existential */ + { 0x2205, 0xC6 }, /* EMPTY SET # emptyset */ + { 0x2206, 0x44 }, /* INCREMENT # Delta */ + { 0x2207, 0xD1 }, /* NABLA # gradient */ + { 0x2208, 0xCE }, /* ELEMENT OF # element */ + { 0x2209, 0xCF }, /* NOT AN ELEMENT OF # notelement */ + { 0x220B, 0x27 }, /* CONTAINS AS MEMBER # suchthat */ + { 0x220F, 0xD5 }, /* N-ARY PRODUCT # product */ + { 0x2211, 0xE5 }, /* N-ARY SUMMATION # summation */ + { 0x2212, 0x2D }, /* MINUS SIGN # minus */ + { 0x2215, 0xA4 }, /* DIVISION SLASH # fraction */ + { 0x2217, 0x2A }, /* ASTERISK OPERATOR # asteriskmath */ + { 0x221A, 0xD6 }, /* SQUARE ROOT # radical */ + { 0x221D, 0xB5 }, /* PROPORTIONAL TO # proportional */ + { 0x221E, 0xA5 }, /* INFINITY # infinity */ + { 0x2220, 0xD0 }, /* ANGLE # angle */ + { 0x2227, 0xD9 }, /* LOGICAL AND # logicaland */ + { 0x2228, 0xDA }, /* LOGICAL OR # logicalor */ + { 0x2229, 0xC7 }, /* INTERSECTION # intersection */ + { 0x222A, 0xC8 }, /* UNION # union */ + { 0x222B, 0xF2 }, /* INTEGRAL # integral */ + { 0x2234, 0x5C }, /* THEREFORE # therefore */ + { 0x223C, 0x7E }, /* TILDE OPERATOR # similar */ + { 0x2245, 0x40 }, /* APPROXIMATELY EQUAL TO # congruent */ + { 0x2248, 0xBB }, /* ALMOST EQUAL TO # approxequal */ + { 0x2260, 0xB9 }, /* NOT EQUAL TO # notequal */ + { 0x2261, 0xBA }, /* IDENTICAL TO # equivalence */ + { 0x2264, 0xA3 }, /* LESS-THAN OR EQUAL TO # lessequal */ + { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO # greaterequal */ + { 0x2282, 0xCC }, /* SUBSET OF # propersubset */ + { 0x2283, 0xC9 }, /* SUPERSET OF # propersuperset */ + { 0x2284, 0xCB }, /* NOT A SUBSET OF # notsubset */ + { 0x2286, 0xCD }, /* SUBSET OF OR EQUAL TO # reflexsubset */ + { 0x2287, 0xCA }, /* SUPERSET OF OR EQUAL TO # reflexsuperset */ + { 0x2295, 0xC5 }, /* CIRCLED PLUS # circleplus */ + { 0x2297, 0xC4 }, /* CIRCLED TIMES # circlemultiply */ + { 0x22A5, 0x5E }, /* UP TACK # perpendicular */ + { 0x22C5, 0xD7 }, /* DOT OPERATOR # dotmath */ + { 0x2320, 0xF3 }, /* TOP HALF INTEGRAL # integraltp */ + { 0x2321, 0xF5 }, /* BOTTOM HALF INTEGRAL # integralbt */ + { 0x2329, 0xE1 }, /* LEFT-POINTING ANGLE BRACKET # angleleft */ + { 0x232A, 0xF1 }, /* RIGHT-POINTING ANGLE BRACKET # angleright */ + { 0x25CA, 0xE0 }, /* LOZENGE # lozenge */ + { 0x2660, 0xAA }, /* BLACK SPADE SUIT # spade */ + { 0x2663, 0xA7 }, /* BLACK CLUB SUIT # club */ + { 0x2665, 0xA9 }, /* BLACK HEART SUIT # heart */ + { 0x2666, 0xA8 }, /* BLACK DIAMOND SUIT # diamond */ + { 0xF6D9, 0xD3 }, /* COPYRIGHT SIGN SERIF # copyrightserif (CUS) */ + { 0xF6DA, 0xD2 }, /* REGISTERED SIGN SERIF # registerserif (CUS) */ + { 0xF6DB, 0xD4 }, /* TRADE MARK SIGN SERIF # trademarkserif (CUS) */ + { 0xF8E5, 0x60 }, /* RADICAL EXTENDER # radicalex (CUS) */ + { 0xF8E6, 0xBD }, /* VERTICAL ARROW EXTENDER # arrowvertex (CUS) */ + { 0xF8E7, 0xBE }, /* HORIZONTAL ARROW EXTENDER # arrowhorizex (CUS) */ + { 0xF8E8, 0xE2 }, /* REGISTERED SIGN SANS SERIF # registersans (CUS) */ + { 0xF8E9, 0xE3 }, /* COPYRIGHT SIGN SANS SERIF # copyrightsans (CUS) */ + { 0xF8EA, 0xE4 }, /* TRADE MARK SIGN SANS SERIF # trademarksans (CUS) */ + { 0xF8EB, 0xE6 }, /* LEFT PAREN TOP # parenlefttp (CUS) */ + { 0xF8EC, 0xE7 }, /* LEFT PAREN EXTENDER # parenleftex (CUS) */ + { 0xF8ED, 0xE8 }, /* LEFT PAREN BOTTOM # parenleftbt (CUS) */ + { 0xF8EE, 0xE9 }, /* LEFT SQUARE BRACKET TOP # bracketlefttp (CUS) */ + { 0xF8EF, 0xEA }, /* LEFT SQUARE BRACKET EXTENDER # bracketleftex (CUS) */ + { 0xF8F0, 0xEB }, /* LEFT SQUARE BRACKET BOTTOM # bracketleftbt (CUS) */ + { 0xF8F1, 0xEC }, /* LEFT CURLY BRACKET TOP # bracelefttp (CUS) */ + { 0xF8F2, 0xED }, /* LEFT CURLY BRACKET MID # braceleftmid (CUS) */ + { 0xF8F3, 0xEE }, /* LEFT CURLY BRACKET BOTTOM # braceleftbt (CUS) */ + { 0xF8F4, 0xEF }, /* CURLY BRACKET EXTENDER # braceex (CUS) */ + { 0xF8F5, 0xF4 }, /* INTEGRAL EXTENDER # integralex (CUS) */ + { 0xF8F6, 0xF6 }, /* RIGHT PAREN TOP # parenrighttp (CUS) */ + { 0xF8F7, 0xF7 }, /* RIGHT PAREN EXTENDER # parenrightex (CUS) */ + { 0xF8F8, 0xF8 }, /* RIGHT PAREN BOTTOM # parenrightbt (CUS) */ + { 0xF8F9, 0xF9 }, /* RIGHT SQUARE BRACKET TOP # bracketrighttp (CUS) */ + { 0xF8FA, 0xFA }, /* RIGHT SQUARE BRACKET EXTENDER # bracketrightex (CUS) */ + { 0xF8FB, 0xFB }, /* RIGHT SQUARE BRACKET BOTTOM # bracketrightbt (CUS) */ + { 0xF8FC, 0xFC }, /* RIGHT CURLY BRACKET TOP # bracerighttp (CUS) */ + { 0xF8FD, 0xFD }, /* RIGHT CURLY BRACKET MID # bracerightmid (CUS) */ + { 0xF8FE, 0xFE }, /* RIGHT CURLY BRACKET BOTTOM # bracerightbt (CUS) */ +}; + +static const FcCharMap AdobeSymbol = { + AdobeSymbolEnt, + sizeof (AdobeSymbolEnt) / sizeof (AdobeSymbolEnt[0]), +}; + +static const FcFontDecode fcFontDecoders[] = { + { ft_encoding_unicode, 0, (1 << 21) - 1 }, + { ft_encoding_symbol, &AdobeSymbol, (1 << 16) - 1 }, + { ft_encoding_apple_roman, &AppleRoman, (1 << 16) - 1 }, +}; + +#define NUM_DECODE (int) (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0])) + +static const FcChar32 prefer_unicode[] = { + 0x20ac, /* EURO SIGN */ +}; + +#define NUM_PREFER_UNICODE (int) (sizeof (prefer_unicode) / sizeof (prefer_unicode[0])) + +FcChar32 +FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map) +{ + int low, high, mid; + FcChar16 bmp; + + low = 0; + high = map->nent - 1; + if (ucs4 < map->ent[low].bmp || map->ent[high].bmp < ucs4) + return ~0; + while (low <= high) + { + mid = (high + low) >> 1; + bmp = map->ent[mid].bmp; + if (ucs4 == bmp) + return (FT_ULong) map->ent[mid].encode; + if (ucs4 < bmp) + high = mid - 1; + else + low = mid + 1; + } + return ~0; +} + +FcChar32 +FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map) +{ + int i; + + for (i = 0; i < map->nent; i++) + if (map->ent[i].encode == private) + return (FcChar32) map->ent[i].bmp; + return ~0; +} + +const FcCharMap * +FcFreeTypeGetPrivateMap (FT_Encoding encoding) +{ + int i; + + for (i = 0; i < NUM_DECODE; i++) + if (fcFontDecoders[i].encoding == encoding) + return fcFontDecoders[i].map; + return 0; +} + +#include "../fc-glyphname/fcglyphname.h" + +static FcChar32 +FcHashGlyphName (const FcChar8 *name) +{ + FcChar32 h = 0; + FcChar8 c; + + while ((c = *name++)) + { + h = ((h << 1) | (h >> 31)) ^ c; + } + return h; +} + +#if HAVE_FT_HAS_PS_GLYPH_NAMES +/* + * Use Type1 glyph names for fonts which have reliable names + * and which export an Adobe Custom mapping + */ +static FcBool +FcFreeTypeUseNames (FT_Face face) +{ + FT_Int map; + + if (!FT_Has_PS_Glyph_Names (face)) + return FcFalse; + for (map = 0; map < face->num_charmaps; map++) + if (face->charmaps[map]->encoding == ft_encoding_adobe_custom) + return FcTrue; + return FcFalse; +} + +static const FcChar8 * +FcUcs4ToGlyphName (FcChar32 ucs4) +{ + int i = (int) (ucs4 % FC_GLYPHNAME_HASH); + int r = 0; + FcGlyphId gn; + + while ((gn = _fc_ucs_to_name[i]) != -1) + { + if (_fc_glyph_names[gn].ucs == ucs4) + return _fc_glyph_names[gn].name; + if (!r) + { + r = (int) (ucs4 % FC_GLYPHNAME_REHASH); + if (!r) + r = 1; + } + i += r; + if (i >= FC_GLYPHNAME_HASH) + i -= FC_GLYPHNAME_HASH; + } + return 0; +} + +static FcChar32 +FcGlyphNameToUcs4 (FcChar8 *name) +{ + FcChar32 h = FcHashGlyphName (name); + int i = (int) (h % FC_GLYPHNAME_HASH); + int r = 0; + FcGlyphId gn; + + while ((gn = _fc_name_to_ucs[i]) != -1) + { + if (!strcmp ((char *) name, (char *) _fc_glyph_names[gn].name)) + return _fc_glyph_names[gn].ucs; + if (!r) + { + r = (int) (h % FC_GLYPHNAME_REHASH); + if (!r) + r = 1; + } + i += r; + if (i >= FC_GLYPHNAME_HASH) + i -= FC_GLYPHNAME_HASH; + } + return 0xffff; +} + +/* + * Work around a bug in some FreeType versions which fail + * to correctly bounds check glyph name buffers and overwrite + * the stack. As Postscript names have a limit of 127 characters, + * this should be sufficient. + */ + +#if FC_GLYPHNAME_MAXLEN < 127 +# define FC_GLYPHNAME_BUFLEN 127 +#else +# define FC_GLYPHNAME_BUFLEN FC_GLYPHNAME_MAXLEN +#endif + +/* + * Search through a font for a glyph by name. This is + * currently a linear search as there doesn't appear to be + * any defined order within the font + */ +static FT_UInt +FcFreeTypeGlyphNameIndex (FT_Face face, const FcChar8 *name) +{ + FT_UInt gindex; + FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2]; + + for (gindex = 0; gindex < (FT_UInt) face->num_glyphs; gindex++) + { + if (FT_Get_Glyph_Name (face, gindex, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0) + if (!strcmp ((char *) name, (char *) name_buf)) + return gindex; + } + return 0; +} +#endif + +/* + * Map a UCS4 glyph to a glyph index. Use all available encoding + * tables to try and find one that works. This information is expected + * to be cached by higher levels, so performance isn't critical + */ + +FT_UInt +FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4) +{ + int initial, offset, decode; + FT_UInt glyphindex; + FcChar32 charcode; + int p; + + initial = 0; + + if (!face) + return 0; + + /* + * Find the current encoding + */ + if (face->charmap) + { + for (; initial < NUM_DECODE; initial++) + if (fcFontDecoders[initial].encoding == face->charmap->encoding) + break; + if (initial == NUM_DECODE) + initial = 0; + } + for (p = 0; p < NUM_PREFER_UNICODE; p++) + if (ucs4 == prefer_unicode[p]) + { + initial = 0; + break; + } + /* + * Check each encoding for the glyph, starting with the current one + */ + for (offset = 0; offset < NUM_DECODE; offset++) + { + decode = (initial + offset) % NUM_DECODE; + if (!face->charmap || face->charmap->encoding != fcFontDecoders[decode].encoding) + if (FT_Select_Charmap (face, fcFontDecoders[decode].encoding) != 0) + continue; + if (fcFontDecoders[decode].map) + { + charcode = FcFreeTypeUcs4ToPrivate (ucs4, fcFontDecoders[decode].map); + if (charcode == ~0U) + continue; + } + else + charcode = ucs4; + glyphindex = FT_Get_Char_Index (face, (FT_ULong) charcode); + if (glyphindex) + return glyphindex; + } +#if HAVE_FT_HAS_PS_GLYPH_NAMES + /* + * Check postscript name table if present + */ + if (FcFreeTypeUseNames (face)) + { + const FcChar8 *name = FcUcs4ToGlyphName (ucs4); + if (name) + { + glyphindex = FcFreeTypeGlyphNameIndex (face, name); + if (glyphindex) + return glyphindex; + } + } +#endif + return 0; +} + +static FcBool +FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4, + FT_UInt glyph, FcBlanks *blanks, + FT_Pos *advance, + FcBool using_strike) +{ + FT_Int load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; + FT_GlyphSlot slot; + + if (using_strike) + load_flags &= ~FT_LOAD_NO_SCALE; + + /* + * When using scalable fonts, only report those glyphs + * which can be scaled; otherwise those fonts will + * only be available at some sizes, and never when + * transformed. Avoid this by simply reporting bitmap-only + * glyphs as missing + */ + if (face->face_flags & FT_FACE_FLAG_SCALABLE) + load_flags |= FT_LOAD_NO_BITMAP; + + if (FT_Load_Glyph (face, glyph, load_flags)) + return FcFalse; + + slot = face->glyph; + if (!glyph) + return FcFalse; + + *advance = slot->metrics.horiAdvance; + + switch (slot->format) { + case ft_glyph_format_bitmap: + /* + * Bitmaps are assumed to be reasonable; if + * this proves to be a rash assumption, this + * code can be easily modified + */ + return FcTrue; + case ft_glyph_format_outline: + /* + * Glyphs with contours are always OK + */ + if (slot->outline.n_contours != 0) + return FcTrue; + /* + * Glyphs with no contours are only OK if + * they're members of the Blanks set specified + * in the configuration. If blanks isn't set, + * then allow any glyph to be blank + */ + if (!blanks || FcBlanksIsMember (blanks, ucs4)) + return FcTrue; + /* fall through ... */ + default: + break; + } + return FcFalse; +} + +#define APPROXIMATELY_EQUAL(x,y) (FC_ABS ((x) - (y)) <= FC_MAX (FC_ABS (x), FC_ABS (y)) / 33) + +static FcCharSet * +FcFreeTypeCharSetAndSpacingForSize (FT_Face face, FcBlanks *blanks, int *spacing, FT_Int strike_index) +{ + FcChar32 page, off, ucs4; +#ifdef CHECK + FcChar32 font_max = 0; +#endif + FcCharSet *fcs; + FcCharLeaf *leaf; + const FcCharMap *map; + int o; + int i; + FT_UInt glyph; + FT_Pos advance, advance_one = 0, advance_two = 0; + FcBool has_advance = FcFalse, fixed_advance = FcTrue, dual_advance = FcFalse; + FcBool using_strike = FcFalse; + + fcs = FcCharSetCreate (); + if (!fcs) + goto bail0; + +#if HAVE_FT_SELECT_SIZE + if (strike_index >= 0) { + if (FT_Select_Size (face, strike_index) != FT_Err_Ok) + goto bail1; + using_strike = FcTrue; + } +#endif + +#ifdef CHECK + printf ("Family %s style %s\n", face->family_name, face->style_name); +#endif + for (o = 0; o < NUM_DECODE; o++) + { + if (FT_Select_Charmap (face, fcFontDecoders[o].encoding) != 0) + continue; + map = fcFontDecoders[o].map; + if (map) + { + /* + * Non-Unicode tables are easy; there's a list of all possible + * characters + */ + for (i = 0; i < map->nent; i++) + { + ucs4 = map->ent[i].bmp; + glyph = FT_Get_Char_Index (face, map->ent[i].encode); + if (glyph && + FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike)) + { + /* + * ignore glyphs with zero advance. They’re + * combining characters, and while their behaviour + * isn’t well defined for monospaced applications in + * Unicode, there are many fonts which include + * zero-width combining characters in otherwise + * monospaced fonts. + */ + if (advance) + { + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } + } + + leaf = FcCharSetFindLeafCreate (fcs, ucs4); + if (!leaf) + goto bail1; + leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f)); +#ifdef CHECK + if (ucs4 > font_max) + font_max = ucs4; +#endif + } + } + } + else + { + page = ~0; + leaf = NULL; + ucs4 = FT_Get_First_Char (face, &glyph); + while (glyph != 0) + { + if (FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike)) + { + if (advance) + { + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } + } + + if ((ucs4 >> 8) != page) + { + page = (ucs4 >> 8); + leaf = FcCharSetFindLeafCreate (fcs, ucs4); + if (!leaf) + goto bail1; + } + off = ucs4 & 0xff; + leaf->map[off >> 5] |= (1 << (off & 0x1f)); +#ifdef CHECK + if (ucs4 > font_max) + font_max = ucs4; +#endif + } + ucs4 = FT_Get_Next_Char (face, ucs4, &glyph); + } +#ifdef CHECK + for (ucs4 = 0; ucs4 < 0x10000; ucs4++) + { + FcBool FT_Has, FC_Has; + + FT_Has = FT_Get_Char_Index (face, ucs4) != 0; + FC_Has = FcCharSetHasChar (fcs, ucs4); + if (FT_Has != FC_Has) + { + printf ("0x%08x FT says %d FC says %d\n", ucs4, FT_Has, FC_Has); + } + } +#endif + } + } +#if HAVE_FT_HAS_PS_GLYPH_NAMES + /* + * Add mapping from PS glyph names if available + */ + if (FcFreeTypeUseNames (face)) + { + FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2]; + + for (glyph = 0; glyph < (FT_UInt) face->num_glyphs; glyph++) + { + if (FT_Get_Glyph_Name (face, glyph, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0) + { + ucs4 = FcGlyphNameToUcs4 (name_buf); + if (ucs4 != 0xffff && + FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike)) + { + if (advance) + { + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } + } + leaf = FcCharSetFindLeafCreate (fcs, ucs4); + if (!leaf) + goto bail1; + leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f)); +#ifdef CHECK + if (ucs4 > font_max) + font_max = ucs4; +#endif + } + } + } + } +#endif +#ifdef CHECK + printf ("%d glyphs %d encoded\n", (int) face->num_glyphs, FcCharSetCount (fcs)); + for (ucs4 = 0; ucs4 <= font_max; ucs4++) + { + FcBool has_char = (glyph = FcFreeTypeCharIndex (face, ucs4)) != 0; + FcBool has_bit = FcCharSetHasChar (fcs, ucs4); + + if (has_char && !has_bit) + { + if (!FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike)) + printf ("Bitmap missing broken char 0x%x\n", ucs4); + else + printf ("Bitmap missing char 0x%x\n", ucs4); + } + else if (!has_char && has_bit) + printf ("Bitmap extra char 0x%x\n", ucs4); + } +#endif + if (fixed_advance) + *spacing = FC_MONO; + else if (dual_advance && APPROXIMATELY_EQUAL (2 * FC_MIN (advance_one, advance_two), FC_MAX (advance_one, advance_two))) + *spacing = FC_DUAL; + else + *spacing = FC_PROPORTIONAL; + return fcs; +bail1: + FcCharSetDestroy (fcs); +bail0: + return 0; +} + +FcCharSet * +FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing) +{ + FcCharSet *cs; + + cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, -1); + /* + * Check for bitmap-only ttf fonts that are missing the glyf table. + * In that case, pick a size and look for glyphs in that size instead + */ + if (FcCharSetCount (cs) == 0) + { + /* Check for non-scalable TT fonts */ + if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) && + face->num_fixed_sizes > 0 && + FT_Get_Sfnt_Table (face, ft_sfnt_head)) + { + FT_Int strike_index = 0; + int i; + + /* Select the face closest to 16 pixels tall */ + for (i = 1; i < face->num_fixed_sizes; i++) { + if (abs (face->available_sizes[i].height - 16) < + abs (face->available_sizes[strike_index].height - 16)) + strike_index = i; + } + FcCharSetDestroy (cs); + cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, strike_index); + } + } + return cs; +} + +FcCharSet * +FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks) +{ + int spacing; + + return FcFreeTypeCharSetAndSpacing (face, blanks, &spacing); +} + + +#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' ) +#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' ) +#define TTAG_SILF FT_MAKE_TAG( 'S', 'i', 'l', 'f') + +#define OTLAYOUT_HEAD "otlayout:" +#define OTLAYOUT_HEAD_LEN 9 +#define OTLAYOUT_ID_LEN 4 +/* space + head + id */ +#define OTLAYOUT_LEN (1 + OTLAYOUT_HEAD_LEN + OTLAYOUT_ID_LEN) + +/* + * This is a bit generous; the registry has only lower case and space + * except for 'DFLT'. + */ +#define FcIsSpace(x) (040 == (x)) +#define FcIsValidScript(x) (FcIsLower(x) || FcIsUpper (x) || FcIsSpace(x)) + +static void +addtag(FcChar8 *complex_, FT_ULong tag) +{ + FcChar8 tagstring[OTLAYOUT_ID_LEN + 1]; + + tagstring[0] = (FcChar8)(tag >> 24), + tagstring[1] = (FcChar8)(tag >> 16), + tagstring[2] = (FcChar8)(tag >> 8), + tagstring[3] = (FcChar8)(tag); + tagstring[4] = '\0'; + + /* skip tags which aren't alphabetic, under the assumption that + * they're probably broken + */ + if (!FcIsValidScript(tagstring[0]) || + !FcIsValidScript(tagstring[1]) || + !FcIsValidScript(tagstring[2]) || + !FcIsValidScript(tagstring[3])) + return; + + if (*complex_ != '\0') + strcat ((char *) complex_, " "); + strcat ((char *) complex_, "otlayout:"); + strcat ((char *) complex_, (char *) tagstring); +} + +static int +compareulong (const void *a, const void *b) +{ + const FT_ULong *ua = (const FT_ULong *) a; + const FT_ULong *ub = (const FT_ULong *) b; + return *ua - *ub; +} + + +static int +GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags) +{ + FT_ULong cur_offset, new_offset, base_offset; + FT_Stream stream = face->stream; + FT_Error error; + FT_UShort n, p; + FT_Memory memory; + int script_count; + + if (!stream) + return 0; + + memory = stream->memory; + + if (( error = ftglue_face_goto_table( face, tabletag, stream ) )) + return 0; + + base_offset = ftglue_stream_pos ( stream ); + + /* skip version */ + + if ( ftglue_stream_seek ( stream, base_offset + 4L ) || ftglue_stream_frame_enter( stream, 2L ) ) + return 0; + + new_offset = GET_UShort() + base_offset; + + ftglue_stream_frame_exit( stream ); + + cur_offset = ftglue_stream_pos( stream ); + + if ( ftglue_stream_seek( stream, new_offset ) != FT_Err_Ok ) + return 0; + + base_offset = ftglue_stream_pos( stream ); + + if ( ftglue_stream_frame_enter( stream, 2L ) ) + return 0; + + script_count = GET_UShort (); + + ftglue_stream_frame_exit( stream ); + + *stags = malloc(script_count * sizeof (FT_ULong)); + if (!stags) + return 0; + + p = 0; + for ( n = 0; n < script_count; n++ ) + { + if ( ftglue_stream_frame_enter( stream, 6L ) ) + goto Fail; + + (*stags)[p] = GET_ULong (); + new_offset = GET_UShort () + base_offset; + + ftglue_stream_frame_exit( stream ); + + cur_offset = ftglue_stream_pos( stream ); + + error = ftglue_stream_seek( stream, new_offset ); + + if ( error == FT_Err_Ok ) + p++; + + (void)ftglue_stream_seek( stream, cur_offset ); + } + + if (!p) + goto Fail; + + /* sort the tag list before returning it */ + qsort(*stags, script_count, sizeof(FT_ULong), compareulong); + + return script_count; + +Fail: + free(*stags); + *stags = NULL; + return 0; +} + +static FcChar8 * +FcFontCapabilities(FT_Face face) +{ + FcBool issilgraphitefont = 0; + FT_Error err; + FT_ULong len = 0; + FT_ULong *gsubtags=NULL, *gpostags=NULL; + FT_UShort gsub_count=0, gpos_count=0; + FT_ULong maxsize; + FcChar8 *complex_ = NULL; + int indx1 = 0, indx2 = 0; + + err = FT_Load_Sfnt_Table(face, TTAG_SILF, 0, 0, &len); + issilgraphitefont = ( err == FT_Err_Ok); + + gpos_count = GetScriptTags(face, TTAG_GPOS, &gpostags); + gsub_count = GetScriptTags(face, TTAG_GSUB, &gsubtags); + + if (!issilgraphitefont && !gsub_count && !gpos_count) + goto bail; + + maxsize = (((FT_ULong) gpos_count + (FT_ULong) gsub_count) * OTLAYOUT_LEN + + (issilgraphitefont ? 13 : 0)); + complex_ = malloc (sizeof (FcChar8) * maxsize); + if (!complex_) + goto bail; + + complex_[0] = '\0'; + if (issilgraphitefont) + strcpy((char *) complex_, "ttable:Silf "); + + while ((indx1 < gsub_count) || (indx2 < gpos_count)) { + if (indx1 == gsub_count) { + addtag(complex_, gpostags[indx2]); + indx2++; + } else if ((indx2 == gpos_count) || (gsubtags[indx1] < gpostags[indx2])) { + addtag(complex_, gsubtags[indx1]); + indx1++; + } else if (gsubtags[indx1] == gpostags[indx2]) { + addtag(complex_, gsubtags[indx1]); + indx1++; + indx2++; + } else { + addtag(complex_, gpostags[indx2]); + indx2++; + } + } + if (FcDebug () & FC_DBG_SCANV) + printf("complex_ features in this font: %s\n", complex_); +bail: + free(gsubtags); + free(gpostags); + return complex_; +} + +#define __fcfreetype__ +#include "fcaliastail.h" +#include "fcftaliastail.h" +#undef __fcfreetype__ diff --git a/fontconfig/src/fcfs.c b/fontconfig/src/fcfs.c index e2ff0fafe..6625687c1 100644 --- a/fontconfig/src/fcfs.c +++ b/fontconfig/src/fcfs.c @@ -1,135 +1,135 @@ -/*
- * fontconfig/src/fcfs.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-
-FcFontSet *
-FcFontSetCreate (void)
-{
- FcFontSet *s;
-
- s = (FcFontSet *) malloc (sizeof (FcFontSet));
- if (!s)
- return 0;
- FcMemAlloc (FC_MEM_FONTSET, sizeof (FcFontSet));
- s->nfont = 0;
- s->sfont = 0;
- s->fonts = 0;
- return s;
-}
-
-void
-FcFontSetDestroy (FcFontSet *s)
-{
- int i;
-
- for (i = 0; i < s->nfont; i++)
- FcPatternDestroy (s->fonts[i]);
- if (s->fonts)
- {
- FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *));
- free (s->fonts);
- }
- FcMemFree (FC_MEM_FONTSET, sizeof (FcFontSet));
- free (s);
-}
-
-FcBool
-FcFontSetAdd (FcFontSet *s, FcPattern *font)
-{
- FcPattern **f;
- int sfont;
-
- if (s->nfont == s->sfont)
- {
- sfont = s->sfont + 32;
- if (s->fonts)
- f = (FcPattern **) realloc (s->fonts, sfont * sizeof (FcPattern *));
- else
- f = (FcPattern **) malloc (sfont * sizeof (FcPattern *));
- if (!f)
- return FcFalse;
- if (s->sfont)
- FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *));
- FcMemAlloc (FC_MEM_FONTPTR, sfont * sizeof (FcPattern *));
- s->sfont = sfont;
- s->fonts = f;
- }
- s->fonts[s->nfont++] = font;
- return FcTrue;
-}
-
-FcBool
-FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s)
-{
- int i;
-
- if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet)))
- return FcFalse;
- if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *)))
- return FcFalse;
- for (i = 0; i < s->nfont; i++)
- {
- if (!FcPatternSerializeAlloc (serialize, s->fonts[i]))
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcFontSet *
-FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s)
-{
- int i;
- FcFontSet *s_serialize;
- FcPattern **fonts_serialize;
- FcPattern *p_serialize;
-
- s_serialize = FcSerializePtr (serialize, s);
- if (!s_serialize)
- return NULL;
- *s_serialize = *s;
- s_serialize->sfont = s_serialize->nfont;
-
- fonts_serialize = FcSerializePtr (serialize, s->fonts);
- if (!fonts_serialize)
- return NULL;
- s_serialize->fonts = FcPtrToEncodedOffset (s_serialize,
- fonts_serialize, FcPattern *);
-
- for (i = 0; i < s->nfont; i++)
- {
- p_serialize = FcPatternSerialize (serialize, s->fonts[i]);
- if (!p_serialize)
- return NULL;
- fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize,
- p_serialize,
- FcPattern);
- }
-
- return s_serialize;
-}
-#define __fcfs__
-#include "fcaliastail.h"
-#undef __fcfs__
+/* + * fontconfig/src/fcfs.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <stdlib.h> + +FcFontSet * +FcFontSetCreate (void) +{ + FcFontSet *s; + + s = (FcFontSet *) malloc (sizeof (FcFontSet)); + if (!s) + return 0; + FcMemAlloc (FC_MEM_FONTSET, sizeof (FcFontSet)); + s->nfont = 0; + s->sfont = 0; + s->fonts = 0; + return s; +} + +void +FcFontSetDestroy (FcFontSet *s) +{ + int i; + + for (i = 0; i < s->nfont; i++) + FcPatternDestroy (s->fonts[i]); + if (s->fonts) + { + FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *)); + free (s->fonts); + } + FcMemFree (FC_MEM_FONTSET, sizeof (FcFontSet)); + free (s); +} + +FcBool +FcFontSetAdd (FcFontSet *s, FcPattern *font) +{ + FcPattern **f; + int sfont; + + if (s->nfont == s->sfont) + { + sfont = s->sfont + 32; + if (s->fonts) + f = (FcPattern **) realloc (s->fonts, sfont * sizeof (FcPattern *)); + else + f = (FcPattern **) malloc (sfont * sizeof (FcPattern *)); + if (!f) + return FcFalse; + if (s->sfont) + FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *)); + FcMemAlloc (FC_MEM_FONTPTR, sfont * sizeof (FcPattern *)); + s->sfont = sfont; + s->fonts = f; + } + s->fonts[s->nfont++] = font; + return FcTrue; +} + +FcBool +FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s) +{ + int i; + + if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet))) + return FcFalse; + if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *))) + return FcFalse; + for (i = 0; i < s->nfont; i++) + { + if (!FcPatternSerializeAlloc (serialize, s->fonts[i])) + return FcFalse; + } + return FcTrue; +} + +FcFontSet * +FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s) +{ + int i; + FcFontSet *s_serialize; + FcPattern **fonts_serialize; + FcPattern *p_serialize; + + s_serialize = FcSerializePtr (serialize, s); + if (!s_serialize) + return NULL; + *s_serialize = *s; + s_serialize->sfont = s_serialize->nfont; + + fonts_serialize = FcSerializePtr (serialize, s->fonts); + if (!fonts_serialize) + return NULL; + s_serialize->fonts = FcPtrToEncodedOffset (s_serialize, + fonts_serialize, FcPattern *); + + for (i = 0; i < s->nfont; i++) + { + p_serialize = FcPatternSerialize (serialize, s->fonts[i]); + if (!p_serialize) + return NULL; + fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize, + p_serialize, + FcPattern); + } + + return s_serialize; +} +#define __fcfs__ +#include "fcaliastail.h" +#undef __fcfs__ diff --git a/fontconfig/src/fcftint.h b/fontconfig/src/fcftint.h index b0f9ff960..a317370e1 100644 --- a/fontconfig/src/fcftint.h +++ b/fontconfig/src/fcftint.h @@ -1,54 +1,54 @@ -/*
- * Copyright © 2007 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that copyright
- * notice and this permission notice appear in supporting documentation, and
- * that the name of the copyright holders not be used in advertising or
- * publicity pertaining to distribution of the software without specific,
- * written prior permission. The copyright holders make no representations
- * about the suitability of this software for any purpose. It is provided "as
- * is" without express or implied warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- * OF THIS SOFTWARE.
- */
-
-#ifndef _FCFTINT_H_
-#define _FCFTINT_H_
-
-#include <fontconfig/fcfreetype.h>
-
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
-#define FcPrivate __attribute__((__visibility__("hidden")))
-#define HAVE_GNUC_ATTRIBUTE 1
-#include "fcftalias.h"
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-#define FcPrivate __hidden
-#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
-#define FcPrivate
-#endif
-
-/* fcfreetype.c */
-FcPrivate FcBool
-FcFreeTypeIsExclusiveLang (const FcChar8 *lang);
-
-FcPrivate FcBool
-FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang);
-
-FcPrivate FcChar32
-FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map);
-
-FcPrivate FcChar32
-FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map);
-
-FcPrivate const FcCharMap *
-FcFreeTypeGetPrivateMap (FT_Encoding encoding);
-
-#endif /* _FCFTINT_H_ */
+/* + * Copyright © 2007 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef _FCFTINT_H_ +#define _FCFTINT_H_ + +#include <fontconfig/fcfreetype.h> + +#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) +#define FcPrivate __attribute__((__visibility__("hidden"))) +#define HAVE_GNUC_ATTRIBUTE 1 +#include "fcftalias.h" +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) +#define FcPrivate __hidden +#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ +#define FcPrivate +#endif + +/* fcfreetype.c */ +FcPrivate FcBool +FcFreeTypeIsExclusiveLang (const FcChar8 *lang); + +FcPrivate FcBool +FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang); + +FcPrivate FcChar32 +FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map); + +FcPrivate FcChar32 +FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map); + +FcPrivate const FcCharMap * +FcFreeTypeGetPrivateMap (FT_Encoding encoding); + +#endif /* _FCFTINT_H_ */ diff --git a/fontconfig/src/fcinit.c b/fontconfig/src/fcinit.c index 45f0cd4a3..b7966b6db 100644 --- a/fontconfig/src/fcinit.c +++ b/fontconfig/src/fcinit.c @@ -1,289 +1,289 @@ -/*
- * fontconfig/src/fcinit.c
- *
- * Copyright © 2001 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-
-static FcConfig *
-FcInitFallbackConfig (void)
-{
- FcConfig *config;
-
- config = FcConfigCreate ();
- if (!config)
- goto bail0;
- if (!FcConfigAddDir (config, (FcChar8 *) FC_DEFAULT_FONTS))
- goto bail1;
- if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR))
- goto bail1;
- return config;
-
-bail1:
- FcConfigDestroy (config);
-bail0:
- return 0;
-}
-
-int
-FcGetVersion (void)
-{
- return FC_VERSION;
-}
-
-/*
- * Load the configuration files
- */
-FcConfig *
-FcInitLoadConfig (void)
-{
- FcConfig *config;
-
- FcInitDebug ();
- config = FcConfigCreate ();
- if (!config)
- return NULL;
-
- if (!FcConfigParseAndLoad (config, 0, FcTrue))
- {
- FcConfigDestroy (config);
- return FcInitFallbackConfig ();
- }
-
- if (config->cacheDirs && config->cacheDirs->num == 0)
- {
- fprintf (stderr,
- "Fontconfig warning: no <cachedir> elements found. Check configuration.\n");
- fprintf (stderr,
- "Fontconfig warning: adding <cachedir>%s</cachedir>\n",
- FC_CACHEDIR);
- fprintf (stderr,
- "Fontconfig warning: adding <cachedir>~/.fontconfig</cachedir>\n");
- if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR) ||
- !FcConfigAddCacheDir (config, (FcChar8 *) "~/.fontconfig"))
- {
- fprintf (stderr,
- "Fontconfig error: out of memory");
- FcConfigDestroy (config);
- return FcInitFallbackConfig ();
- }
- }
-
- return config;
-}
-
-/*
- * Load the configuration files and scan for available fonts
- */
-FcConfig *
-FcInitLoadConfigAndFonts (void)
-{
- FcConfig *config = FcInitLoadConfig ();
-
- FcInitDebug ();
- if (!config)
- return 0;
- if (!FcConfigBuildFonts (config))
- {
- FcConfigDestroy (config);
- return 0;
- }
- return config;
-}
-
-/*
- * Initialize the default library configuration
- */
-FcBool
-FcInit (void)
-{
- FcConfig *config;
-
- if (_fcConfig)
- return FcTrue;
- config = FcInitLoadConfigAndFonts ();
- if (!config)
- return FcFalse;
- FcConfigSetCurrent (config);
- if (FcDebug() & FC_DBG_MEMORY)
- FcMemReport ();
- return FcTrue;
-}
-
-/*
- * Free all library-allocated data structures.
- */
-void
-FcFini (void)
-{
- if (_fcConfig)
- FcConfigDestroy (_fcConfig);
-
- FcPatternFini ();
- FcCacheFini ();
- if (FcDebug() & FC_DBG_MEMORY)
- FcMemReport ();
-}
-
-/*
- * Reread the configuration and available font lists
- */
-FcBool
-FcInitReinitialize (void)
-{
- FcConfig *config;
-
- config = FcInitLoadConfigAndFonts ();
- if (!config)
- return FcFalse;
- FcConfigSetCurrent (config);
- return FcTrue;
-}
-
-FcBool
-FcInitBringUptoDate (void)
-{
- FcConfig *config = FcConfigGetCurrent ();
- time_t now;
-
- /*
- * rescanInterval == 0 disables automatic up to date
- */
- if (config->rescanInterval == 0)
- return FcTrue;
- /*
- * Check no more often than rescanInterval seconds
- */
- now = time (0);
- if (config->rescanTime + config->rescanInterval - now > 0)
- return FcTrue;
- /*
- * If up to date, don't reload configuration
- */
- if (FcConfigUptoDate (0))
- return FcTrue;
- return FcInitReinitialize ();
-}
-
-static struct {
- char name[16];
- int alloc_count;
- int alloc_mem;
- int free_count;
- int free_mem;
-} FcInUse[FC_MEM_NUM] = {
- { "charset" },
- { "charleaf" },
- { "fontset" },
- { "fontptr" },
- { "objectset" },
- { "objectptr" },
- { "matrix" },
- { "pattern" },
- { "patelt" },
- { "vallist" },
- { "substate" },
- { "string" },
- { "listbuck" },
- { "strset" },
- { "strlist" },
- { "config" },
- { "langset" },
- { "atomic" },
- { "blanks" },
- { "cache" },
- { "strbuf" },
- { "subst" },
- { "objecttype" },
- { "constant" },
- { "test" },
- { "expr" },
- { "vstack" },
- { "attr" },
- { "pstack" },
- { "staticstr" },
-};
-
-static int FcAllocCount, FcAllocMem;
-static int FcFreeCount, FcFreeMem;
-
-static int FcMemNotice = 1*1024*1024;
-
-static int FcAllocNotify, FcFreeNotify;
-
-void
-FcMemReport (void)
-{
- int i;
- printf ("Fc Memory Usage:\n");
- printf ("\t Which Alloc Free Active\n");
- printf ("\t count bytes count bytes count bytes\n");
- for (i = 0; i < FC_MEM_NUM; i++)
- printf ("%16.16s%8d%8d%8d%8d%8d%8d\n",
- FcInUse[i].name,
- FcInUse[i].alloc_count, FcInUse[i].alloc_mem,
- FcInUse[i].free_count, FcInUse[i].free_mem,
- FcInUse[i].alloc_count - FcInUse[i].free_count,
- FcInUse[i].alloc_mem - FcInUse[i].free_mem);
- printf ("%16.16s%8d%8d%8d%8d%8d%8d\n",
- "Total",
- FcAllocCount, FcAllocMem,
- FcFreeCount, FcFreeMem,
- FcAllocCount - FcFreeCount,
- FcAllocMem - FcFreeMem);
- FcAllocNotify = 0;
- FcFreeNotify = 0;
-}
-
-void
-FcMemAlloc (int kind, int size)
-{
- if (FcDebug() & FC_DBG_MEMORY)
- {
- FcInUse[kind].alloc_count++;
- FcInUse[kind].alloc_mem += size;
- FcAllocCount++;
- FcAllocMem += size;
- FcAllocNotify += size;
- if (FcAllocNotify > FcMemNotice)
- FcMemReport ();
- }
-}
-
-void
-FcMemFree (int kind, int size)
-{
- if (FcDebug() & FC_DBG_MEMORY)
- {
- FcInUse[kind].free_count++;
- FcInUse[kind].free_mem += size;
- FcFreeCount++;
- FcFreeMem += size;
- FcFreeNotify += size;
- if (FcFreeNotify > FcMemNotice)
- FcMemReport ();
- }
-}
-#define __fcinit__
-#include "fcaliastail.h"
-#undef __fcinit__
+/* + * fontconfig/src/fcinit.c + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <stdlib.h> + +static FcConfig * +FcInitFallbackConfig (void) +{ + FcConfig *config; + + config = FcConfigCreate (); + if (!config) + goto bail0; + if (!FcConfigAddDir (config, (FcChar8 *) FC_DEFAULT_FONTS)) + goto bail1; + if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR)) + goto bail1; + return config; + +bail1: + FcConfigDestroy (config); +bail0: + return 0; +} + +int +FcGetVersion (void) +{ + return FC_VERSION; +} + +/* + * Load the configuration files + */ +FcConfig * +FcInitLoadConfig (void) +{ + FcConfig *config; + + FcInitDebug (); + config = FcConfigCreate (); + if (!config) + return NULL; + + if (!FcConfigParseAndLoad (config, 0, FcTrue)) + { + FcConfigDestroy (config); + return FcInitFallbackConfig (); + } + + if (config->cacheDirs && config->cacheDirs->num == 0) + { + fprintf (stderr, + "Fontconfig warning: no <cachedir> elements found. Check configuration.\n"); + fprintf (stderr, + "Fontconfig warning: adding <cachedir>%s</cachedir>\n", + FC_CACHEDIR); + fprintf (stderr, + "Fontconfig warning: adding <cachedir>~/.fontconfig</cachedir>\n"); + if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR) || + !FcConfigAddCacheDir (config, (FcChar8 *) "~/.fontconfig")) + { + fprintf (stderr, + "Fontconfig error: out of memory"); + FcConfigDestroy (config); + return FcInitFallbackConfig (); + } + } + + return config; +} + +/* + * Load the configuration files and scan for available fonts + */ +FcConfig * +FcInitLoadConfigAndFonts (void) +{ + FcConfig *config = FcInitLoadConfig (); + + FcInitDebug (); + if (!config) + return 0; + if (!FcConfigBuildFonts (config)) + { + FcConfigDestroy (config); + return 0; + } + return config; +} + +/* + * Initialize the default library configuration + */ +FcBool +FcInit (void) +{ + FcConfig *config; + + if (_fcConfig) + return FcTrue; + config = FcInitLoadConfigAndFonts (); + if (!config) + return FcFalse; + FcConfigSetCurrent (config); + if (FcDebug() & FC_DBG_MEMORY) + FcMemReport (); + return FcTrue; +} + +/* + * Free all library-allocated data structures. + */ +void +FcFini (void) +{ + if (_fcConfig) + FcConfigDestroy (_fcConfig); + + FcPatternFini (); + FcCacheFini (); + if (FcDebug() & FC_DBG_MEMORY) + FcMemReport (); +} + +/* + * Reread the configuration and available font lists + */ +FcBool +FcInitReinitialize (void) +{ + FcConfig *config; + + config = FcInitLoadConfigAndFonts (); + if (!config) + return FcFalse; + FcConfigSetCurrent (config); + return FcTrue; +} + +FcBool +FcInitBringUptoDate (void) +{ + FcConfig *config = FcConfigGetCurrent (); + time_t now; + + /* + * rescanInterval == 0 disables automatic up to date + */ + if (config->rescanInterval == 0) + return FcTrue; + /* + * Check no more often than rescanInterval seconds + */ + now = time (0); + if (config->rescanTime + config->rescanInterval - now > 0) + return FcTrue; + /* + * If up to date, don't reload configuration + */ + if (FcConfigUptoDate (0)) + return FcTrue; + return FcInitReinitialize (); +} + +static struct { + char name[16]; + int alloc_count; + int alloc_mem; + int free_count; + int free_mem; +} FcInUse[FC_MEM_NUM] = { + { "charset" }, + { "charleaf" }, + { "fontset" }, + { "fontptr" }, + { "objectset" }, + { "objectptr" }, + { "matrix" }, + { "pattern" }, + { "patelt" }, + { "vallist" }, + { "substate" }, + { "string" }, + { "listbuck" }, + { "strset" }, + { "strlist" }, + { "config" }, + { "langset" }, + { "atomic" }, + { "blanks" }, + { "cache" }, + { "strbuf" }, + { "subst" }, + { "objecttype" }, + { "constant" }, + { "test" }, + { "expr" }, + { "vstack" }, + { "attr" }, + { "pstack" }, + { "staticstr" }, +}; + +static int FcAllocCount, FcAllocMem; +static int FcFreeCount, FcFreeMem; + +static int FcMemNotice = 1*1024*1024; + +static int FcAllocNotify, FcFreeNotify; + +void +FcMemReport (void) +{ + int i; + printf ("Fc Memory Usage:\n"); + printf ("\t Which Alloc Free Active\n"); + printf ("\t count bytes count bytes count bytes\n"); + for (i = 0; i < FC_MEM_NUM; i++) + printf ("%16.16s%8d%8d%8d%8d%8d%8d\n", + FcInUse[i].name, + FcInUse[i].alloc_count, FcInUse[i].alloc_mem, + FcInUse[i].free_count, FcInUse[i].free_mem, + FcInUse[i].alloc_count - FcInUse[i].free_count, + FcInUse[i].alloc_mem - FcInUse[i].free_mem); + printf ("%16.16s%8d%8d%8d%8d%8d%8d\n", + "Total", + FcAllocCount, FcAllocMem, + FcFreeCount, FcFreeMem, + FcAllocCount - FcFreeCount, + FcAllocMem - FcFreeMem); + FcAllocNotify = 0; + FcFreeNotify = 0; +} + +void +FcMemAlloc (int kind, int size) +{ + if (FcDebug() & FC_DBG_MEMORY) + { + FcInUse[kind].alloc_count++; + FcInUse[kind].alloc_mem += size; + FcAllocCount++; + FcAllocMem += size; + FcAllocNotify += size; + if (FcAllocNotify > FcMemNotice) + FcMemReport (); + } +} + +void +FcMemFree (int kind, int size) +{ + if (FcDebug() & FC_DBG_MEMORY) + { + FcInUse[kind].free_count++; + FcInUse[kind].free_mem += size; + FcFreeCount++; + FcFreeMem += size; + FcFreeNotify += size; + if (FcFreeNotify > FcMemNotice) + FcMemReport (); + } +} +#define __fcinit__ +#include "fcaliastail.h" +#undef __fcinit__ diff --git a/fontconfig/src/fcint.h b/fontconfig/src/fcint.h index 46be99eb8..83a7a435b 100644 --- a/fontconfig/src/fcint.h +++ b/fontconfig/src/fcint.h @@ -1,1039 +1,1039 @@ -/*
- * fontconfig/src/fcint.h
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#ifndef _FCINT_H_
-#define _FCINT_H_
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#elif defined(HAVE_STDINT_H)
-#include <stdint.h>
-#else
-#error missing C99 integer data types
-#endif
-#include <string.h>
-#include <ctype.h>
-#include <errno.h>
-#include <unistd.h>
-#include <stddef.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <time.h>
-#include <fontconfig/fontconfig.h>
-#include <fontconfig/fcprivate.h>
-#include "fcdeprecate.h"
-
-#ifndef FC_CONFIG_PATH
-#define FC_CONFIG_PATH "fonts.conf"
-#endif
-
-#ifdef _WIN32
-#define FC_SEARCH_PATH_SEPARATOR ';'
-#else
-#define FC_SEARCH_PATH_SEPARATOR ':'
-#endif
-
-#define FC_DBG_MATCH 1
-#define FC_DBG_MATCHV 2
-#define FC_DBG_EDIT 4
-#define FC_DBG_FONTSET 8
-#define FC_DBG_CACHE 16
-#define FC_DBG_CACHEV 32
-#define FC_DBG_PARSE 64
-#define FC_DBG_SCAN 128
-#define FC_DBG_SCANV 256
-#define FC_DBG_MEMORY 512
-#define FC_DBG_CONFIG 1024
-#define FC_DBG_LANGSET 2048
-#define FC_DBG_OBJTYPES 4096
-
-#define FC_MEM_CHARSET 0
-#define FC_MEM_CHARLEAF 1
-#define FC_MEM_FONTSET 2
-#define FC_MEM_FONTPTR 3
-#define FC_MEM_OBJECTSET 4
-#define FC_MEM_OBJECTPTR 5
-#define FC_MEM_MATRIX 6
-#define FC_MEM_PATTERN 7
-#define FC_MEM_PATELT 8
-#define FC_MEM_VALLIST 9
-#define FC_MEM_SUBSTATE 10
-#define FC_MEM_STRING 11
-#define FC_MEM_LISTBUCK 12
-#define FC_MEM_STRSET 13
-#define FC_MEM_STRLIST 14
-#define FC_MEM_CONFIG 15
-#define FC_MEM_LANGSET 16
-#define FC_MEM_ATOMIC 17
-#define FC_MEM_BLANKS 18
-#define FC_MEM_CACHE 19
-#define FC_MEM_STRBUF 20
-#define FC_MEM_SUBST 21
-#define FC_MEM_OBJECTTYPE 22
-#define FC_MEM_CONSTANT 23
-#define FC_MEM_TEST 24
-#define FC_MEM_EXPR 25
-#define FC_MEM_VSTACK 26
-#define FC_MEM_ATTR 27
-#define FC_MEM_PSTACK 28
-#define FC_MEM_STATICSTR 29
-
-#define FC_MEM_NUM 30
-
-#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1]
-#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond))
-#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond))
-
-#define FC_MIN(a,b) ((a) < (b) ? (a) : (b))
-#define FC_MAX(a,b) ((a) > (b) ? (a) : (b))
-#define FC_ABS(a) ((a) < 0 ? -(a) : (a))
-
-/* slim_internal.h */
-#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun)
-#define FcPrivate __attribute__((__visibility__("hidden")))
-#define HAVE_GNUC_ATTRIBUTE 1
-#include "fcalias.h"
-#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550)
-#define FcPrivate __hidden
-#else /* not gcc >= 3.3 and not Sun Studio >= 8 */
-#define FcPrivate
-#endif
-
-typedef enum _FcValueBinding {
- FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame
-} FcValueBinding;
-
-/*
- * Serialized data structures use only offsets instead of pointers
- * A low bit of 1 indicates an offset.
- */
-
-/* Is the provided pointer actually an offset? */
-#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0)
-
-/* Encode offset in a pointer of type t */
-#define FcOffsetEncode(o,t) ((t *) ((o) | 1))
-
-/* Decode a pointer into an offset */
-#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1)
-
-/* Compute pointer offset */
-#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b))
-
-/* Given base address, offset and type, return a pointer */
-#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o)))
-
-/* Given base address, encoded offset and type, return a pointer */
-#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t)
-
-/* Given base address, pointer and type, return an encoded offset */
-#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t)
-
-/* Given a structure, offset member and type, return pointer */
-#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t)
-
-/* Given a structure, encoded offset member and type, return pointer to member */
-#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t)
-
-/* Given a structure, member and type, convert the member to a pointer */
-#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \
- FcEncodedOffsetMember (s,m,t) : \
- (s)->m)
-
-/*
- * Serialized values may hold strings, charsets and langsets as pointers,
- * unfortunately FcValue is an exposed type so we can't just always use
- * offsets
- */
-#define FcValueString(v) FcPointerMember(v,u.s,FcChar8)
-#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet)
-#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet)
-
-typedef struct _FcValueList *FcValueListPtr;
-
-typedef struct _FcValueList {
- struct _FcValueList *next;
- FcValue value;
- FcValueBinding binding;
-} FcValueList;
-
-#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList)
-
-typedef int FcObject;
-
-typedef struct _FcPatternElt *FcPatternEltPtr;
-
-/*
- * Pattern elts are stuck in a structure connected to the pattern,
- * so they get moved around when the pattern is resized. Hence, the
- * values field must be a pointer/offset instead of just an offset
- */
-typedef struct _FcPatternElt {
- FcObject object;
- FcValueList *values;
-} FcPatternElt;
-
-#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList)
-
-struct _FcPattern {
- int num;
- int size;
- intptr_t elts_offset;
- int ref;
-};
-
-#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt)
-
-#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *)
-
-#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \
- FcEncodedOffsetToPtr(fs, \
- FcFontSetFonts(fs)[i], \
- FcPattern) : \
- fs->fonts[i])
-
-typedef enum _FcOp {
- FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet,
- FcOpNil,
- FcOpField, FcOpConst,
- FcOpAssign, FcOpAssignReplace,
- FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast,
- FcOpQuest,
- FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual,
- FcOpContains, FcOpListing, FcOpNotContains,
- FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual,
- FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide,
- FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc,
- FcOpInvalid
-} FcOp;
-
-typedef struct _FcExpr {
- FcOp op;
- union {
- int ival;
- double dval;
- const FcChar8 *sval;
- FcMatrix *mval;
- FcBool bval;
- FcCharSet *cval;
- FcLangSet *lval;
- FcObject object;
- const FcChar8 *constant;
- struct {
- struct _FcExpr *left, *right;
- } tree;
- } u;
-} FcExpr;
-
-typedef struct _FcExprPage FcExprPage;
-
-struct _FcExprPage {
- FcExprPage *next_page;
- FcExpr *next;
- FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)];
- FcExpr end[];
-};
-
-typedef enum _FcQual {
- FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst
-} FcQual;
-
-#define FcMatchDefault ((FcMatchKind) -1)
-
-typedef struct _FcTest {
- struct _FcTest *next;
- FcMatchKind kind;
- FcQual qual;
- FcObject object;
- FcOp op;
- FcExpr *expr;
-} FcTest;
-
-typedef struct _FcEdit {
- struct _FcEdit *next;
- FcObject object;
- FcOp op;
- FcExpr *expr;
- FcValueBinding binding;
-} FcEdit;
-
-typedef struct _FcSubst {
- struct _FcSubst *next;
- FcTest *test;
- FcEdit *edit;
-} FcSubst;
-
-typedef struct _FcCharLeaf {
- FcChar32 map[256/32];
-} FcCharLeaf;
-
-#define FC_REF_CONSTANT -1
-
-struct _FcCharSet {
- int ref; /* reference count */
- int num; /* size of leaves and numbers arrays */
- intptr_t leaves_offset;
- intptr_t numbers_offset;
-};
-
-#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t)
-#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \
- FcCharSetLeaves(c)[i], \
- FcCharLeaf))
-#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16)
-
-struct _FcStrSet {
- int ref; /* reference count */
- int num;
- int size;
- FcChar8 **strs;
-};
-
-struct _FcStrList {
- FcStrSet *set;
- int n;
-};
-
-typedef struct _FcStrBuf {
- FcChar8 *buf;
- FcBool allocated;
- FcBool failed;
- int len;
- int size;
- FcChar8 buf_static[16 * sizeof (void *)];
-} FcStrBuf;
-
-struct _FcCache {
- int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */
- int version; /* FC_CACHE_CONTENT_VERSION */
- intptr_t size; /* size of file */
- intptr_t dir; /* offset to dir name */
- intptr_t dirs; /* offset to subdirs */
- int dirs_count; /* number of subdir strings */
- intptr_t set; /* offset to font set */
- int mtime; /* low bits of directory mtime */
-};
-
-#undef FcCacheDir
-#undef FcCacheSubdir
-#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8)
-#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t)
-#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet)
-#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\
- FcCacheDirs(c)[i], \
- FcChar8)
-
-/*
- * Used while constructing a directory cache object
- */
-
-#define FC_SERIALIZE_HASH_SIZE 8191
-
-typedef union _FcAlign {
- double d;
- int i;
- intptr_t ip;
- FcBool b;
- void *p;
-} FcAlign;
-
-typedef struct _FcSerializeBucket {
- struct _FcSerializeBucket *next;
- const void *object;
- intptr_t offset;
-} FcSerializeBucket;
-
-typedef struct _FcCharSetFreezer FcCharSetFreezer;
-
-typedef struct _FcSerialize {
- intptr_t size;
- FcCharSetFreezer *cs_freezer;
- void *linear;
- FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE];
-} FcSerialize;
-
-/*
- * To map adobe glyph names to unicode values, a precomputed hash
- * table is used
- */
-
-typedef struct _FcGlyphName {
- FcChar32 ucs; /* unicode value */
- FcChar8 name[1]; /* name extends beyond struct */
-} FcGlyphName;
-
-/*
- * To perform case-insensitive string comparisons, a table
- * is used which holds three different kinds of folding data.
- *
- * The first is a range of upper case values mapping to a range
- * of their lower case equivalents. Within each range, the offset
- * between upper and lower case is constant.
- *
- * The second is a range of upper case values which are interleaved
- * with their lower case equivalents.
- *
- * The third is a set of raw unicode values mapping to a list
- * of unicode values for comparison purposes. This allows conversion
- * of ß to "ss" so that SS, ss and ß all match. A separate array
- * holds the list of unicode values for each entry.
- *
- * These are packed into a single table. Using a binary search,
- * the appropriate entry can be located.
- */
-
-#define FC_CASE_FOLD_RANGE 0
-#define FC_CASE_FOLD_EVEN_ODD 1
-#define FC_CASE_FOLD_FULL 2
-
-typedef struct _FcCaseFold {
- FcChar32 upper;
- FcChar16 method : 2;
- FcChar16 count : 14;
- short offset; /* lower - upper for RANGE, table id for FULL */
-} FcCaseFold;
-
-#define FC_MAX_FILE_LEN 4096
-
-#define FC_CACHE_MAGIC_MMAP 0xFC02FC04
-#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05
-#define FC_CACHE_CONTENT_VERSION 3 /* also check FC_CACHE_VERSION */
-
-struct _FcAtomic {
- FcChar8 *file; /* original file name */
- FcChar8 *new; /* temp file name -- write data here */
- FcChar8 *lck; /* lockfile name (used for locking) */
- FcChar8 *tmp; /* tmpfile name (used for locking) */
-};
-
-struct _FcBlanks {
- int nblank;
- int sblank;
- FcChar32 *blanks;
-};
-
-struct _FcConfig {
- /*
- * File names loaded from the configuration -- saved here as the
- * cache file must be consulted before the directories are scanned,
- * and those directives may occur in any order
- */
- FcStrSet *configDirs; /* directories to scan for fonts */
- /*
- * Set of allowed blank chars -- used to
- * trim fonts of bogus glyphs
- */
- FcBlanks *blanks;
- /*
- * List of directories containing fonts,
- * built by recursively scanning the set
- * of configured directories
- */
- FcStrSet *fontDirs;
- /*
- * List of directories containing cache files.
- */
- FcStrSet *cacheDirs;
- /*
- * Names of all of the configuration files used
- * to create this configuration
- */
- FcStrSet *configFiles; /* config files loaded */
- /*
- * Substitution instructions for patterns and fonts;
- * maxObjects is used to allocate appropriate intermediate storage
- * while performing a whole set of substitutions
- */
- FcSubst *substPattern; /* substitutions for patterns */
- FcSubst *substFont; /* substitutions for fonts */
- FcSubst *substScan; /* substitutions for scanned fonts */
- int maxObjects; /* maximum number of tests in all substs */
- /*
- * List of patterns used to control font file selection
- */
- FcStrSet *acceptGlobs;
- FcStrSet *rejectGlobs;
- FcFontSet *acceptPatterns;
- FcFontSet *rejectPatterns;
- /*
- * The set of fonts loaded from the listed directories; the
- * order within the set does not determine the font selection,
- * except in the case of identical matches in which case earlier fonts
- * match preferrentially
- */
- FcFontSet *fonts[FcSetApplication + 1];
- /*
- * Fontconfig can periodically rescan the system configuration
- * and font directories. This rescanning occurs when font
- * listing requests are made, but no more often than rescanInterval
- * seconds apart.
- */
- time_t rescanTime; /* last time information was scanned */
- int rescanInterval; /* interval between scans */
-
- int ref; /* reference count */
-
- FcExprPage *expr_pool; /* pool of FcExpr's */
-};
-
-extern FcPrivate FcConfig *_fcConfig;
-
-typedef struct _FcFileTime {
- time_t time;
- FcBool set;
-} FcFileTime;
-
-typedef struct _FcCharMap FcCharMap;
-
-typedef struct _FcRange FcRange;
-
-struct _FcRange {
- FcChar32 begin;
- FcChar32 end;
-};
-
-/* fcblanks.c */
-
-/* fccache.c */
-
-FcPrivate FcCache *
-FcDirCacheScan (const FcChar8 *dir, FcConfig *config);
-
-FcPrivate FcCache *
-FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs);
-
-FcPrivate FcBool
-FcDirCacheWrite (FcCache *cache, FcConfig *config);
-
-FcPrivate void
-FcCacheObjectReference (void *object);
-
-FcPrivate void
-FcCacheObjectDereference (void *object);
-
-FcPrivate void
-FcCacheFini (void);
-
-FcPrivate void
-FcDirCacheReference (FcCache *cache, int nref);
-
-FcPrivate int
-FcStat (const char *file, struct stat *statb);
-
-/* fccfg.c */
-
-FcPrivate FcExpr *
-FcConfigAllocExpr (FcConfig *config);
-
-FcPrivate FcBool
-FcConfigAddConfigDir (FcConfig *config,
- const FcChar8 *d);
-
-FcPrivate FcBool
-FcConfigAddFontDir (FcConfig *config,
- const FcChar8 *d);
-
-FcPrivate FcBool
-FcConfigAddDir (FcConfig *config,
- const FcChar8 *d);
-
-FcPrivate FcBool
-FcConfigAddCacheDir (FcConfig *config,
- const FcChar8 *d);
-
-FcPrivate FcBool
-FcConfigAddConfigFile (FcConfig *config,
- const FcChar8 *f);
-
-FcPrivate FcBool
-FcConfigAddBlank (FcConfig *config,
- FcChar32 blank);
-
-FcPrivate FcBool
-FcConfigAddEdit (FcConfig *config,
- FcTest *test,
- FcEdit *edit,
- FcMatchKind kind);
-
-FcPrivate void
-FcConfigSetFonts (FcConfig *config,
- FcFontSet *fonts,
- FcSetName set);
-
-FcPrivate FcBool
-FcConfigCompareValue (const FcValue *m,
- FcOp op,
- const FcValue *v);
-
-FcPrivate FcBool
-FcConfigGlobAdd (FcConfig *config,
- const FcChar8 *glob,
- FcBool accept);
-
-FcPrivate FcBool
-FcConfigAcceptFilename (FcConfig *config,
- const FcChar8 *filename);
-
-FcPrivate FcBool
-FcConfigPatternsAdd (FcConfig *config,
- FcPattern *pattern,
- FcBool accept);
-
-FcPrivate FcBool
-FcConfigAcceptFont (FcConfig *config,
- const FcPattern *font);
-
-FcPrivate FcFileTime
-FcConfigModifiedTime (FcConfig *config);
-
-FcPrivate FcBool
-FcConfigAddCache (FcConfig *config, FcCache *cache,
- FcSetName set, FcStrSet *dirSet);
-
-/* fcserialize.c */
-FcPrivate intptr_t
-FcAlignSize (intptr_t size);
-
-FcPrivate FcSerialize *
-FcSerializeCreate (void);
-
-FcPrivate void
-FcSerializeDestroy (FcSerialize *serialize);
-
-FcPrivate FcBool
-FcSerializeAlloc (FcSerialize *serialize, const void *object, int size);
-
-FcPrivate intptr_t
-FcSerializeReserve (FcSerialize *serialize, int size);
-
-FcPrivate intptr_t
-FcSerializeOffset (FcSerialize *serialize, const void *object);
-
-FcPrivate void *
-FcSerializePtr (FcSerialize *serialize, const void *object);
-
-FcPrivate FcBool
-FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l);
-
-FcPrivate FcLangSet *
-FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l);
-
-/* fccharset.c */
-FcPrivate void
-FcLangCharSetPopulate (void);
-
-FcPrivate FcCharSetFreezer *
-FcCharSetFreezerCreate (void);
-
-FcPrivate const FcCharSet *
-FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs);
-
-FcPrivate void
-FcCharSetFreezerDestroy (FcCharSetFreezer *freezer);
-
-FcPrivate FcBool
-FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c);
-
-FcPrivate FcCharSet *
-FcNameParseCharSet (FcChar8 *string);
-
-FcPrivate FcBool
-FcNameUnparseValue (FcStrBuf *buf,
- FcValue *v0,
- FcChar8 *escape);
-
-FcPrivate FcBool
-FcNameUnparseValueList (FcStrBuf *buf,
- FcValueListPtr v,
- FcChar8 *escape);
-
-FcPrivate FcCharLeaf *
-FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4);
-
-FcPrivate FcBool
-FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs);
-
-FcPrivate FcCharSet *
-FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs);
-
-FcPrivate FcChar16 *
-FcCharSetGetNumbers(const FcCharSet *c);
-
-/* fcdbg.c */
-FcPrivate void
-FcValueListPrint (const FcValueListPtr l);
-
-FcPrivate void
-FcLangSetPrint (const FcLangSet *ls);
-
-FcPrivate void
-FcOpPrint (FcOp op);
-
-FcPrivate void
-FcTestPrint (const FcTest *test);
-
-FcPrivate void
-FcExprPrint (const FcExpr *expr);
-
-FcPrivate void
-FcEditPrint (const FcEdit *edit);
-
-FcPrivate void
-FcSubstPrint (const FcSubst *subst);
-
-FcPrivate void
-FcCharSetPrint (const FcCharSet *c);
-
-extern FcPrivate int FcDebugVal;
-
-#define FcDebug() (FcDebugVal)
-
-FcPrivate void
-FcInitDebug (void);
-
-/* fcdefault.c */
-FcPrivate FcChar8 *
-FcGetDefaultLang (void);
-
-/* fcdir.c */
-
-FcPrivate FcBool
-FcFileScanConfig (FcFontSet *set,
- FcStrSet *dirs,
- FcBlanks *blanks,
- const FcChar8 *file,
- FcConfig *config);
-
-FcPrivate FcBool
-FcDirScanConfig (FcFontSet *set,
- FcStrSet *dirs,
- FcBlanks *blanks,
- const FcChar8 *dir,
- FcBool force,
- FcConfig *config);
-
-/* fcfont.c */
-FcPrivate int
-FcFontDebug (void);
-
-/* fcfs.c */
-
-FcPrivate FcBool
-FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s);
-
-FcPrivate FcFontSet *
-FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s);
-
-/* fcxml.c */
-FcPrivate void
-FcTestDestroy (FcTest *test);
-
-FcPrivate void
-FcEditDestroy (FcEdit *e);
-
-/* fcinit.c */
-
-FcPrivate void
-FcMemReport (void);
-
-FcPrivate void
-FcMemAlloc (int kind, int size);
-
-FcPrivate void
-FcMemFree (int kind, int size);
-
-/* fclang.c */
-FcPrivate FcLangSet *
-FcFreeTypeLangSet (const FcCharSet *charset,
- const FcChar8 *exclusiveLang);
-
-FcPrivate FcLangResult
-FcLangCompare (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate FcLangSet *
-FcLangSetPromote (const FcChar8 *lang);
-
-FcPrivate FcLangSet *
-FcNameParseLangSet (const FcChar8 *string);
-
-FcPrivate FcBool
-FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls);
-
-FcPrivate FcChar8 *
-FcNameUnparseEscaped (FcPattern *pat, FcBool escape);
-
-/* fclist.c */
-
-FcPrivate FcBool
-FcListPatternMatchAny (const FcPattern *p,
- const FcPattern *font);
-
-/* fcmatch.c */
-
-/* fcname.c */
-
-/*
- * NOTE -- this ordering is part of the cache file format.
- * It must also match the ordering in fcname.c
- */
-
-#define FC_FAMILY_OBJECT 1
-#define FC_FAMILYLANG_OBJECT 2
-#define FC_STYLE_OBJECT 3
-#define FC_STYLELANG_OBJECT 4
-#define FC_FULLNAME_OBJECT 5
-#define FC_FULLNAMELANG_OBJECT 6
-#define FC_SLANT_OBJECT 7
-#define FC_WEIGHT_OBJECT 8
-#define FC_WIDTH_OBJECT 9
-#define FC_SIZE_OBJECT 10
-#define FC_ASPECT_OBJECT 11
-#define FC_PIXEL_SIZE_OBJECT 12
-#define FC_SPACING_OBJECT 13
-#define FC_FOUNDRY_OBJECT 14
-#define FC_ANTIALIAS_OBJECT 15
-#define FC_HINT_STYLE_OBJECT 16
-#define FC_HINTING_OBJECT 17
-#define FC_VERTICAL_LAYOUT_OBJECT 18
-#define FC_AUTOHINT_OBJECT 19
-#define FC_GLOBAL_ADVANCE_OBJECT 20
-#define FC_FILE_OBJECT 21
-#define FC_INDEX_OBJECT 22
-#define FC_RASTERIZER_OBJECT 23
-#define FC_OUTLINE_OBJECT 24
-#define FC_SCALABLE_OBJECT 25
-#define FC_DPI_OBJECT 26
-#define FC_RGBA_OBJECT 27
-#define FC_SCALE_OBJECT 28
-#define FC_MINSPACE_OBJECT 29
-#define FC_CHAR_WIDTH_OBJECT 30
-#define FC_CHAR_HEIGHT_OBJECT 31
-#define FC_MATRIX_OBJECT 32
-#define FC_CHARSET_OBJECT 33
-#define FC_LANG_OBJECT 34
-#define FC_FONTVERSION_OBJECT 35
-#define FC_CAPABILITY_OBJECT 36
-#define FC_FONTFORMAT_OBJECT 37
-#define FC_EMBOLDEN_OBJECT 38
-#define FC_EMBEDDED_BITMAP_OBJECT 39
-#define FC_DECORATIVE_OBJECT 40
-#define FC_LCD_FILTER_OBJECT 41
-#define FC_MAX_BASE_OBJECT FC_LCD_FILTER_OBJECT
-
-FcPrivate FcBool
-FcNameBool (const FcChar8 *v, FcBool *result);
-
-FcPrivate FcBool
-FcObjectValidType (FcObject object, FcType type);
-
-FcPrivate FcObject
-FcObjectFromName (const char * name);
-
-FcPrivate const char *
-FcObjectName (FcObject object);
-
-FcPrivate FcObjectSet *
-FcObjectGetSet (void);
-
-FcPrivate FcBool
-FcObjectInit (void);
-
-FcPrivate void
-FcObjectFini (void);
-
-#define FcObjectCompare(a, b) ((int) a - (int) b)
-
-/* fcpat.c */
-
-FcPrivate FcValue
-FcValueCanonicalize (const FcValue *v);
-
-FcPrivate void
-FcValueListDestroy (FcValueListPtr l);
-
-FcPrivate FcPatternElt *
-FcPatternObjectFindElt (const FcPattern *p, FcObject object);
-
-FcPrivate FcPatternElt *
-FcPatternObjectInsertElt (FcPattern *p, FcObject object);
-
-FcPrivate FcBool
-FcPatternObjectAddWithBinding (FcPattern *p,
- FcObject object,
- FcValue value,
- FcValueBinding binding,
- FcBool append);
-
-FcPrivate FcBool
-FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append);
-
-FcPrivate FcBool
-FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append);
-
-FcPrivate FcResult
-FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v);
-
-FcPrivate FcBool
-FcPatternObjectDel (FcPattern *p, FcObject object);
-
-FcPrivate FcBool
-FcPatternObjectRemove (FcPattern *p, FcObject object, int id);
-
-FcPrivate FcBool
-FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i);
-
-FcPrivate FcBool
-FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d);
-
-FcPrivate FcBool
-FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s);
-
-FcPrivate FcBool
-FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s);
-
-FcPrivate FcBool
-FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c);
-
-FcPrivate FcBool
-FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b);
-
-FcPrivate FcBool
-FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls);
-
-FcPrivate FcResult
-FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i);
-
-FcPrivate FcResult
-FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d);
-
-FcPrivate FcResult
-FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s);
-
-FcPrivate FcResult
-FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s);
-
-FcPrivate FcResult
-FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c);
-
-FcPrivate FcResult
-FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b);
-
-FcPrivate FcResult
-FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls);
-
-FcPrivate void
-FcPatternFini (void);
-
-FcPrivate FcBool
-FcPatternAppend (FcPattern *p, FcPattern *s);
-
-FcPrivate const FcChar8 *
-FcStrStaticName (const FcChar8 *name);
-
-FcPrivate FcChar32
-FcStringHash (const FcChar8 *s);
-
-FcPrivate FcBool
-FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat);
-
-FcPrivate FcPattern *
-FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat);
-
-FcPrivate FcBool
-FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat);
-
-FcPrivate FcValueList *
-FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat);
-
-/* fcrender.c */
-
-/* fcmatrix.c */
-
-extern FcPrivate const FcMatrix FcIdentityMatrix;
-
-FcPrivate void
-FcMatrixFree (FcMatrix *mat);
-
-/* fcstr.c */
-FcPrivate void
-FcStrSetSort (FcStrSet * set);
-
-FcPrivate void
-FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size);
-
-FcPrivate void
-FcStrBufDestroy (FcStrBuf *buf);
-
-FcPrivate FcChar8 *
-FcStrBufDone (FcStrBuf *buf);
-
-FcPrivate FcChar8 *
-FcStrBufDoneStatic (FcStrBuf *buf);
-
-FcPrivate FcBool
-FcStrBufChar (FcStrBuf *buf, FcChar8 c);
-
-FcPrivate FcBool
-FcStrBufString (FcStrBuf *buf, const FcChar8 *s);
-
-FcPrivate FcBool
-FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len);
-
-FcPrivate int
-FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate const FcChar8 *
-FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate const FcChar8 *
-FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate const FcChar8 *
-FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2);
-
-FcPrivate FcBool
-FcStrUsesHome (const FcChar8 *s);
-
-FcPrivate FcChar8 *
-FcStrLastSlash (const FcChar8 *path);
-
-FcPrivate FcChar32
-FcStrHashIgnoreCase (const FcChar8 *s);
-
-FcPrivate FcChar8 *
-FcStrCanonFilename (const FcChar8 *s);
-
-FcPrivate FcBool
-FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str);
-
-FcPrivate FcChar8 *
-FcStrSerialize (FcSerialize *serialize, const FcChar8 *str);
-
-#endif /* _FC_INT_H_ */
+/* + * fontconfig/src/fcint.h + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _FCINT_H_ +#define _FCINT_H_ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdlib.h> +#include <stdio.h> +#ifdef HAVE_INTTYPES_H +#include <inttypes.h> +#elif defined(HAVE_STDINT_H) +#include <stdint.h> +#else +#error missing C99 integer data types +#endif +#include <string.h> +#include <ctype.h> +#include <errno.h> +#include <unistd.h> +#include <stddef.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <time.h> +#include <fontconfig/fontconfig.h> +#include <fontconfig/fcprivate.h> +#include "fcdeprecate.h" + +#ifndef FC_CONFIG_PATH +#define FC_CONFIG_PATH "fonts.conf" +#endif + +#ifdef _WIN32 +#define FC_SEARCH_PATH_SEPARATOR ';' +#else +#define FC_SEARCH_PATH_SEPARATOR ':' +#endif + +#define FC_DBG_MATCH 1 +#define FC_DBG_MATCHV 2 +#define FC_DBG_EDIT 4 +#define FC_DBG_FONTSET 8 +#define FC_DBG_CACHE 16 +#define FC_DBG_CACHEV 32 +#define FC_DBG_PARSE 64 +#define FC_DBG_SCAN 128 +#define FC_DBG_SCANV 256 +#define FC_DBG_MEMORY 512 +#define FC_DBG_CONFIG 1024 +#define FC_DBG_LANGSET 2048 +#define FC_DBG_OBJTYPES 4096 + +#define FC_MEM_CHARSET 0 +#define FC_MEM_CHARLEAF 1 +#define FC_MEM_FONTSET 2 +#define FC_MEM_FONTPTR 3 +#define FC_MEM_OBJECTSET 4 +#define FC_MEM_OBJECTPTR 5 +#define FC_MEM_MATRIX 6 +#define FC_MEM_PATTERN 7 +#define FC_MEM_PATELT 8 +#define FC_MEM_VALLIST 9 +#define FC_MEM_SUBSTATE 10 +#define FC_MEM_STRING 11 +#define FC_MEM_LISTBUCK 12 +#define FC_MEM_STRSET 13 +#define FC_MEM_STRLIST 14 +#define FC_MEM_CONFIG 15 +#define FC_MEM_LANGSET 16 +#define FC_MEM_ATOMIC 17 +#define FC_MEM_BLANKS 18 +#define FC_MEM_CACHE 19 +#define FC_MEM_STRBUF 20 +#define FC_MEM_SUBST 21 +#define FC_MEM_OBJECTTYPE 22 +#define FC_MEM_CONSTANT 23 +#define FC_MEM_TEST 24 +#define FC_MEM_EXPR 25 +#define FC_MEM_VSTACK 26 +#define FC_MEM_ATTR 27 +#define FC_MEM_PSTACK 28 +#define FC_MEM_STATICSTR 29 + +#define FC_MEM_NUM 30 + +#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] +#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond)) +#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond)) + +#define FC_MIN(a,b) ((a) < (b) ? (a) : (b)) +#define FC_MAX(a,b) ((a) > (b) ? (a) : (b)) +#define FC_ABS(a) ((a) < 0 ? -(a) : (a)) + +/* slim_internal.h */ +#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) +#define FcPrivate __attribute__((__visibility__("hidden"))) +#define HAVE_GNUC_ATTRIBUTE 1 +#include "fcalias.h" +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) +#define FcPrivate __hidden +#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ +#define FcPrivate +#endif + +typedef enum _FcValueBinding { + FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame +} FcValueBinding; + +/* + * Serialized data structures use only offsets instead of pointers + * A low bit of 1 indicates an offset. + */ + +/* Is the provided pointer actually an offset? */ +#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0) + +/* Encode offset in a pointer of type t */ +#define FcOffsetEncode(o,t) ((t *) ((o) | 1)) + +/* Decode a pointer into an offset */ +#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1) + +/* Compute pointer offset */ +#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b)) + +/* Given base address, offset and type, return a pointer */ +#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o))) + +/* Given base address, encoded offset and type, return a pointer */ +#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t) + +/* Given base address, pointer and type, return an encoded offset */ +#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t) + +/* Given a structure, offset member and type, return pointer */ +#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t) + +/* Given a structure, encoded offset member and type, return pointer to member */ +#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t) + +/* Given a structure, member and type, convert the member to a pointer */ +#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \ + FcEncodedOffsetMember (s,m,t) : \ + (s)->m) + +/* + * Serialized values may hold strings, charsets and langsets as pointers, + * unfortunately FcValue is an exposed type so we can't just always use + * offsets + */ +#define FcValueString(v) FcPointerMember(v,u.s,FcChar8) +#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet) +#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet) + +typedef struct _FcValueList *FcValueListPtr; + +typedef struct _FcValueList { + struct _FcValueList *next; + FcValue value; + FcValueBinding binding; +} FcValueList; + +#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList) + +typedef int FcObject; + +typedef struct _FcPatternElt *FcPatternEltPtr; + +/* + * Pattern elts are stuck in a structure connected to the pattern, + * so they get moved around when the pattern is resized. Hence, the + * values field must be a pointer/offset instead of just an offset + */ +typedef struct _FcPatternElt { + FcObject object; + FcValueList *values; +} FcPatternElt; + +#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList) + +struct _FcPattern { + int num; + int size; + intptr_t elts_offset; + int ref; +}; + +#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt) + +#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *) + +#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \ + FcEncodedOffsetToPtr(fs, \ + FcFontSetFonts(fs)[i], \ + FcPattern) : \ + fs->fonts[i]) + +typedef enum _FcOp { + FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet, + FcOpNil, + FcOpField, FcOpConst, + FcOpAssign, FcOpAssignReplace, + FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast, + FcOpQuest, + FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual, + FcOpContains, FcOpListing, FcOpNotContains, + FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual, + FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide, + FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc, + FcOpInvalid +} FcOp; + +typedef struct _FcExpr { + FcOp op; + union { + int ival; + double dval; + const FcChar8 *sval; + FcMatrix *mval; + FcBool bval; + FcCharSet *cval; + FcLangSet *lval; + FcObject object; + const FcChar8 *constant; + struct { + struct _FcExpr *left, *right; + } tree; + } u; +} FcExpr; + +typedef struct _FcExprPage FcExprPage; + +struct _FcExprPage { + FcExprPage *next_page; + FcExpr *next; + FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)]; + FcExpr end[]; +}; + +typedef enum _FcQual { + FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst +} FcQual; + +#define FcMatchDefault ((FcMatchKind) -1) + +typedef struct _FcTest { + struct _FcTest *next; + FcMatchKind kind; + FcQual qual; + FcObject object; + FcOp op; + FcExpr *expr; +} FcTest; + +typedef struct _FcEdit { + struct _FcEdit *next; + FcObject object; + FcOp op; + FcExpr *expr; + FcValueBinding binding; +} FcEdit; + +typedef struct _FcSubst { + struct _FcSubst *next; + FcTest *test; + FcEdit *edit; +} FcSubst; + +typedef struct _FcCharLeaf { + FcChar32 map[256/32]; +} FcCharLeaf; + +#define FC_REF_CONSTANT -1 + +struct _FcCharSet { + int ref; /* reference count */ + int num; /* size of leaves and numbers arrays */ + intptr_t leaves_offset; + intptr_t numbers_offset; +}; + +#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t) +#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \ + FcCharSetLeaves(c)[i], \ + FcCharLeaf)) +#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16) + +struct _FcStrSet { + int ref; /* reference count */ + int num; + int size; + FcChar8 **strs; +}; + +struct _FcStrList { + FcStrSet *set; + int n; +}; + +typedef struct _FcStrBuf { + FcChar8 *buf; + FcBool allocated; + FcBool failed; + int len; + int size; + FcChar8 buf_static[16 * sizeof (void *)]; +} FcStrBuf; + +struct _FcCache { + int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */ + int version; /* FC_CACHE_CONTENT_VERSION */ + intptr_t size; /* size of file */ + intptr_t dir; /* offset to dir name */ + intptr_t dirs; /* offset to subdirs */ + int dirs_count; /* number of subdir strings */ + intptr_t set; /* offset to font set */ + int mtime; /* low bits of directory mtime */ +}; + +#undef FcCacheDir +#undef FcCacheSubdir +#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8) +#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t) +#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet) +#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\ + FcCacheDirs(c)[i], \ + FcChar8) + +/* + * Used while constructing a directory cache object + */ + +#define FC_SERIALIZE_HASH_SIZE 8191 + +typedef union _FcAlign { + double d; + int i; + intptr_t ip; + FcBool b; + void *p; +} FcAlign; + +typedef struct _FcSerializeBucket { + struct _FcSerializeBucket *next; + const void *object; + intptr_t offset; +} FcSerializeBucket; + +typedef struct _FcCharSetFreezer FcCharSetFreezer; + +typedef struct _FcSerialize { + intptr_t size; + FcCharSetFreezer *cs_freezer; + void *linear; + FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE]; +} FcSerialize; + +/* + * To map adobe glyph names to unicode values, a precomputed hash + * table is used + */ + +typedef struct _FcGlyphName { + FcChar32 ucs; /* unicode value */ + FcChar8 name[1]; /* name extends beyond struct */ +} FcGlyphName; + +/* + * To perform case-insensitive string comparisons, a table + * is used which holds three different kinds of folding data. + * + * The first is a range of upper case values mapping to a range + * of their lower case equivalents. Within each range, the offset + * between upper and lower case is constant. + * + * The second is a range of upper case values which are interleaved + * with their lower case equivalents. + * + * The third is a set of raw unicode values mapping to a list + * of unicode values for comparison purposes. This allows conversion + * of ß to "ss" so that SS, ss and ß all match. A separate array + * holds the list of unicode values for each entry. + * + * These are packed into a single table. Using a binary search, + * the appropriate entry can be located. + */ + +#define FC_CASE_FOLD_RANGE 0 +#define FC_CASE_FOLD_EVEN_ODD 1 +#define FC_CASE_FOLD_FULL 2 + +typedef struct _FcCaseFold { + FcChar32 upper; + FcChar16 method : 2; + FcChar16 count : 14; + short offset; /* lower - upper for RANGE, table id for FULL */ +} FcCaseFold; + +#define FC_MAX_FILE_LEN 4096 + +#define FC_CACHE_MAGIC_MMAP 0xFC02FC04 +#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05 +#define FC_CACHE_CONTENT_VERSION 3 /* also check FC_CACHE_VERSION */ + +struct _FcAtomic { + FcChar8 *file; /* original file name */ + FcChar8 *new; /* temp file name -- write data here */ + FcChar8 *lck; /* lockfile name (used for locking) */ + FcChar8 *tmp; /* tmpfile name (used for locking) */ +}; + +struct _FcBlanks { + int nblank; + int sblank; + FcChar32 *blanks; +}; + +struct _FcConfig { + /* + * File names loaded from the configuration -- saved here as the + * cache file must be consulted before the directories are scanned, + * and those directives may occur in any order + */ + FcStrSet *configDirs; /* directories to scan for fonts */ + /* + * Set of allowed blank chars -- used to + * trim fonts of bogus glyphs + */ + FcBlanks *blanks; + /* + * List of directories containing fonts, + * built by recursively scanning the set + * of configured directories + */ + FcStrSet *fontDirs; + /* + * List of directories containing cache files. + */ + FcStrSet *cacheDirs; + /* + * Names of all of the configuration files used + * to create this configuration + */ + FcStrSet *configFiles; /* config files loaded */ + /* + * Substitution instructions for patterns and fonts; + * maxObjects is used to allocate appropriate intermediate storage + * while performing a whole set of substitutions + */ + FcSubst *substPattern; /* substitutions for patterns */ + FcSubst *substFont; /* substitutions for fonts */ + FcSubst *substScan; /* substitutions for scanned fonts */ + int maxObjects; /* maximum number of tests in all substs */ + /* + * List of patterns used to control font file selection + */ + FcStrSet *acceptGlobs; + FcStrSet *rejectGlobs; + FcFontSet *acceptPatterns; + FcFontSet *rejectPatterns; + /* + * The set of fonts loaded from the listed directories; the + * order within the set does not determine the font selection, + * except in the case of identical matches in which case earlier fonts + * match preferrentially + */ + FcFontSet *fonts[FcSetApplication + 1]; + /* + * Fontconfig can periodically rescan the system configuration + * and font directories. This rescanning occurs when font + * listing requests are made, but no more often than rescanInterval + * seconds apart. + */ + time_t rescanTime; /* last time information was scanned */ + int rescanInterval; /* interval between scans */ + + int ref; /* reference count */ + + FcExprPage *expr_pool; /* pool of FcExpr's */ +}; + +extern FcPrivate FcConfig *_fcConfig; + +typedef struct _FcFileTime { + time_t time; + FcBool set; +} FcFileTime; + +typedef struct _FcCharMap FcCharMap; + +typedef struct _FcRange FcRange; + +struct _FcRange { + FcChar32 begin; + FcChar32 end; +}; + +/* fcblanks.c */ + +/* fccache.c */ + +FcPrivate FcCache * +FcDirCacheScan (const FcChar8 *dir, FcConfig *config); + +FcPrivate FcCache * +FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs); + +FcPrivate FcBool +FcDirCacheWrite (FcCache *cache, FcConfig *config); + +FcPrivate void +FcCacheObjectReference (void *object); + +FcPrivate void +FcCacheObjectDereference (void *object); + +FcPrivate void +FcCacheFini (void); + +FcPrivate void +FcDirCacheReference (FcCache *cache, int nref); + +FcPrivate int +FcStat (const char *file, struct stat *statb); + +/* fccfg.c */ + +FcPrivate FcExpr * +FcConfigAllocExpr (FcConfig *config); + +FcPrivate FcBool +FcConfigAddConfigDir (FcConfig *config, + const FcChar8 *d); + +FcPrivate FcBool +FcConfigAddFontDir (FcConfig *config, + const FcChar8 *d); + +FcPrivate FcBool +FcConfigAddDir (FcConfig *config, + const FcChar8 *d); + +FcPrivate FcBool +FcConfigAddCacheDir (FcConfig *config, + const FcChar8 *d); + +FcPrivate FcBool +FcConfigAddConfigFile (FcConfig *config, + const FcChar8 *f); + +FcPrivate FcBool +FcConfigAddBlank (FcConfig *config, + FcChar32 blank); + +FcPrivate FcBool +FcConfigAddEdit (FcConfig *config, + FcTest *test, + FcEdit *edit, + FcMatchKind kind); + +FcPrivate void +FcConfigSetFonts (FcConfig *config, + FcFontSet *fonts, + FcSetName set); + +FcPrivate FcBool +FcConfigCompareValue (const FcValue *m, + FcOp op, + const FcValue *v); + +FcPrivate FcBool +FcConfigGlobAdd (FcConfig *config, + const FcChar8 *glob, + FcBool accept); + +FcPrivate FcBool +FcConfigAcceptFilename (FcConfig *config, + const FcChar8 *filename); + +FcPrivate FcBool +FcConfigPatternsAdd (FcConfig *config, + FcPattern *pattern, + FcBool accept); + +FcPrivate FcBool +FcConfigAcceptFont (FcConfig *config, + const FcPattern *font); + +FcPrivate FcFileTime +FcConfigModifiedTime (FcConfig *config); + +FcPrivate FcBool +FcConfigAddCache (FcConfig *config, FcCache *cache, + FcSetName set, FcStrSet *dirSet); + +/* fcserialize.c */ +FcPrivate intptr_t +FcAlignSize (intptr_t size); + +FcPrivate FcSerialize * +FcSerializeCreate (void); + +FcPrivate void +FcSerializeDestroy (FcSerialize *serialize); + +FcPrivate FcBool +FcSerializeAlloc (FcSerialize *serialize, const void *object, int size); + +FcPrivate intptr_t +FcSerializeReserve (FcSerialize *serialize, int size); + +FcPrivate intptr_t +FcSerializeOffset (FcSerialize *serialize, const void *object); + +FcPrivate void * +FcSerializePtr (FcSerialize *serialize, const void *object); + +FcPrivate FcBool +FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l); + +FcPrivate FcLangSet * +FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l); + +/* fccharset.c */ +FcPrivate void +FcLangCharSetPopulate (void); + +FcPrivate FcCharSetFreezer * +FcCharSetFreezerCreate (void); + +FcPrivate const FcCharSet * +FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs); + +FcPrivate void +FcCharSetFreezerDestroy (FcCharSetFreezer *freezer); + +FcPrivate FcBool +FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c); + +FcPrivate FcCharSet * +FcNameParseCharSet (FcChar8 *string); + +FcPrivate FcBool +FcNameUnparseValue (FcStrBuf *buf, + FcValue *v0, + FcChar8 *escape); + +FcPrivate FcBool +FcNameUnparseValueList (FcStrBuf *buf, + FcValueListPtr v, + FcChar8 *escape); + +FcPrivate FcCharLeaf * +FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4); + +FcPrivate FcBool +FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs); + +FcPrivate FcCharSet * +FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs); + +FcPrivate FcChar16 * +FcCharSetGetNumbers(const FcCharSet *c); + +/* fcdbg.c */ +FcPrivate void +FcValueListPrint (const FcValueListPtr l); + +FcPrivate void +FcLangSetPrint (const FcLangSet *ls); + +FcPrivate void +FcOpPrint (FcOp op); + +FcPrivate void +FcTestPrint (const FcTest *test); + +FcPrivate void +FcExprPrint (const FcExpr *expr); + +FcPrivate void +FcEditPrint (const FcEdit *edit); + +FcPrivate void +FcSubstPrint (const FcSubst *subst); + +FcPrivate void +FcCharSetPrint (const FcCharSet *c); + +extern FcPrivate int FcDebugVal; + +#define FcDebug() (FcDebugVal) + +FcPrivate void +FcInitDebug (void); + +/* fcdefault.c */ +FcPrivate FcChar8 * +FcGetDefaultLang (void); + +/* fcdir.c */ + +FcPrivate FcBool +FcFileScanConfig (FcFontSet *set, + FcStrSet *dirs, + FcBlanks *blanks, + const FcChar8 *file, + FcConfig *config); + +FcPrivate FcBool +FcDirScanConfig (FcFontSet *set, + FcStrSet *dirs, + FcBlanks *blanks, + const FcChar8 *dir, + FcBool force, + FcConfig *config); + +/* fcfont.c */ +FcPrivate int +FcFontDebug (void); + +/* fcfs.c */ + +FcPrivate FcBool +FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s); + +FcPrivate FcFontSet * +FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s); + +/* fcxml.c */ +FcPrivate void +FcTestDestroy (FcTest *test); + +FcPrivate void +FcEditDestroy (FcEdit *e); + +/* fcinit.c */ + +FcPrivate void +FcMemReport (void); + +FcPrivate void +FcMemAlloc (int kind, int size); + +FcPrivate void +FcMemFree (int kind, int size); + +/* fclang.c */ +FcPrivate FcLangSet * +FcFreeTypeLangSet (const FcCharSet *charset, + const FcChar8 *exclusiveLang); + +FcPrivate FcLangResult +FcLangCompare (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate FcLangSet * +FcLangSetPromote (const FcChar8 *lang); + +FcPrivate FcLangSet * +FcNameParseLangSet (const FcChar8 *string); + +FcPrivate FcBool +FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls); + +FcPrivate FcChar8 * +FcNameUnparseEscaped (FcPattern *pat, FcBool escape); + +/* fclist.c */ + +FcPrivate FcBool +FcListPatternMatchAny (const FcPattern *p, + const FcPattern *font); + +/* fcmatch.c */ + +/* fcname.c */ + +/* + * NOTE -- this ordering is part of the cache file format. + * It must also match the ordering in fcname.c + */ + +#define FC_FAMILY_OBJECT 1 +#define FC_FAMILYLANG_OBJECT 2 +#define FC_STYLE_OBJECT 3 +#define FC_STYLELANG_OBJECT 4 +#define FC_FULLNAME_OBJECT 5 +#define FC_FULLNAMELANG_OBJECT 6 +#define FC_SLANT_OBJECT 7 +#define FC_WEIGHT_OBJECT 8 +#define FC_WIDTH_OBJECT 9 +#define FC_SIZE_OBJECT 10 +#define FC_ASPECT_OBJECT 11 +#define FC_PIXEL_SIZE_OBJECT 12 +#define FC_SPACING_OBJECT 13 +#define FC_FOUNDRY_OBJECT 14 +#define FC_ANTIALIAS_OBJECT 15 +#define FC_HINT_STYLE_OBJECT 16 +#define FC_HINTING_OBJECT 17 +#define FC_VERTICAL_LAYOUT_OBJECT 18 +#define FC_AUTOHINT_OBJECT 19 +#define FC_GLOBAL_ADVANCE_OBJECT 20 +#define FC_FILE_OBJECT 21 +#define FC_INDEX_OBJECT 22 +#define FC_RASTERIZER_OBJECT 23 +#define FC_OUTLINE_OBJECT 24 +#define FC_SCALABLE_OBJECT 25 +#define FC_DPI_OBJECT 26 +#define FC_RGBA_OBJECT 27 +#define FC_SCALE_OBJECT 28 +#define FC_MINSPACE_OBJECT 29 +#define FC_CHAR_WIDTH_OBJECT 30 +#define FC_CHAR_HEIGHT_OBJECT 31 +#define FC_MATRIX_OBJECT 32 +#define FC_CHARSET_OBJECT 33 +#define FC_LANG_OBJECT 34 +#define FC_FONTVERSION_OBJECT 35 +#define FC_CAPABILITY_OBJECT 36 +#define FC_FONTFORMAT_OBJECT 37 +#define FC_EMBOLDEN_OBJECT 38 +#define FC_EMBEDDED_BITMAP_OBJECT 39 +#define FC_DECORATIVE_OBJECT 40 +#define FC_LCD_FILTER_OBJECT 41 +#define FC_MAX_BASE_OBJECT FC_LCD_FILTER_OBJECT + +FcPrivate FcBool +FcNameBool (const FcChar8 *v, FcBool *result); + +FcPrivate FcBool +FcObjectValidType (FcObject object, FcType type); + +FcPrivate FcObject +FcObjectFromName (const char * name); + +FcPrivate const char * +FcObjectName (FcObject object); + +FcPrivate FcObjectSet * +FcObjectGetSet (void); + +FcPrivate FcBool +FcObjectInit (void); + +FcPrivate void +FcObjectFini (void); + +#define FcObjectCompare(a, b) ((int) a - (int) b) + +/* fcpat.c */ + +FcPrivate FcValue +FcValueCanonicalize (const FcValue *v); + +FcPrivate void +FcValueListDestroy (FcValueListPtr l); + +FcPrivate FcPatternElt * +FcPatternObjectFindElt (const FcPattern *p, FcObject object); + +FcPrivate FcPatternElt * +FcPatternObjectInsertElt (FcPattern *p, FcObject object); + +FcPrivate FcBool +FcPatternObjectAddWithBinding (FcPattern *p, + FcObject object, + FcValue value, + FcValueBinding binding, + FcBool append); + +FcPrivate FcBool +FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append); + +FcPrivate FcBool +FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append); + +FcPrivate FcResult +FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v); + +FcPrivate FcBool +FcPatternObjectDel (FcPattern *p, FcObject object); + +FcPrivate FcBool +FcPatternObjectRemove (FcPattern *p, FcObject object, int id); + +FcPrivate FcBool +FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i); + +FcPrivate FcBool +FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d); + +FcPrivate FcBool +FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s); + +FcPrivate FcBool +FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s); + +FcPrivate FcBool +FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c); + +FcPrivate FcBool +FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b); + +FcPrivate FcBool +FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls); + +FcPrivate FcResult +FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i); + +FcPrivate FcResult +FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d); + +FcPrivate FcResult +FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s); + +FcPrivate FcResult +FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s); + +FcPrivate FcResult +FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c); + +FcPrivate FcResult +FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b); + +FcPrivate FcResult +FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls); + +FcPrivate void +FcPatternFini (void); + +FcPrivate FcBool +FcPatternAppend (FcPattern *p, FcPattern *s); + +FcPrivate const FcChar8 * +FcStrStaticName (const FcChar8 *name); + +FcPrivate FcChar32 +FcStringHash (const FcChar8 *s); + +FcPrivate FcBool +FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat); + +FcPrivate FcPattern * +FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat); + +FcPrivate FcBool +FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat); + +FcPrivate FcValueList * +FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat); + +/* fcrender.c */ + +/* fcmatrix.c */ + +extern FcPrivate const FcMatrix FcIdentityMatrix; + +FcPrivate void +FcMatrixFree (FcMatrix *mat); + +/* fcstr.c */ +FcPrivate void +FcStrSetSort (FcStrSet * set); + +FcPrivate void +FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size); + +FcPrivate void +FcStrBufDestroy (FcStrBuf *buf); + +FcPrivate FcChar8 * +FcStrBufDone (FcStrBuf *buf); + +FcPrivate FcChar8 * +FcStrBufDoneStatic (FcStrBuf *buf); + +FcPrivate FcBool +FcStrBufChar (FcStrBuf *buf, FcChar8 c); + +FcPrivate FcBool +FcStrBufString (FcStrBuf *buf, const FcChar8 *s); + +FcPrivate FcBool +FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len); + +FcPrivate int +FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate const FcChar8 * +FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate const FcChar8 * +FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate const FcChar8 * +FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate FcBool +FcStrUsesHome (const FcChar8 *s); + +FcPrivate FcChar8 * +FcStrLastSlash (const FcChar8 *path); + +FcPrivate FcChar32 +FcStrHashIgnoreCase (const FcChar8 *s); + +FcPrivate FcChar8 * +FcStrCanonFilename (const FcChar8 *s); + +FcPrivate FcBool +FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str); + +FcPrivate FcChar8 * +FcStrSerialize (FcSerialize *serialize, const FcChar8 *str); + +#endif /* _FC_INT_H_ */ diff --git a/fontconfig/src/fclang.c b/fontconfig/src/fclang.c index 6a9cf01d6..be42b58c4 100644 --- a/fontconfig/src/fclang.c +++ b/fontconfig/src/fclang.c @@ -1,886 +1,886 @@ -/*
- * fontconfig/src/fclang.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include "fcftint.h"
-
-typedef struct {
- const FcChar8 lang[8];
- const FcCharSet charset;
-} FcLangCharSet;
-
-typedef struct {
- int begin;
- int end;
-} FcLangCharSetRange;
-
-#include "../fc-lang/fclang.h"
-
-struct _FcLangSet {
- FcStrSet *extra;
- FcChar32 map_size;
- FcChar32 map[NUM_LANG_SET_MAP];
-};
-
-static void
-FcLangSetBitSet (FcLangSet *ls,
- unsigned int id)
-{
- int bucket;
-
- id = fcLangCharSetIndices[id];
- bucket = id >> 5;
- if (bucket >= ls->map_size)
- return; /* shouldn't happen really */
-
- ls->map[bucket] |= ((FcChar32) 1 << (id & 0x1f));
-}
-
-static FcBool
-FcLangSetBitGet (const FcLangSet *ls,
- unsigned int id)
-{
- int bucket;
-
- id = fcLangCharSetIndices[id];
- bucket = id >> 5;
- if (bucket >= ls->map_size)
- return FcFalse;
-
- return ((ls->map[bucket] >> (id & 0x1f)) & 1) ? FcTrue : FcFalse;
-}
-
-static void
-FcLangSetBitReset (FcLangSet *ls,
- unsigned int id)
-{
- int bucket;
-
- id = fcLangCharSetIndices[id];
- bucket = id >> 5;
- if (bucket >= ls->map_size)
- return; /* shouldn't happen really */
-
- ls->map[bucket] &= ~((FcChar32) 1 << (id & 0x1f));
-}
-
-FcLangSet *
-FcFreeTypeLangSet (const FcCharSet *charset,
- const FcChar8 *exclusiveLang)
-{
- int i, j;
- FcChar32 missing;
- const FcCharSet *exclusiveCharset = 0;
- FcLangSet *ls;
-
- if (exclusiveLang)
- exclusiveCharset = FcLangGetCharSet (exclusiveLang);
- ls = FcLangSetCreate ();
- if (!ls)
- return 0;
- if (FcDebug() & FC_DBG_LANGSET)
- {
- printf ("font charset");
- FcCharSetPrint (charset);
- printf ("\n");
- }
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- {
- if (FcDebug() & FC_DBG_LANGSET)
- {
- printf ("%s charset", fcLangCharSets[i].lang);
- FcCharSetPrint (&fcLangCharSets[i].charset);
- printf ("\n");
- }
-
- /*
- * Check for Han charsets to make fonts
- * which advertise support for a single language
- * not support other Han languages
- */
- if (exclusiveCharset &&
- FcFreeTypeIsExclusiveLang (fcLangCharSets[i].lang))
- {
- if (fcLangCharSets[i].charset.num != exclusiveCharset->num)
- continue;
-
- for (j = 0; j < fcLangCharSets[i].charset.num; j++)
- if (FcCharSetLeaf(&fcLangCharSets[i].charset, j) !=
- FcCharSetLeaf(exclusiveCharset, j))
- continue;
- }
- missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset);
- if (FcDebug() & FC_DBG_SCANV)
- {
- if (missing && missing < 10)
- {
- FcCharSet *missed = FcCharSetSubtract (&fcLangCharSets[i].charset,
- charset);
- FcChar32 ucs4;
- FcChar32 map[FC_CHARSET_MAP_SIZE];
- FcChar32 next;
-
- printf ("\n%s(%u) ", fcLangCharSets[i].lang, missing);
- printf ("{");
- for (ucs4 = FcCharSetFirstPage (missed, map, &next);
- ucs4 != FC_CHARSET_DONE;
- ucs4 = FcCharSetNextPage (missed, map, &next))
- {
- int i, j;
- for (i = 0; i < FC_CHARSET_MAP_SIZE; i++)
- if (map[i])
- {
- for (j = 0; j < 32; j++)
- if (map[i] & (1 << j))
- printf (" %04x", ucs4 + i * 32 + j);
- }
- }
- printf (" }\n\t");
- FcCharSetDestroy (missed);
- }
- else
- printf ("%s(%u) ", fcLangCharSets[i].lang, missing);
- }
- if (!missing)
- FcLangSetBitSet (ls, i);
- }
-
- if (FcDebug() & FC_DBG_SCANV)
- printf ("\n");
-
-
- return ls;
-}
-
-#define FcLangEnd(c) ((c) == '-' || (c) == '\0')
-
-FcLangResult
-FcLangCompare (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcChar8 c1, c2;
- FcLangResult result = FcLangDifferentLang;
-
- for (;;)
- {
- c1 = *s1++;
- c2 = *s2++;
-
- c1 = FcToLower (c1);
- c2 = FcToLower (c2);
- if (c1 != c2)
- {
- if (FcLangEnd (c1) && FcLangEnd (c2))
- result = FcLangDifferentTerritory;
- return result;
- }
- else if (!c1)
- return FcLangEqual;
- else if (c1 == '-')
- result = FcLangDifferentTerritory;
- }
-}
-
-/*
- * Return FcTrue when super contains sub.
- *
- * super contains sub if super and sub have the same
- * language and either the same country or one
- * is missing the country
- */
-
-static FcBool
-FcLangContains (const FcChar8 *super, const FcChar8 *sub)
-{
- FcChar8 c1, c2;
-
- for (;;)
- {
- c1 = *super++;
- c2 = *sub++;
-
- c1 = FcToLower (c1);
- c2 = FcToLower (c2);
- if (c1 != c2)
- {
- /* see if super has a country while sub is mising one */
- if (c1 == '-' && c2 == '\0')
- return FcTrue;
- /* see if sub has a country while super is mising one */
- if (c1 == '\0' && c2 == '-')
- return FcTrue;
- return FcFalse;
- }
- else if (!c1)
- return FcTrue;
- }
-}
-
-const FcCharSet *
-FcLangGetCharSet (const FcChar8 *lang)
-{
- int i;
- int country = -1;
-
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- {
- switch (FcLangCompare (lang, fcLangCharSets[i].lang)) {
- case FcLangEqual:
- return &fcLangCharSets[i].charset;
- case FcLangDifferentTerritory:
- if (country == -1)
- country = i;
- case FcLangDifferentLang:
- default:
- break;
- }
- }
- if (country == -1)
- return 0;
- return &fcLangCharSets[country].charset;
-}
-
-FcStrSet *
-FcGetLangs (void)
-{
- FcStrSet *langs;
- int i;
-
- langs = FcStrSetCreate();
- if (!langs)
- return 0;
-
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- FcStrSetAdd (langs, fcLangCharSets[i].lang);
-
- return langs;
-}
-
-FcLangSet *
-FcLangSetCreate (void)
-{
- FcLangSet *ls;
-
- ls = malloc (sizeof (FcLangSet));
- if (!ls)
- return 0;
- FcMemAlloc (FC_MEM_LANGSET, sizeof (FcLangSet));
- memset (ls->map, '\0', sizeof (ls->map));
- ls->map_size = NUM_LANG_SET_MAP;
- ls->extra = 0;
- return ls;
-}
-
-void
-FcLangSetDestroy (FcLangSet *ls)
-{
- if (ls->extra)
- FcStrSetDestroy (ls->extra);
- FcMemFree (FC_MEM_LANGSET, sizeof (FcLangSet));
- free (ls);
-}
-
-FcLangSet *
-FcLangSetCopy (const FcLangSet *ls)
-{
- FcLangSet *new;
-
- new = FcLangSetCreate ();
- if (!new)
- goto bail0;
- memset (new->map, '\0', sizeof (new->map));
- memcpy (new->map, ls->map, FC_MIN (sizeof (new->map), ls->map_size * sizeof (ls->map[0])));
- if (ls->extra)
- {
- FcStrList *list;
- FcChar8 *extra;
-
- new->extra = FcStrSetCreate ();
- if (!new->extra)
- goto bail1;
-
- list = FcStrListCreate (ls->extra);
- if (!list)
- goto bail1;
-
- while ((extra = FcStrListNext (list)))
- if (!FcStrSetAdd (new->extra, extra))
- {
- FcStrListDone (list);
- goto bail1;
- }
- FcStrListDone (list);
- }
- return new;
-bail1:
- FcLangSetDestroy (new);
-bail0:
- return 0;
-}
-
-static int
-FcLangSetIndex (const FcChar8 *lang)
-{
- int low, high, mid = 0;
- int cmp = 0;
- FcChar8 firstChar = FcToLower(lang[0]);
- FcChar8 secondChar = firstChar ? FcToLower(lang[1]) : '\0';
-
- if (firstChar < 'a')
- {
- low = 0;
- high = fcLangCharSetRanges[0].begin;
- }
- else if(firstChar > 'z')
- {
- low = fcLangCharSetRanges[25].begin;
- high = NUM_LANG_CHAR_SET - 1;
- }
- else
- {
- low = fcLangCharSetRanges[firstChar - 'a'].begin;
- high = fcLangCharSetRanges[firstChar - 'a'].end;
- /* no matches */
- if (low > high)
- return -low; /* next entry after where it would be */
- }
-
- while (low <= high)
- {
- mid = (high + low) >> 1;
- if(fcLangCharSets[mid].lang[0] != firstChar)
- cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang, lang);
- else
- { /* fast path for resolving 2-letter languages (by far the most common) after
- * finding the first char (probably already true because of the hash table) */
- cmp = fcLangCharSets[mid].lang[1] - secondChar;
- if (cmp == 0 &&
- (fcLangCharSets[mid].lang[2] != '\0' ||
- lang[2] != '\0'))
- {
- cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang+2,
- lang+2);
- }
- }
- if (cmp == 0)
- return mid;
- if (cmp < 0)
- low = mid + 1;
- else
- high = mid - 1;
- }
- if (cmp < 0)
- mid++;
- return -(mid + 1);
-}
-
-FcBool
-FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang)
-{
- int id;
-
- id = FcLangSetIndex (lang);
- if (id >= 0)
- {
- FcLangSetBitSet (ls, id);
- return FcTrue;
- }
- if (!ls->extra)
- {
- ls->extra = FcStrSetCreate ();
- if (!ls->extra)
- return FcFalse;
- }
- return FcStrSetAdd (ls->extra, lang);
-}
-
-FcBool
-FcLangSetDel (FcLangSet *ls, const FcChar8 *lang)
-{
- int id;
-
- id = FcLangSetIndex (lang);
- if (id >= 0)
- {
- FcLangSetBitReset (ls, id);
- }
- else if (ls->extra)
- {
- FcStrSetDel (ls->extra, lang);
- }
- return FcTrue;
-}
-
-FcLangResult
-FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang)
-{
- int id;
- FcLangResult best, r;
- int i;
-
- id = FcLangSetIndex (lang);
- if (id < 0)
- id = -id - 1;
- else if (FcLangSetBitGet (ls, id))
- return FcLangEqual;
- best = FcLangDifferentLang;
- for (i = id - 1; i >= 0; i--)
- {
- r = FcLangCompare (lang, fcLangCharSets[i].lang);
- if (r == FcLangDifferentLang)
- break;
- if (FcLangSetBitGet (ls, i) && r < best)
- best = r;
- }
- for (i = id; i < NUM_LANG_CHAR_SET; i++)
- {
- r = FcLangCompare (lang, fcLangCharSets[i].lang);
- if (r == FcLangDifferentLang)
- break;
- if (FcLangSetBitGet (ls, i) && r < best)
- best = r;
- }
- if (ls->extra)
- {
- FcStrList *list = FcStrListCreate (ls->extra);
- FcChar8 *extra;
-
- if (list)
- {
- while (best > FcLangEqual && (extra = FcStrListNext (list)))
- {
- r = FcLangCompare (lang, extra);
- if (r < best)
- best = r;
- }
- FcStrListDone (list);
- }
- }
- return best;
-}
-
-static FcLangResult
-FcLangSetCompareStrSet (const FcLangSet *ls, FcStrSet *set)
-{
- FcStrList *list = FcStrListCreate (set);
- FcLangResult r, best = FcLangDifferentLang;
- FcChar8 *extra;
-
- if (list)
- {
- while (best > FcLangEqual && (extra = FcStrListNext (list)))
- {
- r = FcLangSetHasLang (ls, extra);
- if (r < best)
- best = r;
- }
- FcStrListDone (list);
- }
- return best;
-}
-
-FcLangResult
-FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb)
-{
- int i, j, count;
- FcLangResult best, r;
-
- count = FC_MIN (lsa->map_size, lsb->map_size);
- count = FC_MIN (NUM_LANG_SET_MAP, count);
- for (i = 0; i < count; i++)
- if (lsa->map[i] & lsb->map[i])
- return FcLangEqual;
- best = FcLangDifferentLang;
- for (j = 0; j < NUM_COUNTRY_SET; j++)
- for (i = 0; i < count; i++)
- if ((lsa->map[i] & fcLangCountrySets[j][i]) &&
- (lsb->map[i] & fcLangCountrySets[j][i]))
- {
- best = FcLangDifferentTerritory;
- break;
- }
- if (lsa->extra)
- {
- r = FcLangSetCompareStrSet (lsb, lsa->extra);
- if (r < best)
- best = r;
- }
- if (best > FcLangEqual && lsb->extra)
- {
- r = FcLangSetCompareStrSet (lsa, lsb->extra);
- if (r < best)
- best = r;
- }
- return best;
-}
-
-/*
- * Used in computing values -- mustn't allocate any storage
- * XXX Not thread-safe
- */
-FcLangSet *
-FcLangSetPromote (const FcChar8 *lang)
-{
- static FcLangSet ls;
- static FcStrSet strs;
- static FcChar8 *str;
- int id;
-
- memset (ls.map, '\0', sizeof (ls.map));
- ls.map_size = NUM_LANG_SET_MAP;
- ls.extra = 0;
- id = FcLangSetIndex (lang);
- if (id > 0)
- {
- FcLangSetBitSet (&ls, id);
- }
- else
- {
- ls.extra = &strs;
- strs.num = 1;
- strs.size = 1;
- strs.strs = &str;
- strs.ref = 1;
- str = (FcChar8 *) lang;
- }
- return &ls;
-}
-
-FcChar32
-FcLangSetHash (const FcLangSet *ls)
-{
- FcChar32 h = 0;
- int i, count;
-
- count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP);
- for (i = 0; i < count; i++)
- h ^= ls->map[i];
- if (ls->extra)
- h ^= ls->extra->num;
- return h;
-}
-
-FcLangSet *
-FcNameParseLangSet (const FcChar8 *string)
-{
- FcChar8 lang[32], c = 0;
- int i;
- FcLangSet *ls;
-
- ls = FcLangSetCreate ();
- if (!ls)
- goto bail0;
-
- for(;;)
- {
- for(i = 0; i < 31;i++)
- {
- c = *string++;
- if(c == '\0' || c == '|')
- break; /* end of this code */
- lang[i] = c;
- }
- lang[i] = '\0';
- if (!FcLangSetAdd (ls, lang))
- goto bail1;
- if(c == '\0')
- break;
- }
- return ls;
-bail1:
- FcLangSetDestroy (ls);
-bail0:
- return 0;
-}
-
-FcBool
-FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls)
-{
- int i, bit, count;
- FcChar32 bits;
- FcBool first = FcTrue;
-
- count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP);
- for (i = 0; i < count; i++)
- {
- if ((bits = ls->map[i]))
- {
- for (bit = 0; bit <= 31; bit++)
- if (bits & (1 << bit))
- {
- int id = (i << 5) | bit;
- if (!first)
- if (!FcStrBufChar (buf, '|'))
- return FcFalse;
- if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang))
- return FcFalse;
- first = FcFalse;
- }
- }
- }
- if (ls->extra)
- {
- FcStrList *list = FcStrListCreate (ls->extra);
- FcChar8 *extra;
-
- if (!list)
- return FcFalse;
- while ((extra = FcStrListNext (list)))
- {
- if (!first)
- if (!FcStrBufChar (buf, '|'))
- {
- FcStrListDone (list);
- return FcFalse;
- }
- if (!FcStrBufString (buf, extra))
- {
- FcStrListDone (list);
- return FcFalse;
- }
- first = FcFalse;
- }
- FcStrListDone (list);
- }
- return FcTrue;
-}
-
-FcBool
-FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb)
-{
- int i, count;
-
- count = FC_MIN (lsa->map_size, lsb->map_size);
- count = FC_MIN (NUM_LANG_SET_MAP, count);
- for (i = 0; i < count; i++)
- {
- if (lsa->map[i] != lsb->map[i])
- return FcFalse;
- }
- if (!lsa->extra && !lsb->extra)
- return FcTrue;
- if (lsa->extra && lsb->extra)
- return FcStrSetEqual (lsa->extra, lsb->extra);
- return FcFalse;
-}
-
-static FcBool
-FcLangSetContainsLang (const FcLangSet *ls, const FcChar8 *lang)
-{
- int id;
- int i;
-
- id = FcLangSetIndex (lang);
- if (id < 0)
- id = -id - 1;
- else if (FcLangSetBitGet (ls, id))
- return FcTrue;
- /*
- * search up and down among equal languages for a match
- */
- for (i = id - 1; i >= 0; i--)
- {
- if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang)
- break;
- if (FcLangSetBitGet (ls, i) &&
- FcLangContains (fcLangCharSets[i].lang, lang))
- return FcTrue;
- }
- for (i = id; i < NUM_LANG_CHAR_SET; i++)
- {
- if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang)
- break;
- if (FcLangSetBitGet (ls, i) &&
- FcLangContains (fcLangCharSets[i].lang, lang))
- return FcTrue;
- }
- if (ls->extra)
- {
- FcStrList *list = FcStrListCreate (ls->extra);
- FcChar8 *extra;
-
- if (list)
- {
- while ((extra = FcStrListNext (list)))
- {
- if (FcLangContains (extra, lang))
- break;
- }
- FcStrListDone (list);
- if (extra)
- return FcTrue;
- }
- }
- return FcFalse;
-}
-
-/*
- * return FcTrue if lsa contains every language in lsb
- */
-FcBool
-FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb)
-{
- int i, j, count;
- FcChar32 missing;
-
- if (FcDebug() & FC_DBG_MATCHV)
- {
- printf ("FcLangSet "); FcLangSetPrint (lsa);
- printf (" contains "); FcLangSetPrint (lsb);
- printf ("\n");
- }
- /*
- * check bitmaps for missing language support
- */
- count = FC_MIN (lsa->map_size, lsb->map_size);
- count = FC_MIN (NUM_LANG_SET_MAP, count);
- for (i = 0; i < count; i++)
- {
- missing = lsb->map[i] & ~lsa->map[i];
- if (missing)
- {
- for (j = 0; j < 32; j++)
- if (missing & (1 << j))
- {
- if (!FcLangSetContainsLang (lsa,
- fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang))
- {
- if (FcDebug() & FC_DBG_MATCHV)
- printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i*32+j]].lang);
- return FcFalse;
- }
- }
- }
- }
- if (lsb->extra)
- {
- FcStrList *list = FcStrListCreate (lsb->extra);
- FcChar8 *extra;
-
- if (list)
- {
- while ((extra = FcStrListNext (list)))
- {
- if (!FcLangSetContainsLang (lsa, extra))
- {
- if (FcDebug() & FC_DBG_MATCHV)
- printf ("\tMissing string %s\n", extra);
- break;
- }
- }
- FcStrListDone (list);
- if (extra)
- return FcFalse;
- }
- }
- return FcTrue;
-}
-
-FcBool
-FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l)
-{
- if (!FcSerializeAlloc (serialize, l, sizeof (FcLangSet)))
- return FcFalse;
- return FcTrue;
-}
-
-FcLangSet *
-FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l)
-{
- FcLangSet *l_serialize = FcSerializePtr (serialize, l);
-
- if (!l_serialize)
- return NULL;
- memset (l_serialize->map, '\0', sizeof (l_serialize->map));
- memcpy (l_serialize->map, l->map, FC_MIN (sizeof (l_serialize->map), l->map_size * sizeof (l->map[0])));
- l_serialize->map_size = NUM_LANG_SET_MAP;
- l_serialize->extra = NULL; /* We don't serialize ls->extra */
- return l_serialize;
-}
-
-FcStrSet *
-FcLangSetGetLangs (const FcLangSet *ls)
-{
- FcStrSet *langs;
- int i;
-
- langs = FcStrSetCreate();
- if (!langs)
- return 0;
-
- for (i = 0; i < NUM_LANG_CHAR_SET; i++)
- if (FcLangSetBitGet (ls, i))
- FcStrSetAdd (langs, fcLangCharSets[i].lang);
-
- if (ls->extra)
- {
- FcStrList *list = FcStrListCreate (ls->extra);
- FcChar8 *extra;
-
- if (list)
- {
- while ((extra = FcStrListNext (list)))
- FcStrSetAdd (langs, extra);
-
- FcStrListDone (list);
- }
- }
-
- return langs;
-}
-
-static FcLangSet *
-FcLangSetOperate(const FcLangSet *a,
- const FcLangSet *b,
- FcBool (*func) (FcLangSet *ls,
- const FcChar8 *s))
-{
- FcLangSet *langset = FcLangSetCopy (a);
- FcStrList *sl = FcStrListCreate (FcLangSetGetLangs (b));
- FcChar8 *str;
-
- while ((str = FcStrListNext (sl)))
- {
- func (langset, str);
- }
- FcStrListDone (sl);
-
- return langset;
-}
-
-FcLangSet *
-FcLangSetUnion (const FcLangSet *a, const FcLangSet *b)
-{
- return FcLangSetOperate(a, b, FcLangSetAdd);
-}
-
-FcLangSet *
-FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b)
-{
- return FcLangSetOperate(a, b, FcLangSetDel);
-}
-
-#define __fclang__
-#include "fcaliastail.h"
-#include "fcftaliastail.h"
-#undef __fclang__
+/* + * fontconfig/src/fclang.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include "fcftint.h" + +typedef struct { + const FcChar8 lang[8]; + const FcCharSet charset; +} FcLangCharSet; + +typedef struct { + int begin; + int end; +} FcLangCharSetRange; + +#include "../fc-lang/fclang.h" + +struct _FcLangSet { + FcStrSet *extra; + FcChar32 map_size; + FcChar32 map[NUM_LANG_SET_MAP]; +}; + +static void +FcLangSetBitSet (FcLangSet *ls, + unsigned int id) +{ + int bucket; + + id = fcLangCharSetIndices[id]; + bucket = id >> 5; + if (bucket >= ls->map_size) + return; /* shouldn't happen really */ + + ls->map[bucket] |= ((FcChar32) 1 << (id & 0x1f)); +} + +static FcBool +FcLangSetBitGet (const FcLangSet *ls, + unsigned int id) +{ + int bucket; + + id = fcLangCharSetIndices[id]; + bucket = id >> 5; + if (bucket >= ls->map_size) + return FcFalse; + + return ((ls->map[bucket] >> (id & 0x1f)) & 1) ? FcTrue : FcFalse; +} + +static void +FcLangSetBitReset (FcLangSet *ls, + unsigned int id) +{ + int bucket; + + id = fcLangCharSetIndices[id]; + bucket = id >> 5; + if (bucket >= ls->map_size) + return; /* shouldn't happen really */ + + ls->map[bucket] &= ~((FcChar32) 1 << (id & 0x1f)); +} + +FcLangSet * +FcFreeTypeLangSet (const FcCharSet *charset, + const FcChar8 *exclusiveLang) +{ + int i, j; + FcChar32 missing; + const FcCharSet *exclusiveCharset = 0; + FcLangSet *ls; + + if (exclusiveLang) + exclusiveCharset = FcLangGetCharSet (exclusiveLang); + ls = FcLangSetCreate (); + if (!ls) + return 0; + if (FcDebug() & FC_DBG_LANGSET) + { + printf ("font charset"); + FcCharSetPrint (charset); + printf ("\n"); + } + for (i = 0; i < NUM_LANG_CHAR_SET; i++) + { + if (FcDebug() & FC_DBG_LANGSET) + { + printf ("%s charset", fcLangCharSets[i].lang); + FcCharSetPrint (&fcLangCharSets[i].charset); + printf ("\n"); + } + + /* + * Check for Han charsets to make fonts + * which advertise support for a single language + * not support other Han languages + */ + if (exclusiveCharset && + FcFreeTypeIsExclusiveLang (fcLangCharSets[i].lang)) + { + if (fcLangCharSets[i].charset.num != exclusiveCharset->num) + continue; + + for (j = 0; j < fcLangCharSets[i].charset.num; j++) + if (FcCharSetLeaf(&fcLangCharSets[i].charset, j) != + FcCharSetLeaf(exclusiveCharset, j)) + continue; + } + missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset); + if (FcDebug() & FC_DBG_SCANV) + { + if (missing && missing < 10) + { + FcCharSet *missed = FcCharSetSubtract (&fcLangCharSets[i].charset, + charset); + FcChar32 ucs4; + FcChar32 map[FC_CHARSET_MAP_SIZE]; + FcChar32 next; + + printf ("\n%s(%u) ", fcLangCharSets[i].lang, missing); + printf ("{"); + for (ucs4 = FcCharSetFirstPage (missed, map, &next); + ucs4 != FC_CHARSET_DONE; + ucs4 = FcCharSetNextPage (missed, map, &next)) + { + int i, j; + for (i = 0; i < FC_CHARSET_MAP_SIZE; i++) + if (map[i]) + { + for (j = 0; j < 32; j++) + if (map[i] & (1 << j)) + printf (" %04x", ucs4 + i * 32 + j); + } + } + printf (" }\n\t"); + FcCharSetDestroy (missed); + } + else + printf ("%s(%u) ", fcLangCharSets[i].lang, missing); + } + if (!missing) + FcLangSetBitSet (ls, i); + } + + if (FcDebug() & FC_DBG_SCANV) + printf ("\n"); + + + return ls; +} + +#define FcLangEnd(c) ((c) == '-' || (c) == '\0') + +FcLangResult +FcLangCompare (const FcChar8 *s1, const FcChar8 *s2) +{ + FcChar8 c1, c2; + FcLangResult result = FcLangDifferentLang; + + for (;;) + { + c1 = *s1++; + c2 = *s2++; + + c1 = FcToLower (c1); + c2 = FcToLower (c2); + if (c1 != c2) + { + if (FcLangEnd (c1) && FcLangEnd (c2)) + result = FcLangDifferentTerritory; + return result; + } + else if (!c1) + return FcLangEqual; + else if (c1 == '-') + result = FcLangDifferentTerritory; + } +} + +/* + * Return FcTrue when super contains sub. + * + * super contains sub if super and sub have the same + * language and either the same country or one + * is missing the country + */ + +static FcBool +FcLangContains (const FcChar8 *super, const FcChar8 *sub) +{ + FcChar8 c1, c2; + + for (;;) + { + c1 = *super++; + c2 = *sub++; + + c1 = FcToLower (c1); + c2 = FcToLower (c2); + if (c1 != c2) + { + /* see if super has a country while sub is mising one */ + if (c1 == '-' && c2 == '\0') + return FcTrue; + /* see if sub has a country while super is mising one */ + if (c1 == '\0' && c2 == '-') + return FcTrue; + return FcFalse; + } + else if (!c1) + return FcTrue; + } +} + +const FcCharSet * +FcLangGetCharSet (const FcChar8 *lang) +{ + int i; + int country = -1; + + for (i = 0; i < NUM_LANG_CHAR_SET; i++) + { + switch (FcLangCompare (lang, fcLangCharSets[i].lang)) { + case FcLangEqual: + return &fcLangCharSets[i].charset; + case FcLangDifferentTerritory: + if (country == -1) + country = i; + case FcLangDifferentLang: + default: + break; + } + } + if (country == -1) + return 0; + return &fcLangCharSets[country].charset; +} + +FcStrSet * +FcGetLangs (void) +{ + FcStrSet *langs; + int i; + + langs = FcStrSetCreate(); + if (!langs) + return 0; + + for (i = 0; i < NUM_LANG_CHAR_SET; i++) + FcStrSetAdd (langs, fcLangCharSets[i].lang); + + return langs; +} + +FcLangSet * +FcLangSetCreate (void) +{ + FcLangSet *ls; + + ls = malloc (sizeof (FcLangSet)); + if (!ls) + return 0; + FcMemAlloc (FC_MEM_LANGSET, sizeof (FcLangSet)); + memset (ls->map, '\0', sizeof (ls->map)); + ls->map_size = NUM_LANG_SET_MAP; + ls->extra = 0; + return ls; +} + +void +FcLangSetDestroy (FcLangSet *ls) +{ + if (ls->extra) + FcStrSetDestroy (ls->extra); + FcMemFree (FC_MEM_LANGSET, sizeof (FcLangSet)); + free (ls); +} + +FcLangSet * +FcLangSetCopy (const FcLangSet *ls) +{ + FcLangSet *new; + + new = FcLangSetCreate (); + if (!new) + goto bail0; + memset (new->map, '\0', sizeof (new->map)); + memcpy (new->map, ls->map, FC_MIN (sizeof (new->map), ls->map_size * sizeof (ls->map[0]))); + if (ls->extra) + { + FcStrList *list; + FcChar8 *extra; + + new->extra = FcStrSetCreate (); + if (!new->extra) + goto bail1; + + list = FcStrListCreate (ls->extra); + if (!list) + goto bail1; + + while ((extra = FcStrListNext (list))) + if (!FcStrSetAdd (new->extra, extra)) + { + FcStrListDone (list); + goto bail1; + } + FcStrListDone (list); + } + return new; +bail1: + FcLangSetDestroy (new); +bail0: + return 0; +} + +static int +FcLangSetIndex (const FcChar8 *lang) +{ + int low, high, mid = 0; + int cmp = 0; + FcChar8 firstChar = FcToLower(lang[0]); + FcChar8 secondChar = firstChar ? FcToLower(lang[1]) : '\0'; + + if (firstChar < 'a') + { + low = 0; + high = fcLangCharSetRanges[0].begin; + } + else if(firstChar > 'z') + { + low = fcLangCharSetRanges[25].begin; + high = NUM_LANG_CHAR_SET - 1; + } + else + { + low = fcLangCharSetRanges[firstChar - 'a'].begin; + high = fcLangCharSetRanges[firstChar - 'a'].end; + /* no matches */ + if (low > high) + return -low; /* next entry after where it would be */ + } + + while (low <= high) + { + mid = (high + low) >> 1; + if(fcLangCharSets[mid].lang[0] != firstChar) + cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang, lang); + else + { /* fast path for resolving 2-letter languages (by far the most common) after + * finding the first char (probably already true because of the hash table) */ + cmp = fcLangCharSets[mid].lang[1] - secondChar; + if (cmp == 0 && + (fcLangCharSets[mid].lang[2] != '\0' || + lang[2] != '\0')) + { + cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang+2, + lang+2); + } + } + if (cmp == 0) + return mid; + if (cmp < 0) + low = mid + 1; + else + high = mid - 1; + } + if (cmp < 0) + mid++; + return -(mid + 1); +} + +FcBool +FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang) +{ + int id; + + id = FcLangSetIndex (lang); + if (id >= 0) + { + FcLangSetBitSet (ls, id); + return FcTrue; + } + if (!ls->extra) + { + ls->extra = FcStrSetCreate (); + if (!ls->extra) + return FcFalse; + } + return FcStrSetAdd (ls->extra, lang); +} + +FcBool +FcLangSetDel (FcLangSet *ls, const FcChar8 *lang) +{ + int id; + + id = FcLangSetIndex (lang); + if (id >= 0) + { + FcLangSetBitReset (ls, id); + } + else if (ls->extra) + { + FcStrSetDel (ls->extra, lang); + } + return FcTrue; +} + +FcLangResult +FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang) +{ + int id; + FcLangResult best, r; + int i; + + id = FcLangSetIndex (lang); + if (id < 0) + id = -id - 1; + else if (FcLangSetBitGet (ls, id)) + return FcLangEqual; + best = FcLangDifferentLang; + for (i = id - 1; i >= 0; i--) + { + r = FcLangCompare (lang, fcLangCharSets[i].lang); + if (r == FcLangDifferentLang) + break; + if (FcLangSetBitGet (ls, i) && r < best) + best = r; + } + for (i = id; i < NUM_LANG_CHAR_SET; i++) + { + r = FcLangCompare (lang, fcLangCharSets[i].lang); + if (r == FcLangDifferentLang) + break; + if (FcLangSetBitGet (ls, i) && r < best) + best = r; + } + if (ls->extra) + { + FcStrList *list = FcStrListCreate (ls->extra); + FcChar8 *extra; + + if (list) + { + while (best > FcLangEqual && (extra = FcStrListNext (list))) + { + r = FcLangCompare (lang, extra); + if (r < best) + best = r; + } + FcStrListDone (list); + } + } + return best; +} + +static FcLangResult +FcLangSetCompareStrSet (const FcLangSet *ls, FcStrSet *set) +{ + FcStrList *list = FcStrListCreate (set); + FcLangResult r, best = FcLangDifferentLang; + FcChar8 *extra; + + if (list) + { + while (best > FcLangEqual && (extra = FcStrListNext (list))) + { + r = FcLangSetHasLang (ls, extra); + if (r < best) + best = r; + } + FcStrListDone (list); + } + return best; +} + +FcLangResult +FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb) +{ + int i, j, count; + FcLangResult best, r; + + count = FC_MIN (lsa->map_size, lsb->map_size); + count = FC_MIN (NUM_LANG_SET_MAP, count); + for (i = 0; i < count; i++) + if (lsa->map[i] & lsb->map[i]) + return FcLangEqual; + best = FcLangDifferentLang; + for (j = 0; j < NUM_COUNTRY_SET; j++) + for (i = 0; i < count; i++) + if ((lsa->map[i] & fcLangCountrySets[j][i]) && + (lsb->map[i] & fcLangCountrySets[j][i])) + { + best = FcLangDifferentTerritory; + break; + } + if (lsa->extra) + { + r = FcLangSetCompareStrSet (lsb, lsa->extra); + if (r < best) + best = r; + } + if (best > FcLangEqual && lsb->extra) + { + r = FcLangSetCompareStrSet (lsa, lsb->extra); + if (r < best) + best = r; + } + return best; +} + +/* + * Used in computing values -- mustn't allocate any storage + * XXX Not thread-safe + */ +FcLangSet * +FcLangSetPromote (const FcChar8 *lang) +{ + static FcLangSet ls; + static FcStrSet strs; + static FcChar8 *str; + int id; + + memset (ls.map, '\0', sizeof (ls.map)); + ls.map_size = NUM_LANG_SET_MAP; + ls.extra = 0; + id = FcLangSetIndex (lang); + if (id > 0) + { + FcLangSetBitSet (&ls, id); + } + else + { + ls.extra = &strs; + strs.num = 1; + strs.size = 1; + strs.strs = &str; + strs.ref = 1; + str = (FcChar8 *) lang; + } + return &ls; +} + +FcChar32 +FcLangSetHash (const FcLangSet *ls) +{ + FcChar32 h = 0; + int i, count; + + count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP); + for (i = 0; i < count; i++) + h ^= ls->map[i]; + if (ls->extra) + h ^= ls->extra->num; + return h; +} + +FcLangSet * +FcNameParseLangSet (const FcChar8 *string) +{ + FcChar8 lang[32], c = 0; + int i; + FcLangSet *ls; + + ls = FcLangSetCreate (); + if (!ls) + goto bail0; + + for(;;) + { + for(i = 0; i < 31;i++) + { + c = *string++; + if(c == '\0' || c == '|') + break; /* end of this code */ + lang[i] = c; + } + lang[i] = '\0'; + if (!FcLangSetAdd (ls, lang)) + goto bail1; + if(c == '\0') + break; + } + return ls; +bail1: + FcLangSetDestroy (ls); +bail0: + return 0; +} + +FcBool +FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls) +{ + int i, bit, count; + FcChar32 bits; + FcBool first = FcTrue; + + count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP); + for (i = 0; i < count; i++) + { + if ((bits = ls->map[i])) + { + for (bit = 0; bit <= 31; bit++) + if (bits & (1 << bit)) + { + int id = (i << 5) | bit; + if (!first) + if (!FcStrBufChar (buf, '|')) + return FcFalse; + if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang)) + return FcFalse; + first = FcFalse; + } + } + } + if (ls->extra) + { + FcStrList *list = FcStrListCreate (ls->extra); + FcChar8 *extra; + + if (!list) + return FcFalse; + while ((extra = FcStrListNext (list))) + { + if (!first) + if (!FcStrBufChar (buf, '|')) + { + FcStrListDone (list); + return FcFalse; + } + if (!FcStrBufString (buf, extra)) + { + FcStrListDone (list); + return FcFalse; + } + first = FcFalse; + } + FcStrListDone (list); + } + return FcTrue; +} + +FcBool +FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb) +{ + int i, count; + + count = FC_MIN (lsa->map_size, lsb->map_size); + count = FC_MIN (NUM_LANG_SET_MAP, count); + for (i = 0; i < count; i++) + { + if (lsa->map[i] != lsb->map[i]) + return FcFalse; + } + if (!lsa->extra && !lsb->extra) + return FcTrue; + if (lsa->extra && lsb->extra) + return FcStrSetEqual (lsa->extra, lsb->extra); + return FcFalse; +} + +static FcBool +FcLangSetContainsLang (const FcLangSet *ls, const FcChar8 *lang) +{ + int id; + int i; + + id = FcLangSetIndex (lang); + if (id < 0) + id = -id - 1; + else if (FcLangSetBitGet (ls, id)) + return FcTrue; + /* + * search up and down among equal languages for a match + */ + for (i = id - 1; i >= 0; i--) + { + if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang) + break; + if (FcLangSetBitGet (ls, i) && + FcLangContains (fcLangCharSets[i].lang, lang)) + return FcTrue; + } + for (i = id; i < NUM_LANG_CHAR_SET; i++) + { + if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang) + break; + if (FcLangSetBitGet (ls, i) && + FcLangContains (fcLangCharSets[i].lang, lang)) + return FcTrue; + } + if (ls->extra) + { + FcStrList *list = FcStrListCreate (ls->extra); + FcChar8 *extra; + + if (list) + { + while ((extra = FcStrListNext (list))) + { + if (FcLangContains (extra, lang)) + break; + } + FcStrListDone (list); + if (extra) + return FcTrue; + } + } + return FcFalse; +} + +/* + * return FcTrue if lsa contains every language in lsb + */ +FcBool +FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb) +{ + int i, j, count; + FcChar32 missing; + + if (FcDebug() & FC_DBG_MATCHV) + { + printf ("FcLangSet "); FcLangSetPrint (lsa); + printf (" contains "); FcLangSetPrint (lsb); + printf ("\n"); + } + /* + * check bitmaps for missing language support + */ + count = FC_MIN (lsa->map_size, lsb->map_size); + count = FC_MIN (NUM_LANG_SET_MAP, count); + for (i = 0; i < count; i++) + { + missing = lsb->map[i] & ~lsa->map[i]; + if (missing) + { + for (j = 0; j < 32; j++) + if (missing & (1 << j)) + { + if (!FcLangSetContainsLang (lsa, + fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang)) + { + if (FcDebug() & FC_DBG_MATCHV) + printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i*32+j]].lang); + return FcFalse; + } + } + } + } + if (lsb->extra) + { + FcStrList *list = FcStrListCreate (lsb->extra); + FcChar8 *extra; + + if (list) + { + while ((extra = FcStrListNext (list))) + { + if (!FcLangSetContainsLang (lsa, extra)) + { + if (FcDebug() & FC_DBG_MATCHV) + printf ("\tMissing string %s\n", extra); + break; + } + } + FcStrListDone (list); + if (extra) + return FcFalse; + } + } + return FcTrue; +} + +FcBool +FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l) +{ + if (!FcSerializeAlloc (serialize, l, sizeof (FcLangSet))) + return FcFalse; + return FcTrue; +} + +FcLangSet * +FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l) +{ + FcLangSet *l_serialize = FcSerializePtr (serialize, l); + + if (!l_serialize) + return NULL; + memset (l_serialize->map, '\0', sizeof (l_serialize->map)); + memcpy (l_serialize->map, l->map, FC_MIN (sizeof (l_serialize->map), l->map_size * sizeof (l->map[0]))); + l_serialize->map_size = NUM_LANG_SET_MAP; + l_serialize->extra = NULL; /* We don't serialize ls->extra */ + return l_serialize; +} + +FcStrSet * +FcLangSetGetLangs (const FcLangSet *ls) +{ + FcStrSet *langs; + int i; + + langs = FcStrSetCreate(); + if (!langs) + return 0; + + for (i = 0; i < NUM_LANG_CHAR_SET; i++) + if (FcLangSetBitGet (ls, i)) + FcStrSetAdd (langs, fcLangCharSets[i].lang); + + if (ls->extra) + { + FcStrList *list = FcStrListCreate (ls->extra); + FcChar8 *extra; + + if (list) + { + while ((extra = FcStrListNext (list))) + FcStrSetAdd (langs, extra); + + FcStrListDone (list); + } + } + + return langs; +} + +static FcLangSet * +FcLangSetOperate(const FcLangSet *a, + const FcLangSet *b, + FcBool (*func) (FcLangSet *ls, + const FcChar8 *s)) +{ + FcLangSet *langset = FcLangSetCopy (a); + FcStrList *sl = FcStrListCreate (FcLangSetGetLangs (b)); + FcChar8 *str; + + while ((str = FcStrListNext (sl))) + { + func (langset, str); + } + FcStrListDone (sl); + + return langset; +} + +FcLangSet * +FcLangSetUnion (const FcLangSet *a, const FcLangSet *b) +{ + return FcLangSetOperate(a, b, FcLangSetAdd); +} + +FcLangSet * +FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b) +{ + return FcLangSetOperate(a, b, FcLangSetDel); +} + +#define __fclang__ +#include "fcaliastail.h" +#include "fcftaliastail.h" +#undef __fclang__ diff --git a/fontconfig/src/fclist.c b/fontconfig/src/fclist.c index 0f9a1235c..9a84b5c7e 100644 --- a/fontconfig/src/fclist.c +++ b/fontconfig/src/fclist.c @@ -1,577 +1,577 @@ -/*
- * fontconfig/src/fclist.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-
-FcObjectSet *
-FcObjectSetCreate (void)
-{
- FcObjectSet *os;
-
- os = (FcObjectSet *) malloc (sizeof (FcObjectSet));
- if (!os)
- return 0;
- FcMemAlloc (FC_MEM_OBJECTSET, sizeof (FcObjectSet));
- os->nobject = 0;
- os->sobject = 0;
- os->objects = 0;
- return os;
-}
-
-FcBool
-FcObjectSetAdd (FcObjectSet *os, const char *object)
-{
- int s;
- const char **objects;
- int high, low, mid, c;
-
- if (os->nobject == os->sobject)
- {
- s = os->sobject + 4;
- if (os->objects)
- objects = (const char **) realloc ((void *) os->objects,
- s * sizeof (const char *));
- else
- objects = (const char **) malloc (s * sizeof (const char *));
- if (!objects)
- return FcFalse;
- if (os->sobject)
- FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *));
- FcMemAlloc (FC_MEM_OBJECTPTR, s * sizeof (const char *));
- os->objects = objects;
- os->sobject = s;
- }
- high = os->nobject - 1;
- low = 0;
- mid = 0;
- c = 1;
- object = (char *)FcStrStaticName ((FcChar8 *)object);
- while (low <= high)
- {
- mid = (low + high) >> 1;
- c = os->objects[mid] - object;
- if (c == 0)
- return FcTrue;
- if (c < 0)
- low = mid + 1;
- else
- high = mid - 1;
- }
- if (c < 0)
- mid++;
- memmove (os->objects + mid + 1, os->objects + mid,
- (os->nobject - mid) * sizeof (const char *));
- os->objects[mid] = object;
- os->nobject++;
- return FcTrue;
-}
-
-void
-FcObjectSetDestroy (FcObjectSet *os)
-{
- if (os->objects)
- {
- FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *));
- free ((void *) os->objects);
- }
- FcMemFree (FC_MEM_OBJECTSET, sizeof (FcObjectSet));
- free (os);
-}
-
-FcObjectSet *
-FcObjectSetVaBuild (const char *first, va_list va)
-{
- FcObjectSet *ret;
-
- FcObjectSetVapBuild (ret, first, va);
- return ret;
-}
-
-FcObjectSet *
-FcObjectSetBuild (const char *first, ...)
-{
- va_list va;
- FcObjectSet *os;
-
- va_start (va, first);
- FcObjectSetVapBuild (os, first, va);
- va_end (va);
- return os;
-}
-
-/*
- * Font must have a containing value for every value in the pattern
- */
-static FcBool
-FcListValueListMatchAny (FcValueListPtr patOrig, /* pattern */
- FcValueListPtr fntOrig) /* font */
-{
- FcValueListPtr pat, fnt;
-
- for (pat = patOrig; pat != NULL; pat = FcValueListNext(pat))
- {
- for (fnt = fntOrig; fnt != NULL; fnt = FcValueListNext(fnt))
- {
- /*
- * make sure the font 'contains' the pattern.
- * (OpListing is OpContains except for strings
- * where it requires an exact match)
- */
- if (FcConfigCompareValue (&fnt->value,
- FcOpListing,
- &pat->value))
- break;
- }
- if (fnt == NULL)
- return FcFalse;
- }
- return FcTrue;
-}
-
-static FcBool
-FcListValueListEqual (FcValueListPtr v1orig,
- FcValueListPtr v2orig)
-{
- FcValueListPtr v1, v2;
-
- for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1))
- {
- for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2))
- if (FcValueEqual (FcValueCanonicalize(&(v1)->value),
- FcValueCanonicalize(&(v2)->value)))
- break;
- if (v2 == NULL)
- return FcFalse;
- }
- for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2))
- {
- for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1))
- if (FcValueEqual (FcValueCanonicalize(&v1->value),
- FcValueCanonicalize(&v2->value)))
- break;
- if (v1 == NULL)
- return FcFalse;
- }
- return FcTrue;
-}
-
-static FcBool
-FcListPatternEqual (FcPattern *p1,
- FcPattern *p2,
- FcObjectSet *os)
-{
- int i;
- FcPatternElt *e1, *e2;
-
- for (i = 0; i < os->nobject; i++)
- {
- e1 = FcPatternObjectFindElt (p1, FcObjectFromName (os->objects[i]));
- e2 = FcPatternObjectFindElt (p2, FcObjectFromName (os->objects[i]));
- if (!e1 && !e2)
- continue;
- if (!e1 || !e2)
- return FcFalse;
- if (!FcListValueListEqual (FcPatternEltValues(e1),
- FcPatternEltValues(e2)))
- return FcFalse;
- }
- return FcTrue;
-}
-
-/*
- * FcTrue iff all objects in "p" match "font"
- */
-
-FcBool
-FcListPatternMatchAny (const FcPattern *p,
- const FcPattern *font)
-{
- int i;
-
- for (i = 0; i < p->num; i++)
- {
- FcPatternElt *pe = &FcPatternElts(p)[i];
- FcPatternElt *fe = FcPatternObjectFindElt (font, pe->object);
- if (!fe)
- return FcFalse;
- if (!FcListValueListMatchAny (FcPatternEltValues(pe), /* pat elts */
- FcPatternEltValues(fe))) /* font elts */
- return FcFalse;
- }
- return FcTrue;
-}
-
-static FcChar32
-FcListMatrixHash (const FcMatrix *m)
-{
- int xx = (int) (m->xx * 100),
- xy = (int) (m->xy * 100),
- yx = (int) (m->yx * 100),
- yy = (int) (m->yy * 100);
-
- return ((FcChar32) xx) ^ ((FcChar32) xy) ^ ((FcChar32) yx) ^ ((FcChar32) yy);
-}
-
-static FcChar32
-FcListValueHash (FcValue *value)
-{
- FcValue v = FcValueCanonicalize(value);
- switch (v.type) {
- case FcTypeVoid:
- return 0;
- case FcTypeInteger:
- return (FcChar32) v.u.i;
- case FcTypeDouble:
- return (FcChar32) (int) v.u.d;
- case FcTypeString:
- return FcStrHashIgnoreCase (v.u.s);
- case FcTypeBool:
- return (FcChar32) v.u.b;
- case FcTypeMatrix:
- return FcListMatrixHash (v.u.m);
- case FcTypeCharSet:
- return FcCharSetCount (v.u.c);
- case FcTypeFTFace:
- return (long) v.u.f;
- case FcTypeLangSet:
- return FcLangSetHash (v.u.l);
- }
- return 0;
-}
-
-static FcChar32
-FcListValueListHash (FcValueListPtr list)
-{
- FcChar32 h = 0;
-
- while (list != NULL)
- {
- h = h ^ FcListValueHash (&list->value);
- list = FcValueListNext(list);
- }
- return h;
-}
-
-static FcChar32
-FcListPatternHash (FcPattern *font,
- FcObjectSet *os)
-{
- int n;
- FcPatternElt *e;
- FcChar32 h = 0;
-
- for (n = 0; n < os->nobject; n++)
- {
- e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[n]));
- if (e)
- h = h ^ FcListValueListHash (FcPatternEltValues(e));
- }
- return h;
-}
-
-typedef struct _FcListBucket {
- struct _FcListBucket *next;
- FcChar32 hash;
- FcPattern *pattern;
-} FcListBucket;
-
-#define FC_LIST_HASH_SIZE 4099
-
-typedef struct _FcListHashTable {
- int entries;
- FcListBucket *buckets[FC_LIST_HASH_SIZE];
-} FcListHashTable;
-
-static void
-FcListHashTableInit (FcListHashTable *table)
-{
- table->entries = 0;
- memset (table->buckets, '\0', sizeof (table->buckets));
-}
-
-static void
-FcListHashTableCleanup (FcListHashTable *table)
-{
- int i;
- FcListBucket *bucket, *next;
-
- for (i = 0; i < FC_LIST_HASH_SIZE; i++)
- {
- for (bucket = table->buckets[i]; bucket; bucket = next)
- {
- next = bucket->next;
- FcPatternDestroy (bucket->pattern);
- FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
- free (bucket);
- }
- table->buckets[i] = 0;
- }
- table->entries = 0;
-}
-
-static int
-FcGetDefaultObjectLangIndex (FcPattern *font, FcObject object)
-{
- FcChar8 *lang = FcGetDefaultLang ();
- FcPatternElt *e = FcPatternObjectFindElt (font, object);
- FcValueListPtr v;
- FcValue value;
- int idx = -1;
- int i;
-
- if (e)
- {
- for (v = FcPatternEltValues(e), i = 0; v; v = FcValueListNext(v), ++i)
- {
- value = FcValueCanonicalize (&v->value);
-
- if (value.type == FcTypeString)
- {
- FcLangResult res = FcLangCompare (value.u.s, lang);
- if (res == FcLangEqual)
- return i;
-
- if (res == FcLangDifferentCountry && idx < 0)
- idx = i;
- }
- }
- }
-
- return (idx > 0) ? idx : 0;
-}
-
-static FcBool
-FcListAppend (FcListHashTable *table,
- FcPattern *font,
- FcObjectSet *os)
-{
- int o;
- FcPatternElt *e;
- FcValueListPtr v;
- FcChar32 hash;
- FcListBucket **prev, *bucket;
- int familyidx = -1;
- int fullnameidx = -1;
- int styleidx = -1;
- int defidx = 0;
- int idx;
-
- hash = FcListPatternHash (font, os);
- for (prev = &table->buckets[hash % FC_LIST_HASH_SIZE];
- (bucket = *prev); prev = &(bucket->next))
- {
- if (bucket->hash == hash &&
- FcListPatternEqual (bucket->pattern, font, os))
- return FcTrue;
- }
- bucket = (FcListBucket *) malloc (sizeof (FcListBucket));
- if (!bucket)
- goto bail0;
- FcMemAlloc (FC_MEM_LISTBUCK, sizeof (FcListBucket));
- bucket->next = 0;
- bucket->hash = hash;
- bucket->pattern = FcPatternCreate ();
- if (!bucket->pattern)
- goto bail1;
-
- for (o = 0; o < os->nobject; o++)
- {
- if (!strcmp (os->objects[o], FC_FAMILY) || !strcmp (os->objects[o], FC_FAMILYLANG))
- {
- if (familyidx < 0)
- familyidx = FcGetDefaultObjectLangIndex (font, FC_FAMILYLANG_OBJECT);
- defidx = familyidx;
- }
- else if (!strcmp (os->objects[o], FC_FULLNAME) || !strcmp (os->objects[o], FC_FULLNAMELANG))
- {
- if (fullnameidx < 0)
- fullnameidx = FcGetDefaultObjectLangIndex (font, FC_FULLNAMELANG_OBJECT);
- defidx = fullnameidx;
- }
- else if (!strcmp (os->objects[o], FC_STYLE) || !strcmp (os->objects[o], FC_STYLELANG))
- {
- if (styleidx < 0)
- styleidx = FcGetDefaultObjectLangIndex (font, FC_STYLELANG_OBJECT);
- defidx = styleidx;
- }
- else
- defidx = 0;
-
- e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[o]));
- if (e)
- {
- for (v = FcPatternEltValues(e), idx = 0; v;
- v = FcValueListNext(v), ++idx)
- {
- if (!FcPatternAdd (bucket->pattern,
- os->objects[o],
- FcValueCanonicalize(&v->value), defidx != idx))
- goto bail2;
- }
- }
- }
- *prev = bucket;
- ++table->entries;
-
- return FcTrue;
-
-bail2:
- FcPatternDestroy (bucket->pattern);
-bail1:
- FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
- free (bucket);
-bail0:
- return FcFalse;
-}
-
-FcFontSet *
-FcFontSetList (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcObjectSet *os)
-{
- FcFontSet *ret;
- FcFontSet *s;
- int f;
- int set;
- FcListHashTable table;
- int i;
- FcListBucket *bucket;
- int destroy_os = 0;
-
- if (!config)
- {
- if (!FcInitBringUptoDate ())
- goto bail0;
-
- config = FcConfigGetCurrent ();
- if (!config)
- goto bail0;
- }
- FcListHashTableInit (&table);
-
- if (!os)
- {
- os = FcObjectGetSet ();
- destroy_os = 1;
- }
-
- /*
- * Walk all available fonts adding those that
- * match to the hash table
- */
- for (set = 0; set < nsets; set++)
- {
- s = sets[set];
- if (!s)
- continue;
- for (f = 0; f < s->nfont; f++)
- if (FcListPatternMatchAny (p, /* pattern */
- s->fonts[f])) /* font */
- if (!FcListAppend (&table, s->fonts[f], os))
- goto bail1;
- }
-#if 0
- {
- int max = 0;
- int full = 0;
- int ents = 0;
- int len;
- for (i = 0; i < FC_LIST_HASH_SIZE; i++)
- {
- if ((bucket = table.buckets[i]))
- {
- len = 0;
- for (; bucket; bucket = bucket->next)
- {
- ents++;
- len++;
- }
- if (len > max)
- max = len;
- full++;
- }
- }
- printf ("used: %d max: %d avg: %g\n", full, max,
- (double) ents / FC_LIST_HASH_SIZE);
- }
-#endif
- /*
- * Walk the hash table and build
- * a font set
- */
- ret = FcFontSetCreate ();
- if (!ret)
- goto bail0;
- for (i = 0; i < FC_LIST_HASH_SIZE; i++)
- while ((bucket = table.buckets[i]))
- {
- if (!FcFontSetAdd (ret, bucket->pattern))
- goto bail2;
- table.buckets[i] = bucket->next;
- FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket));
- free (bucket);
- }
-
- return ret;
-
-bail2:
- FcFontSetDestroy (ret);
-bail1:
- FcListHashTableCleanup (&table);
-bail0:
- if (destroy_os)
- FcObjectSetDestroy (os);
- return 0;
-}
-
-FcFontSet *
-FcFontList (FcConfig *config,
- FcPattern *p,
- FcObjectSet *os)
-{
- FcFontSet *sets[2];
- int nsets;
-
- if (!config)
- {
- if (!FcInitBringUptoDate ())
- return 0;
-
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
- if (config->fonts[FcSetApplication])
- sets[nsets++] = config->fonts[FcSetApplication];
- return FcFontSetList (config, sets, nsets, p, os);
-}
-#define __fclist__
-#include "fcaliastail.h"
-#undef __fclist__
+/* + * fontconfig/src/fclist.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <stdlib.h> + +FcObjectSet * +FcObjectSetCreate (void) +{ + FcObjectSet *os; + + os = (FcObjectSet *) malloc (sizeof (FcObjectSet)); + if (!os) + return 0; + FcMemAlloc (FC_MEM_OBJECTSET, sizeof (FcObjectSet)); + os->nobject = 0; + os->sobject = 0; + os->objects = 0; + return os; +} + +FcBool +FcObjectSetAdd (FcObjectSet *os, const char *object) +{ + int s; + const char **objects; + int high, low, mid, c; + + if (os->nobject == os->sobject) + { + s = os->sobject + 4; + if (os->objects) + objects = (const char **) realloc ((void *) os->objects, + s * sizeof (const char *)); + else + objects = (const char **) malloc (s * sizeof (const char *)); + if (!objects) + return FcFalse; + if (os->sobject) + FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *)); + FcMemAlloc (FC_MEM_OBJECTPTR, s * sizeof (const char *)); + os->objects = objects; + os->sobject = s; + } + high = os->nobject - 1; + low = 0; + mid = 0; + c = 1; + object = (char *)FcStrStaticName ((FcChar8 *)object); + while (low <= high) + { + mid = (low + high) >> 1; + c = os->objects[mid] - object; + if (c == 0) + return FcTrue; + if (c < 0) + low = mid + 1; + else + high = mid - 1; + } + if (c < 0) + mid++; + memmove (os->objects + mid + 1, os->objects + mid, + (os->nobject - mid) * sizeof (const char *)); + os->objects[mid] = object; + os->nobject++; + return FcTrue; +} + +void +FcObjectSetDestroy (FcObjectSet *os) +{ + if (os->objects) + { + FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *)); + free ((void *) os->objects); + } + FcMemFree (FC_MEM_OBJECTSET, sizeof (FcObjectSet)); + free (os); +} + +FcObjectSet * +FcObjectSetVaBuild (const char *first, va_list va) +{ + FcObjectSet *ret; + + FcObjectSetVapBuild (ret, first, va); + return ret; +} + +FcObjectSet * +FcObjectSetBuild (const char *first, ...) +{ + va_list va; + FcObjectSet *os; + + va_start (va, first); + FcObjectSetVapBuild (os, first, va); + va_end (va); + return os; +} + +/* + * Font must have a containing value for every value in the pattern + */ +static FcBool +FcListValueListMatchAny (FcValueListPtr patOrig, /* pattern */ + FcValueListPtr fntOrig) /* font */ +{ + FcValueListPtr pat, fnt; + + for (pat = patOrig; pat != NULL; pat = FcValueListNext(pat)) + { + for (fnt = fntOrig; fnt != NULL; fnt = FcValueListNext(fnt)) + { + /* + * make sure the font 'contains' the pattern. + * (OpListing is OpContains except for strings + * where it requires an exact match) + */ + if (FcConfigCompareValue (&fnt->value, + FcOpListing, + &pat->value)) + break; + } + if (fnt == NULL) + return FcFalse; + } + return FcTrue; +} + +static FcBool +FcListValueListEqual (FcValueListPtr v1orig, + FcValueListPtr v2orig) +{ + FcValueListPtr v1, v2; + + for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1)) + { + for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2)) + if (FcValueEqual (FcValueCanonicalize(&(v1)->value), + FcValueCanonicalize(&(v2)->value))) + break; + if (v2 == NULL) + return FcFalse; + } + for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2)) + { + for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1)) + if (FcValueEqual (FcValueCanonicalize(&v1->value), + FcValueCanonicalize(&v2->value))) + break; + if (v1 == NULL) + return FcFalse; + } + return FcTrue; +} + +static FcBool +FcListPatternEqual (FcPattern *p1, + FcPattern *p2, + FcObjectSet *os) +{ + int i; + FcPatternElt *e1, *e2; + + for (i = 0; i < os->nobject; i++) + { + e1 = FcPatternObjectFindElt (p1, FcObjectFromName (os->objects[i])); + e2 = FcPatternObjectFindElt (p2, FcObjectFromName (os->objects[i])); + if (!e1 && !e2) + continue; + if (!e1 || !e2) + return FcFalse; + if (!FcListValueListEqual (FcPatternEltValues(e1), + FcPatternEltValues(e2))) + return FcFalse; + } + return FcTrue; +} + +/* + * FcTrue iff all objects in "p" match "font" + */ + +FcBool +FcListPatternMatchAny (const FcPattern *p, + const FcPattern *font) +{ + int i; + + for (i = 0; i < p->num; i++) + { + FcPatternElt *pe = &FcPatternElts(p)[i]; + FcPatternElt *fe = FcPatternObjectFindElt (font, pe->object); + if (!fe) + return FcFalse; + if (!FcListValueListMatchAny (FcPatternEltValues(pe), /* pat elts */ + FcPatternEltValues(fe))) /* font elts */ + return FcFalse; + } + return FcTrue; +} + +static FcChar32 +FcListMatrixHash (const FcMatrix *m) +{ + int xx = (int) (m->xx * 100), + xy = (int) (m->xy * 100), + yx = (int) (m->yx * 100), + yy = (int) (m->yy * 100); + + return ((FcChar32) xx) ^ ((FcChar32) xy) ^ ((FcChar32) yx) ^ ((FcChar32) yy); +} + +static FcChar32 +FcListValueHash (FcValue *value) +{ + FcValue v = FcValueCanonicalize(value); + switch (v.type) { + case FcTypeVoid: + return 0; + case FcTypeInteger: + return (FcChar32) v.u.i; + case FcTypeDouble: + return (FcChar32) (int) v.u.d; + case FcTypeString: + return FcStrHashIgnoreCase (v.u.s); + case FcTypeBool: + return (FcChar32) v.u.b; + case FcTypeMatrix: + return FcListMatrixHash (v.u.m); + case FcTypeCharSet: + return FcCharSetCount (v.u.c); + case FcTypeFTFace: + return (long) v.u.f; + case FcTypeLangSet: + return FcLangSetHash (v.u.l); + } + return 0; +} + +static FcChar32 +FcListValueListHash (FcValueListPtr list) +{ + FcChar32 h = 0; + + while (list != NULL) + { + h = h ^ FcListValueHash (&list->value); + list = FcValueListNext(list); + } + return h; +} + +static FcChar32 +FcListPatternHash (FcPattern *font, + FcObjectSet *os) +{ + int n; + FcPatternElt *e; + FcChar32 h = 0; + + for (n = 0; n < os->nobject; n++) + { + e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[n])); + if (e) + h = h ^ FcListValueListHash (FcPatternEltValues(e)); + } + return h; +} + +typedef struct _FcListBucket { + struct _FcListBucket *next; + FcChar32 hash; + FcPattern *pattern; +} FcListBucket; + +#define FC_LIST_HASH_SIZE 4099 + +typedef struct _FcListHashTable { + int entries; + FcListBucket *buckets[FC_LIST_HASH_SIZE]; +} FcListHashTable; + +static void +FcListHashTableInit (FcListHashTable *table) +{ + table->entries = 0; + memset (table->buckets, '\0', sizeof (table->buckets)); +} + +static void +FcListHashTableCleanup (FcListHashTable *table) +{ + int i; + FcListBucket *bucket, *next; + + for (i = 0; i < FC_LIST_HASH_SIZE; i++) + { + for (bucket = table->buckets[i]; bucket; bucket = next) + { + next = bucket->next; + FcPatternDestroy (bucket->pattern); + FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket)); + free (bucket); + } + table->buckets[i] = 0; + } + table->entries = 0; +} + +static int +FcGetDefaultObjectLangIndex (FcPattern *font, FcObject object) +{ + FcChar8 *lang = FcGetDefaultLang (); + FcPatternElt *e = FcPatternObjectFindElt (font, object); + FcValueListPtr v; + FcValue value; + int idx = -1; + int i; + + if (e) + { + for (v = FcPatternEltValues(e), i = 0; v; v = FcValueListNext(v), ++i) + { + value = FcValueCanonicalize (&v->value); + + if (value.type == FcTypeString) + { + FcLangResult res = FcLangCompare (value.u.s, lang); + if (res == FcLangEqual) + return i; + + if (res == FcLangDifferentCountry && idx < 0) + idx = i; + } + } + } + + return (idx > 0) ? idx : 0; +} + +static FcBool +FcListAppend (FcListHashTable *table, + FcPattern *font, + FcObjectSet *os) +{ + int o; + FcPatternElt *e; + FcValueListPtr v; + FcChar32 hash; + FcListBucket **prev, *bucket; + int familyidx = -1; + int fullnameidx = -1; + int styleidx = -1; + int defidx = 0; + int idx; + + hash = FcListPatternHash (font, os); + for (prev = &table->buckets[hash % FC_LIST_HASH_SIZE]; + (bucket = *prev); prev = &(bucket->next)) + { + if (bucket->hash == hash && + FcListPatternEqual (bucket->pattern, font, os)) + return FcTrue; + } + bucket = (FcListBucket *) malloc (sizeof (FcListBucket)); + if (!bucket) + goto bail0; + FcMemAlloc (FC_MEM_LISTBUCK, sizeof (FcListBucket)); + bucket->next = 0; + bucket->hash = hash; + bucket->pattern = FcPatternCreate (); + if (!bucket->pattern) + goto bail1; + + for (o = 0; o < os->nobject; o++) + { + if (!strcmp (os->objects[o], FC_FAMILY) || !strcmp (os->objects[o], FC_FAMILYLANG)) + { + if (familyidx < 0) + familyidx = FcGetDefaultObjectLangIndex (font, FC_FAMILYLANG_OBJECT); + defidx = familyidx; + } + else if (!strcmp (os->objects[o], FC_FULLNAME) || !strcmp (os->objects[o], FC_FULLNAMELANG)) + { + if (fullnameidx < 0) + fullnameidx = FcGetDefaultObjectLangIndex (font, FC_FULLNAMELANG_OBJECT); + defidx = fullnameidx; + } + else if (!strcmp (os->objects[o], FC_STYLE) || !strcmp (os->objects[o], FC_STYLELANG)) + { + if (styleidx < 0) + styleidx = FcGetDefaultObjectLangIndex (font, FC_STYLELANG_OBJECT); + defidx = styleidx; + } + else + defidx = 0; + + e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[o])); + if (e) + { + for (v = FcPatternEltValues(e), idx = 0; v; + v = FcValueListNext(v), ++idx) + { + if (!FcPatternAdd (bucket->pattern, + os->objects[o], + FcValueCanonicalize(&v->value), defidx != idx)) + goto bail2; + } + } + } + *prev = bucket; + ++table->entries; + + return FcTrue; + +bail2: + FcPatternDestroy (bucket->pattern); +bail1: + FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket)); + free (bucket); +bail0: + return FcFalse; +} + +FcFontSet * +FcFontSetList (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcObjectSet *os) +{ + FcFontSet *ret; + FcFontSet *s; + int f; + int set; + FcListHashTable table; + int i; + FcListBucket *bucket; + int destroy_os = 0; + + if (!config) + { + if (!FcInitBringUptoDate ()) + goto bail0; + + config = FcConfigGetCurrent (); + if (!config) + goto bail0; + } + FcListHashTableInit (&table); + + if (!os) + { + os = FcObjectGetSet (); + destroy_os = 1; + } + + /* + * Walk all available fonts adding those that + * match to the hash table + */ + for (set = 0; set < nsets; set++) + { + s = sets[set]; + if (!s) + continue; + for (f = 0; f < s->nfont; f++) + if (FcListPatternMatchAny (p, /* pattern */ + s->fonts[f])) /* font */ + if (!FcListAppend (&table, s->fonts[f], os)) + goto bail1; + } +#if 0 + { + int max = 0; + int full = 0; + int ents = 0; + int len; + for (i = 0; i < FC_LIST_HASH_SIZE; i++) + { + if ((bucket = table.buckets[i])) + { + len = 0; + for (; bucket; bucket = bucket->next) + { + ents++; + len++; + } + if (len > max) + max = len; + full++; + } + } + printf ("used: %d max: %d avg: %g\n", full, max, + (double) ents / FC_LIST_HASH_SIZE); + } +#endif + /* + * Walk the hash table and build + * a font set + */ + ret = FcFontSetCreate (); + if (!ret) + goto bail0; + for (i = 0; i < FC_LIST_HASH_SIZE; i++) + while ((bucket = table.buckets[i])) + { + if (!FcFontSetAdd (ret, bucket->pattern)) + goto bail2; + table.buckets[i] = bucket->next; + FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket)); + free (bucket); + } + + return ret; + +bail2: + FcFontSetDestroy (ret); +bail1: + FcListHashTableCleanup (&table); +bail0: + if (destroy_os) + FcObjectSetDestroy (os); + return 0; +} + +FcFontSet * +FcFontList (FcConfig *config, + FcPattern *p, + FcObjectSet *os) +{ + FcFontSet *sets[2]; + int nsets; + + if (!config) + { + if (!FcInitBringUptoDate ()) + return 0; + + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + nsets = 0; + if (config->fonts[FcSetSystem]) + sets[nsets++] = config->fonts[FcSetSystem]; + if (config->fonts[FcSetApplication]) + sets[nsets++] = config->fonts[FcSetApplication]; + return FcFontSetList (config, sets, nsets, p, os); +} +#define __fclist__ +#include "fcaliastail.h" +#undef __fclist__ diff --git a/fontconfig/src/fcmatch.c b/fontconfig/src/fcmatch.c index c6bb11ef2..1b9162b46 100644 --- a/fontconfig/src/fcmatch.c +++ b/fontconfig/src/fcmatch.c @@ -1,840 +1,840 @@ -/*
- * fontconfig/src/fcmatch.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <string.h>
-#include <ctype.h>
-#include <stdio.h>
-
-static double
-FcCompareNumber (FcValue *value1, FcValue *value2)
-{
- double v1, v2, v;
-
- switch (value1->type) {
- case FcTypeInteger:
- v1 = (double) value1->u.i;
- break;
- case FcTypeDouble:
- v1 = value1->u.d;
- break;
- default:
- return -1.0;
- }
- switch (value2->type) {
- case FcTypeInteger:
- v2 = (double) value2->u.i;
- break;
- case FcTypeDouble:
- v2 = value2->u.d;
- break;
- default:
- return -1.0;
- }
- v = v2 - v1;
- if (v < 0)
- v = -v;
- return v;
-}
-
-static double
-FcCompareString (FcValue *v1, FcValue *v2)
-{
- return (double) FcStrCmpIgnoreCase (FcValueString(v1), FcValueString(v2)) != 0;
-}
-
-static double
-FcCompareFamily (FcValue *v1, FcValue *v2)
-{
- /* rely on the guarantee in FcPatternObjectAddWithBinding that
- * families are always FcTypeString. */
- const FcChar8* v1_string = FcValueString(v1);
- const FcChar8* v2_string = FcValueString(v2);
-
- if (FcToLower(*v1_string) != FcToLower(*v2_string) &&
- *v1_string != ' ' && *v2_string != ' ')
- return 1.0;
-
- return (double) FcStrCmpIgnoreBlanksAndCase (v1_string, v2_string) != 0;
-}
-
-static double
-FcCompareLang (FcValue *v1, FcValue *v2)
-{
- FcLangResult result;
- FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2);
-
- switch (value1.type) {
- case FcTypeLangSet:
- switch (value2.type) {
- case FcTypeLangSet:
- result = FcLangSetCompare (value1.u.l, value2.u.l);
- break;
- case FcTypeString:
- result = FcLangSetHasLang (value1.u.l,
- value2.u.s);
- break;
- default:
- return -1.0;
- }
- break;
- case FcTypeString:
- switch (value2.type) {
- case FcTypeLangSet:
- result = FcLangSetHasLang (value2.u.l, value1.u.s);
- break;
- case FcTypeString:
- result = FcLangCompare (value1.u.s,
- value2.u.s);
- break;
- default:
- return -1.0;
- }
- break;
- default:
- return -1.0;
- }
- switch (result) {
- case FcLangEqual:
- return 0;
- case FcLangDifferentCountry:
- return 1;
- case FcLangDifferentLang:
- default:
- return 2;
- }
-}
-
-static double
-FcCompareBool (FcValue *v1, FcValue *v2)
-{
- if (v2->type != FcTypeBool || v1->type != FcTypeBool)
- return -1.0;
- return (double) v2->u.b != v1->u.b;
-}
-
-static double
-FcCompareCharSet (FcValue *v1, FcValue *v2)
-{
- return (double) FcCharSetSubtractCount (FcValueCharSet(v1), FcValueCharSet(v2));
-}
-
-static double
-FcCompareSize (FcValue *value1, FcValue *value2)
-{
- double v1, v2, v;
-
- switch (value1->type) {
- case FcTypeInteger:
- v1 = value1->u.i;
- break;
- case FcTypeDouble:
- v1 = value1->u.d;
- break;
- default:
- return -1;
- }
- switch (value2->type) {
- case FcTypeInteger:
- v2 = value2->u.i;
- break;
- case FcTypeDouble:
- v2 = value2->u.d;
- break;
- default:
- return -1;
- }
- if (v2 == 0)
- return 0;
- v = v2 - v1;
- if (v < 0)
- v = -v;
- return v;
-}
-
-typedef struct _FcMatcher {
- FcObject object;
- double (*compare) (FcValue *value1, FcValue *value2);
- int strong, weak;
-} FcMatcher;
-
-/*
- * Order is significant, it defines the precedence of
- * each value, earlier values are more significant than
- * later values
- */
-static const FcMatcher _FcMatchers [] = {
- { FC_FOUNDRY_OBJECT, FcCompareString, 0, 0 },
-#define MATCH_FOUNDRY 0
- { FC_CHARSET_OBJECT, FcCompareCharSet, 1, 1 },
-#define MATCH_CHARSET 1
- { FC_FAMILY_OBJECT, FcCompareFamily, 2, 4 },
-#define MATCH_FAMILY 2
- { FC_LANG_OBJECT, FcCompareLang, 3, 3 },
-#define MATCH_LANG 3
-#define MATCH_LANG_INDEX 3
- { FC_SPACING_OBJECT, FcCompareNumber, 5, 5 },
-#define MATCH_SPACING 4
- { FC_PIXEL_SIZE_OBJECT, FcCompareSize, 6, 6 },
-#define MATCH_PIXEL_SIZE 5
- { FC_STYLE_OBJECT, FcCompareString, 7, 7 },
-#define MATCH_STYLE 6
- { FC_SLANT_OBJECT, FcCompareNumber, 8, 8 },
-#define MATCH_SLANT 7
- { FC_WEIGHT_OBJECT, FcCompareNumber, 9, 9 },
-#define MATCH_WEIGHT 8
- { FC_WIDTH_OBJECT, FcCompareNumber, 10, 10 },
-#define MATCH_WIDTH 9
- { FC_DECORATIVE_OBJECT, FcCompareBool, 11, 11 },
-#define MATCH_DECORATIVE 10
- { FC_ANTIALIAS_OBJECT, FcCompareBool, 12, 12 },
-#define MATCH_ANTIALIAS 11
- { FC_RASTERIZER_OBJECT, FcCompareString, 13, 13 },
-#define MATCH_RASTERIZER 12
- { FC_OUTLINE_OBJECT, FcCompareBool, 14, 14 },
-#define MATCH_OUTLINE 13
- { FC_FONTVERSION_OBJECT, FcCompareNumber, 15, 15 },
-#define MATCH_FONTVERSION 14
-};
-
-#define NUM_MATCH_VALUES 16
-
-static const FcMatcher*
-FcObjectToMatcher (FcObject object)
-{
- int i;
-
- i = -1;
- switch (object) {
- case FC_FOUNDRY_OBJECT:
- i = MATCH_FOUNDRY; break;
- case FC_FONTVERSION_OBJECT:
- i = MATCH_FONTVERSION; break;
- case FC_FAMILY_OBJECT:
- i = MATCH_FAMILY; break;
- case FC_CHARSET_OBJECT:
- i = MATCH_CHARSET; break;
- case FC_ANTIALIAS_OBJECT:
- i = MATCH_ANTIALIAS; break;
- case FC_LANG_OBJECT:
- i = MATCH_LANG; break;
- case FC_SPACING_OBJECT:
- i = MATCH_SPACING; break;
- case FC_STYLE_OBJECT:
- i = MATCH_STYLE; break;
- case FC_SLANT_OBJECT:
- i = MATCH_SLANT; break;
- case FC_PIXEL_SIZE_OBJECT:
- i = MATCH_PIXEL_SIZE; break;
- case FC_WIDTH_OBJECT:
- i = MATCH_WIDTH; break;
- case FC_WEIGHT_OBJECT:
- i = MATCH_WEIGHT; break;
- case FC_RASTERIZER_OBJECT:
- i = MATCH_RASTERIZER; break;
- case FC_OUTLINE_OBJECT:
- i = MATCH_OUTLINE; break;
- case FC_DECORATIVE_OBJECT:
- i = MATCH_DECORATIVE; break;
- }
-
- if (i < 0)
- return NULL;
-
- return _FcMatchers+i;
-}
-
-static FcBool
-FcCompareValueList (FcObject object,
- FcValueListPtr v1orig, /* pattern */
- FcValueListPtr v2orig, /* target */
- FcValue *bestValue,
- double *value,
- FcResult *result)
-{
- FcValueListPtr v1, v2;
- double v, best, bestStrong, bestWeak;
- int j;
- const FcMatcher *match = FcObjectToMatcher(object);
-
- if (!match)
- {
- if (bestValue)
- *bestValue = FcValueCanonicalize(&v2orig->value);
- return FcTrue;
- }
-
- best = 1e99;
- bestStrong = 1e99;
- bestWeak = 1e99;
- j = 1;
- for (v1 = v1orig; v1; v1 = FcValueListNext(v1))
- {
- for (v2 = v2orig; v2; v2 = FcValueListNext(v2))
- {
- v = (match->compare) (&v1->value, &v2->value);
- if (v < 0)
- {
- *result = FcResultTypeMismatch;
- return FcFalse;
- }
- v = v * 1000 + j;
- if (v < best)
- {
- if (bestValue)
- *bestValue = FcValueCanonicalize(&v2->value);
- best = v;
- }
- if (v1->binding == FcValueBindingStrong)
- {
- if (v < bestStrong)
- bestStrong = v;
- }
- else
- {
- if (v < bestWeak)
- bestWeak = v;
- }
- }
- j++;
- }
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf (" %s: %g ", FcObjectName (object), best);
- FcValueListPrint (v1orig);
- printf (", ");
- FcValueListPrint (v2orig);
- printf ("\n");
- }
- if (value)
- {
- int weak = match->weak;
- int strong = match->strong;
- if (weak == strong)
- value[strong] += best;
- else
- {
- value[weak] += bestWeak;
- value[strong] += bestStrong;
- }
- }
- return FcTrue;
-}
-
-/*
- * Return a value indicating the distance between the two lists of
- * values
- */
-
-static FcBool
-FcCompare (FcPattern *pat,
- FcPattern *fnt,
- double *value,
- FcResult *result)
-{
- int i, i1, i2;
-
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- value[i] = 0.0;
-
- i1 = 0;
- i2 = 0;
- while (i1 < pat->num && i2 < fnt->num)
- {
- FcPatternElt *elt_i1 = &FcPatternElts(pat)[i1];
- FcPatternElt *elt_i2 = &FcPatternElts(fnt)[i2];
-
- i = FcObjectCompare(elt_i1->object, elt_i2->object);
- if (i > 0)
- i2++;
- else if (i < 0)
- i1++;
- else
- {
- if (!FcCompareValueList (elt_i1->object,
- FcPatternEltValues(elt_i1),
- FcPatternEltValues(elt_i2),
- 0, value, result))
- return FcFalse;
- i1++;
- i2++;
- }
- }
- return FcTrue;
-}
-
-FcPattern *
-FcFontRenderPrepare (FcConfig *config,
- FcPattern *pat,
- FcPattern *font)
-{
- FcPattern *new;
- int i;
- FcPatternElt *fe, *pe;
- FcValue v;
- FcResult result;
-
- new = FcPatternCreate ();
- if (!new)
- return 0;
- for (i = 0; i < font->num; i++)
- {
- fe = &FcPatternElts(font)[i];
- pe = FcPatternObjectFindElt (pat, fe->object);
- if (pe)
- {
- if (!FcCompareValueList (pe->object, FcPatternEltValues(pe),
- FcPatternEltValues(fe), &v, 0, &result))
- {
- FcPatternDestroy (new);
- return 0;
- }
- }
- else
- v = FcValueCanonicalize(&FcPatternEltValues (fe)->value);
- FcPatternObjectAdd (new, fe->object, v, FcFalse);
- }
- for (i = 0; i < pat->num; i++)
- {
- pe = &FcPatternElts(pat)[i];
- fe = FcPatternObjectFindElt (font, pe->object);
- if (!fe)
- {
- v = FcValueCanonicalize(&FcPatternEltValues(pe)->value);
- FcPatternObjectAdd (new, pe->object, v, FcTrue);
- }
- }
-
- FcConfigSubstituteWithPat (config, new, pat, FcMatchFont);
- return new;
-}
-
-static FcPattern *
-FcFontSetMatchInternal (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcResult *result)
-{
- double score[NUM_MATCH_VALUES], bestscore[NUM_MATCH_VALUES];
- int f;
- FcFontSet *s;
- FcPattern *best;
- int i;
- int set;
-
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- bestscore[i] = 0;
- best = 0;
- if (FcDebug () & FC_DBG_MATCH)
- {
- printf ("Match ");
- FcPatternPrint (p);
- }
- for (set = 0; set < nsets; set++)
- {
- s = sets[set];
- if (!s)
- continue;
- for (f = 0; f < s->nfont; f++)
- {
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Font %d ", f);
- FcPatternPrint (s->fonts[f]);
- }
- if (!FcCompare (p, s->fonts[f], score, result))
- return 0;
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Score");
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- {
- printf (" %g", score[i]);
- }
- printf ("\n");
- }
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- {
- if (best && bestscore[i] < score[i])
- break;
- if (!best || score[i] < bestscore[i])
- {
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- bestscore[i] = score[i];
- best = s->fonts[f];
- break;
- }
- }
- }
- }
- if (FcDebug () & FC_DBG_MATCH)
- {
- printf ("Best score");
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- printf (" %g", bestscore[i]);
- printf ("\n");
- FcPatternPrint (best);
- }
- if (!best)
- {
- *result = FcResultNoMatch;
- return 0;
- }
- return best;
-}
-
-FcPattern *
-FcFontSetMatch (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcResult *result)
-{
- FcPattern *best;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- best = FcFontSetMatchInternal (config, sets, nsets, p, result);
- if (best)
- return FcFontRenderPrepare (config, p, best);
- else
- return NULL;
-}
-
-FcPattern *
-FcFontMatch (FcConfig *config,
- FcPattern *p,
- FcResult *result)
-{
- FcFontSet *sets[2];
- int nsets;
- FcPattern *best;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
- if (config->fonts[FcSetApplication])
- sets[nsets++] = config->fonts[FcSetApplication];
-
- best = FcFontSetMatchInternal (config, sets, nsets, p, result);
- if (best)
- return FcFontRenderPrepare (config, p, best);
- else
- return NULL;
-}
-
-typedef struct _FcSortNode {
- FcPattern *pattern;
- double score[NUM_MATCH_VALUES];
-} FcSortNode;
-
-static int
-FcSortCompare (const void *aa, const void *ab)
-{
- FcSortNode *a = *(FcSortNode **) aa;
- FcSortNode *b = *(FcSortNode **) ab;
- double *as = &a->score[0];
- double *bs = &b->score[0];
- double ad = 0, bd = 0;
- int i;
-
- i = NUM_MATCH_VALUES;
- while (i-- && (ad = *as++) == (bd = *bs++))
- ;
- return ad < bd ? -1 : ad > bd ? 1 : 0;
-}
-
-static FcBool
-FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool trim)
-{
- FcBool ret = FcFalse;
- FcCharSet *cs;
-
- cs = 0;
- if (trim || csp)
- {
- cs = FcCharSetCreate ();
- if (cs == NULL)
- goto bail;
- }
-
- while (nnode--)
- {
- FcSortNode *node = *n++;
- FcBool adds_chars = FcFalse;
-
- /*
- * Only fetch node charset if we'd need it
- */
- if (cs)
- {
- FcCharSet *ncs;
-
- if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) !=
- FcResultMatch)
- continue;
-
- if (!FcCharSetMerge (cs, ncs, &adds_chars))
- goto bail;
- }
-
- /*
- * If this font isn't a subset of the previous fonts,
- * add it to the list
- */
- if (!trim || adds_chars)
- {
- FcPatternReference (node->pattern);
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Add ");
- FcPatternPrint (node->pattern);
- }
- if (!FcFontSetAdd (fs, node->pattern))
- {
- FcPatternDestroy (node->pattern);
- goto bail;
- }
- }
- }
- if (csp)
- {
- *csp = cs;
- cs = 0;
- }
-
- ret = FcTrue;
-
-bail:
- if (cs)
- FcCharSetDestroy (cs);
-
- return ret;
-}
-
-void
-FcFontSetSortDestroy (FcFontSet *fs)
-{
- FcFontSetDestroy (fs);
-}
-
-FcFontSet *
-FcFontSetSort (FcConfig *config,
- FcFontSet **sets,
- int nsets,
- FcPattern *p,
- FcBool trim,
- FcCharSet **csp,
- FcResult *result)
-{
- FcFontSet *ret;
- FcFontSet *s;
- FcSortNode *nodes;
- FcSortNode **nodeps, **nodep;
- int nnodes;
- FcSortNode *new;
- int set;
- int f;
- int i;
- int nPatternLang;
- FcBool *patternLangSat;
- FcValue patternLang;
-
- if (FcDebug () & FC_DBG_MATCH)
- {
- printf ("Sort ");
- FcPatternPrint (p);
- }
- nnodes = 0;
- for (set = 0; set < nsets; set++)
- {
- s = sets[set];
- if (!s)
- continue;
- nnodes += s->nfont;
- }
- if (!nnodes)
- goto bail0;
-
- for (nPatternLang = 0;
- FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch;
- nPatternLang++)
- ;
-
- /* freed below */
- nodes = malloc (nnodes * sizeof (FcSortNode) +
- nnodes * sizeof (FcSortNode *) +
- nPatternLang * sizeof (FcBool));
- if (!nodes)
- goto bail0;
- nodeps = (FcSortNode **) (nodes + nnodes);
- patternLangSat = (FcBool *) (nodeps + nnodes);
-
- new = nodes;
- nodep = nodeps;
- for (set = 0; set < nsets; set++)
- {
- s = sets[set];
- if (!s)
- continue;
- for (f = 0; f < s->nfont; f++)
- {
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Font %d ", f);
- FcPatternPrint (s->fonts[f]);
- }
- new->pattern = s->fonts[f];
- if (!FcCompare (p, new->pattern, new->score, result))
- goto bail1;
- if (FcDebug () & FC_DBG_MATCHV)
- {
- printf ("Score");
- for (i = 0; i < NUM_MATCH_VALUES; i++)
- {
- printf (" %g", new->score[i]);
- }
- printf ("\n");
- }
- *nodep = new;
- new++;
- nodep++;
- }
- }
-
- nnodes = new - nodes;
-
- qsort (nodeps, nnodes, sizeof (FcSortNode *),
- FcSortCompare);
-
- for (i = 0; i < nPatternLang; i++)
- patternLangSat[i] = FcFalse;
-
- for (f = 0; f < nnodes; f++)
- {
- FcBool satisfies = FcFalse;
- /*
- * If this node matches any language, go check
- * which ones and satisfy those entries
- */
- if (nodeps[f]->score[MATCH_LANG_INDEX] < 2000)
- {
- for (i = 0; i < nPatternLang; i++)
- {
- FcValue nodeLang;
-
- if (!patternLangSat[i] &&
- FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch &&
- FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch)
- {
- double compare = FcCompareLang (&patternLang, &nodeLang);
- if (compare >= 0 && compare < 2)
- {
- if (FcDebug () & FC_DBG_MATCHV)
- {
- FcChar8 *family;
- FcChar8 *style;
-
- if (FcPatternGetString (nodeps[f]->pattern, FC_FAMILY, 0, &family) == FcResultMatch &&
- FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch)
- printf ("Font %s:%s matches language %d\n", family, style, i);
- }
- patternLangSat[i] = FcTrue;
- satisfies = FcTrue;
- break;
- }
- }
- }
- }
- if (!satisfies)
- nodeps[f]->score[MATCH_LANG_INDEX] = 10000.0;
- }
-
- /*
- * Re-sort once the language issues have been settled
- */
- qsort (nodeps, nnodes, sizeof (FcSortNode *),
- FcSortCompare);
-
- ret = FcFontSetCreate ();
- if (!ret)
- goto bail1;
-
- if (!FcSortWalk (nodeps, nnodes, ret, csp, trim))
- goto bail2;
-
- free (nodes);
-
- if (FcDebug() & FC_DBG_MATCH)
- {
- printf ("First font ");
- FcPatternPrint (ret->fonts[0]);
- }
- return ret;
-
-bail2:
- FcFontSetDestroy (ret);
-bail1:
- free (nodes);
-bail0:
- return 0;
-}
-
-FcFontSet *
-FcFontSort (FcConfig *config,
- FcPattern *p,
- FcBool trim,
- FcCharSet **csp,
- FcResult *result)
-{
- FcFontSet *sets[2];
- int nsets;
-
- if (!config)
- {
- config = FcConfigGetCurrent ();
- if (!config)
- return 0;
- }
- nsets = 0;
- if (config->fonts[FcSetSystem])
- sets[nsets++] = config->fonts[FcSetSystem];
- if (config->fonts[FcSetApplication])
- sets[nsets++] = config->fonts[FcSetApplication];
- return FcFontSetSort (config, sets, nsets, p, trim, csp, result);
-}
-#define __fcmatch__
-#include "fcaliastail.h"
-#undef __fcmatch__
+/* + * fontconfig/src/fcmatch.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <string.h> +#include <ctype.h> +#include <stdio.h> + +static double +FcCompareNumber (FcValue *value1, FcValue *value2) +{ + double v1, v2, v; + + switch (value1->type) { + case FcTypeInteger: + v1 = (double) value1->u.i; + break; + case FcTypeDouble: + v1 = value1->u.d; + break; + default: + return -1.0; + } + switch (value2->type) { + case FcTypeInteger: + v2 = (double) value2->u.i; + break; + case FcTypeDouble: + v2 = value2->u.d; + break; + default: + return -1.0; + } + v = v2 - v1; + if (v < 0) + v = -v; + return v; +} + +static double +FcCompareString (FcValue *v1, FcValue *v2) +{ + return (double) FcStrCmpIgnoreCase (FcValueString(v1), FcValueString(v2)) != 0; +} + +static double +FcCompareFamily (FcValue *v1, FcValue *v2) +{ + /* rely on the guarantee in FcPatternObjectAddWithBinding that + * families are always FcTypeString. */ + const FcChar8* v1_string = FcValueString(v1); + const FcChar8* v2_string = FcValueString(v2); + + if (FcToLower(*v1_string) != FcToLower(*v2_string) && + *v1_string != ' ' && *v2_string != ' ') + return 1.0; + + return (double) FcStrCmpIgnoreBlanksAndCase (v1_string, v2_string) != 0; +} + +static double +FcCompareLang (FcValue *v1, FcValue *v2) +{ + FcLangResult result; + FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2); + + switch (value1.type) { + case FcTypeLangSet: + switch (value2.type) { + case FcTypeLangSet: + result = FcLangSetCompare (value1.u.l, value2.u.l); + break; + case FcTypeString: + result = FcLangSetHasLang (value1.u.l, + value2.u.s); + break; + default: + return -1.0; + } + break; + case FcTypeString: + switch (value2.type) { + case FcTypeLangSet: + result = FcLangSetHasLang (value2.u.l, value1.u.s); + break; + case FcTypeString: + result = FcLangCompare (value1.u.s, + value2.u.s); + break; + default: + return -1.0; + } + break; + default: + return -1.0; + } + switch (result) { + case FcLangEqual: + return 0; + case FcLangDifferentCountry: + return 1; + case FcLangDifferentLang: + default: + return 2; + } +} + +static double +FcCompareBool (FcValue *v1, FcValue *v2) +{ + if (v2->type != FcTypeBool || v1->type != FcTypeBool) + return -1.0; + return (double) v2->u.b != v1->u.b; +} + +static double +FcCompareCharSet (FcValue *v1, FcValue *v2) +{ + return (double) FcCharSetSubtractCount (FcValueCharSet(v1), FcValueCharSet(v2)); +} + +static double +FcCompareSize (FcValue *value1, FcValue *value2) +{ + double v1, v2, v; + + switch (value1->type) { + case FcTypeInteger: + v1 = value1->u.i; + break; + case FcTypeDouble: + v1 = value1->u.d; + break; + default: + return -1; + } + switch (value2->type) { + case FcTypeInteger: + v2 = value2->u.i; + break; + case FcTypeDouble: + v2 = value2->u.d; + break; + default: + return -1; + } + if (v2 == 0) + return 0; + v = v2 - v1; + if (v < 0) + v = -v; + return v; +} + +typedef struct _FcMatcher { + FcObject object; + double (*compare) (FcValue *value1, FcValue *value2); + int strong, weak; +} FcMatcher; + +/* + * Order is significant, it defines the precedence of + * each value, earlier values are more significant than + * later values + */ +static const FcMatcher _FcMatchers [] = { + { FC_FOUNDRY_OBJECT, FcCompareString, 0, 0 }, +#define MATCH_FOUNDRY 0 + { FC_CHARSET_OBJECT, FcCompareCharSet, 1, 1 }, +#define MATCH_CHARSET 1 + { FC_FAMILY_OBJECT, FcCompareFamily, 2, 4 }, +#define MATCH_FAMILY 2 + { FC_LANG_OBJECT, FcCompareLang, 3, 3 }, +#define MATCH_LANG 3 +#define MATCH_LANG_INDEX 3 + { FC_SPACING_OBJECT, FcCompareNumber, 5, 5 }, +#define MATCH_SPACING 4 + { FC_PIXEL_SIZE_OBJECT, FcCompareSize, 6, 6 }, +#define MATCH_PIXEL_SIZE 5 + { FC_STYLE_OBJECT, FcCompareString, 7, 7 }, +#define MATCH_STYLE 6 + { FC_SLANT_OBJECT, FcCompareNumber, 8, 8 }, +#define MATCH_SLANT 7 + { FC_WEIGHT_OBJECT, FcCompareNumber, 9, 9 }, +#define MATCH_WEIGHT 8 + { FC_WIDTH_OBJECT, FcCompareNumber, 10, 10 }, +#define MATCH_WIDTH 9 + { FC_DECORATIVE_OBJECT, FcCompareBool, 11, 11 }, +#define MATCH_DECORATIVE 10 + { FC_ANTIALIAS_OBJECT, FcCompareBool, 12, 12 }, +#define MATCH_ANTIALIAS 11 + { FC_RASTERIZER_OBJECT, FcCompareString, 13, 13 }, +#define MATCH_RASTERIZER 12 + { FC_OUTLINE_OBJECT, FcCompareBool, 14, 14 }, +#define MATCH_OUTLINE 13 + { FC_FONTVERSION_OBJECT, FcCompareNumber, 15, 15 }, +#define MATCH_FONTVERSION 14 +}; + +#define NUM_MATCH_VALUES 16 + +static const FcMatcher* +FcObjectToMatcher (FcObject object) +{ + int i; + + i = -1; + switch (object) { + case FC_FOUNDRY_OBJECT: + i = MATCH_FOUNDRY; break; + case FC_FONTVERSION_OBJECT: + i = MATCH_FONTVERSION; break; + case FC_FAMILY_OBJECT: + i = MATCH_FAMILY; break; + case FC_CHARSET_OBJECT: + i = MATCH_CHARSET; break; + case FC_ANTIALIAS_OBJECT: + i = MATCH_ANTIALIAS; break; + case FC_LANG_OBJECT: + i = MATCH_LANG; break; + case FC_SPACING_OBJECT: + i = MATCH_SPACING; break; + case FC_STYLE_OBJECT: + i = MATCH_STYLE; break; + case FC_SLANT_OBJECT: + i = MATCH_SLANT; break; + case FC_PIXEL_SIZE_OBJECT: + i = MATCH_PIXEL_SIZE; break; + case FC_WIDTH_OBJECT: + i = MATCH_WIDTH; break; + case FC_WEIGHT_OBJECT: + i = MATCH_WEIGHT; break; + case FC_RASTERIZER_OBJECT: + i = MATCH_RASTERIZER; break; + case FC_OUTLINE_OBJECT: + i = MATCH_OUTLINE; break; + case FC_DECORATIVE_OBJECT: + i = MATCH_DECORATIVE; break; + } + + if (i < 0) + return NULL; + + return _FcMatchers+i; +} + +static FcBool +FcCompareValueList (FcObject object, + FcValueListPtr v1orig, /* pattern */ + FcValueListPtr v2orig, /* target */ + FcValue *bestValue, + double *value, + FcResult *result) +{ + FcValueListPtr v1, v2; + double v, best, bestStrong, bestWeak; + int j; + const FcMatcher *match = FcObjectToMatcher(object); + + if (!match) + { + if (bestValue) + *bestValue = FcValueCanonicalize(&v2orig->value); + return FcTrue; + } + + best = 1e99; + bestStrong = 1e99; + bestWeak = 1e99; + j = 1; + for (v1 = v1orig; v1; v1 = FcValueListNext(v1)) + { + for (v2 = v2orig; v2; v2 = FcValueListNext(v2)) + { + v = (match->compare) (&v1->value, &v2->value); + if (v < 0) + { + *result = FcResultTypeMismatch; + return FcFalse; + } + v = v * 1000 + j; + if (v < best) + { + if (bestValue) + *bestValue = FcValueCanonicalize(&v2->value); + best = v; + } + if (v1->binding == FcValueBindingStrong) + { + if (v < bestStrong) + bestStrong = v; + } + else + { + if (v < bestWeak) + bestWeak = v; + } + } + j++; + } + if (FcDebug () & FC_DBG_MATCHV) + { + printf (" %s: %g ", FcObjectName (object), best); + FcValueListPrint (v1orig); + printf (", "); + FcValueListPrint (v2orig); + printf ("\n"); + } + if (value) + { + int weak = match->weak; + int strong = match->strong; + if (weak == strong) + value[strong] += best; + else + { + value[weak] += bestWeak; + value[strong] += bestStrong; + } + } + return FcTrue; +} + +/* + * Return a value indicating the distance between the two lists of + * values + */ + +static FcBool +FcCompare (FcPattern *pat, + FcPattern *fnt, + double *value, + FcResult *result) +{ + int i, i1, i2; + + for (i = 0; i < NUM_MATCH_VALUES; i++) + value[i] = 0.0; + + i1 = 0; + i2 = 0; + while (i1 < pat->num && i2 < fnt->num) + { + FcPatternElt *elt_i1 = &FcPatternElts(pat)[i1]; + FcPatternElt *elt_i2 = &FcPatternElts(fnt)[i2]; + + i = FcObjectCompare(elt_i1->object, elt_i2->object); + if (i > 0) + i2++; + else if (i < 0) + i1++; + else + { + if (!FcCompareValueList (elt_i1->object, + FcPatternEltValues(elt_i1), + FcPatternEltValues(elt_i2), + 0, value, result)) + return FcFalse; + i1++; + i2++; + } + } + return FcTrue; +} + +FcPattern * +FcFontRenderPrepare (FcConfig *config, + FcPattern *pat, + FcPattern *font) +{ + FcPattern *new; + int i; + FcPatternElt *fe, *pe; + FcValue v; + FcResult result; + + new = FcPatternCreate (); + if (!new) + return 0; + for (i = 0; i < font->num; i++) + { + fe = &FcPatternElts(font)[i]; + pe = FcPatternObjectFindElt (pat, fe->object); + if (pe) + { + if (!FcCompareValueList (pe->object, FcPatternEltValues(pe), + FcPatternEltValues(fe), &v, 0, &result)) + { + FcPatternDestroy (new); + return 0; + } + } + else + v = FcValueCanonicalize(&FcPatternEltValues (fe)->value); + FcPatternObjectAdd (new, fe->object, v, FcFalse); + } + for (i = 0; i < pat->num; i++) + { + pe = &FcPatternElts(pat)[i]; + fe = FcPatternObjectFindElt (font, pe->object); + if (!fe) + { + v = FcValueCanonicalize(&FcPatternEltValues(pe)->value); + FcPatternObjectAdd (new, pe->object, v, FcTrue); + } + } + + FcConfigSubstituteWithPat (config, new, pat, FcMatchFont); + return new; +} + +static FcPattern * +FcFontSetMatchInternal (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcResult *result) +{ + double score[NUM_MATCH_VALUES], bestscore[NUM_MATCH_VALUES]; + int f; + FcFontSet *s; + FcPattern *best; + int i; + int set; + + for (i = 0; i < NUM_MATCH_VALUES; i++) + bestscore[i] = 0; + best = 0; + if (FcDebug () & FC_DBG_MATCH) + { + printf ("Match "); + FcPatternPrint (p); + } + for (set = 0; set < nsets; set++) + { + s = sets[set]; + if (!s) + continue; + for (f = 0; f < s->nfont; f++) + { + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Font %d ", f); + FcPatternPrint (s->fonts[f]); + } + if (!FcCompare (p, s->fonts[f], score, result)) + return 0; + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Score"); + for (i = 0; i < NUM_MATCH_VALUES; i++) + { + printf (" %g", score[i]); + } + printf ("\n"); + } + for (i = 0; i < NUM_MATCH_VALUES; i++) + { + if (best && bestscore[i] < score[i]) + break; + if (!best || score[i] < bestscore[i]) + { + for (i = 0; i < NUM_MATCH_VALUES; i++) + bestscore[i] = score[i]; + best = s->fonts[f]; + break; + } + } + } + } + if (FcDebug () & FC_DBG_MATCH) + { + printf ("Best score"); + for (i = 0; i < NUM_MATCH_VALUES; i++) + printf (" %g", bestscore[i]); + printf ("\n"); + FcPatternPrint (best); + } + if (!best) + { + *result = FcResultNoMatch; + return 0; + } + return best; +} + +FcPattern * +FcFontSetMatch (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcResult *result) +{ + FcPattern *best; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + best = FcFontSetMatchInternal (config, sets, nsets, p, result); + if (best) + return FcFontRenderPrepare (config, p, best); + else + return NULL; +} + +FcPattern * +FcFontMatch (FcConfig *config, + FcPattern *p, + FcResult *result) +{ + FcFontSet *sets[2]; + int nsets; + FcPattern *best; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + nsets = 0; + if (config->fonts[FcSetSystem]) + sets[nsets++] = config->fonts[FcSetSystem]; + if (config->fonts[FcSetApplication]) + sets[nsets++] = config->fonts[FcSetApplication]; + + best = FcFontSetMatchInternal (config, sets, nsets, p, result); + if (best) + return FcFontRenderPrepare (config, p, best); + else + return NULL; +} + +typedef struct _FcSortNode { + FcPattern *pattern; + double score[NUM_MATCH_VALUES]; +} FcSortNode; + +static int +FcSortCompare (const void *aa, const void *ab) +{ + FcSortNode *a = *(FcSortNode **) aa; + FcSortNode *b = *(FcSortNode **) ab; + double *as = &a->score[0]; + double *bs = &b->score[0]; + double ad = 0, bd = 0; + int i; + + i = NUM_MATCH_VALUES; + while (i-- && (ad = *as++) == (bd = *bs++)) + ; + return ad < bd ? -1 : ad > bd ? 1 : 0; +} + +static FcBool +FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool trim) +{ + FcBool ret = FcFalse; + FcCharSet *cs; + + cs = 0; + if (trim || csp) + { + cs = FcCharSetCreate (); + if (cs == NULL) + goto bail; + } + + while (nnode--) + { + FcSortNode *node = *n++; + FcBool adds_chars = FcFalse; + + /* + * Only fetch node charset if we'd need it + */ + if (cs) + { + FcCharSet *ncs; + + if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) != + FcResultMatch) + continue; + + if (!FcCharSetMerge (cs, ncs, &adds_chars)) + goto bail; + } + + /* + * If this font isn't a subset of the previous fonts, + * add it to the list + */ + if (!trim || adds_chars) + { + FcPatternReference (node->pattern); + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Add "); + FcPatternPrint (node->pattern); + } + if (!FcFontSetAdd (fs, node->pattern)) + { + FcPatternDestroy (node->pattern); + goto bail; + } + } + } + if (csp) + { + *csp = cs; + cs = 0; + } + + ret = FcTrue; + +bail: + if (cs) + FcCharSetDestroy (cs); + + return ret; +} + +void +FcFontSetSortDestroy (FcFontSet *fs) +{ + FcFontSetDestroy (fs); +} + +FcFontSet * +FcFontSetSort (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcBool trim, + FcCharSet **csp, + FcResult *result) +{ + FcFontSet *ret; + FcFontSet *s; + FcSortNode *nodes; + FcSortNode **nodeps, **nodep; + int nnodes; + FcSortNode *new; + int set; + int f; + int i; + int nPatternLang; + FcBool *patternLangSat; + FcValue patternLang; + + if (FcDebug () & FC_DBG_MATCH) + { + printf ("Sort "); + FcPatternPrint (p); + } + nnodes = 0; + for (set = 0; set < nsets; set++) + { + s = sets[set]; + if (!s) + continue; + nnodes += s->nfont; + } + if (!nnodes) + goto bail0; + + for (nPatternLang = 0; + FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch; + nPatternLang++) + ; + + /* freed below */ + nodes = malloc (nnodes * sizeof (FcSortNode) + + nnodes * sizeof (FcSortNode *) + + nPatternLang * sizeof (FcBool)); + if (!nodes) + goto bail0; + nodeps = (FcSortNode **) (nodes + nnodes); + patternLangSat = (FcBool *) (nodeps + nnodes); + + new = nodes; + nodep = nodeps; + for (set = 0; set < nsets; set++) + { + s = sets[set]; + if (!s) + continue; + for (f = 0; f < s->nfont; f++) + { + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Font %d ", f); + FcPatternPrint (s->fonts[f]); + } + new->pattern = s->fonts[f]; + if (!FcCompare (p, new->pattern, new->score, result)) + goto bail1; + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Score"); + for (i = 0; i < NUM_MATCH_VALUES; i++) + { + printf (" %g", new->score[i]); + } + printf ("\n"); + } + *nodep = new; + new++; + nodep++; + } + } + + nnodes = new - nodes; + + qsort (nodeps, nnodes, sizeof (FcSortNode *), + FcSortCompare); + + for (i = 0; i < nPatternLang; i++) + patternLangSat[i] = FcFalse; + + for (f = 0; f < nnodes; f++) + { + FcBool satisfies = FcFalse; + /* + * If this node matches any language, go check + * which ones and satisfy those entries + */ + if (nodeps[f]->score[MATCH_LANG_INDEX] < 2000) + { + for (i = 0; i < nPatternLang; i++) + { + FcValue nodeLang; + + if (!patternLangSat[i] && + FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch && + FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch) + { + double compare = FcCompareLang (&patternLang, &nodeLang); + if (compare >= 0 && compare < 2) + { + if (FcDebug () & FC_DBG_MATCHV) + { + FcChar8 *family; + FcChar8 *style; + + if (FcPatternGetString (nodeps[f]->pattern, FC_FAMILY, 0, &family) == FcResultMatch && + FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch) + printf ("Font %s:%s matches language %d\n", family, style, i); + } + patternLangSat[i] = FcTrue; + satisfies = FcTrue; + break; + } + } + } + } + if (!satisfies) + nodeps[f]->score[MATCH_LANG_INDEX] = 10000.0; + } + + /* + * Re-sort once the language issues have been settled + */ + qsort (nodeps, nnodes, sizeof (FcSortNode *), + FcSortCompare); + + ret = FcFontSetCreate (); + if (!ret) + goto bail1; + + if (!FcSortWalk (nodeps, nnodes, ret, csp, trim)) + goto bail2; + + free (nodes); + + if (FcDebug() & FC_DBG_MATCH) + { + printf ("First font "); + FcPatternPrint (ret->fonts[0]); + } + return ret; + +bail2: + FcFontSetDestroy (ret); +bail1: + free (nodes); +bail0: + return 0; +} + +FcFontSet * +FcFontSort (FcConfig *config, + FcPattern *p, + FcBool trim, + FcCharSet **csp, + FcResult *result) +{ + FcFontSet *sets[2]; + int nsets; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + nsets = 0; + if (config->fonts[FcSetSystem]) + sets[nsets++] = config->fonts[FcSetSystem]; + if (config->fonts[FcSetApplication]) + sets[nsets++] = config->fonts[FcSetApplication]; + return FcFontSetSort (config, sets, nsets, p, trim, csp, result); +} +#define __fcmatch__ +#include "fcaliastail.h" +#undef __fcmatch__ diff --git a/fontconfig/src/fcmatrix.c b/fontconfig/src/fcmatrix.c index 2daa0044f..f0c613918 100644 --- a/fontconfig/src/fcmatrix.c +++ b/fontconfig/src/fcmatrix.c @@ -1,120 +1,120 @@ -/*
- * fontconfig/src/fcmatrix.c
- *
- * Copyright © 2000 Tuomas J. Lukka
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of Tuomas Lukka not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. Tuomas Lukka makes no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * TUOMAS LUKKA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL TUOMAS LUKKA BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <math.h>
-#include <stdlib.h>
-#include <ctype.h>
-
-const FcMatrix FcIdentityMatrix = { 1, 0, 0, 1 };
-
-FcMatrix *
-FcMatrixCopy (const FcMatrix *mat)
-{
- FcMatrix *r;
- if(!mat)
- return 0;
- r = (FcMatrix *) malloc (sizeof (*r) );
- if (!r)
- return 0;
- FcMemAlloc (FC_MEM_MATRIX, sizeof (FcMatrix));
- *r = *mat;
- return r;
-}
-
-void
-FcMatrixFree (FcMatrix *mat)
-{
- if (mat != &FcIdentityMatrix)
- {
- FcMemFree (FC_MEM_MATRIX, sizeof (FcMatrix));
- free (mat);
- }
-}
-
-FcBool
-FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2)
-{
- if(mat1 == mat2) return FcTrue;
- if(mat1 == 0 || mat2 == 0) return FcFalse;
- return mat1->xx == mat2->xx &&
- mat1->xy == mat2->xy &&
- mat1->yx == mat2->yx &&
- mat1->yy == mat2->yy;
-}
-
-void
-FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b)
-{
- FcMatrix r;
-
- r.xx = a->xx * b->xx + a->xy * b->yx;
- r.xy = a->xx * b->xy + a->xy * b->yy;
- r.yx = a->yx * b->xx + a->yy * b->yx;
- r.yy = a->yx * b->xy + a->yy * b->yy;
- *result = r;
-}
-
-void
-FcMatrixRotate (FcMatrix *m, double c, double s)
-{
- FcMatrix r;
-
- /*
- * X Coordinate system is upside down, swap to make
- * rotations counterclockwise
- */
- r.xx = c;
- r.xy = -s;
- r.yx = s;
- r.yy = c;
- FcMatrixMultiply (m, &r, m);
-}
-
-void
-FcMatrixScale (FcMatrix *m, double sx, double sy)
-{
- FcMatrix r;
-
- r.xx = sx;
- r.xy = 0;
- r.yx = 0;
- r.yy = sy;
- FcMatrixMultiply (m, &r, m);
-}
-
-void
-FcMatrixShear (FcMatrix *m, double sh, double sv)
-{
- FcMatrix r;
-
- r.xx = 1;
- r.xy = sh;
- r.yx = sv;
- r.yy = 1;
- FcMatrixMultiply (m, &r, m);
-}
-#define __fcmatrix__
-#include "fcaliastail.h"
-#undef __fcmatrix__
+/* + * fontconfig/src/fcmatrix.c + * + * Copyright © 2000 Tuomas J. Lukka + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Tuomas Lukka not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Tuomas Lukka makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * TUOMAS LUKKA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL TUOMAS LUKKA BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <math.h> +#include <stdlib.h> +#include <ctype.h> + +const FcMatrix FcIdentityMatrix = { 1, 0, 0, 1 }; + +FcMatrix * +FcMatrixCopy (const FcMatrix *mat) +{ + FcMatrix *r; + if(!mat) + return 0; + r = (FcMatrix *) malloc (sizeof (*r) ); + if (!r) + return 0; + FcMemAlloc (FC_MEM_MATRIX, sizeof (FcMatrix)); + *r = *mat; + return r; +} + +void +FcMatrixFree (FcMatrix *mat) +{ + if (mat != &FcIdentityMatrix) + { + FcMemFree (FC_MEM_MATRIX, sizeof (FcMatrix)); + free (mat); + } +} + +FcBool +FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2) +{ + if(mat1 == mat2) return FcTrue; + if(mat1 == 0 || mat2 == 0) return FcFalse; + return mat1->xx == mat2->xx && + mat1->xy == mat2->xy && + mat1->yx == mat2->yx && + mat1->yy == mat2->yy; +} + +void +FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b) +{ + FcMatrix r; + + r.xx = a->xx * b->xx + a->xy * b->yx; + r.xy = a->xx * b->xy + a->xy * b->yy; + r.yx = a->yx * b->xx + a->yy * b->yx; + r.yy = a->yx * b->xy + a->yy * b->yy; + *result = r; +} + +void +FcMatrixRotate (FcMatrix *m, double c, double s) +{ + FcMatrix r; + + /* + * X Coordinate system is upside down, swap to make + * rotations counterclockwise + */ + r.xx = c; + r.xy = -s; + r.yx = s; + r.yy = c; + FcMatrixMultiply (m, &r, m); +} + +void +FcMatrixScale (FcMatrix *m, double sx, double sy) +{ + FcMatrix r; + + r.xx = sx; + r.xy = 0; + r.yx = 0; + r.yy = sy; + FcMatrixMultiply (m, &r, m); +} + +void +FcMatrixShear (FcMatrix *m, double sh, double sv) +{ + FcMatrix r; + + r.xx = 1; + r.xy = sh; + r.yx = sv; + r.yy = 1; + FcMatrixMultiply (m, &r, m); +} +#define __fcmatrix__ +#include "fcaliastail.h" +#undef __fcmatrix__ diff --git a/fontconfig/src/fcname.c b/fontconfig/src/fcname.c index 98b50b457..d77eff6f7 100644 --- a/fontconfig/src/fcname.c +++ b/fontconfig/src/fcname.c @@ -1,902 +1,902 @@ -/*
- * fontconfig/src/fcname.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <ctype.h>
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-
-/*
- * Please do not change this list, it is used to initialize the object
- * list in this order to match the FC_foo_OBJECT constants. Those
- * constants are written into cache files.
- */
-
-static const FcObjectType _FcBaseObjectTypes[] = {
- { FC_FAMILY, FcTypeString, }, /* 1 */
- { FC_FAMILYLANG, FcTypeString, },
- { FC_STYLE, FcTypeString, },
- { FC_STYLELANG, FcTypeString, },
- { FC_FULLNAME, FcTypeString, },
- { FC_FULLNAMELANG, FcTypeString, },
- { FC_SLANT, FcTypeInteger, },
- { FC_WEIGHT, FcTypeInteger, },
- { FC_WIDTH, FcTypeInteger, },
- { FC_SIZE, FcTypeDouble, },
- { FC_ASPECT, FcTypeDouble, },
- { FC_PIXEL_SIZE, FcTypeDouble, },
- { FC_SPACING, FcTypeInteger, },
- { FC_FOUNDRY, FcTypeString, },
- { FC_ANTIALIAS, FcTypeBool, },
- { FC_HINT_STYLE, FcTypeInteger, },
- { FC_HINTING, FcTypeBool, },
- { FC_VERTICAL_LAYOUT, FcTypeBool, },
- { FC_AUTOHINT, FcTypeBool, },
- { FC_GLOBAL_ADVANCE, FcTypeBool, },
- { FC_FILE, FcTypeString, },
- { FC_INDEX, FcTypeInteger, },
- { FC_RASTERIZER, FcTypeString, },
- { FC_OUTLINE, FcTypeBool, },
- { FC_SCALABLE, FcTypeBool, },
- { FC_DPI, FcTypeDouble },
- { FC_RGBA, FcTypeInteger, },
- { FC_SCALE, FcTypeDouble, },
- { FC_MINSPACE, FcTypeBool, },
- { FC_CHAR_WIDTH, FcTypeInteger },
- { FC_CHAR_HEIGHT, FcTypeInteger },
- { FC_MATRIX, FcTypeMatrix },
- { FC_CHARSET, FcTypeCharSet },
- { FC_LANG, FcTypeLangSet },
- { FC_FONTVERSION, FcTypeInteger },
- { FC_CAPABILITY, FcTypeString },
- { FC_FONTFORMAT, FcTypeString },
- { FC_EMBOLDEN, FcTypeBool },
- { FC_EMBEDDED_BITMAP, FcTypeBool },
- { FC_DECORATIVE, FcTypeBool },
- { FC_LCD_FILTER, FcTypeInteger }, /* 41 */
-};
-
-#define NUM_OBJECT_TYPES (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0])
-
-typedef struct _FcObjectTypeList FcObjectTypeList;
-
-struct _FcObjectTypeList {
- const FcObjectTypeList *next;
- const FcObjectType *types;
- int ntypes;
-};
-
-static const FcObjectTypeList _FcBaseObjectTypesList = {
- 0,
- _FcBaseObjectTypes,
- NUM_OBJECT_TYPES,
-};
-
-static const FcObjectTypeList *_FcObjectTypes = &_FcBaseObjectTypesList;
-
-#define OBJECT_HASH_SIZE 31
-
-typedef struct _FcObjectBucket {
- struct _FcObjectBucket *next;
- FcChar32 hash;
- FcObject id;
-} FcObjectBucket;
-
-static FcObjectBucket *FcObjectBuckets[OBJECT_HASH_SIZE];
-
-static FcObjectType *FcObjects = (FcObjectType *) _FcBaseObjectTypes;
-static int FcObjectsNumber = NUM_OBJECT_TYPES;
-static int FcObjectsSize = 0;
-static FcBool FcObjectsInited;
-
-static FcObjectType *
-FcObjectInsert (const char *name, FcType type)
-{
- FcObjectType *o;
- if (FcObjectsNumber >= FcObjectsSize)
- {
- int newsize = FcObjectsNumber * 2;
- FcObjectType *newobjects;
-
- if (FcObjectsSize)
- newobjects = realloc (FcObjects, newsize * sizeof (FcObjectType));
- else
- {
- newobjects = malloc (newsize * sizeof (FcObjectType));
- if (newobjects)
- memcpy (newobjects, FcObjects,
- FcObjectsNumber * sizeof (FcObjectType));
- }
- if (!newobjects)
- return NULL;
- FcObjects = newobjects;
- FcObjectsSize = newsize;
- }
- o = &FcObjects[FcObjectsNumber];
- o->object = name;
- o->type = type;
- ++FcObjectsNumber;
- return o;
-}
-
-static FcObject
-FcObjectId (FcObjectType *o)
-{
- return o - FcObjects + 1;
-}
-
-static FcObjectType *
-FcObjectFindByName (const char *object, FcBool insert)
-{
- FcChar32 hash = FcStringHash ((const FcChar8 *) object);
- FcObjectBucket **p;
- FcObjectBucket *b;
- FcObjectType *o;
-
- if (!FcObjectsInited)
- FcObjectInit ();
- for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- {
- o = FcObjects + b->id - 1;
- if (b->hash == hash && !strcmp (object, (o->object)))
- return o;
- }
- if (!insert)
- return NULL;
- /*
- * Hook it into the hash chain
- */
- b = malloc (sizeof(FcObjectBucket));
- if (!b)
- return NULL;
- object = (const char *) FcStrCopy ((FcChar8 *) object);
- if (!object) {
- free (b);
- return NULL;
- }
- o = FcObjectInsert (object, -1);
- b->next = NULL;
- b->hash = hash;
- b->id = FcObjectId (o);
- *p = b;
- return o;
-}
-
-static FcObjectType *
-FcObjectFindById (FcObject object)
-{
- if (1 <= object && object <= FcObjectsNumber)
- return FcObjects + object - 1;
- return NULL;
-}
-
-static FcBool
-FcObjectHashInsert (const FcObjectType *object, FcBool copy)
-{
- FcChar32 hash = FcStringHash ((const FcChar8 *) object->object);
- FcObjectBucket **p;
- FcObjectBucket *b;
- FcObjectType *o;
-
- if (!FcObjectsInited)
- FcObjectInit ();
- for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- {
- o = FcObjects + b->id - 1;
- if (b->hash == hash && !strcmp (object->object, o->object))
- return FcFalse;
- }
- /*
- * Hook it into the hash chain
- */
- b = malloc (sizeof(FcObjectBucket));
- if (!b)
- return FcFalse;
- if (copy)
- {
- o = FcObjectInsert (object->object, object->type);
- if (!o)
- {
- free (b);
- return FcFalse;
- }
- }
- else
- o = (FcObjectType *) object;
- b->next = NULL;
- b->hash = hash;
- b->id = FcObjectId (o);
- *p = b;
- return FcTrue;
-}
-
-static void
-FcObjectHashRemove (const FcObjectType *object, FcBool cleanobj)
-{
- FcChar32 hash = FcStringHash ((const FcChar8 *) object->object);
- FcObjectBucket **p;
- FcObjectBucket *b;
- FcObjectType *o;
-
- if (!FcObjectsInited)
- FcObjectInit ();
- for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- {
- o = FcObjects + b->id - 1;
- if (b->hash == hash && !strcmp (object->object, o->object))
- {
- *p = b->next;
- free (b);
- if (cleanobj)
- {
- /* Clean up object array */
- o->object = NULL;
- o->type = -1;
- while (FcObjects[FcObjectsNumber-1].object == NULL)
- --FcObjectsNumber;
- }
- break;
- }
- }
-}
-
-FcBool
-FcNameRegisterObjectTypes (const FcObjectType *types, int ntypes)
-{
- int i;
-
- for (i = 0; i < ntypes; i++)
- if (!FcObjectHashInsert (&types[i], FcTrue))
- return FcFalse;
- return FcTrue;
-}
-
-FcBool
-FcNameUnregisterObjectTypes (const FcObjectType *types, int ntypes)
-{
- int i;
-
- for (i = 0; i < ntypes; i++)
- FcObjectHashRemove (&types[i], FcTrue);
- return FcTrue;
-}
-
-const FcObjectType *
-FcNameGetObjectType (const char *object)
-{
- return FcObjectFindByName (object, FcFalse);
-}
-
-FcBool
-FcObjectValidType (FcObject object, FcType type)
-{
- FcObjectType *t = FcObjectFindById (object);
-
- if (t) {
- switch (t->type) {
- case -1:
- return FcTrue;
- case FcTypeDouble:
- case FcTypeInteger:
- if (type == FcTypeDouble || type == FcTypeInteger)
- return FcTrue;
- break;
- case FcTypeLangSet:
- if (type == FcTypeLangSet || type == FcTypeString)
- return FcTrue;
- break;
- default:
- if (type == t->type)
- return FcTrue;
- break;
- }
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcObject
-FcObjectFromName (const char * name)
-{
- FcObjectType *o = FcObjectFindByName (name, FcTrue);
-
- if (o)
- return FcObjectId (o);
- return 0;
-}
-
-FcObjectSet *
-FcObjectGetSet (void)
-{
- int i;
- FcObjectSet *os = NULL;
-
-
- os = FcObjectSetCreate ();
- for (i = 0; i < FcObjectsNumber; i++)
- FcObjectSetAdd (os, FcObjects[i].object);
-
- return os;
-}
-
-FcBool
-FcObjectInit (void)
-{
- int i;
-
- if (FcObjectsInited)
- return FcTrue;
-
- FcObjectsInited = FcTrue;
- for (i = 0; i < NUM_OBJECT_TYPES; i++)
- if (!FcObjectHashInsert (&_FcBaseObjectTypes[i], FcFalse))
- return FcFalse;
- return FcTrue;
-}
-
-void
-FcObjectFini (void)
-{
- int i;
- FcObjectBucket *b, *next;
-
- for (i = 0; i < OBJECT_HASH_SIZE; i++)
- {
- for (b = FcObjectBuckets[i]; b; b = next)
- {
- next = b->next;
- free (b);
- }
- FcObjectBuckets[i] = 0;
- }
- for (i = 0; i < FcObjectsNumber; i++)
- if (FcObjects[i].type == -1)
- free ((void*) FcObjects[i].object);
- if (FcObjects != _FcBaseObjectTypes)
- free (FcObjects);
- FcObjects = (FcObjectType *) _FcBaseObjectTypes;
- FcObjectsNumber = NUM_OBJECT_TYPES;
- FcObjectsSize = 0;
- FcObjectsInited = FcFalse;
-}
-
-const char *
-FcObjectName (FcObject object)
-{
- FcObjectType *o = FcObjectFindById (object);
-
- if (o)
- return o->object;
- return NULL;
-}
-
-static const FcConstant _FcBaseConstants[] = {
- { (FcChar8 *) "thin", "weight", FC_WEIGHT_THIN, },
- { (FcChar8 *) "extralight", "weight", FC_WEIGHT_EXTRALIGHT, },
- { (FcChar8 *) "ultralight", "weight", FC_WEIGHT_EXTRALIGHT, },
- { (FcChar8 *) "light", "weight", FC_WEIGHT_LIGHT, },
- { (FcChar8 *) "book", "weight", FC_WEIGHT_BOOK, },
- { (FcChar8 *) "regular", "weight", FC_WEIGHT_REGULAR, },
- { (FcChar8 *) "medium", "weight", FC_WEIGHT_MEDIUM, },
- { (FcChar8 *) "demibold", "weight", FC_WEIGHT_DEMIBOLD, },
- { (FcChar8 *) "semibold", "weight", FC_WEIGHT_DEMIBOLD, },
- { (FcChar8 *) "bold", "weight", FC_WEIGHT_BOLD, },
- { (FcChar8 *) "extrabold", "weight", FC_WEIGHT_EXTRABOLD, },
- { (FcChar8 *) "ultrabold", "weight", FC_WEIGHT_EXTRABOLD, },
- { (FcChar8 *) "black", "weight", FC_WEIGHT_BLACK, },
- { (FcChar8 *) "heavy", "weight", FC_WEIGHT_HEAVY, },
-
- { (FcChar8 *) "roman", "slant", FC_SLANT_ROMAN, },
- { (FcChar8 *) "italic", "slant", FC_SLANT_ITALIC, },
- { (FcChar8 *) "oblique", "slant", FC_SLANT_OBLIQUE, },
-
- { (FcChar8 *) "ultracondensed", "width", FC_WIDTH_ULTRACONDENSED },
- { (FcChar8 *) "extracondensed", "width", FC_WIDTH_EXTRACONDENSED },
- { (FcChar8 *) "condensed", "width", FC_WIDTH_CONDENSED },
- { (FcChar8 *) "semicondensed", "width", FC_WIDTH_SEMICONDENSED },
- { (FcChar8 *) "normal", "width", FC_WIDTH_NORMAL },
- { (FcChar8 *) "semiexpanded", "width", FC_WIDTH_SEMIEXPANDED },
- { (FcChar8 *) "expanded", "width", FC_WIDTH_EXPANDED },
- { (FcChar8 *) "extraexpanded", "width", FC_WIDTH_EXTRAEXPANDED },
- { (FcChar8 *) "ultraexpanded", "width", FC_WIDTH_ULTRAEXPANDED },
-
- { (FcChar8 *) "proportional", "spacing", FC_PROPORTIONAL, },
- { (FcChar8 *) "dual", "spacing", FC_DUAL, },
- { (FcChar8 *) "mono", "spacing", FC_MONO, },
- { (FcChar8 *) "charcell", "spacing", FC_CHARCELL, },
-
- { (FcChar8 *) "unknown", "rgba", FC_RGBA_UNKNOWN },
- { (FcChar8 *) "rgb", "rgba", FC_RGBA_RGB, },
- { (FcChar8 *) "bgr", "rgba", FC_RGBA_BGR, },
- { (FcChar8 *) "vrgb", "rgba", FC_RGBA_VRGB },
- { (FcChar8 *) "vbgr", "rgba", FC_RGBA_VBGR },
- { (FcChar8 *) "none", "rgba", FC_RGBA_NONE },
-
- { (FcChar8 *) "hintnone", "hintstyle", FC_HINT_NONE },
- { (FcChar8 *) "hintslight", "hintstyle", FC_HINT_SLIGHT },
- { (FcChar8 *) "hintmedium", "hintstyle", FC_HINT_MEDIUM },
- { (FcChar8 *) "hintfull", "hintstyle", FC_HINT_FULL },
-
- { (FcChar8 *) "antialias", "antialias", FcTrue },
- { (FcChar8 *) "hinting", "hinting", FcTrue },
- { (FcChar8 *) "verticallayout", "verticallayout", FcTrue },
- { (FcChar8 *) "autohint", "autohint", FcTrue },
- { (FcChar8 *) "globaladvance", "globaladvance", FcTrue },
- { (FcChar8 *) "outline", "outline", FcTrue },
- { (FcChar8 *) "scalable", "scalable", FcTrue },
- { (FcChar8 *) "minspace", "minspace", FcTrue },
- { (FcChar8 *) "embolden", "embolden", FcTrue },
- { (FcChar8 *) "embeddedbitmap", "embeddedbitmap", FcTrue },
- { (FcChar8 *) "decorative", "decorative", FcTrue },
- { (FcChar8 *) "lcdnone", "lcdfilter", FC_LCD_NONE },
- { (FcChar8 *) "lcddefault", "lcdfilter", FC_LCD_DEFAULT },
- { (FcChar8 *) "lcdlight", "lcdfilter", FC_LCD_LIGHT },
- { (FcChar8 *) "lcdlegacy", "lcdfilter", FC_LCD_LEGACY },
-};
-
-#define NUM_FC_CONSTANTS (sizeof _FcBaseConstants/sizeof _FcBaseConstants[0])
-
-typedef struct _FcConstantList FcConstantList;
-
-struct _FcConstantList {
- const FcConstantList *next;
- const FcConstant *consts;
- int nconsts;
-};
-
-static const FcConstantList _FcBaseConstantList = {
- 0,
- _FcBaseConstants,
- NUM_FC_CONSTANTS
-};
-
-static const FcConstantList *_FcConstants = &_FcBaseConstantList;
-
-FcBool
-FcNameRegisterConstants (const FcConstant *consts, int nconsts)
-{
- FcConstantList *l;
-
- l = (FcConstantList *) malloc (sizeof (FcConstantList));
- if (!l)
- return FcFalse;
- FcMemAlloc (FC_MEM_CONSTANT, sizeof (FcConstantList));
- l->consts = consts;
- l->nconsts = nconsts;
- l->next = _FcConstants;
- _FcConstants = l;
- return FcTrue;
-}
-
-FcBool
-FcNameUnregisterConstants (const FcConstant *consts, int nconsts)
-{
- const FcConstantList *l, **prev;
-
- for (prev = &_FcConstants;
- (l = *prev);
- prev = (const FcConstantList **) &(l->next))
- {
- if (l->consts == consts && l->nconsts == nconsts)
- {
- *prev = l->next;
- FcMemFree (FC_MEM_CONSTANT, sizeof (FcConstantList));
- free ((void *) l);
- return FcTrue;
- }
- }
- return FcFalse;
-}
-
-const FcConstant *
-FcNameGetConstant (FcChar8 *string)
-{
- const FcConstantList *l;
- int i;
-
- for (l = _FcConstants; l; l = l->next)
- {
- for (i = 0; i < l->nconsts; i++)
- if (!FcStrCmpIgnoreCase (string, l->consts[i].name))
- return &l->consts[i];
- }
- return 0;
-}
-
-FcBool
-FcNameConstant (FcChar8 *string, int *result)
-{
- const FcConstant *c;
-
- if ((c = FcNameGetConstant(string)))
- {
- *result = c->value;
- return FcTrue;
- }
- return FcFalse;
-}
-
-FcBool
-FcNameBool (const FcChar8 *v, FcBool *result)
-{
- char c0, c1;
-
- c0 = *v;
- c0 = FcToLower (c0);
- if (c0 == 't' || c0 == 'y' || c0 == '1')
- {
- *result = FcTrue;
- return FcTrue;
- }
- if (c0 == 'f' || c0 == 'n' || c0 == '0')
- {
- *result = FcFalse;
- return FcTrue;
- }
- if (c0 == 'o')
- {
- c1 = v[1];
- c1 = FcToLower (c1);
- if (c1 == 'n')
- {
- *result = FcTrue;
- return FcTrue;
- }
- if (c1 == 'f')
- {
- *result = FcFalse;
- return FcTrue;
- }
- }
- return FcFalse;
-}
-
-static FcValue
-FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m)
-{
- FcValue v;
-
- v.type = type;
- switch (v.type) {
- case FcTypeInteger:
- if (!FcNameConstant (string, &v.u.i))
- v.u.i = atoi ((char *) string);
- break;
- case FcTypeString:
- v.u.s = FcStrStaticName(string);
- if (!v.u.s)
- v.type = FcTypeVoid;
- break;
- case FcTypeBool:
- if (!FcNameBool (string, &v.u.b))
- v.u.b = FcFalse;
- break;
- case FcTypeDouble:
- v.u.d = strtod ((char *) string, 0);
- break;
- case FcTypeMatrix:
- v.u.m = m;
- sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy);
- break;
- case FcTypeCharSet:
- v.u.c = FcNameParseCharSet (string);
- if (!v.u.c)
- v.type = FcTypeVoid;
- break;
- case FcTypeLangSet:
- v.u.l = FcNameParseLangSet (string);
- if (!v.u.l)
- v.type = FcTypeVoid;
- break;
- default:
- break;
- }
- return v;
-}
-
-static const FcChar8 *
-FcNameFindNext (const FcChar8 *cur, const char *delim, FcChar8 *save, FcChar8 *last)
-{
- FcChar8 c;
-
- while ((c = *cur))
- {
- if (c == '\\')
- {
- ++cur;
- if (!(c = *cur))
- break;
- }
- else if (strchr (delim, c))
- break;
- ++cur;
- *save++ = c;
- }
- *save = 0;
- *last = *cur;
- if (*cur)
- cur++;
- return cur;
-}
-
-FcPattern *
-FcNameParse (const FcChar8 *name)
-{
- FcChar8 *save;
- FcPattern *pat;
- double d;
- FcChar8 *e;
- FcChar8 delim;
- FcValue v;
- FcMatrix m;
- const FcObjectType *t;
- const FcConstant *c;
-
- /* freed below */
- save = malloc (strlen ((char *) name) + 1);
- if (!save)
- goto bail0;
- pat = FcPatternCreate ();
- if (!pat)
- goto bail1;
-
- for (;;)
- {
- name = FcNameFindNext (name, "-,:", save, &delim);
- if (save[0])
- {
- if (!FcPatternAddString (pat, FC_FAMILY, save))
- goto bail2;
- }
- if (delim != ',')
- break;
- }
- if (delim == '-')
- {
- for (;;)
- {
- name = FcNameFindNext (name, "-,:", save, &delim);
- d = strtod ((char *) save, (char **) &e);
- if (e != save)
- {
- if (!FcPatternAddDouble (pat, FC_SIZE, d))
- goto bail2;
- }
- if (delim != ',')
- break;
- }
- }
- while (delim == ':')
- {
- name = FcNameFindNext (name, "=_:", save, &delim);
- if (save[0])
- {
- if (delim == '=' || delim == '_')
- {
- t = FcNameGetObjectType ((char *) save);
- for (;;)
- {
- name = FcNameFindNext (name, ":,", save, &delim);
- if (t)
- {
- v = FcNameConvert (t->type, save, &m);
- if (!FcPatternAdd (pat, t->object, v, FcTrue))
- {
- switch (v.type) {
- case FcTypeCharSet:
- FcCharSetDestroy ((FcCharSet *) v.u.c);
- break;
- case FcTypeLangSet:
- FcLangSetDestroy ((FcLangSet *) v.u.l);
- break;
- default:
- break;
- }
- goto bail2;
- }
- switch (v.type) {
- case FcTypeCharSet:
- FcCharSetDestroy ((FcCharSet *) v.u.c);
- break;
- case FcTypeLangSet:
- FcLangSetDestroy ((FcLangSet *) v.u.l);
- break;
- default:
- break;
- }
- }
- if (delim != ',')
- break;
- }
- }
- else
- {
- if ((c = FcNameGetConstant (save)))
- {
- t = FcNameGetObjectType ((char *) c->object);
- switch (t->type) {
- case FcTypeInteger:
- case FcTypeDouble:
- if (!FcPatternAddInteger (pat, c->object, c->value))
- goto bail2;
- break;
- case FcTypeBool:
- if (!FcPatternAddBool (pat, c->object, c->value))
- goto bail2;
- break;
- default:
- break;
- }
- }
- }
- }
- }
-
- free (save);
- return pat;
-
-bail2:
- FcPatternDestroy (pat);
-bail1:
- free (save);
-bail0:
- return 0;
-}
-static FcBool
-FcNameUnparseString (FcStrBuf *buf,
- const FcChar8 *string,
- const FcChar8 *escape)
-{
- FcChar8 c;
- while ((c = *string++))
- {
- if (escape && strchr ((char *) escape, (char) c))
- {
- if (!FcStrBufChar (buf, escape[0]))
- return FcFalse;
- }
- if (!FcStrBufChar (buf, c))
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcBool
-FcNameUnparseValue (FcStrBuf *buf,
- FcValue *v0,
- FcChar8 *escape)
-{
- FcChar8 temp[1024];
- FcValue v = FcValueCanonicalize(v0);
-
- switch (v.type) {
- case FcTypeVoid:
- return FcTrue;
- case FcTypeInteger:
- sprintf ((char *) temp, "%d", v.u.i);
- return FcNameUnparseString (buf, temp, 0);
- case FcTypeDouble:
- sprintf ((char *) temp, "%g", v.u.d);
- return FcNameUnparseString (buf, temp, 0);
- case FcTypeString:
- return FcNameUnparseString (buf, v.u.s, escape);
- case FcTypeBool:
- return FcNameUnparseString (buf, v.u.b ? (FcChar8 *) "True" : (FcChar8 *) "False", 0);
- case FcTypeMatrix:
- sprintf ((char *) temp, "%g %g %g %g",
- v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy);
- return FcNameUnparseString (buf, temp, 0);
- case FcTypeCharSet:
- return FcNameUnparseCharSet (buf, v.u.c);
- case FcTypeLangSet:
- return FcNameUnparseLangSet (buf, v.u.l);
- case FcTypeFTFace:
- return FcTrue;
- }
- return FcFalse;
-}
-
-FcBool
-FcNameUnparseValueList (FcStrBuf *buf,
- FcValueListPtr v,
- FcChar8 *escape)
-{
- while (v)
- {
- if (!FcNameUnparseValue (buf, &v->value, escape))
- return FcFalse;
- if ((v = FcValueListNext(v)) != NULL)
- if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0))
- return FcFalse;
- }
- return FcTrue;
-}
-
-#define FC_ESCAPE_FIXED "\\-:,"
-#define FC_ESCAPE_VARIABLE "\\=_:,"
-
-FcChar8 *
-FcNameUnparse (FcPattern *pat)
-{
- return FcNameUnparseEscaped (pat, FcTrue);
-}
-
-FcChar8 *
-FcNameUnparseEscaped (FcPattern *pat, FcBool escape)
-{
- FcStrBuf buf;
- FcChar8 buf_static[8192];
- int i;
- FcPatternElt *e;
- const FcObjectTypeList *l;
- const FcObjectType *o;
-
- FcStrBufInit (&buf, buf_static, sizeof (buf_static));
- e = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT);
- if (e)
- {
- if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0))
- goto bail0;
- }
- e = FcPatternObjectFindElt (pat, FC_SIZE_OBJECT);
- if (e)
- {
- if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0))
- goto bail0;
- if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0))
- goto bail0;
- }
- for (l = _FcObjectTypes; l; l = l->next)
- {
- for (i = 0; i < l->ntypes; i++)
- {
- o = &l->types[i];
- if (!strcmp (o->object, FC_FAMILY) ||
- !strcmp (o->object, FC_SIZE))
- continue;
-
- e = FcPatternObjectFindElt (pat, FcObjectFromName (o->object));
- if (e)
- {
- if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0))
- goto bail0;
- if (!FcNameUnparseString (&buf, (FcChar8 *) o->object, escape ? (FcChar8 *) FC_ESCAPE_VARIABLE : 0))
- goto bail0;
- if (!FcNameUnparseString (&buf, (FcChar8 *) "=", 0))
- goto bail0;
- if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ?
- (FcChar8 *) FC_ESCAPE_VARIABLE : 0))
- goto bail0;
- }
- }
- }
- return FcStrBufDone (&buf);
-bail0:
- FcStrBufDestroy (&buf);
- return 0;
-}
-#define __fcname__
-#include "fcaliastail.h"
-#undef __fcname__
+/* + * fontconfig/src/fcname.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <ctype.h> +#include <stdlib.h> +#include <string.h> +#include <stdio.h> + +/* + * Please do not change this list, it is used to initialize the object + * list in this order to match the FC_foo_OBJECT constants. Those + * constants are written into cache files. + */ + +static const FcObjectType _FcBaseObjectTypes[] = { + { FC_FAMILY, FcTypeString, }, /* 1 */ + { FC_FAMILYLANG, FcTypeString, }, + { FC_STYLE, FcTypeString, }, + { FC_STYLELANG, FcTypeString, }, + { FC_FULLNAME, FcTypeString, }, + { FC_FULLNAMELANG, FcTypeString, }, + { FC_SLANT, FcTypeInteger, }, + { FC_WEIGHT, FcTypeInteger, }, + { FC_WIDTH, FcTypeInteger, }, + { FC_SIZE, FcTypeDouble, }, + { FC_ASPECT, FcTypeDouble, }, + { FC_PIXEL_SIZE, FcTypeDouble, }, + { FC_SPACING, FcTypeInteger, }, + { FC_FOUNDRY, FcTypeString, }, + { FC_ANTIALIAS, FcTypeBool, }, + { FC_HINT_STYLE, FcTypeInteger, }, + { FC_HINTING, FcTypeBool, }, + { FC_VERTICAL_LAYOUT, FcTypeBool, }, + { FC_AUTOHINT, FcTypeBool, }, + { FC_GLOBAL_ADVANCE, FcTypeBool, }, + { FC_FILE, FcTypeString, }, + { FC_INDEX, FcTypeInteger, }, + { FC_RASTERIZER, FcTypeString, }, + { FC_OUTLINE, FcTypeBool, }, + { FC_SCALABLE, FcTypeBool, }, + { FC_DPI, FcTypeDouble }, + { FC_RGBA, FcTypeInteger, }, + { FC_SCALE, FcTypeDouble, }, + { FC_MINSPACE, FcTypeBool, }, + { FC_CHAR_WIDTH, FcTypeInteger }, + { FC_CHAR_HEIGHT, FcTypeInteger }, + { FC_MATRIX, FcTypeMatrix }, + { FC_CHARSET, FcTypeCharSet }, + { FC_LANG, FcTypeLangSet }, + { FC_FONTVERSION, FcTypeInteger }, + { FC_CAPABILITY, FcTypeString }, + { FC_FONTFORMAT, FcTypeString }, + { FC_EMBOLDEN, FcTypeBool }, + { FC_EMBEDDED_BITMAP, FcTypeBool }, + { FC_DECORATIVE, FcTypeBool }, + { FC_LCD_FILTER, FcTypeInteger }, /* 41 */ +}; + +#define NUM_OBJECT_TYPES (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0]) + +typedef struct _FcObjectTypeList FcObjectTypeList; + +struct _FcObjectTypeList { + const FcObjectTypeList *next; + const FcObjectType *types; + int ntypes; +}; + +static const FcObjectTypeList _FcBaseObjectTypesList = { + 0, + _FcBaseObjectTypes, + NUM_OBJECT_TYPES, +}; + +static const FcObjectTypeList *_FcObjectTypes = &_FcBaseObjectTypesList; + +#define OBJECT_HASH_SIZE 31 + +typedef struct _FcObjectBucket { + struct _FcObjectBucket *next; + FcChar32 hash; + FcObject id; +} FcObjectBucket; + +static FcObjectBucket *FcObjectBuckets[OBJECT_HASH_SIZE]; + +static FcObjectType *FcObjects = (FcObjectType *) _FcBaseObjectTypes; +static int FcObjectsNumber = NUM_OBJECT_TYPES; +static int FcObjectsSize = 0; +static FcBool FcObjectsInited; + +static FcObjectType * +FcObjectInsert (const char *name, FcType type) +{ + FcObjectType *o; + if (FcObjectsNumber >= FcObjectsSize) + { + int newsize = FcObjectsNumber * 2; + FcObjectType *newobjects; + + if (FcObjectsSize) + newobjects = realloc (FcObjects, newsize * sizeof (FcObjectType)); + else + { + newobjects = malloc (newsize * sizeof (FcObjectType)); + if (newobjects) + memcpy (newobjects, FcObjects, + FcObjectsNumber * sizeof (FcObjectType)); + } + if (!newobjects) + return NULL; + FcObjects = newobjects; + FcObjectsSize = newsize; + } + o = &FcObjects[FcObjectsNumber]; + o->object = name; + o->type = type; + ++FcObjectsNumber; + return o; +} + +static FcObject +FcObjectId (FcObjectType *o) +{ + return o - FcObjects + 1; +} + +static FcObjectType * +FcObjectFindByName (const char *object, FcBool insert) +{ + FcChar32 hash = FcStringHash ((const FcChar8 *) object); + FcObjectBucket **p; + FcObjectBucket *b; + FcObjectType *o; + + if (!FcObjectsInited) + FcObjectInit (); + for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + { + o = FcObjects + b->id - 1; + if (b->hash == hash && !strcmp (object, (o->object))) + return o; + } + if (!insert) + return NULL; + /* + * Hook it into the hash chain + */ + b = malloc (sizeof(FcObjectBucket)); + if (!b) + return NULL; + object = (const char *) FcStrCopy ((FcChar8 *) object); + if (!object) { + free (b); + return NULL; + } + o = FcObjectInsert (object, -1); + b->next = NULL; + b->hash = hash; + b->id = FcObjectId (o); + *p = b; + return o; +} + +static FcObjectType * +FcObjectFindById (FcObject object) +{ + if (1 <= object && object <= FcObjectsNumber) + return FcObjects + object - 1; + return NULL; +} + +static FcBool +FcObjectHashInsert (const FcObjectType *object, FcBool copy) +{ + FcChar32 hash = FcStringHash ((const FcChar8 *) object->object); + FcObjectBucket **p; + FcObjectBucket *b; + FcObjectType *o; + + if (!FcObjectsInited) + FcObjectInit (); + for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + { + o = FcObjects + b->id - 1; + if (b->hash == hash && !strcmp (object->object, o->object)) + return FcFalse; + } + /* + * Hook it into the hash chain + */ + b = malloc (sizeof(FcObjectBucket)); + if (!b) + return FcFalse; + if (copy) + { + o = FcObjectInsert (object->object, object->type); + if (!o) + { + free (b); + return FcFalse; + } + } + else + o = (FcObjectType *) object; + b->next = NULL; + b->hash = hash; + b->id = FcObjectId (o); + *p = b; + return FcTrue; +} + +static void +FcObjectHashRemove (const FcObjectType *object, FcBool cleanobj) +{ + FcChar32 hash = FcStringHash ((const FcChar8 *) object->object); + FcObjectBucket **p; + FcObjectBucket *b; + FcObjectType *o; + + if (!FcObjectsInited) + FcObjectInit (); + for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + { + o = FcObjects + b->id - 1; + if (b->hash == hash && !strcmp (object->object, o->object)) + { + *p = b->next; + free (b); + if (cleanobj) + { + /* Clean up object array */ + o->object = NULL; + o->type = -1; + while (FcObjects[FcObjectsNumber-1].object == NULL) + --FcObjectsNumber; + } + break; + } + } +} + +FcBool +FcNameRegisterObjectTypes (const FcObjectType *types, int ntypes) +{ + int i; + + for (i = 0; i < ntypes; i++) + if (!FcObjectHashInsert (&types[i], FcTrue)) + return FcFalse; + return FcTrue; +} + +FcBool +FcNameUnregisterObjectTypes (const FcObjectType *types, int ntypes) +{ + int i; + + for (i = 0; i < ntypes; i++) + FcObjectHashRemove (&types[i], FcTrue); + return FcTrue; +} + +const FcObjectType * +FcNameGetObjectType (const char *object) +{ + return FcObjectFindByName (object, FcFalse); +} + +FcBool +FcObjectValidType (FcObject object, FcType type) +{ + FcObjectType *t = FcObjectFindById (object); + + if (t) { + switch (t->type) { + case -1: + return FcTrue; + case FcTypeDouble: + case FcTypeInteger: + if (type == FcTypeDouble || type == FcTypeInteger) + return FcTrue; + break; + case FcTypeLangSet: + if (type == FcTypeLangSet || type == FcTypeString) + return FcTrue; + break; + default: + if (type == t->type) + return FcTrue; + break; + } + return FcFalse; + } + return FcTrue; +} + +FcObject +FcObjectFromName (const char * name) +{ + FcObjectType *o = FcObjectFindByName (name, FcTrue); + + if (o) + return FcObjectId (o); + return 0; +} + +FcObjectSet * +FcObjectGetSet (void) +{ + int i; + FcObjectSet *os = NULL; + + + os = FcObjectSetCreate (); + for (i = 0; i < FcObjectsNumber; i++) + FcObjectSetAdd (os, FcObjects[i].object); + + return os; +} + +FcBool +FcObjectInit (void) +{ + int i; + + if (FcObjectsInited) + return FcTrue; + + FcObjectsInited = FcTrue; + for (i = 0; i < NUM_OBJECT_TYPES; i++) + if (!FcObjectHashInsert (&_FcBaseObjectTypes[i], FcFalse)) + return FcFalse; + return FcTrue; +} + +void +FcObjectFini (void) +{ + int i; + FcObjectBucket *b, *next; + + for (i = 0; i < OBJECT_HASH_SIZE; i++) + { + for (b = FcObjectBuckets[i]; b; b = next) + { + next = b->next; + free (b); + } + FcObjectBuckets[i] = 0; + } + for (i = 0; i < FcObjectsNumber; i++) + if (FcObjects[i].type == -1) + free ((void*) FcObjects[i].object); + if (FcObjects != _FcBaseObjectTypes) + free (FcObjects); + FcObjects = (FcObjectType *) _FcBaseObjectTypes; + FcObjectsNumber = NUM_OBJECT_TYPES; + FcObjectsSize = 0; + FcObjectsInited = FcFalse; +} + +const char * +FcObjectName (FcObject object) +{ + FcObjectType *o = FcObjectFindById (object); + + if (o) + return o->object; + return NULL; +} + +static const FcConstant _FcBaseConstants[] = { + { (FcChar8 *) "thin", "weight", FC_WEIGHT_THIN, }, + { (FcChar8 *) "extralight", "weight", FC_WEIGHT_EXTRALIGHT, }, + { (FcChar8 *) "ultralight", "weight", FC_WEIGHT_EXTRALIGHT, }, + { (FcChar8 *) "light", "weight", FC_WEIGHT_LIGHT, }, + { (FcChar8 *) "book", "weight", FC_WEIGHT_BOOK, }, + { (FcChar8 *) "regular", "weight", FC_WEIGHT_REGULAR, }, + { (FcChar8 *) "medium", "weight", FC_WEIGHT_MEDIUM, }, + { (FcChar8 *) "demibold", "weight", FC_WEIGHT_DEMIBOLD, }, + { (FcChar8 *) "semibold", "weight", FC_WEIGHT_DEMIBOLD, }, + { (FcChar8 *) "bold", "weight", FC_WEIGHT_BOLD, }, + { (FcChar8 *) "extrabold", "weight", FC_WEIGHT_EXTRABOLD, }, + { (FcChar8 *) "ultrabold", "weight", FC_WEIGHT_EXTRABOLD, }, + { (FcChar8 *) "black", "weight", FC_WEIGHT_BLACK, }, + { (FcChar8 *) "heavy", "weight", FC_WEIGHT_HEAVY, }, + + { (FcChar8 *) "roman", "slant", FC_SLANT_ROMAN, }, + { (FcChar8 *) "italic", "slant", FC_SLANT_ITALIC, }, + { (FcChar8 *) "oblique", "slant", FC_SLANT_OBLIQUE, }, + + { (FcChar8 *) "ultracondensed", "width", FC_WIDTH_ULTRACONDENSED }, + { (FcChar8 *) "extracondensed", "width", FC_WIDTH_EXTRACONDENSED }, + { (FcChar8 *) "condensed", "width", FC_WIDTH_CONDENSED }, + { (FcChar8 *) "semicondensed", "width", FC_WIDTH_SEMICONDENSED }, + { (FcChar8 *) "normal", "width", FC_WIDTH_NORMAL }, + { (FcChar8 *) "semiexpanded", "width", FC_WIDTH_SEMIEXPANDED }, + { (FcChar8 *) "expanded", "width", FC_WIDTH_EXPANDED }, + { (FcChar8 *) "extraexpanded", "width", FC_WIDTH_EXTRAEXPANDED }, + { (FcChar8 *) "ultraexpanded", "width", FC_WIDTH_ULTRAEXPANDED }, + + { (FcChar8 *) "proportional", "spacing", FC_PROPORTIONAL, }, + { (FcChar8 *) "dual", "spacing", FC_DUAL, }, + { (FcChar8 *) "mono", "spacing", FC_MONO, }, + { (FcChar8 *) "charcell", "spacing", FC_CHARCELL, }, + + { (FcChar8 *) "unknown", "rgba", FC_RGBA_UNKNOWN }, + { (FcChar8 *) "rgb", "rgba", FC_RGBA_RGB, }, + { (FcChar8 *) "bgr", "rgba", FC_RGBA_BGR, }, + { (FcChar8 *) "vrgb", "rgba", FC_RGBA_VRGB }, + { (FcChar8 *) "vbgr", "rgba", FC_RGBA_VBGR }, + { (FcChar8 *) "none", "rgba", FC_RGBA_NONE }, + + { (FcChar8 *) "hintnone", "hintstyle", FC_HINT_NONE }, + { (FcChar8 *) "hintslight", "hintstyle", FC_HINT_SLIGHT }, + { (FcChar8 *) "hintmedium", "hintstyle", FC_HINT_MEDIUM }, + { (FcChar8 *) "hintfull", "hintstyle", FC_HINT_FULL }, + + { (FcChar8 *) "antialias", "antialias", FcTrue }, + { (FcChar8 *) "hinting", "hinting", FcTrue }, + { (FcChar8 *) "verticallayout", "verticallayout", FcTrue }, + { (FcChar8 *) "autohint", "autohint", FcTrue }, + { (FcChar8 *) "globaladvance", "globaladvance", FcTrue }, + { (FcChar8 *) "outline", "outline", FcTrue }, + { (FcChar8 *) "scalable", "scalable", FcTrue }, + { (FcChar8 *) "minspace", "minspace", FcTrue }, + { (FcChar8 *) "embolden", "embolden", FcTrue }, + { (FcChar8 *) "embeddedbitmap", "embeddedbitmap", FcTrue }, + { (FcChar8 *) "decorative", "decorative", FcTrue }, + { (FcChar8 *) "lcdnone", "lcdfilter", FC_LCD_NONE }, + { (FcChar8 *) "lcddefault", "lcdfilter", FC_LCD_DEFAULT }, + { (FcChar8 *) "lcdlight", "lcdfilter", FC_LCD_LIGHT }, + { (FcChar8 *) "lcdlegacy", "lcdfilter", FC_LCD_LEGACY }, +}; + +#define NUM_FC_CONSTANTS (sizeof _FcBaseConstants/sizeof _FcBaseConstants[0]) + +typedef struct _FcConstantList FcConstantList; + +struct _FcConstantList { + const FcConstantList *next; + const FcConstant *consts; + int nconsts; +}; + +static const FcConstantList _FcBaseConstantList = { + 0, + _FcBaseConstants, + NUM_FC_CONSTANTS +}; + +static const FcConstantList *_FcConstants = &_FcBaseConstantList; + +FcBool +FcNameRegisterConstants (const FcConstant *consts, int nconsts) +{ + FcConstantList *l; + + l = (FcConstantList *) malloc (sizeof (FcConstantList)); + if (!l) + return FcFalse; + FcMemAlloc (FC_MEM_CONSTANT, sizeof (FcConstantList)); + l->consts = consts; + l->nconsts = nconsts; + l->next = _FcConstants; + _FcConstants = l; + return FcTrue; +} + +FcBool +FcNameUnregisterConstants (const FcConstant *consts, int nconsts) +{ + const FcConstantList *l, **prev; + + for (prev = &_FcConstants; + (l = *prev); + prev = (const FcConstantList **) &(l->next)) + { + if (l->consts == consts && l->nconsts == nconsts) + { + *prev = l->next; + FcMemFree (FC_MEM_CONSTANT, sizeof (FcConstantList)); + free ((void *) l); + return FcTrue; + } + } + return FcFalse; +} + +const FcConstant * +FcNameGetConstant (FcChar8 *string) +{ + const FcConstantList *l; + int i; + + for (l = _FcConstants; l; l = l->next) + { + for (i = 0; i < l->nconsts; i++) + if (!FcStrCmpIgnoreCase (string, l->consts[i].name)) + return &l->consts[i]; + } + return 0; +} + +FcBool +FcNameConstant (FcChar8 *string, int *result) +{ + const FcConstant *c; + + if ((c = FcNameGetConstant(string))) + { + *result = c->value; + return FcTrue; + } + return FcFalse; +} + +FcBool +FcNameBool (const FcChar8 *v, FcBool *result) +{ + char c0, c1; + + c0 = *v; + c0 = FcToLower (c0); + if (c0 == 't' || c0 == 'y' || c0 == '1') + { + *result = FcTrue; + return FcTrue; + } + if (c0 == 'f' || c0 == 'n' || c0 == '0') + { + *result = FcFalse; + return FcTrue; + } + if (c0 == 'o') + { + c1 = v[1]; + c1 = FcToLower (c1); + if (c1 == 'n') + { + *result = FcTrue; + return FcTrue; + } + if (c1 == 'f') + { + *result = FcFalse; + return FcTrue; + } + } + return FcFalse; +} + +static FcValue +FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m) +{ + FcValue v; + + v.type = type; + switch (v.type) { + case FcTypeInteger: + if (!FcNameConstant (string, &v.u.i)) + v.u.i = atoi ((char *) string); + break; + case FcTypeString: + v.u.s = FcStrStaticName(string); + if (!v.u.s) + v.type = FcTypeVoid; + break; + case FcTypeBool: + if (!FcNameBool (string, &v.u.b)) + v.u.b = FcFalse; + break; + case FcTypeDouble: + v.u.d = strtod ((char *) string, 0); + break; + case FcTypeMatrix: + v.u.m = m; + sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy); + break; + case FcTypeCharSet: + v.u.c = FcNameParseCharSet (string); + if (!v.u.c) + v.type = FcTypeVoid; + break; + case FcTypeLangSet: + v.u.l = FcNameParseLangSet (string); + if (!v.u.l) + v.type = FcTypeVoid; + break; + default: + break; + } + return v; +} + +static const FcChar8 * +FcNameFindNext (const FcChar8 *cur, const char *delim, FcChar8 *save, FcChar8 *last) +{ + FcChar8 c; + + while ((c = *cur)) + { + if (c == '\\') + { + ++cur; + if (!(c = *cur)) + break; + } + else if (strchr (delim, c)) + break; + ++cur; + *save++ = c; + } + *save = 0; + *last = *cur; + if (*cur) + cur++; + return cur; +} + +FcPattern * +FcNameParse (const FcChar8 *name) +{ + FcChar8 *save; + FcPattern *pat; + double d; + FcChar8 *e; + FcChar8 delim; + FcValue v; + FcMatrix m; + const FcObjectType *t; + const FcConstant *c; + + /* freed below */ + save = malloc (strlen ((char *) name) + 1); + if (!save) + goto bail0; + pat = FcPatternCreate (); + if (!pat) + goto bail1; + + for (;;) + { + name = FcNameFindNext (name, "-,:", save, &delim); + if (save[0]) + { + if (!FcPatternAddString (pat, FC_FAMILY, save)) + goto bail2; + } + if (delim != ',') + break; + } + if (delim == '-') + { + for (;;) + { + name = FcNameFindNext (name, "-,:", save, &delim); + d = strtod ((char *) save, (char **) &e); + if (e != save) + { + if (!FcPatternAddDouble (pat, FC_SIZE, d)) + goto bail2; + } + if (delim != ',') + break; + } + } + while (delim == ':') + { + name = FcNameFindNext (name, "=_:", save, &delim); + if (save[0]) + { + if (delim == '=' || delim == '_') + { + t = FcNameGetObjectType ((char *) save); + for (;;) + { + name = FcNameFindNext (name, ":,", save, &delim); + if (t) + { + v = FcNameConvert (t->type, save, &m); + if (!FcPatternAdd (pat, t->object, v, FcTrue)) + { + switch (v.type) { + case FcTypeCharSet: + FcCharSetDestroy ((FcCharSet *) v.u.c); + break; + case FcTypeLangSet: + FcLangSetDestroy ((FcLangSet *) v.u.l); + break; + default: + break; + } + goto bail2; + } + switch (v.type) { + case FcTypeCharSet: + FcCharSetDestroy ((FcCharSet *) v.u.c); + break; + case FcTypeLangSet: + FcLangSetDestroy ((FcLangSet *) v.u.l); + break; + default: + break; + } + } + if (delim != ',') + break; + } + } + else + { + if ((c = FcNameGetConstant (save))) + { + t = FcNameGetObjectType ((char *) c->object); + switch (t->type) { + case FcTypeInteger: + case FcTypeDouble: + if (!FcPatternAddInteger (pat, c->object, c->value)) + goto bail2; + break; + case FcTypeBool: + if (!FcPatternAddBool (pat, c->object, c->value)) + goto bail2; + break; + default: + break; + } + } + } + } + } + + free (save); + return pat; + +bail2: + FcPatternDestroy (pat); +bail1: + free (save); +bail0: + return 0; +} +static FcBool +FcNameUnparseString (FcStrBuf *buf, + const FcChar8 *string, + const FcChar8 *escape) +{ + FcChar8 c; + while ((c = *string++)) + { + if (escape && strchr ((char *) escape, (char) c)) + { + if (!FcStrBufChar (buf, escape[0])) + return FcFalse; + } + if (!FcStrBufChar (buf, c)) + return FcFalse; + } + return FcTrue; +} + +FcBool +FcNameUnparseValue (FcStrBuf *buf, + FcValue *v0, + FcChar8 *escape) +{ + FcChar8 temp[1024]; + FcValue v = FcValueCanonicalize(v0); + + switch (v.type) { + case FcTypeVoid: + return FcTrue; + case FcTypeInteger: + sprintf ((char *) temp, "%d", v.u.i); + return FcNameUnparseString (buf, temp, 0); + case FcTypeDouble: + sprintf ((char *) temp, "%g", v.u.d); + return FcNameUnparseString (buf, temp, 0); + case FcTypeString: + return FcNameUnparseString (buf, v.u.s, escape); + case FcTypeBool: + return FcNameUnparseString (buf, v.u.b ? (FcChar8 *) "True" : (FcChar8 *) "False", 0); + case FcTypeMatrix: + sprintf ((char *) temp, "%g %g %g %g", + v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); + return FcNameUnparseString (buf, temp, 0); + case FcTypeCharSet: + return FcNameUnparseCharSet (buf, v.u.c); + case FcTypeLangSet: + return FcNameUnparseLangSet (buf, v.u.l); + case FcTypeFTFace: + return FcTrue; + } + return FcFalse; +} + +FcBool +FcNameUnparseValueList (FcStrBuf *buf, + FcValueListPtr v, + FcChar8 *escape) +{ + while (v) + { + if (!FcNameUnparseValue (buf, &v->value, escape)) + return FcFalse; + if ((v = FcValueListNext(v)) != NULL) + if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0)) + return FcFalse; + } + return FcTrue; +} + +#define FC_ESCAPE_FIXED "\\-:," +#define FC_ESCAPE_VARIABLE "\\=_:," + +FcChar8 * +FcNameUnparse (FcPattern *pat) +{ + return FcNameUnparseEscaped (pat, FcTrue); +} + +FcChar8 * +FcNameUnparseEscaped (FcPattern *pat, FcBool escape) +{ + FcStrBuf buf; + FcChar8 buf_static[8192]; + int i; + FcPatternElt *e; + const FcObjectTypeList *l; + const FcObjectType *o; + + FcStrBufInit (&buf, buf_static, sizeof (buf_static)); + e = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT); + if (e) + { + if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0)) + goto bail0; + } + e = FcPatternObjectFindElt (pat, FC_SIZE_OBJECT); + if (e) + { + if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0)) + goto bail0; + if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0)) + goto bail0; + } + for (l = _FcObjectTypes; l; l = l->next) + { + for (i = 0; i < l->ntypes; i++) + { + o = &l->types[i]; + if (!strcmp (o->object, FC_FAMILY) || + !strcmp (o->object, FC_SIZE)) + continue; + + e = FcPatternObjectFindElt (pat, FcObjectFromName (o->object)); + if (e) + { + if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0)) + goto bail0; + if (!FcNameUnparseString (&buf, (FcChar8 *) o->object, escape ? (FcChar8 *) FC_ESCAPE_VARIABLE : 0)) + goto bail0; + if (!FcNameUnparseString (&buf, (FcChar8 *) "=", 0)) + goto bail0; + if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? + (FcChar8 *) FC_ESCAPE_VARIABLE : 0)) + goto bail0; + } + } + } + return FcStrBufDone (&buf); +bail0: + FcStrBufDestroy (&buf); + return 0; +} +#define __fcname__ +#include "fcaliastail.h" +#undef __fcname__ diff --git a/fontconfig/src/fcpat.c b/fontconfig/src/fcpat.c index 0d2402043..8f63659df 100644 --- a/fontconfig/src/fcpat.c +++ b/fontconfig/src/fcpat.c @@ -1,1267 +1,1267 @@ -/*
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include "fcftint.h"
-#include <stdlib.h>
-#include <string.h>
-#include <assert.h>
-
-static FcBool
-FcHashOwnsName(const FcChar8 *name);
-
-FcPattern *
-FcPatternCreate (void)
-{
- FcPattern *p;
-
- p = (FcPattern *) malloc (sizeof (FcPattern));
- if (!p)
- return 0;
- FcMemAlloc (FC_MEM_PATTERN, sizeof (FcPattern));
- p->num = 0;
- p->size = 0;
- p->elts_offset = FcPtrToOffset (p, NULL);
- p->ref = 1;
- return p;
-}
-
-void
-FcValueDestroy (FcValue v)
-{
- switch (v.type) {
- case FcTypeString:
- if (!FcHashOwnsName(v.u.s))
- FcStrFree ((FcChar8 *) v.u.s);
- break;
- case FcTypeMatrix:
- FcMatrixFree ((FcMatrix *) v.u.m);
- break;
- case FcTypeCharSet:
- FcCharSetDestroy ((FcCharSet *) v.u.c);
- break;
- case FcTypeLangSet:
- FcLangSetDestroy ((FcLangSet *) v.u.l);
- break;
- default:
- break;
- }
-}
-
-FcValue
-FcValueCanonicalize (const FcValue *v)
-{
- FcValue new;
-
- switch (v->type)
- {
- case FcTypeString:
- new.u.s = FcValueString(v);
- new.type = FcTypeString;
- break;
- case FcTypeCharSet:
- new.u.c = FcValueCharSet(v);
- new.type = FcTypeCharSet;
- break;
- case FcTypeLangSet:
- new.u.l = FcValueLangSet(v);
- new.type = FcTypeLangSet;
- break;
- default:
- new = *v;
- break;
- }
- return new;
-}
-
-FcValue
-FcValueSave (FcValue v)
-{
- switch (v.type) {
- case FcTypeString:
- v.u.s = FcStrStaticName (v.u.s);
- if (!v.u.s)
- v.type = FcTypeVoid;
- break;
- case FcTypeMatrix:
- v.u.m = FcMatrixCopy (v.u.m);
- if (!v.u.m)
- v.type = FcTypeVoid;
- break;
- case FcTypeCharSet:
- v.u.c = FcCharSetCopy ((FcCharSet *) v.u.c);
- if (!v.u.c)
- v.type = FcTypeVoid;
- break;
- case FcTypeLangSet:
- v.u.l = FcLangSetCopy (v.u.l);
- if (!v.u.l)
- v.type = FcTypeVoid;
- break;
- default:
- break;
- }
- return v;
-}
-
-void
-FcValueListDestroy (FcValueListPtr l)
-{
- FcValueListPtr next;
- for (; l; l = next)
- {
- switch (l->value.type) {
- case FcTypeString:
- if (!FcHashOwnsName((FcChar8 *)l->value.u.s))
- FcStrFree ((FcChar8 *)l->value.u.s);
- break;
- case FcTypeMatrix:
- FcMatrixFree ((FcMatrix *)l->value.u.m);
- break;
- case FcTypeCharSet:
- FcCharSetDestroy
- ((FcCharSet *) (l->value.u.c));
- break;
- case FcTypeLangSet:
- FcLangSetDestroy
- ((FcLangSet *) (l->value.u.l));
- break;
- default:
- break;
- }
- next = FcValueListNext(l);
- FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
- free(l);
- }
-}
-
-FcBool
-FcValueEqual (FcValue va, FcValue vb)
-{
- if (va.type != vb.type)
- {
- if (va.type == FcTypeInteger)
- {
- va.type = FcTypeDouble;
- va.u.d = va.u.i;
- }
- if (vb.type == FcTypeInteger)
- {
- vb.type = FcTypeDouble;
- vb.u.d = vb.u.i;
- }
- if (va.type != vb.type)
- return FcFalse;
- }
- switch (va.type) {
- case FcTypeVoid:
- return FcTrue;
- case FcTypeInteger:
- return va.u.i == vb.u.i;
- case FcTypeDouble:
- return va.u.d == vb.u.d;
- case FcTypeString:
- return FcStrCmpIgnoreCase (va.u.s, vb.u.s) == 0;
- case FcTypeBool:
- return va.u.b == vb.u.b;
- case FcTypeMatrix:
- return FcMatrixEqual (va.u.m, vb.u.m);
- case FcTypeCharSet:
- return FcCharSetEqual (va.u.c, vb.u.c);
- case FcTypeFTFace:
- return va.u.f == vb.u.f;
- case FcTypeLangSet:
- return FcLangSetEqual (va.u.l, vb.u.l);
- }
- return FcFalse;
-}
-
-static FcChar32
-FcDoubleHash (double d)
-{
- if (d < 0)
- d = -d;
- if (d > 0xffffffff)
- d = 0xffffffff;
- return (FcChar32) d;
-}
-
-FcChar32
-FcStringHash (const FcChar8 *s)
-{
- FcChar8 c;
- FcChar32 h = 0;
-
- if (s)
- while ((c = *s++))
- h = ((h << 1) | (h >> 31)) ^ c;
- return h;
-}
-
-static FcChar32
-FcValueHash (const FcValue *v)
-{
- switch (v->type) {
- case FcTypeVoid:
- return 0;
- case FcTypeInteger:
- return (FcChar32) v->u.i;
- case FcTypeDouble:
- return FcDoubleHash (v->u.d);
- case FcTypeString:
- return FcStringHash (FcValueString(v));
- case FcTypeBool:
- return (FcChar32) v->u.b;
- case FcTypeMatrix:
- return (FcDoubleHash (v->u.m->xx) ^
- FcDoubleHash (v->u.m->xy) ^
- FcDoubleHash (v->u.m->yx) ^
- FcDoubleHash (v->u.m->yy));
- case FcTypeCharSet:
- return (FcChar32) FcValueCharSet(v)->num;
- case FcTypeFTFace:
- return FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->family_name) ^
- FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->style_name);
- case FcTypeLangSet:
- return FcLangSetHash (FcValueLangSet(v));
- }
- return FcFalse;
-}
-
-static FcBool
-FcValueListEqual (FcValueListPtr la, FcValueListPtr lb)
-{
- if (la == lb)
- return FcTrue;
-
- while (la && lb)
- {
- if (!FcValueEqual (la->value, lb->value))
- return FcFalse;
- la = FcValueListNext(la);
- lb = FcValueListNext(lb);
- }
- if (la || lb)
- return FcFalse;
- return FcTrue;
-}
-
-static FcChar32
-FcValueListHash (FcValueListPtr l)
-{
- FcChar32 hash = 0;
-
- for (; l; l = FcValueListNext(l))
- {
- hash = ((hash << 1) | (hash >> 31)) ^ FcValueHash (&l->value);
- }
- return hash;
-}
-
-void
-FcPatternDestroy (FcPattern *p)
-{
- int i;
- FcPatternElt *elts;
-
- if (p->ref == FC_REF_CONSTANT)
- {
- FcCacheObjectDereference (p);
- return;
- }
-
- if (--p->ref > 0)
- return;
-
- elts = FcPatternElts (p);
- for (i = 0; i < p->num; i++)
- FcValueListDestroy (FcPatternEltValues(&elts[i]));
-
- FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt));
- free (elts);
- FcMemFree (FC_MEM_PATTERN, sizeof (FcPattern));
- free (p);
-}
-
-static int
-FcPatternObjectPosition (const FcPattern *p, FcObject object)
-{
- int low, high, mid, c;
- FcPatternElt *elts = FcPatternElts(p);
-
- low = 0;
- high = p->num - 1;
- c = 1;
- mid = 0;
- while (low <= high)
- {
- mid = (low + high) >> 1;
- c = elts[mid].object - object;
- if (c == 0)
- return mid;
- if (c < 0)
- low = mid + 1;
- else
- high = mid - 1;
- }
- if (c < 0)
- mid++;
- return -(mid + 1);
-}
-
-FcPatternElt *
-FcPatternObjectFindElt (const FcPattern *p, FcObject object)
-{
- int i = FcPatternObjectPosition (p, object);
- if (i < 0)
- return 0;
- return &FcPatternElts(p)[i];
-}
-
-FcPatternElt *
-FcPatternObjectInsertElt (FcPattern *p, FcObject object)
-{
- int i;
- FcPatternElt *e;
-
- i = FcPatternObjectPosition (p, object);
- if (i < 0)
- {
- i = -i - 1;
-
- /* reallocate array */
- if (p->num + 1 >= p->size)
- {
- int s = p->size + 16;
- if (p->size)
- {
- FcPatternElt *e0 = FcPatternElts(p);
- e = (FcPatternElt *) realloc (e0, s * sizeof (FcPatternElt));
- if (!e) /* maybe it was mmapped */
- {
- e = malloc(s * sizeof (FcPatternElt));
- if (e)
- memcpy(e, e0, p->num * sizeof (FcPatternElt));
- }
- }
- else
- e = (FcPatternElt *) malloc (s * sizeof (FcPatternElt));
- if (!e)
- return FcFalse;
- p->elts_offset = FcPtrToOffset (p, e);
- if (p->size)
- FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt));
- FcMemAlloc (FC_MEM_PATELT, s * sizeof (FcPatternElt));
- while (p->size < s)
- {
- e[p->size].object = 0;
- e[p->size].values = NULL;
- p->size++;
- }
- }
-
- e = FcPatternElts(p);
- /* move elts up */
- memmove (e + i + 1,
- e + i,
- sizeof (FcPatternElt) *
- (p->num - i));
-
- /* bump count */
- p->num++;
-
- e[i].object = object;
- e[i].values = NULL;
- }
-
- return FcPatternElts(p) + i;
-}
-
-FcBool
-FcPatternEqual (const FcPattern *pa, const FcPattern *pb)
-{
- int i;
- FcPatternElt *pae, *pbe;
-
- if (pa == pb)
- return FcTrue;
-
- if (pa->num != pb->num)
- return FcFalse;
- pae = FcPatternElts(pa);
- pbe = FcPatternElts(pb);
- for (i = 0; i < pa->num; i++)
- {
- if (pae[i].object != pbe[i].object)
- return FcFalse;
- if (!FcValueListEqual (FcPatternEltValues(&pae[i]),
- FcPatternEltValues(&pbe[i])))
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcChar32
-FcPatternHash (const FcPattern *p)
-{
- int i;
- FcChar32 h = 0;
- FcPatternElt *pe = FcPatternElts(p);
-
- for (i = 0; i < p->num; i++)
- {
- h = (((h << 1) | (h >> 31)) ^
- pe[i].object ^
- FcValueListHash (FcPatternEltValues(&pe[i])));
- }
- return h;
-}
-
-FcBool
-FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObjectSet *os)
-{
- FcPatternElt *ea, *eb;
- int i;
-
- for (i = 0; i < os->nobject; i++)
- {
- FcObject object = FcObjectFromName (os->objects[i]);
- ea = FcPatternObjectFindElt (pai, object);
- eb = FcPatternObjectFindElt (pbi, object);
- if (ea)
- {
- if (!eb)
- return FcFalse;
- if (!FcValueListEqual (FcPatternEltValues(ea), FcPatternEltValues(eb)))
- return FcFalse;
- }
- else
- {
- if (eb)
- return FcFalse;
- }
- }
- return FcTrue;
-}
-
-FcBool
-FcPatternObjectAddWithBinding (FcPattern *p,
- FcObject object,
- FcValue value,
- FcValueBinding binding,
- FcBool append)
-{
- FcPatternElt *e;
- FcValueListPtr new, *prev;
-
- if (p->ref == FC_REF_CONSTANT)
- goto bail0;
-
- new = malloc (sizeof (FcValueList));
- if (!new)
- goto bail0;
-
- memset(new, 0, sizeof (FcValueList));
- FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList));
- value = FcValueSave (value);
- if (value.type == FcTypeVoid)
- goto bail1;
-
- /*
- * Make sure the stored type is valid for built-in objects
- */
- if (!FcObjectValidType (object, value.type))
- {
- if (FcDebug() & FC_DBG_OBJTYPES)
- {
- printf ("FcPattern object %s does not accept value ",
- FcObjectName (object));
- FcValuePrint (value);
- }
- goto bail1;
- }
-
- new->value = value;
- new->binding = binding;
- new->next = NULL;
-
- e = FcPatternObjectInsertElt (p, object);
- if (!e)
- goto bail2;
-
- if (append)
- {
- for (prev = &e->values; *prev; prev = &(*prev)->next)
- ;
- *prev = new;
- }
- else
- {
- new->next = e->values;
- e->values = new;
- }
-
- return FcTrue;
-
-bail2:
- FcValueDestroy (value);
-bail1:
- FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList));
- free (new);
-bail0:
- return FcFalse;
-}
-
-FcBool
-FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append)
-{
- return FcPatternObjectAddWithBinding (p, object,
- value, FcValueBindingStrong, append);
-}
-
-FcBool
-FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append)
-{
- return FcPatternObjectAddWithBinding (p, FcObjectFromName (object),
- value, FcValueBindingStrong, append);
-}
-
-FcBool
-FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append)
-{
- return FcPatternObjectAddWithBinding (p, FcObjectFromName (object),
- value, FcValueBindingWeak, append);
-}
-
-FcBool
-FcPatternObjectDel (FcPattern *p, FcObject object)
-{
- FcPatternElt *e;
-
- e = FcPatternObjectFindElt (p, object);
- if (!e)
- return FcFalse;
-
- /* destroy value */
- FcValueListDestroy (e->values);
-
- /* shuffle existing ones down */
- memmove (e, e+1,
- (FcPatternElts(p) + p->num - (e + 1)) *
- sizeof (FcPatternElt));
- p->num--;
- e = FcPatternElts(p) + p->num;
- e->object = 0;
- e->values = NULL;
- return FcTrue;
-}
-
-FcBool
-FcPatternDel (FcPattern *p, const char *object)
-{
- return FcPatternObjectDel (p, FcObjectFromName (object));
-}
-
-FcBool
-FcPatternRemove (FcPattern *p, const char *object, int id)
-{
- FcPatternElt *e;
- FcValueListPtr *prev, l;
-
- e = FcPatternObjectFindElt (p, FcObjectFromName (object));
- if (!e)
- return FcFalse;
- for (prev = &e->values; (l = *prev); prev = &l->next)
- {
- if (!id)
- {
- *prev = l->next;
- l->next = NULL;
- FcValueListDestroy (l);
- if (!e->values)
- FcPatternDel (p, object);
- return FcTrue;
- }
- id--;
- }
- return FcFalse;
-}
-
-FcBool
-FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i)
-{
- FcValue v;
-
- v.type = FcTypeInteger;
- v.u.i = i;
- return FcPatternObjectAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddInteger (FcPattern *p, const char *object, int i)
-{
- return FcPatternObjectAddInteger (p, FcObjectFromName (object), i);
-}
-
-FcBool
-FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d)
-{
- FcValue v;
-
- v.type = FcTypeDouble;
- v.u.d = d;
- return FcPatternObjectAdd (p, object, v, FcTrue);
-}
-
-
-FcBool
-FcPatternAddDouble (FcPattern *p, const char *object, double d)
-{
- return FcPatternObjectAddDouble (p, FcObjectFromName (object), d);
-}
-
-FcBool
-FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s)
-{
- FcValue v;
-
- if (!s)
- {
- v.type = FcTypeVoid;
- v.u.s = 0;
- return FcPatternObjectAdd (p, object, v, FcTrue);
- }
-
- v.type = FcTypeString;
- v.u.s = FcStrStaticName(s);
- return FcPatternObjectAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s)
-{
- return FcPatternObjectAddString (p, FcObjectFromName (object), s);
-}
-
-FcBool
-FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s)
-{
- FcValue v;
-
- v.type = FcTypeMatrix;
- v.u.m = s;
- return FcPatternAdd (p, object, v, FcTrue);
-}
-
-
-FcBool
-FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b)
-{
- FcValue v;
-
- v.type = FcTypeBool;
- v.u.b = b;
- return FcPatternObjectAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddBool (FcPattern *p, const char *object, FcBool b)
-{
- return FcPatternObjectAddBool (p, FcObjectFromName (object), b);
-}
-
-FcBool
-FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c)
-{
- FcValue v;
-
- v.type = FcTypeCharSet;
- v.u.c = (FcCharSet *)c;
- return FcPatternAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f)
-{
- FcValue v;
-
- v.type = FcTypeFTFace;
- v.u.f = (void *) f;
- return FcPatternAdd (p, object, v, FcTrue);
-}
-
-FcBool
-FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls)
-{
- FcValue v;
-
- v.type = FcTypeLangSet;
- v.u.l = (FcLangSet *)ls;
- return FcPatternAdd (p, object, v, FcTrue);
-}
-
-FcResult
-FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v)
-{
- FcPatternElt *e;
- FcValueListPtr l;
-
- e = FcPatternObjectFindElt (p, object);
- if (!e)
- return FcResultNoMatch;
- for (l = FcPatternEltValues(e); l; l = FcValueListNext(l))
- {
- if (!id)
- {
- *v = FcValueCanonicalize(&l->value);
- return FcResultMatch;
- }
- id--;
- }
- return FcResultNoId;
-}
-
-FcResult
-FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v)
-{
- return FcPatternObjectGet (p, FcObjectFromName (object), id, v);
-}
-
-FcResult
-FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int id, int *i)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternObjectGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- switch (v.type) {
- case FcTypeDouble:
- *i = (int) v.u.d;
- break;
- case FcTypeInteger:
- *i = v.u.i;
- break;
- default:
- return FcResultTypeMismatch;
- }
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetInteger (const FcPattern *p, const char *object, int id, int *i)
-{
- return FcPatternObjectGetInteger (p, FcObjectFromName (object), id, i);
-}
-
-
-FcResult
-FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int id, double *d)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternObjectGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- switch (v.type) {
- case FcTypeDouble:
- *d = v.u.d;
- break;
- case FcTypeInteger:
- *d = (double) v.u.i;
- break;
- default:
- return FcResultTypeMismatch;
- }
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetDouble (const FcPattern *p, const char *object, int id, double *d)
-{
- return FcPatternObjectGetDouble (p, FcObjectFromName (object), id, d);
-}
-
-FcResult
-FcPatternObjectGetString (const FcPattern *p, FcObject object, int id, FcChar8 ** s)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternObjectGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeString)
- return FcResultTypeMismatch;
-
- *s = (FcChar8 *) v.u.s;
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetString (const FcPattern *p, const char *object, int id, FcChar8 ** s)
-{
- return FcPatternObjectGetString (p, FcObjectFromName (object), id, s);
-}
-
-FcResult
-FcPatternGetMatrix(const FcPattern *p, const char *object, int id, FcMatrix **m)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeMatrix)
- return FcResultTypeMismatch;
- *m = (FcMatrix *)v.u.m;
- return FcResultMatch;
-}
-
-
-FcResult
-FcPatternGetBool(const FcPattern *p, const char *object, int id, FcBool *b)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeBool)
- return FcResultTypeMismatch;
- *b = v.u.b;
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetCharSet(const FcPattern *p, const char *object, int id, FcCharSet **c)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeCharSet)
- return FcResultTypeMismatch;
- *c = (FcCharSet *)v.u.c;
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetFTFace(const FcPattern *p, const char *object, int id, FT_Face *f)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeFTFace)
- return FcResultTypeMismatch;
- *f = (FT_Face) v.u.f;
- return FcResultMatch;
-}
-
-FcResult
-FcPatternGetLangSet(const FcPattern *p, const char *object, int id, FcLangSet **ls)
-{
- FcValue v;
- FcResult r;
-
- r = FcPatternGet (p, object, id, &v);
- if (r != FcResultMatch)
- return r;
- if (v.type != FcTypeLangSet)
- return FcResultTypeMismatch;
- *ls = (FcLangSet *)v.u.l;
- return FcResultMatch;
-}
-
-FcPattern *
-FcPatternDuplicate (const FcPattern *orig)
-{
- FcPattern *new;
- FcPatternElt *e;
- int i;
- FcValueListPtr l;
-
- new = FcPatternCreate ();
- if (!new)
- goto bail0;
-
- e = FcPatternElts(orig);
-
- for (i = 0; i < orig->num; i++)
- {
- for (l = FcPatternEltValues(e + i); l; l = FcValueListNext(l))
- {
- if (!FcPatternObjectAddWithBinding (new, e[i].object,
- FcValueCanonicalize(&l->value),
- l->binding,
- FcTrue))
- goto bail1;
-
- }
- }
-
- return new;
-
-bail1:
- FcPatternDestroy (new);
-bail0:
- return 0;
-}
-
-void
-FcPatternReference (FcPattern *p)
-{
- if (p->ref != FC_REF_CONSTANT)
- p->ref++;
- else
- FcCacheObjectReference (p);
-}
-
-FcPattern *
-FcPatternVaBuild (FcPattern *p, va_list va)
-{
- FcPattern *ret;
-
- FcPatternVapBuild (ret, p, va);
- return ret;
-}
-
-FcPattern *
-FcPatternBuild (FcPattern *p, ...)
-{
- va_list va;
-
- va_start (va, p);
- FcPatternVapBuild (p, p, va);
- va_end (va);
- return p;
-}
-
-/*
- * Add all of the elements in 's' to 'p'
- */
-FcBool
-FcPatternAppend (FcPattern *p, FcPattern *s)
-{
- int i;
- FcPatternElt *e;
- FcValueListPtr v;
-
- for (i = 0; i < s->num; i++)
- {
- e = FcPatternElts(s)+i;
- for (v = FcPatternEltValues(e); v; v = FcValueListNext(v))
- {
- if (!FcPatternObjectAddWithBinding (p, e->object,
- FcValueCanonicalize(&v->value),
- v->binding, FcTrue))
- return FcFalse;
- }
- }
- return FcTrue;
-}
-
-FcPattern *
-FcPatternFilter (FcPattern *p, const FcObjectSet *os)
-{
- int i;
- FcPattern *ret;
- FcPatternElt *e;
- FcValueListPtr v;
-
- if (!os)
- return FcPatternDuplicate (p);
-
- ret = FcPatternCreate ();
- if (!ret)
- return NULL;
-
- for (i = 0; i < os->nobject; i++)
- {
- FcObject object = FcObjectFromName (os->objects[i]);
- e = FcPatternObjectFindElt (p, object);
- if (e)
- {
- for (v = FcPatternEltValues(e); v; v = FcValueListNext(v))
- {
- if (!FcPatternObjectAddWithBinding (ret, e->object,
- FcValueCanonicalize(&v->value),
- v->binding, FcTrue))
- goto bail0;
- }
- }
- }
- return ret;
-
-bail0:
- FcPatternDestroy (ret);
- return NULL;
-}
-
-#define OBJECT_HASH_SIZE 31
-static struct objectBucket {
- struct objectBucket *next;
- FcChar32 hash;
-} *FcObjectBuckets[OBJECT_HASH_SIZE];
-
-static FcBool
-FcHashOwnsName (const FcChar8 *name)
-{
- FcChar32 hash = FcStringHash (name);
- struct objectBucket **p;
- struct objectBucket *b;
-
- for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- if (b->hash == hash && ((char *)name == (char *) (b + 1)))
- return FcTrue;
- return FcFalse;
-}
-
-const FcChar8 *
-FcStrStaticName (const FcChar8 *name)
-{
- FcChar32 hash = FcStringHash (name);
- struct objectBucket **p;
- struct objectBucket *b;
- int size;
-
- for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next))
- if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1)))
- return (FcChar8 *) (b + 1);
- size = sizeof (struct objectBucket) + strlen ((char *)name) + 1;
- /*
- * workaround valgrind warning because glibc takes advantage of how it knows memory is
- * allocated to implement strlen by reading in groups of 4
- */
- size = (size + 3) & ~3;
- b = malloc (size);
- FcMemAlloc (FC_MEM_STATICSTR, size);
- if (!b)
- return NULL;
- b->next = 0;
- b->hash = hash;
- strcpy ((char *) (b + 1), (char *)name);
- *p = b;
- return (FcChar8 *) (b + 1);
-}
-
-static void
-FcStrStaticNameFini (void)
-{
- int i, size;
- struct objectBucket *b, *next;
- char *name;
-
- for (i = 0; i < OBJECT_HASH_SIZE; i++)
- {
- for (b = FcObjectBuckets[i]; b; b = next)
- {
- next = b->next;
- name = (char *) (b + 1);
- size = sizeof (struct objectBucket) + strlen (name) + 1;
- FcMemFree (FC_MEM_STATICSTR, size + sizeof (int));
- free (b);
- }
- FcObjectBuckets[i] = 0;
- }
-}
-
-void
-FcPatternFini (void)
-{
- FcStrStaticNameFini ();
- FcObjectFini ();
-}
-
-FcBool
-FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat)
-{
- int i;
- FcPatternElt *elts = FcPatternElts(pat);
-
- if (!FcSerializeAlloc (serialize, pat, sizeof (FcPattern)))
- return FcFalse;
- if (!FcSerializeAlloc (serialize, elts, pat->num * sizeof (FcPatternElt)))
- return FcFalse;
- for (i = 0; i < pat->num; i++)
- if (!FcValueListSerializeAlloc (serialize, FcPatternEltValues(elts+i)))
- return FcFalse;
- return FcTrue;
-}
-
-FcPattern *
-FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat)
-{
- FcPattern *pat_serialized;
- FcPatternElt *elts = FcPatternElts (pat);
- FcPatternElt *elts_serialized;
- FcValueList *values_serialized;
- int i;
-
- pat_serialized = FcSerializePtr (serialize, pat);
- if (!pat_serialized)
- return NULL;
- *pat_serialized = *pat;
- pat_serialized->size = pat->num;
- pat_serialized->ref = FC_REF_CONSTANT;
-
- elts_serialized = FcSerializePtr (serialize, elts);
- if (!elts_serialized)
- return NULL;
-
- pat_serialized->elts_offset = FcPtrToOffset (pat_serialized,
- elts_serialized);
-
- for (i = 0; i < pat->num; i++)
- {
- values_serialized = FcValueListSerialize (serialize, FcPatternEltValues (elts+i));
- if (!values_serialized)
- return NULL;
- elts_serialized[i].object = elts[i].object;
- elts_serialized[i].values = FcPtrToEncodedOffset (&elts_serialized[i],
- values_serialized,
- FcValueList);
- }
- if (FcDebug() & FC_DBG_CACHEV) {
- printf ("Raw pattern:\n");
- FcPatternPrint (pat);
- printf ("Serialized pattern:\n");
- FcPatternPrint (pat_serialized);
- printf ("\n");
- }
- return pat_serialized;
-}
-
-FcBool
-FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *vl)
-{
- while (vl)
- {
- if (!FcSerializeAlloc (serialize, vl, sizeof (FcValueList)))
- return FcFalse;
- switch (vl->value.type) {
- case FcTypeString:
- if (!FcStrSerializeAlloc (serialize, vl->value.u.s))
- return FcFalse;
- break;
- case FcTypeCharSet:
- if (!FcCharSetSerializeAlloc (serialize, vl->value.u.c))
- return FcFalse;
- break;
- case FcTypeLangSet:
- if (!FcLangSetSerializeAlloc (serialize, vl->value.u.l))
- return FcFalse;
- break;
- default:
- break;
- }
- vl = vl->next;
- }
- return FcTrue;
-}
-
-FcValueList *
-FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl)
-{
- FcValueList *vl_serialized;
- FcChar8 *s_serialized;
- FcCharSet *c_serialized;
- FcLangSet *l_serialized;
- FcValueList *head_serialized = NULL;
- FcValueList *prev_serialized = NULL;
-
- while (vl)
- {
- vl_serialized = FcSerializePtr (serialize, vl);
- if (!vl_serialized)
- return NULL;
-
- if (prev_serialized)
- prev_serialized->next = FcPtrToEncodedOffset (prev_serialized,
- vl_serialized,
- FcValueList);
- else
- head_serialized = vl_serialized;
-
- vl_serialized->next = NULL;
- vl_serialized->value.type = vl->value.type;
- switch (vl->value.type) {
- case FcTypeInteger:
- vl_serialized->value.u.i = vl->value.u.i;
- break;
- case FcTypeDouble:
- vl_serialized->value.u.d = vl->value.u.d;
- break;
- case FcTypeString:
- s_serialized = FcStrSerialize (serialize, vl->value.u.s);
- if (!s_serialized)
- return NULL;
- vl_serialized->value.u.s = FcPtrToEncodedOffset (&vl_serialized->value,
- s_serialized,
- FcChar8);
- break;
- case FcTypeBool:
- vl_serialized->value.u.b = vl->value.u.b;
- break;
- case FcTypeMatrix:
- /* can't happen */
- break;
- case FcTypeCharSet:
- c_serialized = FcCharSetSerialize (serialize, vl->value.u.c);
- if (!c_serialized)
- return NULL;
- vl_serialized->value.u.c = FcPtrToEncodedOffset (&vl_serialized->value,
- c_serialized,
- FcCharSet);
- break;
- case FcTypeFTFace:
- /* can't happen */
- break;
- case FcTypeLangSet:
- l_serialized = FcLangSetSerialize (serialize, vl->value.u.l);
- if (!l_serialized)
- return NULL;
- vl_serialized->value.u.l = FcPtrToEncodedOffset (&vl_serialized->value,
- l_serialized,
- FcLangSet);
- break;
- default:
- break;
- }
- prev_serialized = vl_serialized;
- vl = vl->next;
- }
- return head_serialized;
-}
-#define __fcpat__
-#include "fcaliastail.h"
-#include "fcftaliastail.h"
-#undef __fcpat__
+/* + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include "fcftint.h" +#include <stdlib.h> +#include <string.h> +#include <assert.h> + +static FcBool +FcHashOwnsName(const FcChar8 *name); + +FcPattern * +FcPatternCreate (void) +{ + FcPattern *p; + + p = (FcPattern *) malloc (sizeof (FcPattern)); + if (!p) + return 0; + FcMemAlloc (FC_MEM_PATTERN, sizeof (FcPattern)); + p->num = 0; + p->size = 0; + p->elts_offset = FcPtrToOffset (p, NULL); + p->ref = 1; + return p; +} + +void +FcValueDestroy (FcValue v) +{ + switch (v.type) { + case FcTypeString: + if (!FcHashOwnsName(v.u.s)) + FcStrFree ((FcChar8 *) v.u.s); + break; + case FcTypeMatrix: + FcMatrixFree ((FcMatrix *) v.u.m); + break; + case FcTypeCharSet: + FcCharSetDestroy ((FcCharSet *) v.u.c); + break; + case FcTypeLangSet: + FcLangSetDestroy ((FcLangSet *) v.u.l); + break; + default: + break; + } +} + +FcValue +FcValueCanonicalize (const FcValue *v) +{ + FcValue new; + + switch (v->type) + { + case FcTypeString: + new.u.s = FcValueString(v); + new.type = FcTypeString; + break; + case FcTypeCharSet: + new.u.c = FcValueCharSet(v); + new.type = FcTypeCharSet; + break; + case FcTypeLangSet: + new.u.l = FcValueLangSet(v); + new.type = FcTypeLangSet; + break; + default: + new = *v; + break; + } + return new; +} + +FcValue +FcValueSave (FcValue v) +{ + switch (v.type) { + case FcTypeString: + v.u.s = FcStrStaticName (v.u.s); + if (!v.u.s) + v.type = FcTypeVoid; + break; + case FcTypeMatrix: + v.u.m = FcMatrixCopy (v.u.m); + if (!v.u.m) + v.type = FcTypeVoid; + break; + case FcTypeCharSet: + v.u.c = FcCharSetCopy ((FcCharSet *) v.u.c); + if (!v.u.c) + v.type = FcTypeVoid; + break; + case FcTypeLangSet: + v.u.l = FcLangSetCopy (v.u.l); + if (!v.u.l) + v.type = FcTypeVoid; + break; + default: + break; + } + return v; +} + +void +FcValueListDestroy (FcValueListPtr l) +{ + FcValueListPtr next; + for (; l; l = next) + { + switch (l->value.type) { + case FcTypeString: + if (!FcHashOwnsName((FcChar8 *)l->value.u.s)) + FcStrFree ((FcChar8 *)l->value.u.s); + break; + case FcTypeMatrix: + FcMatrixFree ((FcMatrix *)l->value.u.m); + break; + case FcTypeCharSet: + FcCharSetDestroy + ((FcCharSet *) (l->value.u.c)); + break; + case FcTypeLangSet: + FcLangSetDestroy + ((FcLangSet *) (l->value.u.l)); + break; + default: + break; + } + next = FcValueListNext(l); + FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList)); + free(l); + } +} + +FcBool +FcValueEqual (FcValue va, FcValue vb) +{ + if (va.type != vb.type) + { + if (va.type == FcTypeInteger) + { + va.type = FcTypeDouble; + va.u.d = va.u.i; + } + if (vb.type == FcTypeInteger) + { + vb.type = FcTypeDouble; + vb.u.d = vb.u.i; + } + if (va.type != vb.type) + return FcFalse; + } + switch (va.type) { + case FcTypeVoid: + return FcTrue; + case FcTypeInteger: + return va.u.i == vb.u.i; + case FcTypeDouble: + return va.u.d == vb.u.d; + case FcTypeString: + return FcStrCmpIgnoreCase (va.u.s, vb.u.s) == 0; + case FcTypeBool: + return va.u.b == vb.u.b; + case FcTypeMatrix: + return FcMatrixEqual (va.u.m, vb.u.m); + case FcTypeCharSet: + return FcCharSetEqual (va.u.c, vb.u.c); + case FcTypeFTFace: + return va.u.f == vb.u.f; + case FcTypeLangSet: + return FcLangSetEqual (va.u.l, vb.u.l); + } + return FcFalse; +} + +static FcChar32 +FcDoubleHash (double d) +{ + if (d < 0) + d = -d; + if (d > 0xffffffff) + d = 0xffffffff; + return (FcChar32) d; +} + +FcChar32 +FcStringHash (const FcChar8 *s) +{ + FcChar8 c; + FcChar32 h = 0; + + if (s) + while ((c = *s++)) + h = ((h << 1) | (h >> 31)) ^ c; + return h; +} + +static FcChar32 +FcValueHash (const FcValue *v) +{ + switch (v->type) { + case FcTypeVoid: + return 0; + case FcTypeInteger: + return (FcChar32) v->u.i; + case FcTypeDouble: + return FcDoubleHash (v->u.d); + case FcTypeString: + return FcStringHash (FcValueString(v)); + case FcTypeBool: + return (FcChar32) v->u.b; + case FcTypeMatrix: + return (FcDoubleHash (v->u.m->xx) ^ + FcDoubleHash (v->u.m->xy) ^ + FcDoubleHash (v->u.m->yx) ^ + FcDoubleHash (v->u.m->yy)); + case FcTypeCharSet: + return (FcChar32) FcValueCharSet(v)->num; + case FcTypeFTFace: + return FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->family_name) ^ + FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->style_name); + case FcTypeLangSet: + return FcLangSetHash (FcValueLangSet(v)); + } + return FcFalse; +} + +static FcBool +FcValueListEqual (FcValueListPtr la, FcValueListPtr lb) +{ + if (la == lb) + return FcTrue; + + while (la && lb) + { + if (!FcValueEqual (la->value, lb->value)) + return FcFalse; + la = FcValueListNext(la); + lb = FcValueListNext(lb); + } + if (la || lb) + return FcFalse; + return FcTrue; +} + +static FcChar32 +FcValueListHash (FcValueListPtr l) +{ + FcChar32 hash = 0; + + for (; l; l = FcValueListNext(l)) + { + hash = ((hash << 1) | (hash >> 31)) ^ FcValueHash (&l->value); + } + return hash; +} + +void +FcPatternDestroy (FcPattern *p) +{ + int i; + FcPatternElt *elts; + + if (p->ref == FC_REF_CONSTANT) + { + FcCacheObjectDereference (p); + return; + } + + if (--p->ref > 0) + return; + + elts = FcPatternElts (p); + for (i = 0; i < p->num; i++) + FcValueListDestroy (FcPatternEltValues(&elts[i])); + + FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt)); + free (elts); + FcMemFree (FC_MEM_PATTERN, sizeof (FcPattern)); + free (p); +} + +static int +FcPatternObjectPosition (const FcPattern *p, FcObject object) +{ + int low, high, mid, c; + FcPatternElt *elts = FcPatternElts(p); + + low = 0; + high = p->num - 1; + c = 1; + mid = 0; + while (low <= high) + { + mid = (low + high) >> 1; + c = elts[mid].object - object; + if (c == 0) + return mid; + if (c < 0) + low = mid + 1; + else + high = mid - 1; + } + if (c < 0) + mid++; + return -(mid + 1); +} + +FcPatternElt * +FcPatternObjectFindElt (const FcPattern *p, FcObject object) +{ + int i = FcPatternObjectPosition (p, object); + if (i < 0) + return 0; + return &FcPatternElts(p)[i]; +} + +FcPatternElt * +FcPatternObjectInsertElt (FcPattern *p, FcObject object) +{ + int i; + FcPatternElt *e; + + i = FcPatternObjectPosition (p, object); + if (i < 0) + { + i = -i - 1; + + /* reallocate array */ + if (p->num + 1 >= p->size) + { + int s = p->size + 16; + if (p->size) + { + FcPatternElt *e0 = FcPatternElts(p); + e = (FcPatternElt *) realloc (e0, s * sizeof (FcPatternElt)); + if (!e) /* maybe it was mmapped */ + { + e = malloc(s * sizeof (FcPatternElt)); + if (e) + memcpy(e, e0, p->num * sizeof (FcPatternElt)); + } + } + else + e = (FcPatternElt *) malloc (s * sizeof (FcPatternElt)); + if (!e) + return FcFalse; + p->elts_offset = FcPtrToOffset (p, e); + if (p->size) + FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt)); + FcMemAlloc (FC_MEM_PATELT, s * sizeof (FcPatternElt)); + while (p->size < s) + { + e[p->size].object = 0; + e[p->size].values = NULL; + p->size++; + } + } + + e = FcPatternElts(p); + /* move elts up */ + memmove (e + i + 1, + e + i, + sizeof (FcPatternElt) * + (p->num - i)); + + /* bump count */ + p->num++; + + e[i].object = object; + e[i].values = NULL; + } + + return FcPatternElts(p) + i; +} + +FcBool +FcPatternEqual (const FcPattern *pa, const FcPattern *pb) +{ + int i; + FcPatternElt *pae, *pbe; + + if (pa == pb) + return FcTrue; + + if (pa->num != pb->num) + return FcFalse; + pae = FcPatternElts(pa); + pbe = FcPatternElts(pb); + for (i = 0; i < pa->num; i++) + { + if (pae[i].object != pbe[i].object) + return FcFalse; + if (!FcValueListEqual (FcPatternEltValues(&pae[i]), + FcPatternEltValues(&pbe[i]))) + return FcFalse; + } + return FcTrue; +} + +FcChar32 +FcPatternHash (const FcPattern *p) +{ + int i; + FcChar32 h = 0; + FcPatternElt *pe = FcPatternElts(p); + + for (i = 0; i < p->num; i++) + { + h = (((h << 1) | (h >> 31)) ^ + pe[i].object ^ + FcValueListHash (FcPatternEltValues(&pe[i]))); + } + return h; +} + +FcBool +FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObjectSet *os) +{ + FcPatternElt *ea, *eb; + int i; + + for (i = 0; i < os->nobject; i++) + { + FcObject object = FcObjectFromName (os->objects[i]); + ea = FcPatternObjectFindElt (pai, object); + eb = FcPatternObjectFindElt (pbi, object); + if (ea) + { + if (!eb) + return FcFalse; + if (!FcValueListEqual (FcPatternEltValues(ea), FcPatternEltValues(eb))) + return FcFalse; + } + else + { + if (eb) + return FcFalse; + } + } + return FcTrue; +} + +FcBool +FcPatternObjectAddWithBinding (FcPattern *p, + FcObject object, + FcValue value, + FcValueBinding binding, + FcBool append) +{ + FcPatternElt *e; + FcValueListPtr new, *prev; + + if (p->ref == FC_REF_CONSTANT) + goto bail0; + + new = malloc (sizeof (FcValueList)); + if (!new) + goto bail0; + + memset(new, 0, sizeof (FcValueList)); + FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList)); + value = FcValueSave (value); + if (value.type == FcTypeVoid) + goto bail1; + + /* + * Make sure the stored type is valid for built-in objects + */ + if (!FcObjectValidType (object, value.type)) + { + if (FcDebug() & FC_DBG_OBJTYPES) + { + printf ("FcPattern object %s does not accept value ", + FcObjectName (object)); + FcValuePrint (value); + } + goto bail1; + } + + new->value = value; + new->binding = binding; + new->next = NULL; + + e = FcPatternObjectInsertElt (p, object); + if (!e) + goto bail2; + + if (append) + { + for (prev = &e->values; *prev; prev = &(*prev)->next) + ; + *prev = new; + } + else + { + new->next = e->values; + e->values = new; + } + + return FcTrue; + +bail2: + FcValueDestroy (value); +bail1: + FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList)); + free (new); +bail0: + return FcFalse; +} + +FcBool +FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append) +{ + return FcPatternObjectAddWithBinding (p, object, + value, FcValueBindingStrong, append); +} + +FcBool +FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append) +{ + return FcPatternObjectAddWithBinding (p, FcObjectFromName (object), + value, FcValueBindingStrong, append); +} + +FcBool +FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append) +{ + return FcPatternObjectAddWithBinding (p, FcObjectFromName (object), + value, FcValueBindingWeak, append); +} + +FcBool +FcPatternObjectDel (FcPattern *p, FcObject object) +{ + FcPatternElt *e; + + e = FcPatternObjectFindElt (p, object); + if (!e) + return FcFalse; + + /* destroy value */ + FcValueListDestroy (e->values); + + /* shuffle existing ones down */ + memmove (e, e+1, + (FcPatternElts(p) + p->num - (e + 1)) * + sizeof (FcPatternElt)); + p->num--; + e = FcPatternElts(p) + p->num; + e->object = 0; + e->values = NULL; + return FcTrue; +} + +FcBool +FcPatternDel (FcPattern *p, const char *object) +{ + return FcPatternObjectDel (p, FcObjectFromName (object)); +} + +FcBool +FcPatternRemove (FcPattern *p, const char *object, int id) +{ + FcPatternElt *e; + FcValueListPtr *prev, l; + + e = FcPatternObjectFindElt (p, FcObjectFromName (object)); + if (!e) + return FcFalse; + for (prev = &e->values; (l = *prev); prev = &l->next) + { + if (!id) + { + *prev = l->next; + l->next = NULL; + FcValueListDestroy (l); + if (!e->values) + FcPatternDel (p, object); + return FcTrue; + } + id--; + } + return FcFalse; +} + +FcBool +FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i) +{ + FcValue v; + + v.type = FcTypeInteger; + v.u.i = i; + return FcPatternObjectAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddInteger (FcPattern *p, const char *object, int i) +{ + return FcPatternObjectAddInteger (p, FcObjectFromName (object), i); +} + +FcBool +FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d) +{ + FcValue v; + + v.type = FcTypeDouble; + v.u.d = d; + return FcPatternObjectAdd (p, object, v, FcTrue); +} + + +FcBool +FcPatternAddDouble (FcPattern *p, const char *object, double d) +{ + return FcPatternObjectAddDouble (p, FcObjectFromName (object), d); +} + +FcBool +FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s) +{ + FcValue v; + + if (!s) + { + v.type = FcTypeVoid; + v.u.s = 0; + return FcPatternObjectAdd (p, object, v, FcTrue); + } + + v.type = FcTypeString; + v.u.s = FcStrStaticName(s); + return FcPatternObjectAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s) +{ + return FcPatternObjectAddString (p, FcObjectFromName (object), s); +} + +FcBool +FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s) +{ + FcValue v; + + v.type = FcTypeMatrix; + v.u.m = s; + return FcPatternAdd (p, object, v, FcTrue); +} + + +FcBool +FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b) +{ + FcValue v; + + v.type = FcTypeBool; + v.u.b = b; + return FcPatternObjectAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddBool (FcPattern *p, const char *object, FcBool b) +{ + return FcPatternObjectAddBool (p, FcObjectFromName (object), b); +} + +FcBool +FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c) +{ + FcValue v; + + v.type = FcTypeCharSet; + v.u.c = (FcCharSet *)c; + return FcPatternAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f) +{ + FcValue v; + + v.type = FcTypeFTFace; + v.u.f = (void *) f; + return FcPatternAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls) +{ + FcValue v; + + v.type = FcTypeLangSet; + v.u.l = (FcLangSet *)ls; + return FcPatternAdd (p, object, v, FcTrue); +} + +FcResult +FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v) +{ + FcPatternElt *e; + FcValueListPtr l; + + e = FcPatternObjectFindElt (p, object); + if (!e) + return FcResultNoMatch; + for (l = FcPatternEltValues(e); l; l = FcValueListNext(l)) + { + if (!id) + { + *v = FcValueCanonicalize(&l->value); + return FcResultMatch; + } + id--; + } + return FcResultNoId; +} + +FcResult +FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v) +{ + return FcPatternObjectGet (p, FcObjectFromName (object), id, v); +} + +FcResult +FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int id, int *i) +{ + FcValue v; + FcResult r; + + r = FcPatternObjectGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + switch (v.type) { + case FcTypeDouble: + *i = (int) v.u.d; + break; + case FcTypeInteger: + *i = v.u.i; + break; + default: + return FcResultTypeMismatch; + } + return FcResultMatch; +} + +FcResult +FcPatternGetInteger (const FcPattern *p, const char *object, int id, int *i) +{ + return FcPatternObjectGetInteger (p, FcObjectFromName (object), id, i); +} + + +FcResult +FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int id, double *d) +{ + FcValue v; + FcResult r; + + r = FcPatternObjectGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + switch (v.type) { + case FcTypeDouble: + *d = v.u.d; + break; + case FcTypeInteger: + *d = (double) v.u.i; + break; + default: + return FcResultTypeMismatch; + } + return FcResultMatch; +} + +FcResult +FcPatternGetDouble (const FcPattern *p, const char *object, int id, double *d) +{ + return FcPatternObjectGetDouble (p, FcObjectFromName (object), id, d); +} + +FcResult +FcPatternObjectGetString (const FcPattern *p, FcObject object, int id, FcChar8 ** s) +{ + FcValue v; + FcResult r; + + r = FcPatternObjectGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeString) + return FcResultTypeMismatch; + + *s = (FcChar8 *) v.u.s; + return FcResultMatch; +} + +FcResult +FcPatternGetString (const FcPattern *p, const char *object, int id, FcChar8 ** s) +{ + return FcPatternObjectGetString (p, FcObjectFromName (object), id, s); +} + +FcResult +FcPatternGetMatrix(const FcPattern *p, const char *object, int id, FcMatrix **m) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeMatrix) + return FcResultTypeMismatch; + *m = (FcMatrix *)v.u.m; + return FcResultMatch; +} + + +FcResult +FcPatternGetBool(const FcPattern *p, const char *object, int id, FcBool *b) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeBool) + return FcResultTypeMismatch; + *b = v.u.b; + return FcResultMatch; +} + +FcResult +FcPatternGetCharSet(const FcPattern *p, const char *object, int id, FcCharSet **c) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeCharSet) + return FcResultTypeMismatch; + *c = (FcCharSet *)v.u.c; + return FcResultMatch; +} + +FcResult +FcPatternGetFTFace(const FcPattern *p, const char *object, int id, FT_Face *f) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeFTFace) + return FcResultTypeMismatch; + *f = (FT_Face) v.u.f; + return FcResultMatch; +} + +FcResult +FcPatternGetLangSet(const FcPattern *p, const char *object, int id, FcLangSet **ls) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeLangSet) + return FcResultTypeMismatch; + *ls = (FcLangSet *)v.u.l; + return FcResultMatch; +} + +FcPattern * +FcPatternDuplicate (const FcPattern *orig) +{ + FcPattern *new; + FcPatternElt *e; + int i; + FcValueListPtr l; + + new = FcPatternCreate (); + if (!new) + goto bail0; + + e = FcPatternElts(orig); + + for (i = 0; i < orig->num; i++) + { + for (l = FcPatternEltValues(e + i); l; l = FcValueListNext(l)) + { + if (!FcPatternObjectAddWithBinding (new, e[i].object, + FcValueCanonicalize(&l->value), + l->binding, + FcTrue)) + goto bail1; + + } + } + + return new; + +bail1: + FcPatternDestroy (new); +bail0: + return 0; +} + +void +FcPatternReference (FcPattern *p) +{ + if (p->ref != FC_REF_CONSTANT) + p->ref++; + else + FcCacheObjectReference (p); +} + +FcPattern * +FcPatternVaBuild (FcPattern *p, va_list va) +{ + FcPattern *ret; + + FcPatternVapBuild (ret, p, va); + return ret; +} + +FcPattern * +FcPatternBuild (FcPattern *p, ...) +{ + va_list va; + + va_start (va, p); + FcPatternVapBuild (p, p, va); + va_end (va); + return p; +} + +/* + * Add all of the elements in 's' to 'p' + */ +FcBool +FcPatternAppend (FcPattern *p, FcPattern *s) +{ + int i; + FcPatternElt *e; + FcValueListPtr v; + + for (i = 0; i < s->num; i++) + { + e = FcPatternElts(s)+i; + for (v = FcPatternEltValues(e); v; v = FcValueListNext(v)) + { + if (!FcPatternObjectAddWithBinding (p, e->object, + FcValueCanonicalize(&v->value), + v->binding, FcTrue)) + return FcFalse; + } + } + return FcTrue; +} + +FcPattern * +FcPatternFilter (FcPattern *p, const FcObjectSet *os) +{ + int i; + FcPattern *ret; + FcPatternElt *e; + FcValueListPtr v; + + if (!os) + return FcPatternDuplicate (p); + + ret = FcPatternCreate (); + if (!ret) + return NULL; + + for (i = 0; i < os->nobject; i++) + { + FcObject object = FcObjectFromName (os->objects[i]); + e = FcPatternObjectFindElt (p, object); + if (e) + { + for (v = FcPatternEltValues(e); v; v = FcValueListNext(v)) + { + if (!FcPatternObjectAddWithBinding (ret, e->object, + FcValueCanonicalize(&v->value), + v->binding, FcTrue)) + goto bail0; + } + } + } + return ret; + +bail0: + FcPatternDestroy (ret); + return NULL; +} + +#define OBJECT_HASH_SIZE 31 +static struct objectBucket { + struct objectBucket *next; + FcChar32 hash; +} *FcObjectBuckets[OBJECT_HASH_SIZE]; + +static FcBool +FcHashOwnsName (const FcChar8 *name) +{ + FcChar32 hash = FcStringHash (name); + struct objectBucket **p; + struct objectBucket *b; + + for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + if (b->hash == hash && ((char *)name == (char *) (b + 1))) + return FcTrue; + return FcFalse; +} + +const FcChar8 * +FcStrStaticName (const FcChar8 *name) +{ + FcChar32 hash = FcStringHash (name); + struct objectBucket **p; + struct objectBucket *b; + int size; + + for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1))) + return (FcChar8 *) (b + 1); + size = sizeof (struct objectBucket) + strlen ((char *)name) + 1; + /* + * workaround valgrind warning because glibc takes advantage of how it knows memory is + * allocated to implement strlen by reading in groups of 4 + */ + size = (size + 3) & ~3; + b = malloc (size); + FcMemAlloc (FC_MEM_STATICSTR, size); + if (!b) + return NULL; + b->next = 0; + b->hash = hash; + strcpy ((char *) (b + 1), (char *)name); + *p = b; + return (FcChar8 *) (b + 1); +} + +static void +FcStrStaticNameFini (void) +{ + int i, size; + struct objectBucket *b, *next; + char *name; + + for (i = 0; i < OBJECT_HASH_SIZE; i++) + { + for (b = FcObjectBuckets[i]; b; b = next) + { + next = b->next; + name = (char *) (b + 1); + size = sizeof (struct objectBucket) + strlen (name) + 1; + FcMemFree (FC_MEM_STATICSTR, size + sizeof (int)); + free (b); + } + FcObjectBuckets[i] = 0; + } +} + +void +FcPatternFini (void) +{ + FcStrStaticNameFini (); + FcObjectFini (); +} + +FcBool +FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat) +{ + int i; + FcPatternElt *elts = FcPatternElts(pat); + + if (!FcSerializeAlloc (serialize, pat, sizeof (FcPattern))) + return FcFalse; + if (!FcSerializeAlloc (serialize, elts, pat->num * sizeof (FcPatternElt))) + return FcFalse; + for (i = 0; i < pat->num; i++) + if (!FcValueListSerializeAlloc (serialize, FcPatternEltValues(elts+i))) + return FcFalse; + return FcTrue; +} + +FcPattern * +FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat) +{ + FcPattern *pat_serialized; + FcPatternElt *elts = FcPatternElts (pat); + FcPatternElt *elts_serialized; + FcValueList *values_serialized; + int i; + + pat_serialized = FcSerializePtr (serialize, pat); + if (!pat_serialized) + return NULL; + *pat_serialized = *pat; + pat_serialized->size = pat->num; + pat_serialized->ref = FC_REF_CONSTANT; + + elts_serialized = FcSerializePtr (serialize, elts); + if (!elts_serialized) + return NULL; + + pat_serialized->elts_offset = FcPtrToOffset (pat_serialized, + elts_serialized); + + for (i = 0; i < pat->num; i++) + { + values_serialized = FcValueListSerialize (serialize, FcPatternEltValues (elts+i)); + if (!values_serialized) + return NULL; + elts_serialized[i].object = elts[i].object; + elts_serialized[i].values = FcPtrToEncodedOffset (&elts_serialized[i], + values_serialized, + FcValueList); + } + if (FcDebug() & FC_DBG_CACHEV) { + printf ("Raw pattern:\n"); + FcPatternPrint (pat); + printf ("Serialized pattern:\n"); + FcPatternPrint (pat_serialized); + printf ("\n"); + } + return pat_serialized; +} + +FcBool +FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *vl) +{ + while (vl) + { + if (!FcSerializeAlloc (serialize, vl, sizeof (FcValueList))) + return FcFalse; + switch (vl->value.type) { + case FcTypeString: + if (!FcStrSerializeAlloc (serialize, vl->value.u.s)) + return FcFalse; + break; + case FcTypeCharSet: + if (!FcCharSetSerializeAlloc (serialize, vl->value.u.c)) + return FcFalse; + break; + case FcTypeLangSet: + if (!FcLangSetSerializeAlloc (serialize, vl->value.u.l)) + return FcFalse; + break; + default: + break; + } + vl = vl->next; + } + return FcTrue; +} + +FcValueList * +FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl) +{ + FcValueList *vl_serialized; + FcChar8 *s_serialized; + FcCharSet *c_serialized; + FcLangSet *l_serialized; + FcValueList *head_serialized = NULL; + FcValueList *prev_serialized = NULL; + + while (vl) + { + vl_serialized = FcSerializePtr (serialize, vl); + if (!vl_serialized) + return NULL; + + if (prev_serialized) + prev_serialized->next = FcPtrToEncodedOffset (prev_serialized, + vl_serialized, + FcValueList); + else + head_serialized = vl_serialized; + + vl_serialized->next = NULL; + vl_serialized->value.type = vl->value.type; + switch (vl->value.type) { + case FcTypeInteger: + vl_serialized->value.u.i = vl->value.u.i; + break; + case FcTypeDouble: + vl_serialized->value.u.d = vl->value.u.d; + break; + case FcTypeString: + s_serialized = FcStrSerialize (serialize, vl->value.u.s); + if (!s_serialized) + return NULL; + vl_serialized->value.u.s = FcPtrToEncodedOffset (&vl_serialized->value, + s_serialized, + FcChar8); + break; + case FcTypeBool: + vl_serialized->value.u.b = vl->value.u.b; + break; + case FcTypeMatrix: + /* can't happen */ + break; + case FcTypeCharSet: + c_serialized = FcCharSetSerialize (serialize, vl->value.u.c); + if (!c_serialized) + return NULL; + vl_serialized->value.u.c = FcPtrToEncodedOffset (&vl_serialized->value, + c_serialized, + FcCharSet); + break; + case FcTypeFTFace: + /* can't happen */ + break; + case FcTypeLangSet: + l_serialized = FcLangSetSerialize (serialize, vl->value.u.l); + if (!l_serialized) + return NULL; + vl_serialized->value.u.l = FcPtrToEncodedOffset (&vl_serialized->value, + l_serialized, + FcLangSet); + break; + default: + break; + } + prev_serialized = vl_serialized; + vl = vl->next; + } + return head_serialized; +} +#define __fcpat__ +#include "fcaliastail.h" +#include "fcftaliastail.h" +#undef __fcpat__ diff --git a/fontconfig/src/fcstr.c b/fontconfig/src/fcstr.c index 6aee5d288..8b94ecba5 100644 --- a/fontconfig/src/fcstr.c +++ b/fontconfig/src/fcstr.c @@ -1,1198 +1,1198 @@ -/*
- * fontconfig/src/fcstr.c
- *
- * Copyright © 2000 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <stdlib.h>
-#include <ctype.h>
-#include <string.h>
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-FcChar8 *
-FcStrCopy (const FcChar8 *s)
-{
- int len;
- FcChar8 *r;
-
- if (!s)
- return 0;
- len = strlen ((char *) s) + 1;
- r = (FcChar8 *) malloc (len);
- if (!r)
- return 0;
- FcMemAlloc (FC_MEM_STRING, len);
- memcpy (r, s, len);
- return r;
-}
-
-FcChar8 *
-FcStrPlus (const FcChar8 *s1, const FcChar8 *s2)
-{
- int l = strlen ((char *)s1) + strlen ((char *) s2) + 1;
- FcChar8 *s = malloc (l);
-
- if (!s)
- return 0;
- FcMemAlloc (FC_MEM_STRING, l);
- strcpy ((char *) s, (char *) s1);
- strcat ((char *) s, (char *) s2);
- return s;
-}
-
-void
-FcStrFree (FcChar8 *s)
-{
- FcMemFree (FC_MEM_STRING, strlen ((char *) s) + 1);
- free (s);
-}
-
-
-#include "../fc-case/fccase.h"
-
-#define FcCaseFoldUpperCount(cf) \
- ((cf)->method == FC_CASE_FOLD_FULL ? 1 : (cf)->count)
-
-#define FC_STR_CANON_BUF_LEN 1024
-
-typedef struct _FcCaseWalker {
- const FcChar8 *read;
- const FcChar8 *src;
- FcChar8 utf8[FC_MAX_CASE_FOLD_CHARS + 1];
-} FcCaseWalker;
-
-static void
-FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w)
-{
- w->src = src;
- w->read = 0;
-}
-
-static FcChar8
-FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r)
-{
- FcChar32 ucs4;
- int slen;
- int len = strlen((char*)w->src);
-
- slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, len + 1);
- if (slen <= 0)
- return r;
- if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR)
- {
- int min = 0;
- int max = FC_NUM_CASE_FOLD;
-
- while (min <= max)
- {
- int mid = (min + max) >> 1;
- FcChar32 low = fcCaseFold[mid].upper;
- FcChar32 high = low + FcCaseFoldUpperCount (&fcCaseFold[mid]);
-
- if (high <= ucs4)
- min = mid + 1;
- else if (ucs4 < low)
- max = mid - 1;
- else
- {
- const FcCaseFold *fold = &fcCaseFold[mid];
- int dlen;
-
- switch (fold->method) {
- case FC_CASE_FOLD_EVEN_ODD:
- if ((ucs4 & 1) != (fold->upper & 1))
- return r;
- /* fall through ... */
- default:
- dlen = FcUcs4ToUtf8 (ucs4 + fold->offset, w->utf8);
- break;
- case FC_CASE_FOLD_FULL:
- dlen = fold->count;
- memcpy (w->utf8, fcCaseFoldChars + fold->offset, dlen);
- break;
- }
-
- /* consume rest of src utf-8 bytes */
- w->src += slen - 1;
-
- /* read from temp buffer */
- w->utf8[dlen] = '\0';
- w->read = w->utf8;
- return *w->read++;
- }
- }
- }
- return r;
-}
-
-static FcChar8
-FcStrCaseWalkerNext (FcCaseWalker *w)
-{
- FcChar8 r;
-
- if (w->read)
- {
- if ((r = *w->read++))
- return r;
- w->read = 0;
- }
- r = *w->src++;
-
- if ((r & 0xc0) == 0xc0)
- return FcStrCaseWalkerLong (w, r);
- if ('A' <= r && r <= 'Z')
- r = r - 'A' + 'a';
- return r;
-}
-
-static FcChar8
-FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w)
-{
- FcChar8 r;
-
- if (w->read)
- {
- if ((r = *w->read++))
- return r;
- w->read = 0;
- }
- do
- {
- r = *w->src++;
- } while (r == ' ');
-
- if ((r & 0xc0) == 0xc0)
- return FcStrCaseWalkerLong (w, r);
- if ('A' <= r && r <= 'Z')
- r = r - 'A' + 'a';
- return r;
-}
-
-FcChar8 *
-FcStrDowncase (const FcChar8 *s)
-{
- FcCaseWalker w;
- int len = 0;
- FcChar8 *dst, *d;
-
- FcStrCaseWalkerInit (s, &w);
- while (FcStrCaseWalkerNext (&w))
- len++;
- d = dst = malloc (len + 1);
- if (!d)
- return 0;
- FcMemAlloc (FC_MEM_STRING, len + 1);
- FcStrCaseWalkerInit (s, &w);
- while ((*d++ = FcStrCaseWalkerNext (&w)));
- return dst;
-}
-
-int
-FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
-
- if (s1 == s2) return 0;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- for (;;)
- {
- c1 = FcStrCaseWalkerNext (&w1);
- c2 = FcStrCaseWalkerNext (&w2);
- if (!c1 || (c1 != c2))
- break;
- }
- return (int) c1 - (int) c2;
-}
-
-int
-FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
-
- if (s1 == s2) return 0;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- for (;;)
- {
- c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1);
- c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2);
- if (!c1 || (c1 != c2))
- break;
- }
- return (int) c1 - (int) c2;
-}
-
-int
-FcStrCmp (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcChar8 c1, c2;
-
- if (s1 == s2)
- return 0;
- for (;;)
- {
- c1 = *s1++;
- c2 = *s2++;
- if (!c1 || c1 != c2)
- break;
- }
- return (int) c1 - (int) c2;
-}
-
-/*
- * Return a hash value for a string
- */
-
-FcChar32
-FcStrHashIgnoreCase (const FcChar8 *s)
-{
- FcChar32 h = 0;
- FcCaseWalker w;
- FcChar8 c;
-
- FcStrCaseWalkerInit (s, &w);
- while ((c = FcStrCaseWalkerNext (&w)))
- h = ((h << 3) ^ (h >> 3)) ^ c;
- return h;
-}
-
-/*
- * Is the head of s1 equal to s2?
- */
-
-static FcBool
-FcStrIsAtIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- for (;;)
- {
- c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1);
- c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2);
- if (!c1 || (c1 != c2))
- break;
- }
- return c1 == c2 || !c2;
-}
-
-/*
- * Does s1 contain an instance of s2 (ignoring blanks and case)?
- */
-
-const FcChar8 *
-FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- while (*s1)
- {
- if (FcStrIsAtIgnoreBlanksAndCase (s1, s2))
- return s1;
- s1++;
- }
- return 0;
-}
-
-static FcBool
-FcCharIsPunct (const FcChar8 c)
-{
- if (c < '0')
- return FcTrue;
- if (c <= '9')
- return FcFalse;
- if (c < 'A')
- return FcTrue;
- if (c <= 'Z')
- return FcFalse;
- if (c < 'a')
- return FcTrue;
- if (c <= 'z')
- return FcFalse;
- if (c <= '~')
- return FcTrue;
- return FcFalse;
-}
-
-/*
- * Is the head of s1 equal to s2?
- */
-
-static FcBool
-FcStrIsAtIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- for (;;)
- {
- c1 = FcStrCaseWalkerNext (&w1);
- c2 = FcStrCaseWalkerNext (&w2);
- if (!c1 || (c1 != c2))
- break;
- }
- return c1 == c2 || !c2;
-}
-
-/*
- * Does s1 contain an instance of s2 (ignoring blanks and case)?
- */
-
-const FcChar8 *
-FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- while (*s1)
- {
- if (FcStrIsAtIgnoreCase (s1, s2))
- return s1;
- s1++;
- }
- return 0;
-}
-
-/*
- * Does s1 contain an instance of s2 on a word boundary (ignoring case)?
- */
-
-const FcChar8 *
-FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcBool wordStart = FcTrue;
- int s1len = strlen ((char *) s1);
- int s2len = strlen ((char *) s2);
-
- while (s1len >= s2len)
- {
- if (wordStart &&
- FcStrIsAtIgnoreCase (s1, s2) &&
- (s1len == s2len || FcCharIsPunct (s1[s2len])))
- {
- return s1;
- }
- wordStart = FcFalse;
- if (FcCharIsPunct (*s1))
- wordStart = FcTrue;
- s1++;
- s1len--;
- }
- return 0;
-}
-
-const FcChar8 *
-FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcCaseWalker w1, w2;
- FcChar8 c1, c2;
- const FcChar8 *cur;
-
- if (!s1 || !s2)
- return 0;
-
- if (s1 == s2)
- return s1;
-
- FcStrCaseWalkerInit (s1, &w1);
- FcStrCaseWalkerInit (s2, &w2);
-
- c2 = FcStrCaseWalkerNext (&w2);
-
- for (;;)
- {
- cur = w1.src;
- c1 = FcStrCaseWalkerNext (&w1);
- if (!c1)
- break;
- if (c1 == c2)
- {
- FcCaseWalker w1t = w1;
- FcCaseWalker w2t = w2;
- FcChar8 c1t, c2t;
-
- for (;;)
- {
- c1t = FcStrCaseWalkerNext (&w1t);
- c2t = FcStrCaseWalkerNext (&w2t);
-
- if (!c2t)
- return cur;
- if (c2t != c1t)
- break;
- }
- }
- }
- return 0;
-}
-
-const FcChar8 *
-FcStrStr (const FcChar8 *s1, const FcChar8 *s2)
-{
- FcChar8 c1, c2;
- const FcChar8 * p = s1;
- const FcChar8 * b = s2;
-
- if (!s1 || !s2)
- return 0;
-
- if (s1 == s2)
- return s1;
-
-again:
- c2 = *s2++;
-
- if (!c2)
- return 0;
-
- for (;;)
- {
- p = s1;
- c1 = *s1++;
- if (!c1 || c1 == c2)
- break;
- }
-
- if (c1 != c2)
- return 0;
-
- for (;;)
- {
- c1 = *s1;
- c2 = *s2;
- if (c1 && c2 && c1 != c2)
- {
- s1 = p + 1;
- s2 = b;
- goto again;
- }
- if (!c2)
- return p;
- if (!c1)
- return 0;
- ++ s1;
- ++ s2;
- }
- /* never reached. */
-}
-
-int
-FcUtf8ToUcs4 (const FcChar8 *src_orig,
- FcChar32 *dst,
- int len)
-{
- const FcChar8 *src = src_orig;
- FcChar8 s;
- int extra;
- FcChar32 result;
-
- if (len == 0)
- return 0;
-
- s = *src++;
- len--;
-
- if (!(s & 0x80))
- {
- result = s;
- extra = 0;
- }
- else if (!(s & 0x40))
- {
- return -1;
- }
- else if (!(s & 0x20))
- {
- result = s & 0x1f;
- extra = 1;
- }
- else if (!(s & 0x10))
- {
- result = s & 0xf;
- extra = 2;
- }
- else if (!(s & 0x08))
- {
- result = s & 0x07;
- extra = 3;
- }
- else if (!(s & 0x04))
- {
- result = s & 0x03;
- extra = 4;
- }
- else if ( ! (s & 0x02))
- {
- result = s & 0x01;
- extra = 5;
- }
- else
- {
- return -1;
- }
- if (extra > len)
- return -1;
-
- while (extra--)
- {
- result <<= 6;
- s = *src++;
-
- if ((s & 0xc0) != 0x80)
- return -1;
-
- result |= s & 0x3f;
- }
- *dst = result;
- return src - src_orig;
-}
-
-FcBool
-FcUtf8Len (const FcChar8 *string,
- int len,
- int *nchar,
- int *wchar)
-{
- int n;
- int clen;
- FcChar32 c;
- FcChar32 max;
-
- n = 0;
- max = 0;
- while (len)
- {
- clen = FcUtf8ToUcs4 (string, &c, len);
- if (clen <= 0) /* malformed UTF8 string */
- return FcFalse;
- if (c > max)
- max = c;
- string += clen;
- len -= clen;
- n++;
- }
- *nchar = n;
- if (max >= 0x10000)
- *wchar = 4;
- else if (max > 0x100)
- *wchar = 2;
- else
- *wchar = 1;
- return FcTrue;
-}
-
-int
-FcUcs4ToUtf8 (FcChar32 ucs4,
- FcChar8 dest[FC_UTF8_MAX_LEN])
-{
- int bits;
- FcChar8 *d = dest;
-
- if (ucs4 < 0x80) { *d++= ucs4; bits= -6; }
- else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; }
- else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; }
- else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; }
- else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; }
- else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; }
- else return 0;
-
- for ( ; bits >= 0; bits-= 6) {
- *d++= ((ucs4 >> bits) & 0x3F) | 0x80;
- }
- return d - dest;
-}
-
-#define GetUtf16(src,endian) \
- ((FcChar16) ((src)[endian == FcEndianBig ? 0 : 1] << 8) | \
- (FcChar16) ((src)[endian == FcEndianBig ? 1 : 0]))
-
-int
-FcUtf16ToUcs4 (const FcChar8 *src_orig,
- FcEndian endian,
- FcChar32 *dst,
- int len) /* in bytes */
-{
- const FcChar8 *src = src_orig;
- FcChar16 a, b;
- FcChar32 result;
-
- if (len < 2)
- return 0;
-
- a = GetUtf16 (src, endian); src += 2; len -= 2;
-
- /*
- * Check for surrogate
- */
- if ((a & 0xfc00) == 0xd800)
- {
- if (len < 2)
- return 0;
- b = GetUtf16 (src, endian); src += 2; len -= 2;
- /*
- * Check for invalid surrogate sequence
- */
- if ((b & 0xfc00) != 0xdc00)
- return 0;
- result = ((((FcChar32) a & 0x3ff) << 10) |
- ((FcChar32) b & 0x3ff)) + 0x10000;
- }
- else
- result = a;
- *dst = result;
- return src - src_orig;
-}
-
-FcBool
-FcUtf16Len (const FcChar8 *string,
- FcEndian endian,
- int len, /* in bytes */
- int *nchar,
- int *wchar)
-{
- int n;
- int clen;
- FcChar32 c;
- FcChar32 max;
-
- n = 0;
- max = 0;
- while (len)
- {
- clen = FcUtf16ToUcs4 (string, endian, &c, len);
- if (clen <= 0) /* malformed UTF8 string */
- return FcFalse;
- if (c > max)
- max = c;
- string += clen;
- len -= clen;
- n++;
- }
- *nchar = n;
- if (max >= 0x10000)
- *wchar = 4;
- else if (max > 0x100)
- *wchar = 2;
- else
- *wchar = 1;
- return FcTrue;
-}
-
-void
-FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size)
-{
- if (init)
- {
- buf->buf = init;
- buf->size = size;
- } else
- {
- buf->buf = buf->buf_static;
- buf->size = sizeof (buf->buf_static);
- }
- buf->allocated = FcFalse;
- buf->failed = FcFalse;
- buf->len = 0;
-}
-
-void
-FcStrBufDestroy (FcStrBuf *buf)
-{
- if (buf->allocated)
- {
- FcMemFree (FC_MEM_STRBUF, buf->size);
- free (buf->buf);
- FcStrBufInit (buf, 0, 0);
- }
-}
-
-FcChar8 *
-FcStrBufDone (FcStrBuf *buf)
-{
- FcChar8 *ret;
-
- if (buf->failed)
- ret = NULL;
- else
- ret = malloc (buf->len + 1);
- if (ret)
- {
- FcMemAlloc (FC_MEM_STRING, buf->len + 1);
- memcpy (ret, buf->buf, buf->len);
- ret[buf->len] = '\0';
- }
- FcStrBufDestroy (buf);
- return ret;
-}
-
-FcChar8 *
-FcStrBufDoneStatic (FcStrBuf *buf)
-{
- FcStrBufChar (buf, '\0');
-
- if (buf->failed)
- return NULL;
-
- return buf->buf;
-}
-
-FcBool
-FcStrBufChar (FcStrBuf *buf, FcChar8 c)
-{
- if (buf->len == buf->size)
- {
- FcChar8 *new;
- int size;
-
- if (buf->failed)
- return FcFalse;
-
- if (buf->allocated)
- {
- size = buf->size * 2;
- new = realloc (buf->buf, size);
- }
- else
- {
- size = buf->size + 64;
- new = malloc (size);
- if (new)
- {
- buf->allocated = FcTrue;
- memcpy (new, buf->buf, buf->len);
- }
- }
- if (!new)
- {
- buf->failed = FcTrue;
- return FcFalse;
- }
- if (buf->size)
- FcMemFree (FC_MEM_STRBUF, buf->size);
- FcMemAlloc (FC_MEM_STRBUF, size);
- buf->size = size;
- buf->buf = new;
- }
- buf->buf[buf->len++] = c;
- return FcTrue;
-}
-
-FcBool
-FcStrBufString (FcStrBuf *buf, const FcChar8 *s)
-{
- FcChar8 c;
- while ((c = *s++))
- if (!FcStrBufChar (buf, c))
- return FcFalse;
- return FcTrue;
-}
-
-FcBool
-FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len)
-{
- while (len-- > 0)
- if (!FcStrBufChar (buf, *s++))
- return FcFalse;
- return FcTrue;
-}
-
-FcBool
-FcStrUsesHome (const FcChar8 *s)
-{
- return *s == '~';
-}
-
-FcChar8 *
-FcStrCopyFilename (const FcChar8 *s)
-{
- FcChar8 *new;
-
- if (*s == '~')
- {
- FcChar8 *home = FcConfigHome ();
- FcChar8 *full;
- int size;
- if (!home)
- return 0;
- size = strlen ((char *) home) + strlen ((char *) s);
- full = (FcChar8 *) malloc (size);
- if (!full)
- return 0;
- strcpy ((char *) full, (char *) home);
- strcat ((char *) full, (char *) s + 1);
- new = FcStrCanonFilename (full);
- free (full);
- }
- else
- new = FcStrCanonFilename (s);
- return new;
-}
-
-FcChar8 *
-FcStrLastSlash (const FcChar8 *path)
-{
- FcChar8 *slash;
-
- slash = (FcChar8 *) strrchr ((const char *) path, '/');
-#ifdef _WIN32
- {
- FcChar8 *backslash;
-
- backslash = (FcChar8 *) strrchr ((const char *) path, '\\');
- if (!slash || (backslash && backslash > slash))
- slash = backslash;
- }
-#endif
-
- return slash;
-}
-
-FcChar8 *
-FcStrDirname (const FcChar8 *file)
-{
- FcChar8 *slash;
- FcChar8 *dir;
-
- slash = FcStrLastSlash (file);
- if (!slash)
- return FcStrCopy ((FcChar8 *) ".");
- dir = malloc ((slash - file) + 1);
- if (!dir)
- return 0;
- FcMemAlloc (FC_MEM_STRING, (slash - file) + 1);
- strncpy ((char *) dir, (const char *) file, slash - file);
- dir[slash - file] = '\0';
- return dir;
-}
-
-FcChar8 *
-FcStrBasename (const FcChar8 *file)
-{
- FcChar8 *slash;
-
- slash = FcStrLastSlash (file);
- if (!slash)
- return FcStrCopy (file);
- return FcStrCopy (slash + 1);
-}
-
-static FcChar8 *
-FcStrCanonAbsoluteFilename (const FcChar8 *s)
-{
- FcChar8 *file;
- FcChar8 *f;
- const FcChar8 *slash;
- int size;
-
- size = strlen ((char *) s) + 1;
- file = malloc (size);
- if (!file)
- return NULL;
- FcMemAlloc (FC_MEM_STRING, size);
- slash = NULL;
- f = file;
- for (;;) {
- if (*s == '/' || *s == '\0')
- {
- if (slash)
- {
- switch (s - slash) {
- case 1:
- f -= 1; /* squash // and trim final / from file */
- break;
- case 2:
- if (!strncmp ((char *) slash, "/.", 2))
- {
- f -= 2; /* trim /. from file */
- }
- break;
- case 3:
- if (!strncmp ((char *) slash, "/..", 3))
- {
- f -= 3; /* trim /.. from file */
- while (f > file) {
- if (*--f == '/')
- break;
- }
- }
- break;
- }
- }
- slash = s;
- }
- if (!(*f++ = *s++))
- break;
- }
- return file;
-}
-
-#ifdef _WIN32
-/*
- * Convert '\\' to '/' , remove double '/'
- */
-static void
-FcConvertDosPath (char *str)
-{
- size_t len = strlen (str);
- char *p = str;
- char *dest = str;
- char *end = str + len;
- char last = 0;
-
- if (*p == '\\')
- {
- *p = '/';
- p++;
- dest++;
- }
- while (p < end)
- {
- if (*p == '\\')
- *p = '/';
-
- if (*p != '/'
- || last != '/')
- {
- *dest++ = *p;
- }
-
- last = *p;
- p++;
- }
-
- *dest = 0;
-}
-#endif
-
-FcChar8 *
-FcStrCanonFilename (const FcChar8 *s)
-{
-#ifdef _WIN32
- FcChar8 full[FC_MAX_FILE_LEN + 2];
- int size = GetFullPathName (s, sizeof (full) -1,
- full, NULL);
-
- if (size == 0)
- perror ("GetFullPathName");
-
- FcConvertDosPath (full);
- return FcStrCanonAbsoluteFilename (full);
-#else
- if (s[0] == '/')
- return FcStrCanonAbsoluteFilename (s);
- else
- {
- FcChar8 *full;
- FcChar8 *file;
-
- FcChar8 cwd[FC_MAX_FILE_LEN + 2];
- if (getcwd ((char *) cwd, FC_MAX_FILE_LEN) == NULL)
- return NULL;
- strcat ((char *) cwd, "/");
- full = FcStrPlus (cwd, s);
- file = FcStrCanonAbsoluteFilename (full);
- FcStrFree (full);
- return file;
- }
-#endif
-}
-
-
-FcStrSet *
-FcStrSetCreate (void)
-{
- FcStrSet *set = malloc (sizeof (FcStrSet));
- if (!set)
- return 0;
- FcMemAlloc (FC_MEM_STRSET, sizeof (FcStrSet));
- set->ref = 1;
- set->num = 0;
- set->size = 0;
- set->strs = 0;
- return set;
-}
-
-static FcBool
-_FcStrSetAppend (FcStrSet *set, FcChar8 *s)
-{
- if (FcStrSetMember (set, s))
- {
- FcStrFree (s);
- return FcTrue;
- }
- if (set->num == set->size)
- {
- FcChar8 **strs = malloc ((set->size + 2) * sizeof (FcChar8 *));
-
- if (!strs)
- return FcFalse;
- FcMemAlloc (FC_MEM_STRSET, (set->size + 2) * sizeof (FcChar8 *));
- if (set->num)
- memcpy (strs, set->strs, set->num * sizeof (FcChar8 *));
- if (set->strs)
- {
- FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *));
- free (set->strs);
- }
- set->size = set->size + 1;
- set->strs = strs;
- }
- set->strs[set->num++] = s;
- set->strs[set->num] = 0;
- return FcTrue;
-}
-
-FcBool
-FcStrSetMember (FcStrSet *set, const FcChar8 *s)
-{
- int i;
-
- for (i = 0; i < set->num; i++)
- if (!FcStrCmp (set->strs[i], s))
- return FcTrue;
- return FcFalse;
-}
-
-FcBool
-FcStrSetEqual (FcStrSet *sa, FcStrSet *sb)
-{
- int i;
- if (sa->num != sb->num)
- return FcFalse;
- for (i = 0; i < sa->num; i++)
- if (!FcStrSetMember (sb, sa->strs[i]))
- return FcFalse;
- return FcTrue;
-}
-
-FcBool
-FcStrSetAdd (FcStrSet *set, const FcChar8 *s)
-{
- FcChar8 *new = FcStrCopy (s);
- if (!new)
- return FcFalse;
- if (!_FcStrSetAppend (set, new))
- {
- FcStrFree (new);
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcBool
-FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s)
-{
- FcChar8 *new = FcStrCopyFilename (s);
- if (!new)
- return FcFalse;
- if (!_FcStrSetAppend (set, new))
- {
- FcStrFree (new);
- return FcFalse;
- }
- return FcTrue;
-}
-
-FcBool
-FcStrSetDel (FcStrSet *set, const FcChar8 *s)
-{
- int i;
-
- for (i = 0; i < set->num; i++)
- if (!FcStrCmp (set->strs[i], s))
- {
- FcStrFree (set->strs[i]);
- /*
- * copy remaining string pointers and trailing
- * NULL
- */
- memmove (&set->strs[i], &set->strs[i+1],
- (set->num - i) * sizeof (FcChar8 *));
- set->num--;
- return FcTrue;
- }
- return FcFalse;
-}
-
-void
-FcStrSetDestroy (FcStrSet *set)
-{
- if (--set->ref == 0)
- {
- int i;
-
- for (i = 0; i < set->num; i++)
- FcStrFree (set->strs[i]);
- if (set->strs)
- {
- FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *));
- free (set->strs);
- }
- FcMemFree (FC_MEM_STRSET, sizeof (FcStrSet));
- free (set);
- }
-}
-
-FcStrList *
-FcStrListCreate (FcStrSet *set)
-{
- FcStrList *list;
-
- list = malloc (sizeof (FcStrList));
- if (!list)
- return 0;
- FcMemAlloc (FC_MEM_STRLIST, sizeof (FcStrList));
- list->set = set;
- set->ref++;
- list->n = 0;
- return list;
-}
-
-FcChar8 *
-FcStrListNext (FcStrList *list)
-{
- if (list->n >= list->set->num)
- return 0;
- return list->set->strs[list->n++];
-}
-
-void
-FcStrListDone (FcStrList *list)
-{
- FcStrSetDestroy (list->set);
- FcMemFree (FC_MEM_STRLIST, sizeof (FcStrList));
- free (list);
-}
-
-#define __fcstr__
-#include "fcaliastail.h"
-#undef __fcstr__
+/* + * fontconfig/src/fcstr.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <stdlib.h> +#include <ctype.h> +#include <string.h> +#ifdef _WIN32 +#include <windows.h> +#endif + +FcChar8 * +FcStrCopy (const FcChar8 *s) +{ + int len; + FcChar8 *r; + + if (!s) + return 0; + len = strlen ((char *) s) + 1; + r = (FcChar8 *) malloc (len); + if (!r) + return 0; + FcMemAlloc (FC_MEM_STRING, len); + memcpy (r, s, len); + return r; +} + +FcChar8 * +FcStrPlus (const FcChar8 *s1, const FcChar8 *s2) +{ + int l = strlen ((char *)s1) + strlen ((char *) s2) + 1; + FcChar8 *s = malloc (l); + + if (!s) + return 0; + FcMemAlloc (FC_MEM_STRING, l); + strcpy ((char *) s, (char *) s1); + strcat ((char *) s, (char *) s2); + return s; +} + +void +FcStrFree (FcChar8 *s) +{ + FcMemFree (FC_MEM_STRING, strlen ((char *) s) + 1); + free (s); +} + + +#include "../fc-case/fccase.h" + +#define FcCaseFoldUpperCount(cf) \ + ((cf)->method == FC_CASE_FOLD_FULL ? 1 : (cf)->count) + +#define FC_STR_CANON_BUF_LEN 1024 + +typedef struct _FcCaseWalker { + const FcChar8 *read; + const FcChar8 *src; + FcChar8 utf8[FC_MAX_CASE_FOLD_CHARS + 1]; +} FcCaseWalker; + +static void +FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w) +{ + w->src = src; + w->read = 0; +} + +static FcChar8 +FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r) +{ + FcChar32 ucs4; + int slen; + int len = strlen((char*)w->src); + + slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, len + 1); + if (slen <= 0) + return r; + if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR) + { + int min = 0; + int max = FC_NUM_CASE_FOLD; + + while (min <= max) + { + int mid = (min + max) >> 1; + FcChar32 low = fcCaseFold[mid].upper; + FcChar32 high = low + FcCaseFoldUpperCount (&fcCaseFold[mid]); + + if (high <= ucs4) + min = mid + 1; + else if (ucs4 < low) + max = mid - 1; + else + { + const FcCaseFold *fold = &fcCaseFold[mid]; + int dlen; + + switch (fold->method) { + case FC_CASE_FOLD_EVEN_ODD: + if ((ucs4 & 1) != (fold->upper & 1)) + return r; + /* fall through ... */ + default: + dlen = FcUcs4ToUtf8 (ucs4 + fold->offset, w->utf8); + break; + case FC_CASE_FOLD_FULL: + dlen = fold->count; + memcpy (w->utf8, fcCaseFoldChars + fold->offset, dlen); + break; + } + + /* consume rest of src utf-8 bytes */ + w->src += slen - 1; + + /* read from temp buffer */ + w->utf8[dlen] = '\0'; + w->read = w->utf8; + return *w->read++; + } + } + } + return r; +} + +static FcChar8 +FcStrCaseWalkerNext (FcCaseWalker *w) +{ + FcChar8 r; + + if (w->read) + { + if ((r = *w->read++)) + return r; + w->read = 0; + } + r = *w->src++; + + if ((r & 0xc0) == 0xc0) + return FcStrCaseWalkerLong (w, r); + if ('A' <= r && r <= 'Z') + r = r - 'A' + 'a'; + return r; +} + +static FcChar8 +FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w) +{ + FcChar8 r; + + if (w->read) + { + if ((r = *w->read++)) + return r; + w->read = 0; + } + do + { + r = *w->src++; + } while (r == ' '); + + if ((r & 0xc0) == 0xc0) + return FcStrCaseWalkerLong (w, r); + if ('A' <= r && r <= 'Z') + r = r - 'A' + 'a'; + return r; +} + +FcChar8 * +FcStrDowncase (const FcChar8 *s) +{ + FcCaseWalker w; + int len = 0; + FcChar8 *dst, *d; + + FcStrCaseWalkerInit (s, &w); + while (FcStrCaseWalkerNext (&w)) + len++; + d = dst = malloc (len + 1); + if (!d) + return 0; + FcMemAlloc (FC_MEM_STRING, len + 1); + FcStrCaseWalkerInit (s, &w); + while ((*d++ = FcStrCaseWalkerNext (&w))); + return dst; +} + +int +FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + + if (s1 == s2) return 0; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + for (;;) + { + c1 = FcStrCaseWalkerNext (&w1); + c2 = FcStrCaseWalkerNext (&w2); + if (!c1 || (c1 != c2)) + break; + } + return (int) c1 - (int) c2; +} + +int +FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + + if (s1 == s2) return 0; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + for (;;) + { + c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1); + c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2); + if (!c1 || (c1 != c2)) + break; + } + return (int) c1 - (int) c2; +} + +int +FcStrCmp (const FcChar8 *s1, const FcChar8 *s2) +{ + FcChar8 c1, c2; + + if (s1 == s2) + return 0; + for (;;) + { + c1 = *s1++; + c2 = *s2++; + if (!c1 || c1 != c2) + break; + } + return (int) c1 - (int) c2; +} + +/* + * Return a hash value for a string + */ + +FcChar32 +FcStrHashIgnoreCase (const FcChar8 *s) +{ + FcChar32 h = 0; + FcCaseWalker w; + FcChar8 c; + + FcStrCaseWalkerInit (s, &w); + while ((c = FcStrCaseWalkerNext (&w))) + h = ((h << 3) ^ (h >> 3)) ^ c; + return h; +} + +/* + * Is the head of s1 equal to s2? + */ + +static FcBool +FcStrIsAtIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + for (;;) + { + c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1); + c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2); + if (!c1 || (c1 != c2)) + break; + } + return c1 == c2 || !c2; +} + +/* + * Does s1 contain an instance of s2 (ignoring blanks and case)? + */ + +const FcChar8 * +FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) +{ + while (*s1) + { + if (FcStrIsAtIgnoreBlanksAndCase (s1, s2)) + return s1; + s1++; + } + return 0; +} + +static FcBool +FcCharIsPunct (const FcChar8 c) +{ + if (c < '0') + return FcTrue; + if (c <= '9') + return FcFalse; + if (c < 'A') + return FcTrue; + if (c <= 'Z') + return FcFalse; + if (c < 'a') + return FcTrue; + if (c <= 'z') + return FcFalse; + if (c <= '~') + return FcTrue; + return FcFalse; +} + +/* + * Is the head of s1 equal to s2? + */ + +static FcBool +FcStrIsAtIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + for (;;) + { + c1 = FcStrCaseWalkerNext (&w1); + c2 = FcStrCaseWalkerNext (&w2); + if (!c1 || (c1 != c2)) + break; + } + return c1 == c2 || !c2; +} + +/* + * Does s1 contain an instance of s2 (ignoring blanks and case)? + */ + +const FcChar8 * +FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) +{ + while (*s1) + { + if (FcStrIsAtIgnoreCase (s1, s2)) + return s1; + s1++; + } + return 0; +} + +/* + * Does s1 contain an instance of s2 on a word boundary (ignoring case)? + */ + +const FcChar8 * +FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2) +{ + FcBool wordStart = FcTrue; + int s1len = strlen ((char *) s1); + int s2len = strlen ((char *) s2); + + while (s1len >= s2len) + { + if (wordStart && + FcStrIsAtIgnoreCase (s1, s2) && + (s1len == s2len || FcCharIsPunct (s1[s2len]))) + { + return s1; + } + wordStart = FcFalse; + if (FcCharIsPunct (*s1)) + wordStart = FcTrue; + s1++; + s1len--; + } + return 0; +} + +const FcChar8 * +FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + const FcChar8 *cur; + + if (!s1 || !s2) + return 0; + + if (s1 == s2) + return s1; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + c2 = FcStrCaseWalkerNext (&w2); + + for (;;) + { + cur = w1.src; + c1 = FcStrCaseWalkerNext (&w1); + if (!c1) + break; + if (c1 == c2) + { + FcCaseWalker w1t = w1; + FcCaseWalker w2t = w2; + FcChar8 c1t, c2t; + + for (;;) + { + c1t = FcStrCaseWalkerNext (&w1t); + c2t = FcStrCaseWalkerNext (&w2t); + + if (!c2t) + return cur; + if (c2t != c1t) + break; + } + } + } + return 0; +} + +const FcChar8 * +FcStrStr (const FcChar8 *s1, const FcChar8 *s2) +{ + FcChar8 c1, c2; + const FcChar8 * p = s1; + const FcChar8 * b = s2; + + if (!s1 || !s2) + return 0; + + if (s1 == s2) + return s1; + +again: + c2 = *s2++; + + if (!c2) + return 0; + + for (;;) + { + p = s1; + c1 = *s1++; + if (!c1 || c1 == c2) + break; + } + + if (c1 != c2) + return 0; + + for (;;) + { + c1 = *s1; + c2 = *s2; + if (c1 && c2 && c1 != c2) + { + s1 = p + 1; + s2 = b; + goto again; + } + if (!c2) + return p; + if (!c1) + return 0; + ++ s1; + ++ s2; + } + /* never reached. */ +} + +int +FcUtf8ToUcs4 (const FcChar8 *src_orig, + FcChar32 *dst, + int len) +{ + const FcChar8 *src = src_orig; + FcChar8 s; + int extra; + FcChar32 result; + + if (len == 0) + return 0; + + s = *src++; + len--; + + if (!(s & 0x80)) + { + result = s; + extra = 0; + } + else if (!(s & 0x40)) + { + return -1; + } + else if (!(s & 0x20)) + { + result = s & 0x1f; + extra = 1; + } + else if (!(s & 0x10)) + { + result = s & 0xf; + extra = 2; + } + else if (!(s & 0x08)) + { + result = s & 0x07; + extra = 3; + } + else if (!(s & 0x04)) + { + result = s & 0x03; + extra = 4; + } + else if ( ! (s & 0x02)) + { + result = s & 0x01; + extra = 5; + } + else + { + return -1; + } + if (extra > len) + return -1; + + while (extra--) + { + result <<= 6; + s = *src++; + + if ((s & 0xc0) != 0x80) + return -1; + + result |= s & 0x3f; + } + *dst = result; + return src - src_orig; +} + +FcBool +FcUtf8Len (const FcChar8 *string, + int len, + int *nchar, + int *wchar) +{ + int n; + int clen; + FcChar32 c; + FcChar32 max; + + n = 0; + max = 0; + while (len) + { + clen = FcUtf8ToUcs4 (string, &c, len); + if (clen <= 0) /* malformed UTF8 string */ + return FcFalse; + if (c > max) + max = c; + string += clen; + len -= clen; + n++; + } + *nchar = n; + if (max >= 0x10000) + *wchar = 4; + else if (max > 0x100) + *wchar = 2; + else + *wchar = 1; + return FcTrue; +} + +int +FcUcs4ToUtf8 (FcChar32 ucs4, + FcChar8 dest[FC_UTF8_MAX_LEN]) +{ + int bits; + FcChar8 *d = dest; + + if (ucs4 < 0x80) { *d++= ucs4; bits= -6; } + else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; } + else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; } + else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; } + else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; } + else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; } + else return 0; + + for ( ; bits >= 0; bits-= 6) { + *d++= ((ucs4 >> bits) & 0x3F) | 0x80; + } + return d - dest; +} + +#define GetUtf16(src,endian) \ + ((FcChar16) ((src)[endian == FcEndianBig ? 0 : 1] << 8) | \ + (FcChar16) ((src)[endian == FcEndianBig ? 1 : 0])) + +int +FcUtf16ToUcs4 (const FcChar8 *src_orig, + FcEndian endian, + FcChar32 *dst, + int len) /* in bytes */ +{ + const FcChar8 *src = src_orig; + FcChar16 a, b; + FcChar32 result; + + if (len < 2) + return 0; + + a = GetUtf16 (src, endian); src += 2; len -= 2; + + /* + * Check for surrogate + */ + if ((a & 0xfc00) == 0xd800) + { + if (len < 2) + return 0; + b = GetUtf16 (src, endian); src += 2; len -= 2; + /* + * Check for invalid surrogate sequence + */ + if ((b & 0xfc00) != 0xdc00) + return 0; + result = ((((FcChar32) a & 0x3ff) << 10) | + ((FcChar32) b & 0x3ff)) + 0x10000; + } + else + result = a; + *dst = result; + return src - src_orig; +} + +FcBool +FcUtf16Len (const FcChar8 *string, + FcEndian endian, + int len, /* in bytes */ + int *nchar, + int *wchar) +{ + int n; + int clen; + FcChar32 c; + FcChar32 max; + + n = 0; + max = 0; + while (len) + { + clen = FcUtf16ToUcs4 (string, endian, &c, len); + if (clen <= 0) /* malformed UTF8 string */ + return FcFalse; + if (c > max) + max = c; + string += clen; + len -= clen; + n++; + } + *nchar = n; + if (max >= 0x10000) + *wchar = 4; + else if (max > 0x100) + *wchar = 2; + else + *wchar = 1; + return FcTrue; +} + +void +FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size) +{ + if (init) + { + buf->buf = init; + buf->size = size; + } else + { + buf->buf = buf->buf_static; + buf->size = sizeof (buf->buf_static); + } + buf->allocated = FcFalse; + buf->failed = FcFalse; + buf->len = 0; +} + +void +FcStrBufDestroy (FcStrBuf *buf) +{ + if (buf->allocated) + { + FcMemFree (FC_MEM_STRBUF, buf->size); + free (buf->buf); + FcStrBufInit (buf, 0, 0); + } +} + +FcChar8 * +FcStrBufDone (FcStrBuf *buf) +{ + FcChar8 *ret; + + if (buf->failed) + ret = NULL; + else + ret = malloc (buf->len + 1); + if (ret) + { + FcMemAlloc (FC_MEM_STRING, buf->len + 1); + memcpy (ret, buf->buf, buf->len); + ret[buf->len] = '\0'; + } + FcStrBufDestroy (buf); + return ret; +} + +FcChar8 * +FcStrBufDoneStatic (FcStrBuf *buf) +{ + FcStrBufChar (buf, '\0'); + + if (buf->failed) + return NULL; + + return buf->buf; +} + +FcBool +FcStrBufChar (FcStrBuf *buf, FcChar8 c) +{ + if (buf->len == buf->size) + { + FcChar8 *new; + int size; + + if (buf->failed) + return FcFalse; + + if (buf->allocated) + { + size = buf->size * 2; + new = realloc (buf->buf, size); + } + else + { + size = buf->size + 64; + new = malloc (size); + if (new) + { + buf->allocated = FcTrue; + memcpy (new, buf->buf, buf->len); + } + } + if (!new) + { + buf->failed = FcTrue; + return FcFalse; + } + if (buf->size) + FcMemFree (FC_MEM_STRBUF, buf->size); + FcMemAlloc (FC_MEM_STRBUF, size); + buf->size = size; + buf->buf = new; + } + buf->buf[buf->len++] = c; + return FcTrue; +} + +FcBool +FcStrBufString (FcStrBuf *buf, const FcChar8 *s) +{ + FcChar8 c; + while ((c = *s++)) + if (!FcStrBufChar (buf, c)) + return FcFalse; + return FcTrue; +} + +FcBool +FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len) +{ + while (len-- > 0) + if (!FcStrBufChar (buf, *s++)) + return FcFalse; + return FcTrue; +} + +FcBool +FcStrUsesHome (const FcChar8 *s) +{ + return *s == '~'; +} + +FcChar8 * +FcStrCopyFilename (const FcChar8 *s) +{ + FcChar8 *new; + + if (*s == '~') + { + FcChar8 *home = FcConfigHome (); + FcChar8 *full; + int size; + if (!home) + return 0; + size = strlen ((char *) home) + strlen ((char *) s); + full = (FcChar8 *) malloc (size); + if (!full) + return 0; + strcpy ((char *) full, (char *) home); + strcat ((char *) full, (char *) s + 1); + new = FcStrCanonFilename (full); + free (full); + } + else + new = FcStrCanonFilename (s); + return new; +} + +FcChar8 * +FcStrLastSlash (const FcChar8 *path) +{ + FcChar8 *slash; + + slash = (FcChar8 *) strrchr ((const char *) path, '/'); +#ifdef _WIN32 + { + FcChar8 *backslash; + + backslash = (FcChar8 *) strrchr ((const char *) path, '\\'); + if (!slash || (backslash && backslash > slash)) + slash = backslash; + } +#endif + + return slash; +} + +FcChar8 * +FcStrDirname (const FcChar8 *file) +{ + FcChar8 *slash; + FcChar8 *dir; + + slash = FcStrLastSlash (file); + if (!slash) + return FcStrCopy ((FcChar8 *) "."); + dir = malloc ((slash - file) + 1); + if (!dir) + return 0; + FcMemAlloc (FC_MEM_STRING, (slash - file) + 1); + strncpy ((char *) dir, (const char *) file, slash - file); + dir[slash - file] = '\0'; + return dir; +} + +FcChar8 * +FcStrBasename (const FcChar8 *file) +{ + FcChar8 *slash; + + slash = FcStrLastSlash (file); + if (!slash) + return FcStrCopy (file); + return FcStrCopy (slash + 1); +} + +static FcChar8 * +FcStrCanonAbsoluteFilename (const FcChar8 *s) +{ + FcChar8 *file; + FcChar8 *f; + const FcChar8 *slash; + int size; + + size = strlen ((char *) s) + 1; + file = malloc (size); + if (!file) + return NULL; + FcMemAlloc (FC_MEM_STRING, size); + slash = NULL; + f = file; + for (;;) { + if (*s == '/' || *s == '\0') + { + if (slash) + { + switch (s - slash) { + case 1: + f -= 1; /* squash // and trim final / from file */ + break; + case 2: + if (!strncmp ((char *) slash, "/.", 2)) + { + f -= 2; /* trim /. from file */ + } + break; + case 3: + if (!strncmp ((char *) slash, "/..", 3)) + { + f -= 3; /* trim /.. from file */ + while (f > file) { + if (*--f == '/') + break; + } + } + break; + } + } + slash = s; + } + if (!(*f++ = *s++)) + break; + } + return file; +} + +#ifdef _WIN32 +/* + * Convert '\\' to '/' , remove double '/' + */ +static void +FcConvertDosPath (char *str) +{ + size_t len = strlen (str); + char *p = str; + char *dest = str; + char *end = str + len; + char last = 0; + + if (*p == '\\') + { + *p = '/'; + p++; + dest++; + } + while (p < end) + { + if (*p == '\\') + *p = '/'; + + if (*p != '/' + || last != '/') + { + *dest++ = *p; + } + + last = *p; + p++; + } + + *dest = 0; +} +#endif + +FcChar8 * +FcStrCanonFilename (const FcChar8 *s) +{ +#ifdef _WIN32 + FcChar8 full[FC_MAX_FILE_LEN + 2]; + int size = GetFullPathName (s, sizeof (full) -1, + full, NULL); + + if (size == 0) + perror ("GetFullPathName"); + + FcConvertDosPath (full); + return FcStrCanonAbsoluteFilename (full); +#else + if (s[0] == '/') + return FcStrCanonAbsoluteFilename (s); + else + { + FcChar8 *full; + FcChar8 *file; + + FcChar8 cwd[FC_MAX_FILE_LEN + 2]; + if (getcwd ((char *) cwd, FC_MAX_FILE_LEN) == NULL) + return NULL; + strcat ((char *) cwd, "/"); + full = FcStrPlus (cwd, s); + file = FcStrCanonAbsoluteFilename (full); + FcStrFree (full); + return file; + } +#endif +} + + +FcStrSet * +FcStrSetCreate (void) +{ + FcStrSet *set = malloc (sizeof (FcStrSet)); + if (!set) + return 0; + FcMemAlloc (FC_MEM_STRSET, sizeof (FcStrSet)); + set->ref = 1; + set->num = 0; + set->size = 0; + set->strs = 0; + return set; +} + +static FcBool +_FcStrSetAppend (FcStrSet *set, FcChar8 *s) +{ + if (FcStrSetMember (set, s)) + { + FcStrFree (s); + return FcTrue; + } + if (set->num == set->size) + { + FcChar8 **strs = malloc ((set->size + 2) * sizeof (FcChar8 *)); + + if (!strs) + return FcFalse; + FcMemAlloc (FC_MEM_STRSET, (set->size + 2) * sizeof (FcChar8 *)); + if (set->num) + memcpy (strs, set->strs, set->num * sizeof (FcChar8 *)); + if (set->strs) + { + FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *)); + free (set->strs); + } + set->size = set->size + 1; + set->strs = strs; + } + set->strs[set->num++] = s; + set->strs[set->num] = 0; + return FcTrue; +} + +FcBool +FcStrSetMember (FcStrSet *set, const FcChar8 *s) +{ + int i; + + for (i = 0; i < set->num; i++) + if (!FcStrCmp (set->strs[i], s)) + return FcTrue; + return FcFalse; +} + +FcBool +FcStrSetEqual (FcStrSet *sa, FcStrSet *sb) +{ + int i; + if (sa->num != sb->num) + return FcFalse; + for (i = 0; i < sa->num; i++) + if (!FcStrSetMember (sb, sa->strs[i])) + return FcFalse; + return FcTrue; +} + +FcBool +FcStrSetAdd (FcStrSet *set, const FcChar8 *s) +{ + FcChar8 *new = FcStrCopy (s); + if (!new) + return FcFalse; + if (!_FcStrSetAppend (set, new)) + { + FcStrFree (new); + return FcFalse; + } + return FcTrue; +} + +FcBool +FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s) +{ + FcChar8 *new = FcStrCopyFilename (s); + if (!new) + return FcFalse; + if (!_FcStrSetAppend (set, new)) + { + FcStrFree (new); + return FcFalse; + } + return FcTrue; +} + +FcBool +FcStrSetDel (FcStrSet *set, const FcChar8 *s) +{ + int i; + + for (i = 0; i < set->num; i++) + if (!FcStrCmp (set->strs[i], s)) + { + FcStrFree (set->strs[i]); + /* + * copy remaining string pointers and trailing + * NULL + */ + memmove (&set->strs[i], &set->strs[i+1], + (set->num - i) * sizeof (FcChar8 *)); + set->num--; + return FcTrue; + } + return FcFalse; +} + +void +FcStrSetDestroy (FcStrSet *set) +{ + if (--set->ref == 0) + { + int i; + + for (i = 0; i < set->num; i++) + FcStrFree (set->strs[i]); + if (set->strs) + { + FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *)); + free (set->strs); + } + FcMemFree (FC_MEM_STRSET, sizeof (FcStrSet)); + free (set); + } +} + +FcStrList * +FcStrListCreate (FcStrSet *set) +{ + FcStrList *list; + + list = malloc (sizeof (FcStrList)); + if (!list) + return 0; + FcMemAlloc (FC_MEM_STRLIST, sizeof (FcStrList)); + list->set = set; + set->ref++; + list->n = 0; + return list; +} + +FcChar8 * +FcStrListNext (FcStrList *list) +{ + if (list->n >= list->set->num) + return 0; + return list->set->strs[list->n++]; +} + +void +FcStrListDone (FcStrList *list) +{ + FcStrSetDestroy (list->set); + FcMemFree (FC_MEM_STRLIST, sizeof (FcStrList)); + free (list); +} + +#define __fcstr__ +#include "fcaliastail.h" +#undef __fcstr__ diff --git a/fontconfig/src/fcxml.c b/fontconfig/src/fcxml.c index 5c4e9bf24..e0bb72874 100644 --- a/fontconfig/src/fcxml.c +++ b/fontconfig/src/fcxml.c @@ -1,2807 +1,2807 @@ -/*
- * fontconfig/src/fcxml.c
- *
- * Copyright © 2002 Keith Packard
- *
- * Permission to use, copy, modify, distribute, and sell this software and its
- * documentation for any purpose is hereby granted without fee, provided that
- * the above copyright notice appear in all copies and that both that
- * copyright notice and this permission notice appear in supporting
- * documentation, and that the name of the author(s) not be used in
- * advertising or publicity pertaining to distribution of the software without
- * specific, written prior permission. The authors make no
- * representations about the suitability of this software for any purpose. It
- * is provided "as is" without express or implied warranty.
- *
- * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
- * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
- * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR
- * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
- * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
- * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- * PERFORMANCE OF THIS SOFTWARE.
- */
-
-#include "fcint.h"
-#include <fcntl.h>
-#include <stdarg.h>
-#include <dirent.h>
-
-#ifdef ENABLE_LIBXML2
-
-#include <libxml/parser.h>
-
-#define XML_Char xmlChar
-#define XML_Parser xmlParserCtxtPtr
-#define XML_ParserFree xmlFreeParserCtxt
-#define XML_GetCurrentLineNumber xmlSAX2GetLineNumber
-#define XML_GetErrorCode xmlCtxtGetLastError
-#define XML_ErrorString(Error) (Error)->message
-
-#else /* ENABLE_LIBXML2 */
-
-#ifndef HAVE_XMLPARSE_H
-#define HAVE_XMLPARSE_H 0
-#endif
-
-#if HAVE_XMLPARSE_H
-#include <xmlparse.h>
-#else
-#include <expat.h>
-#endif
-
-#endif /* ENABLE_LIBXML2 */
-
-#ifdef _WIN32
-#include <mbstring.h>
-#endif
-
-static void
-FcExprDestroy (FcExpr *e);
-
-void
-FcTestDestroy (FcTest *test)
-{
- if (test->next)
- FcTestDestroy (test->next);
- FcExprDestroy (test->expr);
- FcMemFree (FC_MEM_TEST, sizeof (FcTest));
- free (test);
-}
-
-static FcExpr *
-FcExprCreateInteger (FcConfig *config, int i)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpInteger;
- e->u.ival = i;
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateDouble (FcConfig *config, double d)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpDouble;
- e->u.dval = d;
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateString (FcConfig *config, const FcChar8 *s)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpString;
- e->u.sval = FcStrStaticName (s);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateMatrix (FcConfig *config, const FcMatrix *m)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpMatrix;
- e->u.mval = FcMatrixCopy (m);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateBool (FcConfig *config, FcBool b)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpBool;
- e->u.bval = b;
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateCharSet (FcConfig *config, FcCharSet *charset)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpCharSet;
- e->u.cval = FcCharSetCopy (charset);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateLangSet (FcConfig *config, FcLangSet *langset)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpLangSet;
- e->u.lval = FcLangSetCopy (langset);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateField (FcConfig *config, const char *field)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpField;
- e->u.object = FcObjectFromName (field);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateConst (FcConfig *config, const FcChar8 *constant)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = FcOpConst;
- e->u.constant = FcStrStaticName (constant);
- }
- return e;
-}
-
-static FcExpr *
-FcExprCreateOp (FcConfig *config, FcExpr *left, FcOp op, FcExpr *right)
-{
- FcExpr *e = FcConfigAllocExpr (config);
- if (e)
- {
- e->op = op;
- e->u.tree.left = left;
- e->u.tree.right = right;
- }
- return e;
-}
-
-static void
-FcExprDestroy (FcExpr *e)
-{
- if (!e)
- return;
- switch (e->op) {
- case FcOpInteger:
- break;
- case FcOpDouble:
- break;
- case FcOpString:
- break;
- case FcOpMatrix:
- FcMatrixFree (e->u.mval);
- break;
- case FcOpRange:
- break;
- case FcOpCharSet:
- FcCharSetDestroy (e->u.cval);
- break;
- case FcOpLangSet:
- FcLangSetDestroy (e->u.lval);
- break;
- case FcOpBool:
- break;
- case FcOpField:
- break;
- case FcOpConst:
- break;
- case FcOpAssign:
- case FcOpAssignReplace:
- case FcOpPrepend:
- case FcOpPrependFirst:
- case FcOpAppend:
- case FcOpAppendLast:
- break;
- case FcOpOr:
- case FcOpAnd:
- case FcOpEqual:
- case FcOpNotEqual:
- case FcOpLess:
- case FcOpLessEqual:
- case FcOpMore:
- case FcOpMoreEqual:
- case FcOpContains:
- case FcOpListing:
- case FcOpNotContains:
- case FcOpPlus:
- case FcOpMinus:
- case FcOpTimes:
- case FcOpDivide:
- case FcOpQuest:
- case FcOpComma:
- FcExprDestroy (e->u.tree.right);
- /* fall through */
- case FcOpNot:
- case FcOpFloor:
- case FcOpCeil:
- case FcOpRound:
- case FcOpTrunc:
- FcExprDestroy (e->u.tree.left);
- break;
- case FcOpNil:
- case FcOpInvalid:
- break;
- }
-
- e->op = FcOpNil;
-}
-
-void
-FcEditDestroy (FcEdit *e)
-{
- if (e->next)
- FcEditDestroy (e->next);
- if (e->expr)
- FcExprDestroy (e->expr);
- free (e);
-}
-
-typedef enum _FcElement {
- FcElementNone,
- FcElementFontconfig,
- FcElementDir,
- FcElementCacheDir,
- FcElementCache,
- FcElementInclude,
- FcElementConfig,
- FcElementMatch,
- FcElementAlias,
-
- FcElementBlank,
- FcElementRescan,
-
- FcElementPrefer,
- FcElementAccept,
- FcElementDefault,
- FcElementFamily,
-
- FcElementSelectfont,
- FcElementAcceptfont,
- FcElementRejectfont,
- FcElementGlob,
- FcElementPattern,
- FcElementPatelt,
-
- FcElementTest,
- FcElementEdit,
- FcElementInt,
- FcElementDouble,
- FcElementString,
- FcElementMatrix,
- FcElementRange,
- FcElementBool,
- FcElementCharSet,
- FcElementLangSet,
- FcElementName,
- FcElementConst,
- FcElementOr,
- FcElementAnd,
- FcElementEq,
- FcElementNotEq,
- FcElementLess,
- FcElementLessEq,
- FcElementMore,
- FcElementMoreEq,
- FcElementContains,
- FcElementNotContains,
- FcElementPlus,
- FcElementMinus,
- FcElementTimes,
- FcElementDivide,
- FcElementNot,
- FcElementIf,
- FcElementFloor,
- FcElementCeil,
- FcElementRound,
- FcElementTrunc,
- FcElementUnknown
-} FcElement;
-
-static const struct {
- const char name[16];
- FcElement element;
-} fcElementMap[] = {
- { "fontconfig", FcElementFontconfig },
- { "dir", FcElementDir },
- { "cachedir", FcElementCacheDir },
- { "cache", FcElementCache },
- { "include", FcElementInclude },
- { "config", FcElementConfig },
- { "match", FcElementMatch },
- { "alias", FcElementAlias },
-
- { "blank", FcElementBlank },
- { "rescan", FcElementRescan },
-
- { "prefer", FcElementPrefer },
- { "accept", FcElementAccept },
- { "default", FcElementDefault },
- { "family", FcElementFamily },
-
- { "selectfont", FcElementSelectfont },
- { "acceptfont", FcElementAcceptfont },
- { "rejectfont", FcElementRejectfont },
- { "glob", FcElementGlob },
- { "pattern", FcElementPattern },
- { "patelt", FcElementPatelt },
-
- { "test", FcElementTest },
- { "edit", FcElementEdit },
- { "int", FcElementInt },
- { "double", FcElementDouble },
- { "string", FcElementString },
- { "matrix", FcElementMatrix },
- { "range", FcElementRange },
- { "bool", FcElementBool },
- { "charset", FcElementCharSet },
- { "langset", FcElementLangSet },
- { "name", FcElementName },
- { "const", FcElementConst },
- { "or", FcElementOr },
- { "and", FcElementAnd },
- { "eq", FcElementEq },
- { "not_eq", FcElementNotEq },
- { "less", FcElementLess },
- { "less_eq", FcElementLessEq },
- { "more", FcElementMore },
- { "more_eq", FcElementMoreEq },
- { "contains", FcElementContains },
- { "not_contains", FcElementNotContains },
- { "plus", FcElementPlus },
- { "minus", FcElementMinus },
- { "times", FcElementTimes },
- { "divide", FcElementDivide },
- { "not", FcElementNot },
- { "if", FcElementIf },
- { "floor", FcElementFloor },
- { "ceil", FcElementCeil },
- { "round", FcElementRound },
- { "trunc", FcElementTrunc },
-};
-#define NUM_ELEMENT_MAPS (int) (sizeof fcElementMap / sizeof fcElementMap[0])
-
-static FcElement
-FcElementMap (const XML_Char *name)
-{
-
- int i;
- for (i = 0; i < NUM_ELEMENT_MAPS; i++)
- if (!strcmp ((char *) name, fcElementMap[i].name))
- return fcElementMap[i].element;
- return FcElementUnknown;
-}
-
-typedef struct _FcPStack {
- struct _FcPStack *prev;
- FcElement element;
- FcChar8 **attr;
- FcStrBuf str;
- FcChar8 *attr_buf_static[16];
-} FcPStack;
-
-typedef enum _FcVStackTag {
- FcVStackNone,
-
- FcVStackString,
- FcVStackFamily,
- FcVStackField,
- FcVStackConstant,
- FcVStackGlob,
- FcVStackPattern,
-
- FcVStackPrefer,
- FcVStackAccept,
- FcVStackDefault,
-
- FcVStackInteger,
- FcVStackDouble,
- FcVStackMatrix,
- FcVStackRange,
- FcVStackBool,
- FcVStackCharSet,
- FcVStackLangSet,
-
- FcVStackTest,
- FcVStackExpr,
- FcVStackEdit
-} FcVStackTag;
-
-typedef struct _FcVStack {
- struct _FcVStack *prev;
- FcPStack *pstack; /* related parse element */
- FcVStackTag tag;
- union {
- FcChar8 *string;
-
- int integer;
- double _double;
- FcMatrix *matrix;
- FcRange range;
- FcBool bool_;
- FcCharSet *charset;
- FcLangSet *langset;
-
- FcTest *test;
- FcQual qual;
- FcOp op;
- FcExpr *expr;
- FcEdit *edit;
-
- FcPattern *pattern;
- } u;
-} FcVStack;
-
-typedef struct _FcConfigParse {
- FcPStack *pstack;
- FcVStack *vstack;
- FcBool error;
- const FcChar8 *name;
- FcConfig *config;
- XML_Parser parser;
- int pstack_static_used;
- FcPStack pstack_static[8];
- int vstack_static_used;
- FcVStack vstack_static[64];
-} FcConfigParse;
-
-typedef enum _FcConfigSeverity {
- FcSevereInfo, FcSevereWarning, FcSevereError
-} FcConfigSeverity;
-
-static void
-FcConfigMessage (FcConfigParse *parse, FcConfigSeverity severe, const char *fmt, ...)
-{
- const char *s = "unknown";
- va_list args;
-
- va_start (args, fmt);
-
- switch (severe) {
- case FcSevereInfo: s = "info"; break;
- case FcSevereWarning: s = "warning"; break;
- case FcSevereError: s = "error"; break;
- }
- if (parse)
- {
- if (parse->name)
- fprintf (stderr, "Fontconfig %s: \"%s\", line %d: ", s,
- parse->name, (int)XML_GetCurrentLineNumber (parse->parser));
- else
- fprintf (stderr, "Fontconfig %s: line %d: ", s,
- (int)XML_GetCurrentLineNumber (parse->parser));
- if (severe >= FcSevereError)
- parse->error = FcTrue;
- }
- else
- fprintf (stderr, "Fontconfig %s: ", s);
- vfprintf (stderr, fmt, args);
- fprintf (stderr, "\n");
- va_end (args);
-}
-
-
-static const char *
-FcTypeName (FcType type)
-{
- switch (type) {
- case FcTypeVoid:
- return "void";
- case FcTypeInteger:
- case FcTypeDouble:
- return "number";
- case FcTypeString:
- return "string";
- case FcTypeBool:
- return "bool";
- case FcTypeMatrix:
- return "matrix";
- case FcTypeCharSet:
- return "charset";
- case FcTypeFTFace:
- return "FT_Face";
- case FcTypeLangSet:
- return "langset";
- default:
- return "unknown";
- }
-}
-
-static void
-FcTypecheckValue (FcConfigParse *parse, FcType value, FcType type)
-{
- if (value == FcTypeInteger)
- value = FcTypeDouble;
- if (type == FcTypeInteger)
- type = FcTypeDouble;
- if (value != type)
- {
- if ((value == FcTypeLangSet && type == FcTypeString) ||
- (value == FcTypeString && type == FcTypeLangSet))
- return;
- if (type == (FcType) -1)
- return;
- FcConfigMessage (parse, FcSevereWarning, "saw %s, expected %s",
- FcTypeName (value), FcTypeName (type));
- }
-}
-
-static void
-FcTypecheckExpr (FcConfigParse *parse, FcExpr *expr, FcType type)
-{
- const FcObjectType *o;
- const FcConstant *c;
-
- /* If parsing the expression failed, some nodes may be NULL */
- if (!expr)
- return;
-
- switch (expr->op) {
- case FcOpInteger:
- case FcOpDouble:
- FcTypecheckValue (parse, FcTypeDouble, type);
- break;
- case FcOpString:
- FcTypecheckValue (parse, FcTypeString, type);
- break;
- case FcOpMatrix:
- FcTypecheckValue (parse, FcTypeMatrix, type);
- break;
- case FcOpBool:
- FcTypecheckValue (parse, FcTypeBool, type);
- break;
- case FcOpCharSet:
- FcTypecheckValue (parse, FcTypeCharSet, type);
- break;
- case FcOpLangSet:
- FcTypecheckValue (parse, FcTypeLangSet, type);
- break;
- case FcOpNil:
- break;
- case FcOpField:
- o = FcNameGetObjectType (FcObjectName (expr->u.object));
- if (o)
- FcTypecheckValue (parse, o->type, type);
- break;
- case FcOpConst:
- c = FcNameGetConstant (expr->u.constant);
- if (c)
- {
- o = FcNameGetObjectType (c->object);
- if (o)
- FcTypecheckValue (parse, o->type, type);
- }
- else
- FcConfigMessage (parse, FcSevereWarning,
- "invalid constant used : %s",
- expr->u.constant);
- break;
- case FcOpQuest:
- FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool);
- FcTypecheckExpr (parse, expr->u.tree.right->u.tree.left, type);
- FcTypecheckExpr (parse, expr->u.tree.right->u.tree.right, type);
- break;
- case FcOpAssign:
- case FcOpAssignReplace:
- break;
- case FcOpEqual:
- case FcOpNotEqual:
- case FcOpLess:
- case FcOpLessEqual:
- case FcOpMore:
- case FcOpMoreEqual:
- case FcOpContains:
- case FcOpNotContains:
- case FcOpListing:
- FcTypecheckValue (parse, FcTypeBool, type);
- break;
- case FcOpComma:
- case FcOpOr:
- case FcOpAnd:
- case FcOpPlus:
- case FcOpMinus:
- case FcOpTimes:
- case FcOpDivide:
- FcTypecheckExpr (parse, expr->u.tree.left, type);
- FcTypecheckExpr (parse, expr->u.tree.right, type);
- break;
- case FcOpNot:
- FcTypecheckValue (parse, FcTypeBool, type);
- FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool);
- break;
- case FcOpFloor:
- case FcOpCeil:
- case FcOpRound:
- case FcOpTrunc:
- FcTypecheckValue (parse, FcTypeDouble, type);
- FcTypecheckExpr (parse, expr->u.tree.left, FcTypeDouble);
- break;
- default:
- break;
- }
-}
-
-static FcTest *
-FcTestCreate (FcConfigParse *parse,
- FcMatchKind kind,
- FcQual qual,
- const FcChar8 *field,
- FcOp compare,
- FcExpr *expr)
-{
- FcTest *test = (FcTest *) malloc (sizeof (FcTest));
-
- if (test)
- {
- const FcObjectType *o;
-
- FcMemAlloc (FC_MEM_TEST, sizeof (FcTest));
- test->next = 0;
- test->kind = kind;
- test->qual = qual;
- test->object = FcObjectFromName ((const char *) field);
- test->op = compare;
- test->expr = expr;
- o = FcNameGetObjectType (FcObjectName (test->object));
- if (o)
- FcTypecheckExpr (parse, expr, o->type);
- }
- return test;
-}
-
-static FcEdit *
-FcEditCreate (FcConfigParse *parse,
- FcObject object,
- FcOp op,
- FcExpr *expr,
- FcValueBinding binding)
-{
- FcEdit *e = (FcEdit *) malloc (sizeof (FcEdit));
-
- if (e)
- {
- const FcObjectType *o;
-
- e->next = 0;
- e->object = object;
- e->op = op;
- e->expr = expr;
- e->binding = binding;
- o = FcNameGetObjectType (FcObjectName (e->object));
- if (o)
- FcTypecheckExpr (parse, expr, o->type);
- }
- return e;
-}
-
-static FcVStack *
-FcVStackCreateAndPush (FcConfigParse *parse)
-{
- FcVStack *new;
-
- if (parse->vstack_static_used < sizeof (parse->vstack_static) / sizeof (parse->vstack_static[0]))
- new = &parse->vstack_static[parse->vstack_static_used++];
- else
- {
- new = malloc (sizeof (FcVStack));
- if (!new)
- return 0;
- FcMemAlloc (FC_MEM_VSTACK, sizeof (FcVStack));
- }
- new->tag = FcVStackNone;
- new->prev = 0;
-
- new->prev = parse->vstack;
- new->pstack = parse->pstack ? parse->pstack->prev : 0;
- parse->vstack = new;
-
- return new;
-}
-
-static FcBool
-FcVStackPushString (FcConfigParse *parse, FcVStackTag tag, FcChar8 *string)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.string = string;
- vstack->tag = tag;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushInteger (FcConfigParse *parse, int integer)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.integer = integer;
- vstack->tag = FcVStackInteger;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushDouble (FcConfigParse *parse, double _double)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u._double = _double;
- vstack->tag = FcVStackDouble;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushMatrix (FcConfigParse *parse, FcMatrix *matrix)
-{
- FcVStack *vstack;
- matrix = FcMatrixCopy (matrix);
- if (!matrix)
- return FcFalse;
- vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.matrix = matrix;
- vstack->tag = FcVStackMatrix;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushRange (FcConfigParse *parse, FcRange *range)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.range.begin = range->begin;
- vstack->u.range.end = range->end;
- vstack->tag = FcVStackRange;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushBool (FcConfigParse *parse, FcBool bool_)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.bool_ = bool_;
- vstack->tag = FcVStackBool;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushCharSet (FcConfigParse *parse, FcCharSet *charset)
-{
- FcVStack *vstack;
- if (!charset)
- return FcFalse;
- vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.charset = charset;
- vstack->tag = FcVStackCharSet;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushLangSet (FcConfigParse *parse, FcLangSet *langset)
-{
- FcVStack *vstack;
- if (!langset)
- return FcFalse;
- vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.langset = langset;
- vstack->tag = FcVStackLangSet;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushTest (FcConfigParse *parse, FcTest *test)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.test = test;
- vstack->tag = FcVStackTest;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushExpr (FcConfigParse *parse, FcVStackTag tag, FcExpr *expr)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.expr = expr;
- vstack->tag = tag;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushEdit (FcConfigParse *parse, FcEdit *edit)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.edit = edit;
- vstack->tag = FcVStackEdit;
- return FcTrue;
-}
-
-static FcBool
-FcVStackPushPattern (FcConfigParse *parse, FcPattern *pattern)
-{
- FcVStack *vstack = FcVStackCreateAndPush (parse);
- if (!vstack)
- return FcFalse;
- vstack->u.pattern = pattern;
- vstack->tag = FcVStackPattern;
- return FcTrue;
-}
-
-static FcVStack *
-FcVStackFetch (FcConfigParse *parse, int off)
-{
- FcVStack *vstack;
-
- for (vstack = parse->vstack; vstack && off-- > 0; vstack = vstack->prev);
- return vstack;
-}
-
-static FcVStack *
-FcVStackPeek (FcConfigParse *parse)
-{
- FcVStack *vstack = parse->vstack;
-
- return vstack && vstack->pstack == parse->pstack ? vstack : 0;
-}
-
-static void
-FcVStackPopAndDestroy (FcConfigParse *parse)
-{
- FcVStack *vstack = parse->vstack;
-
- if (!vstack || vstack->pstack != parse->pstack)
- return;
-
- parse->vstack = vstack->prev;
-
- switch (vstack->tag) {
- case FcVStackNone:
- break;
- case FcVStackFamily:
- break;
- case FcVStackString:
- case FcVStackField:
- case FcVStackConstant:
- case FcVStackGlob:
- FcStrFree (vstack->u.string);
- break;
- case FcVStackPattern:
- FcPatternDestroy (vstack->u.pattern);
- break;
- case FcVStackInteger:
- case FcVStackDouble:
- break;
- case FcVStackMatrix:
- FcMatrixFree (vstack->u.matrix);
- break;
- case FcVStackRange:
- case FcVStackBool:
- break;
- case FcVStackCharSet:
- FcCharSetDestroy (vstack->u.charset);
- break;
- case FcVStackLangSet:
- FcLangSetDestroy (vstack->u.langset);
- break;
- case FcVStackTest:
- FcTestDestroy (vstack->u.test);
- break;
- case FcVStackExpr:
- case FcVStackPrefer:
- case FcVStackAccept:
- case FcVStackDefault:
- FcExprDestroy (vstack->u.expr);
- break;
- case FcVStackEdit:
- FcEditDestroy (vstack->u.edit);
- break;
- }
-
- if (vstack == &parse->vstack_static[parse->vstack_static_used - 1])
- parse->vstack_static_used--;
- else
- {
- FcMemFree (FC_MEM_VSTACK, sizeof (FcVStack));
- free (vstack);
- }
-}
-
-static void
-FcVStackClear (FcConfigParse *parse)
-{
- while (FcVStackPeek (parse))
- FcVStackPopAndDestroy (parse);
-}
-
-static int
-FcVStackElements (FcConfigParse *parse)
-{
- int h = 0;
- FcVStack *vstack = parse->vstack;
- while (vstack && vstack->pstack == parse->pstack)
- {
- h++;
- vstack = vstack->prev;
- }
- return h;
-}
-
-static FcChar8 **
-FcConfigSaveAttr (const XML_Char **attr, FcChar8 **buf, int size_bytes)
-{
- int slen;
- int i;
- FcChar8 **new;
- FcChar8 *s;
-
- if (!attr)
- return 0;
- slen = 0;
- for (i = 0; attr[i]; i++)
- slen += strlen ((char *) attr[i]) + 1;
- if (i == 0)
- return 0;
- slen += (i + 1) * sizeof (FcChar8 *);
- if (slen <= size_bytes)
- new = buf;
- else
- {
- new = malloc (slen);
- if (!new)
- {
- FcConfigMessage (0, FcSevereError, "out of memory");
- return 0;
- }
- FcMemAlloc (FC_MEM_ATTR, 1); /* size is too expensive */
- }
- s = (FcChar8 *) (new + (i + 1));
- for (i = 0; attr[i]; i++)
- {
- new[i] = s;
- strcpy ((char *) s, (char *) attr[i]);
- s += strlen ((char *) s) + 1;
- }
- new[i] = 0;
- return new;
-}
-
-static FcBool
-FcPStackPush (FcConfigParse *parse, FcElement element, const XML_Char **attr)
-{
- FcPStack *new;
-
- if (parse->pstack_static_used < sizeof (parse->pstack_static) / sizeof (parse->pstack_static[0]))
- new = &parse->pstack_static[parse->pstack_static_used++];
- else
- {
- new = malloc (sizeof (FcPStack));
- if (!new)
- return FcFalse;
- FcMemAlloc (FC_MEM_PSTACK, sizeof (FcPStack));
- }
-
- new->prev = parse->pstack;
- new->element = element;
- new->attr = FcConfigSaveAttr (attr, new->attr_buf_static, sizeof (new->attr_buf_static));
- FcStrBufInit (&new->str, 0, 0);
- parse->pstack = new;
- return FcTrue;
-}
-
-static FcBool
-FcPStackPop (FcConfigParse *parse)
-{
- FcPStack *old;
-
- if (!parse->pstack)
- {
- FcConfigMessage (parse, FcSevereError, "mismatching element");
- return FcFalse;
- }
- FcVStackClear (parse);
- old = parse->pstack;
- parse->pstack = old->prev;
- FcStrBufDestroy (&old->str);
- if (old->attr && old->attr != old->attr_buf_static)
- {
- FcMemFree (FC_MEM_ATTR, 1); /* size is to expensive */
- free (old->attr);
- }
-
- if (old == &parse->pstack_static[parse->pstack_static_used - 1])
- parse->pstack_static_used--;
- else
- {
- FcMemFree (FC_MEM_PSTACK, sizeof (FcPStack));
- free (old);
- }
- return FcTrue;
-}
-
-static FcBool
-FcConfigInit (FcConfigParse *parse, const FcChar8 *name, FcConfig *config, XML_Parser parser)
-{
- parse->pstack = 0;
- parse->pstack_static_used = 0;
- parse->vstack = 0;
- parse->vstack_static_used = 0;
- parse->error = FcFalse;
- parse->name = name;
- parse->config = config;
- parse->parser = parser;
- return FcTrue;
-}
-
-static void
-FcConfigCleanup (FcConfigParse *parse)
-{
- while (parse->pstack)
- FcPStackPop (parse);
-}
-
-static const FcChar8 *
-FcConfigGetAttribute (FcConfigParse *parse, const char *attr)
-{
- FcChar8 **attrs;
- if (!parse->pstack)
- return 0;
-
- attrs = parse->pstack->attr;
- if (!attrs)
- return 0;
-
- while (*attrs)
- {
- if (!strcmp ((char *) *attrs, attr))
- return attrs[1];
- attrs += 2;
- }
- return 0;
-}
-
-static void
-FcStartElement(void *userData, const XML_Char *name, const XML_Char **attr)
-{
- FcConfigParse *parse = userData;
- FcElement element;
-
- element = FcElementMap (name);
- if (element == FcElementUnknown)
- FcConfigMessage (parse, FcSevereWarning, "unknown element \"%s\"", name);
-
- if (!FcPStackPush (parse, element, attr))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- return;
-}
-
-static void
-FcParseBlank (FcConfigParse *parse)
-{
- int n = FcVStackElements (parse);
- FcChar32 i;
- while (n-- > 0)
- {
- FcVStack *v = FcVStackFetch (parse, n);
- if (!parse->config->blanks)
- {
- parse->config->blanks = FcBlanksCreate ();
- if (!parse->config->blanks)
- goto bail;
- }
- switch (v->tag) {
- case FcVStackInteger:
- if (!FcBlanksAdd (parse->config->blanks, v->u.integer))
- goto bail;
- break;
- case FcVStackRange:
- if (v->u.range.begin <= v->u.range.end)
- {
- for (i = v->u.range.begin; i <= v->u.range.end; i++)
- {
- if (!FcBlanksAdd (parse->config->blanks, i))
- goto bail;
- }
- }
- break;
- default:
- FcConfigMessage (parse, FcSevereError, "invalid element in blank");
- break;
- }
- }
- return;
- bail:
- FcConfigMessage (parse, FcSevereError, "out of memory");
-}
-
-static void
-FcParseRescan (FcConfigParse *parse)
-{
- int n = FcVStackElements (parse);
- while (n-- > 0)
- {
- FcVStack *v = FcVStackFetch (parse, n);
- if (v->tag != FcVStackInteger)
- FcConfigMessage (parse, FcSevereWarning, "non-integer rescan");
- else
- parse->config->rescanInterval = v->u.integer;
- }
-}
-
-static void
-FcParseInt (FcConfigParse *parse)
-{
- FcChar8 *s, *end;
- int l;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- end = 0;
- l = (int) strtol ((char *) s, (char **)&end, 0);
- if (end != s + strlen ((char *) s))
- FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid integer", s);
- else
- FcVStackPushInteger (parse, l);
- FcStrBufDestroy (&parse->pstack->str);
-}
-
-/*
- * idea copied from glib g_ascii_strtod with
- * permission of the author (Alexander Larsson)
- */
-
-#include <locale.h>
-
-static double
-FcStrtod (char *s, char **end)
-{
- struct lconv *locale_data;
- char *dot;
- double v;
-
- /*
- * Have to swap the decimal point to match the current locale
- * if that locale doesn't use 0x2e
- */
- if ((dot = strchr (s, 0x2e)) &&
- (locale_data = localeconv ()) &&
- (locale_data->decimal_point[0] != 0x2e ||
- locale_data->decimal_point[1] != 0))
- {
- char buf[128];
- int slen = strlen (s);
- int dlen = strlen (locale_data->decimal_point);
-
- if (slen + dlen > (int) sizeof (buf))
- {
- if (end)
- *end = s;
- v = 0;
- }
- else
- {
- char *buf_end;
- /* mantissa */
- strncpy (buf, s, dot - s);
- /* decimal point */
- strcpy (buf + (dot - s), locale_data->decimal_point);
- /* rest of number */
- strcpy (buf + (dot - s) + dlen, dot + 1);
- buf_end = 0;
- v = strtod (buf, &buf_end);
- if (buf_end) {
- buf_end = s + (buf_end - buf);
- if (buf_end > dot)
- buf_end -= dlen - 1;
- }
- if (end)
- *end = buf_end;
- }
- }
- else
- v = strtod (s, end);
- return v;
-}
-
-static void
-FcParseDouble (FcConfigParse *parse)
-{
- FcChar8 *s, *end;
- double d;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- end = 0;
- d = FcStrtod ((char *) s, (char **)&end);
- if (end != s + strlen ((char *) s))
- FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid double", s);
- else
- FcVStackPushDouble (parse, d);
- FcStrBufDestroy (&parse->pstack->str);
-}
-
-static void
-FcParseString (FcConfigParse *parse, FcVStackTag tag)
-{
- FcChar8 *s;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDone (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- if (!FcVStackPushString (parse, tag, s))
- FcStrFree (s);
-}
-
-static void
-FcParseMatrix (FcConfigParse *parse)
-{
- FcVStack *vstack;
- enum { m_done, m_xx, m_xy, m_yx, m_yy } matrix_state = m_yy;
- FcMatrix m;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- double v;
- switch (vstack->tag) {
- case FcVStackInteger:
- v = vstack->u.integer;
- break;
- case FcVStackDouble:
- v = vstack->u._double;
- break;
- default:
- FcConfigMessage (parse, FcSevereError, "non-double matrix element");
- v = 1.0;
- break;
- }
- switch (matrix_state) {
- case m_xx: m.xx = v; break;
- case m_xy: m.xy = v; break;
- case m_yx: m.yx = v; break;
- case m_yy: m.yy = v; break;
- default: break;
- }
- FcVStackPopAndDestroy (parse);
- matrix_state--;
- }
- if (matrix_state != m_done)
- FcConfigMessage (parse, FcSevereError, "wrong number of matrix elements");
- else
- FcVStackPushMatrix (parse, &m);
-}
-
-static void
-FcParseRange (FcConfigParse *parse)
-{
- FcVStack *vstack;
- FcRange r;
- FcChar32 n;
- int count = 1;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- if (count < 0)
- {
- FcConfigMessage (parse, FcSevereError, "too many elements in range");
- return;
- }
- switch (vstack->tag) {
- case FcVStackInteger:
- n = vstack->u.integer;
- break;
- default:
- FcConfigMessage (parse, FcSevereError, "invalid element in range");
- break;
- }
- if (count == 1)
- r.end = n;
- else
- r.begin = n;
- count--;
- FcVStackPopAndDestroy (parse);
- }
- if (count < 0)
- {
- if (r.begin > r.end)
- {
- FcConfigMessage (parse, FcSevereError, "invalid range");
- return;
- }
- FcVStackPushRange (parse, &r);
- }
- else
- FcConfigMessage (parse, FcSevereError, "invalid range");
-}
-
-static FcBool
-FcConfigLexBool (FcConfigParse *parse, const FcChar8 *bool_)
-{
- FcBool result = FcFalse;
-
- if (!FcNameBool (bool_, &result))
- FcConfigMessage (parse, FcSevereWarning, "\"%s\" is not known boolean",
- bool_);
- return result;
-}
-
-static void
-FcParseBool (FcConfigParse *parse)
-{
- FcChar8 *s;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- FcVStackPushBool (parse, FcConfigLexBool (parse, s));
- FcStrBufDestroy (&parse->pstack->str);
-}
-
-static void
-FcParseCharSet (FcConfigParse *parse)
-{
- FcVStack *vstack;
- FcCharSet *charset = FcCharSetCreate ();
- FcChar32 i;
- int n = 0;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackInteger:
- if (!FcCharSetAddChar (charset, vstack->u.integer))
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid character: 0x%04x", vstack->u.integer);
- }
- else
- n++;
- break;
- case FcVStackRange:
- if (vstack->u.range.begin <= vstack->u.range.end)
- {
- for (i = vstack->u.range.begin; i <= vstack->u.range.end; i++)
- {
- if (!FcCharSetAddChar (charset, i))
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid character: 0x%04x", i);
- }
- else
- n++;
- }
- }
- break;
- default:
- FcConfigMessage (parse, FcSevereError, "invalid element in charset");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
- if (n > 0)
- FcVStackPushCharSet (parse, charset);
- else
- FcCharSetDestroy (charset);
-}
-
-static void
-FcParseLangSet (FcConfigParse *parse)
-{
- FcVStack *vstack;
- FcLangSet *langset = FcLangSetCreate ();
- int n = 0;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackString:
- if (!FcLangSetAdd (langset, vstack->u.string))
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid langset: %s", vstack->u.string);
- }
- else
- n++;
- break;
- default:
- FcConfigMessage (parse, FcSevereError, "invalid element in langset");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
- if (n > 0)
- FcVStackPushLangSet (parse, langset);
- else
- FcLangSetDestroy (langset);
-}
-
-static FcBool
-FcConfigLexBinding (FcConfigParse *parse,
- const FcChar8 *binding_string,
- FcValueBinding *binding_ret)
-{
- FcValueBinding binding;
-
- if (!binding_string)
- binding = FcValueBindingWeak;
- else
- {
- if (!strcmp ((char *) binding_string, "weak"))
- binding = FcValueBindingWeak;
- else if (!strcmp ((char *) binding_string, "strong"))
- binding = FcValueBindingStrong;
- else if (!strcmp ((char *) binding_string, "same"))
- binding = FcValueBindingSame;
- else
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid binding \"%s\"", binding_string);
- return FcFalse;
- }
- }
- *binding_ret = binding;
- return FcTrue;
-}
-
-static void
-FcParseFamilies (FcConfigParse *parse, FcVStackTag tag)
-{
- FcVStack *vstack;
- FcExpr *left, *expr = 0, *new;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- if (vstack->tag != FcVStackFamily)
- {
- FcConfigMessage (parse, FcSevereWarning, "non-family");
- FcVStackPopAndDestroy (parse);
- continue;
- }
- left = vstack->u.expr;
- vstack->tag = FcVStackNone;
- FcVStackPopAndDestroy (parse);
- if (expr)
- {
- new = FcExprCreateOp (parse->config, left, FcOpComma, expr);
- if (!new)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcExprDestroy (left);
- FcExprDestroy (expr);
- break;
- }
- expr = new;
- }
- else
- expr = left;
- }
- if (expr)
- {
- if (!FcVStackPushExpr (parse, tag, expr))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcExprDestroy (expr);
- }
- }
-}
-
-static void
-FcParseFamily (FcConfigParse *parse)
-{
- FcChar8 *s;
- FcExpr *expr;
-
- if (!parse->pstack)
- return;
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- expr = FcExprCreateString (parse->config, s);
- FcStrBufDestroy (&parse->pstack->str);
- if (expr)
- FcVStackPushExpr (parse, FcVStackFamily, expr);
-}
-
-static void
-FcParseAlias (FcConfigParse *parse)
-{
- FcExpr *family = 0, *accept = 0, *prefer = 0, *def = 0, *new = 0;
- FcEdit *edit = 0, *next;
- FcVStack *vstack;
- FcTest *test;
- FcValueBinding binding;
-
- if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
- return;
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackFamily:
- if (family)
- {
- new = FcExprCreateOp (parse->config, vstack->u.expr, FcOpComma, family);
- if (!new)
- FcConfigMessage (parse, FcSevereError, "out of memory");
- else
- family = new;
- }
- else
- new = vstack->u.expr;
- if (new)
- {
- family = new;
- vstack->tag = FcVStackNone;
- }
- break;
- case FcVStackPrefer:
- if (prefer)
- FcExprDestroy (prefer);
- prefer = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackAccept:
- if (accept)
- FcExprDestroy (accept);
- accept = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackDefault:
- if (def)
- FcExprDestroy (def);
- def = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "bad alias");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
- if (!family)
- {
- FcConfigMessage (parse, FcSevereError, "missing family in alias");
- if (prefer)
- FcExprDestroy (prefer);
- if (accept)
- FcExprDestroy (accept);
- if (def)
- FcExprDestroy (def);
- return;
- }
- if (prefer)
- {
- edit = FcEditCreate (parse,
- FC_FAMILY_OBJECT,
- FcOpPrepend,
- prefer,
- binding);
- if (edit)
- edit->next = 0;
- else
- FcExprDestroy (prefer);
- }
- if (accept)
- {
- next = edit;
- edit = FcEditCreate (parse,
- FC_FAMILY_OBJECT,
- FcOpAppend,
- accept,
- binding);
- if (edit)
- edit->next = next;
- else
- FcExprDestroy (accept);
- }
- if (def)
- {
- next = edit;
- edit = FcEditCreate (parse,
- FC_FAMILY_OBJECT,
- FcOpAppendLast,
- def,
- binding);
- if (edit)
- edit->next = next;
- else
- FcExprDestroy (def);
- }
- if (edit)
- {
- test = FcTestCreate (parse, FcMatchPattern,
- FcQualAny,
- (FcChar8 *) FC_FAMILY,
- FcOpEqual,
- family);
- if (test)
- if (!FcConfigAddEdit (parse->config, test, edit, FcMatchPattern))
- FcTestDestroy (test);
- }
- else
- FcExprDestroy (family);
-}
-
-static FcExpr *
-FcPopExpr (FcConfigParse *parse)
-{
- FcVStack *vstack = FcVStackPeek (parse);
- FcExpr *expr = 0;
- if (!vstack)
- return 0;
- switch (vstack->tag) {
- case FcVStackNone:
- break;
- case FcVStackString:
- case FcVStackFamily:
- expr = FcExprCreateString (parse->config, vstack->u.string);
- break;
- case FcVStackField:
- expr = FcExprCreateField (parse->config, (char *) vstack->u.string);
- break;
- case FcVStackConstant:
- expr = FcExprCreateConst (parse->config, vstack->u.string);
- break;
- case FcVStackGlob:
- /* XXX: What's the correct action here? (CDW) */
- break;
- case FcVStackPrefer:
- case FcVStackAccept:
- case FcVStackDefault:
- expr = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackInteger:
- expr = FcExprCreateInteger (parse->config, vstack->u.integer);
- break;
- case FcVStackDouble:
- expr = FcExprCreateDouble (parse->config, vstack->u._double);
- break;
- case FcVStackMatrix:
- expr = FcExprCreateMatrix (parse->config, vstack->u.matrix);
- break;
- case FcVStackRange:
- break;
- case FcVStackBool:
- expr = FcExprCreateBool (parse->config, vstack->u.bool_);
- break;
- case FcVStackCharSet:
- expr = FcExprCreateCharSet (parse->config, vstack->u.charset);
- break;
- case FcVStackLangSet:
- expr = FcExprCreateLangSet (parse->config, vstack->u.langset);
- break;
- case FcVStackTest:
- break;
- case FcVStackExpr:
- expr = vstack->u.expr;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackEdit:
- break;
- default:
- break;
- }
- FcVStackPopAndDestroy (parse);
- return expr;
-}
-
-/*
- * This builds a tree of binary operations. Note
- * that every operator is defined so that if only
- * a single operand is contained, the value of the
- * whole expression is the value of the operand.
- *
- * This code reduces in that case to returning that
- * operand.
- */
-static FcExpr *
-FcPopBinary (FcConfigParse *parse, FcOp op)
-{
- FcExpr *left, *expr = 0, *new;
-
- while ((left = FcPopExpr (parse)))
- {
- if (expr)
- {
- new = FcExprCreateOp (parse->config, left, op, expr);
- if (!new)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcExprDestroy (left);
- FcExprDestroy (expr);
- return 0;
- }
- expr = new;
- }
- else
- expr = left;
- }
- return expr;
-}
-
-static void
-FcParseBinary (FcConfigParse *parse, FcOp op)
-{
- FcExpr *expr = FcPopBinary (parse, op);
- if (expr)
- FcVStackPushExpr (parse, FcVStackExpr, expr);
-}
-
-/*
- * This builds a a unary operator, it consumes only
- * a single operand
- */
-
-static FcExpr *
-FcPopUnary (FcConfigParse *parse, FcOp op)
-{
- FcExpr *operand, *new = 0;
-
- if ((operand = FcPopExpr (parse)))
- {
- new = FcExprCreateOp (parse->config, operand, op, 0);
- if (!new)
- {
- FcExprDestroy (operand);
- FcConfigMessage (parse, FcSevereError, "out of memory");
- }
- }
- return new;
-}
-
-static void
-FcParseUnary (FcConfigParse *parse, FcOp op)
-{
- FcExpr *expr = FcPopUnary (parse, op);
- if (expr)
- FcVStackPushExpr (parse, FcVStackExpr, expr);
-}
-
-static void
-FcParseInclude (FcConfigParse *parse)
-{
- FcChar8 *s;
- const FcChar8 *i;
- FcBool ignore_missing = FcFalse;
-
- s = FcStrBufDoneStatic (&parse->pstack->str);
- if (!s)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- i = FcConfigGetAttribute (parse, "ignore_missing");
- if (i && FcConfigLexBool (parse, (FcChar8 *) i) == FcTrue)
- ignore_missing = FcTrue;
- if (!FcConfigParseAndLoad (parse->config, s, !ignore_missing))
- parse->error = FcTrue;
- FcStrBufDestroy (&parse->pstack->str);
-}
-
-typedef struct _FcOpMap {
- char name[16];
- FcOp op;
-} FcOpMap;
-
-static FcOp
-FcConfigLexOp (const FcChar8 *op, const FcOpMap *map, int nmap)
-{
- int i;
-
- for (i = 0; i < nmap; i++)
- if (!strcmp ((char *) op, map[i].name))
- return map[i].op;
- return FcOpInvalid;
-}
-
-static const FcOpMap fcCompareOps[] = {
- { "eq", FcOpEqual },
- { "not_eq", FcOpNotEqual },
- { "less", FcOpLess },
- { "less_eq", FcOpLessEqual },
- { "more", FcOpMore },
- { "more_eq", FcOpMoreEqual },
- { "contains", FcOpContains },
- { "not_contains", FcOpNotContains }
-};
-
-#define NUM_COMPARE_OPS (int) (sizeof fcCompareOps / sizeof fcCompareOps[0])
-
-static FcOp
-FcConfigLexCompare (const FcChar8 *compare)
-{
- return FcConfigLexOp (compare, fcCompareOps, NUM_COMPARE_OPS);
-}
-
-static void
-FcParseTest (FcConfigParse *parse)
-{
- const FcChar8 *kind_string;
- FcMatchKind kind;
- const FcChar8 *qual_string;
- FcQual qual;
- const FcChar8 *name;
- const FcChar8 *compare_string;
- FcOp compare;
- FcExpr *expr;
- FcTest *test;
-
- kind_string = FcConfigGetAttribute (parse, "target");
- if (!kind_string)
- kind = FcMatchDefault;
- else
- {
- if (!strcmp ((char *) kind_string, "pattern"))
- kind = FcMatchPattern;
- else if (!strcmp ((char *) kind_string, "font"))
- kind = FcMatchFont;
- else if (!strcmp ((char *) kind_string, "scan"))
- kind = FcMatchScan;
- else if (!strcmp ((char *) kind_string, "default"))
- kind = FcMatchDefault;
- else
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid test target \"%s\"", kind_string);
- return;
- }
- }
- qual_string = FcConfigGetAttribute (parse, "qual");
- if (!qual_string)
- qual = FcQualAny;
- else
- {
- if (!strcmp ((char *) qual_string, "any"))
- qual = FcQualAny;
- else if (!strcmp ((char *) qual_string, "all"))
- qual = FcQualAll;
- else if (!strcmp ((char *) qual_string, "first"))
- qual = FcQualFirst;
- else if (!strcmp ((char *) qual_string, "not_first"))
- qual = FcQualNotFirst;
- else
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid test qual \"%s\"", qual_string);
- return;
- }
- }
- name = FcConfigGetAttribute (parse, "name");
- if (!name)
- {
- FcConfigMessage (parse, FcSevereWarning, "missing test name");
- return;
- }
- compare_string = FcConfigGetAttribute (parse, "compare");
- if (!compare_string)
- compare = FcOpEqual;
- else
- {
- compare = FcConfigLexCompare (compare_string);
- if (compare == FcOpInvalid)
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid test compare \"%s\"", compare_string);
- return;
- }
- }
- expr = FcPopBinary (parse, FcOpComma);
- if (!expr)
- {
- FcConfigMessage (parse, FcSevereWarning, "missing test expression");
- return;
- }
- test = FcTestCreate (parse, kind, qual, name, compare, expr);
- if (!test)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
- FcVStackPushTest (parse, test);
-}
-
-static const FcOpMap fcModeOps[] = {
- { "assign", FcOpAssign },
- { "assign_replace", FcOpAssignReplace },
- { "prepend", FcOpPrepend },
- { "prepend_first", FcOpPrependFirst },
- { "append", FcOpAppend },
- { "append_last", FcOpAppendLast },
-};
-
-#define NUM_MODE_OPS (int) (sizeof fcModeOps / sizeof fcModeOps[0])
-
-static FcOp
-FcConfigLexMode (const FcChar8 *mode)
-{
- return FcConfigLexOp (mode, fcModeOps, NUM_MODE_OPS);
-}
-
-static void
-FcParseEdit (FcConfigParse *parse)
-{
- const FcChar8 *name;
- const FcChar8 *mode_string;
- FcOp mode;
- FcValueBinding binding;
- FcExpr *expr;
- FcEdit *edit;
-
- name = FcConfigGetAttribute (parse, "name");
- if (!name)
- {
- FcConfigMessage (parse, FcSevereWarning, "missing edit name");
- return;
- }
- mode_string = FcConfigGetAttribute (parse, "mode");
- if (!mode_string)
- mode = FcOpAssign;
- else
- {
- mode = FcConfigLexMode (mode_string);
- if (mode == FcOpInvalid)
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid edit mode \"%s\"", mode_string);
- return;
- }
- }
- if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding))
- return;
-
- expr = FcPopBinary (parse, FcOpComma);
- edit = FcEditCreate (parse, FcObjectFromName ((char *) name),
- mode, expr, binding);
- if (!edit)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcExprDestroy (expr);
- return;
- }
- if (!FcVStackPushEdit (parse, edit))
- FcEditDestroy (edit);
-}
-
-static void
-FcParseMatch (FcConfigParse *parse)
-{
- const FcChar8 *kind_name;
- FcMatchKind kind;
- FcTest *test = 0;
- FcEdit *edit = 0;
- FcVStack *vstack;
-
- kind_name = FcConfigGetAttribute (parse, "target");
- if (!kind_name)
- kind = FcMatchPattern;
- else
- {
- if (!strcmp ((char *) kind_name, "pattern"))
- kind = FcMatchPattern;
- else if (!strcmp ((char *) kind_name, "font"))
- kind = FcMatchFont;
- else if (!strcmp ((char *) kind_name, "scan"))
- kind = FcMatchScan;
- else
- {
- FcConfigMessage (parse, FcSevereWarning, "invalid match target \"%s\"", kind_name);
- return;
- }
- }
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackTest:
- vstack->u.test->next = test;
- test = vstack->u.test;
- vstack->tag = FcVStackNone;
- break;
- case FcVStackEdit:
- vstack->u.edit->next = edit;
- edit = vstack->u.edit;
- vstack->tag = FcVStackNone;
- if (kind == FcMatchScan && edit->object > FC_MAX_BASE_OBJECT)
- {
- FcConfigMessage (parse, FcSevereError,
- "<match target=\"scan\"> cannot edit user-defined object \"%s\"",
- FcObjectName(edit->object));
- }
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "invalid match element");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
- if (!FcConfigAddEdit (parse->config, test, edit, kind))
- FcConfigMessage (parse, FcSevereError, "out of memory");
-}
-
-static void
-FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element)
-{
- FcVStack *vstack;
-
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackGlob:
- if (!FcConfigGlobAdd (parse->config,
- vstack->u.string,
- element == FcElementAcceptfont))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- }
- break;
- case FcVStackPattern:
- if (!FcConfigPatternsAdd (parse->config,
- vstack->u.pattern,
- element == FcElementAcceptfont))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- }
- else
- vstack->tag = FcVStackNone;
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "bad font selector");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
-}
-
-
-static FcValue
-FcPopValue (FcConfigParse *parse)
-{
- FcVStack *vstack = FcVStackPeek (parse);
- FcValue value;
-
- value.type = FcTypeVoid;
-
- if (!vstack)
- return value;
-
- switch (vstack->tag) {
- case FcVStackString:
- value.u.s = FcStrStaticName (vstack->u.string);
- if (value.u.s)
- value.type = FcTypeString;
- break;
- case FcVStackConstant:
- if (FcNameConstant (vstack->u.string, &value.u.i))
- value.type = FcTypeInteger;
- break;
- case FcVStackInteger:
- value.u.i = vstack->u.integer;
- value.type = FcTypeInteger;
- break;
- case FcVStackDouble:
- value.u.d = vstack->u._double;
- value.type = FcTypeInteger;
- break;
- case FcVStackMatrix:
- value.u.m = FcMatrixCopy (vstack->u.matrix);
- if (value.u.m)
- value.type = FcTypeMatrix;
- break;
- case FcVStackBool:
- value.u.b = vstack->u.bool_;
- value.type = FcTypeBool;
- break;
- case FcVStackCharSet:
- value.u.c = FcCharSetCopy (vstack->u.charset);
- if (value.u.c)
- value.type = FcTypeCharSet;
- break;
- case FcVStackLangSet:
- value.u.l = FcLangSetCopy (vstack->u.langset);
- if (value.u.l)
- value.type = FcTypeLangSet;
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "unknown pattern element %d",
- vstack->tag);
- break;
- }
- FcVStackPopAndDestroy (parse);
-
- return value;
-}
-
-static void
-FcParsePatelt (FcConfigParse *parse)
-{
- FcValue value;
- FcPattern *pattern = FcPatternCreate ();
- const char *name;
-
- if (!pattern)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
-
- name = (char *) FcConfigGetAttribute (parse, "name");
- if (!name)
- {
- FcConfigMessage (parse, FcSevereWarning, "missing pattern element name");
- FcPatternDestroy (pattern);
- return;
- }
-
- for (;;)
- {
- value = FcPopValue (parse);
- if (value.type == FcTypeVoid)
- break;
- if (!FcPatternAdd (pattern, name, value, FcTrue))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcValueDestroy(value);
- break;
- }
- FcValueDestroy(value);
- }
-
- FcVStackPushPattern (parse, pattern);
-}
-
-static void
-FcParsePattern (FcConfigParse *parse)
-{
- FcVStack *vstack;
- FcPattern *pattern = FcPatternCreate ();
-
- if (!pattern)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- return;
- }
-
- while ((vstack = FcVStackPeek (parse)))
- {
- switch (vstack->tag) {
- case FcVStackPattern:
- if (!FcPatternAppend (pattern, vstack->u.pattern))
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- FcPatternDestroy (pattern);
- return;
- }
- break;
- default:
- FcConfigMessage (parse, FcSevereWarning, "unknown pattern element");
- break;
- }
- FcVStackPopAndDestroy (parse);
- }
-
- FcVStackPushPattern (parse, pattern);
-}
-
-static void
-FcEndElement(void *userData, const XML_Char *name)
-{
- FcConfigParse *parse = userData;
- FcChar8 *data;
-#ifdef _WIN32
- FcChar8 buffer[1000];
-#endif
-
- if (!parse->pstack)
- return;
- switch (parse->pstack->element) {
- case FcElementNone:
- break;
- case FcElementFontconfig:
- break;
- case FcElementDir:
- data = FcStrBufDoneStatic (&parse->pstack->str);
- if (!data)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
-#ifdef _WIN32
- if (strcmp (data, "CUSTOMFONTDIR") == 0)
- {
- char *p;
- data = buffer;
- if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20))
- {
- FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed");
- break;
- }
- /*
- * Must use the multi-byte aware function to search
- * for backslash because East Asian double-byte code
- * pages have characters with backslash as the second
- * byte.
- */
- p = _mbsrchr (data, '\\');
- if (p) *p = '\0';
- strcat (data, "\\fonts");
- }
- else if (strcmp (data, "APPSHAREFONTDIR") == 0)
- {
- char *p;
- data = buffer;
- if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20))
- {
- FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed");
- break;
- }
- p = _mbsrchr (data, '\\');
- if (p) *p = '\0';
- strcat (data, "\\..\\share\\fonts");
- }
- else if (strcmp (data, "WINDOWSFONTDIR") == 0)
- {
- int rc;
- data = buffer;
-#if _WIN32_WINNT >= 0x0500
- rc = GetSystemWindowsDirectory (buffer, sizeof (buffer) - 20);
-#else
- rc = GetWindowsDirectory (buffer, sizeof (buffer) - 20);
-#endif
- if (rc == 0 || rc > sizeof (buffer) - 20)
- {
- FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed");
- break;
- }
- if (data [strlen (data) - 1] != '\\')
- strcat (data, "\\");
- strcat (data, "fonts");
- }
-#endif
- if (strlen ((char *) data) == 0)
- FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored");
- else if (!FcStrUsesHome (data) || FcConfigHome ())
- {
- if (!FcConfigAddDir (parse->config, data))
- FcConfigMessage (parse, FcSevereError, "out of memory; cannot add directory %s", data);
- }
- FcStrBufDestroy (&parse->pstack->str);
- break;
- case FcElementCacheDir:
- data = FcStrBufDone (&parse->pstack->str);
- if (!data)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
-#ifdef _WIN32
- if (strcmp (data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0)
- {
- int rc;
- FcStrFree (data);
- data = malloc (1000);
- if (!data)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
- FcMemAlloc (FC_MEM_STRING, 1000);
- rc = GetTempPath (800, data);
- if (rc == 0 || rc > 800)
- {
- FcConfigMessage (parse, FcSevereError, "GetTempPath failed");
- FcStrFree (data);
- break;
- }
- if (data [strlen (data) - 1] != '\\')
- strcat (data, "\\");
- strcat (data, "fontconfig\\cache");
- }
-#endif
- if (!FcStrUsesHome (data) || FcConfigHome ())
- {
- if (!FcConfigAddCacheDir (parse->config, data))
- FcConfigMessage (parse, FcSevereError, "out of memory; cannot add cache directory %s", data);
- }
- FcStrFree (data);
- break;
-
- case FcElementCache:
- data = FcStrBufDoneStatic (&parse->pstack->str);
- if (!data)
- {
- FcConfigMessage (parse, FcSevereError, "out of memory");
- break;
- }
- /* discard this data; no longer used */
- FcStrBufDestroy (&parse->pstack->str);
- break;
- case FcElementInclude:
- FcParseInclude (parse);
- break;
- case FcElementConfig:
- break;
- case FcElementMatch:
- FcParseMatch (parse);
- break;
- case FcElementAlias:
- FcParseAlias (parse);
- break;
-
- case FcElementBlank:
- FcParseBlank (parse);
- break;
- case FcElementRescan:
- FcParseRescan (parse);
- break;
-
- case FcElementPrefer:
- FcParseFamilies (parse, FcVStackPrefer);
- break;
- case FcElementAccept:
- FcParseFamilies (parse, FcVStackAccept);
- break;
- case FcElementDefault:
- FcParseFamilies (parse, FcVStackDefault);
- break;
- case FcElementFamily:
- FcParseFamily (parse);
- break;
-
- case FcElementTest:
- FcParseTest (parse);
- break;
- case FcElementEdit:
- FcParseEdit (parse);
- break;
-
- case FcElementInt:
- FcParseInt (parse);
- break;
- case FcElementDouble:
- FcParseDouble (parse);
- break;
- case FcElementString:
- FcParseString (parse, FcVStackString);
- break;
- case FcElementMatrix:
- FcParseMatrix (parse);
- break;
- case FcElementRange:
- FcParseRange (parse);
- break;
- case FcElementBool:
- FcParseBool (parse);
- break;
- case FcElementCharSet:
- FcParseCharSet (parse);
- break;
- case FcElementLangSet:
- FcParseLangSet (parse);
- break;
- case FcElementSelectfont:
- break;
- case FcElementAcceptfont:
- case FcElementRejectfont:
- FcParseAcceptRejectFont (parse, parse->pstack->element);
- break;
- case FcElementGlob:
- FcParseString (parse, FcVStackGlob);
- break;
- case FcElementPattern:
- FcParsePattern (parse);
- break;
- case FcElementPatelt:
- FcParsePatelt (parse);
- break;
- case FcElementName:
- FcParseString (parse, FcVStackField);
- break;
- case FcElementConst:
- FcParseString (parse, FcVStackConstant);
- break;
- case FcElementOr:
- FcParseBinary (parse, FcOpOr);
- break;
- case FcElementAnd:
- FcParseBinary (parse, FcOpAnd);
- break;
- case FcElementEq:
- FcParseBinary (parse, FcOpEqual);
- break;
- case FcElementNotEq:
- FcParseBinary (parse, FcOpNotEqual);
- break;
- case FcElementLess:
- FcParseBinary (parse, FcOpLess);
- break;
- case FcElementLessEq:
- FcParseBinary (parse, FcOpLessEqual);
- break;
- case FcElementMore:
- FcParseBinary (parse, FcOpMore);
- break;
- case FcElementMoreEq:
- FcParseBinary (parse, FcOpMoreEqual);
- break;
- case FcElementContains:
- FcParseBinary (parse, FcOpContains);
- break;
- case FcElementNotContains:
- FcParseBinary (parse, FcOpNotContains);
- break;
- case FcElementPlus:
- FcParseBinary (parse, FcOpPlus);
- break;
- case FcElementMinus:
- FcParseBinary (parse, FcOpMinus);
- break;
- case FcElementTimes:
- FcParseBinary (parse, FcOpTimes);
- break;
- case FcElementDivide:
- FcParseBinary (parse, FcOpDivide);
- break;
- case FcElementNot:
- FcParseUnary (parse, FcOpNot);
- break;
- case FcElementIf:
- FcParseBinary (parse, FcOpQuest);
- break;
- case FcElementFloor:
- FcParseUnary (parse, FcOpFloor);
- break;
- case FcElementCeil:
- FcParseUnary (parse, FcOpCeil);
- break;
- case FcElementRound:
- FcParseUnary (parse, FcOpRound);
- break;
- case FcElementTrunc:
- FcParseUnary (parse, FcOpTrunc);
- break;
- case FcElementUnknown:
- break;
- }
- (void) FcPStackPop (parse);
-}
-
-static void
-FcCharacterData (void *userData, const XML_Char *s, int len)
-{
- FcConfigParse *parse = userData;
-
- if (!parse->pstack)
- return;
- if (!FcStrBufData (&parse->pstack->str, (FcChar8 *) s, len))
- FcConfigMessage (parse, FcSevereError, "out of memory");
-}
-
-static void
-FcStartDoctypeDecl (void *userData,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid,
- int has_internal_subset)
-{
- FcConfigParse *parse = userData;
-
- if (strcmp ((char *) doctypeName, "fontconfig") != 0)
- FcConfigMessage (parse, FcSevereError, "invalid doctype \"%s\"", doctypeName);
-}
-
-#ifdef ENABLE_LIBXML2
-
-static void
-FcInternalSubsetDecl (void *userData,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid)
-{
- FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 1);
-}
-
-static void
-FcExternalSubsetDecl (void *userData,
- const XML_Char *doctypeName,
- const XML_Char *sysid,
- const XML_Char *pubid)
-{
- FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 0);
-}
-
-#else /* ENABLE_LIBXML2 */
-
-static void
-FcEndDoctypeDecl (void *userData)
-{
-}
-
-#endif /* ENABLE_LIBXML2 */
-
-static int
-FcSortCmpStr (const void *a, const void *b)
-{
- const FcChar8 *as = *((FcChar8 **) a);
- const FcChar8 *bs = *((FcChar8 **) b);
- return FcStrCmp (as, bs);
-}
-
-static FcBool
-FcConfigParseAndLoadDir (FcConfig *config,
- const FcChar8 *name,
- const FcChar8 *dir,
- FcBool complain)
-{
- DIR *d;
- struct dirent *e;
- FcBool ret = FcTrue;
- FcChar8 *file;
- FcChar8 *base;
- FcStrSet *files;
-
- d = opendir ((char *) dir);
- if (!d)
- {
- if (complain)
- FcConfigMessage (0, FcSevereError, "Cannot open config dir \"%s\"",
- name);
- ret = FcFalse;
- goto bail0;
- }
- /* freed below */
- file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1);
- if (!file)
- {
- ret = FcFalse;
- goto bail1;
- }
-
- strcpy ((char *) file, (char *) dir);
- strcat ((char *) file, "/");
- base = file + strlen ((char *) file);
-
- files = FcStrSetCreate ();
- if (!files)
- {
- ret = FcFalse;
- goto bail2;
- }
-
- if (FcDebug () & FC_DBG_CONFIG)
- printf ("\tScanning config dir %s\n", dir);
-
- while (ret && (e = readdir (d)))
- {
- int d_len;
-#define TAIL ".conf"
-#define TAIL_LEN 5
- /*
- * Add all files of the form [0-9]*.conf
- */
- if ('0' <= e->d_name[0] && e->d_name[0] <= '9' &&
- (d_len = strlen (e->d_name)) < FC_MAX_FILE_LEN &&
- d_len > TAIL_LEN &&
- strcmp (e->d_name + d_len - TAIL_LEN, TAIL) == 0)
- {
- strcpy ((char *) base, (char *) e->d_name);
- if (!FcStrSetAdd (files, file))
- {
- ret = FcFalse;
- goto bail3;
- }
- }
- }
- if (ret)
- {
- int i;
- qsort (files->strs, files->num, sizeof (FcChar8 *),
- (int (*)(const void *, const void *)) FcSortCmpStr);
- for (i = 0; ret && i < files->num; i++)
- ret = FcConfigParseAndLoad (config, files->strs[i], complain);
- }
-bail3:
- FcStrSetDestroy (files);
-bail2:
- free (file);
-bail1:
- closedir (d);
-bail0:
- return ret || !complain;
-}
-
-FcBool
-FcConfigParseAndLoad (FcConfig *config,
- const FcChar8 *name,
- FcBool complain)
-{
-
- XML_Parser p;
- FcChar8 *filename;
- int fd;
- int len;
- FcConfigParse parse;
- FcBool error = FcTrue;
-
-#ifdef ENABLE_LIBXML2
- xmlSAXHandler sax;
- char buf[BUFSIZ];
-#else
- void *buf;
-#endif
-
- filename = FcConfigFilename (name);
- if (!filename)
- goto bail0;
-
- if (FcStrSetMember (config->configFiles, filename))
- {
- FcStrFree (filename);
- return FcTrue;
- }
-
- if (!FcStrSetAdd (config->configFiles, filename))
- {
- FcStrFree (filename);
- goto bail0;
- }
-
- if (FcFileIsDir (filename))
- {
- FcBool ret = FcConfigParseAndLoadDir (config, name, filename, complain);
- FcStrFree (filename);
- return ret;
- }
-
- if (FcDebug () & FC_DBG_CONFIG)
- printf ("\tLoading config file %s\n", filename);
-
- fd = open ((char *) filename, O_RDONLY);
- if (fd == -1) {
- FcStrFree (filename);
- goto bail0;
- }
-
-#ifdef ENABLE_LIBXML2
- memset(&sax, 0, sizeof(sax));
-
- sax.internalSubset = FcInternalSubsetDecl;
- sax.externalSubset = FcExternalSubsetDecl;
- sax.startElement = FcStartElement;
- sax.endElement = FcEndElement;
- sax.characters = FcCharacterData;
-
- p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, (const char *) filename);
-#else
- p = XML_ParserCreate ("UTF-8");
-#endif
- FcStrFree (filename);
-
- if (!p)
- goto bail1;
-
- if (!FcConfigInit (&parse, name, config, p))
- goto bail2;
-
-#ifndef ENABLE_LIBXML2
-
- XML_SetUserData (p, &parse);
-
- XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl);
- XML_SetElementHandler (p, FcStartElement, FcEndElement);
- XML_SetCharacterDataHandler (p, FcCharacterData);
-
-#endif /* ENABLE_LIBXML2 */
-
- do {
-#ifndef ENABLE_LIBXML2
- buf = XML_GetBuffer (p, BUFSIZ);
- if (!buf)
- {
- FcConfigMessage (&parse, FcSevereError, "cannot get parse buffer");
- goto bail3;
- }
-#endif
- len = read (fd, buf, BUFSIZ);
- if (len < 0)
- {
- FcConfigMessage (&parse, FcSevereError, "failed reading config file");
- goto bail3;
- }
-
-#ifdef ENABLE_LIBXML2
- if (xmlParseChunk (p, buf, len, len == 0))
-#else
- if (!XML_ParseBuffer (p, len, len == 0))
-#endif
- {
- FcConfigMessage (&parse, FcSevereError, "%s",
- XML_ErrorString (XML_GetErrorCode (p)));
- goto bail3;
- }
- } while (len != 0);
- error = parse.error;
-bail3:
- FcConfigCleanup (&parse);
-bail2:
- XML_ParserFree (p);
-bail1:
- close (fd);
- fd = -1;
-bail0:
- if (error && complain)
- {
- if (name)
- FcConfigMessage (0, FcSevereError, "Cannot load config file \"%s\"", name);
- else
- FcConfigMessage (0, FcSevereError, "Cannot load default config file");
- return FcFalse;
- }
- return FcTrue;
-}
-#define __fcxml__
-#include "fcaliastail.h"
-#undef __fcxml__
+/* + * fontconfig/src/fcxml.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include <fcntl.h> +#include <stdarg.h> +#include <dirent.h> + +#ifdef ENABLE_LIBXML2 + +#include <libxml/parser.h> + +#define XML_Char xmlChar +#define XML_Parser xmlParserCtxtPtr +#define XML_ParserFree xmlFreeParserCtxt +#define XML_GetCurrentLineNumber xmlSAX2GetLineNumber +#define XML_GetErrorCode xmlCtxtGetLastError +#define XML_ErrorString(Error) (Error)->message + +#else /* ENABLE_LIBXML2 */ + +#ifndef HAVE_XMLPARSE_H +#define HAVE_XMLPARSE_H 0 +#endif + +#if HAVE_XMLPARSE_H +#include <xmlparse.h> +#else +#include <expat.h> +#endif + +#endif /* ENABLE_LIBXML2 */ + +#ifdef _WIN32 +#include <mbstring.h> +#endif + +static void +FcExprDestroy (FcExpr *e); + +void +FcTestDestroy (FcTest *test) +{ + if (test->next) + FcTestDestroy (test->next); + FcExprDestroy (test->expr); + FcMemFree (FC_MEM_TEST, sizeof (FcTest)); + free (test); +} + +static FcExpr * +FcExprCreateInteger (FcConfig *config, int i) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpInteger; + e->u.ival = i; + } + return e; +} + +static FcExpr * +FcExprCreateDouble (FcConfig *config, double d) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpDouble; + e->u.dval = d; + } + return e; +} + +static FcExpr * +FcExprCreateString (FcConfig *config, const FcChar8 *s) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpString; + e->u.sval = FcStrStaticName (s); + } + return e; +} + +static FcExpr * +FcExprCreateMatrix (FcConfig *config, const FcMatrix *m) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpMatrix; + e->u.mval = FcMatrixCopy (m); + } + return e; +} + +static FcExpr * +FcExprCreateBool (FcConfig *config, FcBool b) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpBool; + e->u.bval = b; + } + return e; +} + +static FcExpr * +FcExprCreateCharSet (FcConfig *config, FcCharSet *charset) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpCharSet; + e->u.cval = FcCharSetCopy (charset); + } + return e; +} + +static FcExpr * +FcExprCreateLangSet (FcConfig *config, FcLangSet *langset) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpLangSet; + e->u.lval = FcLangSetCopy (langset); + } + return e; +} + +static FcExpr * +FcExprCreateField (FcConfig *config, const char *field) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpField; + e->u.object = FcObjectFromName (field); + } + return e; +} + +static FcExpr * +FcExprCreateConst (FcConfig *config, const FcChar8 *constant) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = FcOpConst; + e->u.constant = FcStrStaticName (constant); + } + return e; +} + +static FcExpr * +FcExprCreateOp (FcConfig *config, FcExpr *left, FcOp op, FcExpr *right) +{ + FcExpr *e = FcConfigAllocExpr (config); + if (e) + { + e->op = op; + e->u.tree.left = left; + e->u.tree.right = right; + } + return e; +} + +static void +FcExprDestroy (FcExpr *e) +{ + if (!e) + return; + switch (e->op) { + case FcOpInteger: + break; + case FcOpDouble: + break; + case FcOpString: + break; + case FcOpMatrix: + FcMatrixFree (e->u.mval); + break; + case FcOpRange: + break; + case FcOpCharSet: + FcCharSetDestroy (e->u.cval); + break; + case FcOpLangSet: + FcLangSetDestroy (e->u.lval); + break; + case FcOpBool: + break; + case FcOpField: + break; + case FcOpConst: + break; + case FcOpAssign: + case FcOpAssignReplace: + case FcOpPrepend: + case FcOpPrependFirst: + case FcOpAppend: + case FcOpAppendLast: + break; + case FcOpOr: + case FcOpAnd: + case FcOpEqual: + case FcOpNotEqual: + case FcOpLess: + case FcOpLessEqual: + case FcOpMore: + case FcOpMoreEqual: + case FcOpContains: + case FcOpListing: + case FcOpNotContains: + case FcOpPlus: + case FcOpMinus: + case FcOpTimes: + case FcOpDivide: + case FcOpQuest: + case FcOpComma: + FcExprDestroy (e->u.tree.right); + /* fall through */ + case FcOpNot: + case FcOpFloor: + case FcOpCeil: + case FcOpRound: + case FcOpTrunc: + FcExprDestroy (e->u.tree.left); + break; + case FcOpNil: + case FcOpInvalid: + break; + } + + e->op = FcOpNil; +} + +void +FcEditDestroy (FcEdit *e) +{ + if (e->next) + FcEditDestroy (e->next); + if (e->expr) + FcExprDestroy (e->expr); + free (e); +} + +typedef enum _FcElement { + FcElementNone, + FcElementFontconfig, + FcElementDir, + FcElementCacheDir, + FcElementCache, + FcElementInclude, + FcElementConfig, + FcElementMatch, + FcElementAlias, + + FcElementBlank, + FcElementRescan, + + FcElementPrefer, + FcElementAccept, + FcElementDefault, + FcElementFamily, + + FcElementSelectfont, + FcElementAcceptfont, + FcElementRejectfont, + FcElementGlob, + FcElementPattern, + FcElementPatelt, + + FcElementTest, + FcElementEdit, + FcElementInt, + FcElementDouble, + FcElementString, + FcElementMatrix, + FcElementRange, + FcElementBool, + FcElementCharSet, + FcElementLangSet, + FcElementName, + FcElementConst, + FcElementOr, + FcElementAnd, + FcElementEq, + FcElementNotEq, + FcElementLess, + FcElementLessEq, + FcElementMore, + FcElementMoreEq, + FcElementContains, + FcElementNotContains, + FcElementPlus, + FcElementMinus, + FcElementTimes, + FcElementDivide, + FcElementNot, + FcElementIf, + FcElementFloor, + FcElementCeil, + FcElementRound, + FcElementTrunc, + FcElementUnknown +} FcElement; + +static const struct { + const char name[16]; + FcElement element; +} fcElementMap[] = { + { "fontconfig", FcElementFontconfig }, + { "dir", FcElementDir }, + { "cachedir", FcElementCacheDir }, + { "cache", FcElementCache }, + { "include", FcElementInclude }, + { "config", FcElementConfig }, + { "match", FcElementMatch }, + { "alias", FcElementAlias }, + + { "blank", FcElementBlank }, + { "rescan", FcElementRescan }, + + { "prefer", FcElementPrefer }, + { "accept", FcElementAccept }, + { "default", FcElementDefault }, + { "family", FcElementFamily }, + + { "selectfont", FcElementSelectfont }, + { "acceptfont", FcElementAcceptfont }, + { "rejectfont", FcElementRejectfont }, + { "glob", FcElementGlob }, + { "pattern", FcElementPattern }, + { "patelt", FcElementPatelt }, + + { "test", FcElementTest }, + { "edit", FcElementEdit }, + { "int", FcElementInt }, + { "double", FcElementDouble }, + { "string", FcElementString }, + { "matrix", FcElementMatrix }, + { "range", FcElementRange }, + { "bool", FcElementBool }, + { "charset", FcElementCharSet }, + { "langset", FcElementLangSet }, + { "name", FcElementName }, + { "const", FcElementConst }, + { "or", FcElementOr }, + { "and", FcElementAnd }, + { "eq", FcElementEq }, + { "not_eq", FcElementNotEq }, + { "less", FcElementLess }, + { "less_eq", FcElementLessEq }, + { "more", FcElementMore }, + { "more_eq", FcElementMoreEq }, + { "contains", FcElementContains }, + { "not_contains", FcElementNotContains }, + { "plus", FcElementPlus }, + { "minus", FcElementMinus }, + { "times", FcElementTimes }, + { "divide", FcElementDivide }, + { "not", FcElementNot }, + { "if", FcElementIf }, + { "floor", FcElementFloor }, + { "ceil", FcElementCeil }, + { "round", FcElementRound }, + { "trunc", FcElementTrunc }, +}; +#define NUM_ELEMENT_MAPS (int) (sizeof fcElementMap / sizeof fcElementMap[0]) + +static FcElement +FcElementMap (const XML_Char *name) +{ + + int i; + for (i = 0; i < NUM_ELEMENT_MAPS; i++) + if (!strcmp ((char *) name, fcElementMap[i].name)) + return fcElementMap[i].element; + return FcElementUnknown; +} + +typedef struct _FcPStack { + struct _FcPStack *prev; + FcElement element; + FcChar8 **attr; + FcStrBuf str; + FcChar8 *attr_buf_static[16]; +} FcPStack; + +typedef enum _FcVStackTag { + FcVStackNone, + + FcVStackString, + FcVStackFamily, + FcVStackField, + FcVStackConstant, + FcVStackGlob, + FcVStackPattern, + + FcVStackPrefer, + FcVStackAccept, + FcVStackDefault, + + FcVStackInteger, + FcVStackDouble, + FcVStackMatrix, + FcVStackRange, + FcVStackBool, + FcVStackCharSet, + FcVStackLangSet, + + FcVStackTest, + FcVStackExpr, + FcVStackEdit +} FcVStackTag; + +typedef struct _FcVStack { + struct _FcVStack *prev; + FcPStack *pstack; /* related parse element */ + FcVStackTag tag; + union { + FcChar8 *string; + + int integer; + double _double; + FcMatrix *matrix; + FcRange range; + FcBool bool_; + FcCharSet *charset; + FcLangSet *langset; + + FcTest *test; + FcQual qual; + FcOp op; + FcExpr *expr; + FcEdit *edit; + + FcPattern *pattern; + } u; +} FcVStack; + +typedef struct _FcConfigParse { + FcPStack *pstack; + FcVStack *vstack; + FcBool error; + const FcChar8 *name; + FcConfig *config; + XML_Parser parser; + int pstack_static_used; + FcPStack pstack_static[8]; + int vstack_static_used; + FcVStack vstack_static[64]; +} FcConfigParse; + +typedef enum _FcConfigSeverity { + FcSevereInfo, FcSevereWarning, FcSevereError +} FcConfigSeverity; + +static void +FcConfigMessage (FcConfigParse *parse, FcConfigSeverity severe, const char *fmt, ...) +{ + const char *s = "unknown"; + va_list args; + + va_start (args, fmt); + + switch (severe) { + case FcSevereInfo: s = "info"; break; + case FcSevereWarning: s = "warning"; break; + case FcSevereError: s = "error"; break; + } + if (parse) + { + if (parse->name) + fprintf (stderr, "Fontconfig %s: \"%s\", line %d: ", s, + parse->name, (int)XML_GetCurrentLineNumber (parse->parser)); + else + fprintf (stderr, "Fontconfig %s: line %d: ", s, + (int)XML_GetCurrentLineNumber (parse->parser)); + if (severe >= FcSevereError) + parse->error = FcTrue; + } + else + fprintf (stderr, "Fontconfig %s: ", s); + vfprintf (stderr, fmt, args); + fprintf (stderr, "\n"); + va_end (args); +} + + +static const char * +FcTypeName (FcType type) +{ + switch (type) { + case FcTypeVoid: + return "void"; + case FcTypeInteger: + case FcTypeDouble: + return "number"; + case FcTypeString: + return "string"; + case FcTypeBool: + return "bool"; + case FcTypeMatrix: + return "matrix"; + case FcTypeCharSet: + return "charset"; + case FcTypeFTFace: + return "FT_Face"; + case FcTypeLangSet: + return "langset"; + default: + return "unknown"; + } +} + +static void +FcTypecheckValue (FcConfigParse *parse, FcType value, FcType type) +{ + if (value == FcTypeInteger) + value = FcTypeDouble; + if (type == FcTypeInteger) + type = FcTypeDouble; + if (value != type) + { + if ((value == FcTypeLangSet && type == FcTypeString) || + (value == FcTypeString && type == FcTypeLangSet)) + return; + if (type == (FcType) -1) + return; + FcConfigMessage (parse, FcSevereWarning, "saw %s, expected %s", + FcTypeName (value), FcTypeName (type)); + } +} + +static void +FcTypecheckExpr (FcConfigParse *parse, FcExpr *expr, FcType type) +{ + const FcObjectType *o; + const FcConstant *c; + + /* If parsing the expression failed, some nodes may be NULL */ + if (!expr) + return; + + switch (expr->op) { + case FcOpInteger: + case FcOpDouble: + FcTypecheckValue (parse, FcTypeDouble, type); + break; + case FcOpString: + FcTypecheckValue (parse, FcTypeString, type); + break; + case FcOpMatrix: + FcTypecheckValue (parse, FcTypeMatrix, type); + break; + case FcOpBool: + FcTypecheckValue (parse, FcTypeBool, type); + break; + case FcOpCharSet: + FcTypecheckValue (parse, FcTypeCharSet, type); + break; + case FcOpLangSet: + FcTypecheckValue (parse, FcTypeLangSet, type); + break; + case FcOpNil: + break; + case FcOpField: + o = FcNameGetObjectType (FcObjectName (expr->u.object)); + if (o) + FcTypecheckValue (parse, o->type, type); + break; + case FcOpConst: + c = FcNameGetConstant (expr->u.constant); + if (c) + { + o = FcNameGetObjectType (c->object); + if (o) + FcTypecheckValue (parse, o->type, type); + } + else + FcConfigMessage (parse, FcSevereWarning, + "invalid constant used : %s", + expr->u.constant); + break; + case FcOpQuest: + FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool); + FcTypecheckExpr (parse, expr->u.tree.right->u.tree.left, type); + FcTypecheckExpr (parse, expr->u.tree.right->u.tree.right, type); + break; + case FcOpAssign: + case FcOpAssignReplace: + break; + case FcOpEqual: + case FcOpNotEqual: + case FcOpLess: + case FcOpLessEqual: + case FcOpMore: + case FcOpMoreEqual: + case FcOpContains: + case FcOpNotContains: + case FcOpListing: + FcTypecheckValue (parse, FcTypeBool, type); + break; + case FcOpComma: + case FcOpOr: + case FcOpAnd: + case FcOpPlus: + case FcOpMinus: + case FcOpTimes: + case FcOpDivide: + FcTypecheckExpr (parse, expr->u.tree.left, type); + FcTypecheckExpr (parse, expr->u.tree.right, type); + break; + case FcOpNot: + FcTypecheckValue (parse, FcTypeBool, type); + FcTypecheckExpr (parse, expr->u.tree.left, FcTypeBool); + break; + case FcOpFloor: + case FcOpCeil: + case FcOpRound: + case FcOpTrunc: + FcTypecheckValue (parse, FcTypeDouble, type); + FcTypecheckExpr (parse, expr->u.tree.left, FcTypeDouble); + break; + default: + break; + } +} + +static FcTest * +FcTestCreate (FcConfigParse *parse, + FcMatchKind kind, + FcQual qual, + const FcChar8 *field, + FcOp compare, + FcExpr *expr) +{ + FcTest *test = (FcTest *) malloc (sizeof (FcTest)); + + if (test) + { + const FcObjectType *o; + + FcMemAlloc (FC_MEM_TEST, sizeof (FcTest)); + test->next = 0; + test->kind = kind; + test->qual = qual; + test->object = FcObjectFromName ((const char *) field); + test->op = compare; + test->expr = expr; + o = FcNameGetObjectType (FcObjectName (test->object)); + if (o) + FcTypecheckExpr (parse, expr, o->type); + } + return test; +} + +static FcEdit * +FcEditCreate (FcConfigParse *parse, + FcObject object, + FcOp op, + FcExpr *expr, + FcValueBinding binding) +{ + FcEdit *e = (FcEdit *) malloc (sizeof (FcEdit)); + + if (e) + { + const FcObjectType *o; + + e->next = 0; + e->object = object; + e->op = op; + e->expr = expr; + e->binding = binding; + o = FcNameGetObjectType (FcObjectName (e->object)); + if (o) + FcTypecheckExpr (parse, expr, o->type); + } + return e; +} + +static FcVStack * +FcVStackCreateAndPush (FcConfigParse *parse) +{ + FcVStack *new; + + if (parse->vstack_static_used < sizeof (parse->vstack_static) / sizeof (parse->vstack_static[0])) + new = &parse->vstack_static[parse->vstack_static_used++]; + else + { + new = malloc (sizeof (FcVStack)); + if (!new) + return 0; + FcMemAlloc (FC_MEM_VSTACK, sizeof (FcVStack)); + } + new->tag = FcVStackNone; + new->prev = 0; + + new->prev = parse->vstack; + new->pstack = parse->pstack ? parse->pstack->prev : 0; + parse->vstack = new; + + return new; +} + +static FcBool +FcVStackPushString (FcConfigParse *parse, FcVStackTag tag, FcChar8 *string) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.string = string; + vstack->tag = tag; + return FcTrue; +} + +static FcBool +FcVStackPushInteger (FcConfigParse *parse, int integer) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.integer = integer; + vstack->tag = FcVStackInteger; + return FcTrue; +} + +static FcBool +FcVStackPushDouble (FcConfigParse *parse, double _double) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u._double = _double; + vstack->tag = FcVStackDouble; + return FcTrue; +} + +static FcBool +FcVStackPushMatrix (FcConfigParse *parse, FcMatrix *matrix) +{ + FcVStack *vstack; + matrix = FcMatrixCopy (matrix); + if (!matrix) + return FcFalse; + vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.matrix = matrix; + vstack->tag = FcVStackMatrix; + return FcTrue; +} + +static FcBool +FcVStackPushRange (FcConfigParse *parse, FcRange *range) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.range.begin = range->begin; + vstack->u.range.end = range->end; + vstack->tag = FcVStackRange; + return FcTrue; +} + +static FcBool +FcVStackPushBool (FcConfigParse *parse, FcBool bool_) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.bool_ = bool_; + vstack->tag = FcVStackBool; + return FcTrue; +} + +static FcBool +FcVStackPushCharSet (FcConfigParse *parse, FcCharSet *charset) +{ + FcVStack *vstack; + if (!charset) + return FcFalse; + vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.charset = charset; + vstack->tag = FcVStackCharSet; + return FcTrue; +} + +static FcBool +FcVStackPushLangSet (FcConfigParse *parse, FcLangSet *langset) +{ + FcVStack *vstack; + if (!langset) + return FcFalse; + vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.langset = langset; + vstack->tag = FcVStackLangSet; + return FcTrue; +} + +static FcBool +FcVStackPushTest (FcConfigParse *parse, FcTest *test) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.test = test; + vstack->tag = FcVStackTest; + return FcTrue; +} + +static FcBool +FcVStackPushExpr (FcConfigParse *parse, FcVStackTag tag, FcExpr *expr) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.expr = expr; + vstack->tag = tag; + return FcTrue; +} + +static FcBool +FcVStackPushEdit (FcConfigParse *parse, FcEdit *edit) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.edit = edit; + vstack->tag = FcVStackEdit; + return FcTrue; +} + +static FcBool +FcVStackPushPattern (FcConfigParse *parse, FcPattern *pattern) +{ + FcVStack *vstack = FcVStackCreateAndPush (parse); + if (!vstack) + return FcFalse; + vstack->u.pattern = pattern; + vstack->tag = FcVStackPattern; + return FcTrue; +} + +static FcVStack * +FcVStackFetch (FcConfigParse *parse, int off) +{ + FcVStack *vstack; + + for (vstack = parse->vstack; vstack && off-- > 0; vstack = vstack->prev); + return vstack; +} + +static FcVStack * +FcVStackPeek (FcConfigParse *parse) +{ + FcVStack *vstack = parse->vstack; + + return vstack && vstack->pstack == parse->pstack ? vstack : 0; +} + +static void +FcVStackPopAndDestroy (FcConfigParse *parse) +{ + FcVStack *vstack = parse->vstack; + + if (!vstack || vstack->pstack != parse->pstack) + return; + + parse->vstack = vstack->prev; + + switch (vstack->tag) { + case FcVStackNone: + break; + case FcVStackFamily: + break; + case FcVStackString: + case FcVStackField: + case FcVStackConstant: + case FcVStackGlob: + FcStrFree (vstack->u.string); + break; + case FcVStackPattern: + FcPatternDestroy (vstack->u.pattern); + break; + case FcVStackInteger: + case FcVStackDouble: + break; + case FcVStackMatrix: + FcMatrixFree (vstack->u.matrix); + break; + case FcVStackRange: + case FcVStackBool: + break; + case FcVStackCharSet: + FcCharSetDestroy (vstack->u.charset); + break; + case FcVStackLangSet: + FcLangSetDestroy (vstack->u.langset); + break; + case FcVStackTest: + FcTestDestroy (vstack->u.test); + break; + case FcVStackExpr: + case FcVStackPrefer: + case FcVStackAccept: + case FcVStackDefault: + FcExprDestroy (vstack->u.expr); + break; + case FcVStackEdit: + FcEditDestroy (vstack->u.edit); + break; + } + + if (vstack == &parse->vstack_static[parse->vstack_static_used - 1]) + parse->vstack_static_used--; + else + { + FcMemFree (FC_MEM_VSTACK, sizeof (FcVStack)); + free (vstack); + } +} + +static void +FcVStackClear (FcConfigParse *parse) +{ + while (FcVStackPeek (parse)) + FcVStackPopAndDestroy (parse); +} + +static int +FcVStackElements (FcConfigParse *parse) +{ + int h = 0; + FcVStack *vstack = parse->vstack; + while (vstack && vstack->pstack == parse->pstack) + { + h++; + vstack = vstack->prev; + } + return h; +} + +static FcChar8 ** +FcConfigSaveAttr (const XML_Char **attr, FcChar8 **buf, int size_bytes) +{ + int slen; + int i; + FcChar8 **new; + FcChar8 *s; + + if (!attr) + return 0; + slen = 0; + for (i = 0; attr[i]; i++) + slen += strlen ((char *) attr[i]) + 1; + if (i == 0) + return 0; + slen += (i + 1) * sizeof (FcChar8 *); + if (slen <= size_bytes) + new = buf; + else + { + new = malloc (slen); + if (!new) + { + FcConfigMessage (0, FcSevereError, "out of memory"); + return 0; + } + FcMemAlloc (FC_MEM_ATTR, 1); /* size is too expensive */ + } + s = (FcChar8 *) (new + (i + 1)); + for (i = 0; attr[i]; i++) + { + new[i] = s; + strcpy ((char *) s, (char *) attr[i]); + s += strlen ((char *) s) + 1; + } + new[i] = 0; + return new; +} + +static FcBool +FcPStackPush (FcConfigParse *parse, FcElement element, const XML_Char **attr) +{ + FcPStack *new; + + if (parse->pstack_static_used < sizeof (parse->pstack_static) / sizeof (parse->pstack_static[0])) + new = &parse->pstack_static[parse->pstack_static_used++]; + else + { + new = malloc (sizeof (FcPStack)); + if (!new) + return FcFalse; + FcMemAlloc (FC_MEM_PSTACK, sizeof (FcPStack)); + } + + new->prev = parse->pstack; + new->element = element; + new->attr = FcConfigSaveAttr (attr, new->attr_buf_static, sizeof (new->attr_buf_static)); + FcStrBufInit (&new->str, 0, 0); + parse->pstack = new; + return FcTrue; +} + +static FcBool +FcPStackPop (FcConfigParse *parse) +{ + FcPStack *old; + + if (!parse->pstack) + { + FcConfigMessage (parse, FcSevereError, "mismatching element"); + return FcFalse; + } + FcVStackClear (parse); + old = parse->pstack; + parse->pstack = old->prev; + FcStrBufDestroy (&old->str); + if (old->attr && old->attr != old->attr_buf_static) + { + FcMemFree (FC_MEM_ATTR, 1); /* size is to expensive */ + free (old->attr); + } + + if (old == &parse->pstack_static[parse->pstack_static_used - 1]) + parse->pstack_static_used--; + else + { + FcMemFree (FC_MEM_PSTACK, sizeof (FcPStack)); + free (old); + } + return FcTrue; +} + +static FcBool +FcConfigInit (FcConfigParse *parse, const FcChar8 *name, FcConfig *config, XML_Parser parser) +{ + parse->pstack = 0; + parse->pstack_static_used = 0; + parse->vstack = 0; + parse->vstack_static_used = 0; + parse->error = FcFalse; + parse->name = name; + parse->config = config; + parse->parser = parser; + return FcTrue; +} + +static void +FcConfigCleanup (FcConfigParse *parse) +{ + while (parse->pstack) + FcPStackPop (parse); +} + +static const FcChar8 * +FcConfigGetAttribute (FcConfigParse *parse, const char *attr) +{ + FcChar8 **attrs; + if (!parse->pstack) + return 0; + + attrs = parse->pstack->attr; + if (!attrs) + return 0; + + while (*attrs) + { + if (!strcmp ((char *) *attrs, attr)) + return attrs[1]; + attrs += 2; + } + return 0; +} + +static void +FcStartElement(void *userData, const XML_Char *name, const XML_Char **attr) +{ + FcConfigParse *parse = userData; + FcElement element; + + element = FcElementMap (name); + if (element == FcElementUnknown) + FcConfigMessage (parse, FcSevereWarning, "unknown element \"%s\"", name); + + if (!FcPStackPush (parse, element, attr)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + return; +} + +static void +FcParseBlank (FcConfigParse *parse) +{ + int n = FcVStackElements (parse); + FcChar32 i; + while (n-- > 0) + { + FcVStack *v = FcVStackFetch (parse, n); + if (!parse->config->blanks) + { + parse->config->blanks = FcBlanksCreate (); + if (!parse->config->blanks) + goto bail; + } + switch (v->tag) { + case FcVStackInteger: + if (!FcBlanksAdd (parse->config->blanks, v->u.integer)) + goto bail; + break; + case FcVStackRange: + if (v->u.range.begin <= v->u.range.end) + { + for (i = v->u.range.begin; i <= v->u.range.end; i++) + { + if (!FcBlanksAdd (parse->config->blanks, i)) + goto bail; + } + } + break; + default: + FcConfigMessage (parse, FcSevereError, "invalid element in blank"); + break; + } + } + return; + bail: + FcConfigMessage (parse, FcSevereError, "out of memory"); +} + +static void +FcParseRescan (FcConfigParse *parse) +{ + int n = FcVStackElements (parse); + while (n-- > 0) + { + FcVStack *v = FcVStackFetch (parse, n); + if (v->tag != FcVStackInteger) + FcConfigMessage (parse, FcSevereWarning, "non-integer rescan"); + else + parse->config->rescanInterval = v->u.integer; + } +} + +static void +FcParseInt (FcConfigParse *parse) +{ + FcChar8 *s, *end; + int l; + + if (!parse->pstack) + return; + s = FcStrBufDoneStatic (&parse->pstack->str); + if (!s) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + end = 0; + l = (int) strtol ((char *) s, (char **)&end, 0); + if (end != s + strlen ((char *) s)) + FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid integer", s); + else + FcVStackPushInteger (parse, l); + FcStrBufDestroy (&parse->pstack->str); +} + +/* + * idea copied from glib g_ascii_strtod with + * permission of the author (Alexander Larsson) + */ + +#include <locale.h> + +static double +FcStrtod (char *s, char **end) +{ + struct lconv *locale_data; + char *dot; + double v; + + /* + * Have to swap the decimal point to match the current locale + * if that locale doesn't use 0x2e + */ + if ((dot = strchr (s, 0x2e)) && + (locale_data = localeconv ()) && + (locale_data->decimal_point[0] != 0x2e || + locale_data->decimal_point[1] != 0)) + { + char buf[128]; + int slen = strlen (s); + int dlen = strlen (locale_data->decimal_point); + + if (slen + dlen > (int) sizeof (buf)) + { + if (end) + *end = s; + v = 0; + } + else + { + char *buf_end; + /* mantissa */ + strncpy (buf, s, dot - s); + /* decimal point */ + strcpy (buf + (dot - s), locale_data->decimal_point); + /* rest of number */ + strcpy (buf + (dot - s) + dlen, dot + 1); + buf_end = 0; + v = strtod (buf, &buf_end); + if (buf_end) { + buf_end = s + (buf_end - buf); + if (buf_end > dot) + buf_end -= dlen - 1; + } + if (end) + *end = buf_end; + } + } + else + v = strtod (s, end); + return v; +} + +static void +FcParseDouble (FcConfigParse *parse) +{ + FcChar8 *s, *end; + double d; + + if (!parse->pstack) + return; + s = FcStrBufDoneStatic (&parse->pstack->str); + if (!s) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + end = 0; + d = FcStrtod ((char *) s, (char **)&end); + if (end != s + strlen ((char *) s)) + FcConfigMessage (parse, FcSevereError, "\"%s\": not a valid double", s); + else + FcVStackPushDouble (parse, d); + FcStrBufDestroy (&parse->pstack->str); +} + +static void +FcParseString (FcConfigParse *parse, FcVStackTag tag) +{ + FcChar8 *s; + + if (!parse->pstack) + return; + s = FcStrBufDone (&parse->pstack->str); + if (!s) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + if (!FcVStackPushString (parse, tag, s)) + FcStrFree (s); +} + +static void +FcParseMatrix (FcConfigParse *parse) +{ + FcVStack *vstack; + enum { m_done, m_xx, m_xy, m_yx, m_yy } matrix_state = m_yy; + FcMatrix m; + + while ((vstack = FcVStackPeek (parse))) + { + double v; + switch (vstack->tag) { + case FcVStackInteger: + v = vstack->u.integer; + break; + case FcVStackDouble: + v = vstack->u._double; + break; + default: + FcConfigMessage (parse, FcSevereError, "non-double matrix element"); + v = 1.0; + break; + } + switch (matrix_state) { + case m_xx: m.xx = v; break; + case m_xy: m.xy = v; break; + case m_yx: m.yx = v; break; + case m_yy: m.yy = v; break; + default: break; + } + FcVStackPopAndDestroy (parse); + matrix_state--; + } + if (matrix_state != m_done) + FcConfigMessage (parse, FcSevereError, "wrong number of matrix elements"); + else + FcVStackPushMatrix (parse, &m); +} + +static void +FcParseRange (FcConfigParse *parse) +{ + FcVStack *vstack; + FcRange r; + FcChar32 n; + int count = 1; + + while ((vstack = FcVStackPeek (parse))) + { + if (count < 0) + { + FcConfigMessage (parse, FcSevereError, "too many elements in range"); + return; + } + switch (vstack->tag) { + case FcVStackInteger: + n = vstack->u.integer; + break; + default: + FcConfigMessage (parse, FcSevereError, "invalid element in range"); + break; + } + if (count == 1) + r.end = n; + else + r.begin = n; + count--; + FcVStackPopAndDestroy (parse); + } + if (count < 0) + { + if (r.begin > r.end) + { + FcConfigMessage (parse, FcSevereError, "invalid range"); + return; + } + FcVStackPushRange (parse, &r); + } + else + FcConfigMessage (parse, FcSevereError, "invalid range"); +} + +static FcBool +FcConfigLexBool (FcConfigParse *parse, const FcChar8 *bool_) +{ + FcBool result = FcFalse; + + if (!FcNameBool (bool_, &result)) + FcConfigMessage (parse, FcSevereWarning, "\"%s\" is not known boolean", + bool_); + return result; +} + +static void +FcParseBool (FcConfigParse *parse) +{ + FcChar8 *s; + + if (!parse->pstack) + return; + s = FcStrBufDoneStatic (&parse->pstack->str); + if (!s) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + FcVStackPushBool (parse, FcConfigLexBool (parse, s)); + FcStrBufDestroy (&parse->pstack->str); +} + +static void +FcParseCharSet (FcConfigParse *parse) +{ + FcVStack *vstack; + FcCharSet *charset = FcCharSetCreate (); + FcChar32 i; + int n = 0; + + while ((vstack = FcVStackPeek (parse))) + { + switch (vstack->tag) { + case FcVStackInteger: + if (!FcCharSetAddChar (charset, vstack->u.integer)) + { + FcConfigMessage (parse, FcSevereWarning, "invalid character: 0x%04x", vstack->u.integer); + } + else + n++; + break; + case FcVStackRange: + if (vstack->u.range.begin <= vstack->u.range.end) + { + for (i = vstack->u.range.begin; i <= vstack->u.range.end; i++) + { + if (!FcCharSetAddChar (charset, i)) + { + FcConfigMessage (parse, FcSevereWarning, "invalid character: 0x%04x", i); + } + else + n++; + } + } + break; + default: + FcConfigMessage (parse, FcSevereError, "invalid element in charset"); + break; + } + FcVStackPopAndDestroy (parse); + } + if (n > 0) + FcVStackPushCharSet (parse, charset); + else + FcCharSetDestroy (charset); +} + +static void +FcParseLangSet (FcConfigParse *parse) +{ + FcVStack *vstack; + FcLangSet *langset = FcLangSetCreate (); + int n = 0; + + while ((vstack = FcVStackPeek (parse))) + { + switch (vstack->tag) { + case FcVStackString: + if (!FcLangSetAdd (langset, vstack->u.string)) + { + FcConfigMessage (parse, FcSevereWarning, "invalid langset: %s", vstack->u.string); + } + else + n++; + break; + default: + FcConfigMessage (parse, FcSevereError, "invalid element in langset"); + break; + } + FcVStackPopAndDestroy (parse); + } + if (n > 0) + FcVStackPushLangSet (parse, langset); + else + FcLangSetDestroy (langset); +} + +static FcBool +FcConfigLexBinding (FcConfigParse *parse, + const FcChar8 *binding_string, + FcValueBinding *binding_ret) +{ + FcValueBinding binding; + + if (!binding_string) + binding = FcValueBindingWeak; + else + { + if (!strcmp ((char *) binding_string, "weak")) + binding = FcValueBindingWeak; + else if (!strcmp ((char *) binding_string, "strong")) + binding = FcValueBindingStrong; + else if (!strcmp ((char *) binding_string, "same")) + binding = FcValueBindingSame; + else + { + FcConfigMessage (parse, FcSevereWarning, "invalid binding \"%s\"", binding_string); + return FcFalse; + } + } + *binding_ret = binding; + return FcTrue; +} + +static void +FcParseFamilies (FcConfigParse *parse, FcVStackTag tag) +{ + FcVStack *vstack; + FcExpr *left, *expr = 0, *new; + + while ((vstack = FcVStackPeek (parse))) + { + if (vstack->tag != FcVStackFamily) + { + FcConfigMessage (parse, FcSevereWarning, "non-family"); + FcVStackPopAndDestroy (parse); + continue; + } + left = vstack->u.expr; + vstack->tag = FcVStackNone; + FcVStackPopAndDestroy (parse); + if (expr) + { + new = FcExprCreateOp (parse->config, left, FcOpComma, expr); + if (!new) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + FcExprDestroy (left); + FcExprDestroy (expr); + break; + } + expr = new; + } + else + expr = left; + } + if (expr) + { + if (!FcVStackPushExpr (parse, tag, expr)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + FcExprDestroy (expr); + } + } +} + +static void +FcParseFamily (FcConfigParse *parse) +{ + FcChar8 *s; + FcExpr *expr; + + if (!parse->pstack) + return; + s = FcStrBufDoneStatic (&parse->pstack->str); + if (!s) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + expr = FcExprCreateString (parse->config, s); + FcStrBufDestroy (&parse->pstack->str); + if (expr) + FcVStackPushExpr (parse, FcVStackFamily, expr); +} + +static void +FcParseAlias (FcConfigParse *parse) +{ + FcExpr *family = 0, *accept = 0, *prefer = 0, *def = 0, *new = 0; + FcEdit *edit = 0, *next; + FcVStack *vstack; + FcTest *test; + FcValueBinding binding; + + if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding)) + return; + while ((vstack = FcVStackPeek (parse))) + { + switch (vstack->tag) { + case FcVStackFamily: + if (family) + { + new = FcExprCreateOp (parse->config, vstack->u.expr, FcOpComma, family); + if (!new) + FcConfigMessage (parse, FcSevereError, "out of memory"); + else + family = new; + } + else + new = vstack->u.expr; + if (new) + { + family = new; + vstack->tag = FcVStackNone; + } + break; + case FcVStackPrefer: + if (prefer) + FcExprDestroy (prefer); + prefer = vstack->u.expr; + vstack->tag = FcVStackNone; + break; + case FcVStackAccept: + if (accept) + FcExprDestroy (accept); + accept = vstack->u.expr; + vstack->tag = FcVStackNone; + break; + case FcVStackDefault: + if (def) + FcExprDestroy (def); + def = vstack->u.expr; + vstack->tag = FcVStackNone; + break; + default: + FcConfigMessage (parse, FcSevereWarning, "bad alias"); + break; + } + FcVStackPopAndDestroy (parse); + } + if (!family) + { + FcConfigMessage (parse, FcSevereError, "missing family in alias"); + if (prefer) + FcExprDestroy (prefer); + if (accept) + FcExprDestroy (accept); + if (def) + FcExprDestroy (def); + return; + } + if (prefer) + { + edit = FcEditCreate (parse, + FC_FAMILY_OBJECT, + FcOpPrepend, + prefer, + binding); + if (edit) + edit->next = 0; + else + FcExprDestroy (prefer); + } + if (accept) + { + next = edit; + edit = FcEditCreate (parse, + FC_FAMILY_OBJECT, + FcOpAppend, + accept, + binding); + if (edit) + edit->next = next; + else + FcExprDestroy (accept); + } + if (def) + { + next = edit; + edit = FcEditCreate (parse, + FC_FAMILY_OBJECT, + FcOpAppendLast, + def, + binding); + if (edit) + edit->next = next; + else + FcExprDestroy (def); + } + if (edit) + { + test = FcTestCreate (parse, FcMatchPattern, + FcQualAny, + (FcChar8 *) FC_FAMILY, + FcOpEqual, + family); + if (test) + if (!FcConfigAddEdit (parse->config, test, edit, FcMatchPattern)) + FcTestDestroy (test); + } + else + FcExprDestroy (family); +} + +static FcExpr * +FcPopExpr (FcConfigParse *parse) +{ + FcVStack *vstack = FcVStackPeek (parse); + FcExpr *expr = 0; + if (!vstack) + return 0; + switch (vstack->tag) { + case FcVStackNone: + break; + case FcVStackString: + case FcVStackFamily: + expr = FcExprCreateString (parse->config, vstack->u.string); + break; + case FcVStackField: + expr = FcExprCreateField (parse->config, (char *) vstack->u.string); + break; + case FcVStackConstant: + expr = FcExprCreateConst (parse->config, vstack->u.string); + break; + case FcVStackGlob: + /* XXX: What's the correct action here? (CDW) */ + break; + case FcVStackPrefer: + case FcVStackAccept: + case FcVStackDefault: + expr = vstack->u.expr; + vstack->tag = FcVStackNone; + break; + case FcVStackInteger: + expr = FcExprCreateInteger (parse->config, vstack->u.integer); + break; + case FcVStackDouble: + expr = FcExprCreateDouble (parse->config, vstack->u._double); + break; + case FcVStackMatrix: + expr = FcExprCreateMatrix (parse->config, vstack->u.matrix); + break; + case FcVStackRange: + break; + case FcVStackBool: + expr = FcExprCreateBool (parse->config, vstack->u.bool_); + break; + case FcVStackCharSet: + expr = FcExprCreateCharSet (parse->config, vstack->u.charset); + break; + case FcVStackLangSet: + expr = FcExprCreateLangSet (parse->config, vstack->u.langset); + break; + case FcVStackTest: + break; + case FcVStackExpr: + expr = vstack->u.expr; + vstack->tag = FcVStackNone; + break; + case FcVStackEdit: + break; + default: + break; + } + FcVStackPopAndDestroy (parse); + return expr; +} + +/* + * This builds a tree of binary operations. Note + * that every operator is defined so that if only + * a single operand is contained, the value of the + * whole expression is the value of the operand. + * + * This code reduces in that case to returning that + * operand. + */ +static FcExpr * +FcPopBinary (FcConfigParse *parse, FcOp op) +{ + FcExpr *left, *expr = 0, *new; + + while ((left = FcPopExpr (parse))) + { + if (expr) + { + new = FcExprCreateOp (parse->config, left, op, expr); + if (!new) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + FcExprDestroy (left); + FcExprDestroy (expr); + return 0; + } + expr = new; + } + else + expr = left; + } + return expr; +} + +static void +FcParseBinary (FcConfigParse *parse, FcOp op) +{ + FcExpr *expr = FcPopBinary (parse, op); + if (expr) + FcVStackPushExpr (parse, FcVStackExpr, expr); +} + +/* + * This builds a a unary operator, it consumes only + * a single operand + */ + +static FcExpr * +FcPopUnary (FcConfigParse *parse, FcOp op) +{ + FcExpr *operand, *new = 0; + + if ((operand = FcPopExpr (parse))) + { + new = FcExprCreateOp (parse->config, operand, op, 0); + if (!new) + { + FcExprDestroy (operand); + FcConfigMessage (parse, FcSevereError, "out of memory"); + } + } + return new; +} + +static void +FcParseUnary (FcConfigParse *parse, FcOp op) +{ + FcExpr *expr = FcPopUnary (parse, op); + if (expr) + FcVStackPushExpr (parse, FcVStackExpr, expr); +} + +static void +FcParseInclude (FcConfigParse *parse) +{ + FcChar8 *s; + const FcChar8 *i; + FcBool ignore_missing = FcFalse; + + s = FcStrBufDoneStatic (&parse->pstack->str); + if (!s) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + i = FcConfigGetAttribute (parse, "ignore_missing"); + if (i && FcConfigLexBool (parse, (FcChar8 *) i) == FcTrue) + ignore_missing = FcTrue; + if (!FcConfigParseAndLoad (parse->config, s, !ignore_missing)) + parse->error = FcTrue; + FcStrBufDestroy (&parse->pstack->str); +} + +typedef struct _FcOpMap { + char name[16]; + FcOp op; +} FcOpMap; + +static FcOp +FcConfigLexOp (const FcChar8 *op, const FcOpMap *map, int nmap) +{ + int i; + + for (i = 0; i < nmap; i++) + if (!strcmp ((char *) op, map[i].name)) + return map[i].op; + return FcOpInvalid; +} + +static const FcOpMap fcCompareOps[] = { + { "eq", FcOpEqual }, + { "not_eq", FcOpNotEqual }, + { "less", FcOpLess }, + { "less_eq", FcOpLessEqual }, + { "more", FcOpMore }, + { "more_eq", FcOpMoreEqual }, + { "contains", FcOpContains }, + { "not_contains", FcOpNotContains } +}; + +#define NUM_COMPARE_OPS (int) (sizeof fcCompareOps / sizeof fcCompareOps[0]) + +static FcOp +FcConfigLexCompare (const FcChar8 *compare) +{ + return FcConfigLexOp (compare, fcCompareOps, NUM_COMPARE_OPS); +} + +static void +FcParseTest (FcConfigParse *parse) +{ + const FcChar8 *kind_string; + FcMatchKind kind; + const FcChar8 *qual_string; + FcQual qual; + const FcChar8 *name; + const FcChar8 *compare_string; + FcOp compare; + FcExpr *expr; + FcTest *test; + + kind_string = FcConfigGetAttribute (parse, "target"); + if (!kind_string) + kind = FcMatchDefault; + else + { + if (!strcmp ((char *) kind_string, "pattern")) + kind = FcMatchPattern; + else if (!strcmp ((char *) kind_string, "font")) + kind = FcMatchFont; + else if (!strcmp ((char *) kind_string, "scan")) + kind = FcMatchScan; + else if (!strcmp ((char *) kind_string, "default")) + kind = FcMatchDefault; + else + { + FcConfigMessage (parse, FcSevereWarning, "invalid test target \"%s\"", kind_string); + return; + } + } + qual_string = FcConfigGetAttribute (parse, "qual"); + if (!qual_string) + qual = FcQualAny; + else + { + if (!strcmp ((char *) qual_string, "any")) + qual = FcQualAny; + else if (!strcmp ((char *) qual_string, "all")) + qual = FcQualAll; + else if (!strcmp ((char *) qual_string, "first")) + qual = FcQualFirst; + else if (!strcmp ((char *) qual_string, "not_first")) + qual = FcQualNotFirst; + else + { + FcConfigMessage (parse, FcSevereWarning, "invalid test qual \"%s\"", qual_string); + return; + } + } + name = FcConfigGetAttribute (parse, "name"); + if (!name) + { + FcConfigMessage (parse, FcSevereWarning, "missing test name"); + return; + } + compare_string = FcConfigGetAttribute (parse, "compare"); + if (!compare_string) + compare = FcOpEqual; + else + { + compare = FcConfigLexCompare (compare_string); + if (compare == FcOpInvalid) + { + FcConfigMessage (parse, FcSevereWarning, "invalid test compare \"%s\"", compare_string); + return; + } + } + expr = FcPopBinary (parse, FcOpComma); + if (!expr) + { + FcConfigMessage (parse, FcSevereWarning, "missing test expression"); + return; + } + test = FcTestCreate (parse, kind, qual, name, compare, expr); + if (!test) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + FcVStackPushTest (parse, test); +} + +static const FcOpMap fcModeOps[] = { + { "assign", FcOpAssign }, + { "assign_replace", FcOpAssignReplace }, + { "prepend", FcOpPrepend }, + { "prepend_first", FcOpPrependFirst }, + { "append", FcOpAppend }, + { "append_last", FcOpAppendLast }, +}; + +#define NUM_MODE_OPS (int) (sizeof fcModeOps / sizeof fcModeOps[0]) + +static FcOp +FcConfigLexMode (const FcChar8 *mode) +{ + return FcConfigLexOp (mode, fcModeOps, NUM_MODE_OPS); +} + +static void +FcParseEdit (FcConfigParse *parse) +{ + const FcChar8 *name; + const FcChar8 *mode_string; + FcOp mode; + FcValueBinding binding; + FcExpr *expr; + FcEdit *edit; + + name = FcConfigGetAttribute (parse, "name"); + if (!name) + { + FcConfigMessage (parse, FcSevereWarning, "missing edit name"); + return; + } + mode_string = FcConfigGetAttribute (parse, "mode"); + if (!mode_string) + mode = FcOpAssign; + else + { + mode = FcConfigLexMode (mode_string); + if (mode == FcOpInvalid) + { + FcConfigMessage (parse, FcSevereWarning, "invalid edit mode \"%s\"", mode_string); + return; + } + } + if (!FcConfigLexBinding (parse, FcConfigGetAttribute (parse, "binding"), &binding)) + return; + + expr = FcPopBinary (parse, FcOpComma); + edit = FcEditCreate (parse, FcObjectFromName ((char *) name), + mode, expr, binding); + if (!edit) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + FcExprDestroy (expr); + return; + } + if (!FcVStackPushEdit (parse, edit)) + FcEditDestroy (edit); +} + +static void +FcParseMatch (FcConfigParse *parse) +{ + const FcChar8 *kind_name; + FcMatchKind kind; + FcTest *test = 0; + FcEdit *edit = 0; + FcVStack *vstack; + + kind_name = FcConfigGetAttribute (parse, "target"); + if (!kind_name) + kind = FcMatchPattern; + else + { + if (!strcmp ((char *) kind_name, "pattern")) + kind = FcMatchPattern; + else if (!strcmp ((char *) kind_name, "font")) + kind = FcMatchFont; + else if (!strcmp ((char *) kind_name, "scan")) + kind = FcMatchScan; + else + { + FcConfigMessage (parse, FcSevereWarning, "invalid match target \"%s\"", kind_name); + return; + } + } + while ((vstack = FcVStackPeek (parse))) + { + switch (vstack->tag) { + case FcVStackTest: + vstack->u.test->next = test; + test = vstack->u.test; + vstack->tag = FcVStackNone; + break; + case FcVStackEdit: + vstack->u.edit->next = edit; + edit = vstack->u.edit; + vstack->tag = FcVStackNone; + if (kind == FcMatchScan && edit->object > FC_MAX_BASE_OBJECT) + { + FcConfigMessage (parse, FcSevereError, + "<match target=\"scan\"> cannot edit user-defined object \"%s\"", + FcObjectName(edit->object)); + } + break; + default: + FcConfigMessage (parse, FcSevereWarning, "invalid match element"); + break; + } + FcVStackPopAndDestroy (parse); + } + if (!FcConfigAddEdit (parse->config, test, edit, kind)) + FcConfigMessage (parse, FcSevereError, "out of memory"); +} + +static void +FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element) +{ + FcVStack *vstack; + + while ((vstack = FcVStackPeek (parse))) + { + switch (vstack->tag) { + case FcVStackGlob: + if (!FcConfigGlobAdd (parse->config, + vstack->u.string, + element == FcElementAcceptfont)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + } + break; + case FcVStackPattern: + if (!FcConfigPatternsAdd (parse->config, + vstack->u.pattern, + element == FcElementAcceptfont)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + } + else + vstack->tag = FcVStackNone; + break; + default: + FcConfigMessage (parse, FcSevereWarning, "bad font selector"); + break; + } + FcVStackPopAndDestroy (parse); + } +} + + +static FcValue +FcPopValue (FcConfigParse *parse) +{ + FcVStack *vstack = FcVStackPeek (parse); + FcValue value; + + value.type = FcTypeVoid; + + if (!vstack) + return value; + + switch (vstack->tag) { + case FcVStackString: + value.u.s = FcStrStaticName (vstack->u.string); + if (value.u.s) + value.type = FcTypeString; + break; + case FcVStackConstant: + if (FcNameConstant (vstack->u.string, &value.u.i)) + value.type = FcTypeInteger; + break; + case FcVStackInteger: + value.u.i = vstack->u.integer; + value.type = FcTypeInteger; + break; + case FcVStackDouble: + value.u.d = vstack->u._double; + value.type = FcTypeInteger; + break; + case FcVStackMatrix: + value.u.m = FcMatrixCopy (vstack->u.matrix); + if (value.u.m) + value.type = FcTypeMatrix; + break; + case FcVStackBool: + value.u.b = vstack->u.bool_; + value.type = FcTypeBool; + break; + case FcVStackCharSet: + value.u.c = FcCharSetCopy (vstack->u.charset); + if (value.u.c) + value.type = FcTypeCharSet; + break; + case FcVStackLangSet: + value.u.l = FcLangSetCopy (vstack->u.langset); + if (value.u.l) + value.type = FcTypeLangSet; + break; + default: + FcConfigMessage (parse, FcSevereWarning, "unknown pattern element %d", + vstack->tag); + break; + } + FcVStackPopAndDestroy (parse); + + return value; +} + +static void +FcParsePatelt (FcConfigParse *parse) +{ + FcValue value; + FcPattern *pattern = FcPatternCreate (); + const char *name; + + if (!pattern) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + + name = (char *) FcConfigGetAttribute (parse, "name"); + if (!name) + { + FcConfigMessage (parse, FcSevereWarning, "missing pattern element name"); + FcPatternDestroy (pattern); + return; + } + + for (;;) + { + value = FcPopValue (parse); + if (value.type == FcTypeVoid) + break; + if (!FcPatternAdd (pattern, name, value, FcTrue)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + FcValueDestroy(value); + break; + } + FcValueDestroy(value); + } + + FcVStackPushPattern (parse, pattern); +} + +static void +FcParsePattern (FcConfigParse *parse) +{ + FcVStack *vstack; + FcPattern *pattern = FcPatternCreate (); + + if (!pattern) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + + while ((vstack = FcVStackPeek (parse))) + { + switch (vstack->tag) { + case FcVStackPattern: + if (!FcPatternAppend (pattern, vstack->u.pattern)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + FcPatternDestroy (pattern); + return; + } + break; + default: + FcConfigMessage (parse, FcSevereWarning, "unknown pattern element"); + break; + } + FcVStackPopAndDestroy (parse); + } + + FcVStackPushPattern (parse, pattern); +} + +static void +FcEndElement(void *userData, const XML_Char *name) +{ + FcConfigParse *parse = userData; + FcChar8 *data; +#ifdef _WIN32 + FcChar8 buffer[1000]; +#endif + + if (!parse->pstack) + return; + switch (parse->pstack->element) { + case FcElementNone: + break; + case FcElementFontconfig: + break; + case FcElementDir: + data = FcStrBufDoneStatic (&parse->pstack->str); + if (!data) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + break; + } +#ifdef _WIN32 + if (strcmp (data, "CUSTOMFONTDIR") == 0) + { + char *p; + data = buffer; + if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20)) + { + FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed"); + break; + } + /* + * Must use the multi-byte aware function to search + * for backslash because East Asian double-byte code + * pages have characters with backslash as the second + * byte. + */ + p = _mbsrchr (data, '\\'); + if (p) *p = '\0'; + strcat (data, "\\fonts"); + } + else if (strcmp (data, "APPSHAREFONTDIR") == 0) + { + char *p; + data = buffer; + if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20)) + { + FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed"); + break; + } + p = _mbsrchr (data, '\\'); + if (p) *p = '\0'; + strcat (data, "\\..\\share\\fonts"); + } + else if (strcmp (data, "WINDOWSFONTDIR") == 0) + { + int rc; + data = buffer; +#if _WIN32_WINNT >= 0x0500 + rc = GetSystemWindowsDirectory (buffer, sizeof (buffer) - 20); +#else + rc = GetWindowsDirectory (buffer, sizeof (buffer) - 20); +#endif + if (rc == 0 || rc > sizeof (buffer) - 20) + { + FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed"); + break; + } + if (data [strlen (data) - 1] != '\\') + strcat (data, "\\"); + strcat (data, "fonts"); + } +#endif + if (strlen ((char *) data) == 0) + FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored"); + else if (!FcStrUsesHome (data) || FcConfigHome ()) + { + if (!FcConfigAddDir (parse->config, data)) + FcConfigMessage (parse, FcSevereError, "out of memory; cannot add directory %s", data); + } + FcStrBufDestroy (&parse->pstack->str); + break; + case FcElementCacheDir: + data = FcStrBufDone (&parse->pstack->str); + if (!data) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + break; + } +#ifdef _WIN32 + if (strcmp (data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0) + { + int rc; + FcStrFree (data); + data = malloc (1000); + if (!data) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + break; + } + FcMemAlloc (FC_MEM_STRING, 1000); + rc = GetTempPath (800, data); + if (rc == 0 || rc > 800) + { + FcConfigMessage (parse, FcSevereError, "GetTempPath failed"); + FcStrFree (data); + break; + } + if (data [strlen (data) - 1] != '\\') + strcat (data, "\\"); + strcat (data, "fontconfig\\cache"); + } +#endif + if (!FcStrUsesHome (data) || FcConfigHome ()) + { + if (!FcConfigAddCacheDir (parse->config, data)) + FcConfigMessage (parse, FcSevereError, "out of memory; cannot add cache directory %s", data); + } + FcStrFree (data); + break; + + case FcElementCache: + data = FcStrBufDoneStatic (&parse->pstack->str); + if (!data) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + break; + } + /* discard this data; no longer used */ + FcStrBufDestroy (&parse->pstack->str); + break; + case FcElementInclude: + FcParseInclude (parse); + break; + case FcElementConfig: + break; + case FcElementMatch: + FcParseMatch (parse); + break; + case FcElementAlias: + FcParseAlias (parse); + break; + + case FcElementBlank: + FcParseBlank (parse); + break; + case FcElementRescan: + FcParseRescan (parse); + break; + + case FcElementPrefer: + FcParseFamilies (parse, FcVStackPrefer); + break; + case FcElementAccept: + FcParseFamilies (parse, FcVStackAccept); + break; + case FcElementDefault: + FcParseFamilies (parse, FcVStackDefault); + break; + case FcElementFamily: + FcParseFamily (parse); + break; + + case FcElementTest: + FcParseTest (parse); + break; + case FcElementEdit: + FcParseEdit (parse); + break; + + case FcElementInt: + FcParseInt (parse); + break; + case FcElementDouble: + FcParseDouble (parse); + break; + case FcElementString: + FcParseString (parse, FcVStackString); + break; + case FcElementMatrix: + FcParseMatrix (parse); + break; + case FcElementRange: + FcParseRange (parse); + break; + case FcElementBool: + FcParseBool (parse); + break; + case FcElementCharSet: + FcParseCharSet (parse); + break; + case FcElementLangSet: + FcParseLangSet (parse); + break; + case FcElementSelectfont: + break; + case FcElementAcceptfont: + case FcElementRejectfont: + FcParseAcceptRejectFont (parse, parse->pstack->element); + break; + case FcElementGlob: + FcParseString (parse, FcVStackGlob); + break; + case FcElementPattern: + FcParsePattern (parse); + break; + case FcElementPatelt: + FcParsePatelt (parse); + break; + case FcElementName: + FcParseString (parse, FcVStackField); + break; + case FcElementConst: + FcParseString (parse, FcVStackConstant); + break; + case FcElementOr: + FcParseBinary (parse, FcOpOr); + break; + case FcElementAnd: + FcParseBinary (parse, FcOpAnd); + break; + case FcElementEq: + FcParseBinary (parse, FcOpEqual); + break; + case FcElementNotEq: + FcParseBinary (parse, FcOpNotEqual); + break; + case FcElementLess: + FcParseBinary (parse, FcOpLess); + break; + case FcElementLessEq: + FcParseBinary (parse, FcOpLessEqual); + break; + case FcElementMore: + FcParseBinary (parse, FcOpMore); + break; + case FcElementMoreEq: + FcParseBinary (parse, FcOpMoreEqual); + break; + case FcElementContains: + FcParseBinary (parse, FcOpContains); + break; + case FcElementNotContains: + FcParseBinary (parse, FcOpNotContains); + break; + case FcElementPlus: + FcParseBinary (parse, FcOpPlus); + break; + case FcElementMinus: + FcParseBinary (parse, FcOpMinus); + break; + case FcElementTimes: + FcParseBinary (parse, FcOpTimes); + break; + case FcElementDivide: + FcParseBinary (parse, FcOpDivide); + break; + case FcElementNot: + FcParseUnary (parse, FcOpNot); + break; + case FcElementIf: + FcParseBinary (parse, FcOpQuest); + break; + case FcElementFloor: + FcParseUnary (parse, FcOpFloor); + break; + case FcElementCeil: + FcParseUnary (parse, FcOpCeil); + break; + case FcElementRound: + FcParseUnary (parse, FcOpRound); + break; + case FcElementTrunc: + FcParseUnary (parse, FcOpTrunc); + break; + case FcElementUnknown: + break; + } + (void) FcPStackPop (parse); +} + +static void +FcCharacterData (void *userData, const XML_Char *s, int len) +{ + FcConfigParse *parse = userData; + + if (!parse->pstack) + return; + if (!FcStrBufData (&parse->pstack->str, (FcChar8 *) s, len)) + FcConfigMessage (parse, FcSevereError, "out of memory"); +} + +static void +FcStartDoctypeDecl (void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset) +{ + FcConfigParse *parse = userData; + + if (strcmp ((char *) doctypeName, "fontconfig") != 0) + FcConfigMessage (parse, FcSevereError, "invalid doctype \"%s\"", doctypeName); +} + +#ifdef ENABLE_LIBXML2 + +static void +FcInternalSubsetDecl (void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid) +{ + FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 1); +} + +static void +FcExternalSubsetDecl (void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid) +{ + FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 0); +} + +#else /* ENABLE_LIBXML2 */ + +static void +FcEndDoctypeDecl (void *userData) +{ +} + +#endif /* ENABLE_LIBXML2 */ + +static int +FcSortCmpStr (const void *a, const void *b) +{ + const FcChar8 *as = *((FcChar8 **) a); + const FcChar8 *bs = *((FcChar8 **) b); + return FcStrCmp (as, bs); +} + +static FcBool +FcConfigParseAndLoadDir (FcConfig *config, + const FcChar8 *name, + const FcChar8 *dir, + FcBool complain) +{ + DIR *d; + struct dirent *e; + FcBool ret = FcTrue; + FcChar8 *file; + FcChar8 *base; + FcStrSet *files; + + d = opendir ((char *) dir); + if (!d) + { + if (complain) + FcConfigMessage (0, FcSevereError, "Cannot open config dir \"%s\"", + name); + ret = FcFalse; + goto bail0; + } + /* freed below */ + file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1); + if (!file) + { + ret = FcFalse; + goto bail1; + } + + strcpy ((char *) file, (char *) dir); + strcat ((char *) file, "/"); + base = file + strlen ((char *) file); + + files = FcStrSetCreate (); + if (!files) + { + ret = FcFalse; + goto bail2; + } + + if (FcDebug () & FC_DBG_CONFIG) + printf ("\tScanning config dir %s\n", dir); + + while (ret && (e = readdir (d))) + { + int d_len; +#define TAIL ".conf" +#define TAIL_LEN 5 + /* + * Add all files of the form [0-9]*.conf + */ + if ('0' <= e->d_name[0] && e->d_name[0] <= '9' && + (d_len = strlen (e->d_name)) < FC_MAX_FILE_LEN && + d_len > TAIL_LEN && + strcmp (e->d_name + d_len - TAIL_LEN, TAIL) == 0) + { + strcpy ((char *) base, (char *) e->d_name); + if (!FcStrSetAdd (files, file)) + { + ret = FcFalse; + goto bail3; + } + } + } + if (ret) + { + int i; + qsort (files->strs, files->num, sizeof (FcChar8 *), + (int (*)(const void *, const void *)) FcSortCmpStr); + for (i = 0; ret && i < files->num; i++) + ret = FcConfigParseAndLoad (config, files->strs[i], complain); + } +bail3: + FcStrSetDestroy (files); +bail2: + free (file); +bail1: + closedir (d); +bail0: + return ret || !complain; +} + +FcBool +FcConfigParseAndLoad (FcConfig *config, + const FcChar8 *name, + FcBool complain) +{ + + XML_Parser p; + FcChar8 *filename; + int fd; + int len; + FcConfigParse parse; + FcBool error = FcTrue; + +#ifdef ENABLE_LIBXML2 + xmlSAXHandler sax; + char buf[BUFSIZ]; +#else + void *buf; +#endif + + filename = FcConfigFilename (name); + if (!filename) + goto bail0; + + if (FcStrSetMember (config->configFiles, filename)) + { + FcStrFree (filename); + return FcTrue; + } + + if (!FcStrSetAdd (config->configFiles, filename)) + { + FcStrFree (filename); + goto bail0; + } + + if (FcFileIsDir (filename)) + { + FcBool ret = FcConfigParseAndLoadDir (config, name, filename, complain); + FcStrFree (filename); + return ret; + } + + if (FcDebug () & FC_DBG_CONFIG) + printf ("\tLoading config file %s\n", filename); + + fd = open ((char *) filename, O_RDONLY); + if (fd == -1) { + FcStrFree (filename); + goto bail0; + } + +#ifdef ENABLE_LIBXML2 + memset(&sax, 0, sizeof(sax)); + + sax.internalSubset = FcInternalSubsetDecl; + sax.externalSubset = FcExternalSubsetDecl; + sax.startElement = FcStartElement; + sax.endElement = FcEndElement; + sax.characters = FcCharacterData; + + p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, (const char *) filename); +#else + p = XML_ParserCreate ("UTF-8"); +#endif + FcStrFree (filename); + + if (!p) + goto bail1; + + if (!FcConfigInit (&parse, name, config, p)) + goto bail2; + +#ifndef ENABLE_LIBXML2 + + XML_SetUserData (p, &parse); + + XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl); + XML_SetElementHandler (p, FcStartElement, FcEndElement); + XML_SetCharacterDataHandler (p, FcCharacterData); + +#endif /* ENABLE_LIBXML2 */ + + do { +#ifndef ENABLE_LIBXML2 + buf = XML_GetBuffer (p, BUFSIZ); + if (!buf) + { + FcConfigMessage (&parse, FcSevereError, "cannot get parse buffer"); + goto bail3; + } +#endif + len = read (fd, buf, BUFSIZ); + if (len < 0) + { + FcConfigMessage (&parse, FcSevereError, "failed reading config file"); + goto bail3; + } + +#ifdef ENABLE_LIBXML2 + if (xmlParseChunk (p, buf, len, len == 0)) +#else + if (!XML_ParseBuffer (p, len, len == 0)) +#endif + { + FcConfigMessage (&parse, FcSevereError, "%s", + XML_ErrorString (XML_GetErrorCode (p))); + goto bail3; + } + } while (len != 0); + error = parse.error; +bail3: + FcConfigCleanup (&parse); +bail2: + XML_ParserFree (p); +bail1: + close (fd); + fd = -1; +bail0: + if (error && complain) + { + if (name) + FcConfigMessage (0, FcSevereError, "Cannot load config file \"%s\"", name); + else + FcConfigMessage (0, FcSevereError, "Cannot load default config file"); + return FcFalse; + } + return FcTrue; +} +#define __fcxml__ +#include "fcaliastail.h" +#undef __fcxml__ diff --git a/fontconfig/src/ftglue.c b/fontconfig/src/ftglue.c index 91cb532b9..d5af810b4 100644 --- a/fontconfig/src/ftglue.c +++ b/fontconfig/src/ftglue.c @@ -1,261 +1,261 @@ -/* ftglue.c: Glue code for compiling the OpenType code from
- * FreeType 1 using only the public API of FreeType 2
- *
- * By David Turner, The FreeType Project (www.freetype.org)
- *
- * This code is explicitely put in the public domain
- *
- * See ftglue.h for more information.
- */
-
-#include "ftglue.h"
-
-#if 0
-#include <stdio.h>
-#define LOG(x) ftglue_log x
-
-static void
-ftglue_log( const char* format, ... )
-{
- va_list ap;
-
- va_start( ap, format );
- vfprintf( stderr, format, ap );
- va_end( ap );
-}
-
-#else
-#define LOG(x) do {} while (0)
-#endif
-
-/* only used internally */
-static FT_Pointer
-ftglue_qalloc( FT_Memory memory,
- FT_ULong size,
- FT_Error *perror )
-{
- FT_Error error = 0;
- FT_Pointer block = NULL;
-
- if ( size > 0 )
- {
- block = memory->alloc( memory, size );
- if ( !block )
- error = FT_Err_Out_Of_Memory;
- }
-
- *perror = error;
- return block;
-}
-
-#undef QALLOC /* just in case */
-#define QALLOC(ptr,size) ( (ptr) = ftglue_qalloc( memory, (size), &error ), error != 0 )
-#define FREE(_ptr) \
- do { \
- if ( (_ptr) ) \
- { \
- ftglue_free( memory, _ptr ); \
- _ptr = NULL; \
- } \
- } while (0)
-
-
-static void
-ftglue_free( FT_Memory memory,
- FT_Pointer block )
-{
- if ( block )
- memory->free( memory, block );
-}
-
-FTGLUE_APIDEF( FT_Long )
-ftglue_stream_pos( FT_Stream stream )
-{
- LOG(( "ftglue:stream:pos() -> %ld\n", stream->pos ));
- return stream->pos;
-}
-
-
-FTGLUE_APIDEF( FT_Error )
-ftglue_stream_seek( FT_Stream stream,
- FT_Long pos )
-{
- FT_Error error = 0;
-
- stream->pos = pos;
- if ( stream->read )
- {
- if ( stream->read( stream, pos, 0, 0 ) )
- error = FT_Err_Invalid_Stream_Operation;
- }
- else if ( pos > stream->size )
- error = FT_Err_Invalid_Stream_Operation;
-
- LOG(( "ftglue:stream:seek(%ld) -> %d\n", pos, error ));
- return error;
-}
-
-
-FTGLUE_APIDEF( FT_Error )
-ftglue_stream_frame_enter( FT_Stream stream,
- FT_ULong count )
-{
- FT_Error error = FT_Err_Ok;
- FT_ULong read_bytes;
-
- if ( stream->read )
- {
- /* allocate the frame in memory */
- FT_Memory memory = stream->memory;
-
-
- if ( QALLOC( stream->base, count ) )
- goto Exit;
-
- /* read it */
- read_bytes = stream->read( stream, stream->pos,
- stream->base, count );
- if ( read_bytes < count )
- {
- FREE( stream->base );
- error = FT_Err_Invalid_Stream_Operation;
- }
- stream->cursor = stream->base;
- stream->limit = stream->cursor + count;
- stream->pos += read_bytes;
- }
- else
- {
- /* check current and new position */
- if ( stream->pos >= stream->size ||
- stream->pos + count > stream->size )
- {
- error = FT_Err_Invalid_Stream_Operation;
- goto Exit;
- }
-
- /* set cursor */
- stream->cursor = stream->base + stream->pos;
- stream->limit = stream->cursor + count;
- stream->pos += count;
- }
-
-Exit:
- LOG(( "ftglue:stream:frame_enter(%ld) -> %d\n", count, error ));
- return error;
-}
-
-
-FTGLUE_APIDEF( void )
-ftglue_stream_frame_exit( FT_Stream stream )
-{
- if ( stream->read )
- {
- FT_Memory memory = stream->memory;
-
- FREE( stream->base );
- }
- stream->cursor = 0;
- stream->limit = 0;
-
- LOG(( "ftglue:stream:frame_exit()\n" ));
-}
-
-
-FTGLUE_APIDEF( FT_Error )
-ftglue_face_goto_table( FT_Face face,
- FT_ULong the_tag,
- FT_Stream stream )
-{
- FT_Error error;
-
- LOG(( "ftglue_face_goto_table( %p, %c%c%c%c, %p )\n",
- face,
- (int)((the_tag >> 24) & 0xFF),
- (int)((the_tag >> 16) & 0xFF),
- (int)((the_tag >> 8) & 0xFF),
- (int)(the_tag & 0xFF),
- stream ));
-
- if ( !FT_IS_SFNT(face) )
- {
- LOG(( "not a SFNT face !!\n" ));
- error = FT_Err_Invalid_Face_Handle;
- }
- else
- {
- /* parse the directory table directly, without using
- * FreeType's built-in data structures
- */
- FT_ULong offset = 0, sig;
- FT_UInt count, nn;
-
- if ( FILE_Seek( 0 ) || ACCESS_Frame( 4 ) )
- goto Exit;
-
- sig = GET_Tag4();
-
- FORGET_Frame();
-
- if ( sig == FT_MAKE_TAG( 't', 't', 'c', 'f' ) )
- {
- /* deal with TrueType collections */
-
- LOG(( ">> This is a TrueType Collection\n" ));
-
- if ( FILE_Seek( 12 + face->face_index*4 ) ||
- ACCESS_Frame( 4 ) )
- goto Exit;
-
- offset = GET_ULong();
-
- FORGET_Frame();
- }
-
- LOG(( "TrueType offset = %ld\n", offset ));
-
- if ( FILE_Seek( offset+4 ) ||
- ACCESS_Frame( 2 ) )
- goto Exit;
-
- count = GET_UShort();
-
- FORGET_Frame();
-
- if ( FILE_Seek( offset+12 ) ||
- ACCESS_Frame( count*16 ) )
- goto Exit;
-
- for ( nn = 0; nn < count; nn++ )
- {
- FT_ULong tag = GET_ULong();
- FT_ULong checksum = GET_ULong();
- FT_ULong start = GET_ULong();
- FT_ULong size = GET_ULong();
-
- FT_UNUSED(checksum);
- FT_UNUSED(size);
-
- if ( tag == the_tag )
- {
- LOG(( "TrueType table (start: %ld) (size: %ld)\n", start, size ));
- error = ftglue_stream_seek( stream, start );
- goto FoundIt;
- }
- }
- error = FT_Err_Table_Missing;
-
- FoundIt:
- FORGET_Frame();
- }
-
-Exit:
- LOG(( "TrueType error=%d\n", error ));
-
- return error;
-}
-
-#undef QALLOC
-#define __ftglue__
-#include "fcaliastail.h"
-#undef __ftglue__
+/* ftglue.c: Glue code for compiling the OpenType code from + * FreeType 1 using only the public API of FreeType 2 + * + * By David Turner, The FreeType Project (www.freetype.org) + * + * This code is explicitely put in the public domain + * + * See ftglue.h for more information. + */ + +#include "ftglue.h" + +#if 0 +#include <stdio.h> +#define LOG(x) ftglue_log x + +static void +ftglue_log( const char* format, ... ) +{ + va_list ap; + + va_start( ap, format ); + vfprintf( stderr, format, ap ); + va_end( ap ); +} + +#else +#define LOG(x) do {} while (0) +#endif + +/* only used internally */ +static FT_Pointer +ftglue_qalloc( FT_Memory memory, + FT_ULong size, + FT_Error *perror ) +{ + FT_Error error = 0; + FT_Pointer block = NULL; + + if ( size > 0 ) + { + block = memory->alloc( memory, size ); + if ( !block ) + error = FT_Err_Out_Of_Memory; + } + + *perror = error; + return block; +} + +#undef QALLOC /* just in case */ +#define QALLOC(ptr,size) ( (ptr) = ftglue_qalloc( memory, (size), &error ), error != 0 ) +#define FREE(_ptr) \ + do { \ + if ( (_ptr) ) \ + { \ + ftglue_free( memory, _ptr ); \ + _ptr = NULL; \ + } \ + } while (0) + + +static void +ftglue_free( FT_Memory memory, + FT_Pointer block ) +{ + if ( block ) + memory->free( memory, block ); +} + +FTGLUE_APIDEF( FT_Long ) +ftglue_stream_pos( FT_Stream stream ) +{ + LOG(( "ftglue:stream:pos() -> %ld\n", stream->pos )); + return stream->pos; +} + + +FTGLUE_APIDEF( FT_Error ) +ftglue_stream_seek( FT_Stream stream, + FT_Long pos ) +{ + FT_Error error = 0; + + stream->pos = pos; + if ( stream->read ) + { + if ( stream->read( stream, pos, 0, 0 ) ) + error = FT_Err_Invalid_Stream_Operation; + } + else if ( pos > stream->size ) + error = FT_Err_Invalid_Stream_Operation; + + LOG(( "ftglue:stream:seek(%ld) -> %d\n", pos, error )); + return error; +} + + +FTGLUE_APIDEF( FT_Error ) +ftglue_stream_frame_enter( FT_Stream stream, + FT_ULong count ) +{ + FT_Error error = FT_Err_Ok; + FT_ULong read_bytes; + + if ( stream->read ) + { + /* allocate the frame in memory */ + FT_Memory memory = stream->memory; + + + if ( QALLOC( stream->base, count ) ) + goto Exit; + + /* read it */ + read_bytes = stream->read( stream, stream->pos, + stream->base, count ); + if ( read_bytes < count ) + { + FREE( stream->base ); + error = FT_Err_Invalid_Stream_Operation; + } + stream->cursor = stream->base; + stream->limit = stream->cursor + count; + stream->pos += read_bytes; + } + else + { + /* check current and new position */ + if ( stream->pos >= stream->size || + stream->pos + count > stream->size ) + { + error = FT_Err_Invalid_Stream_Operation; + goto Exit; + } + + /* set cursor */ + stream->cursor = stream->base + stream->pos; + stream->limit = stream->cursor + count; + stream->pos += count; + } + +Exit: + LOG(( "ftglue:stream:frame_enter(%ld) -> %d\n", count, error )); + return error; +} + + +FTGLUE_APIDEF( void ) +ftglue_stream_frame_exit( FT_Stream stream ) +{ + if ( stream->read ) + { + FT_Memory memory = stream->memory; + + FREE( stream->base ); + } + stream->cursor = 0; + stream->limit = 0; + + LOG(( "ftglue:stream:frame_exit()\n" )); +} + + +FTGLUE_APIDEF( FT_Error ) +ftglue_face_goto_table( FT_Face face, + FT_ULong the_tag, + FT_Stream stream ) +{ + FT_Error error; + + LOG(( "ftglue_face_goto_table( %p, %c%c%c%c, %p )\n", + face, + (int)((the_tag >> 24) & 0xFF), + (int)((the_tag >> 16) & 0xFF), + (int)((the_tag >> 8) & 0xFF), + (int)(the_tag & 0xFF), + stream )); + + if ( !FT_IS_SFNT(face) ) + { + LOG(( "not a SFNT face !!\n" )); + error = FT_Err_Invalid_Face_Handle; + } + else + { + /* parse the directory table directly, without using + * FreeType's built-in data structures + */ + FT_ULong offset = 0, sig; + FT_UInt count, nn; + + if ( FILE_Seek( 0 ) || ACCESS_Frame( 4 ) ) + goto Exit; + + sig = GET_Tag4(); + + FORGET_Frame(); + + if ( sig == FT_MAKE_TAG( 't', 't', 'c', 'f' ) ) + { + /* deal with TrueType collections */ + + LOG(( ">> This is a TrueType Collection\n" )); + + if ( FILE_Seek( 12 + face->face_index*4 ) || + ACCESS_Frame( 4 ) ) + goto Exit; + + offset = GET_ULong(); + + FORGET_Frame(); + } + + LOG(( "TrueType offset = %ld\n", offset )); + + if ( FILE_Seek( offset+4 ) || + ACCESS_Frame( 2 ) ) + goto Exit; + + count = GET_UShort(); + + FORGET_Frame(); + + if ( FILE_Seek( offset+12 ) || + ACCESS_Frame( count*16 ) ) + goto Exit; + + for ( nn = 0; nn < count; nn++ ) + { + FT_ULong tag = GET_ULong(); + FT_ULong checksum = GET_ULong(); + FT_ULong start = GET_ULong(); + FT_ULong size = GET_ULong(); + + FT_UNUSED(checksum); + FT_UNUSED(size); + + if ( tag == the_tag ) + { + LOG(( "TrueType table (start: %ld) (size: %ld)\n", start, size )); + error = ftglue_stream_seek( stream, start ); + goto FoundIt; + } + } + error = FT_Err_Table_Missing; + + FoundIt: + FORGET_Frame(); + } + +Exit: + LOG(( "TrueType error=%d\n", error )); + + return error; +} + +#undef QALLOC +#define __ftglue__ +#include "fcaliastail.h" +#undef __ftglue__ |