diff options
Diffstat (limited to 'fontconfig')
276 files changed, 74345 insertions, 73645 deletions
diff --git a/fontconfig/COPYING b/fontconfig/COPYING index d68372289..7f52aa710 100644 --- a/fontconfig/COPYING +++ b/fontconfig/COPYING @@ -1,22 +1,27 @@ -fontconfig/COPYING - -Copyright © 2001,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 Keith Packard not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Keith Packard 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. - +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 0017eed40..29537df99 100644 --- a/fontconfig/INSTALL +++ b/fontconfig/INSTALL @@ -1,37 +1,42 @@ -Fontconfig is built with the traditional configure script: - - $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man - -This 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 - sh autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var - - 3. make distcheck (NB: won't work without docbook-utils -PL) - - 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 e08857e59..c14211a4e 100644 --- a/fontconfig/Makefile.am +++ b/fontconfig/Makefile.am @@ -1,141 +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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -DOCSRC=@DOCSRC@ -SUBDIRS=fontconfig fc-case fc-lang fc-glyphname fc-arch src \ - fc-cache fc-cat fc-list fc-match 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 " $(bindir)/fc-cache -s -f -v"; \ - $(bindir)/fc-cache -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/acinclude.m4 b/fontconfig/acinclude.m4 deleted file mode 100644 index 1195da380..000000000 --- a/fontconfig/acinclude.m4 +++ /dev/null @@ -1,137 +0,0 @@ -dnl dolt, a replacement for libtool -dnl Copyright © 2007-2008 Josh Triplett <josh@freedesktop.org> -dnl Copying and distribution of this file, with or without modification, -dnl are permitted in any medium without royalty provided the copyright -dnl notice and this notice are preserved. -dnl -dnl To use dolt, invoke the DOLT macro immediately after the libtool macros. -dnl Optionally, copy this file into acinclude.m4, to avoid the need to have it -dnl installed when running autoconf on your project. - -AC_DEFUN([DOLT], [ -AC_REQUIRE([AC_CANONICAL_HOST]) -# dolt, a replacement for libtool -# Josh Triplett <josh@freedesktop.org> -AC_PATH_PROG(DOLT_BASH, bash) -AC_MSG_CHECKING([if dolt supports this host]) -dolt_supported=yes -if test x$DOLT_BASH = x; then - dolt_supported=no -fi -if test x$GCC != xyes; then - dolt_supported=no -fi -case $host in -i?86-*-linux*|x86_64-*-linux*|powerpc-*-linux*) ;; -amd64-*-freebsd*|i?86-*-freebsd*|ia64-*-freebsd*) ;; -*) dolt_supported=no ;; -esac -if test x$dolt_supported = xno ; then - AC_MSG_RESULT([no, falling back to libtool]) - LTCOMPILE='$(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(COMPILE)' - LTCXXCOMPILE='$(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CXXCOMPILE)' -else - AC_MSG_RESULT([yes, replacing libtool]) - -dnl Start writing out doltcompile. - cat <<__DOLTCOMPILE__EOF__ >doltcompile -#!$DOLT_BASH -__DOLTCOMPILE__EOF__ - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -args=("$[]@") -for ((arg=0; arg<${#args@<:@@@:>@}; arg++)) ; do - if test x"${args@<:@$arg@:>@}" = x-o ; then - objarg=$((arg+1)) - break - fi -done -if test x$objarg = x ; then - echo 'Error: no -o on compiler command line' 1>&2 - exit 1 -fi -lo="${args@<:@$objarg@:>@}" -obj="${lo%.lo}" -if test x"$lo" = x"$obj" ; then - echo "Error: libtool object file name \"$lo\" does not end in .lo" 1>&2 - exit 1 -fi -objbase="${obj##*/}" -__DOLTCOMPILE__EOF__ - -dnl Write out shared compilation code. - if test x$enable_shared = xyes; then - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -libobjdir="${obj%$objbase}.libs" -if test ! -d "$libobjdir" ; then - mkdir_out="$(mkdir "$libobjdir" 2>&1)" - mkdir_ret=$? - if test "$mkdir_ret" -ne 0 && test ! -d "$libobjdir" ; then - echo "$mkdir_out" 1>&2 - exit $mkdir_ret - fi -fi -pic_object="$libobjdir/$objbase.o" -args@<:@$objarg@:>@="$pic_object" -"${args@<:@@@:>@}" -fPIC -DPIC || exit $? -__DOLTCOMPILE__EOF__ - fi - -dnl Write out static compilation code. -dnl Avoid duplicate compiler output if also building shared objects. - if test x$enable_static = xyes; then - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -non_pic_object="$obj.o" -args@<:@$objarg@:>@="$non_pic_object" -__DOLTCOMPILE__EOF__ - if test x$enable_shared = xyes; then - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -"${args@<:@@@:>@}" >/dev/null 2>&1 || exit $? -__DOLTCOMPILE__EOF__ - else - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -"${args@<:@@@:>@}" || exit $? -__DOLTCOMPILE__EOF__ - fi - fi - -dnl Write out the code to write the .lo file. -dnl The second line of the .lo file must match "^# Generated by .*libtool" - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -{ -echo "# $lo - a libtool object file" -echo "# Generated by doltcompile, not libtool" -__DOLTCOMPILE__EOF__ - - if test x$enable_shared = xyes; then - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -echo "pic_object='$pic_object'" -__DOLTCOMPILE__EOF__ - else - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -echo pic_object=none -__DOLTCOMPILE__EOF__ - fi - - if test x$enable_static = xyes; then - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -echo "non_pic_object='$non_pic_object'" -__DOLTCOMPILE__EOF__ - else - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -echo non_pic_object=none -__DOLTCOMPILE__EOF__ - fi - - cat <<'__DOLTCOMPILE__EOF__' >>doltcompile -} > "$lo" -__DOLTCOMPILE__EOF__ - -dnl Done writing out doltcompile; substitute it for libtool compilation. - chmod +x doltcompile - LTCOMPILE='$(top_builddir)/doltcompile $(COMPILE)' - LTCXXCOMPILE='$(top_builddir)/doltcompile $(CXXCOMPILE)' -fi -AC_SUBST(LTCOMPILE) -AC_SUBST(LTCXXCOMPILE) -# end dolt -]) diff --git a/fontconfig/autogen.sh b/fontconfig/autogen.sh index 820c457fe..f9927fd29 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 --enable-maintainer-mode "$@" - $srcdir/configure --enable-maintainer-mode "$@" - - 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 bff1171c1..c8ef98962 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -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 da156b6f2..8cfb9e785 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# - -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 589b0c4f8..04da27299 100644 --- a/fontconfig/configure.in +++ b/fontconfig/configure.in @@ -1,554 +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 Keith Packard not be used in -dnl advertising or publicity pertaining to distribution of the software without -dnl specific, written prior permission. Keith Packard makes 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.0) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) -AM_MAINTAINER_MODE - -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 ========================================================================== - -AM_CONFIG_HEADER(config.h) - -AC_PROG_CC -AC_PROG_INSTALL -AC_PROG_LN_S -AC_LIBTOOL_WIN32_DLL -AM_PROG_LIBTOOL -DOLT -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 ========================================================================== - -# Setup for compiling build tools (fc-glyphname, etc) -AC_MSG_CHECKING([for a C compiler for build tools]) -if test $cross_compiling = yes; then - AC_CHECK_PROGS(CC_FOR_BUILD, gcc cc) -else - CC_FOR_BUILD=$CC -fi -AC_MSG_RESULT([$CC_FOR_BUILD]) -AC_SUBST(CC_FOR_BUILD) - -AC_MSG_CHECKING([for suffix of executable build tools]) -if test $cross_compiling = yes; then - cat >conftest.c <<\_______EOF -int -main () -{ - exit (0); -} -_______EOF - for i in .exe ""; do - compile="$CC_FOR_BUILD conftest.c -o conftest$i" - if AC_TRY_EVAL(compile); then - if (./conftest) 2>&AC_FD_CC; then - EXEEXT_FOR_BUILD=$i - break - fi - fi - done - rm -f conftest* - if test "${EXEEXT_FOR_BUILD+set}" != set; then - AC_MSG_ERROR([Cannot determine suffix of executable build tools]) - fi -else - EXEEXT_FOR_BUILD=$EXEEXT -fi -AC_MSG_RESULT([$EXEEXT_FOR_BUILD]) -AC_SUBST(EXEEXT_FOR_BUILD) - -dnl ========================================================================== - -AC_ARG_WITH(arch, [ --with-arch=ARCH Force architecture to ARCH], arch="$withval", arch=auto) - -if test $cross_compiling = yes; then - case "$arch" in - auto) - AC_MSG_ERROR([Cannot autodetect architecture in cross compile environment] - [Use --with-arch=ARCH to specify architecture]) - ;; - esac -fi - -ARCHITECTURE=$arch -AC_SUBST(ARCHITECTURE) - -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) - -AC_OUTPUT([ -Makefile -fontconfig/Makefile -fc-lang/Makefile -fc-glyphname/Makefile -fc-case/Makefile -fc-arch/Makefile -src/Makefile -conf.d/Makefile -fc-cache/Makefile -fc-cat/Makefile -fc-list/Makefile -fc-match/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 49e00e155..2940f75eb 100644 --- a/fontconfig/doc/Makefile.am +++ b/fontconfig/doc/Makefile.am @@ -1,200 +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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -CC = @CC_FOR_BUILD@ -EXEEXT = @EXEEXT_FOR_BUILD@ -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ - -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) $(check_SCRIPTS) func.sgml confdir.sgml.in - -SUFFIXES=.fncs .sgml .txt .html - -if USEDOCBOOK - -.fncs.sgml: - $(RM) $@ - ./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml - -.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$(EXEEXT) $(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) $(DOC_FUNCS_SGML) func.refs - $(RM) -r $(HTML_DIR) - -$(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 291b26bb3..8008ab81d 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 Keith Packard not be used in - advertising or publicity pertaining to distribution of the software without - specific, written prior permission. Keith Packard 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. ---> -<!-- 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 b69c93ed7..a3f4aa058 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 c6b924d84..645fe2b26 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@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 refernced 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 b8ce47d24..a1d3d4ad1 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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 f0c984d79..96f3f0a6c 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@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 b12064a55..7cd2ff4b5 100644 --- a/fontconfig/doc/fccharset.fncs +++ b/fontconfig/doc/fccharset.fncs @@ -1,206 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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@ 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 8bb953b34..6a8c8183d 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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@ FcBol -@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 caling 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 86150f203..c65fb392c 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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 d15ab27a3..a64c0b18b 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@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 57005fdd0..adf9a9688 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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 caling 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 b092449cf..fb110f2b2 100644 --- a/fontconfig/doc/fcformat.fncs +++ b/fontconfig/doc/fcformat.fncs @@ -1,301 +1,301 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@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 modelled 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 tags 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 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) on an entire sub-expression. -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 elemtns, 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> -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>
+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 366cfaef8..acd101dc5 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@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 e9b7947b8..f0bb397b4 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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 fonconfig 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 config 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 f9d578e65..d61d9dfef 100644 --- a/fontconfig/doc/fclangset.fncs +++ b/fontconfig/doc/fclangset.fncs @@ -1,148 +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@ 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 FcLangDiffentTerritory. 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 FcLangDiffentTerritory. 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 fd680e458..7e752ea4e 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@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>sy</parameter>. This is done by multiplying by -the matrix: -<programlisting> - sx 0 - 0 sy -</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 468a7bfc1..b741cfa08 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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 proprety 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 bc254f3b9..ebc1bf745 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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 e2c2953df..17e873872 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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 begining. `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 5f1f93ac1..f30549308 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - <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 61af37b63..65ec08908 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - <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 d0c669b1f..2563a2557 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ -@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 891251f30..52675e267 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 Keith Packard not be used in - advertising or publicity pertaining to distribution of the software without - specific, written prior permission. Keith Packard 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. ---> -<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 Keith Packard not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. Keith Packard makes 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 ammends 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 applications rendering mechanism. - </para> - <programlisting> - Property Definitions - - Property CPP Symbol Type Description - ---------------------------------------------------- - family FC_FAMILY String Font family names - familylang FC_FAMILYLANG String Language cooresponding to - each family name - style FC_STYLE String Font style. Overrides weight - and slant - stylelang FC_STYLELANG String Language cooresponding to - each style name - fullname FC_FULLNAME String Font face full name where - different from family and - family + style - fullnamelang FC_FULLNAMELANG String Language cooresponding 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 datatypes 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 datatypes; the FcChar* types hold precisely the number -of bits stated (if supported by the C implementation). FcBool holds -one of two CPP 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 particulat 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 config 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 datatype 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 -indiciate 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 applcation-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 config files, allowing ongoing -reading of the old config file while locked for writing and ensuring that a -consistent and complete version of the config 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 298f8d5f5..efa01aa58 100644 --- a/fontconfig/doc/fontconfig-user.sgml +++ b/fontconfig/doc/fontconfig-user.sgml @@ -1,692 +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 Keith Packard not be used in - advertising or publicity pertaining to distribution of the software without - specific, written prior permission. Keith Packard 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. ---> -<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 preceeded by a -'\' character to avoid having them misinterpreted. Similarly, values -containing '\', '=', '_', ':' and ',' must also have them preceeded 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><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 0da5ae4a6..7fb38ab4a 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 Keith Packard not be used in - advertising or publicity pertaining to distribution of the software without - specific, written prior permission. Keith Packard 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. - --> -@?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 9981b1c74..95d4088ad 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 Keith Packard not be used in - advertising or publicity pertaining to distribution of the software without - specific, written prior permission. Keith Packard 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. ---> -@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-arch/Makefile.am b/fontconfig/fc-arch/Makefile.am deleted file mode 100644 index 806c730b4..000000000 --- a/fontconfig/fc-arch/Makefile.am +++ /dev/null @@ -1,54 +0,0 @@ -# -# $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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# - -CC = @CC_FOR_BUILD@ -EXEEXT = @EXEEXT_FOR_BUILD@ -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ - -INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) - -TMPL=fcarch.tmpl.h -STMPL=${top_srcdir}/fc-arch/fcarch.tmpl.h -TARG=fcarch.h - -ARCHITECTURE=@ARCHITECTURE@ -.PRECIOUS: $(TARG) - -noinst_PROGRAMS=fc-arch - -EXTRA_DIST=$(TMPL) - -$(TARG):fc-arch${EXEEXT} $(STMPL) ${top_srcdir}/src/fcint.h ../config.h - $(AM_V_GEN) $(RM) $(TARG); \ - ./fc-arch${EXEEXT} $(ARCHITECTURE) < $(STMPL) > $(TARG).tmp && \ - mv $(TARG).tmp $(TARG) - -ALIAS_FILES = fcalias.h fcaliastail.h - -BUILT_SOURCES = $(ALIAS_FILES) $(TARG) - -$(ALIAS_FILES): - touch $(ALIAS_FILES) - -CLEANFILES=$(TARG) $(ALIAS_FILES) diff --git a/fontconfig/fc-arch/fc-arch.c b/fontconfig/fc-arch/fc-arch.c deleted file mode 100644 index 1ef0cf18a..000000000 --- a/fontconfig/fc-arch/fc-arch.c +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Copyright © 2006 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 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. - */ - -#include "fcint.h" -#include <ctype.h> - -#define ENDIAN_TEST 0x01020304 -#define MACHINE_SIGNATURE_SIZE 1024 - -static char * -FcCacheMachineSignature (void) -{ - static char buf[MACHINE_SIGNATURE_SIZE]; - int32_t magic = ENDIAN_TEST; - char * m = (char *)&magic; - - sprintf (buf, "%01x%01x%01x%01x_" - "%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_" - "%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x_%02x", - m[0], m[1], m[2], m[3], - (unsigned int)sizeof (FcAlign), - (unsigned int)sizeof (char), - (unsigned int)sizeof (char *), - (unsigned int)sizeof (int), - (unsigned int)sizeof (intptr_t), - (unsigned int)sizeof (FcPattern), - (unsigned int)sizeof (FcPatternEltPtr), - (unsigned int)sizeof (struct FcPatternElt *), - (unsigned int)sizeof (FcPatternElt), - (unsigned int)sizeof (FcObject), - (unsigned int)sizeof (FcValueListPtr), - (unsigned int)sizeof (FcValue), - (unsigned int)sizeof (FcValueBinding), - (unsigned int)sizeof (struct FcValueList *), - (unsigned int)sizeof (FcStrSet *), /* For FcLangSet */ - (unsigned int)sizeof (FcCharSet), - (unsigned int)sizeof (FcCharLeaf **), - (unsigned int)sizeof (FcChar16 *), - (unsigned int)sizeof (FcChar16), - (unsigned int)sizeof (FcCharLeaf), - (unsigned int)sizeof (FcChar32), - (unsigned int)sizeof (FcCache)); - - return buf; -} - -int -main (int argc, char **argv) -{ - static char line[1024]; - char *signature; - int signature_length; - char *space; - char *arch = NULL; - int lineno = 0; - - if (argc != 2) - fprintf (stderr, "Usage: %s <architecture>|auto < fcarch.tmpl.h > fcarch.h\n", - argv[0]); - arch = argv[1]; - /* - * Scan the input until the marker is found - */ - - while (fgets (line, sizeof (line), stdin)) - { - lineno++; - if (!strncmp (line, "@@@", 3)) - break; - fputs (line, stdout); - } - signature = FcCacheMachineSignature(); - signature_length = strlen (signature); - - if (strcmp (arch, "auto") == 0) - { - arch = NULL; - /* - * Search for signature - */ - while (fgets (line, sizeof (line), stdin)) - { - lineno++; - /* - * skip comments - */ - if (!strncmp (line, "@@@", 3)) - continue; - space = line; - while (*space && !isspace (*space)) - space++; - if (!space) - { - fprintf (stderr, "%s: malformed input on line %d\n", - argv[0], lineno); - exit (1); - } - *space++ = '\0'; - while (isspace (*space)) - space++; - if (!strncmp (space, signature, signature_length)) - { - arch = line; - break; - } - } - } - if (!arch) - { - fprintf (stderr, "%s: unknown signature \"%s\"\n", argv[0], signature); - fprintf (stderr, "\tPlease update fcarch.tmpl.h and rebuild\n"); - exit (1); - } - printf ("#define FC_ARCHITECTURE \"%s\"\n", arch); - fflush (stdout); - exit (ferror (stdout)); -} - diff --git a/fontconfig/fc-arch/fcarch.tmpl.h b/fontconfig/fc-arch/fcarch.tmpl.h deleted file mode 100644 index 363e11aa1..000000000 --- a/fontconfig/fc-arch/fcarch.tmpl.h +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright © 2006 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@@@ -@@@ Each unique machine architecture needs an entry in this file -@@@ If fc-arch runs and doesn't find a matching entry, it will print -@@@ out the archtecture signature in the error message. Take that -@@@ signature and place it in this file along with a suitable architecture -@@@ name. Architecture names are used to construct file names, so -@@@ use something reasonable and don't include any spaces -@@@ -@@@ So far the differences boil down to: endianness, 32 vs 64 bit pointers, -@@@ and on @@@ 32bit ones, whether double is aligned to one word or two words. -@@@ Those result in the 6 formats listed below. -@@@ -@@@ ,name (endianness,pointer-size,double-alignment) -@@@ | ,endian -@@@ | | ,FcAlign -@@@ | | | ,char -@@@ | | | | ,char* -@@@ | | | | | ,int -@@@ | | | | | | ,intptr_t -@@@ | | | | | | | ,Pattern -@@@ | | | | | | | | ,EltPtr -@@@ | | | | | | | | | ,Elt * -@@@ | | | | | | | | | | ,Elt -@@@ | | | | | | | | | | | ,ObjPtr -@@@ | | | | | | | | | | | | ,ValueListPtr -@@@ | | | | | | | | | | | | | ,Value -@@@ | | | | | | | | | | | | | | ,ValueBinding -@@@ | | | | | | | | | | | | | | | ,ValueList * -@@@ | | | | | | | | | | | | | | | | ,StrSet * -@@@ | | | | | | | | | | | | | | | | | ,CharSet -@@@ | | | | | | | | | | | | | | | | | | ,CharLeaf ** -@@@ | | | | | | | | | | | | | | | | | | | ,Char16 * -@@@ | | | | | | | | | | | | | | | | | | | | ,Char16 -@@@ | | | | | | | | | | | | | | | | | | | | | ,CharLeaf -@@@ | | | | | | | | | | | | | | | | | | | | | | ,Char32 -@@@ | | | | | | | | | | | | | | | | | | | | | | | ,Cache -@@@ | | | | | | | | | | | | | | | | | | | | | | | | -le32d4 4321_08_01_04_04_04_10_04_04_08_04_04_0c_04_04_04_10_04_04_02_20_04_20 -le32d8 4321_08_01_04_04_04_10_04_04_08_04_04_10_04_04_04_10_04_04_02_20_04_20 -le64 4321_08_01_08_04_08_18_08_08_10_04_08_10_04_08_08_18_08_08_02_20_04_38 -be32d4 1234_08_01_04_04_04_10_04_04_08_04_04_0c_04_04_04_10_04_04_02_20_04_20 -be32d8 1234_08_01_04_04_04_10_04_04_08_04_04_10_04_04_04_10_04_04_02_20_04_20 -be64 1234_08_01_08_04_08_18_08_08_10_04_08_10_04_08_08_18_08_08_02_20_04_38 diff --git a/fontconfig/fc-arch/makefile b/fontconfig/fc-arch/makefile deleted file mode 100644 index 2f18dff42..000000000 --- a/fontconfig/fc-arch/makefile +++ /dev/null @@ -1,23 +0,0 @@ -ifneq ($(NORELDBG),1) -$(error NORELDBG should have been set to 1) -endif - -INCLUDES+=..\src - -TMPL=fcarch.tmpl.h -STMPL=fcarch.tmpl.h -TARG=fcarch.h - -ARCHITECTURE=x86-vc - -TTYAPP=fc-arch -CSRCS=fc-arch.c - -DEFINES += HAVE_CONFIG_H -INCLUDES := .. $(INCLUDES) - -$(TARG): $(OBJDIR)\fc-arch.exe $(STMPL) ..\src\fcint.h ..\config.h - del -e $(TARG) - $(OBJDIR)\fc-arch.exe $(ARCHITECTURE) < $(STMPL) > $(TARG).tmp - move $(TARG).tmp $(TARG) - diff --git a/fontconfig/fc-cache/Makefile.am b/fontconfig/fc-cache/Makefile.am index 5067c04c0..4402d8952 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -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 19e9d0df6..c7dcbbfd7 100644 --- a/fontconfig/fc-cache/fc-cache.c +++ b/fontconfig/fc-cache/fc-cache.c @@ -1,468 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#include "../fc-arch/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 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) - { - 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); - } - 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 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; - } - - ret = scanDirs (list, config, force, really_force, verbose); - - 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 (); - 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 0b602a39d..b5328f173 100644 --- a/fontconfig/fc-cache/fc-cache.sgml +++ b/fontconfig/fc-cache/fc-cache.sgml @@ -1,210 +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>-fsvVh</option></arg> - <arg><option>--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>-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-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 bd0e86d03..0c0c1b8c8 100644 --- a/fontconfig/fc-case/CaseFolding.txt +++ b/fontconfig/fc-case/CaseFolding.txt @@ -1,1202 +1,1211 @@ -# CaseFolding-5.2.0.txt -# Date: 2009-05-28, 23:02:34 GMT [MD] -# -# Unicode Character Database -# Copyright (c) 1991-2009 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 -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 -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 -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 bf0198454..47d9634c6 100644 --- a/fontconfig/fc-case/Makefile.am +++ b/fontconfig/fc-case/Makefile.am @@ -1,62 +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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# - -CC = @CC_FOR_BUILD@ -EXEEXT = @EXEEXT_FOR_BUILD@ -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ - -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=$(TMPL) $(CASEFOLDING) - -$(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING) - $(AM_V_GEN) $(RM) $(TARG); \ - ./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG).tmp && \ - mv $(TARG).tmp $(TARG) - -ALIAS_FILES = fcalias.h fcaliastail.h - -BUILT_SOURCES = $(ALIAS_FILES) - -$(ALIAS_FILES): - touch $(ALIAS_FILES) - -CLEANFILES=$(TARG) $(ALIAS_FILES) - +#
+# $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 e86b34783..dd8b1f08a 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 62633293a..45d67d12b 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@@@ +/*
+ * 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 27b637534..b88c1a499 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -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 a9326c8eb..7b52d5475 100644 --- a/fontconfig/fc-cat/fc-cat.c +++ b/fontconfig/fc-cat/fc-cat.c @@ -1,408 +1,409 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 "../fc-arch/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 *name, *dir; - const FcChar8 *file, *base; - int ret; - int n; - int id; - 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]; - - if (FcPatternGetString (font, FC_FILE, 0, (FcChar8 **) &file) != FcResultMatch) - goto bail3; - base = file_base_name (base_name, file); - if (FcPatternGetInteger (font, FC_INDEX, 0, &id) != FcResultMatch) - goto bail3; - if (!write_string (stdout, base)) - goto bail3; - if (PUTC (' ', stdout) == EOF) - goto bail3; - if (!write_int (stdout, id)) - goto bail3; - if (PUTC (' ', stdout) == EOF) - goto bail3; - name = FcNameUnparse (font); - if (!name) - goto bail3; - ret = write_string (stdout, name); - FcStrFree (name); - if (!ret) - goto bail3; - if (PUTC ('\n', stdout) == EOF) - goto bail3; - } - 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); - } - - 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 *name, *dir;
+ const FcChar8 *file, *base;
+ int ret;
+ int n;
+ int id;
+ 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];
+
+ if (FcPatternGetString (font, FC_FILE, 0, (FcChar8 **) &file) != FcResultMatch)
+ goto bail3;
+ base = file_base_name (base_name, file);
+ if (FcPatternGetInteger (font, FC_INDEX, 0, &id) != FcResultMatch)
+ goto bail3;
+ if (!write_string (stdout, base))
+ goto bail3;
+ if (PUTC (' ', stdout) == EOF)
+ goto bail3;
+ if (!write_int (stdout, id))
+ goto bail3;
+ if (PUTC (' ', stdout) == EOF)
+ goto bail3;
+ name = FcNameUnparse (font);
+ if (!name)
+ goto bail3;
+ ret = write_string (stdout, name);
+ FcStrFree (name);
+ if (!ret)
+ goto bail3;
+ if (PUTC ('\n', stdout) == EOF)
+ goto bail3;
+ }
+ 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 b042dc65f..38ba0653e 100644 --- a/fontconfig/fc-cat/fc-cat.sgml +++ b/fontconfig/fc-cat/fc-cat.sgml @@ -1,168 +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-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 bcb4d0746..2484f377e 100644 --- a/fontconfig/fc-glyphname/Makefile.am +++ b/fontconfig/fc-glyphname/Makefile.am @@ -1,55 +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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# - -CC = @CC_FOR_BUILD@ -EXEEXT = @EXEEXT_FOR_BUILD@ -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ - -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=$(TMPL) $(GLYPHNAME) - -$(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME) - $(AM_V_GEN) $(RM) $(TARG); \ - ./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG).tmp && \ - mv $(TARG).tmp $(TARG) - -ALIAS_FILES = fcalias.h fcaliastail.h - -BUILT_SOURCES = $(ALIAS_FILES) $(TARG) - -$(ALIAS_FILES): - touch $(ALIAS_FILES) - -CLEANFILES=$(TARG) $(ALIAS_FILES) - +#
+# $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 5e1e8816f..0339073a2 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 e2f76a2a5..7e2160996 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@@@ +/*
+ * 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 923a4fff6..1f6a4aef3 100644 --- a/fontconfig/fc-lang/Makefile.am +++ b/fontconfig/fc-lang/Makefile.am @@ -1,300 +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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# - -CC = @CC_FOR_BUILD@ -EXEEXT = @EXEEXT_FOR_BUILD@ -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ - -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=$(TMPL) $(ORTH) - -$(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL) - $(AM_V_GEN) $(RM) $(TARG); \ - ./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG).tmp && \ - mv $(TARG).tmp $(TARG) - -ALIAS_FILES = fcalias.h fcaliastail.h - -BUILT_SOURCES = $(ALIAS_FILES) $(TARG) - -$(ALIAS_FILES): - touch $(ALIAS_FILES) - -CLEANFILES = $(TARG) $(ALIAS_FILES) - -# 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 58658ce84..d4e59d326 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7049ac1e8..ce2d1608b 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 4c34460e9..df6bbc426 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 2f00a9616..447aafc38 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 39fcfa05d..cc2da0a16 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 20b81f418..9a9cf0921 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 21e4c22de..9fc1c9a6d 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 8055e9336..d7338fa91 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 6899791b6..dfa9681e5 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 169083564..513c1c775 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 ebcd19587..0d93d5dc7 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7c84790c8..bbedc44a2 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 4dc39ef6c..c39a7a676 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 d5998b4d9..e72746bd7 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 451783e7a..c488c0c82 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 1ff2c4b14..e0f8f7ad3 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 d87a5bf8f..f19d9e8a6 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 f09d18e74..00cb52dc5 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 fb90f0ff7..f38d7f579 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 5df47069a..13dc27e23 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 cb6729964..14df6912a 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 6ace8fa02..7cb4d67f1 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 4db7fbdab..502b1df44 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 795c821a1..45385b0c6 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 0f4b13cc6..f400cd35c 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 f41951164..0d87148f6 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 ccfc7d4c9..91915bd5c 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 aa7e7aa5d..422d4b6b8 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 043ad74fb..6e7e7c290 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3fe1b02f7..44ebe9282 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 db790c9ad..617df3d34 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b1f646714..3e74d81bb 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 15bf17855..69dc73066 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c7843af22..58dc1a202 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 0b9782ea6..3c7eb0636 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c521e2183..ce4214cd0 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 80501c7bf..e9c247a26 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 603ef6062..9d43a33d9 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 db2d2c140..da1108613 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 6ff35779d..ad3f5d91a 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 2d9d7fa59..e404478bb 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 21d568d7e..67d0f1d5f 100644 --- a/fontconfig/fc-lang/fc-lang.c +++ b/fontconfig/fc-lang/fc-lang.c @@ -1,577 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 *line, int *lineno) -{ - char *hash; - int end; - if (!fgets (line, 1024, f)) - return 0; - ++(*lineno); - hash = strchr (line, '#'); - if (hash) - *hash = '\0'; - - end = strlen (line); - while (end > 0 && isspace (line[end-1])) - line[--end] = '\0'; - - if (line[0] == '\0' || line[0] == '\n' || line[0] == '\032' || line[0] == '\r') - return get_line (f, line, lineno); - 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 const FcCharSet * -scan (FILE *f, char *file, FcCharSetFreezer *freezer) -{ - FcCharSet *c = 0; - FcCharSet *n; - int start, end, ucs4; - char line[1024]; - int lineno = 0; - - while (get_line (f, line, &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; - } - 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 (!FcCharSetAddChar (c, ucs4)) - fatal (file, lineno, "out of memory"); - } - } - n = 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 const *as = a, *bs = b; - return FcStrCmpIgnoreCase (as->file, 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 const 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 (intptr_t))\n", tn); - printf ("#define SET(n) (n * sizeof (FcLangCharSet) + offsetof (FcLangCharSet, charset))\n"); - printf ("#define OFF(s,o) (OFF0 + o * sizeof (intptr_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" - " intptr_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 8767be6fc..2e8774935 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 Keith Packard not be used in -.\" advertising or publicity pertaining to distribution of the software without -.\" specific, written prior permission. Keith Packard 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. -.\" -.\" -.\" 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 c7d388918..946537bd7 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -@@@ +/*
+ * 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 25b4e359c..05a12ffa0 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 ccac86e21..eb3cd02e3 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 5b7b6fb3f..a0e40d4ba 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 9d5d8c585..6bf70af76 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3441b9ec4..e5eb4495f 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 066feb0f1..fa3e76a83 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b17f4d68e..a853f4111 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 880114e4d..4c3798c49 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 39c308efd..e5b90fc56 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7d915fa28..88cadfecb 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 5538be580..364f0f2c2 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 36ddb7657..d9fca71c4 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 464690737..48d6d8af5 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c22c666bb..f089768c4 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 cea4faf73..33d95c36c 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 563fbd0d9..e48192bdf 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 bd68fa42a..ceada0b65 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3e2226a90..1e10f4658 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 f488c3c0e..c2ac24615 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 755c3670b..3fed0e4a3 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 76c024ae9..8ef0d9a1b 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 22dd8291b..15e8d649f 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 e1ee8e76a..1a434d72e 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 313c14643..89e1a8d2f 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7c9440558..261070f99 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 5486fea17..0453b21e5 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 138018849..21b16a888 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 eaaac3953..abe63ae08 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c33e7d271..fcb8f4158 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 ad1a22d6c..f216fa1d8 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 1c1300a0b..6dde0bf98 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 572ca91e4..5f8ea38d6 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 dda35ade5..3f5e17747 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 fe641a567..4c2253434 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 147ce8584..0d3e054ad 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 009a97ec8..9b59e2c39 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 2763de26d..a6b818a6d 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7b525304a..8366a44bf 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 1b02d9a8c..e2af7651a 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 e77de6627..e5cbe8703 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 80e434079..15a565966 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 6ca2e70f2..407502f5a 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 0107bfebd..cb6b470c4 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 87d4d93c2..cb2b02614 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 11824b799..df6eac36a 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 ba8425027..a7fd3d437 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b28cbcce7..1c1a1291c 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 6f7b2c299..ba299af61 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3fe9ac2eb..1f2ac70a3 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c32d66d74..49575ced4 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7c2dd0320..6b6333bc2 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 4bdfe7633..946ba19a2 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 fad04257e..49b971055 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 fd3971c01..e66119007 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3482c8f52..c79c9e030 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 cdd6fb46d..5a0b1c93f 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 1bc6832f7..81a5c02aa 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 0dac53489..0705a9f75 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 744eb7ce9..46a25a750 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c20497917..1647dceb1 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 5b4263385..f76aeec5d 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 029d51e4d..d8f457d33 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 51edc4efb..1e8cbfed2 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 9046d26e5..c660f7e22 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 ff8417687..b904b05e5 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3b2db30ce..73188aa21 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 18cf01119..782e7939a 100644 --- a/fontconfig/fc-lang/ne.orth +++ b/fontconfig/fc-lang/ne.orth @@ -1,25 +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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# Nepali (Devanagari script) (NE) -include hi.orth +#
+# 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 6f6315fd7..f694963c0 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b21e90f66..01d325da9 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 305c361cd..3b00143d8 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b846647e9..e168da566 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 55b237e6c..eb4bb8795 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7f28d39bd..3f7eb7d93 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3c54fe397..fc4a774bb 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 a5929df3e..7f771cc92 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 81b39107f..9700cc52a 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 e2d494e3f..1858395b2 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 98cf654bc..edb3bca31 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 5cae9eda9..3fabdf3c1 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 1ce76d5ad..c0d982441 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 77e97bfdd..862d82f1d 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 4c62810ed..20948ea7e 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 8c97d4d27..a2f887b71 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b8cb2ee99..e6eb3501b 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c7b08e16c..7d17bd1cf 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b4f25d97e..928b8070f 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 26bf0d60c..e515ca27c 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 e08733b8a..d67da376c 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 d76466a80..0bc87b874 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c7c870d87..08b639818 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 f37147587..0a53eda90 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 fba7d3dfb..f2c663ed6 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 f6e65ecb5..6d6bc4048 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 e708a907b..9488bccbc 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 4c2e2d6db..330de638b 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 04d1de366..cf92fe0c5 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 243657802..0df2d91c0 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 252230202..01d7db0b6 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 5439d6334..f3e65f13d 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 ac627c81f..35645c3de 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 81975e9f3..c2988a96e 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b1f4a8dfc..88366a459 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 cb6b215cd..995a3c84b 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 cb9989e9e..162029156 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 f11e6af47..800dd7579 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 47396bf30..1f2f51208 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b1f7dc634..9438bd07e 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 37ee0f7f7..a9f123521 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 c5b9c0633..c569e9300 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 342281e03..16f607311 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3b85a1e8d..4e1cd03aa 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 155a69d37..f14b75a65 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 ffc180797..1226dd842 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 a91d7c4fc..588b2c444 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b6e654638..f89379cc4 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 9d5bd742e..7926a6768 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 bf8e67450..6b97b9a04 100644 --- a/fontconfig/fc-lang/ug.orth +++ b/fontconfig/fc-lang/ug.orth @@ -1,29 +1,50 @@ -# -# fontconfig/fc-lang/ug.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# Uighur (UG) -# -# Uighur is written in a varient of Perso-Arabic, but I haven't found -# any references which define the variations. So, for now we'll use Arabic -# fonts -include ar.orth +#
+# 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 593fc5c4c..639593360 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 d9b944acc..5b7b5e656 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 a7c91dba6..96d9af3e2 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7915cab2b..8255c3d68 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 8b334698e..fe2b34946 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 006b3e33c..2bfafdba2 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 6b575271a..bb854343e 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 13d1714f3..b17f6508c 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 3e3fc3d73..e11500452 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 a068709da..4a8aaa2c4 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 6678b879f..35979cdde 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 954b025d6..1f799fcbf 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 7e38d8a6d..aa98b419e 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 6438869ae..357af6c51 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 d280179bf..b4a67ebb4 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 fe70977d7..1b68dc0e8 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 01919158f..e69c38023 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 a052bfde1..8b88b03ce 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 dc236c820..8be8ea482 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. -# -# 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 b364271bd..9edb35e3a 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -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 e7813a6b4..9f16224e0 100644 --- a/fontconfig/fc-list/fc-list.c +++ b/fontconfig/fc-list/fc-list.c @@ -1,209 +1,209 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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, (char *) 0); - 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 if (format) - { - FcChar8 *s; - - s = FcPatternFormat (fs->fonts[j], format); - if (s) - { - printf ("%s", s); - free (s); - } - } - else - { - FcChar8 *str; - FcChar8 *file; - - str = FcNameUnparse (fs->fonts[j]); - if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) - printf ("%s: ", file); - printf ("%s\n", str); - free (str); - } - } - } - - 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, (char *) 0);
+ 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 if (format)
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (fs->fonts[j], format);
+ if (s)
+ {
+ printf ("%s", s);
+ free (s);
+ }
+ }
+ else
+ {
+ FcChar8 *str;
+ FcChar8 *file;
+
+ str = FcNameUnparse (fs->fonts[j]);
+ if (FcPatternGetString (fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch)
+ printf ("%s: ", file);
+ printf ("%s\n", str);
+ free (str);
+ }
+ }
+ }
+
+ 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 ffa089144..7f0c23023 100644 --- a/fontconfig/fc-list/fc-list.sgml +++ b/fontconfig/fc-list/fc-list.sgml @@ -1,214 +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-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 9d725a582..f4244b6a5 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -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 8963e7af3..14f38ff30 100644 --- a/fontconfig/fc-match/fc-match.c +++ b/fontconfig/fc-match/fc-match.c @@ -1,263 +1,263 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 (fs) - { - int j; - - for (j = 0; j < fs->nfont; j++) - { - FcPattern *font; - - font = FcPatternFilter (fs->fonts[j], os); - - if (verbose) - { - FcPatternPrint (font); - } - else if (format) - { - FcChar8 *s; - - s = FcPatternFormat (font, format); - if (s) - { - printf ("%s", s); - free (s); - } - } - else if (os) - { - FcChar8 *str; - str = FcNameUnparse (font); - printf ("%s\n", str); - free (str); - } - else - { - FcChar8 *family; - FcChar8 *style; - FcChar8 *file; - - if (FcPatternGetString (font, FC_FILE, 0, &file) != FcResultMatch) - file = (FcChar8 *) "<unknown filename>"; - else - { - FcChar8 *slash = (FcChar8 *) strrchr ((char *) file, '/'); - if (slash) - file = slash+1; - } - if (FcPatternGetString (font, FC_FAMILY, 0, &family) != FcResultMatch) - family = (FcChar8 *) "<unknown family>"; - if (FcPatternGetString (font, FC_STYLE, 0, &style) != FcResultMatch) - style = (FcChar8 *) "<unknown style>"; - - printf ("%s: \"%s\" \"%s\"\n", file, family, style); - } - - 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 (fs)
+ {
+ int j;
+
+ for (j = 0; j < fs->nfont; j++)
+ {
+ FcPattern *font;
+
+ font = FcPatternFilter (fs->fonts[j], os);
+
+ if (verbose)
+ {
+ FcPatternPrint (font);
+ }
+ else if (format)
+ {
+ FcChar8 *s;
+
+ s = FcPatternFormat (font, format);
+ if (s)
+ {
+ printf ("%s", s);
+ free (s);
+ }
+ }
+ else if (os)
+ {
+ FcChar8 *str;
+ str = FcNameUnparse (font);
+ printf ("%s\n", str);
+ free (str);
+ }
+ else
+ {
+ FcChar8 *family;
+ FcChar8 *style;
+ FcChar8 *file;
+
+ if (FcPatternGetString (font, FC_FILE, 0, &file) != FcResultMatch)
+ file = (FcChar8 *) "<unknown filename>";
+ else
+ {
+ FcChar8 *slash = (FcChar8 *) strrchr ((char *) file, '/');
+ if (slash)
+ file = slash+1;
+ }
+ if (FcPatternGetString (font, FC_FAMILY, 0, &family) != FcResultMatch)
+ family = (FcChar8 *) "<unknown family>";
+ if (FcPatternGetString (font, FC_STYLE, 0, &style) != FcResultMatch)
+ style = (FcChar8 *) "<unknown style>";
+
+ printf ("%s: \"%s\" \"%s\"\n", file, family, style);
+ }
+
+ 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 390b733c3..5cc879037 100644 --- a/fontconfig/fc-match/fc-match.sgml +++ b/fontconfig/fc-match/fc-match.sgml @@ -1,216 +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-query</command>(1) - <command>fc-scal</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-pattern/Makefile.am b/fontconfig/fc-pattern/Makefile.am new file mode 100644 index 000000000..a7db2105e --- /dev/null +++ b/fontconfig/fc-pattern/Makefile.am @@ -0,0 +1,59 @@ +# +# fontconfig/fc-pattern/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-pattern + +DOC2MAN = docbook2man + +FC_PATTERN_SRC=${top_srcdir}/fc-pattern + +SGML = ${FC_PATTERN_SRC}/fc-pattern.sgml + +INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) + +BUILT_MANS=fc-pattern.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-pattern.sgml $(BUILT_MANS) + +fc_pattern_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-pattern/fc-pattern.c b/fontconfig/fc-pattern/fc-pattern.c new file mode 100644 index 000000000..aa51e5f39 --- /dev/null +++ b/fontconfig/fc-pattern/fc-pattern.c @@ -0,0 +1,195 @@ +/* + * fontconfig/fc-pattern/fc-pattern.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[] = { + {"config", 0, 0, 'c'}, + {"default", 0, 0, 'd'}, + {"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 [-cdVh] [-f FORMAT] [--config] [--default] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n", + program); +#else + fprintf (file, "usage: %s [-cdVh] [-f FORMAT] [pattern] {element...}\n", + program); +#endif + fprintf (file, "List best font matching [pattern]\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -c, --config perform config substitution on pattern\n"); + fprintf (file, " -d, -default perform default substitution on pattern\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, " -c, (config) perform config substitution on pattern\n"); + fprintf (file, " -d, (default) perform default substitution on pattern\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 do_config = 0, do_default = 0; + FcChar8 *format = NULL; + int i; + FcObjectSet *os = 0; + FcPattern *pat; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "cdf:Vh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "cdf:Vh")) != -1) +#endif + { + switch (c) { + case 'c': + do_config = 1; + break; + case 'd': + do_default = 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; + + if (do_config) + FcConfigSubstitute (0, pat, FcMatchPattern); + if (do_default) + FcDefaultSubstitute (pat); + + if (os) + { + FcPattern *new; + new = FcPatternFilter (pat, os); + FcPatternDestroy (pat); + pat = new; + } + + if (format) + { + FcChar8 *s; + + s = FcPatternFormat (pat, format); + if (s) + { + printf ("%s", s); + free (s); + } + } + else + { + FcPatternPrint (pat); + } + + FcPatternDestroy (pat); + + if (os) + FcObjectSetDestroy (os); + + FcFini (); + + return 0; +} diff --git a/fontconfig/fc-pattern/fc-pattern.sgml b/fontconfig/fc-pattern/fc-pattern.sgml new file mode 100644 index 000000000..928afd8d2 --- /dev/null +++ b/fontconfig/fc-pattern/fc-pattern.sgml @@ -0,0 +1,204 @@ +<!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>Apr 20, 2010</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-pattern</refentrytitle>"> + <!ENTITY dhpackage "fc-pattern"> + + <!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>2010</year> + <holder>&dhusername;</holder> + </copyright> + &dhdate; + </refentryinfo> + <refmeta> + &dhucpackage; + + &dhsection; + </refmeta> + <refnamediv> + <refname>&dhpackage;</refname> + + <refpurpose>parse and show pattern</refpurpose> + </refnamediv> + <refsynopsisdiv> + <cmdsynopsis> + <command>&dhpackage;</command> + + <arg><option>-cdVh</option></arg> + <arg><option>--config</option></arg> + <arg><option>--default</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> parses + <replaceable>pattern</replaceable> (empty +pattern by default) and shows the parsed result. +If <option>--config</option> is given, config substitution is performed on the +pattern before being displayed. +If <option>--default</option> is given, default substitution is performed on the +pattern before being displayed.</para> +<para>If any elements are specified, only those are printed.</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>-c</option> + <option>--config</option> + </term> + <listitem> + <para>Perform config substitution on pattern.</para> + </listitem> + </varlistentry> + <varlistentry> + <term><option>-d</option> + <option>--default</option> + </term> + <listitem> + <para>Perform default substitution on pattern.</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>Parses and displays <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 parsed pattern.</para> + </listitem> + </varlistentry> + </variablelist> + </refsect1> + + <refsect1> + <title>SEE ALSO</title> + + <para> + <function>FcNameParse</function>(3) + <function>FcConfigSubstitute</function>(3) + <function>FcDefaultSubstitute</function>(3) + <function>FcPatternPrint</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-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 114fd7f80..a7300a3bc 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -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 f2693de59..efb1aa0e4 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 59fd63548..e81e7bf14 100644 --- a/fontconfig/fc-query/fc-query.sgml +++ b/fontconfig/fc-query/fc-query.sgml @@ -1,191 +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) - </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 af4383149..c786a79e9 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -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 5f9a46670..1843da202 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 b9f7714e2..4c8a88d44 100644 --- a/fontconfig/fc-scan/fc-scan.sgml +++ b/fontconfig/fc-scan/fc-scan.sgml @@ -1,176 +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) - </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 db55f6e14..811419764 100644 --- a/fontconfig/fontconfig.pc.in +++ b/fontconfig/fontconfig.pc.in @@ -1,11 +1,16 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ - -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 de9988f65..09799dc9d 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 ec964fce1..e65ff9cc5 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 4efa4507a..45b23dd23 100644 --- a/fontconfig/fontconfig/fontconfig.h +++ b/fontconfig/fontconfig/fontconfig.h @@ -1,963 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#ifndef _FONTCONFIG_H_ -#define _FONTCONFIG_H_ - -#include <sys/types.h> -#include <sys/stat.h> -#include <unistd.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 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 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); - -/* 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 cbdfdab3f..3e315b840 100644 --- a/fontconfig/fonts.dtd +++ b/fontconfig/fonts.dtd @@ -1,224 +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)*> - -<!-- - 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|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 - |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 (#PCDATA)> -<!ATTLIST charset xml:space (default|preserve) 'preserve'> -<!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 406e85e15..7ecbc1b62 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 Keith Packard not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. Keith Packard 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. - -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-arch/fcarch.h \ - ../fc-case/fccase.h \ - ../fc-glyphname/fcglyphname.h \ - ../fc-lang/fclang.h - -../fc-arch/fcarch.h: - cd ../fc-arch && $(MAKE) $(AM_MAKEFLAGS) fcarch.h -../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 = \ - 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/fcarch.c b/fontconfig/src/fcarch.c new file mode 100644 index 000000000..c69397e18 --- /dev/null +++ b/fontconfig/src/fcarch.c @@ -0,0 +1,73 @@ +/* + * Copyright © 2002 Keith Packard + * Copyright © 2010 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 <stdio.h> + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +/* If architecture is hardcoded, skip the assert tests */ + +#ifndef FC_ARCHITECTURE + +#include "fcarch.h" + +/* Make sure the cache structure is consistent with what we expect */ + +#include "fcint.h" + +FC_ASSERT_STATIC (1 == sizeof (char)); +FC_ASSERT_STATIC (2 == sizeof (FcChar16)); +FC_ASSERT_STATIC (4 == sizeof (int)); +FC_ASSERT_STATIC (4 == sizeof (FcChar32)); +FC_ASSERT_STATIC (4 == sizeof (FcObject)); +FC_ASSERT_STATIC (4 == sizeof (FcValueBinding)); +FC_ASSERT_STATIC (8 == sizeof (FcAlign)); +FC_ASSERT_STATIC (0x20 == sizeof (FcCharLeaf)); + +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (intptr_t)); +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcPatternEltPtr)); +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcValueListPtr)); +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (char *)); +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (struct FcPatternElt *)); +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcValueList *)); +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcStrSet *)); +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcCharLeaf **)); +FC_ASSERT_STATIC (SIZEOF_VOID_P == sizeof (FcChar16 *)); + +FC_ASSERT_STATIC (0x08 + 1*ALIGNOF_DOUBLE == sizeof (FcValue)); +FC_ASSERT_STATIC (0x00 + 2*SIZEOF_VOID_P == sizeof (FcPatternElt)); +FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcPattern)); +FC_ASSERT_STATIC (0x08 + 2*SIZEOF_VOID_P == sizeof (FcCharSet)); +FC_ASSERT_STATIC (0x08 + 6*SIZEOF_VOID_P == sizeof (FcCache)); + +#endif + + +int +main (int argc, char **argv) +{ + printf ("%s\n", FC_ARCHITECTURE); + return 0; +} diff --git a/fontconfig/src/fcarch.h b/fontconfig/src/fcarch.h new file mode 100644 index 000000000..0c8cd053f --- /dev/null +++ b/fontconfig/src/fcarch.h @@ -0,0 +1,71 @@ +/* + * Copyright © 2006 Keith Packard + * Copyright © 2010 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. + */ +#ifndef _FCARCH_H_ +#define _FCARCH_H_ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +/* + * Each unique machine architecture needs an entry in this file + * So far the differences boil down to: endianness, 32 vs 64 bit pointers, + * and on 32bit ones, whether double is aligned to one word or two words. + * Those result in the 6 formats listed below. + * + * If any of the assertion errors in fccache.c fail, you need to add a new + * architecture. Contact the fontconfig mailing list in that case. + * + * name endianness pointer-size double-alignment + * + * le32d4 4321 4 4 + * le32d8 4321 4 8 + * le64 4321 8 8 + * be32d4 1234 4 4 + * be32d8 1234 4 8 + * be64 1234 8 8 + */ + +#if defined(WORDS_BIGENDIAN) && WORDS_BIGENDIAN +# define FC_ARCH_ENDIAN "be" +#else /* !WORDS_BIGENDIAN */ +# define FC_ARCH_ENDIAN "le" +#endif + +#if SIZEOF_VOID_P == 4 +# if ALIGNOF_DOUBLE == 4 +# define FC_ARCH_SIZE_ALIGN "32d4" +# else /* ALIGNOF_DOUBLE != 4 */ +# define FC_ARCH_SIZE_ALIGN "32d8" +# endif +#else /* SIZEOF_VOID_P != 4 */ +# define FC_ARCH_SIZE_ALIGN "64" +#endif + +#ifdef ARCHITECTURE +# define ARCHITECTURE FC_ARCHITECTURE +#else +# define FC_ARCHITECTURE FC_ARCH_ENDIAN FC_ARCH_SIZE_ALIGN +#endif + +#endif /* _FCARCH_H_ */ diff --git a/fontconfig/src/fcatomic.c b/fontconfig/src/fcatomic.c index d6121305a..cc16a9c96 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -/* - * 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 ((char *) 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 bab3066e8..eab2ecf78 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 d62b19346..b27e3d39e 100644 --- a/fontconfig/src/fccache.c +++ b/fontconfig/src/fccache.c @@ -1,1263 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#include "fcint.h" -#include "../fc-arch/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; -} -#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 ((char *) 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 ((const char *) 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 0f89b57a4..d6300515e 100644 --- a/fontconfig/src/fccfg.c +++ b/fontconfig/src/fccfg.c @@ -1,2056 +1,2099 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 ((char *) 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 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; - 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; - - if (!dir) - dir = (FcChar8 *) ""; - path = malloc (strlen ((char *) dir) + 1 + strlen ((char *) file) + 1); - 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, strlen ((char *) path) + 1); - 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;
+
+ if (!dir)
+ dir = (FcChar8 *) "";
+ path = malloc (strlen ((char *) dir) + 1 + strlen ((char *) file) + 1);
+ 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, strlen ((char *) path) + 1);
+ 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 d30e1614a..54e396bce 100644 --- a/fontconfig/src/fccharset.c +++ b/fontconfig/src/fccharset.c @@ -1,1422 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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; -} - -/* - * 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 fd2d55a6b..b8cb079fc 100644 --- a/fontconfig/src/fcdbg.c +++ b/fontconfig/src/fcdbg.c @@ -1,398 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 FcOpBool: printf ("Bool"); break; - case FcOpCharSet: printf ("CharSet"); 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 FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break; - case FcOpCharSet: printf ("charset\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 091276b70..92ab8f0e6 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 f927c0b28..56fc94453 100644 --- a/fontconfig/src/fcdir.c +++ b/fontconfig/src/fcdir.c @@ -1,328 +1,328 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#include "fcint.h" -#include <dirent.h> - -FcBool -FcFileIsDir (const FcChar8 *file) -{ - struct stat statb; - - if (FcStat ((const char *) 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 && !FcConfigSubstituteWithPat (config, font, NULL, FcMatchScan)) - { - FcPatternDestroy (font); - font = NULL; - ret = FcFalse; - } - - /* - * Add the font - */ - if (font && (!config || FcConfigAcceptFont (config, 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 ((char *) 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; - - if (config && !FcConfigAcceptFilename (config, dir)) - return 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 && !FcConfigSubstituteWithPat (config, font, NULL, FcMatchScan))
+ {
+ FcPatternDestroy (font);
+ font = NULL;
+ ret = FcFalse;
+ }
+
+ /*
+ * Add the font
+ */
+ if (font && (!config || FcConfigAcceptFont (config, 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;
+
+ if (config && !FcConfigAcceptFilename (config, dir))
+ return 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 bf9401740..28433a705 100644 --- a/fontconfig/src/fcformat.c +++ b/fontconfig/src/fcformat.c @@ -1,1203 +1,1211 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 - * 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}}' - * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation) - */ - - -#define FCMATCH_FORMAT "%{file:-<unknown filename>|basename}: \"%{family[0]:-<unknown family>}\" \"%{style[0]:-<unknown style>}\"" -#define FCLIST_FORMAT "%{?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 ("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 - { - 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], idx, &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))) - { - 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)) - { - 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, '\0')) - { - 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) -{ - 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) -{ - 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
+ * 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 FCMATCH_FORMAT "%{file:-<unknown filename>|basename}: \"%{family[0]:-<unknown family>}\" \"%{style[0]:-<unknown style>}\""
+#define FCLIST_FORMAT "%{?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 ("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, '\0'))
+ {
+ 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 68596f5a4..78a37b0a9 100644 --- a/fontconfig/src/fcfreetype.c +++ b/fontconfig/src/fcfreetype.c @@ -1,3004 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -/* - 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, "UCS-2BE" }, - { TT_PLATFORM_MACINTOSH, TT_MAC_ID_ROMAN, "MACINTOSH" }, - { TT_PLATFORM_MACINTOSH, TT_MAC_ID_JAPANESE, "SJIS" }, - { 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, "UCS-2BE" }, - { TT_PLATFORM_ISO, TT_ISO_ID_7BIT_ASCII, "ASCII" }, - { TT_PLATFORM_ISO, TT_ISO_ID_10646, "UCS-2BE" }, - { 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 0e97501f8..e2ff0fafe 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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/fcinit.c b/fontconfig/src/fcinit.c index 3789d67b5..45f0cd4a3 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 FcFalse; - - 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 233b4c302..46be99eb8 100644 --- a/fontconfig/src/fcint.h +++ b/fontconfig/src/fcint.h @@ -1,1031 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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_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, FcOpBool, FcOpCharSet, - 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; - FcChar8 *sval; - FcMatrix *mval; - FcBool bval; - FcCharSet *cval; - FcObject object; - 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[0]; -}; - -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; - -/* 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); - -#ifdef _WIN32 -FcPrivate int -FcStat (const char *file, struct stat *statb); -#else -#define FcStat stat -#endif - -/* 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 1d62c4e3f..6a9cf01d6 100644 --- a/fontconfig/src/fclang.c +++ b/fontconfig/src/fclang.c @@ -1,822 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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; -} - -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); -} - -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 - */ -FcLangSet * -FcLangSetPromote (const FcChar8 *lang) -{ - static FcLangSet ls; - static FcStrSet strs; - static FcChar8 *str; - int id; - - memset (ls.map, '\0', sizeof (ls.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; -} - -#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 d804c1503..0f9a1235c 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 aa84eda83..6103ae2c9 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 FcPatternAddWithBinding 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] < 200) - { - 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] < 200)
+ {
+ 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/fcname.c b/fontconfig/src/fcname.c index b4ce94421..1d2536c9c 100644 --- a/fontconfig/src/fcname.c +++ b/fontconfig/src/fcname.c @@ -1,903 +1,903 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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) || - !strcmp (o->object, FC_FILE)) - 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) ||
+ !strcmp (o->object, FC_FILE))
+ 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 76263b655..0fb2e506c 100644 --- a/fontconfig/src/fcpat.c +++ b/fontconfig/src/fcpat.c @@ -1,1263 +1,1263 @@ -/* - * 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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; - b = malloc (size + sizeof (int)); - /* workaround glibc bug which reads strlen in groups of 4 */ - FcMemAlloc (FC_MEM_STATICSTR, size + sizeof (int)); - 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;
+ b = malloc (size + sizeof (int));
+ /* workaround glibc bug which reads strlen in groups of 4 */
+ FcMemAlloc (FC_MEM_STATICSTR, size + sizeof (int));
+ 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 ea7c376c2..6aee5d288 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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 74b6c8143..5c4e9bf24 100644 --- a/fontconfig/src/fcxml.c +++ b/fontconfig/src/fcxml.c @@ -1,2566 +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 Keith Packard not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Keith Packard 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. - */ - -#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 * -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 FcOpCharSet: - FcCharSetDestroy (e->u.cval); - 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, - FcElementBool, - FcElementCharset, - 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 }, - { "bool", FcElementBool }, - { "charset", FcElementCharset }, - { "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, - FcVStackBool, - - 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; - FcBool bool_; - - 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 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 -FcVStackPushBool (FcConfigParse *parse, FcBool bool_) -{ - FcVStack *vstack = FcVStackCreateAndPush (parse); - if (!vstack) - return FcFalse; - vstack->u.bool_ = bool_; - vstack->tag = FcVStackBool; - 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 FcVStackBool: - 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); - while (n-- > 0) - { - FcVStack *v = FcVStackFetch (parse, n); - if (v->tag != FcVStackInteger) - FcConfigMessage (parse, FcSevereError, "non-integer blank"); - else - { - if (!parse->config->blanks) - { - parse->config->blanks = FcBlanksCreate (); - if (!parse->config->blanks) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - break; - } - } - if (!FcBlanksAdd (parse->config->blanks, v->u.integer)) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - break; - } - } - } -} - -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 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 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 FcVStackBool: - expr = FcExprCreateBool (parse->config, vstack->u.bool_); - 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; - 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 FcElementBool: - FcParseBool (parse); - break; - case FcElementCharset: -/* FcParseCharset (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/makefile b/fontconfig/src/makefile index 61eb00cb9..f27d62fa5 100644 --- a/fontconfig/src/makefile +++ b/fontconfig/src/makefile @@ -9,7 +9,6 @@ # -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \ # -DFONTCONFIG_PATH='"$(CONFDIR)"' -load_makefile NORELDBG=1 ..\fc-arch\makefile load_makefile NORELDBG=1 ..\fc-case\makefile load_makefile NORELDBG=1 ..\fc-glyphname\makefile load_makefile NORELDBG=1 ..\fc-lang\makefile |