From dafebc5bb70303f0b5baf0b087cf4d9a64b5c7f0 Mon Sep 17 00:00:00 2001 From: marha Date: Mon, 12 Sep 2011 11:27:51 +0200 Subject: Synchronised line endinge with release branch --- fontconfig/COPYING | 54 +- fontconfig/INSTALL | 84 +- fontconfig/Makefile.am | 284 +- fontconfig/autogen.sh | 246 +- fontconfig/conf.d/Makefile.am | 192 +- fontconfig/config/Makedefs.in | 152 +- fontconfig/configure.in | 1026 +- fontconfig/doc/Makefile.am | 406 +- fontconfig/doc/confdir.sgml.in | 52 +- fontconfig/doc/edit-sgml.c | 1092 +- fontconfig/doc/fcatomic.fncs | 190 +- fontconfig/doc/fcblanks.fncs | 116 +- fontconfig/doc/fccache.fncs | 136 +- fontconfig/doc/fccharset.fncs | 434 +- fontconfig/doc/fcconfig.fncs | 746 +- fontconfig/doc/fcconstant.fncs | 124 +- fontconfig/doc/fcfile.fncs | 176 +- fontconfig/doc/fcfontset.fncs | 280 +- fontconfig/doc/fcformat.fncs | 616 +- fontconfig/doc/fcfreetype.fncs | 212 +- fontconfig/doc/fcinit.fncs | 184 +- fontconfig/doc/fclangset.fncs | 356 +- fontconfig/doc/fcmatrix.fncs | 250 +- fontconfig/doc/fcobjectset.fncs | 146 +- fontconfig/doc/fcobjecttype.fncs | 100 +- fontconfig/doc/fcpattern.fncs | 794 +- fontconfig/doc/fcstring.fncs | 488 +- fontconfig/doc/fcstrset.fncs | 230 +- fontconfig/doc/fcvalue.fncs | 122 +- fontconfig/doc/fontconfig-devel.sgml | 1146 +- fontconfig/doc/fontconfig-user.sgml | 1408 +- fontconfig/doc/func.sgml | 180 +- fontconfig/doc/version.sgml.in | 48 +- fontconfig/fc-cache/Makefile.am | 136 +- fontconfig/fc-cache/fc-cache.c | 944 +- fontconfig/fc-cache/fc-cache.sgml | 440 +- fontconfig/fc-case/CaseFolding.txt | 2422 +-- fontconfig/fc-case/Makefile.am | 128 +- fontconfig/fc-case/fc-case.c | 726 +- fontconfig/fc-case/fccase.tmpl.h | 50 +- fontconfig/fc-cat/Makefile.am | 118 +- fontconfig/fc-cat/fc-cat.c | 784 +- fontconfig/fc-cat/fc-cat.sgml | 338 +- fontconfig/fc-glyphname/Makefile.am | 114 +- fontconfig/fc-glyphname/fc-glyphname.c | 650 +- fontconfig/fc-glyphname/fcglyphname.tmpl.h | 50 +- fontconfig/fc-lang/Makefile.am | 606 +- fontconfig/fc-lang/aa.orth | 80 +- fontconfig/fc-lang/ab.orth | 90 +- fontconfig/fc-lang/af.orth | 92 +- fontconfig/fc-lang/am.orth | 72 +- fontconfig/fc-lang/ar.orth | 78 +- fontconfig/fc-lang/ast.orth | 86 +- fontconfig/fc-lang/av.orth | 194 +- fontconfig/fc-lang/ay.orth | 74 +- fontconfig/fc-lang/az_ir.orth | 64 +- fontconfig/fc-lang/ba.orth | 112 +- fontconfig/fc-lang/be.orth | 80 +- fontconfig/fc-lang/bg.orth | 86 +- fontconfig/fc-lang/bh.orth | 50 +- fontconfig/fc-lang/bho.orth | 50 +- fontconfig/fc-lang/bi.orth | 78 +- fontconfig/fc-lang/bin.orth | 110 +- fontconfig/fc-lang/bm.orth | 74 +- fontconfig/fc-lang/bo.orth | 78 +- fontconfig/fc-lang/br.orth | 94 +- fontconfig/fc-lang/bs.orth | 78 +- fontconfig/fc-lang/bua.orth | 204 +- fontconfig/fc-lang/ca.orth | 116 +- fontconfig/fc-lang/ce.orth | 194 +- fontconfig/fc-lang/ch.orth | 70 +- fontconfig/fc-lang/chm.orth | 218 +- fontconfig/fc-lang/chr.orth | 50 +- fontconfig/fc-lang/co.orth | 50 +- fontconfig/fc-lang/cs.orth | 134 +- fontconfig/fc-lang/cu.orth | 84 +- fontconfig/fc-lang/cv.orth | 218 +- fontconfig/fc-lang/cy.orth | 126 +- fontconfig/fc-lang/da.orth | 178 +- fontconfig/fc-lang/de.orth | 98 +- fontconfig/fc-lang/dz.orth | 56 +- fontconfig/fc-lang/el.orth | 64 +- fontconfig/fc-lang/en.orth | 80 +- fontconfig/fc-lang/eo.orth | 64 +- fontconfig/fc-lang/es.orth | 100 +- fontconfig/fc-lang/et.orth | 94 +- fontconfig/fc-lang/eu.orth | 90 +- fontconfig/fc-lang/fa.orth | 146 +- fontconfig/fc-lang/fc-lang.c | 1184 +- fontconfig/fc-lang/fc-lang.man | 78 +- fontconfig/fc-lang/fclang.tmpl.h | 50 +- fontconfig/fc-lang/ff.orth | 76 +- fontconfig/fc-lang/fi.orth | 102 +- fontconfig/fc-lang/fj.orth | 68 +- fontconfig/fc-lang/fo.orth | 118 +- fontconfig/fc-lang/fr.orth | 116 +- fontconfig/fc-lang/fur.orth | 78 +- fontconfig/fc-lang/fy.orth | 122 +- fontconfig/fc-lang/ga.orth | 168 +- fontconfig/fc-lang/gd.orth | 102 +- fontconfig/fc-lang/gez.orth | 120 +- fontconfig/fc-lang/gl.orth | 100 +- fontconfig/fc-lang/gn.orth | 96 +- fontconfig/fc-lang/gu.orth | 82 +- fontconfig/fc-lang/gv.orth | 62 +- fontconfig/fc-lang/ha.orth | 72 +- fontconfig/fc-lang/haw.orth | 70 +- fontconfig/fc-lang/he.orth | 50 +- fontconfig/fc-lang/hi.orth | 70 +- fontconfig/fc-lang/ho.orth | 66 +- fontconfig/fc-lang/hr.orth | 98 +- fontconfig/fc-lang/hu.orth | 98 +- fontconfig/fc-lang/hy.orth | 52 +- fontconfig/fc-lang/ia.orth | 58 +- fontconfig/fc-lang/id.orth | 62 +- fontconfig/fc-lang/ie.orth | 58 +- fontconfig/fc-lang/ig.orth | 70 +- fontconfig/fc-lang/ik.orth | 200 +- fontconfig/fc-lang/io.orth | 58 +- fontconfig/fc-lang/is.orth | 128 +- fontconfig/fc-lang/it.orth | 102 +- fontconfig/fc-lang/iu.orth | 154 +- fontconfig/fc-lang/ja.orth | 13130 +++++++------- fontconfig/fc-lang/ka.orth | 68 +- fontconfig/fc-lang/kaa.orth | 220 +- fontconfig/fc-lang/ki.orth | 66 +- fontconfig/fc-lang/kk.orth | 90 +- fontconfig/fc-lang/kl.orth | 126 +- fontconfig/fc-lang/kn.orth | 80 +- fontconfig/fc-lang/ko.orth | 5076 +++--- fontconfig/fc-lang/kok.orth | 50 +- fontconfig/fc-lang/ku_am.orth | 182 +- fontconfig/fc-lang/ku_ir.orth | 98 +- fontconfig/fc-lang/kum.orth | 192 +- fontconfig/fc-lang/kv.orth | 202 +- fontconfig/fc-lang/kw.orth | 70 +- fontconfig/fc-lang/ky.orth | 204 +- fontconfig/fc-lang/la.orth | 62 +- fontconfig/fc-lang/lb.orth | 124 +- fontconfig/fc-lang/lez.orth | 194 +- fontconfig/fc-lang/ln.orth | 86 +- fontconfig/fc-lang/lo.orth | 90 +- fontconfig/fc-lang/lt.orth | 86 +- fontconfig/fc-lang/lv.orth | 88 +- fontconfig/fc-lang/mai.orth | 50 +- fontconfig/fc-lang/mg.orth | 70 +- fontconfig/fc-lang/mh.orth | 90 +- fontconfig/fc-lang/mi.orth | 70 +- fontconfig/fc-lang/mk.orth | 80 +- fontconfig/fc-lang/ml.orth | 76 +- fontconfig/fc-lang/mn_cn.orth | 74 +- fontconfig/fc-lang/mo.orth | 74 +- fontconfig/fc-lang/mr.orth | 50 +- fontconfig/fc-lang/mt.orth | 134 +- fontconfig/fc-lang/my.orth | 74 +- fontconfig/fc-lang/nb.orth | 50 +- fontconfig/fc-lang/nds.orth | 80 +- fontconfig/fc-lang/ne.orth | 52 +- fontconfig/fc-lang/nl.orth | 126 +- fontconfig/fc-lang/nn.orth | 86 +- fontconfig/fc-lang/no.orth | 136 +- fontconfig/fc-lang/ny.orth | 60 +- fontconfig/fc-lang/oc.orth | 106 +- fontconfig/fc-lang/om.orth | 58 +- fontconfig/fc-lang/or.orth | 84 +- fontconfig/fc-lang/os.orth | 192 +- fontconfig/fc-lang/pes.orth | 52 +- fontconfig/fc-lang/pl.orth | 82 +- fontconfig/fc-lang/prs.orth | 58 +- fontconfig/fc-lang/ps_af.orth | 104 +- fontconfig/fc-lang/ps_pk.orth | 104 +- fontconfig/fc-lang/pt.orth | 128 +- fontconfig/fc-lang/rm.orth | 90 +- fontconfig/fc-lang/ro.orth | 76 +- fontconfig/fc-lang/ru.orth | 76 +- fontconfig/fc-lang/sa.orth | 50 +- fontconfig/fc-lang/sah.orth | 216 +- fontconfig/fc-lang/sco.orth | 64 +- fontconfig/fc-lang/se.orth | 74 +- fontconfig/fc-lang/sel.orth | 192 +- fontconfig/fc-lang/sk.orth | 126 +- fontconfig/fc-lang/sl.orth | 176 +- fontconfig/fc-lang/sm.orth | 60 +- fontconfig/fc-lang/sma.orth | 74 +- fontconfig/fc-lang/smj.orth | 74 +- fontconfig/fc-lang/smn.orth | 80 +- fontconfig/fc-lang/sms.orth | 96 +- fontconfig/fc-lang/so.orth | 58 +- fontconfig/fc-lang/sq.orth | 70 +- fontconfig/fc-lang/sr.orth | 70 +- fontconfig/fc-lang/sv.orth | 200 +- fontconfig/fc-lang/sw.orth | 58 +- fontconfig/fc-lang/syr.orth | 58 +- fontconfig/fc-lang/ta.orth | 92 +- fontconfig/fc-lang/te.orth | 78 +- fontconfig/fc-lang/tg.orth | 216 +- fontconfig/fc-lang/th.orth | 60 +- fontconfig/fc-lang/ti_er.orth | 112 +- fontconfig/fc-lang/ti_et.orth | 66 +- fontconfig/fc-lang/tig.orth | 104 +- fontconfig/fc-lang/tn.orth | 70 +- fontconfig/fc-lang/to.orth | 60 +- fontconfig/fc-lang/tr.orth | 98 +- fontconfig/fc-lang/ts.orth | 58 +- fontconfig/fc-lang/tt.orth | 216 +- fontconfig/fc-lang/tw.orth | 100 +- fontconfig/fc-lang/tyv.orth | 204 +- fontconfig/fc-lang/ug.orth | 100 +- fontconfig/fc-lang/uk.orth | 86 +- fontconfig/fc-lang/ur.orth | 130 +- fontconfig/fc-lang/ve.orth | 68 +- fontconfig/fc-lang/vi.orth | 116 +- fontconfig/fc-lang/vo.orth | 72 +- fontconfig/fc-lang/vot.orth | 80 +- fontconfig/fc-lang/wa.orth | 94 +- fontconfig/fc-lang/wen.orth | 84 +- fontconfig/fc-lang/wo.orth | 84 +- fontconfig/fc-lang/xh.orth | 58 +- fontconfig/fc-lang/yap.orth | 70 +- fontconfig/fc-lang/yi.orth | 50 +- fontconfig/fc-lang/yo.orth | 172 +- fontconfig/fc-lang/zh_cn.orth | 13584 +++++++------- fontconfig/fc-lang/zh_hk.orth | 4480 ++--- fontconfig/fc-lang/zh_mo.orth | 64 +- fontconfig/fc-lang/zh_sg.orth | 54 +- fontconfig/fc-lang/zh_tw.orth | 26210 +++++++++++++-------------- fontconfig/fc-lang/zu.orth | 58 +- fontconfig/fc-list/Makefile.am | 118 +- fontconfig/fc-list/fc-list.c | 400 +- fontconfig/fc-list/fc-list.sgml | 430 +- fontconfig/fc-match/Makefile.am | 118 +- fontconfig/fc-match/fc-match.c | 486 +- fontconfig/fc-match/fc-match.sgml | 434 +- fontconfig/fc-query/Makefile.am | 118 +- fontconfig/fc-query/fc-query.c | 382 +- fontconfig/fc-query/fc-query.sgml | 384 +- fontconfig/fc-scan/Makefile.am | 118 +- fontconfig/fc-scan/fc-scan.c | 368 +- fontconfig/fc-scan/fc-scan.sgml | 354 +- fontconfig/fontconfig.pc.in | 32 +- fontconfig/fontconfig/fcfreetype.h | 118 +- fontconfig/fontconfig/fcprivate.h | 246 +- fontconfig/fontconfig/fontconfig.h | 1948 +- fontconfig/fonts.dtd | 450 +- fontconfig/src/Makefile.am | 334 +- fontconfig/src/fcatomic.c | 434 +- fontconfig/src/fcblanks.c | 190 +- fontconfig/src/fccache.c | 2546 +-- fontconfig/src/fccfg.c | 4216 ++--- fontconfig/src/fccharset.c | 2878 +-- fontconfig/src/fcdbg.c | 812 +- fontconfig/src/fcdefault.c | 362 +- fontconfig/src/fcdir.c | 650 +- fontconfig/src/fcformat.c | 2428 +-- fontconfig/src/fcfreetype.c | 6010 +++--- fontconfig/src/fcfs.c | 270 +- fontconfig/src/fcftint.h | 108 +- fontconfig/src/fcinit.c | 578 +- fontconfig/src/fcint.h | 2078 +-- fontconfig/src/fclang.c | 1772 +- fontconfig/src/fclist.c | 1154 +- fontconfig/src/fcmatch.c | 1680 +- fontconfig/src/fcmatrix.c | 240 +- fontconfig/src/fcname.c | 1804 +- fontconfig/src/fcpat.c | 2534 +-- fontconfig/src/fcstr.c | 2396 +-- fontconfig/src/fcxml.c | 5614 +++--- fontconfig/src/ftglue.c | 522 +- 268 files changed, 74151 insertions(+), 74151 deletions(-) (limited to 'fontconfig') diff --git a/fontconfig/COPYING b/fontconfig/COPYING index 7f52aa710..2a5d777ff 100644 --- a/fontconfig/COPYING +++ b/fontconfig/COPYING @@ -1,27 +1,27 @@ -fontconfig/COPYING - -Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard -Copyright © 2005 Patrick Lam -Copyright © 2009 Roozbeh Pournader -Copyright © 2008,2009 Red Hat, Inc. -Copyright © 2008 Danilo Šegan - - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of the author(s) not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. The authors make no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - +fontconfig/COPYING + +Copyright © 2000,2001,2002,2003,2004,2006,2007 Keith Packard +Copyright © 2005 Patrick Lam +Copyright © 2009 Roozbeh Pournader +Copyright © 2008,2009 Red Hat, Inc. +Copyright © 2008 Danilo Šegan + + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of the author(s) not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. The authors make no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + diff --git a/fontconfig/INSTALL b/fontconfig/INSTALL index 29537df99..754a32b93 100644 --- a/fontconfig/INSTALL +++ b/fontconfig/INSTALL @@ -1,42 +1,42 @@ -Fontconfig is built with the traditional configure script: - - $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man - -If you checked out from the git repository (as opposed to downloading a -tarball), you need to run autogen.sh instead of configure: - - $ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man - -Either way, that should generate valid Makefiles, then: - - $ make - $ make install - -If you're going to package fontconfig for release, there are several -important steps: - - 1. Create new version - sh new-version.sh 2.xx.xx - - 2. rebuild the configuration files with autogen.sh - ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var - - 3. make distcheck - - 4. Copy ChangeLog-2.x.y and fontconfig-2.x.y.tar.gz to - - freedesktop.org:/srv/fontconfig.freedesktop.org/www/release - - 5. Update the Fontconfig Devel wiki page - http://fontconfig.org/wiki/Devel - - 6. Update the fontconfig documentation - - scp -rp doc/fontconfig-user.html doc/fontconfig-devel fontconfig.org:/srv/fontconfig.freedesktop.org/www - - 7. Compute md5sums for release files: - md5sum fontconfig-2.4.x.tar.gz ChangeLog-2.4.x - - 8. Post a note to fontconfig@fontconfig.org. Include the md5sums. - gpg sign the message. - +Fontconfig is built with the traditional configure script: + + $ ./configure --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man + +If you checked out from the git repository (as opposed to downloading a +tarball), you need to run autogen.sh instead of configure: + + $ ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man + +Either way, that should generate valid Makefiles, then: + + $ make + $ make install + +If you're going to package fontconfig for release, there are several +important steps: + + 1. Create new version + sh new-version.sh 2.xx.xx + + 2. rebuild the configuration files with autogen.sh + ./autogen.sh --sysconfdir=/etc --prefix=/usr --mandir=/usr/share/man --localstatedir=/var + + 3. make distcheck + + 4. Copy ChangeLog-2.x.y and fontconfig-2.x.y.tar.gz to + + freedesktop.org:/srv/fontconfig.freedesktop.org/www/release + + 5. Update the Fontconfig Devel wiki page + http://fontconfig.org/wiki/Devel + + 6. Update the fontconfig documentation + + scp -rp doc/fontconfig-user.html doc/fontconfig-devel fontconfig.org:/srv/fontconfig.freedesktop.org/www + + 7. Compute md5sums for release files: + md5sum fontconfig-2.4.x.tar.gz ChangeLog-2.4.x + + 8. Post a note to fontconfig@fontconfig.org. Include the md5sums. + gpg sign the message. + diff --git a/fontconfig/Makefile.am b/fontconfig/Makefile.am index c14211a4e..7931717a2 100644 --- a/fontconfig/Makefile.am +++ b/fontconfig/Makefile.am @@ -1,142 +1,142 @@ -# -# fontconfig/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -DOCSRC=@DOCSRC@ -SUBDIRS=fontconfig fc-case fc-lang fc-glyphname src \ - fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan \ - conf.d $(DOCSRC) test - -EXTRA_DIST = \ - fontconfig.pc.in \ - fonts.conf.in \ - fonts.dtd \ - fontconfig.spec.in \ - fontconfig.spec \ - fontconfig-zip.in -CLEANFILES = fonts.conf -DISTCLEANFILES = config.cache doltcompile -MAINTAINERCLEANFILES = \ - $(srcdir)/aclocal.m4 \ - $(srcdir)/autoscan.log \ - $(srcdir)/compile \ - $(srcdir)/config.guess \ - $(srcdir)/config.h.in \ - $(srcdir)/config.sub \ - $(srcdir)/configure.scan \ - $(srcdir)/depcomp \ - $(srcdir)/install-sh \ - $(srcdir)/ltmain.sh \ - $(srcdir)/missing \ - $(srcdir)/mkinstalldirs \ - `find "$(srcdir)" -type f -name Makefile.in -print` - -pkgconfigdir=$(libdir)/pkgconfig -pkgconfig_DATA = fontconfig.pc - -configdir=$(CONFDIR) -config_DATA=fonts.dtd - -if CROSS_COMPILING - RUN_FC_CACHE_TEST=false -else - RUN_FC_CACHE_TEST=test -z "$(DESTDIR)" -endif - -# Creating ChangeLog from git log: - -MAINTAINERCLEANFILES += $(srcdir)/ChangeLog -EXTRA_DIST += ChangeLog -ChangeLog: $(srcdir)/ChangeLog -$(srcdir)/ChangeLog: - if test -d "$(srcdir)/.git"; then \ - (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \ - && mv -f $@.tmp $@ \ - || ($(RM) $@.tmp; \ - echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ - (test -f $@ || echo git-log is required to generate this file >> $@)); \ - else \ - test -f $@ || \ - (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ - echo A git checkout and git-log is required to generate this file >> $@); \ - fi - -.PHONY: ChangeLog - -fonts.conf: fonts.conf.in Makefile - sed \ - -e 's,@FC_CACHEDIR\@,$(FC_CACHEDIR),g' \ - -e 's,@FC_DEFAULT_FONTS\@,$(FC_DEFAULT_FONTS),g' \ - -e 's,@FC_FONTPATH\@,$(FC_FONTPATH),g' \ - -e 's,@PACKAGE\@,$(PACKAGE),g' \ - -e 's,@VERSION\@,$(VERSION),g' \ - $< > $@.tmp && \ - mv $@.tmp $@ - -install-data-local: fonts.conf - $(mkinstalldirs) $(DESTDIR)$(configdir) $(DESTDIR)$(fc_cachedir) - if [ -f $(DESTDIR)$(configdir)/fonts.conf ]; then \ - echo "backing up existing $(DESTDIR)$(configdir)/fonts.conf"; \ - mv $(DESTDIR)$(configdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf.bak; \ - fi - if [ -f $(srcdir)/fonts.conf ]; then \ - echo " $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \ - $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \ - else if [ -f fonts.conf ]; then \ - echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \ - $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \ - fi; fi - @(if $(RUN_FC_CACHE_TEST); then \ - echo "fc-cache$(EXEEXT) -s -f -v"; \ - fc-cache/fc-cache$(EXEEXT) -s -f -v; \ - else \ - echo "***"; \ - echo "*** Warning: fonts.cache not built"; \ - echo "***"; \ - echo "*** Generate this file manually on host system using fc-cache"; \ - echo "***"; \ - fi) - -uninstall-local: - if [ -f $(srcdir)/fonts.conf ]; then \ - if cmp -s $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \ - echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \ - rm -f $(DESTDIR)$(configdir)/fonts.conf; \ - fi; \ - else if [ -f fonts.conf ]; then \ - if cmp -s fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \ - echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \ - rm -f $(DESTDIR)$(configdir)/fonts.conf; \ - fi; \ - fi; fi - -debuild debuild-signed: debuild-dirs - (cd $(distdir)/debian && debuild) - -debuild-unsigned: debuild-dirs - (cd $(distdir)/debian && debuild -us -uc) - -debuild-dirs: distdir - rm -f $(PACKAGE)_$(VERSION).orig.tar.gz - rm -rf $(distdir).orig - cp -a $(distdir) $(distdir).orig - rm -rf $(distdir).orig/debian +# +# fontconfig/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOCSRC=@DOCSRC@ +SUBDIRS=fontconfig fc-case fc-lang fc-glyphname src \ + fc-cache fc-cat fc-list fc-match fc-pattern fc-query fc-scan \ + conf.d $(DOCSRC) test + +EXTRA_DIST = \ + fontconfig.pc.in \ + fonts.conf.in \ + fonts.dtd \ + fontconfig.spec.in \ + fontconfig.spec \ + fontconfig-zip.in +CLEANFILES = fonts.conf +DISTCLEANFILES = config.cache doltcompile +MAINTAINERCLEANFILES = \ + $(srcdir)/aclocal.m4 \ + $(srcdir)/autoscan.log \ + $(srcdir)/compile \ + $(srcdir)/config.guess \ + $(srcdir)/config.h.in \ + $(srcdir)/config.sub \ + $(srcdir)/configure.scan \ + $(srcdir)/depcomp \ + $(srcdir)/install-sh \ + $(srcdir)/ltmain.sh \ + $(srcdir)/missing \ + $(srcdir)/mkinstalldirs \ + `find "$(srcdir)" -type f -name Makefile.in -print` + +pkgconfigdir=$(libdir)/pkgconfig +pkgconfig_DATA = fontconfig.pc + +configdir=$(CONFDIR) +config_DATA=fonts.dtd + +if CROSS_COMPILING + RUN_FC_CACHE_TEST=false +else + RUN_FC_CACHE_TEST=test -z "$(DESTDIR)" +endif + +# Creating ChangeLog from git log: + +MAINTAINERCLEANFILES += $(srcdir)/ChangeLog +EXTRA_DIST += ChangeLog +ChangeLog: $(srcdir)/ChangeLog +$(srcdir)/ChangeLog: + if test -d "$(srcdir)/.git"; then \ + (GIT_DIR=$(top_srcdir)/.git ./missing --run git log --stat) | fmt --split-only > $@.tmp \ + && mv -f $@.tmp $@ \ + || ($(RM) $@.tmp; \ + echo Failed to generate ChangeLog, your ChangeLog may be outdated >&2; \ + (test -f $@ || echo git-log is required to generate this file >> $@)); \ + else \ + test -f $@ || \ + (echo A git checkout and git-log is required to generate ChangeLog >&2 && \ + echo A git checkout and git-log is required to generate this file >> $@); \ + fi + +.PHONY: ChangeLog + +fonts.conf: fonts.conf.in Makefile + sed \ + -e 's,@FC_CACHEDIR\@,$(FC_CACHEDIR),g' \ + -e 's,@FC_DEFAULT_FONTS\@,$(FC_DEFAULT_FONTS),g' \ + -e 's,@FC_FONTPATH\@,$(FC_FONTPATH),g' \ + -e 's,@PACKAGE\@,$(PACKAGE),g' \ + -e 's,@VERSION\@,$(VERSION),g' \ + $< > $@.tmp && \ + mv $@.tmp $@ + +install-data-local: fonts.conf + $(mkinstalldirs) $(DESTDIR)$(configdir) $(DESTDIR)$(fc_cachedir) + if [ -f $(DESTDIR)$(configdir)/fonts.conf ]; then \ + echo "backing up existing $(DESTDIR)$(configdir)/fonts.conf"; \ + mv $(DESTDIR)$(configdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf.bak; \ + fi + if [ -f $(srcdir)/fonts.conf ]; then \ + echo " $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \ + $(INSTALL_DATA) $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \ + else if [ -f fonts.conf ]; then \ + echo " $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf"; \ + $(INSTALL_DATA) fonts.conf $(DESTDIR)$(configdir)/fonts.conf; \ + fi; fi + @(if $(RUN_FC_CACHE_TEST); then \ + echo "fc-cache$(EXEEXT) -s -f -v"; \ + fc-cache/fc-cache$(EXEEXT) -s -f -v; \ + else \ + echo "***"; \ + echo "*** Warning: fonts.cache not built"; \ + echo "***"; \ + echo "*** Generate this file manually on host system using fc-cache"; \ + echo "***"; \ + fi) + +uninstall-local: + if [ -f $(srcdir)/fonts.conf ]; then \ + if cmp -s $(srcdir)/fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \ + echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \ + rm -f $(DESTDIR)$(configdir)/fonts.conf; \ + fi; \ + else if [ -f fonts.conf ]; then \ + if cmp -s fonts.conf $(DESTDIR)$(configdir)/fonts.conf; then \ + echo " uninstall standard $(DESTDIR)$(configdir)/fonts.conf"; \ + rm -f $(DESTDIR)$(configdir)/fonts.conf; \ + fi; \ + fi; fi + +debuild debuild-signed: debuild-dirs + (cd $(distdir)/debian && debuild) + +debuild-unsigned: debuild-dirs + (cd $(distdir)/debian && debuild -us -uc) + +debuild-dirs: distdir + rm -f $(PACKAGE)_$(VERSION).orig.tar.gz + rm -rf $(distdir).orig + cp -a $(distdir) $(distdir).orig + rm -rf $(distdir).orig/debian diff --git a/fontconfig/autogen.sh b/fontconfig/autogen.sh index f9927fd29..df4cd4142 100644 --- a/fontconfig/autogen.sh +++ b/fontconfig/autogen.sh @@ -1,123 +1,123 @@ -#!/bin/sh -# Run this to generate all the initial makefiles, etc. - -set -e - -srcdir=`dirname $0` -test -z "$srcdir" && srcdir=. - -case "$1" in ---noconf*) - AUTOGEN_SUBDIR_MODE="true" - shift - ;; -esac - -ORIGDIR=`pwd` -cd $srcdir -PROJECT=Fontconfig -TEST_TYPE=-f -FILE=fontconfig/fontconfig.h -ACLOCAL=${ACLOCAL-aclocal} -LIBTOOLIZE=${LIBTOOLIZE-libtoolize} -AUTOMAKE=${AUTOMAKE-automake} -AUTOHEADER=${AUTOHEADER-autoheader} -AUTOCONF=${AUTOCONF-autoconf} -LIBTOOLIZE_FLAGS="--copy --force" - -DIE=0 - -have_libtool=false -if $LIBTOOLIZE --version < /dev/null > /dev/null 2>&1 ; then - libtool_version=`$LIBTOOLIZE --version | sed 's/^.* \([0-9][.][0-9.]*\)[^ ]*$/\1/'` - case $libtool_version in - 1.4*|1.5*|1.6*|1.7*|2*) - have_libtool=true - ;; - esac -fi -if $have_libtool ; then : ; else - echo - echo "You must have libtool 1.4 installed to compile $PROJECT." - echo "Install the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -fi - -($AUTOCONF --version) < /dev/null > /dev/null 2>&1 || { - echo - echo "You must have autoconf installed to compile $PROJECT." - echo "libtool the appropriate package for your distribution," - echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" - DIE=1 -} - -have_automake=false -need_libtoolize=true -if $AUTOMAKE --version < /dev/null > /dev/null 2>&1 ; then - automake_version=`$AUTOMAKE --version | grep 'automake (GNU automake)' | sed 's/^[^0-9]*\(.*\)/\1/'` - case $automake_version in - 1.2*|1.3*|1.4) - ;; - 1.4*) - have_automake=true - need_libtoolize=false - ;; - *) - have_automake=true - ;; - esac -fi -if $have_automake ; then : ; else - echo - echo "You must have automake 1.4-p1 installed to compile $PROJECT." - echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.4-p1.tar.gz" - echo "(or a newer version if it is available)" - DIE=1 -fi - -if test "$DIE" -eq 1; then - exit 1 -fi - -test $TEST_TYPE $FILE || { - echo "You must run this script in the top-level $PROJECT directory" - exit 1 -} - -if test -z "$AUTOGEN_SUBDIR_MODE"; then - if test -z "$*"; then - echo "I am going to run ./configure with no arguments - if you wish " - echo "to pass any to it, please specify them on the $0 command line." - fi -fi - -echo Running $ACLOCAL $ACLOCAL_FLAGS -$ACLOCAL $ACLOCAL_FLAGS - -# optionally run autoheader -if $AUTOHEADER --version < /dev/null > /dev/null 2>&1; then - echo Running $AUTOHEADER - $AUTOHEADER -fi - -case $need_libtoolize in - true) - echo Running $LIBTOOLIZE $LIBTOOLIZE_FLAGS - $LIBTOOLIZE $LIBTOOLIZE_FLAGS - ;; -esac - -echo Running $AUTOMAKE -a $am_opt -$AUTOMAKE -a $am_opt -echo Running $AUTOCONF -$AUTOCONF -cd $ORIGDIR - -if test -z "$AUTOGEN_SUBDIR_MODE"; then - echo Running $srcdir/configure "$@" - $srcdir/configure "$@" - - echo - echo "Now type 'make' to compile $PROJECT." -fi +#!/bin/sh +# Run this to generate all the initial makefiles, etc. + +set -e + +srcdir=`dirname $0` +test -z "$srcdir" && srcdir=. + +case "$1" in +--noconf*) + AUTOGEN_SUBDIR_MODE="true" + shift + ;; +esac + +ORIGDIR=`pwd` +cd $srcdir +PROJECT=Fontconfig +TEST_TYPE=-f +FILE=fontconfig/fontconfig.h +ACLOCAL=${ACLOCAL-aclocal} +LIBTOOLIZE=${LIBTOOLIZE-libtoolize} +AUTOMAKE=${AUTOMAKE-automake} +AUTOHEADER=${AUTOHEADER-autoheader} +AUTOCONF=${AUTOCONF-autoconf} +LIBTOOLIZE_FLAGS="--copy --force" + +DIE=0 + +have_libtool=false +if $LIBTOOLIZE --version < /dev/null > /dev/null 2>&1 ; then + libtool_version=`$LIBTOOLIZE --version | sed 's/^.* \([0-9][.][0-9.]*\)[^ ]*$/\1/'` + case $libtool_version in + 1.4*|1.5*|1.6*|1.7*|2*) + have_libtool=true + ;; + esac +fi +if $have_libtool ; then : ; else + echo + echo "You must have libtool 1.4 installed to compile $PROJECT." + echo "Install the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +fi + +($AUTOCONF --version) < /dev/null > /dev/null 2>&1 || { + echo + echo "You must have autoconf installed to compile $PROJECT." + echo "libtool the appropriate package for your distribution," + echo "or get the source tarball at ftp://ftp.gnu.org/pub/gnu/" + DIE=1 +} + +have_automake=false +need_libtoolize=true +if $AUTOMAKE --version < /dev/null > /dev/null 2>&1 ; then + automake_version=`$AUTOMAKE --version | grep 'automake (GNU automake)' | sed 's/^[^0-9]*\(.*\)/\1/'` + case $automake_version in + 1.2*|1.3*|1.4) + ;; + 1.4*) + have_automake=true + need_libtoolize=false + ;; + *) + have_automake=true + ;; + esac +fi +if $have_automake ; then : ; else + echo + echo "You must have automake 1.4-p1 installed to compile $PROJECT." + echo "Get ftp://ftp.gnu.org/pub/gnu/automake/automake-1.4-p1.tar.gz" + echo "(or a newer version if it is available)" + DIE=1 +fi + +if test "$DIE" -eq 1; then + exit 1 +fi + +test $TEST_TYPE $FILE || { + echo "You must run this script in the top-level $PROJECT directory" + exit 1 +} + +if test -z "$AUTOGEN_SUBDIR_MODE"; then + if test -z "$*"; then + echo "I am going to run ./configure with no arguments - if you wish " + echo "to pass any to it, please specify them on the $0 command line." + fi +fi + +echo Running $ACLOCAL $ACLOCAL_FLAGS +$ACLOCAL $ACLOCAL_FLAGS + +# optionally run autoheader +if $AUTOHEADER --version < /dev/null > /dev/null 2>&1; then + echo Running $AUTOHEADER + $AUTOHEADER +fi + +case $need_libtoolize in + true) + echo Running $LIBTOOLIZE $LIBTOOLIZE_FLAGS + $LIBTOOLIZE $LIBTOOLIZE_FLAGS + ;; +esac + +echo Running $AUTOMAKE -a $am_opt +$AUTOMAKE -a $am_opt +echo Running $AUTOCONF +$AUTOCONF +cd $ORIGDIR + +if test -z "$AUTOGEN_SUBDIR_MODE"; then + echo Running $srcdir/configure "$@" + $srcdir/configure "$@" + + echo + echo "Now type 'make' to compile $PROJECT." +fi diff --git a/fontconfig/conf.d/Makefile.am b/fontconfig/conf.d/Makefile.am index c8ef98962..3f5255fad 100644 --- a/fontconfig/conf.d/Makefile.am +++ b/fontconfig/conf.d/Makefile.am @@ -1,96 +1,96 @@ -# -# fontconfig/conf.d/Makefile.am -# -# Copyright © 2005 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -DOC_FILES= \ - README - -CONF_FILES = \ - 10-autohint.conf \ - 10-no-sub-pixel.conf \ - 10-sub-pixel-bgr.conf \ - 10-sub-pixel-rgb.conf \ - 10-sub-pixel-vbgr.conf \ - 10-sub-pixel-vrgb.conf \ - 10-unhinted.conf \ - 20-fix-globaladvance.conf \ - 20-unhint-small-vera.conf \ - 25-unhint-nonlatin.conf \ - 30-urw-aliases.conf \ - 30-metric-aliases.conf \ - 40-nonlatin.conf \ - 45-latin.conf \ - 49-sansserif.conf \ - 50-user.conf \ - 51-local.conf \ - 60-latin.conf \ - 65-fonts-persian.conf \ - 65-khmer.conf \ - 65-nonlatin.conf \ - 69-unifont.conf \ - 70-no-bitmaps.conf \ - 70-yes-bitmaps.conf \ - 80-delicious.conf \ - 90-synthetic.conf - -CONF_LINKS = \ - 20-fix-globaladvance.conf \ - 20-unhint-small-vera.conf \ - 30-urw-aliases.conf \ - 30-metric-aliases.conf \ - 40-nonlatin.conf \ - 45-latin.conf \ - 49-sansserif.conf \ - 50-user.conf \ - 51-local.conf \ - 60-latin.conf \ - 65-fonts-persian.conf \ - 65-nonlatin.conf \ - 69-unifont.conf \ - 80-delicious.conf \ - 90-synthetic.conf - -EXTRA_DIST = $(CONF_FILES) $(DOC_FILES) - -configdir=$(CONFDIR) -confavaildir=$(configdir)/conf.avail -confddir=$(configdir)/conf.d - -confavail_DATA=$(CONF_FILES) -confd_DATA=$(DOC_FILES) - -install-data-local: - mkdir -p ${DESTDIR}${confddir} - @(echo cd ${DESTDIR}${confddir}; \ - cd ${DESTDIR}${confddir}; \ - for i in ${CONF_LINKS}; do \ - rm -f $$i; \ - echo rm -f $$i";" ln -s ../conf.avail/$$i .; \ - ln -s ../conf.avail/$$i .; \ - done) -uninstall-local: - @(echo cd ${DESTDIR}${confddir}; \ - cd ${DESTDIR}${confddir}; \ - for i in ${CONF_LINKS}; do \ - echo rm -f $$i; \ - rm -f $$i; \ - done) +# +# fontconfig/conf.d/Makefile.am +# +# Copyright © 2005 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC_FILES= \ + README + +CONF_FILES = \ + 10-autohint.conf \ + 10-no-sub-pixel.conf \ + 10-sub-pixel-bgr.conf \ + 10-sub-pixel-rgb.conf \ + 10-sub-pixel-vbgr.conf \ + 10-sub-pixel-vrgb.conf \ + 10-unhinted.conf \ + 20-fix-globaladvance.conf \ + 20-unhint-small-vera.conf \ + 25-unhint-nonlatin.conf \ + 30-urw-aliases.conf \ + 30-metric-aliases.conf \ + 40-nonlatin.conf \ + 45-latin.conf \ + 49-sansserif.conf \ + 50-user.conf \ + 51-local.conf \ + 60-latin.conf \ + 65-fonts-persian.conf \ + 65-khmer.conf \ + 65-nonlatin.conf \ + 69-unifont.conf \ + 70-no-bitmaps.conf \ + 70-yes-bitmaps.conf \ + 80-delicious.conf \ + 90-synthetic.conf + +CONF_LINKS = \ + 20-fix-globaladvance.conf \ + 20-unhint-small-vera.conf \ + 30-urw-aliases.conf \ + 30-metric-aliases.conf \ + 40-nonlatin.conf \ + 45-latin.conf \ + 49-sansserif.conf \ + 50-user.conf \ + 51-local.conf \ + 60-latin.conf \ + 65-fonts-persian.conf \ + 65-nonlatin.conf \ + 69-unifont.conf \ + 80-delicious.conf \ + 90-synthetic.conf + +EXTRA_DIST = $(CONF_FILES) $(DOC_FILES) + +configdir=$(CONFDIR) +confavaildir=$(configdir)/conf.avail +confddir=$(configdir)/conf.d + +confavail_DATA=$(CONF_FILES) +confd_DATA=$(DOC_FILES) + +install-data-local: + mkdir -p ${DESTDIR}${confddir} + @(echo cd ${DESTDIR}${confddir}; \ + cd ${DESTDIR}${confddir}; \ + for i in ${CONF_LINKS}; do \ + rm -f $$i; \ + echo rm -f $$i";" ln -s ../conf.avail/$$i .; \ + ln -s ../conf.avail/$$i .; \ + done) +uninstall-local: + @(echo cd ${DESTDIR}${confddir}; \ + cd ${DESTDIR}${confddir}; \ + for i in ${CONF_LINKS}; do \ + echo rm -f $$i; \ + rm -f $$i; \ + done) diff --git a/fontconfig/config/Makedefs.in b/fontconfig/config/Makedefs.in index 8cfb9e785..ae75aff49 100644 --- a/fontconfig/config/Makedefs.in +++ b/fontconfig/config/Makedefs.in @@ -1,76 +1,76 @@ -# -# fontconfig/config/Makedefs.in -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# - -SHELL = @SHELL@ - -srcdir=@srcdir@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -bindir=@bindir@ -datadir=@datadir@ -includedir=@includedir@ -sysconfdir=@sysconfdir@ -confdir=@confdir@ - -DSO_LDOPTS=@DSO_LDOPTS@ -DSO_CFLAGS=@DSO_CFLAGS@ -DSO_PIC_CFLAGS=@DSO_PIC_CFLAGS@ - -INSTALL=@INSTALL@ -INSTALL_PROGRAM=@INSTALL_PROGRAM@ -INSTALL_SCRIPT=@INSTALL_SCRIPT@ -INSTALL_DATA=@INSTALL_DATA@ -MKSHLIB=@MKSHLIB@ -LN_S=@LN_S@ - -# shared libraries -LIBDIR=$(libdir) -# programs -BINDIR=$(bindir) -# font configuration files -CONFDIR=@CONFDIR@ -# include files -INCLUDEDIR=$(includedir)/fontconfig - -X_FONT_DIR=@X_FONT_DIR@ -FC_DEFAULT_FONTS=@FC_DEFAULT_FONTS@ -FCPATH_DEF=-DFONTCONFIG_PATH=\"$(CONFDIR)\" - -CDEBUGFLAGS=@CFLAGS@ - -INCLUDES=-I$(TOPDIR) -I$(srcdir) @CPPFLAGS@ - -CFLAGS=$(CDEBUGFLAGS) @DEFS@ $(FCPATH_DEF) $(INCLUDES) - -LIBBASE=libfontconfig.so -LIBFILE=$(LIBBASE).@PACKAGE_MAJOR@.@PACKAGE_MINOR@ -LIBMAJOR=$(LIBBASE).@PACKAGE_MAJOR@ - -LIBFONTCONFIG=-L$(SRCDIR) -lfontconfig - -SRCDIR=$(TOPDIR)/src - -INCDIR=$(TOPDIR)/fontconfig -HEADERS=$(INCDIR)/fontconfig.h $(INCDIR)/fcfreetype.h $(INCDIR)/fcprivate.h +# +# fontconfig/config/Makedefs.in +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# + +SHELL = @SHELL@ + +srcdir=@srcdir@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +bindir=@bindir@ +datadir=@datadir@ +includedir=@includedir@ +sysconfdir=@sysconfdir@ +confdir=@confdir@ + +DSO_LDOPTS=@DSO_LDOPTS@ +DSO_CFLAGS=@DSO_CFLAGS@ +DSO_PIC_CFLAGS=@DSO_PIC_CFLAGS@ + +INSTALL=@INSTALL@ +INSTALL_PROGRAM=@INSTALL_PROGRAM@ +INSTALL_SCRIPT=@INSTALL_SCRIPT@ +INSTALL_DATA=@INSTALL_DATA@ +MKSHLIB=@MKSHLIB@ +LN_S=@LN_S@ + +# shared libraries +LIBDIR=$(libdir) +# programs +BINDIR=$(bindir) +# font configuration files +CONFDIR=@CONFDIR@ +# include files +INCLUDEDIR=$(includedir)/fontconfig + +X_FONT_DIR=@X_FONT_DIR@ +FC_DEFAULT_FONTS=@FC_DEFAULT_FONTS@ +FCPATH_DEF=-DFONTCONFIG_PATH=\"$(CONFDIR)\" + +CDEBUGFLAGS=@CFLAGS@ + +INCLUDES=-I$(TOPDIR) -I$(srcdir) @CPPFLAGS@ + +CFLAGS=$(CDEBUGFLAGS) @DEFS@ $(FCPATH_DEF) $(INCLUDES) + +LIBBASE=libfontconfig.so +LIBFILE=$(LIBBASE).@PACKAGE_MAJOR@.@PACKAGE_MINOR@ +LIBMAJOR=$(LIBBASE).@PACKAGE_MAJOR@ + +LIBFONTCONFIG=-L$(SRCDIR) -lfontconfig + +SRCDIR=$(TOPDIR)/src + +INCDIR=$(TOPDIR)/fontconfig +HEADERS=$(INCDIR)/fontconfig.h $(INCDIR)/fcfreetype.h $(INCDIR)/fcprivate.h diff --git a/fontconfig/configure.in b/fontconfig/configure.in index 04da27299..9f671abe7 100644 --- a/fontconfig/configure.in +++ b/fontconfig/configure.in @@ -1,513 +1,513 @@ -dnl -dnl fontconfig/configure.in -dnl -dnl Copyright © 2003 Keith Packard -dnl -dnl Permission to use, copy, modify, distribute, and sell this software and its -dnl documentation for any purpose is hereby granted without fee, provided that -dnl the above copyright notice appear in all copies and that both that -dnl copyright notice and this permission notice appear in supporting -dnl documentation, and that the name of the author(s) not be used in -dnl advertising or publicity pertaining to distribution of the software without -dnl specific, written prior permission. The authors make no -dnl representations about the suitability of this software for any purpose. It -dnl is provided "as is" without express or implied warranty. -dnl -dnl THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -dnl EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -dnl PERFORMANCE OF THIS SOFTWARE. -dnl -dnl Process this file with autoconf to create configure. - -AC_INIT(fonts.dtd) - -dnl ========================================================================== -dnl Versioning -dnl ========================================================================== - -dnl This is the package version number, not the shared library -dnl version. This same version number must appear in fontconfig/fontconfig.h -dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's -dnl not possible to extract the version number here from fontconfig.h -AM_INIT_AUTOMAKE(fontconfig, 2.8.90) -m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) - -dnl libtool versioning - -dnl bump revision when fixing bugs -dnl bump current and age, reset revision to zero when adding APIs -dnl bump current, leave age, reset revision to zero when changing/removing APIS -LIBT_CURRENT=5 -LIBT_REVISION=4 -AC_SUBST(LIBT_CURRENT) -AC_SUBST(LIBT_REVISION) -LIBT_AGE=4 - -LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE" -AC_SUBST(LIBT_VERSION_INFO) - -LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE` -AC_SUBST(LIBT_CURRENT_MINUS_AGE) - -dnl ========================================================================== - -AC_CONFIG_HEADERS(config.h) - -AC_PROG_CC -AC_PROG_INSTALL -AC_PROG_LN_S -AC_LIBTOOL_WIN32_DLL -AM_PROG_LIBTOOL -AC_PROG_MAKE_SET - -dnl ========================================================================== - -case "$host" in - *-*-mingw*) - os_win32=yes - ;; - *) - os_win32=no -esac -AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") - -if test "$os_win32" = "yes"; then - AC_CHECK_PROG(ms_librarian, lib.exe, yes, no) -fi -AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes) - -WARN_CFLAGS="" -if test "x$GCC" = "xyes"; then - WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \ - -Wmissing-prototypes -Wmissing-declarations \ - -Wnested-externs -fno-strict-aliasing" - AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1, - [Can use #warning in C files]) -fi -AC_SUBST(WARN_CFLAGS) - - -dnl ========================================================================== - -AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes) - -dnl ========================================================================== - -AC_ARG_WITH(arch, [ --with-arch=ARCH Force architecture to ARCH], arch="$withval", arch=auto) - -if test "x$arch" != xauto; then - AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names]) -fi - - -dnl ========================================================================== - -# Checks for header files. -AC_HEADER_DIRENT -AC_HEADER_STDC -AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h]) - -# Checks for typedefs, structures, and compiler characteristics. -AC_C_CONST -AC_C_INLINE -AC_TYPE_PID_T - -# Checks for library functions. -AC_FUNC_VPRINTF -AC_FUNC_MMAP -AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48]) - -# -# Checks for iconv -# -AC_MSG_CHECKING([for a usable iconv]) -ICONV_LIBS="" -AC_TRY_LINK([#include ], - [iconv_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_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 -#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/^//' -e 's/$/<\/dir>/' -e 's/,/<\/dir> /g'` - ;; -esac - -AC_SUBST(FC_FONTPATH) - -# -# Set default cache directory path -# -AC_ARG_WITH(cache-dir, [ --with-cache-dir=DIR Use DIR to store cache files (default LOCALSTATEDIR/cache/fontconfig)], fc_cachedir="$withval", fc_cachedir=yes) - -case $fc_cachedir in -no|yes) - if test "$os_win32" = "yes"; then - fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE" - else - fc_cachedir='${localstatedir}/cache/${PACKAGE}' - fi - ;; -*) - ;; -esac -AC_SUBST(fc_cachedir) -FC_CACHEDIR=${fc_cachedir} -AC_SUBST(FC_CACHEDIR) - -FC_FONTDATE=`LC_ALL=C date` - -AC_SUBST(FC_FONTDATE) - -AC_ARG_WITH(confdir, [ --with-confdir=DIR Use DIR to store configuration files (default SYSCONFDIR/fonts)], confdir="$withval", confdir=yes) - -# -# Set CONFDIR and FONTCONFIG_PATH -# - -case "$confdir" in -no|yes) - confdir='${sysconfdir}'/fonts - ;; -*) - ;; -esac -AC_SUBST(confdir) -CONFDIR=${confdir} -AC_DEFINE_UNQUOTED(CONFDIR, "$CONFDIR",[Font configuration directory]) -AC_SUBST(CONFDIR) - -# -# Let people not build/install docs if they don't have docbook -# - -AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no) - -AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes) - -default_docs="yes" -# -# Check if docs exist or can be created -# -if test x$HASDOCBOOK = xno; then - if test -f $srcdir/doc/fonts-conf.5; then - : - else - default_docs="no" - fi -fi - -AC_ARG_ENABLE(docs, [ --disable-docs Don't build and install documentation],,enable_docs=$default_docs) - -AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes) - -if test "x$enable_docs" = xyes; then - DOCSRC="doc" - tmp=funcs.$$ - cat $srcdir/doc/*.fncs | awk ' - /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } } - /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } } - /^@@/ { done = 0; }' > $tmp - DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'` - echo DOCMAN3 $DOCMAN3 - rm -f $tmp -else - DOCSRC="" - DOCMAN3="" -fi - -AC_SUBST(DOCSRC) -AC_SUBST(DOCMAN3) - - -dnl Figure out what cache format suffix to use for this architecture -AC_C_BIGENDIAN -AC_CHECK_SIZEOF([void *]) -AC_CHECK_ALIGNOF([double]) - - - -AC_OUTPUT([ -Makefile -fontconfig/Makefile -fc-lang/Makefile -fc-glyphname/Makefile -fc-case/Makefile -src/Makefile -conf.d/Makefile -fc-cache/Makefile -fc-cat/Makefile -fc-list/Makefile -fc-match/Makefile -fc-pattern/Makefile -fc-query/Makefile -fc-scan/Makefile -doc/Makefile -doc/version.sgml -test/Makefile -fontconfig.spec -fontconfig.pc -fontconfig-zip -]) +dnl +dnl fontconfig/configure.in +dnl +dnl Copyright © 2003 Keith Packard +dnl +dnl Permission to use, copy, modify, distribute, and sell this software and its +dnl documentation for any purpose is hereby granted without fee, provided that +dnl the above copyright notice appear in all copies and that both that +dnl copyright notice and this permission notice appear in supporting +dnl documentation, and that the name of the author(s) not be used in +dnl advertising or publicity pertaining to distribution of the software without +dnl specific, written prior permission. The authors make no +dnl representations about the suitability of this software for any purpose. It +dnl is provided "as is" without express or implied warranty. +dnl +dnl THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +dnl INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +dnl EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +dnl CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +dnl DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +dnl TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +dnl PERFORMANCE OF THIS SOFTWARE. +dnl +dnl Process this file with autoconf to create configure. + +AC_INIT(fonts.dtd) + +dnl ========================================================================== +dnl Versioning +dnl ========================================================================== + +dnl This is the package version number, not the shared library +dnl version. This same version number must appear in fontconfig/fontconfig.h +dnl Yes, it is a pain to synchronize version numbers. Unfortunately, it's +dnl not possible to extract the version number here from fontconfig.h +AM_INIT_AUTOMAKE(fontconfig, 2.8.90) +m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])]) + +dnl libtool versioning + +dnl bump revision when fixing bugs +dnl bump current and age, reset revision to zero when adding APIs +dnl bump current, leave age, reset revision to zero when changing/removing APIS +LIBT_CURRENT=5 +LIBT_REVISION=4 +AC_SUBST(LIBT_CURRENT) +AC_SUBST(LIBT_REVISION) +LIBT_AGE=4 + +LIBT_VERSION_INFO="$LIBT_CURRENT:$LIBT_REVISION:$LIBT_AGE" +AC_SUBST(LIBT_VERSION_INFO) + +LIBT_CURRENT_MINUS_AGE=`expr $LIBT_CURRENT - $LIBT_AGE` +AC_SUBST(LIBT_CURRENT_MINUS_AGE) + +dnl ========================================================================== + +AC_CONFIG_HEADERS(config.h) + +AC_PROG_CC +AC_PROG_INSTALL +AC_PROG_LN_S +AC_LIBTOOL_WIN32_DLL +AM_PROG_LIBTOOL +AC_PROG_MAKE_SET + +dnl ========================================================================== + +case "$host" in + *-*-mingw*) + os_win32=yes + ;; + *) + os_win32=no +esac +AM_CONDITIONAL(OS_WIN32, test "$os_win32" = "yes") + +if test "$os_win32" = "yes"; then + AC_CHECK_PROG(ms_librarian, lib.exe, yes, no) +fi +AM_CONDITIONAL(MS_LIB_AVAILABLE, test x$ms_librarian = xyes) + +WARN_CFLAGS="" +if test "x$GCC" = "xyes"; then + WARN_CFLAGS="-Wall -Wpointer-arith -Wstrict-prototypes \ + -Wmissing-prototypes -Wmissing-declarations \ + -Wnested-externs -fno-strict-aliasing" + AC_DEFINE_UNQUOTED(HAVE_WARNING_CPP_DIRECTIVE,1, + [Can use #warning in C files]) +fi +AC_SUBST(WARN_CFLAGS) + + +dnl ========================================================================== + +AM_CONDITIONAL(CROSS_COMPILING, test $cross_compiling = yes) + +dnl ========================================================================== + +AC_ARG_WITH(arch, [ --with-arch=ARCH Force architecture to ARCH], arch="$withval", arch=auto) + +if test "x$arch" != xauto; then + AC_DEFINE_UNQUOTED([FC_ARCHITECTURE], "$arch", [Architecture prefix to use for cache file names]) +fi + + +dnl ========================================================================== + +# Checks for header files. +AC_HEADER_DIRENT +AC_HEADER_STDC +AC_CHECK_HEADERS([fcntl.h stdlib.h string.h unistd.h]) + +# Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_C_INLINE +AC_TYPE_PID_T + +# Checks for library functions. +AC_FUNC_VPRINTF +AC_FUNC_MMAP +AC_CHECK_FUNCS([geteuid getuid link memmove memset mkstemp strchr strrchr strtol getopt getopt_long sysconf ftruncate chsize rand random lrand48]) + +# +# Checks for iconv +# +AC_MSG_CHECKING([for a usable iconv]) +ICONV_LIBS="" +AC_TRY_LINK([#include ], + [iconv_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_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 +#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/^//' -e 's/$/<\/dir>/' -e 's/,/<\/dir> /g'` + ;; +esac + +AC_SUBST(FC_FONTPATH) + +# +# Set default cache directory path +# +AC_ARG_WITH(cache-dir, [ --with-cache-dir=DIR Use DIR to store cache files (default LOCALSTATEDIR/cache/fontconfig)], fc_cachedir="$withval", fc_cachedir=yes) + +case $fc_cachedir in +no|yes) + if test "$os_win32" = "yes"; then + fc_cachedir="WINDOWSTEMPDIR_FONTCONFIG_CACHE" + else + fc_cachedir='${localstatedir}/cache/${PACKAGE}' + fi + ;; +*) + ;; +esac +AC_SUBST(fc_cachedir) +FC_CACHEDIR=${fc_cachedir} +AC_SUBST(FC_CACHEDIR) + +FC_FONTDATE=`LC_ALL=C date` + +AC_SUBST(FC_FONTDATE) + +AC_ARG_WITH(confdir, [ --with-confdir=DIR Use DIR to store configuration files (default SYSCONFDIR/fonts)], confdir="$withval", confdir=yes) + +# +# Set CONFDIR and FONTCONFIG_PATH +# + +case "$confdir" in +no|yes) + confdir='${sysconfdir}'/fonts + ;; +*) + ;; +esac +AC_SUBST(confdir) +CONFDIR=${confdir} +AC_DEFINE_UNQUOTED(CONFDIR, "$CONFDIR",[Font configuration directory]) +AC_SUBST(CONFDIR) + +# +# Let people not build/install docs if they don't have docbook +# + +AC_CHECK_PROG(HASDOCBOOK, docbook2html, yes, no) + +AM_CONDITIONAL(USEDOCBOOK, test "x$HASDOCBOOK" = xyes) + +default_docs="yes" +# +# Check if docs exist or can be created +# +if test x$HASDOCBOOK = xno; then + if test -f $srcdir/doc/fonts-conf.5; then + : + else + default_docs="no" + fi +fi + +AC_ARG_ENABLE(docs, [ --disable-docs Don't build and install documentation],,enable_docs=$default_docs) + +AM_CONDITIONAL(ENABLE_DOCS, test "x$enable_docs" = xyes) + +if test "x$enable_docs" = xyes; then + DOCSRC="doc" + tmp=funcs.$$ + cat $srcdir/doc/*.fncs | awk ' + /^@TITLE@/ { if (!done) { printf ("%s\n", $2); done = 1; } } + /^@FUNC@/ { if (!done) { printf ("%s\n", $2); done = 1; } } + /^@@/ { done = 0; }' > $tmp + DOCMAN3=`cat $tmp | awk '{ printf ("%s.3 ", $1); }'` + echo DOCMAN3 $DOCMAN3 + rm -f $tmp +else + DOCSRC="" + DOCMAN3="" +fi + +AC_SUBST(DOCSRC) +AC_SUBST(DOCMAN3) + + +dnl Figure out what cache format suffix to use for this architecture +AC_C_BIGENDIAN +AC_CHECK_SIZEOF([void *]) +AC_CHECK_ALIGNOF([double]) + + + +AC_OUTPUT([ +Makefile +fontconfig/Makefile +fc-lang/Makefile +fc-glyphname/Makefile +fc-case/Makefile +src/Makefile +conf.d/Makefile +fc-cache/Makefile +fc-cat/Makefile +fc-list/Makefile +fc-match/Makefile +fc-pattern/Makefile +fc-query/Makefile +fc-scan/Makefile +doc/Makefile +doc/version.sgml +test/Makefile +fontconfig.spec +fontconfig.pc +fontconfig-zip +]) diff --git a/fontconfig/doc/Makefile.am b/fontconfig/doc/Makefile.am index 2940f75eb..8d7d5c8ba 100644 --- a/fontconfig/doc/Makefile.am +++ b/fontconfig/doc/Makefile.am @@ -1,203 +1,203 @@ -# -# fontconfig/doc/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -DOC_SRC = $(srcdir) -DOC_MODULE = fontconfig -DOC2HTML = docbook2html -DOC2TXT = docbook2txt -DOC2MAN = docbook2man -DOC2PDF = docbook2pdf - -TXT = fontconfig-user.txt fontconfig-devel.txt -PDF = fontconfig-user.pdf fontconfig-devel.pdf -HTML_FILES = fontconfig-user.html -HTML_DIR = fontconfig-devel -SGML = fontconfig-user.sgml fontconfig-devel.sgml -FNCS_TMPL = ${DOC_SRC}/func.sgml - -DOC_FUNCS_FNCS=\ - fcatomic.fncs \ - fcblanks.fncs \ - fccache.fncs \ - fccharset.fncs \ - fcconfig.fncs \ - fcconstant.fncs \ - fcdircache.fncs \ - fcfile.fncs \ - fcfontset.fncs \ - fcformat.fncs \ - fcfreetype.fncs \ - fcinit.fncs \ - fclangset.fncs \ - fcmatrix.fncs \ - fcobjectset.fncs \ - fcobjecttype.fncs \ - fcpattern.fncs \ - fcstring.fncs \ - fcstrset.fncs \ - fcvalue.fncs - -DOC_FUNCS_SGML=\ - fcatomic.sgml \ - fcblanks.sgml \ - fccache.sgml \ - fccharset.sgml \ - fcconfig.sgml \ - fcconstant.sgml \ - fcdircache.sgml \ - fcfile.sgml \ - fcfontset.sgml \ - fcformat.sgml \ - fcfreetype.sgml \ - fcinit.sgml \ - fclangset.sgml \ - fcmatrix.sgml \ - fcobjectset.sgml \ - fcobjecttype.sgml \ - fcpattern.sgml \ - fcstring.sgml \ - fcstrset.sgml \ - fcvalue.sgml - -man5_MANS=fonts-conf.5 -man3_MANS=$(DOCMAN3) - -noinst_PROGRAMS=edit-sgml -edit_sgml_SOURCES=edit-sgml.c - -DOC_FILES=$(TXT) $(PDF) $(HTML_FILES) -LOCAL_DOCS=$(man3_MANS) $(man5_MANS) $(DOC_FILES) $(HTML_DIR)/* - -check_SCRIPTS=check-missing-doc -TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh -TESTS=check-missing-doc - -EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(DOC_FUNCS_SGML) $(check_SCRIPTS) func.sgml confdir.sgml.in - -SUFFIXES=.fncs .sgml .txt .html - -if USEDOCBOOK - -if CROSS_COMPILING -.fncs.sgml: - @echo Warning: cannot rebuild $@ when cross-compiling -else -.fncs.sgml: - $(RM) $@ - ./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml -endif - -.sgml.txt: - $(RM) $@ - $(DOC2TXT) $< - -.sgml.pdf: - $(RM) $@ - $(DOC2PDF) $< - -$(man3_MANS): func.refs - -func.refs: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml - $(RM) func.refs - $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \ - mv devel-man/manpage.refs func.refs && \ - mv devel-man/*.3 . && \ - $(RM) devel-man/manpage.* && \ - rmdir devel-man - -local-fontconfig-devel.sgml: fontconfig-devel.sgml - $(LN_S) $< $@ - -$(DOC_FUNCS_SGML): edit-sgml.c $(FNCS_TMPL) - -fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml - $(RM) $@ - $(DOC2MAN) local-fontconfig-user.sgml && \ - $(RM) manpage.* - -local-fontconfig-user.sgml: fontconfig-user.sgml - $(LN_S) $< $@ - -all-local: $(LOCAL_DOCS) - -clean-local: - $(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) func.refs - $(RM) -r $(HTML_DIR) - -MAINTAINERCLEANFILES = $(DOC_FUNCS_SGML) - -$(HTML_DIR): local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml - $(RM) -r $(HTML_DIR) - $(DOC2HTML) -V '%use-id-as-filename%' -o $(HTML_DIR) local-fontconfig-devel.sgml - -fontconfig-devel.txt: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml - $(RM) $@ - $(DOC2TXT) local-fontconfig-devel.sgml - mv local-fontconfig-devel.txt $@ - -fontconfig-devel.pdf: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml - $(RM) $@ - $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \ - || echo Failed to generate $@ >&2; \ - (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@) - -fontconfig-user.html: local-fontconfig-user.sgml version.sgml confdir.sgml - $(RM) $@ local-$@ $@.tmp - $(DOC2HTML) -u local-fontconfig-user.sgml > $@.tmp - -test -f local-$@ && mv local-$@ $@ - -test -f $@ || mv $@.tmp $@ - -test -f $@.tmp && $(RM) $@.tmp - -fontconfig-user.txt: local-fontconfig-user.sgml version.sgml confdir.sgml - $(RM) $@ - $(DOC2TXT) local-fontconfig-user.sgml - mv local-fontconfig-user.txt $@ - -fontconfig-user.pdf: local-fontconfig-user.sgml version.sgml confdir.sgml - $(RM) $@ - $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \ - || echo Failed to generate $@ >&2; \ - (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@) - -STRIPNL=awk '{ if (NR > 1) printf ("\n"); printf ("%s", $$0); }' -confdir.sgml: ${DOC_SRC}/confdir.sgml.in - sed "s,@CONFDIR\@,${CONFDIR}," < ${DOC_SRC}/confdir.sgml.in | $(STRIPNL) > confdir.sgml - -CLEANFILES=confdir.sgml local-fontconfig-user.sgml local-fontconfig-devel.sgml - -htmldoc_DATA = $(HTML_DIR)/* - -$(HTML_DIR)/*: $(HTML_DIR) - -else - -htmldoc_DATA = $(srcdir)/$(HTML_DIR)/* - -all-local: -clean-local: -endif - -htmldocdir=$(docdir)/$(HTML_DIR) - -doc_DATA = $(DOC_FILES) - +# +# fontconfig/doc/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC_SRC = $(srcdir) +DOC_MODULE = fontconfig +DOC2HTML = docbook2html +DOC2TXT = docbook2txt +DOC2MAN = docbook2man +DOC2PDF = docbook2pdf + +TXT = fontconfig-user.txt fontconfig-devel.txt +PDF = fontconfig-user.pdf fontconfig-devel.pdf +HTML_FILES = fontconfig-user.html +HTML_DIR = fontconfig-devel +SGML = fontconfig-user.sgml fontconfig-devel.sgml +FNCS_TMPL = ${DOC_SRC}/func.sgml + +DOC_FUNCS_FNCS=\ + fcatomic.fncs \ + fcblanks.fncs \ + fccache.fncs \ + fccharset.fncs \ + fcconfig.fncs \ + fcconstant.fncs \ + fcdircache.fncs \ + fcfile.fncs \ + fcfontset.fncs \ + fcformat.fncs \ + fcfreetype.fncs \ + fcinit.fncs \ + fclangset.fncs \ + fcmatrix.fncs \ + fcobjectset.fncs \ + fcobjecttype.fncs \ + fcpattern.fncs \ + fcstring.fncs \ + fcstrset.fncs \ + fcvalue.fncs + +DOC_FUNCS_SGML=\ + fcatomic.sgml \ + fcblanks.sgml \ + fccache.sgml \ + fccharset.sgml \ + fcconfig.sgml \ + fcconstant.sgml \ + fcdircache.sgml \ + fcfile.sgml \ + fcfontset.sgml \ + fcformat.sgml \ + fcfreetype.sgml \ + fcinit.sgml \ + fclangset.sgml \ + fcmatrix.sgml \ + fcobjectset.sgml \ + fcobjecttype.sgml \ + fcpattern.sgml \ + fcstring.sgml \ + fcstrset.sgml \ + fcvalue.sgml + +man5_MANS=fonts-conf.5 +man3_MANS=$(DOCMAN3) + +noinst_PROGRAMS=edit-sgml +edit_sgml_SOURCES=edit-sgml.c + +DOC_FILES=$(TXT) $(PDF) $(HTML_FILES) +LOCAL_DOCS=$(man3_MANS) $(man5_MANS) $(DOC_FILES) $(HTML_DIR)/* + +check_SCRIPTS=check-missing-doc +TESTS_ENVIRONMENT=top_srcdir=${top_srcdir} sh +TESTS=check-missing-doc + +EXTRA_DIST=$(LOCAL_DOCS) $(SGML) $(DOC_FUNCS_FNCS) $(DOC_FUNCS_SGML) $(check_SCRIPTS) func.sgml confdir.sgml.in + +SUFFIXES=.fncs .sgml .txt .html + +if USEDOCBOOK + +if CROSS_COMPILING +.fncs.sgml: + @echo Warning: cannot rebuild $@ when cross-compiling +else +.fncs.sgml: + $(RM) $@ + ./edit-sgml$(EXEEXT) $(FNCS_TMPL) < '$<' > $*.sgml +endif + +.sgml.txt: + $(RM) $@ + $(DOC2TXT) $< + +.sgml.pdf: + $(RM) $@ + $(DOC2PDF) $< + +$(man3_MANS): func.refs + +func.refs: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml + $(RM) func.refs + $(DOC2MAN) -o devel-man local-fontconfig-devel.sgml && \ + mv devel-man/manpage.refs func.refs && \ + mv devel-man/*.3 . && \ + $(RM) devel-man/manpage.* && \ + rmdir devel-man + +local-fontconfig-devel.sgml: fontconfig-devel.sgml + $(LN_S) $< $@ + +$(DOC_FUNCS_SGML): edit-sgml.c $(FNCS_TMPL) + +fonts-conf.5: local-fontconfig-user.sgml version.sgml confdir.sgml + $(RM) $@ + $(DOC2MAN) local-fontconfig-user.sgml && \ + $(RM) manpage.* + +local-fontconfig-user.sgml: fontconfig-user.sgml + $(LN_S) $< $@ + +all-local: $(LOCAL_DOCS) + +clean-local: + $(RM) $(man3_MANS) $(man5_MANS) $(DOC_FILES) func.refs + $(RM) -r $(HTML_DIR) + +MAINTAINERCLEANFILES = $(DOC_FUNCS_SGML) + +$(HTML_DIR): local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml + $(RM) -r $(HTML_DIR) + $(DOC2HTML) -V '%use-id-as-filename%' -o $(HTML_DIR) local-fontconfig-devel.sgml + +fontconfig-devel.txt: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml + $(RM) $@ + $(DOC2TXT) local-fontconfig-devel.sgml + mv local-fontconfig-devel.txt $@ + +fontconfig-devel.pdf: local-fontconfig-devel.sgml $(DOC_FUNCS_SGML) version.sgml confdir.sgml + $(RM) $@ + $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \ + || echo Failed to generate $@ >&2; \ + (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@) + +fontconfig-user.html: local-fontconfig-user.sgml version.sgml confdir.sgml + $(RM) $@ local-$@ $@.tmp + $(DOC2HTML) -u local-fontconfig-user.sgml > $@.tmp + -test -f local-$@ && mv local-$@ $@ + -test -f $@ || mv $@.tmp $@ + -test -f $@.tmp && $(RM) $@.tmp + +fontconfig-user.txt: local-fontconfig-user.sgml version.sgml confdir.sgml + $(RM) $@ + $(DOC2TXT) local-fontconfig-user.sgml + mv local-fontconfig-user.txt $@ + +fontconfig-user.pdf: local-fontconfig-user.sgml version.sgml confdir.sgml + $(RM) $@ + $(top_srcdir)/missing --run $(DOC2PDF) $< && mv local-$@ $@ \ + || echo Failed to generate $@ >&2; \ + (test -f $@ || echo $(DOC2PDF) is required to generate this file >> $@) + +STRIPNL=awk '{ if (NR > 1) printf ("\n"); printf ("%s", $$0); }' +confdir.sgml: ${DOC_SRC}/confdir.sgml.in + sed "s,@CONFDIR\@,${CONFDIR}," < ${DOC_SRC}/confdir.sgml.in | $(STRIPNL) > confdir.sgml + +CLEANFILES=confdir.sgml local-fontconfig-user.sgml local-fontconfig-devel.sgml + +htmldoc_DATA = $(HTML_DIR)/* + +$(HTML_DIR)/*: $(HTML_DIR) + +else + +htmldoc_DATA = $(srcdir)/$(HTML_DIR)/* + +all-local: +clean-local: +endif + +htmldocdir=$(docdir)/$(HTML_DIR) + +doc_DATA = $(DOC_FILES) + diff --git a/fontconfig/doc/confdir.sgml.in b/fontconfig/doc/confdir.sgml.in index 8008ab81d..cfcaa9f6e 100644 --- a/fontconfig/doc/confdir.sgml.in +++ b/fontconfig/doc/confdir.sgml.in @@ -1,26 +1,26 @@ - - - -/etc/fonts + + + +/etc/fonts diff --git a/fontconfig/doc/edit-sgml.c b/fontconfig/doc/edit-sgml.c index a3f4aa058..cc2ee7633 100644 --- a/fontconfig/doc/edit-sgml.c +++ b/fontconfig/doc/edit-sgml.c @@ -1,546 +1,546 @@ -/* - * fontconfig/doc/edit-sgml.c - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include -#include -#include -#include - -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 ", 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 +#include +#include +#include + +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 ", 0, argv[0]); + f = fopen (argv[1], "r"); + if (!f) + { + Bail ("can't open file %s", 0, argv[1]); + exit (1); + } + iline = 1; + while ((s = ReplaceSetRead (stdin, &iline))) + { + oline = 1; + DoReplace (f, &oline, s); + ReplaceSetDispose (s); + rewind (f); + } + if (ferror (stdout)) + Bail ("%s", 0, "error writing output"); + exit (0); +} diff --git a/fontconfig/doc/fcatomic.fncs b/fontconfig/doc/fcatomic.fncs index 645fe2b26..017756af1 100644 --- a/fontconfig/doc/fcatomic.fncs +++ b/fontconfig/doc/fcatomic.fncs @@ -1,95 +1,95 @@ -/* - * fontconfig/doc/fcatomic.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@RET@ FcAtomic * -@FUNC@ FcAtomicCreate -@TYPE1@ const FcChar8 * @ARG1@ file -@PURPOSE@ create an FcAtomic object -@DESC@ -Creates a data structure containing data needed to control access to file. -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 atomic. -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 atomic. -@@ - -@RET@ FcChar8 * -@FUNC@ FcAtomicOrigFile -@TYPE1@ FcAtomic * @ARG1@ atomic -@PURPOSE@ return original file name -@DESC@ -Returns the file referenced by atomic. -@@ - -@RET@ FcBool -@FUNC@ FcAtomicReplaceOrig -@TYPE1@ FcAtomic * @ARG1@ atomic -@PURPOSE@ replace original with new -@DESC@ -Replaces the original file referenced by atomic 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 atomic. -@@ +/* + * 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 file. +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 atomic. +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 atomic. +@@ + +@RET@ FcChar8 * +@FUNC@ FcAtomicOrigFile +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ return original file name +@DESC@ +Returns the file referenced by atomic. +@@ + +@RET@ FcBool +@FUNC@ FcAtomicReplaceOrig +@TYPE1@ FcAtomic * @ARG1@ atomic +@PURPOSE@ replace original with new +@DESC@ +Replaces the original file referenced by atomic 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 atomic. +@@ diff --git a/fontconfig/doc/fcblanks.fncs b/fontconfig/doc/fcblanks.fncs index a1d3d4ad1..b0996d644 100644 --- a/fontconfig/doc/fcblanks.fncs +++ b/fontconfig/doc/fcblanks.fncs @@ -1,58 +1,58 @@ -/* - * fontconfig/doc/fcblanks.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcBlanks * -@FUNC@ FcBlanksCreate -@TYPE1@ void -@PURPOSE@ Create an FcBlanks -@DESC@ -Creates an empty FcBlanks object. -@@ - -@RET@ void -@FUNC@ FcBlanksDestroy -@TYPE1@ FcBlanks * @ARG1@ b -@PURPOSE@ Destroy and FcBlanks -@DESC@ -Destroys an FcBlanks object, freeing any associated memory. -@@ - -@RET@ FcBool -@FUNC@ FcBlanksAdd -@TYPE1@ FcBlanks * @ARG1@ b -@TYPE2@ FcChar32% @ARG2@ ucs4 -@PURPOSE@ Add a character to an FcBlanks -@DESC@ -Adds a single character to an FcBlanks object, returning FcFalse -if this process ran out of memory. -@@ - -@RET@ FcBool -@FUNC@ FcBlanksIsMember -@TYPE1@ FcBlanks * @ARG1@ b -@TYPE2@ FcChar32% @ARG2@ ucs4 -@PURPOSE@ Query membership in an FcBlanks -@DESC@ -Returns whether the specified FcBlanks object contains the indicated Unicode -value. -@@ +/* + * fontconfig/doc/fcblanks.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcBlanks * +@FUNC@ FcBlanksCreate +@TYPE1@ void +@PURPOSE@ Create an FcBlanks +@DESC@ +Creates an empty FcBlanks object. +@@ + +@RET@ void +@FUNC@ FcBlanksDestroy +@TYPE1@ FcBlanks * @ARG1@ b +@PURPOSE@ Destroy and FcBlanks +@DESC@ +Destroys an FcBlanks object, freeing any associated memory. +@@ + +@RET@ FcBool +@FUNC@ FcBlanksAdd +@TYPE1@ FcBlanks * @ARG1@ b +@TYPE2@ FcChar32% @ARG2@ ucs4 +@PURPOSE@ Add a character to an FcBlanks +@DESC@ +Adds a single character to an FcBlanks object, returning FcFalse +if this process ran out of memory. +@@ + +@RET@ FcBool +@FUNC@ FcBlanksIsMember +@TYPE1@ FcBlanks * @ARG1@ b +@TYPE2@ FcChar32% @ARG2@ ucs4 +@PURPOSE@ Query membership in an FcBlanks +@DESC@ +Returns whether the specified FcBlanks object contains the indicated Unicode +value. +@@ diff --git a/fontconfig/doc/fccache.fncs b/fontconfig/doc/fccache.fncs index 96f3f0a6c..f35c5d7cb 100644 --- a/fontconfig/doc/fccache.fncs +++ b/fontconfig/doc/fccache.fncs @@ -1,68 +1,68 @@ -/* - * Copyright © 2007 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@RET@ const FcChar8 * -@FUNC@ FcCacheDir -@TYPE1@ const FcCache * @ARG1@ cache -@PURPOSE@ Return directory of cache -@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 cache -@DESC@ -The returned fontset contains each of the font patterns from -cache. 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 i'th subdirectory. -@DESC@ -The set of subdirectories stored in a cache file are indexed by this -function, i should range from 0 to -n-1, where n is the return -value from FcCacheNumSubdir. -@@ - -@RET@ int -@FUNC@ FcCacheNumSubdir -@TYPE1@ const FcCache * @ARG1@ cache -@PURPOSE@ Return the number of subdirectories in cache. -@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 cache. -@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 cache +@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 cache +@DESC@ +The returned fontset contains each of the font patterns from +cache. 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 i'th subdirectory. +@DESC@ +The set of subdirectories stored in a cache file are indexed by this +function, i should range from 0 to +n-1, where n is the return +value from FcCacheNumSubdir. +@@ + +@RET@ int +@FUNC@ FcCacheNumSubdir +@TYPE1@ const FcCache * @ARG1@ cache +@PURPOSE@ Return the number of subdirectories in cache. +@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 cache. +@DESC@ +This returns the number of fonts which would be included in the return from +FcCacheCopySet. +@@ diff --git a/fontconfig/doc/fccharset.fncs b/fontconfig/doc/fccharset.fncs index 7cd2ff4b5..036870d3b 100644 --- a/fontconfig/doc/fccharset.fncs +++ b/fontconfig/doc/fccharset.fncs @@ -1,217 +1,217 @@ -/* - * fontconfig/doc/fccharset.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcCharSet * -@FUNC@ FcCharSetCreate -@TYPE1@ void -@PURPOSE@ Create an empty character set -@DESC@ -FcCharSetCreate allocates and initializes a new empty -character set object. -@@ - -@RET@ void -@FUNC@ FcCharSetDestroy -@TYPE1@ FcCharSet * @ARG1@ fcs -@PURPOSE@ Destroy a character set -@DESC@ -FcCharSetDestroy decrements the reference count -fcs. 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@ -FcCharSetAddChar 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@ -FcCharSetDelChar 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 src; note that this may not actually do anything more -than increment the reference count on src. -@@ - -@RET@ FcBool -@FUNC@ FcCharSetEqual -@TYPE1@ const FcCharSet * @ARG1@ a -@TYPE2@ const FcCharSet * @ARG2@ b -@PURPOSE@ Compare two charsets -@DESC@ -Returns whether a and b -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 -a and b. -@@ - -@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 a or b. -@@ - -@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 a but not b. -@@ - -@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 b to a. -In other words, this is an in-place version of FcCharSetUnion. -If changed is not NULL, then it returns whether any new -chars from b were added to a. -Returns FcFalse on failure, either when a 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 fcs contains the char ucs4. -@@ - -@RET@ FcChar32 -@FUNC@ FcCharSetCount -@TYPE1@ const FcCharSet * @ARG1@ a -@PURPOSE@ Count entries in a charset -@DESC@ -Returns the total number of Unicode chars in a. -@@ - -@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 a and b. -@@ - -@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 a but not in b. -@@ - -@RET@ FcBool -@FUNC@ FcCharSetIsSubset -@TYPE1@ const FcCharSet * @ARG1@ a -@TYPE2@ const FcCharSet * @ARG2@ b -@PURPOSE@ Test for charset inclusion -@DESC@ -Returns whether a is a subset of b. -@@ - -@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 -a. Returns the base of the array. next 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 a for page -*next. Returns the base of the array. next 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 result which -indicates which code points in -page are included in a. -FcCharSetCoverage returns the next page in the charset which has any -coverage. -@@ - -@RET@ FcCharSet * -@FUNC@ FcCharSetNew -@TYPE1@ void -@PURPOSE@ DEPRECATED alias for FcCharSetCreate -@DESC@ -FcCharSetNew 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@ +FcCharSetCreate allocates and initializes a new empty +character set object. +@@ + +@RET@ void +@FUNC@ FcCharSetDestroy +@TYPE1@ FcCharSet * @ARG1@ fcs +@PURPOSE@ Destroy a character set +@DESC@ +FcCharSetDestroy decrements the reference count +fcs. 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@ +FcCharSetAddChar 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@ +FcCharSetDelChar 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 src; note that this may not actually do anything more +than increment the reference count on src. +@@ + +@RET@ FcBool +@FUNC@ FcCharSetEqual +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Compare two charsets +@DESC@ +Returns whether a and b +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 +a and b. +@@ + +@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 a or b. +@@ + +@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 a but not b. +@@ + +@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 b to a. +In other words, this is an in-place version of FcCharSetUnion. +If changed is not NULL, then it returns whether any new +chars from b were added to a. +Returns FcFalse on failure, either when a 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 fcs contains the char ucs4. +@@ + +@RET@ FcChar32 +@FUNC@ FcCharSetCount +@TYPE1@ const FcCharSet * @ARG1@ a +@PURPOSE@ Count entries in a charset +@DESC@ +Returns the total number of Unicode chars in a. +@@ + +@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 a and b. +@@ + +@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 a but not in b. +@@ + +@RET@ FcBool +@FUNC@ FcCharSetIsSubset +@TYPE1@ const FcCharSet * @ARG1@ a +@TYPE2@ const FcCharSet * @ARG2@ b +@PURPOSE@ Test for charset inclusion +@DESC@ +Returns whether a is a subset of b. +@@ + +@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 +a. Returns the base of the array. next 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 a for page +*next. Returns the base of the array. next 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 result which +indicates which code points in +page are included in a. +FcCharSetCoverage returns the next page in the charset which has any +coverage. +@@ + +@RET@ FcCharSet * +@FUNC@ FcCharSetNew +@TYPE1@ void +@PURPOSE@ DEPRECATED alias for FcCharSetCreate +@DESC@ +FcCharSetNew is a DEPRECATED alias for FcCharSetCreate. +@@ + diff --git a/fontconfig/doc/fcconfig.fncs b/fontconfig/doc/fcconfig.fncs index 6a8c8183d..fb55adece 100644 --- a/fontconfig/doc/fcconfig.fncs +++ b/fontconfig/doc/fcconfig.fncs @@ -1,373 +1,373 @@ -/* - * fontconfig/doc/fcconfig.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcConfig * -@FUNC@ FcConfigCreate -@TYPE1@ void -@PURPOSE@ Create a configuration -@DESC@ -Creates an empty configuration. -@@ - -@RET@ FcConfig * -@FUNC@ FcConfigReference -@TYPE1@ FcConfig * @ARG1@ config -@PURPOSE@ Increment config reference count -@DESC@ -Add another reference to config. Configs are freed only -when the reference count reaches zero. -If config 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 config. 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 config and returns -whether any of them has been modified since the configuration was created. -If config 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 FcConfigEnableHome). -@@ - -@RET@ FcBool -@FUNC@ FcConfigEnableHome -@TYPE1@ FcBool% @ARG1@ enable -@PURPOSE@ controls use of the home directory. -@DESC@ -If enable 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 enable 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 config 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 config. Does not include any subdirectories. -If config 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 config. This includes the -configured font directories along with any directories below those in the -filesystem. -If config 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 config. -If config 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@ -FcConfigGetCacheDirs 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 config 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 set. This font set is owned by the library and must -not be modified or freed. -If config 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 config 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 config. 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 config 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 config 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 config 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 config 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 config 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 kind is -FcMatchPattern, then those tagged as pattern operations are applied, else -if kind 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 config 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 config 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 sets most closely matching -pattern and returns the result of -FcFontRenderPrepare for that font and the provided -pattern. This function should be called only after -FcConfigSubstitute and -FcDefaultSubstitute have been called for -p; otherwise the results will not be correct. -If config 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 p. If trim 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 csp, if csp is not NULL. This function -should be called only after FcConfigSubstitute and FcDefaultSubstitute have -been called for p; otherwise the results will not be correct. - -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 p to -FcFontRenderPrepare which combines them into a complete pattern. - -The FcFontSet returned by FcFontSort is destroyed by calling FcFontSetDestroy. -If config 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 font not appearing -in pat, elements of pat not appearing in font and the best matching -value from pat for elements appearing in both. The result is passed to -FcConfigSubstituteWithPat with kind 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 p, creates patterns from those fonts containing -only the objects in os and returns the set of unique such patterns. -If config 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. - -A null or empty name 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 ~, 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 config. Configs are freed only +when the reference count reaches zero. +If config 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 config. 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 config and returns +whether any of them has been modified since the configuration was created. +If config 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 FcConfigEnableHome). +@@ + +@RET@ FcBool +@FUNC@ FcConfigEnableHome +@TYPE1@ FcBool% @ARG1@ enable +@PURPOSE@ controls use of the home directory. +@DESC@ +If enable 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 enable 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 config 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 config. Does not include any subdirectories. +If config 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 config. This includes the +configured font directories along with any directories below those in the +filesystem. +If config 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 config. +If config 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@ +FcConfigGetCacheDirs 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 config 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 set. This font set is owned by the library and must +not be modified or freed. +If config 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 config 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 config. 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 config 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 config 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 config 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 config 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 config 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 kind is +FcMatchPattern, then those tagged as pattern operations are applied, else +if kind 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 config 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 config 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 sets most closely matching +pattern and returns the result of +FcFontRenderPrepare for that font and the provided +pattern. This function should be called only after +FcConfigSubstitute and +FcDefaultSubstitute have been called for +p; otherwise the results will not be correct. +If config 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 p. If trim 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 csp, if csp is not NULL. This function +should be called only after FcConfigSubstitute and FcDefaultSubstitute have +been called for p; otherwise the results will not be correct. + +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 p to +FcFontRenderPrepare which combines them into a complete pattern. + +The FcFontSet returned by FcFontSort is destroyed by calling FcFontSetDestroy. +If config 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 font not appearing +in pat, elements of pat not appearing in font and the best matching +value from pat for elements appearing in both. The result is passed to +FcConfigSubstituteWithPat with kind 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 p, creates patterns from those fonts containing +only the objects in os and returns the set of unique such patterns. +If config 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. + +A null or empty name 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 ~, it +refers to a file in the current users home directory. Otherwise if the name +doesn't start with '/', it refers to a file in the default configuration +directory; the built-in default directory can be overridden with the +FC_CONFIG_DIR environment variable. +@@ + +@RET@ FcBool +@FUNC@ FcConfigParseAndLoad +@TYPE1@ FcConfig * @ARG1@ config +@TYPE2@ const FcChar8 * @ARG2@ file +@TYPE3@ FcBool% @ARG3@ complain +@PURPOSE@ load a configuration file +@DESC@ +Walks the configuration in 'file' and constructs the internal representation +in 'config'. Any include files referenced from within 'file' will be loaded +and parsed. If 'complain' is FcFalse, no warning will be displayed if +'file' does not exist. Error and warning messages will be output to stderr. +Returns FcFalse if some error occurred while loading the file, either a +parse error, semantic error or allocation failure. Otherwise returns FcTrue. +@@ diff --git a/fontconfig/doc/fcconstant.fncs b/fontconfig/doc/fcconstant.fncs index c65fb392c..2ead0a6f0 100644 --- a/fontconfig/doc/fcconstant.fncs +++ b/fontconfig/doc/fcconstant.fncs @@ -1,62 +1,62 @@ -/* - * fontconfig/doc/fcconstant.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcBool -@FUNC@ FcNameRegisterConstants -@TYPE1@ const FcConstant * @ARG1@ consts -@TYPE2@ int% @ARG2@ nconsts -@PURPOSE@ Register symbolic constants -@DESC@ -Register nconsts 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 nconsts 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 string. -@@ - -@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 string is registered, -placing the value of the constant in result 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 nconsts 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 nconsts 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 string. +@@ + +@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 string is registered, +placing the value of the constant in result if present. +@@ diff --git a/fontconfig/doc/fcfile.fncs b/fontconfig/doc/fcfile.fncs index a64c0b18b..5f5f32a8a 100644 --- a/fontconfig/doc/fcfile.fncs +++ b/fontconfig/doc/fcfile.fncs @@ -1,88 +1,88 @@ -/* - * fontconfig/doc/fcfile.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@RET@ FcBool -@FUNC@ FcFileScan -@TYPE1@ FcFontSet * @ARG1@ set -@TYPE2@ FcStrSet * @ARG2@ dirs -@TYPE3@ FcFileCache * @ARG3@ cache -@TYPE4@ FcBlanks * @ARG4@ blanks -@TYPE5@ const FcChar8 * @ARG5@ file -@TYPE6@ FcBool% @ARG6@ force -@PURPOSE@ scan a font file -@DESC@ -Scans a single file and adds all fonts found to set. -If force is FcTrue, then the file is scanned even if -associated information is found in cache. If -file is a directory, it is added to -dirs. 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 file 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 cache is not zero or if force -is FcFalse, this function currently returns FcFalse. Otherwise, it scans an -entire directory and adds all fonts found to set. -Any subdirectories found are added to dirs. 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 dir and populates it -with the fonts in set and subdirectories in -dirs. 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 set. +If force is FcTrue, then the file is scanned even if +associated information is found in cache. If +file is a directory, it is added to +dirs. 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 file 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 cache is not zero or if force +is FcFalse, this function currently returns FcFalse. Otherwise, it scans an +entire directory and adds all fonts found to set. +Any subdirectories found are added to dirs. 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 dir and populates it +with the fonts in set and subdirectories in +dirs. All of this functionality is now automatically +managed by FcDirCacheLoad and FcDirCacheRead. +@@ + diff --git a/fontconfig/doc/fcfontset.fncs b/fontconfig/doc/fcfontset.fncs index adf9a9688..e076d8b92 100644 --- a/fontconfig/doc/fcfontset.fncs +++ b/fontconfig/doc/fcfontset.fncs @@ -1,140 +1,140 @@ -/* - * fontconfig/doc/fcfontset.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcFontSet * -@FUNC@ FcFontSetCreate -@TYPE1@ void -@PURPOSE@ Create a font set -@DESC@ -Creates an empty font set. -@@ - -@RET@ void -@FUNC@ FcFontSetDestroy -@TYPE1@ FcFontSet * @ARG1@ s -@PURPOSE@ Destroy a font set -@DESC@ -Destroys a font set. Note that this destroys any referenced patterns as -well. -@@ - -@RET@ FcBool -@FUNC@ FcFontSetAdd -@TYPE1@ FcFontSet * @ARG1@ s -@TYPE2@ FcPattern * @ARG2@ font -@PURPOSE@ Add to a font set -@DESC@ -Adds a pattern to a font set. Note that the pattern is not copied before -being inserted into the set. Returns FcFalse if the pattern cannot be -inserted into the set (due to allocation failure). Otherwise returns FcTrue. -@@ - -@RET@ FcFontSet * -@FUNC@ FcFontSetList -@TYPE1@ FcConfig * @ARG1@ config -@TYPE2@ FcFontSet ** @ARG2@ sets -@TYPE3@ int @ARG3@ nsets -@TYPE4@ FcPattern * @ARG4@ pattern -@TYPE5@ FcObjectSet * @ARG5@ object_set -@PURPOSE@ List fonts from a set of font sets -@DESC@ -Selects fonts matching pattern from -sets, creates patterns from those -fonts containing only the objects in object_set and returns -the set of unique such patterns. -If config 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 sets most closely matching -pattern and returns the result of -FcFontRenderPrepare for that font and the provided -pattern. This function should be called only after -FcConfigSubstitute and -FcDefaultSubstitute have been called for -pattern; otherwise the results will not be correct. -If config 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 set. 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 sets -sorted by closeness to pattern. -If trim 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 csp, -if csp is not NULL. This function -should be called only after FcConfigSubstitute and FcDefaultSubstitute have -been called for p; -otherwise the results will not be correct. - -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 -pattern to -FcFontRenderPrepare which combines them into a complete pattern. - -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. FcFontSetSortDestroy -destroys set by calling -FcFontSetDestroy. Applications should use -FcFontSetDestroy 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 pattern from +sets, creates patterns from those +fonts containing only the objects in object_set and returns +the set of unique such patterns. +If config 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 sets most closely matching +pattern and returns the result of +FcFontRenderPrepare for that font and the provided +pattern. This function should be called only after +FcConfigSubstitute and +FcDefaultSubstitute have been called for +pattern; otherwise the results will not be correct. +If config 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 set. 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 sets +sorted by closeness to pattern. +If trim 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 csp, +if csp is not NULL. This function +should be called only after FcConfigSubstitute and FcDefaultSubstitute have +been called for p; +otherwise the results will not be correct. + +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 +pattern to +FcFontRenderPrepare which combines them into a complete pattern. + +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. FcFontSetSortDestroy +destroys set by calling +FcFontSetDestroy. Applications should use +FcFontSetDestroy directly instead. +@@ diff --git a/fontconfig/doc/fcformat.fncs b/fontconfig/doc/fcformat.fncs index f5ad4851c..c136e8cf2 100644 --- a/fontconfig/doc/fcformat.fncs +++ b/fontconfig/doc/fcformat.fncs @@ -1,308 +1,308 @@ -/* - * fontconfig/doc/fcformat.fncs - * - * Copyright © 2008 Behdad Esfahbod - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@RET@ FcChar8 * -@FUNC@ FcPatternFormat -@TYPE1@ FcPattern * @ARG1@ pat -@TYPE2@ const FcChar8 * @ARG2@ format -@PURPOSE@ Format a pattern into a string according to a format specifier -@DESC@ - -Converts given pattern pat into text described by -the format specifier format. -The return value refers to newly allocated memory which should be freed by the -caller using free(), or NULL if format is invalid. - - - -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. - - - -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. - - - -A simple tag -is one where the content is an identifier. When simple -tags are expanded, the named identifier will be looked up in -pattern 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". - - - -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]}". - - - -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 pattern does not have weight set. - - - -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 pattern does not have weight set. - - - -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 pattern does not have weight set. - - - -A count 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 -pattern has set, which may be zero. - - - -A sub-expression 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. - - - -A filter-out 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 pattern sans the size and pixelsize elements. - - - -A filter-in 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 -pattern. - - - -A conditional 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 pattern has size and dpi elements but -no pixelsize element, and to "fail" otherwise. - - - -An enumerate 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. - - - -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. - - - -A builtin tag -is one starting with the character "=" followed by a builtin -name. The following builtins are defined: - - - - -unparse - -Expands to the result of calling FcNameUnparse() on the pattern. - - - -fcmatch - -Expands to the output of the default output format of the fc-match -command on the pattern, without the final newline. - - - -fclist - -Expands to the output of the default output format of the fc-list -command on the pattern, without the final newline. - - - -fccat - -Expands to the output of the default output format of the fc-cat -command on the pattern, without the final newline. - - - -pkgkit - -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. - - - - -For example, the format "%{+family,style{%{=unparse}}}\n" will expand -to an unparsed name containing only the family and style element values -from pattern. - - - -The contents of any tag can be followed by a set of zero or more -converters. A converter is specified by the -character "|" followed by the converter name and arguments. The -following converters are defined: - - - - -basename - -Replaces text with the results of calling FcStrBasename() on it. - - - -dirname - -Replaces text with the results of calling FcStrDirname() on it. - - - -downcase - -Replaces text with the results of calling FcStrDowncase() on it. - - - -shescape - -Escapes text for one level of shell expansion. -(Escapes single-quotes, also encloses text in single-quotes.) - - - -cescape - -Escapes text such that it can be used as part of a C string literal. -(Escapes backslash and double-quotes.) - - - -xmlescape - -Escapes text such that it can be used in XML and HTML. -(Escapes less-than, greater-than, and ampersand.) - - - -delete(chars) - -Deletes all occurrences of each of the characters in chars -from the text. -FIXME: This converter is not UTF-8 aware yet. - - - -escape(chars) - -Escapes all occurrences of each of the characters in chars -by prepending it by the first character in chars. -FIXME: This converter is not UTF-8 aware yet. - - - -translate(from,to) - -Translates all occurrences of each of the characters in from -by replacing them with their corresponding character in to. -If to has fewer characters than -from, it will be extended by repeating its last -character. -FIXME: This converter is not UTF-8 aware yet. - - - - -For example, the format "%{family|downcase|delete( )}\n" will expand -to the values of the family element in pattern, -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 pat into text described by +the format specifier format. +The return value refers to newly allocated memory which should be freed by the +caller using free(), or NULL if format is invalid. + + + +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. + + + +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. + + + +A simple tag +is one where the content is an identifier. When simple +tags are expanded, the named identifier will be looked up in +pattern 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". + + + +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]}". + + + +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 pattern does not have weight set. + + + +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 pattern does not have weight set. + + + +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 pattern does not have weight set. + + + +A count 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 +pattern has set, which may be zero. + + + +A sub-expression 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. + + + +A filter-out 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 pattern sans the size and pixelsize elements. + + + +A filter-in 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 +pattern. + + + +A conditional 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 pattern has size and dpi elements but +no pixelsize element, and to "fail" otherwise. + + + +An enumerate 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. + + + +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. + + + +A builtin tag +is one starting with the character "=" followed by a builtin +name. The following builtins are defined: + + + + +unparse + +Expands to the result of calling FcNameUnparse() on the pattern. + + + +fcmatch + +Expands to the output of the default output format of the fc-match +command on the pattern, without the final newline. + + + +fclist + +Expands to the output of the default output format of the fc-list +command on the pattern, without the final newline. + + + +fccat + +Expands to the output of the default output format of the fc-cat +command on the pattern, without the final newline. + + + +pkgkit + +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. + + + + +For example, the format "%{+family,style{%{=unparse}}}\n" will expand +to an unparsed name containing only the family and style element values +from pattern. + + + +The contents of any tag can be followed by a set of zero or more +converters. A converter is specified by the +character "|" followed by the converter name and arguments. The +following converters are defined: + + + + +basename + +Replaces text with the results of calling FcStrBasename() on it. + + + +dirname + +Replaces text with the results of calling FcStrDirname() on it. + + + +downcase + +Replaces text with the results of calling FcStrDowncase() on it. + + + +shescape + +Escapes text for one level of shell expansion. +(Escapes single-quotes, also encloses text in single-quotes.) + + + +cescape + +Escapes text such that it can be used as part of a C string literal. +(Escapes backslash and double-quotes.) + + + +xmlescape + +Escapes text such that it can be used in XML and HTML. +(Escapes less-than, greater-than, and ampersand.) + + + +delete(chars) + +Deletes all occurrences of each of the characters in chars +from the text. +FIXME: This converter is not UTF-8 aware yet. + + + +escape(chars) + +Escapes all occurrences of each of the characters in chars +by prepending it by the first character in chars. +FIXME: This converter is not UTF-8 aware yet. + + + +translate(from,to) + +Translates all occurrences of each of the characters in from +by replacing them with their corresponding character in to. +If to has fewer characters than +from, it will be extended by repeating its last +character. +FIXME: This converter is not UTF-8 aware yet. + + + + +For example, the format "%{family|downcase|delete( )}\n" will expand +to the values of the family element in pattern, +lower-cased and with spaces removed. + +@@ diff --git a/fontconfig/doc/fcfreetype.fncs b/fontconfig/doc/fcfreetype.fncs index acd101dc5..e4cca46a3 100644 --- a/fontconfig/doc/fcfreetype.fncs +++ b/fontconfig/doc/fcfreetype.fncs @@ -1,106 +1,106 @@ -/* - * fontconfig/doc/fcfreetype.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@SYNOPSIS@ -#include <fontconfig.h> -#include <fcfreetype.h> -@RET@ FT_UInt -@FUNC@ FcFreeTypeCharIndex -@TYPE1@ FT_Face% @ARG1@ face -@TYPE2@ FcChar32% @ARG2@ ucs4 -@PURPOSE@ map Unicode to glyph id -@DESC@ -Maps a Unicode char to a glyph index. This function uses information from -several possible underlying encoding tables to work around broken fonts. -As a result, this function isn't designed to be used in performance -sensitive areas; results from this function are intended to be cached by -higher level functions. -@@ - -@SYNOPSIS@ -#include <fontconfig.h> -#include <fcfreetype.h> -@RET@ FcCharSet * -@FUNC@ FcFreeTypeCharSet -@TYPE1@ FT_Face% @ARG1@ face -@TYPE2@ FcBlanks * @ARG2@ blanks -@PURPOSE@ compute Unicode coverage -@DESC@ -Scans a FreeType face and returns the set of encoded Unicode chars. This scans -several encoding tables to build as complete a list as possible. -If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs -not in 'blanks' are not placed in the returned FcCharSet. -@@ - -@SYNOPSIS@ -#include <fontconfig.h> -#include <fcfreetype.h> -@RET@ FcCharSet * -@FUNC@ FcFreeTypeCharSetAndSpacing -@TYPE1@ FT_Face% @ARG1@ face -@TYPE2@ FcBlanks * @ARG2@ blanks -@TYPE3@ int * @ARG3@ spacing -@PURPOSE@ compute Unicode coverage and spacing type -@DESC@ -Scans a FreeType face and returns the set of encoded Unicode chars. -This scans -several encoding tables to build as complete a list as possible. -If 'blanks' is not 0, the glyphs in the font are examined and any blank glyphs -not in 'blanks' are not placed in the returned FcCharSet. -spacing 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. +spacing receives the computed spacing type of the +font, one of FC_MONO for a font where all glyphs have the same width, +FC_DUAL, where the font has glyphs in precisely two widths, one twice as +wide as the other, or FC_PROPORTIONAL where the font has glyphs of many +widths. +@@ + +@SYNOPSIS@ +#include <fontconfig.h> +#include <fcfreetype.h> +@RET@ FcPattern * +@FUNC@ FcFreeTypeQuery +@TYPE1@ const FcChar8 * @ARG1@ file +@TYPE2@ int% @ARG2@ id +@TYPE3@ FcBlanks * @ARG3@ blanks +@TYPE4@ int * @ARG4@ count +@PURPOSE@ compute pattern from font file (and index) +@DESC@ +Constructs a pattern representing the 'id'th font in 'file'. The number +of fonts in 'file' is returned in 'count'. +@@ + +@SYNOPSIS@ +#include <fontconfig.h> +#include <fcfreetype.h> +@RET@ FcPattern * +@FUNC@ FcFreeTypeQueryFace +@TYPE1@ const FT_Face% @ARG1@ face +@TYPE2@ const FcChar8 * @ARG2@ file +@TYPE3@ int% @ARG3@ id +@TYPE4@ FcBlanks * @ARG4@ blanks +@PURPOSE@ compute pattern from FT_Face +@DESC@ +Constructs a pattern representing 'face'. 'file' and 'id' are used solely as +data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY). +@@ diff --git a/fontconfig/doc/fcinit.fncs b/fontconfig/doc/fcinit.fncs index f0bb397b4..014af0dea 100644 --- a/fontconfig/doc/fcinit.fncs +++ b/fontconfig/doc/fcinit.fncs @@ -1,92 +1,92 @@ -/* - * fontconfig/doc/fcinit.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcConfig * -@FUNC@ FcInitLoadConfig -@TYPE1@ void -@PURPOSE@ load configuration -@DESC@ -Loads the default configuration file and returns the resulting configuration. -Does not load any font information. -@@ - -@RET@ FcConfig * -@FUNC@ FcInitLoadConfigAndFonts -@TYPE1@ void -@PURPOSE@ load configuration and font data -@DESC@ -Loads the default configuration file and builds information about the -available fonts. Returns the resulting configuration. -@@ - -@RET@ FcBool -@FUNC@ FcInit -@TYPE1@ void -@PURPOSE@ initialize fontconfig library -@DESC@ -Loads the default configuration file and the fonts referenced therein and -sets the default configuration to that result. Returns whether this -process succeeded or not. If the default configuration has already -been loaded, this routine does nothing and returns FcTrue. -@@ - -@RET@ void -@FUNC@ FcFini -@TYPE1@ void -@PURPOSE@ finalize fontconfig library -@DESC@ -Frees all data structures allocated by previous calls to fontconfig -functions. Fontconfig returns to an uninitialized state, requiring a -new call to one of the FcInit functions before any other fontconfig -function may be called. -@@ - -@RET@ int -@FUNC@ FcGetVersion -@TYPE1@ void -@PURPOSE@ library version number -@DESC@ -Returns the version number of the library. -@@ - -@RET@ FcBool -@FUNC@ FcInitReinitialize -@TYPE1@ void -@PURPOSE@ re-initialize library -@DESC@ -Forces the default configuration file to be reloaded and resets the default -configuration. Returns FcFalse if the configuration cannot be reloaded (due -to configuration file errors, allocation failures or other issues) and leaves the -existing configuration unchanged. Otherwise returns FcTrue. -@@ - -@RET@ FcBool -@FUNC@ FcInitBringUptoDate -@TYPE1@ void -@PURPOSE@ reload configuration files if needed -@DESC@ -Checks the rescan interval in the default configuration, checking the -configuration if the interval has passed and reloading the configuration if -when any changes are detected. Returns FcFalse if the configuration cannot -be reloaded (see FcInitReinitialize). Otherwise returns FcTrue. -@@ +/* + * fontconfig/doc/fcinit.fncs + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ +@RET@ FcConfig * +@FUNC@ FcInitLoadConfig +@TYPE1@ void +@PURPOSE@ load configuration +@DESC@ +Loads the default configuration file and returns the resulting configuration. +Does not load any font information. +@@ + +@RET@ FcConfig * +@FUNC@ FcInitLoadConfigAndFonts +@TYPE1@ void +@PURPOSE@ load configuration and font data +@DESC@ +Loads the default configuration file and builds information about the +available fonts. Returns the resulting configuration. +@@ + +@RET@ FcBool +@FUNC@ FcInit +@TYPE1@ void +@PURPOSE@ initialize fontconfig library +@DESC@ +Loads the default configuration file and the fonts referenced therein and +sets the default configuration to that result. Returns whether this +process succeeded or not. If the default configuration has already +been loaded, this routine does nothing and returns FcTrue. +@@ + +@RET@ void +@FUNC@ FcFini +@TYPE1@ void +@PURPOSE@ finalize fontconfig library +@DESC@ +Frees all data structures allocated by previous calls to fontconfig +functions. Fontconfig returns to an uninitialized state, requiring a +new call to one of the FcInit functions before any other fontconfig +function may be called. +@@ + +@RET@ int +@FUNC@ FcGetVersion +@TYPE1@ void +@PURPOSE@ library version number +@DESC@ +Returns the version number of the library. +@@ + +@RET@ FcBool +@FUNC@ FcInitReinitialize +@TYPE1@ void +@PURPOSE@ re-initialize library +@DESC@ +Forces the default configuration file to be reloaded and resets the default +configuration. Returns FcFalse if the configuration cannot be reloaded (due +to configuration file errors, allocation failures or other issues) and leaves the +existing configuration unchanged. Otherwise returns FcTrue. +@@ + +@RET@ FcBool +@FUNC@ FcInitBringUptoDate +@TYPE1@ void +@PURPOSE@ reload configuration files if needed +@DESC@ +Checks the rescan interval in the default configuration, checking the +configuration if the interval has passed and reloading the configuration if +when any changes are detected. Returns FcFalse if the configuration cannot +be reloaded (see FcInitReinitialize). Otherwise returns FcTrue. +@@ diff --git a/fontconfig/doc/fclangset.fncs b/fontconfig/doc/fclangset.fncs index d61d9dfef..0a44b38c2 100644 --- a/fontconfig/doc/fclangset.fncs +++ b/fontconfig/doc/fclangset.fncs @@ -1,178 +1,178 @@ -/* - * Copyright © 2007 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting documentation, and - * that the name of the copyright holders not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. The copyright holders make no representations - * about the suitability of this software for any purpose. It is provided "as - * is" without express or implied warranty. - * - * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -@RET@ FcLangSet * -@FUNC@ FcLangSetCreate -@TYPE1@ void -@PURPOSE@ create a langset object -@DESC@ -FcLangSetCreate creates a new FcLangSet object. -@@ - -@RET@ void -@FUNC@ FcLangSetDestroy -@TYPE1@ FcLangSet * @ARG1@ ls -@PURPOSE@ destroy a langset object -@DESC@ -FcLangSetDestroy 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@ -FcLangSetCopy creates a new FcLangSet object and -populates it with the contents of ls. -@@ - -@RET@ FcBool -@FUNC@ FcLangSetAdd -@TYPE1@ FcLangSet * @ARG1@ ls -@TYPE2@ const FcChar8 * @ARG2@ lang -@PURPOSE@ add a language to a langset -@DESC@ -lang is added to ls. -lang 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@ -lang is removed from ls. -lang 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 ls_a or ls_b. -@@ - -@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 ls_a but not in ls_b. -@@ - -@RET@ FcLangResult -@FUNC@ FcLangSetCompare -@TYPE1@ const FcLangSet * @ARG1@ ls_a -@TYPE2@ const FcLangSet * @ARG2@ ls_b -@PURPOSE@ compare language sets -@DESC@ -FcLangSetCompare compares language coverage for -ls_a and ls_b. 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@ -FcLangSetContains returns FcTrue if -ls_a contains every language in -ls_b. ls_a will 'contain' a -language from ls_b if ls_a -has exactly the language, or either the language or -ls_a 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 ls_a supports precisely -the same language and territory combinations as ls_b. -@@ - -@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 ls. Any language which equals -ls will have the same result from -FcLangSetHash. 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@ -FcLangSetHasLang checks whether -ls supports lang. If -ls has a matching language and territory pair, -this function returns FcLangEqual. If ls has -a matching language but differs in which territory that language is for, this -function returns FcLangDifferentTerritory. If ls -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 langset. -@@ - -@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@ +FcLangSetCreate creates a new FcLangSet object. +@@ + +@RET@ void +@FUNC@ FcLangSetDestroy +@TYPE1@ FcLangSet * @ARG1@ ls +@PURPOSE@ destroy a langset object +@DESC@ +FcLangSetDestroy 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@ +FcLangSetCopy creates a new FcLangSet object and +populates it with the contents of ls. +@@ + +@RET@ FcBool +@FUNC@ FcLangSetAdd +@TYPE1@ FcLangSet * @ARG1@ ls +@TYPE2@ const FcChar8 * @ARG2@ lang +@PURPOSE@ add a language to a langset +@DESC@ +lang is added to ls. +lang 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@ +lang is removed from ls. +lang 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 ls_a or ls_b. +@@ + +@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 ls_a but not in ls_b. +@@ + +@RET@ FcLangResult +@FUNC@ FcLangSetCompare +@TYPE1@ const FcLangSet * @ARG1@ ls_a +@TYPE2@ const FcLangSet * @ARG2@ ls_b +@PURPOSE@ compare language sets +@DESC@ +FcLangSetCompare compares language coverage for +ls_a and ls_b. 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@ +FcLangSetContains returns FcTrue if +ls_a contains every language in +ls_b. ls_a will 'contain' a +language from ls_b if ls_a +has exactly the language, or either the language or +ls_a 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 ls_a supports precisely +the same language and territory combinations as ls_b. +@@ + +@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 ls. Any language which equals +ls will have the same result from +FcLangSetHash. 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@ +FcLangSetHasLang checks whether +ls supports lang. If +ls has a matching language and territory pair, +this function returns FcLangEqual. If ls has +a matching language but differs in which territory that language is for, this +function returns FcLangDifferentTerritory. If ls +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 langset. +@@ + +@RET@ FcStrSet * +@FUNC@ FcGetLangs +@TYPE1@ void +@PURPOSE@ Get list of languages +@DESC@ +Returns a string set of all known languages. +@@ + +@RET@ const FcCharSet * +@FUNC@ FcLangGetCharSet +@TYPE1@ const FcChar8 * @ARG1@ lang +@PURPOSE@ Get character map for a language +@DESC@ +Returns the FcCharMap for a language. +@@ diff --git a/fontconfig/doc/fcmatrix.fncs b/fontconfig/doc/fcmatrix.fncs index 7e752ea4e..a53ade946 100644 --- a/fontconfig/doc/fcmatrix.fncs +++ b/fontconfig/doc/fcmatrix.fncs @@ -1,125 +1,125 @@ -/* - * fontconfig/doc/fcmatrix.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@RET@ void -@FUNC@ FcMatrixInit -@PURPOSE@ initialize an FcMatrix structure -@TYPE1@ FcMatrix * -@ARG1@ matrix -@DESC@ -FcMatrixInit initializes matrix -to the identity matrix. -@@ - -@FUNC@ FcMatrixCopy -@PURPOSE@ Copy a matrix -@TYPE1@ const FcMatrix * -@ARG1@ matrix -@DESC@ -FcMatrixCopy allocates a new FcMatrix -and copies mat into it. -@@ - -@FUNC@ FcMatrixEqual -@PURPOSE@ Compare two matrices -@TYPE1@ const FcMatrix * -@ARG1@ matrix1 -@TYPE2@ const FcMatrix * -@ARG2@ matrix2 -@DESC@ -FcMatrixEqual compares matrix1 -and matrix2 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@ -FcMatrixMultiply multiplies -matrix1 and matrix2 storing -the result in result. -@@ - -@FUNC@ FcMatrixRotate -@PURPOSE@ Rotate a matrix -@TYPE1@ FcMatrix * -@ARG1@ matrix -@TYPE2@ double% -@ARG2@ cos -@TYPE3@ double% -@ARG3@ sin -@DESC@ -FcMatrixRotate rotates matrix -by the angle who's sine is sin and cosine is -cos. This is done by multiplying by the -matrix: - - cos -sin - sin cos - -@@ - -@FUNC@ FcMatrixScale -@PURPOSE@ Scale a matrix -@TYPE1@ FcMatrix * -@ARG1@ matrix -@TYPE2@ double% -@ARG2@ sx -@TYPE3@ double% -@ARG3@ dy -@DESC@ -FcMatrixScale multiplies matrix -x values by sx and y values by -dy. This is done by multiplying by -the matrix: - - sx 0 - 0 dy - -@@ - -@FUNC@ FcMatrixShear -@PURPOSE@ Shear a matrix -@TYPE1@ FcMatrix * -@ARG1@ matrix -@TYPE2@ double% -@ARG2@ sh -@TYPE3@ double% -@ARG3@ sv -@DESC@ -FcMatrixShare shears matrix -horizontally by sh and vertically by -sv. This is done by multiplying by -the matrix: - - 1 sh - sv 1 - -@@ +/* + * 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@ +FcMatrixInit initializes matrix +to the identity matrix. +@@ + +@FUNC@ FcMatrixCopy +@PURPOSE@ Copy a matrix +@TYPE1@ const FcMatrix * +@ARG1@ matrix +@DESC@ +FcMatrixCopy allocates a new FcMatrix +and copies mat into it. +@@ + +@FUNC@ FcMatrixEqual +@PURPOSE@ Compare two matrices +@TYPE1@ const FcMatrix * +@ARG1@ matrix1 +@TYPE2@ const FcMatrix * +@ARG2@ matrix2 +@DESC@ +FcMatrixEqual compares matrix1 +and matrix2 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@ +FcMatrixMultiply multiplies +matrix1 and matrix2 storing +the result in result. +@@ + +@FUNC@ FcMatrixRotate +@PURPOSE@ Rotate a matrix +@TYPE1@ FcMatrix * +@ARG1@ matrix +@TYPE2@ double% +@ARG2@ cos +@TYPE3@ double% +@ARG3@ sin +@DESC@ +FcMatrixRotate rotates matrix +by the angle who's sine is sin and cosine is +cos. This is done by multiplying by the +matrix: + + cos -sin + sin cos + +@@ + +@FUNC@ FcMatrixScale +@PURPOSE@ Scale a matrix +@TYPE1@ FcMatrix * +@ARG1@ matrix +@TYPE2@ double% +@ARG2@ sx +@TYPE3@ double% +@ARG3@ dy +@DESC@ +FcMatrixScale multiplies matrix +x values by sx and y values by +dy. This is done by multiplying by +the matrix: + + sx 0 + 0 dy + +@@ + +@FUNC@ FcMatrixShear +@PURPOSE@ Shear a matrix +@TYPE1@ FcMatrix * +@ARG1@ matrix +@TYPE2@ double% +@ARG2@ sh +@TYPE3@ double% +@ARG3@ sv +@DESC@ +FcMatrixShare shears matrix +horizontally by sh and vertically by +sv. This is done by multiplying by +the matrix: + + 1 sh + sv 1 + +@@ diff --git a/fontconfig/doc/fcobjectset.fncs b/fontconfig/doc/fcobjectset.fncs index b741cfa08..57e1750d1 100644 --- a/fontconfig/doc/fcobjectset.fncs +++ b/fontconfig/doc/fcobjectset.fncs @@ -1,73 +1,73 @@ -/* - * fontconfig/doc/fcobjectset.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcObjectSet * -@FUNC@ FcObjectSetCreate -@TYPE1@ void -@PURPOSE@ Create an object set -@DESC@ -Creates an empty set. -@@ - -@RET@ FcBool -@FUNC@ FcObjectSetAdd -@TYPE1@ FcObjectSet * @ARG1@ os -@TYPE2@ const char * @ARG2@ object -@PURPOSE@ Add to an object set -@DESC@ -Adds a property name to the set. Returns FcFalse if the property name cannot be -inserted into the set (due to allocation failure). Otherwise returns FcTrue. -@@ - -@RET@ void -@FUNC@ FcObjectSetDestroy -@TYPE1@ FcObjectSet * @ARG1@ os -@PURPOSE@ Destroy an object set -@DESC@ -Destroys an object set. -@@ - -@RET@ FcObjectSet * -@FUNC@ FcObjectSetBuild -@TYPE1@ const char * @ARG1@ first -@TYPE2@ ... - -@PROTOTYPE+@ -@RET+@ FcObjectSet * -@FUNC+@ FcObjectSetVaBuild -@TYPE1+@ const char * @ARG1+@ first -@TYPE2+@ va_list% @ARG2+@ va - -@PROTOTYPE++@ -@RET++@ void -@FUNC++@ FcObjectSetVapBuild -@TYPE1++@ FcObjectSet * @ARG1++@ result -@TYPE2++@ const char * @ARG2++@ first -@TYPE3++@ va_list% @ARG3++@ va - -@PURPOSE@ Build object set from args -@DESC@ -These build an object set from a null-terminated list of property names. -FcObjectSetVapBuild is a macro version of FcObjectSetVaBuild which returns -the result in the result 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 result variable directly. +@@ diff --git a/fontconfig/doc/fcobjecttype.fncs b/fontconfig/doc/fcobjecttype.fncs index ebc1bf745..45f3a31a0 100644 --- a/fontconfig/doc/fcobjecttype.fncs +++ b/fontconfig/doc/fcobjecttype.fncs @@ -1,50 +1,50 @@ -/* - * fontconfig/doc/fcobjecttype.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcBool -@FUNC@ FcNameRegisterObjectTypes -@TYPE1@ const FcObjectType * @ARG1@ types -@TYPE2@ int% @ARG2@ ntype -@PURPOSE@ Register object types -@DESC@ -Register ntype 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 ntype 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 object. -@@ +/* + * 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 ntype 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 ntype 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 object. +@@ diff --git a/fontconfig/doc/fcpattern.fncs b/fontconfig/doc/fcpattern.fncs index 17e873872..1df1c4f61 100644 --- a/fontconfig/doc/fcpattern.fncs +++ b/fontconfig/doc/fcpattern.fncs @@ -1,397 +1,397 @@ -/* - * fontconfig/doc/fcpattern.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ FcPattern * -@FUNC@ FcPatternCreate -@TYPE1@ void -@PURPOSE@ Create a pattern -@DESC@ -Creates a pattern with no properties; used to build patterns from scratch. -@@ - -@RET@ FcPattern * -@FUNC@ FcPatternDuplicate -@TYPE1@ const FcPattern * @ARG1@ p -@PURPOSE@ Copy a pattern -@DESC@ -Copy a pattern, returning a new pattern that matches -p. 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 p. 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 pa and pb 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 pa and pb have exactly the same values for all of the -objects in os. -@@ - -@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 -p that are in os. -If os is NULL, a duplicate of -p 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. If `append 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 weak instead of strong. -@@ - -@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 v the id'th value -associated with the property object. -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: - - - -Object name, a string describing the property to be added. - -Object type, one of the FcType enumerated values - -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. - - - -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 - - -pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0); - - -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 result -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: - - -Patterns without a specified style or weight are set to Medium - - -Patterns without a specified style or slant are set to Roman - - -Patterns without a specified pixel size are given one computed from any -specified point size (default 12), dpi (default 75) and scale (default 1). - - -@@ - -@RET@ FcPattern * -@FUNC@ FcNameParse -@TYPE1@ const FcChar8 * @ARG1@ name -@PURPOSE@ Parse a pattern string -@DESC@ -Converts name 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 +p. 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 p. 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 pa and pb 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 pa and pb have exactly the same values for all of the +objects in os. +@@ + +@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 +p that are in os. +If os is NULL, a duplicate of +p 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. If `append 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 weak instead of strong. +@@ + +@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 v the id'th value +associated with the property object. +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: + + + +Object name, a string describing the property to be added. + +Object type, one of the FcType enumerated values + +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. + + + +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 + + +pattern = FcPatternBuild (0, FC_FAMILY, FcTypeString, "Times", (char *) 0); + + +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 result +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: + + +Patterns without a specified style or weight are set to Medium + + +Patterns without a specified style or slant are set to Roman + + +Patterns without a specified pixel size are given one computed from any +specified point size (default 12), dpi (default 75) and scale (default 1). + + +@@ + +@RET@ FcPattern * +@FUNC@ FcNameParse +@TYPE1@ const FcChar8 * @ARG1@ name +@PURPOSE@ Parse a pattern string +@DESC@ +Converts name from the standard text format described above into a pattern. +@@ + +@RET@ FcChar8 * +@FUNC@ FcNameUnparse +@TYPE1@ FcPattern * @ARG1@ pat +@PURPOSE@ Convert a pattern back into a string that can be parsed +@DESC@ +Converts the given pattern into the standard text format described above. +The return value is not static, but instead refers to newly allocated memory +which should be freed by the caller using free(). +@@ diff --git a/fontconfig/doc/fcstring.fncs b/fontconfig/doc/fcstring.fncs index f30549308..0412bbd1a 100644 --- a/fontconfig/doc/fcstring.fncs +++ b/fontconfig/doc/fcstring.fncs @@ -1,244 +1,244 @@ -/* - * fontconfig/doc/fcstring.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - - -@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 src into -dst and returns the number of bytes containing the -char. src must be at least -len 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 src into -dst 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 len bytes of -src. Places that count in -nchar. wchar contains 1, 2 or -4 depending on the number of bytes needed to hold the largest Unicode char -counted. The return value indicates whether src 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 src into -dst and returns the number of bytes containing the -char. src must be at least len -bytes long. Bytes of src are combined into 16-bit -units according to endian. -@@ - -@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 len bytes of -src. Bytes of src are -combined into 16-bit units according to endian. -Places that count in nchar. -wchar contains 1, 2 or 4 depending on the number of -bytes needed to hold the largest Unicode char counted. The return value -indicates whether string 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 c 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 c 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 c to the -equivalent lower case letter. -@@ - -@RET@ FcChar8 * -@FUNC@ FcStrCopy -@TYPE1@ const FcChar8 * @ARG1@ s -@PURPOSE@ duplicate a string -@DESC@ -Allocates memory, copies s and returns the resulting -buffer. Yes, this is strdup, 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 s, 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@ -FcStrCopyFilename constructs an absolute pathname from -s. 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 FcConfigEnableHome). -@@ - -@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 -s1 and s2. -@@ - -@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 -s1 and s2. 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 s2 in -s1. Returns NULL if s2 -is not present in s1. 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 s2 in -s1, ignoring case. Returns NULL if -s2 is not present in s1. -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 -s1 and s2 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 file. 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 file 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. + */ + + +@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 src into +dst and returns the number of bytes containing the +char. src must be at least +len 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 src into +dst 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 len bytes of +src. Places that count in +nchar. wchar contains 1, 2 or +4 depending on the number of bytes needed to hold the largest Unicode char +counted. The return value indicates whether src 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 src into +dst and returns the number of bytes containing the +char. src must be at least len +bytes long. Bytes of src are combined into 16-bit +units according to endian. +@@ + +@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 len bytes of +src. Bytes of src are +combined into 16-bit units according to endian. +Places that count in nchar. +wchar contains 1, 2 or 4 depending on the number of +bytes needed to hold the largest Unicode char counted. The return value +indicates whether string 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 c 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 c 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 c to the +equivalent lower case letter. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrCopy +@TYPE1@ const FcChar8 * @ARG1@ s +@PURPOSE@ duplicate a string +@DESC@ +Allocates memory, copies s and returns the resulting +buffer. Yes, this is strdup, 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 s, 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@ +FcStrCopyFilename constructs an absolute pathname from +s. 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 FcConfigEnableHome). +@@ + +@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 +s1 and s2. +@@ + +@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 +s1 and s2. 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 s2 in +s1. Returns NULL if s2 +is not present in s1. 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 s2 in +s1, ignoring case. Returns NULL if +s2 is not present in s1. +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 +s1 and s2 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 file. 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 file stripped of any leading +directory names. This is returned in newly allocated storage which should +be freed when no longer needed. +@@ diff --git a/fontconfig/doc/fcstrset.fncs b/fontconfig/doc/fcstrset.fncs index 65ec08908..737347b00 100644 --- a/fontconfig/doc/fcstrset.fncs +++ b/fontconfig/doc/fcstrset.fncs @@ -1,115 +1,115 @@ -/* - * fontconfig/doc/fcstrset.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - - -@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 s is a member of -set. -@@ - -@RET@ FcBool -@FUNC@ FcStrSetEqual -@TYPE1@ FcStrSet * @ARG1@ set_a -@TYPE2@ FcStrSet * @ARG2@ set_b -@PURPOSE@ check sets for equality -@DESC@ -Returns whether set_a contains precisely the same -strings as set_b. 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 s to set. -@@ - -@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 s to set, 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 s from set, returning -FcTrue if s was a member else FcFalse. -@@ - -@RET@ void -@FUNC@ FcStrSetDestroy -@TYPE1@ FcStrSet * @ARG1@ set -@PURPOSE@ destroy a string set -@DESC@ -Destroys set. -@@ - -@RET@ FcStrList * -@FUNC@ FcStrListCreate -@TYPE1@ FcStrSet * @ARG1@ set -@PURPOSE@ create a string iterator -@DESC@ -Creates an iterator to list the strings in set. -@@ - -@RET@ FcChar8 * -@FUNC@ FcStrListNext -@TYPE1@ FcStrList * @ARG1@ list -@PURPOSE@ get next string in iteration -@DESC@ -Returns the next string in set. -@@ - -@RET@ void -@FUNC@ FcStrListDone -@TYPE1@ FcStrList * @ARG1@ list -@PURPOSE@ destroy a string iterator -@DESC@ -Destroys the enumerator list. -@@ +/* + * 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. + */ + + +@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 s is a member of +set. +@@ + +@RET@ FcBool +@FUNC@ FcStrSetEqual +@TYPE1@ FcStrSet * @ARG1@ set_a +@TYPE2@ FcStrSet * @ARG2@ set_b +@PURPOSE@ check sets for equality +@DESC@ +Returns whether set_a contains precisely the same +strings as set_b. 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 s to set. +@@ + +@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 s to set, 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 s from set, returning +FcTrue if s was a member else FcFalse. +@@ + +@RET@ void +@FUNC@ FcStrSetDestroy +@TYPE1@ FcStrSet * @ARG1@ set +@PURPOSE@ destroy a string set +@DESC@ +Destroys set. +@@ + +@RET@ FcStrList * +@FUNC@ FcStrListCreate +@TYPE1@ FcStrSet * @ARG1@ set +@PURPOSE@ create a string iterator +@DESC@ +Creates an iterator to list the strings in set. +@@ + +@RET@ FcChar8 * +@FUNC@ FcStrListNext +@TYPE1@ FcStrList * @ARG1@ list +@PURPOSE@ get next string in iteration +@DESC@ +Returns the next string in set. +@@ + +@RET@ void +@FUNC@ FcStrListDone +@TYPE1@ FcStrList * @ARG1@ list +@PURPOSE@ destroy a string iterator +@DESC@ +Destroys the enumerator list. +@@ diff --git a/fontconfig/doc/fcvalue.fncs b/fontconfig/doc/fcvalue.fncs index 2563a2557..83a5b3aa9 100644 --- a/fontconfig/doc/fcvalue.fncs +++ b/fontconfig/doc/fcvalue.fncs @@ -1,61 +1,61 @@ -/* - * fontconfig/doc/fcvalue.fncs - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ -@RET@ void -@FUNC@ FcValueDestroy -@TYPE1@ FcValue% @ARG1@ v -@PURPOSE@ Free a value -@DESC@ -Frees any memory referenced by v. 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 v duplicating any object referenced by it so that v -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 v 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 v. 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 v duplicating any object referenced by it so that v +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 v to +stdout. The format should not be considered part of the library +specification as it may change in the future. +@@ + +@RET@ FcBool +@FUNC@ FcValueEqual +@TYPE1@ FcValue% @ARG1@ v_a +@TYPE2@ FcValue% @ARG2@ v_b +@PURPOSE@ Test two values for equality +@DESC@ +Compares two values. Integers and Doubles are compared as numbers; otherwise +the two values have to be the same type to be considered equal. Strings are +compared ignoring case. +@@ diff --git a/fontconfig/doc/fontconfig-devel.sgml b/fontconfig/doc/fontconfig-devel.sgml index 52675e267..87339511c 100644 --- a/fontconfig/doc/fontconfig-devel.sgml +++ b/fontconfig/doc/fontconfig-devel.sgml @@ -1,573 +1,573 @@ - - - - - - - - - - - - - - - - - - - - - -]> - -
- Fontconfig Developers Reference, Version &version; - - - Keith - Packard - - HP Cambridge Research Lab - - - KRP - Fontconfig - &version; - - -Copyright © 2002 Keith Packard - -Permission to use, copy, modify, distribute, and sell this software and its -documentation for any purpose is hereby granted without fee, provided that -the above copyright notice appear in all copies and that both that -copyright notice and this permission notice appear in supporting -documentation, and that the name of the author(s) not be used in -advertising or publicity pertaining to distribution of the software without -specific, written prior permission. The authors make no -representations about the suitability of this software for any purpose. It -is provided "as is" without express or implied warranty. - -THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. - - - -DESCRIPTION - -Fontconfig is a library designed to provide system-wide font configuration, -customization and application access. - - -FUNCTIONAL OVERVIEW - -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. - - FONT CONFIGURATION - -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. - -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. - -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. - - - - FONT PROPERTIES - -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. - - - 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 - - - -Datatypes - -Fontconfig uses abstract data types to hide internal implementation details -for most data structures. A few structures are exposed where appropriate. - - FcChar8, FcChar16, FcChar32, FcBool - -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. - - - FcMatrix - -An FcMatrix holds an affine transformation, usually used to reshape glyphs. -A small set of matrix operations are provided to manipulate these. - - typedef struct _FcMatrix { - double xx, xy, yx, yy; - } FcMatrix; - - - - FcCharSet - -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. - - - FcLangSet - -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. - - - FcLangResult - -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. - - - FcType - -Tags the kind of data stored in an FcValue. - - - FcValue - -An FcValue object holds a single value with one of a number of different -types. The 'type' tag indicates which member is valid. - - 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; - - - 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 * - - - - FcPattern - -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. - - - FcFontSet - - - typedef struct _FcFontSet { - int nfont; - int sfont; - FcPattern **fonts; - } FcFontSet; - -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. - - - FcStrSet, FcStrList - -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. - - - FcObjectSet - - - typedef struct _FcObjectSet { - int nobject; - int sobject; - const char **objects; - } FcObjectSet; - -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. - - - FcObjectType - - - typedef struct _FcObjectType { - const char *object; - FcType type; - } FcObjectType; - -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. - - - FcConstant - - - typedef struct _FcConstant { - const FcChar8 *name; - const char *object; - int value; - } FcConstant; - -Provides for symbolic constants for new pattern elements. When 'name' is -seen in a font name, an 'object' element is created with value 'value'. - - - FcBlanks - -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. - - - FcFileCache - -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. - - - FcConfig - -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. - - - FcSetName - -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. - - - FcResult - -Used as a return type for functions manipulating FcPattern objects. - - 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 - - - - FcAtomic - -Used for locking access to configuration files. Provides a safe way to update -configuration files. - - - FcCache - -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. - - - -FUNCTIONS - -These are grouped by functionality, often using the main data type being -manipulated. - - Initialization - -These functions provide some control over how the library is initialized. - - &fcinit; - - FcPattern - -An FcPattern is an opaque type that holds both patterns to match against the -available fonts, as well as the information about each font. - - &fcpattern; - &fcformat; - - FcFontSet - -An FcFontSet simply holds a list of patterns; these are used to return the -results of listing available fonts. - - &fcfontset; - - FcObjectSet - -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. - - &fcobjectset; - - FreeType specific functions - -While the fontconfig library doesn't insist that FreeType be used as the -rasterization mechanism for fonts, it does provide some convenience -functions. - - &fcfreetype; - - FcValue - -FcValue is a structure containing a type tag and a union of all possible -datatypes. The tag is an enum of type -FcType -and is intended to provide a measure of run-time -typechecking, although that depends on careful programming. - - &fcvalue; - - FcCharSet - -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. - - &fccharset; - - FcLangSet - -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. - - &fclangset; - - FcMatrix - -FcMatrix structures hold an affine transformation in matrix form. - - &fcmatrix; - - FcConfig - -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. - - &fcconfig; - - FcObjectType - -Provides for application-specified font name object types so that new -pattern elements can be generated from font names. - - &fcobjecttype; - - FcConstant - -Provides for application-specified symbolic constants for font names. - - &fcconstant; - - FcBlanks - -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. - - &fcblanks; - - FcAtomic - -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. - - &fcatomic; - - File and Directory routines - -These routines work with font files and directories, including font -directory cache files. - - &fcfile; - &fcdircache; - - FcCache routines - -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. - - &fccache; - - FcStrSet and FcStrList - -A data structure for enumerating strings, used to list directories while -scanning the configuration as directories are added while scanning. - - &fcstrset; - - String utilities - -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. - - &fcstring; - - -
+ + + + + + + + + + + + + + + + + + + + + +]> + +
+ Fontconfig Developers Reference, Version &version; + + + Keith + Packard + + HP Cambridge Research Lab + + + KRP + Fontconfig + &version; + + +Copyright © 2002 Keith Packard + +Permission to use, copy, modify, distribute, and sell this software and its +documentation for any purpose is hereby granted without fee, provided that +the above copyright notice appear in all copies and that both that +copyright notice and this permission notice appear in supporting +documentation, and that the name of the author(s) not be used in +advertising or publicity pertaining to distribution of the software without +specific, written prior permission. The authors make no +representations about the suitability of this software for any purpose. It +is provided "as is" without express or implied warranty. + +THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. + + + +DESCRIPTION + +Fontconfig is a library designed to provide system-wide font configuration, +customization and application access. + + +FUNCTIONAL OVERVIEW + +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. + + FONT CONFIGURATION + +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. + +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. + +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. + + + + FONT PROPERTIES + +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. + + + 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 + + + +Datatypes + +Fontconfig uses abstract data types to hide internal implementation details +for most data structures. A few structures are exposed where appropriate. + + FcChar8, FcChar16, FcChar32, FcBool + +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. + + + FcMatrix + +An FcMatrix holds an affine transformation, usually used to reshape glyphs. +A small set of matrix operations are provided to manipulate these. + + typedef struct _FcMatrix { + double xx, xy, yx, yy; + } FcMatrix; + + + + FcCharSet + +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. + + + FcLangSet + +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. + + + FcLangResult + +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. + + + FcType + +Tags the kind of data stored in an FcValue. + + + FcValue + +An FcValue object holds a single value with one of a number of different +types. The 'type' tag indicates which member is valid. + + 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; + + + 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 * + + + + FcPattern + +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. + + + FcFontSet + + + typedef struct _FcFontSet { + int nfont; + int sfont; + FcPattern **fonts; + } FcFontSet; + +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. + + + FcStrSet, FcStrList + +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. + + + FcObjectSet + + + typedef struct _FcObjectSet { + int nobject; + int sobject; + const char **objects; + } FcObjectSet; + +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. + + + FcObjectType + + + typedef struct _FcObjectType { + const char *object; + FcType type; + } FcObjectType; + +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. + + + FcConstant + + + typedef struct _FcConstant { + const FcChar8 *name; + const char *object; + int value; + } FcConstant; + +Provides for symbolic constants for new pattern elements. When 'name' is +seen in a font name, an 'object' element is created with value 'value'. + + + FcBlanks + +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. + + + FcFileCache + +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. + + + FcConfig + +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. + + + FcSetName + +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. + + + FcResult + +Used as a return type for functions manipulating FcPattern objects. + + 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 + + + + FcAtomic + +Used for locking access to configuration files. Provides a safe way to update +configuration files. + + + FcCache + +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. + + + +FUNCTIONS + +These are grouped by functionality, often using the main data type being +manipulated. + + Initialization + +These functions provide some control over how the library is initialized. + + &fcinit; + + FcPattern + +An FcPattern is an opaque type that holds both patterns to match against the +available fonts, as well as the information about each font. + + &fcpattern; + &fcformat; + + FcFontSet + +An FcFontSet simply holds a list of patterns; these are used to return the +results of listing available fonts. + + &fcfontset; + + FcObjectSet + +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. + + &fcobjectset; + + FreeType specific functions + +While the fontconfig library doesn't insist that FreeType be used as the +rasterization mechanism for fonts, it does provide some convenience +functions. + + &fcfreetype; + + FcValue + +FcValue is a structure containing a type tag and a union of all possible +datatypes. The tag is an enum of type +FcType +and is intended to provide a measure of run-time +typechecking, although that depends on careful programming. + + &fcvalue; + + FcCharSet + +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. + + &fccharset; + + FcLangSet + +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. + + &fclangset; + + FcMatrix + +FcMatrix structures hold an affine transformation in matrix form. + + &fcmatrix; + + FcConfig + +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. + + &fcconfig; + + FcObjectType + +Provides for application-specified font name object types so that new +pattern elements can be generated from font names. + + &fcobjecttype; + + FcConstant + +Provides for application-specified symbolic constants for font names. + + &fcconstant; + + FcBlanks + +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. + + &fcblanks; + + FcAtomic + +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. + + &fcatomic; + + File and Directory routines + +These routines work with font files and directories, including font +directory cache files. + + &fcfile; + &fcdircache; + + FcCache routines + +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. + + &fccache; + + FcStrSet and FcStrList + +A data structure for enumerating strings, used to list directories while +scanning the configuration as directories are added while scanning. + + &fcstrset; + + String utilities + +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. + + &fcstring; + + +
diff --git a/fontconfig/doc/fontconfig-user.sgml b/fontconfig/doc/fontconfig-user.sgml index efa01aa58..217feb97a 100644 --- a/fontconfig/doc/fontconfig-user.sgml +++ b/fontconfig/doc/fontconfig-user.sgml @@ -1,704 +1,704 @@ - - -]> - - - - fonts-conf - 5 - - - fonts.conf - Font configuration files - - - - &confdir;/fonts.conf - &confdir;/fonts.dtd - &confdir;/conf.d - ~/.fonts.conf.d - ~/.fonts.conf - - -Description - -Fontconfig is a library designed to provide system-wide font configuration, -customization and application access. - - -Functional Overview - -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. - - Font Configuration - -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. - -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. - -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. - - - - Font Properties - -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. - - - 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 - - - - Font Matching - -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. - -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. - -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. - -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. - -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. - -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. - -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. - -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. - -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. - - - Font Names - -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: - - - <families>-<point sizes>:<name1>=<values1>:<name2>=<values2>... - - -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: - - - 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 - - -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. - - - -Debugging Applications - -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. - - - 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 - - -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. - - -Lang Tags - -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. - -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. - -For languages used in multiple territories with radically different -character sets, fontconfig includes per-territory orthographies. This -includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese. - - -Configuration File Format - -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. - -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: - - <?xml version="1.0"?> - <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> - <fontconfig> - ... - </fontconfig> - - -<literal><fontconfig></literal> -This is the top level element for a font configuration and can contain -<dir>, <cache>, <include>, <match> and <alias> elements in any order. - - <literal><dir></literal> -This element contains a directory name which will be scanned for font files -to include in the set of available fonts. - - <literal><cache></literal> -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-<version>'', where <version> is the font configuration -file version number (currently 2). - - <literal><include ignore_missing="no"></literal> -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. - - <literal><config></literal> -This element provides a place to consolidate additional configuration -information. <config> can contain <blank> and <rescan> elements in any -order. - - <literal><blank></literal> -Fonts often include "broken" glyphs which appear in the encoding but are -drawn as blanks on the screen. Within the <blank> element, place each -Unicode characters which is supposed to be blank in an <int> element. -Characters outside of this set which are drawn as blank will be elided from -the set of characters supported by the font. - - <literal><rescan></literal> -The <rescan> element holds an <int> 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. - - <literal><selectfont></literal> -This element is used to black/white list fonts from being listed or matched -against. It holds acceptfont and rejectfont elements. - - <literal><acceptfont></literal> -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. - - <literal><rejectfont></literal> -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. - - <literal><glob></literal> -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. - - <literal><pattern></literal> -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. - - <literal><patelt name="property"></literal> -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. - - <literal><match target="pattern"></literal> -This element holds first a (possibly empty) list of <test> elements and then -a (possibly empty) list of <edit> 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. - - <literal><test qual="any" name="property" target="default" compare="eq"></literal> -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. - - <literal><edit name="property" mode="assign" binding="weak"></literal> -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 <test> 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: - - 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 - - - <literal><int></literal>, <literal><double></literal>, <literal><string></literal>, <literal><bool></literal> -These elements hold a single value of the indicated type. <bool> -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). - - <literal><matrix></literal> -This element holds the four <double> elements of an affine -transformation. - - <literal><range></literal> -This element holds the two <int> elements of a range -representation. - - <literal><charset></literal> -This element holds at least one <int> element of -an Unicode code point or more. - - <literal><langset></literal> -This element holds at least one <string> element of -a RFC-3066-style languages or more. - - <literal><name></literal> -Holds a property name. Evaluates to the first value from the property of -the font, not the pattern. - - <literal><const></literal> -Holds the name of a constant; these are always integers and serve as -symbolic names for common font values: - - 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 - - - - - <literal><or></literal>, <literal><and></literal>, <literal><plus></literal>, <literal><minus></literal>, <literal><times></literal>, <literal><divide></literal> - -These elements perform the specified operation on a list of expression -elements. <or> and <and> are boolean, not bitwise. - - - - <literal><eq></literal>, <literal><not_eq></literal>, <literal><less></literal>, <literal><less_eq></literal>, <literal><more></literal>, <literal><more_eq></literal> - -These elements compare two values, producing a boolean result. - - <literal><not></literal> -Inverts the boolean sense of its one expression element - - <literal><if></literal> -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. - - <literal><alias></literal> -Alias elements provide a shorthand notation for the set of common match -operations needed to substitute one font family for another. They contain a -<family> element followed by optional <prefer>, <accept> and <default> -elements. Fonts matching the <family> element are edited to prepend the -list of <prefer>ed families before the matching <family>, append the -<accept>able families after the matching <family> and append the <default> -families to the end of the family list. - - <literal><family></literal> -Holds a single font family name - - <literal><prefer></literal>, <literal><accept></literal>, <literal><default></literal> -These hold a list of <family> elements to be used by the <alias> element. - - -EXAMPLE CONFIGURATION FILE - System configuration file - -This is an example of a system-wide configuration file - - -<?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> - - - User configuration file - -This is an example of a per-user configuration file that lives in -~/.fonts.conf - - -<?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> - - - -Files - -fonts.conf -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. - - -conf.d -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. - - -fonts.dtd -is a DTD that describes the format of the configuration files. - - -~/.fonts.conf.d -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. - - -~/.fonts.conf -is the conventional location for per-user font configuration, although the -actual location is specified in the global fonts.conf file. - - - ~/.fonts.cache-* -is the conventional repository of font information that isn't found in the -per-directory caches. This file is automatically maintained by fontconfig. - - -See Also - -fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1) - - -Version - -Fontconfig version &version; - - - + + +]> + + + + fonts-conf + 5 + + + fonts.conf + Font configuration files + + + + &confdir;/fonts.conf + &confdir;/fonts.dtd + &confdir;/conf.d + ~/.fonts.conf.d + ~/.fonts.conf + + +Description + +Fontconfig is a library designed to provide system-wide font configuration, +customization and application access. + + +Functional Overview + +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. + + Font Configuration + +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. + +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. + +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. + + + + Font Properties + +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. + + + 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 + + + + Font Matching + +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. + +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. + +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. + +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. + +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. + +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. + +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. + +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. + +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. + + + Font Names + +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: + + + <families>-<point sizes>:<name1>=<values1>:<name2>=<values2>... + + +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: + + + 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 + + +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. + + + +Debugging Applications + +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. + + + 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 + + +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. + + +Lang Tags + +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. + +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. + +For languages used in multiple territories with radically different +character sets, fontconfig includes per-territory orthographies. This +includes Azerbaijani, Kurdish, Pashto, Tigrinya and Chinese. + + +Configuration File Format + +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. + +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: + + <?xml version="1.0"?> + <!DOCTYPE fontconfig SYSTEM "fonts.dtd"> + <fontconfig> + ... + </fontconfig> + + +<literal><fontconfig></literal> +This is the top level element for a font configuration and can contain +<dir>, <cache>, <include>, <match> and <alias> elements in any order. + + <literal><dir></literal> +This element contains a directory name which will be scanned for font files +to include in the set of available fonts. + + <literal><cache></literal> +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-<version>'', where <version> is the font configuration +file version number (currently 2). + + <literal><include ignore_missing="no"></literal> +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. + + <literal><config></literal> +This element provides a place to consolidate additional configuration +information. <config> can contain <blank> and <rescan> elements in any +order. + + <literal><blank></literal> +Fonts often include "broken" glyphs which appear in the encoding but are +drawn as blanks on the screen. Within the <blank> element, place each +Unicode characters which is supposed to be blank in an <int> element. +Characters outside of this set which are drawn as blank will be elided from +the set of characters supported by the font. + + <literal><rescan></literal> +The <rescan> element holds an <int> 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. + + <literal><selectfont></literal> +This element is used to black/white list fonts from being listed or matched +against. It holds acceptfont and rejectfont elements. + + <literal><acceptfont></literal> +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. + + <literal><rejectfont></literal> +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. + + <literal><glob></literal> +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. + + <literal><pattern></literal> +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. + + <literal><patelt name="property"></literal> +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. + + <literal><match target="pattern"></literal> +This element holds first a (possibly empty) list of <test> elements and then +a (possibly empty) list of <edit> 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. + + <literal><test qual="any" name="property" target="default" compare="eq"></literal> +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. + + <literal><edit name="property" mode="assign" binding="weak"></literal> +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 <test> 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: + + 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 + + + <literal><int></literal>, <literal><double></literal>, <literal><string></literal>, <literal><bool></literal> +These elements hold a single value of the indicated type. <bool> +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). + + <literal><matrix></literal> +This element holds the four <double> elements of an affine +transformation. + + <literal><range></literal> +This element holds the two <int> elements of a range +representation. + + <literal><charset></literal> +This element holds at least one <int> element of +an Unicode code point or more. + + <literal><langset></literal> +This element holds at least one <string> element of +a RFC-3066-style languages or more. + + <literal><name></literal> +Holds a property name. Evaluates to the first value from the property of +the font, not the pattern. + + <literal><const></literal> +Holds the name of a constant; these are always integers and serve as +symbolic names for common font values: + + 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 + + + + + <literal><or></literal>, <literal><and></literal>, <literal><plus></literal>, <literal><minus></literal>, <literal><times></literal>, <literal><divide></literal> + +These elements perform the specified operation on a list of expression +elements. <or> and <and> are boolean, not bitwise. + + + + <literal><eq></literal>, <literal><not_eq></literal>, <literal><less></literal>, <literal><less_eq></literal>, <literal><more></literal>, <literal><more_eq></literal> + +These elements compare two values, producing a boolean result. + + <literal><not></literal> +Inverts the boolean sense of its one expression element + + <literal><if></literal> +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. + + <literal><alias></literal> +Alias elements provide a shorthand notation for the set of common match +operations needed to substitute one font family for another. They contain a +<family> element followed by optional <prefer>, <accept> and <default> +elements. Fonts matching the <family> element are edited to prepend the +list of <prefer>ed families before the matching <family>, append the +<accept>able families after the matching <family> and append the <default> +families to the end of the family list. + + <literal><family></literal> +Holds a single font family name + + <literal><prefer></literal>, <literal><accept></literal>, <literal><default></literal> +These hold a list of <family> elements to be used by the <alias> element. + + +EXAMPLE CONFIGURATION FILE + System configuration file + +This is an example of a system-wide configuration file + + +<?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> + + + User configuration file + +This is an example of a per-user configuration file that lives in +~/.fonts.conf + + +<?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> + + + +Files + +fonts.conf +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. + + +conf.d +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. + + +fonts.dtd +is a DTD that describes the format of the configuration files. + + +~/.fonts.conf.d +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. + + +~/.fonts.conf +is the conventional location for per-user font configuration, although the +actual location is specified in the global fonts.conf file. + + + ~/.fonts.cache-* +is the conventional repository of font information that isn't found in the +per-directory caches. This file is automatically maintained by fontconfig. + + +See Also + +fc-cat(1), fc-cache(1), fc-list(1), fc-match(1), fc-query(1) + + +Version + +Fontconfig version &version; + + + diff --git a/fontconfig/doc/func.sgml b/fontconfig/doc/func.sgml index 7fb38ab4a..88be32047 100644 --- a/fontconfig/doc/func.sgml +++ b/fontconfig/doc/func.sgml @@ -1,90 +1,90 @@ - -@?TITLE@ - -@:@ - -@;@ - -@?TITLE@ - @TITLE@ -@:@ - @FUNC@ -@;@ - 3 - - -@{PROTOTYPE@ - @FUNC@ -@}PROTOTYPE@ - @PURPOSE@ - - - - -@?SYNOPSIS@ -@SYNOPSIS@ -@:@ -#include <fontconfig.h> -@;@ - -@{PROTOTYPE@ - - @?RET@@RET@@:@void@;@ @FUNC@ -@?TYPE1@ - @TYPE1@@ARG1@ -@;@ -@?TYPE2@ - @TYPE2@@ARG2@ -@;@ -@?TYPE3@ - @TYPE3@@ARG3@ -@;@ -@?TYPE4@ - @TYPE4@@ARG4@ -@;@ -@?TYPE5@ - @TYPE5@@ARG5@ -@;@ -@?TYPE6@ - @TYPE6@@ARG6@ -@;@ -@?TYPE7@ - @TYPE7@@ARG7@ -@;@ - -@}PROTOTYPE@ - - - Description - -@DESC@ - - - Version - -Fontconfig version &version; - - - + +@?TITLE@ + +@:@ + +@;@ + +@?TITLE@ + @TITLE@ +@:@ + @FUNC@ +@;@ + 3 + + +@{PROTOTYPE@ + @FUNC@ +@}PROTOTYPE@ + @PURPOSE@ + + + + +@?SYNOPSIS@ +@SYNOPSIS@ +@:@ +#include <fontconfig.h> +@;@ + +@{PROTOTYPE@ + + @?RET@@RET@@:@void@;@ @FUNC@ +@?TYPE1@ + @TYPE1@@ARG1@ +@;@ +@?TYPE2@ + @TYPE2@@ARG2@ +@;@ +@?TYPE3@ + @TYPE3@@ARG3@ +@;@ +@?TYPE4@ + @TYPE4@@ARG4@ +@;@ +@?TYPE5@ + @TYPE5@@ARG5@ +@;@ +@?TYPE6@ + @TYPE6@@ARG6@ +@;@ +@?TYPE7@ + @TYPE7@@ARG7@ +@;@ + +@}PROTOTYPE@ + + + Description + +@DESC@ + + + Version + +Fontconfig version &version; + + + diff --git a/fontconfig/doc/version.sgml.in b/fontconfig/doc/version.sgml.in index 95d4088ad..13315ba6d 100644 --- a/fontconfig/doc/version.sgml.in +++ b/fontconfig/doc/version.sgml.in @@ -1,24 +1,24 @@ - -@VERSION@ + +@VERSION@ diff --git a/fontconfig/fc-cache/Makefile.am b/fontconfig/fc-cache/Makefile.am index 4402d8952..300c96697 100644 --- a/fontconfig/fc-cache/Makefile.am +++ b/fontconfig/fc-cache/Makefile.am @@ -1,68 +1,68 @@ -# -# fontconfig/fc-cache/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -DOC2MAN = docbook2man - -FC_CACHE_SRC=${top_srcdir}/fc-cache - -SGML = ${FC_CACHE_SRC}/fc-cache.sgml - -if OS_WIN32 -else -install-data-local: - -$(mkinstalldirs) "$(DESTDIR)$(fc_cachedir)" - -uninstall-local: - -$(RM) -rf "$(DESTDIR)$(fc_cachedir)" -endif - -INCLUDES=-I${top_srcdir} -I${top_srcdir}/src $(WARN_CFLAGS) - -bin_PROGRAMS=fc-cache - -BUILT_MANS=fc-cache.1 - -if ENABLE_DOCS -man_MANS=${BUILT_MANS} -endif - -EXTRA_DIST=fc-cache.sgml $(BUILT_MANS) - -fc_cache_LDADD = ${top_builddir}/src/libfontconfig.la - -if USEDOCBOOK - -${man_MANS}: ${SGML} - $(RM) $@ - $(DOC2MAN) ${SGML} - $(RM) manpage.* - -all-local: $(man_MANS) - -clean-local: - $(RM) $(man_MANS) - -else -all-local: -clean-local: -endif +# +# fontconfig/fc-cache/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC2MAN = docbook2man + +FC_CACHE_SRC=${top_srcdir}/fc-cache + +SGML = ${FC_CACHE_SRC}/fc-cache.sgml + +if OS_WIN32 +else +install-data-local: + -$(mkinstalldirs) "$(DESTDIR)$(fc_cachedir)" + +uninstall-local: + -$(RM) -rf "$(DESTDIR)$(fc_cachedir)" +endif + +INCLUDES=-I${top_srcdir} -I${top_srcdir}/src $(WARN_CFLAGS) + +bin_PROGRAMS=fc-cache + +BUILT_MANS=fc-cache.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-cache.sgml $(BUILT_MANS) + +fc_cache_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-cache/fc-cache.c b/fontconfig/fc-cache/fc-cache.c index c7dcbbfd7..d2653507e 100644 --- a/fontconfig/fc-cache/fc-cache.c +++ b/fontconfig/fc-cache/fc-cache.c @@ -1,472 +1,472 @@ -/* - * fontconfig/fc-cache/fc-cache.c - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "../src/fcarch.h" - -#ifdef HAVE_CONFIG_H -#include -#else -#ifdef linux -#define HAVE_GETOPT_LONG 1 -#endif -#define HAVE_GETOPT 1 -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#if defined (_WIN32) -#define STRICT -#include -#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 -const struct option longopts[] = { - {"force", 0, 0, 'f'}, - {"really-force", 0, 0, 'r'}, - {"system-only", 0, 0, 's'}, - {"version", 0, 0, 'V'}, - {"verbose", 0, 0, 'v'}, - {"help", 0, 0, 'h'}, - {NULL,0,0,0}, -}; -#else -#if HAVE_GETOPT -extern char *optarg; -extern int optind, opterr, optopt; -#endif -#endif - -static void -usage (char *program, int error) -{ - FILE *file = error ? stderr : stdout; -#if HAVE_GETOPT_LONG - fprintf (file, "usage: %s [-frsvVh] [--force|--really-force] [--system-only] [--verbose] [--version] [--help] [dirs]\n", - program); -#else - fprintf (file, "usage: %s [-frsvVh] [dirs]\n", - program); -#endif - fprintf (file, "Build font information caches in [dirs]\n" - "(all directories in font configuration by default).\n"); - fprintf (file, "\n"); -#if HAVE_GETOPT_LONG - fprintf (file, " -f, --force scan directories with apparently valid caches\n"); - fprintf (file, " -r, --really-force erase all existing caches, then rescan\n"); - fprintf (file, " -s, --system-only scan system-wide directories only\n"); - fprintf (file, " -v, --verbose display status information while busy\n"); - fprintf (file, " -V, --version display font config version and exit\n"); - fprintf (file, " -h, --help display this help and exit\n"); -#else - fprintf (file, " -f (force) scan directories with apparently valid caches\n"); - fprintf (file, " -r, (really force) erase all existing caches, then rescan\n"); - fprintf (file, " -s (system) scan system-wide directories only\n"); - fprintf (file, " -v (verbose) display status information while busy\n"); - fprintf (file, " -V (version) display font config version and exit\n"); - fprintf (file, " -h (help) display this help and exit\n"); -#endif - exit (error); -} - -static FcStrSet *processed_dirs; - -static int -scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, int *changed) -{ - int ret = 0; - const FcChar8 *dir; - FcStrSet *subdirs; - FcStrList *sublist; - FcCache *cache; - struct stat statb; - FcBool was_valid; - int i; - - /* - * Now scan all of the directories into separate databases - * and write out the results - */ - while ((dir = FcStrListNext (list))) - { - if (verbose) - { - printf ("%s: ", dir); - fflush (stdout); - } - - if (!dir) - { - if (verbose) - printf ("skipping, no such directory\n"); - continue; - } - - if (FcStrSetMember (processed_dirs, dir)) - { - if (verbose) - printf ("skipping, looped directory detected\n"); - continue; - } - - if (stat ((char *) dir, &statb) == -1) - { - switch (errno) { - case ENOENT: - case ENOTDIR: - if (verbose) - printf ("skipping, no such directory\n"); - break; - default: - fprintf (stderr, "\"%s\": ", dir); - perror (""); - ret++; - break; - } - continue; - } - - if (!S_ISDIR (statb.st_mode)) - { - fprintf (stderr, "\"%s\": not a directory, skipping\n", dir); - continue; - } - - if (really_force) - FcDirCacheUnlink (dir, config); - - cache = NULL; - was_valid = FcFalse; - if (!force) { - cache = FcDirCacheLoad (dir, config, NULL); - if (cache) - was_valid = FcTrue; - } - - if (!cache) - { - (*changed)++; - cache = FcDirCacheRead (dir, FcTrue, config); - if (!cache) - { - fprintf (stderr, "%s: error scanning\n", dir); - ret++; - continue; - } - } - - if (was_valid) - { - if (verbose) - printf ("skipping, existing cache is valid: %d fonts, %d dirs\n", - FcCacheNumFont (cache), FcCacheNumSubdir (cache)); - } - else - { - if (verbose) - printf ("caching, new cache contents: %d fonts, %d dirs\n", - FcCacheNumFont (cache), FcCacheNumSubdir (cache)); - - if (!FcDirCacheValid (dir)) - { - fprintf (stderr, "%s: failed to write cache\n", dir); - (void) FcDirCacheUnlink (dir, config); - ret++; - } - } - - subdirs = FcStrSetCreate (); - if (!subdirs) - { - fprintf (stderr, "%s: Can't create subdir set\n", dir); - ret++; - FcDirCacheUnload (cache); - continue; - } - for (i = 0; i < FcCacheNumSubdir (cache); i++) - FcStrSetAdd (subdirs, FcCacheSubdir (cache, i)); - - FcDirCacheUnload (cache); - - sublist = FcStrListCreate (subdirs); - FcStrSetDestroy (subdirs); - if (!sublist) - { - fprintf (stderr, "%s: Can't create subdir list\n", dir); - ret++; - continue; - } - FcStrSetAdd (processed_dirs, dir); - ret += scanDirs (sublist, config, force, really_force, verbose, changed); - } - FcStrListDone (list); - return ret; -} - -static FcBool -cleanCacheDirectory (FcConfig *config, FcChar8 *dir, FcBool verbose) -{ - DIR *d; - struct dirent *ent; - FcChar8 *dir_base; - FcBool ret = FcTrue; - FcBool remove; - FcCache *cache; - struct stat target_stat; - - dir_base = FcStrPlus (dir, (FcChar8 *) "/"); - if (!dir_base) - { - fprintf (stderr, "%s: out of memory\n", dir); - return FcFalse; - } - if (access ((char *) dir, W_OK) != 0) - { - if (verbose) - printf ("%s: not cleaning %s cache directory\n", dir, - access ((char *) dir, F_OK) == 0 ? "unwritable" : "non-existent"); - FcStrFree (dir_base); - return FcTrue; - } - if (verbose) - printf ("%s: cleaning cache directory\n", dir); - d = opendir ((char *) dir); - if (!d) - { - perror ((char *) dir); - FcStrFree (dir_base); - return FcFalse; - } - while ((ent = readdir (d))) - { - FcChar8 *file_name; - const FcChar8 *target_dir; - - if (ent->d_name[0] == '.') - continue; - /* skip cache files for different architectures and */ - /* files which are not cache files at all */ - if (strlen(ent->d_name) != 32 + strlen ("-" FC_ARCHITECTURE FC_CACHE_SUFFIX) || - strcmp(ent->d_name + 32, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX)) - continue; - - file_name = FcStrPlus (dir_base, (FcChar8 *) ent->d_name); - if (!file_name) - { - fprintf (stderr, "%s: allocation failure\n", dir); - ret = FcFalse; - break; - } - remove = FcFalse; - cache = FcDirCacheLoadFile (file_name, NULL); - if (!cache) - { - if (verbose) - printf ("%s: invalid cache file: %s\n", dir, ent->d_name); - remove = FcTrue; - } - else - { - target_dir = FcCacheDir (cache); - if (stat ((char *) target_dir, &target_stat) < 0) - { - if (verbose) - printf ("%s: %s: missing directory: %s \n", - dir, ent->d_name, target_dir); - remove = FcTrue; - } - } - if (remove) - { - if (unlink ((char *) file_name) < 0) - { - perror ((char *) file_name); - ret = FcFalse; - } - } - FcDirCacheUnload (cache); - FcStrFree (file_name); - } - - closedir (d); - FcStrFree (dir_base); - return ret; -} - -static FcBool -cleanCacheDirectories (FcConfig *config, FcBool verbose) -{ - FcStrList *cache_dirs = FcConfigGetCacheDirs (config); - FcChar8 *cache_dir; - FcBool ret = FcTrue; - - if (!cache_dirs) - return FcFalse; - while ((cache_dir = FcStrListNext (cache_dirs))) - { - if (!cleanCacheDirectory (config, cache_dir, verbose)) - { - ret = FcFalse; - break; - } - } - FcStrListDone (cache_dirs); - return ret; -} - -int -main (int argc, char **argv) -{ - FcStrSet *dirs; - FcStrList *list; - FcBool verbose = FcFalse; - FcBool force = FcFalse; - FcBool really_force = FcFalse; - FcBool systemOnly = FcFalse; - FcConfig *config; - int i; - int changed; - int ret; -#if HAVE_GETOPT_LONG || HAVE_GETOPT - int c; - -#if HAVE_GETOPT_LONG - while ((c = getopt_long (argc, argv, "frsVvh", longopts, NULL)) != -1) -#else - while ((c = getopt (argc, argv, "frsVvh")) != -1) -#endif - { - switch (c) { - case 'r': - really_force = FcTrue; - /* fall through */ - case 'f': - force = FcTrue; - break; - case 's': - systemOnly = FcTrue; - break; - case 'V': - fprintf (stderr, "fontconfig version %d.%d.%d\n", - FC_MAJOR, FC_MINOR, FC_REVISION); - exit (0); - case 'v': - verbose = FcTrue; - break; - case 'h': - usage (argv[0], 0); - default: - usage (argv[0], 1); - } - } - i = optind; -#else - i = 1; -#endif - - if (systemOnly) - FcConfigEnableHome (FcFalse); - config = FcInitLoadConfig (); - if (!config) - { - fprintf (stderr, "%s: Can't init font config library\n", argv[0]); - return 1; - } - FcConfigSetCurrent (config); - - if (argv[i]) - { - dirs = FcStrSetCreate (); - if (!dirs) - { - fprintf (stderr, "%s: Can't create list of directories\n", - argv[0]); - return 1; - } - while (argv[i]) - { - if (!FcStrSetAddFilename (dirs, (FcChar8 *) argv[i])) - { - fprintf (stderr, "%s: Can't add directory\n", argv[0]); - return 1; - } - i++; - } - list = FcStrListCreate (dirs); - FcStrSetDestroy (dirs); - } - else - list = FcConfigGetConfigDirs (config); - - if ((processed_dirs = FcStrSetCreate()) == NULL) { - fprintf(stderr, "Cannot malloc\n"); - return 1; - } - - changed = 0; - ret = scanDirs (list, config, force, really_force, verbose, &changed); - - FcStrSetDestroy (processed_dirs); - - cleanCacheDirectories (config, verbose); - - /* - * Now we need to sleep a second (or two, to be extra sure), to make - * sure that timestamps for changes after this run of fc-cache are later - * then any timestamps we wrote. We don't use gettimeofday() because - * sleep(3) can't be interrupted by a signal here -- this isn't in the - * library, and there aren't any signals flying around here. - */ - FcConfigDestroy (config); - FcFini (); - if (changed) - sleep (2); - if (verbose) - printf ("%s: %s\n", argv[0], ret ? "failed" : "succeeded"); - return ret; -} +/* + * fontconfig/fc-cache/fc-cache.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "../src/fcarch.h" + +#ifdef HAVE_CONFIG_H +#include +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#if defined (_WIN32) +#define STRICT +#include +#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 +const struct option longopts[] = { + {"force", 0, 0, 'f'}, + {"really-force", 0, 0, 'r'}, + {"system-only", 0, 0, 's'}, + {"version", 0, 0, 'V'}, + {"verbose", 0, 0, 'v'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-frsvVh] [--force|--really-force] [--system-only] [--verbose] [--version] [--help] [dirs]\n", + program); +#else + fprintf (file, "usage: %s [-frsvVh] [dirs]\n", + program); +#endif + fprintf (file, "Build font information caches in [dirs]\n" + "(all directories in font configuration by default).\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -f, --force scan directories with apparently valid caches\n"); + fprintf (file, " -r, --really-force erase all existing caches, then rescan\n"); + fprintf (file, " -s, --system-only scan system-wide directories only\n"); + fprintf (file, " -v, --verbose display status information while busy\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -f (force) scan directories with apparently valid caches\n"); + fprintf (file, " -r, (really force) erase all existing caches, then rescan\n"); + fprintf (file, " -s (system) scan system-wide directories only\n"); + fprintf (file, " -v (verbose) display status information while busy\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +static FcStrSet *processed_dirs; + +static int +scanDirs (FcStrList *list, FcConfig *config, FcBool force, FcBool really_force, FcBool verbose, int *changed) +{ + int ret = 0; + const FcChar8 *dir; + FcStrSet *subdirs; + FcStrList *sublist; + FcCache *cache; + struct stat statb; + FcBool was_valid; + int i; + + /* + * Now scan all of the directories into separate databases + * and write out the results + */ + while ((dir = FcStrListNext (list))) + { + if (verbose) + { + printf ("%s: ", dir); + fflush (stdout); + } + + if (!dir) + { + if (verbose) + printf ("skipping, no such directory\n"); + continue; + } + + if (FcStrSetMember (processed_dirs, dir)) + { + if (verbose) + printf ("skipping, looped directory detected\n"); + continue; + } + + if (stat ((char *) dir, &statb) == -1) + { + switch (errno) { + case ENOENT: + case ENOTDIR: + if (verbose) + printf ("skipping, no such directory\n"); + break; + default: + fprintf (stderr, "\"%s\": ", dir); + perror (""); + ret++; + break; + } + continue; + } + + if (!S_ISDIR (statb.st_mode)) + { + fprintf (stderr, "\"%s\": not a directory, skipping\n", dir); + continue; + } + + if (really_force) + FcDirCacheUnlink (dir, config); + + cache = NULL; + was_valid = FcFalse; + if (!force) { + cache = FcDirCacheLoad (dir, config, NULL); + if (cache) + was_valid = FcTrue; + } + + if (!cache) + { + (*changed)++; + cache = FcDirCacheRead (dir, FcTrue, config); + if (!cache) + { + fprintf (stderr, "%s: error scanning\n", dir); + ret++; + continue; + } + } + + if (was_valid) + { + if (verbose) + printf ("skipping, existing cache is valid: %d fonts, %d dirs\n", + FcCacheNumFont (cache), FcCacheNumSubdir (cache)); + } + else + { + if (verbose) + printf ("caching, new cache contents: %d fonts, %d dirs\n", + FcCacheNumFont (cache), FcCacheNumSubdir (cache)); + + if (!FcDirCacheValid (dir)) + { + fprintf (stderr, "%s: failed to write cache\n", dir); + (void) FcDirCacheUnlink (dir, config); + ret++; + } + } + + subdirs = FcStrSetCreate (); + if (!subdirs) + { + fprintf (stderr, "%s: Can't create subdir set\n", dir); + ret++; + FcDirCacheUnload (cache); + continue; + } + for (i = 0; i < FcCacheNumSubdir (cache); i++) + FcStrSetAdd (subdirs, FcCacheSubdir (cache, i)); + + FcDirCacheUnload (cache); + + sublist = FcStrListCreate (subdirs); + FcStrSetDestroy (subdirs); + if (!sublist) + { + fprintf (stderr, "%s: Can't create subdir list\n", dir); + ret++; + continue; + } + FcStrSetAdd (processed_dirs, dir); + ret += scanDirs (sublist, config, force, really_force, verbose, changed); + } + FcStrListDone (list); + return ret; +} + +static FcBool +cleanCacheDirectory (FcConfig *config, FcChar8 *dir, FcBool verbose) +{ + DIR *d; + struct dirent *ent; + FcChar8 *dir_base; + FcBool ret = FcTrue; + FcBool remove; + FcCache *cache; + struct stat target_stat; + + dir_base = FcStrPlus (dir, (FcChar8 *) "/"); + if (!dir_base) + { + fprintf (stderr, "%s: out of memory\n", dir); + return FcFalse; + } + if (access ((char *) dir, W_OK) != 0) + { + if (verbose) + printf ("%s: not cleaning %s cache directory\n", dir, + access ((char *) dir, F_OK) == 0 ? "unwritable" : "non-existent"); + FcStrFree (dir_base); + return FcTrue; + } + if (verbose) + printf ("%s: cleaning cache directory\n", dir); + d = opendir ((char *) dir); + if (!d) + { + perror ((char *) dir); + FcStrFree (dir_base); + return FcFalse; + } + while ((ent = readdir (d))) + { + FcChar8 *file_name; + const FcChar8 *target_dir; + + if (ent->d_name[0] == '.') + continue; + /* skip cache files for different architectures and */ + /* files which are not cache files at all */ + if (strlen(ent->d_name) != 32 + strlen ("-" FC_ARCHITECTURE FC_CACHE_SUFFIX) || + strcmp(ent->d_name + 32, "-" FC_ARCHITECTURE FC_CACHE_SUFFIX)) + continue; + + file_name = FcStrPlus (dir_base, (FcChar8 *) ent->d_name); + if (!file_name) + { + fprintf (stderr, "%s: allocation failure\n", dir); + ret = FcFalse; + break; + } + remove = FcFalse; + cache = FcDirCacheLoadFile (file_name, NULL); + if (!cache) + { + if (verbose) + printf ("%s: invalid cache file: %s\n", dir, ent->d_name); + remove = FcTrue; + } + else + { + target_dir = FcCacheDir (cache); + if (stat ((char *) target_dir, &target_stat) < 0) + { + if (verbose) + printf ("%s: %s: missing directory: %s \n", + dir, ent->d_name, target_dir); + remove = FcTrue; + } + } + if (remove) + { + if (unlink ((char *) file_name) < 0) + { + perror ((char *) file_name); + ret = FcFalse; + } + } + FcDirCacheUnload (cache); + FcStrFree (file_name); + } + + closedir (d); + FcStrFree (dir_base); + return ret; +} + +static FcBool +cleanCacheDirectories (FcConfig *config, FcBool verbose) +{ + FcStrList *cache_dirs = FcConfigGetCacheDirs (config); + FcChar8 *cache_dir; + FcBool ret = FcTrue; + + if (!cache_dirs) + return FcFalse; + while ((cache_dir = FcStrListNext (cache_dirs))) + { + if (!cleanCacheDirectory (config, cache_dir, verbose)) + { + ret = FcFalse; + break; + } + } + FcStrListDone (cache_dirs); + return ret; +} + +int +main (int argc, char **argv) +{ + FcStrSet *dirs; + FcStrList *list; + FcBool verbose = FcFalse; + FcBool force = FcFalse; + FcBool really_force = FcFalse; + FcBool systemOnly = FcFalse; + FcConfig *config; + int i; + int changed; + int ret; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "frsVvh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "frsVvh")) != -1) +#endif + { + switch (c) { + case 'r': + really_force = FcTrue; + /* fall through */ + case 'f': + force = FcTrue; + break; + case 's': + systemOnly = FcTrue; + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'v': + verbose = FcTrue; + break; + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (systemOnly) + FcConfigEnableHome (FcFalse); + config = FcInitLoadConfig (); + if (!config) + { + fprintf (stderr, "%s: Can't init font config library\n", argv[0]); + return 1; + } + FcConfigSetCurrent (config); + + if (argv[i]) + { + dirs = FcStrSetCreate (); + if (!dirs) + { + fprintf (stderr, "%s: Can't create list of directories\n", + argv[0]); + return 1; + } + while (argv[i]) + { + if (!FcStrSetAddFilename (dirs, (FcChar8 *) argv[i])) + { + fprintf (stderr, "%s: Can't add directory\n", argv[0]); + return 1; + } + i++; + } + list = FcStrListCreate (dirs); + FcStrSetDestroy (dirs); + } + else + list = FcConfigGetConfigDirs (config); + + if ((processed_dirs = FcStrSetCreate()) == NULL) { + fprintf(stderr, "Cannot malloc\n"); + return 1; + } + + changed = 0; + ret = scanDirs (list, config, force, really_force, verbose, &changed); + + FcStrSetDestroy (processed_dirs); + + cleanCacheDirectories (config, verbose); + + /* + * Now we need to sleep a second (or two, to be extra sure), to make + * sure that timestamps for changes after this run of fc-cache are later + * then any timestamps we wrote. We don't use gettimeofday() because + * sleep(3) can't be interrupted by a signal here -- this isn't in the + * library, and there aren't any signals flying around here. + */ + FcConfigDestroy (config); + FcFini (); + if (changed) + sleep (2); + if (verbose) + printf ("%s: %s\n", argv[0], ret ? "failed" : "succeeded"); + return ret; +} diff --git a/fontconfig/fc-cache/fc-cache.sgml b/fontconfig/fc-cache/fc-cache.sgml index b5328f173..3740be77f 100644 --- a/fontconfig/fc-cache/fc-cache.sgml +++ b/fontconfig/fc-cache/fc-cache.sgml @@ -1,220 +1,220 @@ - 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. - - --> - - - Josselin"> - Mouette"> - - Aug 13, 2008"> - - 1"> - joss@debian.org"> - - fc-cache"> - - - Debian"> - GNU"> - GPL"> -]> - - - -
- &dhemail; -
- - &dhfirstname; - &dhsurname; - - - 2003 - &dhusername; - - &dhdate; -
- - &dhucpackage; - - &dhsection; - - - &dhpackage; - - build font information cache files - - - - &dhpackage; - - - - - - - - - - - - - - DESCRIPTION - - &dhpackage; scans the font directories on - the system and builds font information cache files for - applications using fontconfig for their font handling. - - If directory arguments are not given, - &dhpackage; 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. - - Note that &dhpackage; must be executed - once per architecture to generate font information customized - for that architecture. - - - - OPTIONS - - This program follows the usual &gnu; command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. - - - - - - - - Force re-generation of apparently up-to-date cache files, - overriding the timestamp checking. - - - - - - - - Erase all existing cache files and rescan. - - - - - - - - Only scan system-wide directories, omitting the places - located in the user's home directory. - - - - - - - - Display status information while busy. - - - - - - - - Show summary of options. - - - - - - - - Show version of the program and exit. - - - - - - - Directory to scan for fonts. - - - - - - - FILES - - - %cachdir%/*-%arch%.cache-2 - - These files are generated by &dhpackage; - and contain maps from file names to font properties. They are - read by the fontconfig library at application startup to locate - appropriate fonts. - - - - - - - SEE ALSO - - - fc-cat(1) - fc-list(1) - fc-match(1) - fc-pattern(1) - fc-query(1) - fc-scan(1) - - - The fontconfig user's guide, in HTML format: - /usr/share/doc/fontconfig/fontconfig-user.html. - - - - AUTHOR - - This manual page was written by Keith Packard - keithp@keithp.com and &dhusername; &dhemail;. - - -
- - + 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. + + --> + + + Josselin"> + Mouette"> + + Aug 13, 2008"> + + 1"> + joss@debian.org"> + + fc-cache"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + build font information cache files + + + + &dhpackage; + + + + + + + + + + + + + + DESCRIPTION + + &dhpackage; scans the font directories on + the system and builds font information cache files for + applications using fontconfig for their font handling. + + If directory arguments are not given, + &dhpackage; 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. + + Note that &dhpackage; must be executed + once per architecture to generate font information customized + for that architecture. + + + + OPTIONS + + This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. + + + + + + + + Force re-generation of apparently up-to-date cache files, + overriding the timestamp checking. + + + + + + + + Erase all existing cache files and rescan. + + + + + + + + Only scan system-wide directories, omitting the places + located in the user's home directory. + + + + + + + + Display status information while busy. + + + + + + + + Show summary of options. + + + + + + + + Show version of the program and exit. + + + + + + + Directory to scan for fonts. + + + + + + + FILES + + + %cachdir%/*-%arch%.cache-2 + + These files are generated by &dhpackage; + and contain maps from file names to font properties. They are + read by the fontconfig library at application startup to locate + appropriate fonts. + + + + + + + SEE ALSO + + + fc-cat(1) + fc-list(1) + fc-match(1) + fc-pattern(1) + fc-query(1) + fc-scan(1) + + + The fontconfig user's guide, in HTML format: + /usr/share/doc/fontconfig/fontconfig-user.html. + + + + AUTHOR + + This manual page was written by Keith Packard + keithp@keithp.com and &dhusername; &dhemail;. + + +
+ + diff --git a/fontconfig/fc-case/CaseFolding.txt b/fontconfig/fc-case/CaseFolding.txt index 0c0c1b8c8..ffe6173d7 100644 --- a/fontconfig/fc-case/CaseFolding.txt +++ b/fontconfig/fc-case/CaseFolding.txt @@ -1,1211 +1,1211 @@ -# CaseFolding-6.0.0.txt -# Date: 2010-05-18, 00:48:57 GMT [MD] -# -# Unicode Character Database -# Copyright (c) 1991-2010 Unicode, Inc. -# For terms of use, see http://www.unicode.org/terms_of_use.html -# For documentation, see http://www.unicode.org/reports/tr44/ -# -# Case Folding Properties -# -# This file is a supplement to the UnicodeData file. -# It provides a case folding mapping generated from the Unicode Character Database. -# If all characters are mapped according to the full mapping below, then -# case differences (according to UnicodeData.txt and SpecialCasing.txt) -# are eliminated. -# -# The data supports both implementations that require simple case foldings -# (where string lengths don't change), and implementations that allow full case folding -# (where string lengths may grow). Note that where they can be supported, the -# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match. -# -# All code points not listed in this file map to themselves. -# -# NOTE: case folding does not preserve normalization formats! -# -# For information on case folding, including how to have case folding -# preserve normalization formats, see Section 3.13 Default Case Algorithms in -# The Unicode Standard, Version 5.0. -# -# ================================================================================ -# Format -# ================================================================================ -# The entries in this file are in the following machine-readable format: -# -# ; ; ; # -# -# 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; -0041; C; 0061; # LATIN CAPITAL LETTER A -0042; C; 0062; # LATIN CAPITAL LETTER B -0043; C; 0063; # LATIN CAPITAL LETTER C -0044; C; 0064; # LATIN CAPITAL LETTER D -0045; C; 0065; # LATIN CAPITAL LETTER E -0046; C; 0066; # LATIN CAPITAL LETTER F -0047; C; 0067; # LATIN CAPITAL LETTER G -0048; C; 0068; # LATIN CAPITAL LETTER H -0049; C; 0069; # LATIN CAPITAL LETTER I -0049; T; 0131; # LATIN CAPITAL LETTER I -004A; C; 006A; # LATIN CAPITAL LETTER J -004B; C; 006B; # LATIN CAPITAL LETTER K -004C; C; 006C; # LATIN CAPITAL LETTER L -004D; C; 006D; # LATIN CAPITAL LETTER M -004E; C; 006E; # LATIN CAPITAL LETTER N -004F; C; 006F; # LATIN CAPITAL LETTER O -0050; C; 0070; # LATIN CAPITAL LETTER P -0051; C; 0071; # LATIN CAPITAL LETTER Q -0052; C; 0072; # LATIN CAPITAL LETTER R -0053; C; 0073; # LATIN CAPITAL LETTER S -0054; C; 0074; # LATIN CAPITAL LETTER T -0055; C; 0075; # LATIN CAPITAL LETTER U -0056; C; 0076; # LATIN CAPITAL LETTER V -0057; C; 0077; # LATIN CAPITAL LETTER W -0058; C; 0078; # LATIN CAPITAL LETTER X -0059; C; 0079; # LATIN CAPITAL LETTER Y -005A; C; 007A; # LATIN CAPITAL LETTER Z -00B5; C; 03BC; # MICRO SIGN -00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE -00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE -00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE -00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS -00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE -00C6; C; 00E6; # LATIN CAPITAL LETTER AE -00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA -00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE -00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE -00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS -00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE -00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE -00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS -00D0; C; 00F0; # LATIN CAPITAL LETTER ETH -00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE -00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE -00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE -00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE -00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS -00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE -00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE -00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE -00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS -00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE -00DE; C; 00FE; # LATIN CAPITAL LETTER THORN -00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S -0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON -0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE -0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK -0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE -0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX -010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE -010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON -010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON -0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE -0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON -0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE -0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE -0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK -011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON -011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX -011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE -0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE -0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA -0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX -0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE -0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE -012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON -012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE -012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK -0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE -0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE -0132; C; 0133; # LATIN CAPITAL LIGATURE IJ -0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX -0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA -0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE -013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA -013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON -013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT -0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE -0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE -0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA -0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON -0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE -014A; C; 014B; # LATIN CAPITAL LETTER ENG -014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON -014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE -0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE -0152; C; 0153; # LATIN CAPITAL LIGATURE OE -0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE -0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA -0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON -015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE -015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX -015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA -0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON -0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA -0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON -0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE -0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE -016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON -016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE -016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE -0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE -0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK -0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX -0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX -0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS -0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE -017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE -017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON -017F; C; 0073; # LATIN SMALL LETTER LONG S -0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK -0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR -0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX -0186; C; 0254; # LATIN CAPITAL LETTER OPEN O -0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK -0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D -018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK -018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR -018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E -018F; C; 0259; # LATIN CAPITAL LETTER SCHWA -0190; C; 025B; # LATIN CAPITAL LETTER OPEN E -0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK -0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK -0194; C; 0263; # LATIN CAPITAL LETTER GAMMA -0196; C; 0269; # LATIN CAPITAL LETTER IOTA -0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE -0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK -019C; C; 026F; # LATIN CAPITAL LETTER TURNED M -019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK -019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE -01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN -01A2; C; 01A3; # LATIN CAPITAL LETTER OI -01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK -01A6; C; 0280; # LATIN LETTER YR -01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO -01A9; C; 0283; # LATIN CAPITAL LETTER ESH -01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK -01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK -01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN -01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON -01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK -01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK -01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE -01B7; C; 0292; # LATIN CAPITAL LETTER EZH -01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED -01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE -01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON -01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON -01C7; C; 01C9; # LATIN CAPITAL LETTER LJ -01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J -01CA; C; 01CC; # LATIN CAPITAL LETTER NJ -01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J -01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON -01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON -01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON -01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON -01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON -01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE -01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON -01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE -01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON -01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON -01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON -01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE -01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON -01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON -01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK -01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON -01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON -01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON -01F1; C; 01F3; # LATIN CAPITAL LETTER DZ -01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z -01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE -01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR -01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN -01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE -01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE -01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE -0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE -0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE -0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE -0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE -020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE -020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE -020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE -0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE -0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE -0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE -0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE -0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW -021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW -021C; C; 021D; # LATIN CAPITAL LETTER YOGH -021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON -0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG -0222; C; 0223; # LATIN CAPITAL LETTER OU -0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK -0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE -0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA -022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON -022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON -022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE -0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON -0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON -023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE -023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE -023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR -023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE -0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP -0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE -0244; C; 0289; # LATIN CAPITAL LETTER U BAR -0245; C; 028C; # LATIN CAPITAL LETTER TURNED V -0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE -0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE -024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL -024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE -024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE -0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI -0370; C; 0371; # GREEK CAPITAL LETTER HETA -0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI -0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA -0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS -0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS -0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS -038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS -038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS -038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS -038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS -0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS -0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA -0392; C; 03B2; # GREEK CAPITAL LETTER BETA -0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA -0394; C; 03B4; # GREEK CAPITAL LETTER DELTA -0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON -0396; C; 03B6; # GREEK CAPITAL LETTER ZETA -0397; C; 03B7; # GREEK CAPITAL LETTER ETA -0398; C; 03B8; # GREEK CAPITAL LETTER THETA -0399; C; 03B9; # GREEK CAPITAL LETTER IOTA -039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA -039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA -039C; C; 03BC; # GREEK CAPITAL LETTER MU -039D; C; 03BD; # GREEK CAPITAL LETTER NU -039E; C; 03BE; # GREEK CAPITAL LETTER XI -039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON -03A0; C; 03C0; # GREEK CAPITAL LETTER PI -03A1; C; 03C1; # GREEK CAPITAL LETTER RHO -03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA -03A4; C; 03C4; # GREEK CAPITAL LETTER TAU -03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON -03A6; C; 03C6; # GREEK CAPITAL LETTER PHI -03A7; C; 03C7; # GREEK CAPITAL LETTER CHI -03A8; C; 03C8; # GREEK CAPITAL LETTER PSI -03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA -03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA -03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA -03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS -03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA -03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL -03D0; C; 03B2; # GREEK BETA SYMBOL -03D1; C; 03B8; # GREEK THETA SYMBOL -03D5; C; 03C6; # GREEK PHI SYMBOL -03D6; C; 03C0; # GREEK PI SYMBOL -03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA -03DA; C; 03DB; # GREEK LETTER STIGMA -03DC; C; 03DD; # GREEK LETTER DIGAMMA -03DE; C; 03DF; # GREEK LETTER KOPPA -03E0; C; 03E1; # GREEK LETTER SAMPI -03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI -03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI -03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI -03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI -03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA -03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA -03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI -03F0; C; 03BA; # GREEK KAPPA SYMBOL -03F1; C; 03C1; # GREEK RHO SYMBOL -03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL -03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL -03F7; C; 03F8; # GREEK CAPITAL LETTER SHO -03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL -03FA; C; 03FB; # GREEK CAPITAL LETTER SAN -03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL -03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL -03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL -0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE -0401; C; 0451; # CYRILLIC CAPITAL LETTER IO -0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE -0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE -0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE -0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE -0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -0407; C; 0457; # CYRILLIC CAPITAL LETTER YI -0408; C; 0458; # CYRILLIC CAPITAL LETTER JE -0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE -040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE -040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE -040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE -040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE -040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U -040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE -0410; C; 0430; # CYRILLIC CAPITAL LETTER A -0411; C; 0431; # CYRILLIC CAPITAL LETTER BE -0412; C; 0432; # CYRILLIC CAPITAL LETTER VE -0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE -0414; C; 0434; # CYRILLIC CAPITAL LETTER DE -0415; C; 0435; # CYRILLIC CAPITAL LETTER IE -0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE -0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE -0418; C; 0438; # CYRILLIC CAPITAL LETTER I -0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I -041A; C; 043A; # CYRILLIC CAPITAL LETTER KA -041B; C; 043B; # CYRILLIC CAPITAL LETTER EL -041C; C; 043C; # CYRILLIC CAPITAL LETTER EM -041D; C; 043D; # CYRILLIC CAPITAL LETTER EN -041E; C; 043E; # CYRILLIC CAPITAL LETTER O -041F; C; 043F; # CYRILLIC CAPITAL LETTER PE -0420; C; 0440; # CYRILLIC CAPITAL LETTER ER -0421; C; 0441; # CYRILLIC CAPITAL LETTER ES -0422; C; 0442; # CYRILLIC CAPITAL LETTER TE -0423; C; 0443; # CYRILLIC CAPITAL LETTER U -0424; C; 0444; # CYRILLIC CAPITAL LETTER EF -0425; C; 0445; # CYRILLIC CAPITAL LETTER HA -0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE -0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE -0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA -0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA -042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN -042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU -042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN -042D; C; 044D; # CYRILLIC CAPITAL LETTER E -042E; C; 044E; # CYRILLIC CAPITAL LETTER YU -042F; C; 044F; # CYRILLIC CAPITAL LETTER YA -0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA -0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT -0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E -0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS -0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS -046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS -046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS -046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI -0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI -0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA -0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA -0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT -0478; C; 0479; # CYRILLIC CAPITAL LETTER UK -047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA -047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO -047E; C; 047F; # CYRILLIC CAPITAL LETTER OT -0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA -048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL -048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN -048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK -0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN -0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE -0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK -0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER -0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER -049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER -049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE -049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE -04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA -04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER -04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE -04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK -04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA -04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER -04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER -04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U -04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE -04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER -04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE -04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER -04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE -04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA -04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE -04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER -04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA -04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE -04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK -04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL -04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK -04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL -04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE -04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL -04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE -04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS -04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE -04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE -04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA -04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS -04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS -04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS -04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE -04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON -04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS -04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS -04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O -04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS -04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS -04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON -04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS -04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE -04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS -04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER -04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS -04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK -04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK -04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE -0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE -0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE -0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE -0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE -0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE -050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE -050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE -050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE -0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE -0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK -0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA -0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA -0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE -051A; C; 051B; # CYRILLIC CAPITAL LETTER QA -051C; C; 051D; # CYRILLIC CAPITAL LETTER WE -051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA -0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK -0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK -0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER -0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER -0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB -0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN -0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM -0534; C; 0564; # ARMENIAN CAPITAL LETTER DA -0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH -0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA -0537; C; 0567; # ARMENIAN CAPITAL LETTER EH -0538; C; 0568; # ARMENIAN CAPITAL LETTER ET -0539; C; 0569; # ARMENIAN CAPITAL LETTER TO -053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE -053B; C; 056B; # ARMENIAN CAPITAL LETTER INI -053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN -053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH -053E; C; 056E; # ARMENIAN CAPITAL LETTER CA -053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN -0540; C; 0570; # ARMENIAN CAPITAL LETTER HO -0541; C; 0571; # ARMENIAN CAPITAL LETTER JA -0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD -0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH -0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN -0545; C; 0575; # ARMENIAN CAPITAL LETTER YI -0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW -0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA -0548; C; 0578; # ARMENIAN CAPITAL LETTER VO -0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA -054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH -054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH -054C; C; 057C; # ARMENIAN CAPITAL LETTER RA -054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH -054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW -054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN -0550; C; 0580; # ARMENIAN CAPITAL LETTER REH -0551; C; 0581; # ARMENIAN CAPITAL LETTER CO -0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN -0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR -0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH -0555; C; 0585; # ARMENIAN CAPITAL LETTER OH -0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH -0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN -10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN -10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN -10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN -10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON -10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN -10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN -10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN -10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN -10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN -10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN -10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS -10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN -10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR -10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON -10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR -10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR -10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE -10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN -10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR -10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN -10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR -10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR -10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN -10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR -10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN -10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN -10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN -10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL -10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL -10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR -10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN -10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN -10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE -10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE -10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE -10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE -10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR -10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE -1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW -1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE -1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW -1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW -1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE -1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE -1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW -1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW -1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA -1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW -1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE -1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE -1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW -1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW -1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE -1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE -1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON -1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE -1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW -1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS -1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA -1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW -1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW -1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE -1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE -1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW -1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW -1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW -1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON -1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW -1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW -1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE -1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE -1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW -1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE -1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW -1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW -1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW -1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE -1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS -1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE -1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE -1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE -1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE -1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE -1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW -1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON -1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW -1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE -1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW -1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE -1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE -1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE -1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE -1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW -1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW -1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW -1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW -1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW -1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW -1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE -1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS -1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE -1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW -1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE -1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE -1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS -1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE -1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW -1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE -1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS -1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE -1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX -1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW -1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW -1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW -1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS -1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE -1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE -1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING -1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE -1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S -1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S -1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW -1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE -1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE -1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE -1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE -1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE -1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW -1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE -1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE -1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE -1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE -1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW -1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW -1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE -1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE -1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE -1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE -1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE -1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE -1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW -1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE -1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW -1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW -1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE -1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE -1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE -1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE -1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE -1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW -1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE -1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE -1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE -1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE -1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW -1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW -1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE -1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE -1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE -1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE -1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE -1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW -1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE -1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW -1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE -1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE -1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL -1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V -1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP -1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI -1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA -1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA -1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA -1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA -1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA -1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI -1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI -1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI -1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA -1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA -1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA -1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA -1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA -1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI -1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA -1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA -1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA -1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA -1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA -1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI -1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI -1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI -1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA -1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA -1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA -1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA -1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA -1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI -1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI -1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI -1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA -1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA -1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA -1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA -1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA -1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI -1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA -1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA -1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI -1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA -1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA -1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA -1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI -1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI -1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA -1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA -1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA -1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA -1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA -1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI -1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI -1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI -1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI -1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI -1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI -1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI -1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI -1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI -1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI -1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI -1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI -1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI -1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI -1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI -1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI -1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI -1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI -1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI -1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI -1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI -1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI -1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI -1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI -1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI -1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI -1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI -1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI -1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI -1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI -1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI -1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY -1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON -1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA -1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA -1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI -1FBE; C; 03B9; # GREEK PROSGEGRAMMENI -1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI -1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI -1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI -1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI -1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI -1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA -1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA -1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA -1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA -1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI -1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA -1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA -1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI -1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI -1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY -1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON -1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA -1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA -1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA -1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA -1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI -1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI -1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI -1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY -1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON -1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA -1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA -1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA -1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI -1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI -1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI -1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI -1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI -1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA -1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA -1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA -1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA -1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI -2126; C; 03C9; # OHM SIGN -212A; C; 006B; # KELVIN SIGN -212B; C; 00E5; # ANGSTROM SIGN -2132; C; 214E; # TURNED CAPITAL F -2160; C; 2170; # ROMAN NUMERAL ONE -2161; C; 2171; # ROMAN NUMERAL TWO -2162; C; 2172; # ROMAN NUMERAL THREE -2163; C; 2173; # ROMAN NUMERAL FOUR -2164; C; 2174; # ROMAN NUMERAL FIVE -2165; C; 2175; # ROMAN NUMERAL SIX -2166; C; 2176; # ROMAN NUMERAL SEVEN -2167; C; 2177; # ROMAN NUMERAL EIGHT -2168; C; 2178; # ROMAN NUMERAL NINE -2169; C; 2179; # ROMAN NUMERAL TEN -216A; C; 217A; # ROMAN NUMERAL ELEVEN -216B; C; 217B; # ROMAN NUMERAL TWELVE -216C; C; 217C; # ROMAN NUMERAL FIFTY -216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED -216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED -216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND -2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED -24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A -24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B -24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C -24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D -24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E -24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F -24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G -24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H -24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I -24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J -24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K -24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L -24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M -24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N -24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O -24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P -24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q -24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R -24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S -24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T -24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U -24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V -24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W -24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X -24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y -24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z -2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU -2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY -2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE -2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI -2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO -2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU -2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE -2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO -2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA -2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE -2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE -2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I -2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI -2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO -2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE -2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE -2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI -2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU -2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI -2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI -2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO -2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO -2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU -2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU -2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU -2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU -2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE -2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA -2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI -2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI -2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA -2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU -2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI -2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI -2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA -2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU -2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS -2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL -2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO -2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS -2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS -2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS -2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA -2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA -2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC -2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A -2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE -2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR -2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE -2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE -2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL -2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER -2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER -2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER -2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA -2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK -2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A -2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA -2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK -2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H -2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL -2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL -2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA -2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA -2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA -2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA -2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE -2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU -2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA -2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE -2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE -2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA -2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA -2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA -2C98; C; 2C99; # COPTIC CAPITAL LETTER MI -2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI -2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI -2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O -2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI -2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO -2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA -2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU -2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA -2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI -2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI -2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI -2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU -2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF -2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN -2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE -2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA -2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI -2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI -2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU -2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI -2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI -2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI -2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH -2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI -2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI -2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI -2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA -2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA -2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI -2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT -2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA -2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA -2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA -2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA -2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI -2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI -2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU -2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI -2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA -A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA -A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO -A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE -A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA -A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV -A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK -A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA -A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER -A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER -A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT -A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU -A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A -A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS -A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS -A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS -A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN -A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE -A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE -A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL -A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM -A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O -A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O -A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O -A680; C; A681; # CYRILLIC CAPITAL LETTER DWE -A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE -A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE -A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE -A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE -A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK -A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE -A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE -A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE -A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE -A694; C; A695; # CYRILLIC CAPITAL LETTER HWE -A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE -A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF -A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN -A726; C; A727; # LATIN CAPITAL LETTER HENG -A728; C; A729; # LATIN CAPITAL LETTER TZ -A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO -A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO -A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA -A732; C; A733; # LATIN CAPITAL LETTER AA -A734; C; A735; # LATIN CAPITAL LETTER AO -A736; C; A737; # LATIN CAPITAL LETTER AU -A738; C; A739; # LATIN CAPITAL LETTER AV -A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR -A73C; C; A73D; # LATIN CAPITAL LETTER AY -A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT -A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE -A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE -A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE -A746; C; A747; # LATIN CAPITAL LETTER BROKEN L -A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE -A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY -A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP -A74E; C; A74F; # LATIN CAPITAL LETTER OO -A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER -A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH -A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL -A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER -A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE -A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA -A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA -A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE -A760; C; A761; # LATIN CAPITAL LETTER VY -A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z -A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE -A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER -A768; C; A769; # LATIN CAPITAL LETTER VEND -A76A; C; A76B; # LATIN CAPITAL LETTER ET -A76C; C; A76D; # LATIN CAPITAL LETTER IS -A76E; C; A76F; # LATIN CAPITAL LETTER CON -A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D -A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F -A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G -A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G -A780; C; A781; # LATIN CAPITAL LETTER TURNED L -A782; C; A783; # LATIN CAPITAL LETTER INSULAR R -A784; C; A785; # LATIN CAPITAL LETTER INSULAR S -A786; C; A787; # LATIN CAPITAL LETTER INSULAR T -A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO -A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H -A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER -A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE -A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE -A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE -A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE -A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE -FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF -FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI -FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL -FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI -FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL -FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T -FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST -FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW -FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH -FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI -FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW -FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH -FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A -FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B -FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C -FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D -FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E -FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F -FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G -FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H -FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I -FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J -FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K -FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L -FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M -FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N -FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O -FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P -FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q -FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R -FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S -FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T -FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U -FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V -FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W -FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X -FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y -FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z -10400; C; 10428; # DESERET CAPITAL LETTER LONG I -10401; C; 10429; # DESERET CAPITAL LETTER LONG E -10402; C; 1042A; # DESERET CAPITAL LETTER LONG A -10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH -10404; C; 1042C; # DESERET CAPITAL LETTER LONG O -10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO -10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I -10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E -10408; C; 10430; # DESERET CAPITAL LETTER SHORT A -10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH -1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O -1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO -1040C; C; 10434; # DESERET CAPITAL LETTER AY -1040D; C; 10435; # DESERET CAPITAL LETTER OW -1040E; C; 10436; # DESERET CAPITAL LETTER WU -1040F; C; 10437; # DESERET CAPITAL LETTER YEE -10410; C; 10438; # DESERET CAPITAL LETTER H -10411; C; 10439; # DESERET CAPITAL LETTER PEE -10412; C; 1043A; # DESERET CAPITAL LETTER BEE -10413; C; 1043B; # DESERET CAPITAL LETTER TEE -10414; C; 1043C; # DESERET CAPITAL LETTER DEE -10415; C; 1043D; # DESERET CAPITAL LETTER CHEE -10416; C; 1043E; # DESERET CAPITAL LETTER JEE -10417; C; 1043F; # DESERET CAPITAL LETTER KAY -10418; C; 10440; # DESERET CAPITAL LETTER GAY -10419; C; 10441; # DESERET CAPITAL LETTER EF -1041A; C; 10442; # DESERET CAPITAL LETTER VEE -1041B; C; 10443; # DESERET CAPITAL LETTER ETH -1041C; C; 10444; # DESERET CAPITAL LETTER THEE -1041D; C; 10445; # DESERET CAPITAL LETTER ES -1041E; C; 10446; # DESERET CAPITAL LETTER ZEE -1041F; C; 10447; # DESERET CAPITAL LETTER ESH -10420; C; 10448; # DESERET CAPITAL LETTER ZHEE -10421; C; 10449; # DESERET CAPITAL LETTER ER -10422; C; 1044A; # DESERET CAPITAL LETTER EL -10423; C; 1044B; # DESERET CAPITAL LETTER EM -10424; C; 1044C; # DESERET CAPITAL LETTER EN -10425; C; 1044D; # DESERET CAPITAL LETTER ENG -10426; C; 1044E; # DESERET CAPITAL LETTER OI -10427; C; 1044F; # DESERET CAPITAL LETTER EW +# CaseFolding-6.0.0.txt +# Date: 2010-05-18, 00:48:57 GMT [MD] +# +# Unicode Character Database +# Copyright (c) 1991-2010 Unicode, Inc. +# For terms of use, see http://www.unicode.org/terms_of_use.html +# For documentation, see http://www.unicode.org/reports/tr44/ +# +# Case Folding Properties +# +# This file is a supplement to the UnicodeData file. +# It provides a case folding mapping generated from the Unicode Character Database. +# If all characters are mapped according to the full mapping below, then +# case differences (according to UnicodeData.txt and SpecialCasing.txt) +# are eliminated. +# +# The data supports both implementations that require simple case foldings +# (where string lengths don't change), and implementations that allow full case folding +# (where string lengths may grow). Note that where they can be supported, the +# full case foldings are superior: for example, they allow "MASSE" and "Maße" to match. +# +# All code points not listed in this file map to themselves. +# +# NOTE: case folding does not preserve normalization formats! +# +# For information on case folding, including how to have case folding +# preserve normalization formats, see Section 3.13 Default Case Algorithms in +# The Unicode Standard, Version 5.0. +# +# ================================================================================ +# Format +# ================================================================================ +# The entries in this file are in the following machine-readable format: +# +# ; ; ; # +# +# 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; +0041; C; 0061; # LATIN CAPITAL LETTER A +0042; C; 0062; # LATIN CAPITAL LETTER B +0043; C; 0063; # LATIN CAPITAL LETTER C +0044; C; 0064; # LATIN CAPITAL LETTER D +0045; C; 0065; # LATIN CAPITAL LETTER E +0046; C; 0066; # LATIN CAPITAL LETTER F +0047; C; 0067; # LATIN CAPITAL LETTER G +0048; C; 0068; # LATIN CAPITAL LETTER H +0049; C; 0069; # LATIN CAPITAL LETTER I +0049; T; 0131; # LATIN CAPITAL LETTER I +004A; C; 006A; # LATIN CAPITAL LETTER J +004B; C; 006B; # LATIN CAPITAL LETTER K +004C; C; 006C; # LATIN CAPITAL LETTER L +004D; C; 006D; # LATIN CAPITAL LETTER M +004E; C; 006E; # LATIN CAPITAL LETTER N +004F; C; 006F; # LATIN CAPITAL LETTER O +0050; C; 0070; # LATIN CAPITAL LETTER P +0051; C; 0071; # LATIN CAPITAL LETTER Q +0052; C; 0072; # LATIN CAPITAL LETTER R +0053; C; 0073; # LATIN CAPITAL LETTER S +0054; C; 0074; # LATIN CAPITAL LETTER T +0055; C; 0075; # LATIN CAPITAL LETTER U +0056; C; 0076; # LATIN CAPITAL LETTER V +0057; C; 0077; # LATIN CAPITAL LETTER W +0058; C; 0078; # LATIN CAPITAL LETTER X +0059; C; 0079; # LATIN CAPITAL LETTER Y +005A; C; 007A; # LATIN CAPITAL LETTER Z +00B5; C; 03BC; # MICRO SIGN +00C0; C; 00E0; # LATIN CAPITAL LETTER A WITH GRAVE +00C1; C; 00E1; # LATIN CAPITAL LETTER A WITH ACUTE +00C2; C; 00E2; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C3; C; 00E3; # LATIN CAPITAL LETTER A WITH TILDE +00C4; C; 00E4; # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5; C; 00E5; # LATIN CAPITAL LETTER A WITH RING ABOVE +00C6; C; 00E6; # LATIN CAPITAL LETTER AE +00C7; C; 00E7; # LATIN CAPITAL LETTER C WITH CEDILLA +00C8; C; 00E8; # LATIN CAPITAL LETTER E WITH GRAVE +00C9; C; 00E9; # LATIN CAPITAL LETTER E WITH ACUTE +00CA; C; 00EA; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CB; C; 00EB; # LATIN CAPITAL LETTER E WITH DIAERESIS +00CC; C; 00EC; # LATIN CAPITAL LETTER I WITH GRAVE +00CD; C; 00ED; # LATIN CAPITAL LETTER I WITH ACUTE +00CE; C; 00EE; # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF; C; 00EF; # LATIN CAPITAL LETTER I WITH DIAERESIS +00D0; C; 00F0; # LATIN CAPITAL LETTER ETH +00D1; C; 00F1; # LATIN CAPITAL LETTER N WITH TILDE +00D2; C; 00F2; # LATIN CAPITAL LETTER O WITH GRAVE +00D3; C; 00F3; # LATIN CAPITAL LETTER O WITH ACUTE +00D4; C; 00F4; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00D5; C; 00F5; # LATIN CAPITAL LETTER O WITH TILDE +00D6; C; 00F6; # LATIN CAPITAL LETTER O WITH DIAERESIS +00D8; C; 00F8; # LATIN CAPITAL LETTER O WITH STROKE +00D9; C; 00F9; # LATIN CAPITAL LETTER U WITH GRAVE +00DA; C; 00FA; # LATIN CAPITAL LETTER U WITH ACUTE +00DB; C; 00FB; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC; C; 00FC; # LATIN CAPITAL LETTER U WITH DIAERESIS +00DD; C; 00FD; # LATIN CAPITAL LETTER Y WITH ACUTE +00DE; C; 00FE; # LATIN CAPITAL LETTER THORN +00DF; F; 0073 0073; # LATIN SMALL LETTER SHARP S +0100; C; 0101; # LATIN CAPITAL LETTER A WITH MACRON +0102; C; 0103; # LATIN CAPITAL LETTER A WITH BREVE +0104; C; 0105; # LATIN CAPITAL LETTER A WITH OGONEK +0106; C; 0107; # LATIN CAPITAL LETTER C WITH ACUTE +0108; C; 0109; # LATIN CAPITAL LETTER C WITH CIRCUMFLEX +010A; C; 010B; # LATIN CAPITAL LETTER C WITH DOT ABOVE +010C; C; 010D; # LATIN CAPITAL LETTER C WITH CARON +010E; C; 010F; # LATIN CAPITAL LETTER D WITH CARON +0110; C; 0111; # LATIN CAPITAL LETTER D WITH STROKE +0112; C; 0113; # LATIN CAPITAL LETTER E WITH MACRON +0114; C; 0115; # LATIN CAPITAL LETTER E WITH BREVE +0116; C; 0117; # LATIN CAPITAL LETTER E WITH DOT ABOVE +0118; C; 0119; # LATIN CAPITAL LETTER E WITH OGONEK +011A; C; 011B; # LATIN CAPITAL LETTER E WITH CARON +011C; C; 011D; # LATIN CAPITAL LETTER G WITH CIRCUMFLEX +011E; C; 011F; # LATIN CAPITAL LETTER G WITH BREVE +0120; C; 0121; # LATIN CAPITAL LETTER G WITH DOT ABOVE +0122; C; 0123; # LATIN CAPITAL LETTER G WITH CEDILLA +0124; C; 0125; # LATIN CAPITAL LETTER H WITH CIRCUMFLEX +0126; C; 0127; # LATIN CAPITAL LETTER H WITH STROKE +0128; C; 0129; # LATIN CAPITAL LETTER I WITH TILDE +012A; C; 012B; # LATIN CAPITAL LETTER I WITH MACRON +012C; C; 012D; # LATIN CAPITAL LETTER I WITH BREVE +012E; C; 012F; # LATIN CAPITAL LETTER I WITH OGONEK +0130; F; 0069 0307; # LATIN CAPITAL LETTER I WITH DOT ABOVE +0130; T; 0069; # LATIN CAPITAL LETTER I WITH DOT ABOVE +0132; C; 0133; # LATIN CAPITAL LIGATURE IJ +0134; C; 0135; # LATIN CAPITAL LETTER J WITH CIRCUMFLEX +0136; C; 0137; # LATIN CAPITAL LETTER K WITH CEDILLA +0139; C; 013A; # LATIN CAPITAL LETTER L WITH ACUTE +013B; C; 013C; # LATIN CAPITAL LETTER L WITH CEDILLA +013D; C; 013E; # LATIN CAPITAL LETTER L WITH CARON +013F; C; 0140; # LATIN CAPITAL LETTER L WITH MIDDLE DOT +0141; C; 0142; # LATIN CAPITAL LETTER L WITH STROKE +0143; C; 0144; # LATIN CAPITAL LETTER N WITH ACUTE +0145; C; 0146; # LATIN CAPITAL LETTER N WITH CEDILLA +0147; C; 0148; # LATIN CAPITAL LETTER N WITH CARON +0149; F; 02BC 006E; # LATIN SMALL LETTER N PRECEDED BY APOSTROPHE +014A; C; 014B; # LATIN CAPITAL LETTER ENG +014C; C; 014D; # LATIN CAPITAL LETTER O WITH MACRON +014E; C; 014F; # LATIN CAPITAL LETTER O WITH BREVE +0150; C; 0151; # LATIN CAPITAL LETTER O WITH DOUBLE ACUTE +0152; C; 0153; # LATIN CAPITAL LIGATURE OE +0154; C; 0155; # LATIN CAPITAL LETTER R WITH ACUTE +0156; C; 0157; # LATIN CAPITAL LETTER R WITH CEDILLA +0158; C; 0159; # LATIN CAPITAL LETTER R WITH CARON +015A; C; 015B; # LATIN CAPITAL LETTER S WITH ACUTE +015C; C; 015D; # LATIN CAPITAL LETTER S WITH CIRCUMFLEX +015E; C; 015F; # LATIN CAPITAL LETTER S WITH CEDILLA +0160; C; 0161; # LATIN CAPITAL LETTER S WITH CARON +0162; C; 0163; # LATIN CAPITAL LETTER T WITH CEDILLA +0164; C; 0165; # LATIN CAPITAL LETTER T WITH CARON +0166; C; 0167; # LATIN CAPITAL LETTER T WITH STROKE +0168; C; 0169; # LATIN CAPITAL LETTER U WITH TILDE +016A; C; 016B; # LATIN CAPITAL LETTER U WITH MACRON +016C; C; 016D; # LATIN CAPITAL LETTER U WITH BREVE +016E; C; 016F; # LATIN CAPITAL LETTER U WITH RING ABOVE +0170; C; 0171; # LATIN CAPITAL LETTER U WITH DOUBLE ACUTE +0172; C; 0173; # LATIN CAPITAL LETTER U WITH OGONEK +0174; C; 0175; # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0176; C; 0177; # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0178; C; 00FF; # LATIN CAPITAL LETTER Y WITH DIAERESIS +0179; C; 017A; # LATIN CAPITAL LETTER Z WITH ACUTE +017B; C; 017C; # LATIN CAPITAL LETTER Z WITH DOT ABOVE +017D; C; 017E; # LATIN CAPITAL LETTER Z WITH CARON +017F; C; 0073; # LATIN SMALL LETTER LONG S +0181; C; 0253; # LATIN CAPITAL LETTER B WITH HOOK +0182; C; 0183; # LATIN CAPITAL LETTER B WITH TOPBAR +0184; C; 0185; # LATIN CAPITAL LETTER TONE SIX +0186; C; 0254; # LATIN CAPITAL LETTER OPEN O +0187; C; 0188; # LATIN CAPITAL LETTER C WITH HOOK +0189; C; 0256; # LATIN CAPITAL LETTER AFRICAN D +018A; C; 0257; # LATIN CAPITAL LETTER D WITH HOOK +018B; C; 018C; # LATIN CAPITAL LETTER D WITH TOPBAR +018E; C; 01DD; # LATIN CAPITAL LETTER REVERSED E +018F; C; 0259; # LATIN CAPITAL LETTER SCHWA +0190; C; 025B; # LATIN CAPITAL LETTER OPEN E +0191; C; 0192; # LATIN CAPITAL LETTER F WITH HOOK +0193; C; 0260; # LATIN CAPITAL LETTER G WITH HOOK +0194; C; 0263; # LATIN CAPITAL LETTER GAMMA +0196; C; 0269; # LATIN CAPITAL LETTER IOTA +0197; C; 0268; # LATIN CAPITAL LETTER I WITH STROKE +0198; C; 0199; # LATIN CAPITAL LETTER K WITH HOOK +019C; C; 026F; # LATIN CAPITAL LETTER TURNED M +019D; C; 0272; # LATIN CAPITAL LETTER N WITH LEFT HOOK +019F; C; 0275; # LATIN CAPITAL LETTER O WITH MIDDLE TILDE +01A0; C; 01A1; # LATIN CAPITAL LETTER O WITH HORN +01A2; C; 01A3; # LATIN CAPITAL LETTER OI +01A4; C; 01A5; # LATIN CAPITAL LETTER P WITH HOOK +01A6; C; 0280; # LATIN LETTER YR +01A7; C; 01A8; # LATIN CAPITAL LETTER TONE TWO +01A9; C; 0283; # LATIN CAPITAL LETTER ESH +01AC; C; 01AD; # LATIN CAPITAL LETTER T WITH HOOK +01AE; C; 0288; # LATIN CAPITAL LETTER T WITH RETROFLEX HOOK +01AF; C; 01B0; # LATIN CAPITAL LETTER U WITH HORN +01B1; C; 028A; # LATIN CAPITAL LETTER UPSILON +01B2; C; 028B; # LATIN CAPITAL LETTER V WITH HOOK +01B3; C; 01B4; # LATIN CAPITAL LETTER Y WITH HOOK +01B5; C; 01B6; # LATIN CAPITAL LETTER Z WITH STROKE +01B7; C; 0292; # LATIN CAPITAL LETTER EZH +01B8; C; 01B9; # LATIN CAPITAL LETTER EZH REVERSED +01BC; C; 01BD; # LATIN CAPITAL LETTER TONE FIVE +01C4; C; 01C6; # LATIN CAPITAL LETTER DZ WITH CARON +01C5; C; 01C6; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +01C7; C; 01C9; # LATIN CAPITAL LETTER LJ +01C8; C; 01C9; # LATIN CAPITAL LETTER L WITH SMALL LETTER J +01CA; C; 01CC; # LATIN CAPITAL LETTER NJ +01CB; C; 01CC; # LATIN CAPITAL LETTER N WITH SMALL LETTER J +01CD; C; 01CE; # LATIN CAPITAL LETTER A WITH CARON +01CF; C; 01D0; # LATIN CAPITAL LETTER I WITH CARON +01D1; C; 01D2; # LATIN CAPITAL LETTER O WITH CARON +01D3; C; 01D4; # LATIN CAPITAL LETTER U WITH CARON +01D5; C; 01D6; # LATIN CAPITAL LETTER U WITH DIAERESIS AND MACRON +01D7; C; 01D8; # LATIN CAPITAL LETTER U WITH DIAERESIS AND ACUTE +01D9; C; 01DA; # LATIN CAPITAL LETTER U WITH DIAERESIS AND CARON +01DB; C; 01DC; # LATIN CAPITAL LETTER U WITH DIAERESIS AND GRAVE +01DE; C; 01DF; # LATIN CAPITAL LETTER A WITH DIAERESIS AND MACRON +01E0; C; 01E1; # LATIN CAPITAL LETTER A WITH DOT ABOVE AND MACRON +01E2; C; 01E3; # LATIN CAPITAL LETTER AE WITH MACRON +01E4; C; 01E5; # LATIN CAPITAL LETTER G WITH STROKE +01E6; C; 01E7; # LATIN CAPITAL LETTER G WITH CARON +01E8; C; 01E9; # LATIN CAPITAL LETTER K WITH CARON +01EA; C; 01EB; # LATIN CAPITAL LETTER O WITH OGONEK +01EC; C; 01ED; # LATIN CAPITAL LETTER O WITH OGONEK AND MACRON +01EE; C; 01EF; # LATIN CAPITAL LETTER EZH WITH CARON +01F0; F; 006A 030C; # LATIN SMALL LETTER J WITH CARON +01F1; C; 01F3; # LATIN CAPITAL LETTER DZ +01F2; C; 01F3; # LATIN CAPITAL LETTER D WITH SMALL LETTER Z +01F4; C; 01F5; # LATIN CAPITAL LETTER G WITH ACUTE +01F6; C; 0195; # LATIN CAPITAL LETTER HWAIR +01F7; C; 01BF; # LATIN CAPITAL LETTER WYNN +01F8; C; 01F9; # LATIN CAPITAL LETTER N WITH GRAVE +01FA; C; 01FB; # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +01FC; C; 01FD; # LATIN CAPITAL LETTER AE WITH ACUTE +01FE; C; 01FF; # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +0200; C; 0201; # LATIN CAPITAL LETTER A WITH DOUBLE GRAVE +0202; C; 0203; # LATIN CAPITAL LETTER A WITH INVERTED BREVE +0204; C; 0205; # LATIN CAPITAL LETTER E WITH DOUBLE GRAVE +0206; C; 0207; # LATIN CAPITAL LETTER E WITH INVERTED BREVE +0208; C; 0209; # LATIN CAPITAL LETTER I WITH DOUBLE GRAVE +020A; C; 020B; # LATIN CAPITAL LETTER I WITH INVERTED BREVE +020C; C; 020D; # LATIN CAPITAL LETTER O WITH DOUBLE GRAVE +020E; C; 020F; # LATIN CAPITAL LETTER O WITH INVERTED BREVE +0210; C; 0211; # LATIN CAPITAL LETTER R WITH DOUBLE GRAVE +0212; C; 0213; # LATIN CAPITAL LETTER R WITH INVERTED BREVE +0214; C; 0215; # LATIN CAPITAL LETTER U WITH DOUBLE GRAVE +0216; C; 0217; # LATIN CAPITAL LETTER U WITH INVERTED BREVE +0218; C; 0219; # LATIN CAPITAL LETTER S WITH COMMA BELOW +021A; C; 021B; # LATIN CAPITAL LETTER T WITH COMMA BELOW +021C; C; 021D; # LATIN CAPITAL LETTER YOGH +021E; C; 021F; # LATIN CAPITAL LETTER H WITH CARON +0220; C; 019E; # LATIN CAPITAL LETTER N WITH LONG RIGHT LEG +0222; C; 0223; # LATIN CAPITAL LETTER OU +0224; C; 0225; # LATIN CAPITAL LETTER Z WITH HOOK +0226; C; 0227; # LATIN CAPITAL LETTER A WITH DOT ABOVE +0228; C; 0229; # LATIN CAPITAL LETTER E WITH CEDILLA +022A; C; 022B; # LATIN CAPITAL LETTER O WITH DIAERESIS AND MACRON +022C; C; 022D; # LATIN CAPITAL LETTER O WITH TILDE AND MACRON +022E; C; 022F; # LATIN CAPITAL LETTER O WITH DOT ABOVE +0230; C; 0231; # LATIN CAPITAL LETTER O WITH DOT ABOVE AND MACRON +0232; C; 0233; # LATIN CAPITAL LETTER Y WITH MACRON +023A; C; 2C65; # LATIN CAPITAL LETTER A WITH STROKE +023B; C; 023C; # LATIN CAPITAL LETTER C WITH STROKE +023D; C; 019A; # LATIN CAPITAL LETTER L WITH BAR +023E; C; 2C66; # LATIN CAPITAL LETTER T WITH DIAGONAL STROKE +0241; C; 0242; # LATIN CAPITAL LETTER GLOTTAL STOP +0243; C; 0180; # LATIN CAPITAL LETTER B WITH STROKE +0244; C; 0289; # LATIN CAPITAL LETTER U BAR +0245; C; 028C; # LATIN CAPITAL LETTER TURNED V +0246; C; 0247; # LATIN CAPITAL LETTER E WITH STROKE +0248; C; 0249; # LATIN CAPITAL LETTER J WITH STROKE +024A; C; 024B; # LATIN CAPITAL LETTER SMALL Q WITH HOOK TAIL +024C; C; 024D; # LATIN CAPITAL LETTER R WITH STROKE +024E; C; 024F; # LATIN CAPITAL LETTER Y WITH STROKE +0345; C; 03B9; # COMBINING GREEK YPOGEGRAMMENI +0370; C; 0371; # GREEK CAPITAL LETTER HETA +0372; C; 0373; # GREEK CAPITAL LETTER ARCHAIC SAMPI +0376; C; 0377; # GREEK CAPITAL LETTER PAMPHYLIAN DIGAMMA +0386; C; 03AC; # GREEK CAPITAL LETTER ALPHA WITH TONOS +0388; C; 03AD; # GREEK CAPITAL LETTER EPSILON WITH TONOS +0389; C; 03AE; # GREEK CAPITAL LETTER ETA WITH TONOS +038A; C; 03AF; # GREEK CAPITAL LETTER IOTA WITH TONOS +038C; C; 03CC; # GREEK CAPITAL LETTER OMICRON WITH TONOS +038E; C; 03CD; # GREEK CAPITAL LETTER UPSILON WITH TONOS +038F; C; 03CE; # GREEK CAPITAL LETTER OMEGA WITH TONOS +0390; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS +0391; C; 03B1; # GREEK CAPITAL LETTER ALPHA +0392; C; 03B2; # GREEK CAPITAL LETTER BETA +0393; C; 03B3; # GREEK CAPITAL LETTER GAMMA +0394; C; 03B4; # GREEK CAPITAL LETTER DELTA +0395; C; 03B5; # GREEK CAPITAL LETTER EPSILON +0396; C; 03B6; # GREEK CAPITAL LETTER ZETA +0397; C; 03B7; # GREEK CAPITAL LETTER ETA +0398; C; 03B8; # GREEK CAPITAL LETTER THETA +0399; C; 03B9; # GREEK CAPITAL LETTER IOTA +039A; C; 03BA; # GREEK CAPITAL LETTER KAPPA +039B; C; 03BB; # GREEK CAPITAL LETTER LAMDA +039C; C; 03BC; # GREEK CAPITAL LETTER MU +039D; C; 03BD; # GREEK CAPITAL LETTER NU +039E; C; 03BE; # GREEK CAPITAL LETTER XI +039F; C; 03BF; # GREEK CAPITAL LETTER OMICRON +03A0; C; 03C0; # GREEK CAPITAL LETTER PI +03A1; C; 03C1; # GREEK CAPITAL LETTER RHO +03A3; C; 03C3; # GREEK CAPITAL LETTER SIGMA +03A4; C; 03C4; # GREEK CAPITAL LETTER TAU +03A5; C; 03C5; # GREEK CAPITAL LETTER UPSILON +03A6; C; 03C6; # GREEK CAPITAL LETTER PHI +03A7; C; 03C7; # GREEK CAPITAL LETTER CHI +03A8; C; 03C8; # GREEK CAPITAL LETTER PSI +03A9; C; 03C9; # GREEK CAPITAL LETTER OMEGA +03AA; C; 03CA; # GREEK CAPITAL LETTER IOTA WITH DIALYTIKA +03AB; C; 03CB; # GREEK CAPITAL LETTER UPSILON WITH DIALYTIKA +03B0; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS +03C2; C; 03C3; # GREEK SMALL LETTER FINAL SIGMA +03CF; C; 03D7; # GREEK CAPITAL KAI SYMBOL +03D0; C; 03B2; # GREEK BETA SYMBOL +03D1; C; 03B8; # GREEK THETA SYMBOL +03D5; C; 03C6; # GREEK PHI SYMBOL +03D6; C; 03C0; # GREEK PI SYMBOL +03D8; C; 03D9; # GREEK LETTER ARCHAIC KOPPA +03DA; C; 03DB; # GREEK LETTER STIGMA +03DC; C; 03DD; # GREEK LETTER DIGAMMA +03DE; C; 03DF; # GREEK LETTER KOPPA +03E0; C; 03E1; # GREEK LETTER SAMPI +03E2; C; 03E3; # COPTIC CAPITAL LETTER SHEI +03E4; C; 03E5; # COPTIC CAPITAL LETTER FEI +03E6; C; 03E7; # COPTIC CAPITAL LETTER KHEI +03E8; C; 03E9; # COPTIC CAPITAL LETTER HORI +03EA; C; 03EB; # COPTIC CAPITAL LETTER GANGIA +03EC; C; 03ED; # COPTIC CAPITAL LETTER SHIMA +03EE; C; 03EF; # COPTIC CAPITAL LETTER DEI +03F0; C; 03BA; # GREEK KAPPA SYMBOL +03F1; C; 03C1; # GREEK RHO SYMBOL +03F4; C; 03B8; # GREEK CAPITAL THETA SYMBOL +03F5; C; 03B5; # GREEK LUNATE EPSILON SYMBOL +03F7; C; 03F8; # GREEK CAPITAL LETTER SHO +03F9; C; 03F2; # GREEK CAPITAL LUNATE SIGMA SYMBOL +03FA; C; 03FB; # GREEK CAPITAL LETTER SAN +03FD; C; 037B; # GREEK CAPITAL REVERSED LUNATE SIGMA SYMBOL +03FE; C; 037C; # GREEK CAPITAL DOTTED LUNATE SIGMA SYMBOL +03FF; C; 037D; # GREEK CAPITAL REVERSED DOTTED LUNATE SIGMA SYMBOL +0400; C; 0450; # CYRILLIC CAPITAL LETTER IE WITH GRAVE +0401; C; 0451; # CYRILLIC CAPITAL LETTER IO +0402; C; 0452; # CYRILLIC CAPITAL LETTER DJE +0403; C; 0453; # CYRILLIC CAPITAL LETTER GJE +0404; C; 0454; # CYRILLIC CAPITAL LETTER UKRAINIAN IE +0405; C; 0455; # CYRILLIC CAPITAL LETTER DZE +0406; C; 0456; # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +0407; C; 0457; # CYRILLIC CAPITAL LETTER YI +0408; C; 0458; # CYRILLIC CAPITAL LETTER JE +0409; C; 0459; # CYRILLIC CAPITAL LETTER LJE +040A; C; 045A; # CYRILLIC CAPITAL LETTER NJE +040B; C; 045B; # CYRILLIC CAPITAL LETTER TSHE +040C; C; 045C; # CYRILLIC CAPITAL LETTER KJE +040D; C; 045D; # CYRILLIC CAPITAL LETTER I WITH GRAVE +040E; C; 045E; # CYRILLIC CAPITAL LETTER SHORT U +040F; C; 045F; # CYRILLIC CAPITAL LETTER DZHE +0410; C; 0430; # CYRILLIC CAPITAL LETTER A +0411; C; 0431; # CYRILLIC CAPITAL LETTER BE +0412; C; 0432; # CYRILLIC CAPITAL LETTER VE +0413; C; 0433; # CYRILLIC CAPITAL LETTER GHE +0414; C; 0434; # CYRILLIC CAPITAL LETTER DE +0415; C; 0435; # CYRILLIC CAPITAL LETTER IE +0416; C; 0436; # CYRILLIC CAPITAL LETTER ZHE +0417; C; 0437; # CYRILLIC CAPITAL LETTER ZE +0418; C; 0438; # CYRILLIC CAPITAL LETTER I +0419; C; 0439; # CYRILLIC CAPITAL LETTER SHORT I +041A; C; 043A; # CYRILLIC CAPITAL LETTER KA +041B; C; 043B; # CYRILLIC CAPITAL LETTER EL +041C; C; 043C; # CYRILLIC CAPITAL LETTER EM +041D; C; 043D; # CYRILLIC CAPITAL LETTER EN +041E; C; 043E; # CYRILLIC CAPITAL LETTER O +041F; C; 043F; # CYRILLIC CAPITAL LETTER PE +0420; C; 0440; # CYRILLIC CAPITAL LETTER ER +0421; C; 0441; # CYRILLIC CAPITAL LETTER ES +0422; C; 0442; # CYRILLIC CAPITAL LETTER TE +0423; C; 0443; # CYRILLIC CAPITAL LETTER U +0424; C; 0444; # CYRILLIC CAPITAL LETTER EF +0425; C; 0445; # CYRILLIC CAPITAL LETTER HA +0426; C; 0446; # CYRILLIC CAPITAL LETTER TSE +0427; C; 0447; # CYRILLIC CAPITAL LETTER CHE +0428; C; 0448; # CYRILLIC CAPITAL LETTER SHA +0429; C; 0449; # CYRILLIC CAPITAL LETTER SHCHA +042A; C; 044A; # CYRILLIC CAPITAL LETTER HARD SIGN +042B; C; 044B; # CYRILLIC CAPITAL LETTER YERU +042C; C; 044C; # CYRILLIC CAPITAL LETTER SOFT SIGN +042D; C; 044D; # CYRILLIC CAPITAL LETTER E +042E; C; 044E; # CYRILLIC CAPITAL LETTER YU +042F; C; 044F; # CYRILLIC CAPITAL LETTER YA +0460; C; 0461; # CYRILLIC CAPITAL LETTER OMEGA +0462; C; 0463; # CYRILLIC CAPITAL LETTER YAT +0464; C; 0465; # CYRILLIC CAPITAL LETTER IOTIFIED E +0466; C; 0467; # CYRILLIC CAPITAL LETTER LITTLE YUS +0468; C; 0469; # CYRILLIC CAPITAL LETTER IOTIFIED LITTLE YUS +046A; C; 046B; # CYRILLIC CAPITAL LETTER BIG YUS +046C; C; 046D; # CYRILLIC CAPITAL LETTER IOTIFIED BIG YUS +046E; C; 046F; # CYRILLIC CAPITAL LETTER KSI +0470; C; 0471; # CYRILLIC CAPITAL LETTER PSI +0472; C; 0473; # CYRILLIC CAPITAL LETTER FITA +0474; C; 0475; # CYRILLIC CAPITAL LETTER IZHITSA +0476; C; 0477; # CYRILLIC CAPITAL LETTER IZHITSA WITH DOUBLE GRAVE ACCENT +0478; C; 0479; # CYRILLIC CAPITAL LETTER UK +047A; C; 047B; # CYRILLIC CAPITAL LETTER ROUND OMEGA +047C; C; 047D; # CYRILLIC CAPITAL LETTER OMEGA WITH TITLO +047E; C; 047F; # CYRILLIC CAPITAL LETTER OT +0480; C; 0481; # CYRILLIC CAPITAL LETTER KOPPA +048A; C; 048B; # CYRILLIC CAPITAL LETTER SHORT I WITH TAIL +048C; C; 048D; # CYRILLIC CAPITAL LETTER SEMISOFT SIGN +048E; C; 048F; # CYRILLIC CAPITAL LETTER ER WITH TICK +0490; C; 0491; # CYRILLIC CAPITAL LETTER GHE WITH UPTURN +0492; C; 0493; # CYRILLIC CAPITAL LETTER GHE WITH STROKE +0494; C; 0495; # CYRILLIC CAPITAL LETTER GHE WITH MIDDLE HOOK +0496; C; 0497; # CYRILLIC CAPITAL LETTER ZHE WITH DESCENDER +0498; C; 0499; # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +049A; C; 049B; # CYRILLIC CAPITAL LETTER KA WITH DESCENDER +049C; C; 049D; # CYRILLIC CAPITAL LETTER KA WITH VERTICAL STROKE +049E; C; 049F; # CYRILLIC CAPITAL LETTER KA WITH STROKE +04A0; C; 04A1; # CYRILLIC CAPITAL LETTER BASHKIR KA +04A2; C; 04A3; # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A4; C; 04A5; # CYRILLIC CAPITAL LIGATURE EN GHE +04A6; C; 04A7; # CYRILLIC CAPITAL LETTER PE WITH MIDDLE HOOK +04A8; C; 04A9; # CYRILLIC CAPITAL LETTER ABKHASIAN HA +04AA; C; 04AB; # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AC; C; 04AD; # CYRILLIC CAPITAL LETTER TE WITH DESCENDER +04AE; C; 04AF; # CYRILLIC CAPITAL LETTER STRAIGHT U +04B0; C; 04B1; # CYRILLIC CAPITAL LETTER STRAIGHT U WITH STROKE +04B2; C; 04B3; # CYRILLIC CAPITAL LETTER HA WITH DESCENDER +04B4; C; 04B5; # CYRILLIC CAPITAL LIGATURE TE TSE +04B6; C; 04B7; # CYRILLIC CAPITAL LETTER CHE WITH DESCENDER +04B8; C; 04B9; # CYRILLIC CAPITAL LETTER CHE WITH VERTICAL STROKE +04BA; C; 04BB; # CYRILLIC CAPITAL LETTER SHHA +04BC; C; 04BD; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE +04BE; C; 04BF; # CYRILLIC CAPITAL LETTER ABKHASIAN CHE WITH DESCENDER +04C0; C; 04CF; # CYRILLIC LETTER PALOCHKA +04C1; C; 04C2; # CYRILLIC CAPITAL LETTER ZHE WITH BREVE +04C3; C; 04C4; # CYRILLIC CAPITAL LETTER KA WITH HOOK +04C5; C; 04C6; # CYRILLIC CAPITAL LETTER EL WITH TAIL +04C7; C; 04C8; # CYRILLIC CAPITAL LETTER EN WITH HOOK +04C9; C; 04CA; # CYRILLIC CAPITAL LETTER EN WITH TAIL +04CB; C; 04CC; # CYRILLIC CAPITAL LETTER KHAKASSIAN CHE +04CD; C; 04CE; # CYRILLIC CAPITAL LETTER EM WITH TAIL +04D0; C; 04D1; # CYRILLIC CAPITAL LETTER A WITH BREVE +04D2; C; 04D3; # CYRILLIC CAPITAL LETTER A WITH DIAERESIS +04D4; C; 04D5; # CYRILLIC CAPITAL LIGATURE A IE +04D6; C; 04D7; # CYRILLIC CAPITAL LETTER IE WITH BREVE +04D8; C; 04D9; # CYRILLIC CAPITAL LETTER SCHWA +04DA; C; 04DB; # CYRILLIC CAPITAL LETTER SCHWA WITH DIAERESIS +04DC; C; 04DD; # CYRILLIC CAPITAL LETTER ZHE WITH DIAERESIS +04DE; C; 04DF; # CYRILLIC CAPITAL LETTER ZE WITH DIAERESIS +04E0; C; 04E1; # CYRILLIC CAPITAL LETTER ABKHASIAN DZE +04E2; C; 04E3; # CYRILLIC CAPITAL LETTER I WITH MACRON +04E4; C; 04E5; # CYRILLIC CAPITAL LETTER I WITH DIAERESIS +04E6; C; 04E7; # CYRILLIC CAPITAL LETTER O WITH DIAERESIS +04E8; C; 04E9; # CYRILLIC CAPITAL LETTER BARRED O +04EA; C; 04EB; # CYRILLIC CAPITAL LETTER BARRED O WITH DIAERESIS +04EC; C; 04ED; # CYRILLIC CAPITAL LETTER E WITH DIAERESIS +04EE; C; 04EF; # CYRILLIC CAPITAL LETTER U WITH MACRON +04F0; C; 04F1; # CYRILLIC CAPITAL LETTER U WITH DIAERESIS +04F2; C; 04F3; # CYRILLIC CAPITAL LETTER U WITH DOUBLE ACUTE +04F4; C; 04F5; # CYRILLIC CAPITAL LETTER CHE WITH DIAERESIS +04F6; C; 04F7; # CYRILLIC CAPITAL LETTER GHE WITH DESCENDER +04F8; C; 04F9; # CYRILLIC CAPITAL LETTER YERU WITH DIAERESIS +04FA; C; 04FB; # CYRILLIC CAPITAL LETTER GHE WITH STROKE AND HOOK +04FC; C; 04FD; # CYRILLIC CAPITAL LETTER HA WITH HOOK +04FE; C; 04FF; # CYRILLIC CAPITAL LETTER HA WITH STROKE +0500; C; 0501; # CYRILLIC CAPITAL LETTER KOMI DE +0502; C; 0503; # CYRILLIC CAPITAL LETTER KOMI DJE +0504; C; 0505; # CYRILLIC CAPITAL LETTER KOMI ZJE +0506; C; 0507; # CYRILLIC CAPITAL LETTER KOMI DZJE +0508; C; 0509; # CYRILLIC CAPITAL LETTER KOMI LJE +050A; C; 050B; # CYRILLIC CAPITAL LETTER KOMI NJE +050C; C; 050D; # CYRILLIC CAPITAL LETTER KOMI SJE +050E; C; 050F; # CYRILLIC CAPITAL LETTER KOMI TJE +0510; C; 0511; # CYRILLIC CAPITAL LETTER REVERSED ZE +0512; C; 0513; # CYRILLIC CAPITAL LETTER EL WITH HOOK +0514; C; 0515; # CYRILLIC CAPITAL LETTER LHA +0516; C; 0517; # CYRILLIC CAPITAL LETTER RHA +0518; C; 0519; # CYRILLIC CAPITAL LETTER YAE +051A; C; 051B; # CYRILLIC CAPITAL LETTER QA +051C; C; 051D; # CYRILLIC CAPITAL LETTER WE +051E; C; 051F; # CYRILLIC CAPITAL LETTER ALEUT KA +0520; C; 0521; # CYRILLIC CAPITAL LETTER EL WITH MIDDLE HOOK +0522; C; 0523; # CYRILLIC CAPITAL LETTER EN WITH MIDDLE HOOK +0524; C; 0525; # CYRILLIC CAPITAL LETTER PE WITH DESCENDER +0526; C; 0527; # CYRILLIC CAPITAL LETTER SHHA WITH DESCENDER +0531; C; 0561; # ARMENIAN CAPITAL LETTER AYB +0532; C; 0562; # ARMENIAN CAPITAL LETTER BEN +0533; C; 0563; # ARMENIAN CAPITAL LETTER GIM +0534; C; 0564; # ARMENIAN CAPITAL LETTER DA +0535; C; 0565; # ARMENIAN CAPITAL LETTER ECH +0536; C; 0566; # ARMENIAN CAPITAL LETTER ZA +0537; C; 0567; # ARMENIAN CAPITAL LETTER EH +0538; C; 0568; # ARMENIAN CAPITAL LETTER ET +0539; C; 0569; # ARMENIAN CAPITAL LETTER TO +053A; C; 056A; # ARMENIAN CAPITAL LETTER ZHE +053B; C; 056B; # ARMENIAN CAPITAL LETTER INI +053C; C; 056C; # ARMENIAN CAPITAL LETTER LIWN +053D; C; 056D; # ARMENIAN CAPITAL LETTER XEH +053E; C; 056E; # ARMENIAN CAPITAL LETTER CA +053F; C; 056F; # ARMENIAN CAPITAL LETTER KEN +0540; C; 0570; # ARMENIAN CAPITAL LETTER HO +0541; C; 0571; # ARMENIAN CAPITAL LETTER JA +0542; C; 0572; # ARMENIAN CAPITAL LETTER GHAD +0543; C; 0573; # ARMENIAN CAPITAL LETTER CHEH +0544; C; 0574; # ARMENIAN CAPITAL LETTER MEN +0545; C; 0575; # ARMENIAN CAPITAL LETTER YI +0546; C; 0576; # ARMENIAN CAPITAL LETTER NOW +0547; C; 0577; # ARMENIAN CAPITAL LETTER SHA +0548; C; 0578; # ARMENIAN CAPITAL LETTER VO +0549; C; 0579; # ARMENIAN CAPITAL LETTER CHA +054A; C; 057A; # ARMENIAN CAPITAL LETTER PEH +054B; C; 057B; # ARMENIAN CAPITAL LETTER JHEH +054C; C; 057C; # ARMENIAN CAPITAL LETTER RA +054D; C; 057D; # ARMENIAN CAPITAL LETTER SEH +054E; C; 057E; # ARMENIAN CAPITAL LETTER VEW +054F; C; 057F; # ARMENIAN CAPITAL LETTER TIWN +0550; C; 0580; # ARMENIAN CAPITAL LETTER REH +0551; C; 0581; # ARMENIAN CAPITAL LETTER CO +0552; C; 0582; # ARMENIAN CAPITAL LETTER YIWN +0553; C; 0583; # ARMENIAN CAPITAL LETTER PIWR +0554; C; 0584; # ARMENIAN CAPITAL LETTER KEH +0555; C; 0585; # ARMENIAN CAPITAL LETTER OH +0556; C; 0586; # ARMENIAN CAPITAL LETTER FEH +0587; F; 0565 0582; # ARMENIAN SMALL LIGATURE ECH YIWN +10A0; C; 2D00; # GEORGIAN CAPITAL LETTER AN +10A1; C; 2D01; # GEORGIAN CAPITAL LETTER BAN +10A2; C; 2D02; # GEORGIAN CAPITAL LETTER GAN +10A3; C; 2D03; # GEORGIAN CAPITAL LETTER DON +10A4; C; 2D04; # GEORGIAN CAPITAL LETTER EN +10A5; C; 2D05; # GEORGIAN CAPITAL LETTER VIN +10A6; C; 2D06; # GEORGIAN CAPITAL LETTER ZEN +10A7; C; 2D07; # GEORGIAN CAPITAL LETTER TAN +10A8; C; 2D08; # GEORGIAN CAPITAL LETTER IN +10A9; C; 2D09; # GEORGIAN CAPITAL LETTER KAN +10AA; C; 2D0A; # GEORGIAN CAPITAL LETTER LAS +10AB; C; 2D0B; # GEORGIAN CAPITAL LETTER MAN +10AC; C; 2D0C; # GEORGIAN CAPITAL LETTER NAR +10AD; C; 2D0D; # GEORGIAN CAPITAL LETTER ON +10AE; C; 2D0E; # GEORGIAN CAPITAL LETTER PAR +10AF; C; 2D0F; # GEORGIAN CAPITAL LETTER ZHAR +10B0; C; 2D10; # GEORGIAN CAPITAL LETTER RAE +10B1; C; 2D11; # GEORGIAN CAPITAL LETTER SAN +10B2; C; 2D12; # GEORGIAN CAPITAL LETTER TAR +10B3; C; 2D13; # GEORGIAN CAPITAL LETTER UN +10B4; C; 2D14; # GEORGIAN CAPITAL LETTER PHAR +10B5; C; 2D15; # GEORGIAN CAPITAL LETTER KHAR +10B6; C; 2D16; # GEORGIAN CAPITAL LETTER GHAN +10B7; C; 2D17; # GEORGIAN CAPITAL LETTER QAR +10B8; C; 2D18; # GEORGIAN CAPITAL LETTER SHIN +10B9; C; 2D19; # GEORGIAN CAPITAL LETTER CHIN +10BA; C; 2D1A; # GEORGIAN CAPITAL LETTER CAN +10BB; C; 2D1B; # GEORGIAN CAPITAL LETTER JIL +10BC; C; 2D1C; # GEORGIAN CAPITAL LETTER CIL +10BD; C; 2D1D; # GEORGIAN CAPITAL LETTER CHAR +10BE; C; 2D1E; # GEORGIAN CAPITAL LETTER XAN +10BF; C; 2D1F; # GEORGIAN CAPITAL LETTER JHAN +10C0; C; 2D20; # GEORGIAN CAPITAL LETTER HAE +10C1; C; 2D21; # GEORGIAN CAPITAL LETTER HE +10C2; C; 2D22; # GEORGIAN CAPITAL LETTER HIE +10C3; C; 2D23; # GEORGIAN CAPITAL LETTER WE +10C4; C; 2D24; # GEORGIAN CAPITAL LETTER HAR +10C5; C; 2D25; # GEORGIAN CAPITAL LETTER HOE +1E00; C; 1E01; # LATIN CAPITAL LETTER A WITH RING BELOW +1E02; C; 1E03; # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E04; C; 1E05; # LATIN CAPITAL LETTER B WITH DOT BELOW +1E06; C; 1E07; # LATIN CAPITAL LETTER B WITH LINE BELOW +1E08; C; 1E09; # LATIN CAPITAL LETTER C WITH CEDILLA AND ACUTE +1E0A; C; 1E0B; # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0C; C; 1E0D; # LATIN CAPITAL LETTER D WITH DOT BELOW +1E0E; C; 1E0F; # LATIN CAPITAL LETTER D WITH LINE BELOW +1E10; C; 1E11; # LATIN CAPITAL LETTER D WITH CEDILLA +1E12; C; 1E13; # LATIN CAPITAL LETTER D WITH CIRCUMFLEX BELOW +1E14; C; 1E15; # LATIN CAPITAL LETTER E WITH MACRON AND GRAVE +1E16; C; 1E17; # LATIN CAPITAL LETTER E WITH MACRON AND ACUTE +1E18; C; 1E19; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX BELOW +1E1A; C; 1E1B; # LATIN CAPITAL LETTER E WITH TILDE BELOW +1E1C; C; 1E1D; # LATIN CAPITAL LETTER E WITH CEDILLA AND BREVE +1E1E; C; 1E1F; # LATIN CAPITAL LETTER F WITH DOT ABOVE +1E20; C; 1E21; # LATIN CAPITAL LETTER G WITH MACRON +1E22; C; 1E23; # LATIN CAPITAL LETTER H WITH DOT ABOVE +1E24; C; 1E25; # LATIN CAPITAL LETTER H WITH DOT BELOW +1E26; C; 1E27; # LATIN CAPITAL LETTER H WITH DIAERESIS +1E28; C; 1E29; # LATIN CAPITAL LETTER H WITH CEDILLA +1E2A; C; 1E2B; # LATIN CAPITAL LETTER H WITH BREVE BELOW +1E2C; C; 1E2D; # LATIN CAPITAL LETTER I WITH TILDE BELOW +1E2E; C; 1E2F; # LATIN CAPITAL LETTER I WITH DIAERESIS AND ACUTE +1E30; C; 1E31; # LATIN CAPITAL LETTER K WITH ACUTE +1E32; C; 1E33; # LATIN CAPITAL LETTER K WITH DOT BELOW +1E34; C; 1E35; # LATIN CAPITAL LETTER K WITH LINE BELOW +1E36; C; 1E37; # LATIN CAPITAL LETTER L WITH DOT BELOW +1E38; C; 1E39; # LATIN CAPITAL LETTER L WITH DOT BELOW AND MACRON +1E3A; C; 1E3B; # LATIN CAPITAL LETTER L WITH LINE BELOW +1E3C; C; 1E3D; # LATIN CAPITAL LETTER L WITH CIRCUMFLEX BELOW +1E3E; C; 1E3F; # LATIN CAPITAL LETTER M WITH ACUTE +1E40; C; 1E41; # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E42; C; 1E43; # LATIN CAPITAL LETTER M WITH DOT BELOW +1E44; C; 1E45; # LATIN CAPITAL LETTER N WITH DOT ABOVE +1E46; C; 1E47; # LATIN CAPITAL LETTER N WITH DOT BELOW +1E48; C; 1E49; # LATIN CAPITAL LETTER N WITH LINE BELOW +1E4A; C; 1E4B; # LATIN CAPITAL LETTER N WITH CIRCUMFLEX BELOW +1E4C; C; 1E4D; # LATIN CAPITAL LETTER O WITH TILDE AND ACUTE +1E4E; C; 1E4F; # LATIN CAPITAL LETTER O WITH TILDE AND DIAERESIS +1E50; C; 1E51; # LATIN CAPITAL LETTER O WITH MACRON AND GRAVE +1E52; C; 1E53; # LATIN CAPITAL LETTER O WITH MACRON AND ACUTE +1E54; C; 1E55; # LATIN CAPITAL LETTER P WITH ACUTE +1E56; C; 1E57; # LATIN CAPITAL LETTER P WITH DOT ABOVE +1E58; C; 1E59; # LATIN CAPITAL LETTER R WITH DOT ABOVE +1E5A; C; 1E5B; # LATIN CAPITAL LETTER R WITH DOT BELOW +1E5C; C; 1E5D; # LATIN CAPITAL LETTER R WITH DOT BELOW AND MACRON +1E5E; C; 1E5F; # LATIN CAPITAL LETTER R WITH LINE BELOW +1E60; C; 1E61; # LATIN CAPITAL LETTER S WITH DOT ABOVE +1E62; C; 1E63; # LATIN CAPITAL LETTER S WITH DOT BELOW +1E64; C; 1E65; # LATIN CAPITAL LETTER S WITH ACUTE AND DOT ABOVE +1E66; C; 1E67; # LATIN CAPITAL LETTER S WITH CARON AND DOT ABOVE +1E68; C; 1E69; # LATIN CAPITAL LETTER S WITH DOT BELOW AND DOT ABOVE +1E6A; C; 1E6B; # LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6C; C; 1E6D; # LATIN CAPITAL LETTER T WITH DOT BELOW +1E6E; C; 1E6F; # LATIN CAPITAL LETTER T WITH LINE BELOW +1E70; C; 1E71; # LATIN CAPITAL LETTER T WITH CIRCUMFLEX BELOW +1E72; C; 1E73; # LATIN CAPITAL LETTER U WITH DIAERESIS BELOW +1E74; C; 1E75; # LATIN CAPITAL LETTER U WITH TILDE BELOW +1E76; C; 1E77; # LATIN CAPITAL LETTER U WITH CIRCUMFLEX BELOW +1E78; C; 1E79; # LATIN CAPITAL LETTER U WITH TILDE AND ACUTE +1E7A; C; 1E7B; # LATIN CAPITAL LETTER U WITH MACRON AND DIAERESIS +1E7C; C; 1E7D; # LATIN CAPITAL LETTER V WITH TILDE +1E7E; C; 1E7F; # LATIN CAPITAL LETTER V WITH DOT BELOW +1E80; C; 1E81; # LATIN CAPITAL LETTER W WITH GRAVE +1E82; C; 1E83; # LATIN CAPITAL LETTER W WITH ACUTE +1E84; C; 1E85; # LATIN CAPITAL LETTER W WITH DIAERESIS +1E86; C; 1E87; # LATIN CAPITAL LETTER W WITH DOT ABOVE +1E88; C; 1E89; # LATIN CAPITAL LETTER W WITH DOT BELOW +1E8A; C; 1E8B; # LATIN CAPITAL LETTER X WITH DOT ABOVE +1E8C; C; 1E8D; # LATIN CAPITAL LETTER X WITH DIAERESIS +1E8E; C; 1E8F; # LATIN CAPITAL LETTER Y WITH DOT ABOVE +1E90; C; 1E91; # LATIN CAPITAL LETTER Z WITH CIRCUMFLEX +1E92; C; 1E93; # LATIN CAPITAL LETTER Z WITH DOT BELOW +1E94; C; 1E95; # LATIN CAPITAL LETTER Z WITH LINE BELOW +1E96; F; 0068 0331; # LATIN SMALL LETTER H WITH LINE BELOW +1E97; F; 0074 0308; # LATIN SMALL LETTER T WITH DIAERESIS +1E98; F; 0077 030A; # LATIN SMALL LETTER W WITH RING ABOVE +1E99; F; 0079 030A; # LATIN SMALL LETTER Y WITH RING ABOVE +1E9A; F; 0061 02BE; # LATIN SMALL LETTER A WITH RIGHT HALF RING +1E9B; C; 1E61; # LATIN SMALL LETTER LONG S WITH DOT ABOVE +1E9E; F; 0073 0073; # LATIN CAPITAL LETTER SHARP S +1E9E; S; 00DF; # LATIN CAPITAL LETTER SHARP S +1EA0; C; 1EA1; # LATIN CAPITAL LETTER A WITH DOT BELOW +1EA2; C; 1EA3; # LATIN CAPITAL LETTER A WITH HOOK ABOVE +1EA4; C; 1EA5; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND ACUTE +1EA6; C; 1EA7; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND GRAVE +1EA8; C; 1EA9; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND HOOK ABOVE +1EAA; C; 1EAB; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND TILDE +1EAC; C; 1EAD; # LATIN CAPITAL LETTER A WITH CIRCUMFLEX AND DOT BELOW +1EAE; C; 1EAF; # LATIN CAPITAL LETTER A WITH BREVE AND ACUTE +1EB0; C; 1EB1; # LATIN CAPITAL LETTER A WITH BREVE AND GRAVE +1EB2; C; 1EB3; # LATIN CAPITAL LETTER A WITH BREVE AND HOOK ABOVE +1EB4; C; 1EB5; # LATIN CAPITAL LETTER A WITH BREVE AND TILDE +1EB6; C; 1EB7; # LATIN CAPITAL LETTER A WITH BREVE AND DOT BELOW +1EB8; C; 1EB9; # LATIN CAPITAL LETTER E WITH DOT BELOW +1EBA; C; 1EBB; # LATIN CAPITAL LETTER E WITH HOOK ABOVE +1EBC; C; 1EBD; # LATIN CAPITAL LETTER E WITH TILDE +1EBE; C; 1EBF; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE +1EC0; C; 1EC1; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND GRAVE +1EC2; C; 1EC3; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND HOOK ABOVE +1EC4; C; 1EC5; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND TILDE +1EC6; C; 1EC7; # LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND DOT BELOW +1EC8; C; 1EC9; # LATIN CAPITAL LETTER I WITH HOOK ABOVE +1ECA; C; 1ECB; # LATIN CAPITAL LETTER I WITH DOT BELOW +1ECC; C; 1ECD; # LATIN CAPITAL LETTER O WITH DOT BELOW +1ECE; C; 1ECF; # LATIN CAPITAL LETTER O WITH HOOK ABOVE +1ED0; C; 1ED1; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND ACUTE +1ED2; C; 1ED3; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND GRAVE +1ED4; C; 1ED5; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND HOOK ABOVE +1ED6; C; 1ED7; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND TILDE +1ED8; C; 1ED9; # LATIN CAPITAL LETTER O WITH CIRCUMFLEX AND DOT BELOW +1EDA; C; 1EDB; # LATIN CAPITAL LETTER O WITH HORN AND ACUTE +1EDC; C; 1EDD; # LATIN CAPITAL LETTER O WITH HORN AND GRAVE +1EDE; C; 1EDF; # LATIN CAPITAL LETTER O WITH HORN AND HOOK ABOVE +1EE0; C; 1EE1; # LATIN CAPITAL LETTER O WITH HORN AND TILDE +1EE2; C; 1EE3; # LATIN CAPITAL LETTER O WITH HORN AND DOT BELOW +1EE4; C; 1EE5; # LATIN CAPITAL LETTER U WITH DOT BELOW +1EE6; C; 1EE7; # LATIN CAPITAL LETTER U WITH HOOK ABOVE +1EE8; C; 1EE9; # LATIN CAPITAL LETTER U WITH HORN AND ACUTE +1EEA; C; 1EEB; # LATIN CAPITAL LETTER U WITH HORN AND GRAVE +1EEC; C; 1EED; # LATIN CAPITAL LETTER U WITH HORN AND HOOK ABOVE +1EEE; C; 1EEF; # LATIN CAPITAL LETTER U WITH HORN AND TILDE +1EF0; C; 1EF1; # LATIN CAPITAL LETTER U WITH HORN AND DOT BELOW +1EF2; C; 1EF3; # LATIN CAPITAL LETTER Y WITH GRAVE +1EF4; C; 1EF5; # LATIN CAPITAL LETTER Y WITH DOT BELOW +1EF6; C; 1EF7; # LATIN CAPITAL LETTER Y WITH HOOK ABOVE +1EF8; C; 1EF9; # LATIN CAPITAL LETTER Y WITH TILDE +1EFA; C; 1EFB; # LATIN CAPITAL LETTER MIDDLE-WELSH LL +1EFC; C; 1EFD; # LATIN CAPITAL LETTER MIDDLE-WELSH V +1EFE; C; 1EFF; # LATIN CAPITAL LETTER Y WITH LOOP +1F08; C; 1F00; # GREEK CAPITAL LETTER ALPHA WITH PSILI +1F09; C; 1F01; # GREEK CAPITAL LETTER ALPHA WITH DASIA +1F0A; C; 1F02; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA +1F0B; C; 1F03; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA +1F0C; C; 1F04; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA +1F0D; C; 1F05; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA +1F0E; C; 1F06; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI +1F0F; C; 1F07; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI +1F18; C; 1F10; # GREEK CAPITAL LETTER EPSILON WITH PSILI +1F19; C; 1F11; # GREEK CAPITAL LETTER EPSILON WITH DASIA +1F1A; C; 1F12; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND VARIA +1F1B; C; 1F13; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND VARIA +1F1C; C; 1F14; # GREEK CAPITAL LETTER EPSILON WITH PSILI AND OXIA +1F1D; C; 1F15; # GREEK CAPITAL LETTER EPSILON WITH DASIA AND OXIA +1F28; C; 1F20; # GREEK CAPITAL LETTER ETA WITH PSILI +1F29; C; 1F21; # GREEK CAPITAL LETTER ETA WITH DASIA +1F2A; C; 1F22; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA +1F2B; C; 1F23; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA +1F2C; C; 1F24; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA +1F2D; C; 1F25; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA +1F2E; C; 1F26; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI +1F2F; C; 1F27; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI +1F38; C; 1F30; # GREEK CAPITAL LETTER IOTA WITH PSILI +1F39; C; 1F31; # GREEK CAPITAL LETTER IOTA WITH DASIA +1F3A; C; 1F32; # GREEK CAPITAL LETTER IOTA WITH PSILI AND VARIA +1F3B; C; 1F33; # GREEK CAPITAL LETTER IOTA WITH DASIA AND VARIA +1F3C; C; 1F34; # GREEK CAPITAL LETTER IOTA WITH PSILI AND OXIA +1F3D; C; 1F35; # GREEK CAPITAL LETTER IOTA WITH DASIA AND OXIA +1F3E; C; 1F36; # GREEK CAPITAL LETTER IOTA WITH PSILI AND PERISPOMENI +1F3F; C; 1F37; # GREEK CAPITAL LETTER IOTA WITH DASIA AND PERISPOMENI +1F48; C; 1F40; # GREEK CAPITAL LETTER OMICRON WITH PSILI +1F49; C; 1F41; # GREEK CAPITAL LETTER OMICRON WITH DASIA +1F4A; C; 1F42; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND VARIA +1F4B; C; 1F43; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND VARIA +1F4C; C; 1F44; # GREEK CAPITAL LETTER OMICRON WITH PSILI AND OXIA +1F4D; C; 1F45; # GREEK CAPITAL LETTER OMICRON WITH DASIA AND OXIA +1F50; F; 03C5 0313; # GREEK SMALL LETTER UPSILON WITH PSILI +1F52; F; 03C5 0313 0300; # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA +1F54; F; 03C5 0313 0301; # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA +1F56; F; 03C5 0313 0342; # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI +1F59; C; 1F51; # GREEK CAPITAL LETTER UPSILON WITH DASIA +1F5B; C; 1F53; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND VARIA +1F5D; C; 1F55; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND OXIA +1F5F; C; 1F57; # GREEK CAPITAL LETTER UPSILON WITH DASIA AND PERISPOMENI +1F68; C; 1F60; # GREEK CAPITAL LETTER OMEGA WITH PSILI +1F69; C; 1F61; # GREEK CAPITAL LETTER OMEGA WITH DASIA +1F6A; C; 1F62; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA +1F6B; C; 1F63; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA +1F6C; C; 1F64; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA +1F6D; C; 1F65; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA +1F6E; C; 1F66; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI +1F6F; C; 1F67; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI +1F80; F; 1F00 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND YPOGEGRAMMENI +1F81; F; 1F01 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND YPOGEGRAMMENI +1F82; F; 1F02 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F83; F; 1F03 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F84; F; 1F04 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F85; F; 1F05 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F86; F; 1F06 03B9; # GREEK SMALL LETTER ALPHA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F87; F; 1F07 03B9; # GREEK SMALL LETTER ALPHA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F88; F; 1F00 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F88; S; 1F80; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PROSGEGRAMMENI +1F89; F; 1F01 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F89; S; 1F81; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PROSGEGRAMMENI +1F8A; F; 1F02 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8A; S; 1F82; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F8B; F; 1F03 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8B; S; 1F83; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F8C; F; 1F04 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8C; S; 1F84; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F8D; F; 1F05 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8D; S; 1F85; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F8E; F; 1F06 03B9; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8E; S; 1F86; # GREEK CAPITAL LETTER ALPHA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F8F; F; 1F07 03B9; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F8F; S; 1F87; # GREEK CAPITAL LETTER ALPHA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F90; F; 1F20 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND YPOGEGRAMMENI +1F91; F; 1F21 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND YPOGEGRAMMENI +1F92; F; 1F22 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1F93; F; 1F23 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1F94; F; 1F24 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1F95; F; 1F25 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1F96; F; 1F26 03B9; # GREEK SMALL LETTER ETA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1F97; F; 1F27 03B9; # GREEK SMALL LETTER ETA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1F98; F; 1F20 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F98; S; 1F90; # GREEK CAPITAL LETTER ETA WITH PSILI AND PROSGEGRAMMENI +1F99; F; 1F21 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F99; S; 1F91; # GREEK CAPITAL LETTER ETA WITH DASIA AND PROSGEGRAMMENI +1F9A; F; 1F22 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9A; S; 1F92; # GREEK CAPITAL LETTER ETA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1F9B; F; 1F23 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9B; S; 1F93; # GREEK CAPITAL LETTER ETA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1F9C; F; 1F24 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9C; S; 1F94; # GREEK CAPITAL LETTER ETA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1F9D; F; 1F25 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9D; S; 1F95; # GREEK CAPITAL LETTER ETA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1F9E; F; 1F26 03B9; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9E; S; 1F96; # GREEK CAPITAL LETTER ETA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1F9F; F; 1F27 03B9; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1F9F; S; 1F97; # GREEK CAPITAL LETTER ETA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FA0; F; 1F60 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND YPOGEGRAMMENI +1FA1; F; 1F61 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND YPOGEGRAMMENI +1FA2; F; 1F62 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND VARIA AND YPOGEGRAMMENI +1FA3; F; 1F63 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND VARIA AND YPOGEGRAMMENI +1FA4; F; 1F64 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND OXIA AND YPOGEGRAMMENI +1FA5; F; 1F65 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND OXIA AND YPOGEGRAMMENI +1FA6; F; 1F66 03B9; # GREEK SMALL LETTER OMEGA WITH PSILI AND PERISPOMENI AND YPOGEGRAMMENI +1FA7; F; 1F67 03B9; # GREEK SMALL LETTER OMEGA WITH DASIA AND PERISPOMENI AND YPOGEGRAMMENI +1FA8; F; 1F60 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA8; S; 1FA0; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PROSGEGRAMMENI +1FA9; F; 1F61 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FA9; S; 1FA1; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PROSGEGRAMMENI +1FAA; F; 1F62 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAA; S; 1FA2; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND VARIA AND PROSGEGRAMMENI +1FAB; F; 1F63 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAB; S; 1FA3; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND VARIA AND PROSGEGRAMMENI +1FAC; F; 1F64 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAC; S; 1FA4; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND OXIA AND PROSGEGRAMMENI +1FAD; F; 1F65 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAD; S; 1FA5; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND OXIA AND PROSGEGRAMMENI +1FAE; F; 1F66 03B9; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAE; S; 1FA6; # GREEK CAPITAL LETTER OMEGA WITH PSILI AND PERISPOMENI AND PROSGEGRAMMENI +1FAF; F; 1F67 03B9; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FAF; S; 1FA7; # GREEK CAPITAL LETTER OMEGA WITH DASIA AND PERISPOMENI AND PROSGEGRAMMENI +1FB2; F; 1F70 03B9; # GREEK SMALL LETTER ALPHA WITH VARIA AND YPOGEGRAMMENI +1FB3; F; 03B1 03B9; # GREEK SMALL LETTER ALPHA WITH YPOGEGRAMMENI +1FB4; F; 03AC 03B9; # GREEK SMALL LETTER ALPHA WITH OXIA AND YPOGEGRAMMENI +1FB6; F; 03B1 0342; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI +1FB7; F; 03B1 0342 03B9; # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI +1FB8; C; 1FB0; # GREEK CAPITAL LETTER ALPHA WITH VRACHY +1FB9; C; 1FB1; # GREEK CAPITAL LETTER ALPHA WITH MACRON +1FBA; C; 1F70; # GREEK CAPITAL LETTER ALPHA WITH VARIA +1FBB; C; 1F71; # GREEK CAPITAL LETTER ALPHA WITH OXIA +1FBC; F; 03B1 03B9; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBC; S; 1FB3; # GREEK CAPITAL LETTER ALPHA WITH PROSGEGRAMMENI +1FBE; C; 03B9; # GREEK PROSGEGRAMMENI +1FC2; F; 1F74 03B9; # GREEK SMALL LETTER ETA WITH VARIA AND YPOGEGRAMMENI +1FC3; F; 03B7 03B9; # GREEK SMALL LETTER ETA WITH YPOGEGRAMMENI +1FC4; F; 03AE 03B9; # GREEK SMALL LETTER ETA WITH OXIA AND YPOGEGRAMMENI +1FC6; F; 03B7 0342; # GREEK SMALL LETTER ETA WITH PERISPOMENI +1FC7; F; 03B7 0342 03B9; # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI +1FC8; C; 1F72; # GREEK CAPITAL LETTER EPSILON WITH VARIA +1FC9; C; 1F73; # GREEK CAPITAL LETTER EPSILON WITH OXIA +1FCA; C; 1F74; # GREEK CAPITAL LETTER ETA WITH VARIA +1FCB; C; 1F75; # GREEK CAPITAL LETTER ETA WITH OXIA +1FCC; F; 03B7 03B9; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FCC; S; 1FC3; # GREEK CAPITAL LETTER ETA WITH PROSGEGRAMMENI +1FD2; F; 03B9 0308 0300; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND VARIA +1FD3; F; 03B9 0308 0301; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND OXIA +1FD6; F; 03B9 0342; # GREEK SMALL LETTER IOTA WITH PERISPOMENI +1FD7; F; 03B9 0308 0342; # GREEK SMALL LETTER IOTA WITH DIALYTIKA AND PERISPOMENI +1FD8; C; 1FD0; # GREEK CAPITAL LETTER IOTA WITH VRACHY +1FD9; C; 1FD1; # GREEK CAPITAL LETTER IOTA WITH MACRON +1FDA; C; 1F76; # GREEK CAPITAL LETTER IOTA WITH VARIA +1FDB; C; 1F77; # GREEK CAPITAL LETTER IOTA WITH OXIA +1FE2; F; 03C5 0308 0300; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND VARIA +1FE3; F; 03C5 0308 0301; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND OXIA +1FE4; F; 03C1 0313; # GREEK SMALL LETTER RHO WITH PSILI +1FE6; F; 03C5 0342; # GREEK SMALL LETTER UPSILON WITH PERISPOMENI +1FE7; F; 03C5 0308 0342; # GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND PERISPOMENI +1FE8; C; 1FE0; # GREEK CAPITAL LETTER UPSILON WITH VRACHY +1FE9; C; 1FE1; # GREEK CAPITAL LETTER UPSILON WITH MACRON +1FEA; C; 1F7A; # GREEK CAPITAL LETTER UPSILON WITH VARIA +1FEB; C; 1F7B; # GREEK CAPITAL LETTER UPSILON WITH OXIA +1FEC; C; 1FE5; # GREEK CAPITAL LETTER RHO WITH DASIA +1FF2; F; 1F7C 03B9; # GREEK SMALL LETTER OMEGA WITH VARIA AND YPOGEGRAMMENI +1FF3; F; 03C9 03B9; # GREEK SMALL LETTER OMEGA WITH YPOGEGRAMMENI +1FF4; F; 03CE 03B9; # GREEK SMALL LETTER OMEGA WITH OXIA AND YPOGEGRAMMENI +1FF6; F; 03C9 0342; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI +1FF7; F; 03C9 0342 03B9; # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI +1FF8; C; 1F78; # GREEK CAPITAL LETTER OMICRON WITH VARIA +1FF9; C; 1F79; # GREEK CAPITAL LETTER OMICRON WITH OXIA +1FFA; C; 1F7C; # GREEK CAPITAL LETTER OMEGA WITH VARIA +1FFB; C; 1F7D; # GREEK CAPITAL LETTER OMEGA WITH OXIA +1FFC; F; 03C9 03B9; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +1FFC; S; 1FF3; # GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI +2126; C; 03C9; # OHM SIGN +212A; C; 006B; # KELVIN SIGN +212B; C; 00E5; # ANGSTROM SIGN +2132; C; 214E; # TURNED CAPITAL F +2160; C; 2170; # ROMAN NUMERAL ONE +2161; C; 2171; # ROMAN NUMERAL TWO +2162; C; 2172; # ROMAN NUMERAL THREE +2163; C; 2173; # ROMAN NUMERAL FOUR +2164; C; 2174; # ROMAN NUMERAL FIVE +2165; C; 2175; # ROMAN NUMERAL SIX +2166; C; 2176; # ROMAN NUMERAL SEVEN +2167; C; 2177; # ROMAN NUMERAL EIGHT +2168; C; 2178; # ROMAN NUMERAL NINE +2169; C; 2179; # ROMAN NUMERAL TEN +216A; C; 217A; # ROMAN NUMERAL ELEVEN +216B; C; 217B; # ROMAN NUMERAL TWELVE +216C; C; 217C; # ROMAN NUMERAL FIFTY +216D; C; 217D; # ROMAN NUMERAL ONE HUNDRED +216E; C; 217E; # ROMAN NUMERAL FIVE HUNDRED +216F; C; 217F; # ROMAN NUMERAL ONE THOUSAND +2183; C; 2184; # ROMAN NUMERAL REVERSED ONE HUNDRED +24B6; C; 24D0; # CIRCLED LATIN CAPITAL LETTER A +24B7; C; 24D1; # CIRCLED LATIN CAPITAL LETTER B +24B8; C; 24D2; # CIRCLED LATIN CAPITAL LETTER C +24B9; C; 24D3; # CIRCLED LATIN CAPITAL LETTER D +24BA; C; 24D4; # CIRCLED LATIN CAPITAL LETTER E +24BB; C; 24D5; # CIRCLED LATIN CAPITAL LETTER F +24BC; C; 24D6; # CIRCLED LATIN CAPITAL LETTER G +24BD; C; 24D7; # CIRCLED LATIN CAPITAL LETTER H +24BE; C; 24D8; # CIRCLED LATIN CAPITAL LETTER I +24BF; C; 24D9; # CIRCLED LATIN CAPITAL LETTER J +24C0; C; 24DA; # CIRCLED LATIN CAPITAL LETTER K +24C1; C; 24DB; # CIRCLED LATIN CAPITAL LETTER L +24C2; C; 24DC; # CIRCLED LATIN CAPITAL LETTER M +24C3; C; 24DD; # CIRCLED LATIN CAPITAL LETTER N +24C4; C; 24DE; # CIRCLED LATIN CAPITAL LETTER O +24C5; C; 24DF; # CIRCLED LATIN CAPITAL LETTER P +24C6; C; 24E0; # CIRCLED LATIN CAPITAL LETTER Q +24C7; C; 24E1; # CIRCLED LATIN CAPITAL LETTER R +24C8; C; 24E2; # CIRCLED LATIN CAPITAL LETTER S +24C9; C; 24E3; # CIRCLED LATIN CAPITAL LETTER T +24CA; C; 24E4; # CIRCLED LATIN CAPITAL LETTER U +24CB; C; 24E5; # CIRCLED LATIN CAPITAL LETTER V +24CC; C; 24E6; # CIRCLED LATIN CAPITAL LETTER W +24CD; C; 24E7; # CIRCLED LATIN CAPITAL LETTER X +24CE; C; 24E8; # CIRCLED LATIN CAPITAL LETTER Y +24CF; C; 24E9; # CIRCLED LATIN CAPITAL LETTER Z +2C00; C; 2C30; # GLAGOLITIC CAPITAL LETTER AZU +2C01; C; 2C31; # GLAGOLITIC CAPITAL LETTER BUKY +2C02; C; 2C32; # GLAGOLITIC CAPITAL LETTER VEDE +2C03; C; 2C33; # GLAGOLITIC CAPITAL LETTER GLAGOLI +2C04; C; 2C34; # GLAGOLITIC CAPITAL LETTER DOBRO +2C05; C; 2C35; # GLAGOLITIC CAPITAL LETTER YESTU +2C06; C; 2C36; # GLAGOLITIC CAPITAL LETTER ZHIVETE +2C07; C; 2C37; # GLAGOLITIC CAPITAL LETTER DZELO +2C08; C; 2C38; # GLAGOLITIC CAPITAL LETTER ZEMLJA +2C09; C; 2C39; # GLAGOLITIC CAPITAL LETTER IZHE +2C0A; C; 2C3A; # GLAGOLITIC CAPITAL LETTER INITIAL IZHE +2C0B; C; 2C3B; # GLAGOLITIC CAPITAL LETTER I +2C0C; C; 2C3C; # GLAGOLITIC CAPITAL LETTER DJERVI +2C0D; C; 2C3D; # GLAGOLITIC CAPITAL LETTER KAKO +2C0E; C; 2C3E; # GLAGOLITIC CAPITAL LETTER LJUDIJE +2C0F; C; 2C3F; # GLAGOLITIC CAPITAL LETTER MYSLITE +2C10; C; 2C40; # GLAGOLITIC CAPITAL LETTER NASHI +2C11; C; 2C41; # GLAGOLITIC CAPITAL LETTER ONU +2C12; C; 2C42; # GLAGOLITIC CAPITAL LETTER POKOJI +2C13; C; 2C43; # GLAGOLITIC CAPITAL LETTER RITSI +2C14; C; 2C44; # GLAGOLITIC CAPITAL LETTER SLOVO +2C15; C; 2C45; # GLAGOLITIC CAPITAL LETTER TVRIDO +2C16; C; 2C46; # GLAGOLITIC CAPITAL LETTER UKU +2C17; C; 2C47; # GLAGOLITIC CAPITAL LETTER FRITU +2C18; C; 2C48; # GLAGOLITIC CAPITAL LETTER HERU +2C19; C; 2C49; # GLAGOLITIC CAPITAL LETTER OTU +2C1A; C; 2C4A; # GLAGOLITIC CAPITAL LETTER PE +2C1B; C; 2C4B; # GLAGOLITIC CAPITAL LETTER SHTA +2C1C; C; 2C4C; # GLAGOLITIC CAPITAL LETTER TSI +2C1D; C; 2C4D; # GLAGOLITIC CAPITAL LETTER CHRIVI +2C1E; C; 2C4E; # GLAGOLITIC CAPITAL LETTER SHA +2C1F; C; 2C4F; # GLAGOLITIC CAPITAL LETTER YERU +2C20; C; 2C50; # GLAGOLITIC CAPITAL LETTER YERI +2C21; C; 2C51; # GLAGOLITIC CAPITAL LETTER YATI +2C22; C; 2C52; # GLAGOLITIC CAPITAL LETTER SPIDERY HA +2C23; C; 2C53; # GLAGOLITIC CAPITAL LETTER YU +2C24; C; 2C54; # GLAGOLITIC CAPITAL LETTER SMALL YUS +2C25; C; 2C55; # GLAGOLITIC CAPITAL LETTER SMALL YUS WITH TAIL +2C26; C; 2C56; # GLAGOLITIC CAPITAL LETTER YO +2C27; C; 2C57; # GLAGOLITIC CAPITAL LETTER IOTATED SMALL YUS +2C28; C; 2C58; # GLAGOLITIC CAPITAL LETTER BIG YUS +2C29; C; 2C59; # GLAGOLITIC CAPITAL LETTER IOTATED BIG YUS +2C2A; C; 2C5A; # GLAGOLITIC CAPITAL LETTER FITA +2C2B; C; 2C5B; # GLAGOLITIC CAPITAL LETTER IZHITSA +2C2C; C; 2C5C; # GLAGOLITIC CAPITAL LETTER SHTAPIC +2C2D; C; 2C5D; # GLAGOLITIC CAPITAL LETTER TROKUTASTI A +2C2E; C; 2C5E; # GLAGOLITIC CAPITAL LETTER LATINATE MYSLITE +2C60; C; 2C61; # LATIN CAPITAL LETTER L WITH DOUBLE BAR +2C62; C; 026B; # LATIN CAPITAL LETTER L WITH MIDDLE TILDE +2C63; C; 1D7D; # LATIN CAPITAL LETTER P WITH STROKE +2C64; C; 027D; # LATIN CAPITAL LETTER R WITH TAIL +2C67; C; 2C68; # LATIN CAPITAL LETTER H WITH DESCENDER +2C69; C; 2C6A; # LATIN CAPITAL LETTER K WITH DESCENDER +2C6B; C; 2C6C; # LATIN CAPITAL LETTER Z WITH DESCENDER +2C6D; C; 0251; # LATIN CAPITAL LETTER ALPHA +2C6E; C; 0271; # LATIN CAPITAL LETTER M WITH HOOK +2C6F; C; 0250; # LATIN CAPITAL LETTER TURNED A +2C70; C; 0252; # LATIN CAPITAL LETTER TURNED ALPHA +2C72; C; 2C73; # LATIN CAPITAL LETTER W WITH HOOK +2C75; C; 2C76; # LATIN CAPITAL LETTER HALF H +2C7E; C; 023F; # LATIN CAPITAL LETTER S WITH SWASH TAIL +2C7F; C; 0240; # LATIN CAPITAL LETTER Z WITH SWASH TAIL +2C80; C; 2C81; # COPTIC CAPITAL LETTER ALFA +2C82; C; 2C83; # COPTIC CAPITAL LETTER VIDA +2C84; C; 2C85; # COPTIC CAPITAL LETTER GAMMA +2C86; C; 2C87; # COPTIC CAPITAL LETTER DALDA +2C88; C; 2C89; # COPTIC CAPITAL LETTER EIE +2C8A; C; 2C8B; # COPTIC CAPITAL LETTER SOU +2C8C; C; 2C8D; # COPTIC CAPITAL LETTER ZATA +2C8E; C; 2C8F; # COPTIC CAPITAL LETTER HATE +2C90; C; 2C91; # COPTIC CAPITAL LETTER THETHE +2C92; C; 2C93; # COPTIC CAPITAL LETTER IAUDA +2C94; C; 2C95; # COPTIC CAPITAL LETTER KAPA +2C96; C; 2C97; # COPTIC CAPITAL LETTER LAULA +2C98; C; 2C99; # COPTIC CAPITAL LETTER MI +2C9A; C; 2C9B; # COPTIC CAPITAL LETTER NI +2C9C; C; 2C9D; # COPTIC CAPITAL LETTER KSI +2C9E; C; 2C9F; # COPTIC CAPITAL LETTER O +2CA0; C; 2CA1; # COPTIC CAPITAL LETTER PI +2CA2; C; 2CA3; # COPTIC CAPITAL LETTER RO +2CA4; C; 2CA5; # COPTIC CAPITAL LETTER SIMA +2CA6; C; 2CA7; # COPTIC CAPITAL LETTER TAU +2CA8; C; 2CA9; # COPTIC CAPITAL LETTER UA +2CAA; C; 2CAB; # COPTIC CAPITAL LETTER FI +2CAC; C; 2CAD; # COPTIC CAPITAL LETTER KHI +2CAE; C; 2CAF; # COPTIC CAPITAL LETTER PSI +2CB0; C; 2CB1; # COPTIC CAPITAL LETTER OOU +2CB2; C; 2CB3; # COPTIC CAPITAL LETTER DIALECT-P ALEF +2CB4; C; 2CB5; # COPTIC CAPITAL LETTER OLD COPTIC AIN +2CB6; C; 2CB7; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC EIE +2CB8; C; 2CB9; # COPTIC CAPITAL LETTER DIALECT-P KAPA +2CBA; C; 2CBB; # COPTIC CAPITAL LETTER DIALECT-P NI +2CBC; C; 2CBD; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC NI +2CBE; C; 2CBF; # COPTIC CAPITAL LETTER OLD COPTIC OOU +2CC0; C; 2CC1; # COPTIC CAPITAL LETTER SAMPI +2CC2; C; 2CC3; # COPTIC CAPITAL LETTER CROSSED SHEI +2CC4; C; 2CC5; # COPTIC CAPITAL LETTER OLD COPTIC SHEI +2CC6; C; 2CC7; # COPTIC CAPITAL LETTER OLD COPTIC ESH +2CC8; C; 2CC9; # COPTIC CAPITAL LETTER AKHMIMIC KHEI +2CCA; C; 2CCB; # COPTIC CAPITAL LETTER DIALECT-P HORI +2CCC; C; 2CCD; # COPTIC CAPITAL LETTER OLD COPTIC HORI +2CCE; C; 2CCF; # COPTIC CAPITAL LETTER OLD COPTIC HA +2CD0; C; 2CD1; # COPTIC CAPITAL LETTER L-SHAPED HA +2CD2; C; 2CD3; # COPTIC CAPITAL LETTER OLD COPTIC HEI +2CD4; C; 2CD5; # COPTIC CAPITAL LETTER OLD COPTIC HAT +2CD6; C; 2CD7; # COPTIC CAPITAL LETTER OLD COPTIC GANGIA +2CD8; C; 2CD9; # COPTIC CAPITAL LETTER OLD COPTIC DJA +2CDA; C; 2CDB; # COPTIC CAPITAL LETTER OLD COPTIC SHIMA +2CDC; C; 2CDD; # COPTIC CAPITAL LETTER OLD NUBIAN SHIMA +2CDE; C; 2CDF; # COPTIC CAPITAL LETTER OLD NUBIAN NGI +2CE0; C; 2CE1; # COPTIC CAPITAL LETTER OLD NUBIAN NYI +2CE2; C; 2CE3; # COPTIC CAPITAL LETTER OLD NUBIAN WAU +2CEB; C; 2CEC; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC SHEI +2CED; C; 2CEE; # COPTIC CAPITAL LETTER CRYPTOGRAMMIC GANGIA +A640; C; A641; # CYRILLIC CAPITAL LETTER ZEMLYA +A642; C; A643; # CYRILLIC CAPITAL LETTER DZELO +A644; C; A645; # CYRILLIC CAPITAL LETTER REVERSED DZE +A646; C; A647; # CYRILLIC CAPITAL LETTER IOTA +A648; C; A649; # CYRILLIC CAPITAL LETTER DJERV +A64A; C; A64B; # CYRILLIC CAPITAL LETTER MONOGRAPH UK +A64C; C; A64D; # CYRILLIC CAPITAL LETTER BROAD OMEGA +A64E; C; A64F; # CYRILLIC CAPITAL LETTER NEUTRAL YER +A650; C; A651; # CYRILLIC CAPITAL LETTER YERU WITH BACK YER +A652; C; A653; # CYRILLIC CAPITAL LETTER IOTIFIED YAT +A654; C; A655; # CYRILLIC CAPITAL LETTER REVERSED YU +A656; C; A657; # CYRILLIC CAPITAL LETTER IOTIFIED A +A658; C; A659; # CYRILLIC CAPITAL LETTER CLOSED LITTLE YUS +A65A; C; A65B; # CYRILLIC CAPITAL LETTER BLENDED YUS +A65C; C; A65D; # CYRILLIC CAPITAL LETTER IOTIFIED CLOSED LITTLE YUS +A65E; C; A65F; # CYRILLIC CAPITAL LETTER YN +A660; C; A661; # CYRILLIC CAPITAL LETTER REVERSED TSE +A662; C; A663; # CYRILLIC CAPITAL LETTER SOFT DE +A664; C; A665; # CYRILLIC CAPITAL LETTER SOFT EL +A666; C; A667; # CYRILLIC CAPITAL LETTER SOFT EM +A668; C; A669; # CYRILLIC CAPITAL LETTER MONOCULAR O +A66A; C; A66B; # CYRILLIC CAPITAL LETTER BINOCULAR O +A66C; C; A66D; # CYRILLIC CAPITAL LETTER DOUBLE MONOCULAR O +A680; C; A681; # CYRILLIC CAPITAL LETTER DWE +A682; C; A683; # CYRILLIC CAPITAL LETTER DZWE +A684; C; A685; # CYRILLIC CAPITAL LETTER ZHWE +A686; C; A687; # CYRILLIC CAPITAL LETTER CCHE +A688; C; A689; # CYRILLIC CAPITAL LETTER DZZE +A68A; C; A68B; # CYRILLIC CAPITAL LETTER TE WITH MIDDLE HOOK +A68C; C; A68D; # CYRILLIC CAPITAL LETTER TWE +A68E; C; A68F; # CYRILLIC CAPITAL LETTER TSWE +A690; C; A691; # CYRILLIC CAPITAL LETTER TSSE +A692; C; A693; # CYRILLIC CAPITAL LETTER TCHE +A694; C; A695; # CYRILLIC CAPITAL LETTER HWE +A696; C; A697; # CYRILLIC CAPITAL LETTER SHWE +A722; C; A723; # LATIN CAPITAL LETTER EGYPTOLOGICAL ALEF +A724; C; A725; # LATIN CAPITAL LETTER EGYPTOLOGICAL AIN +A726; C; A727; # LATIN CAPITAL LETTER HENG +A728; C; A729; # LATIN CAPITAL LETTER TZ +A72A; C; A72B; # LATIN CAPITAL LETTER TRESILLO +A72C; C; A72D; # LATIN CAPITAL LETTER CUATRILLO +A72E; C; A72F; # LATIN CAPITAL LETTER CUATRILLO WITH COMMA +A732; C; A733; # LATIN CAPITAL LETTER AA +A734; C; A735; # LATIN CAPITAL LETTER AO +A736; C; A737; # LATIN CAPITAL LETTER AU +A738; C; A739; # LATIN CAPITAL LETTER AV +A73A; C; A73B; # LATIN CAPITAL LETTER AV WITH HORIZONTAL BAR +A73C; C; A73D; # LATIN CAPITAL LETTER AY +A73E; C; A73F; # LATIN CAPITAL LETTER REVERSED C WITH DOT +A740; C; A741; # LATIN CAPITAL LETTER K WITH STROKE +A742; C; A743; # LATIN CAPITAL LETTER K WITH DIAGONAL STROKE +A744; C; A745; # LATIN CAPITAL LETTER K WITH STROKE AND DIAGONAL STROKE +A746; C; A747; # LATIN CAPITAL LETTER BROKEN L +A748; C; A749; # LATIN CAPITAL LETTER L WITH HIGH STROKE +A74A; C; A74B; # LATIN CAPITAL LETTER O WITH LONG STROKE OVERLAY +A74C; C; A74D; # LATIN CAPITAL LETTER O WITH LOOP +A74E; C; A74F; # LATIN CAPITAL LETTER OO +A750; C; A751; # LATIN CAPITAL LETTER P WITH STROKE THROUGH DESCENDER +A752; C; A753; # LATIN CAPITAL LETTER P WITH FLOURISH +A754; C; A755; # LATIN CAPITAL LETTER P WITH SQUIRREL TAIL +A756; C; A757; # LATIN CAPITAL LETTER Q WITH STROKE THROUGH DESCENDER +A758; C; A759; # LATIN CAPITAL LETTER Q WITH DIAGONAL STROKE +A75A; C; A75B; # LATIN CAPITAL LETTER R ROTUNDA +A75C; C; A75D; # LATIN CAPITAL LETTER RUM ROTUNDA +A75E; C; A75F; # LATIN CAPITAL LETTER V WITH DIAGONAL STROKE +A760; C; A761; # LATIN CAPITAL LETTER VY +A762; C; A763; # LATIN CAPITAL LETTER VISIGOTHIC Z +A764; C; A765; # LATIN CAPITAL LETTER THORN WITH STROKE +A766; C; A767; # LATIN CAPITAL LETTER THORN WITH STROKE THROUGH DESCENDER +A768; C; A769; # LATIN CAPITAL LETTER VEND +A76A; C; A76B; # LATIN CAPITAL LETTER ET +A76C; C; A76D; # LATIN CAPITAL LETTER IS +A76E; C; A76F; # LATIN CAPITAL LETTER CON +A779; C; A77A; # LATIN CAPITAL LETTER INSULAR D +A77B; C; A77C; # LATIN CAPITAL LETTER INSULAR F +A77D; C; 1D79; # LATIN CAPITAL LETTER INSULAR G +A77E; C; A77F; # LATIN CAPITAL LETTER TURNED INSULAR G +A780; C; A781; # LATIN CAPITAL LETTER TURNED L +A782; C; A783; # LATIN CAPITAL LETTER INSULAR R +A784; C; A785; # LATIN CAPITAL LETTER INSULAR S +A786; C; A787; # LATIN CAPITAL LETTER INSULAR T +A78B; C; A78C; # LATIN CAPITAL LETTER SALTILLO +A78D; C; 0265; # LATIN CAPITAL LETTER TURNED H +A790; C; A791; # LATIN CAPITAL LETTER N WITH DESCENDER +A7A0; C; A7A1; # LATIN CAPITAL LETTER G WITH OBLIQUE STROKE +A7A2; C; A7A3; # LATIN CAPITAL LETTER K WITH OBLIQUE STROKE +A7A4; C; A7A5; # LATIN CAPITAL LETTER N WITH OBLIQUE STROKE +A7A6; C; A7A7; # LATIN CAPITAL LETTER R WITH OBLIQUE STROKE +A7A8; C; A7A9; # LATIN CAPITAL LETTER S WITH OBLIQUE STROKE +FB00; F; 0066 0066; # LATIN SMALL LIGATURE FF +FB01; F; 0066 0069; # LATIN SMALL LIGATURE FI +FB02; F; 0066 006C; # LATIN SMALL LIGATURE FL +FB03; F; 0066 0066 0069; # LATIN SMALL LIGATURE FFI +FB04; F; 0066 0066 006C; # LATIN SMALL LIGATURE FFL +FB05; F; 0073 0074; # LATIN SMALL LIGATURE LONG S T +FB06; F; 0073 0074; # LATIN SMALL LIGATURE ST +FB13; F; 0574 0576; # ARMENIAN SMALL LIGATURE MEN NOW +FB14; F; 0574 0565; # ARMENIAN SMALL LIGATURE MEN ECH +FB15; F; 0574 056B; # ARMENIAN SMALL LIGATURE MEN INI +FB16; F; 057E 0576; # ARMENIAN SMALL LIGATURE VEW NOW +FB17; F; 0574 056D; # ARMENIAN SMALL LIGATURE MEN XEH +FF21; C; FF41; # FULLWIDTH LATIN CAPITAL LETTER A +FF22; C; FF42; # FULLWIDTH LATIN CAPITAL LETTER B +FF23; C; FF43; # FULLWIDTH LATIN CAPITAL LETTER C +FF24; C; FF44; # FULLWIDTH LATIN CAPITAL LETTER D +FF25; C; FF45; # FULLWIDTH LATIN CAPITAL LETTER E +FF26; C; FF46; # FULLWIDTH LATIN CAPITAL LETTER F +FF27; C; FF47; # FULLWIDTH LATIN CAPITAL LETTER G +FF28; C; FF48; # FULLWIDTH LATIN CAPITAL LETTER H +FF29; C; FF49; # FULLWIDTH LATIN CAPITAL LETTER I +FF2A; C; FF4A; # FULLWIDTH LATIN CAPITAL LETTER J +FF2B; C; FF4B; # FULLWIDTH LATIN CAPITAL LETTER K +FF2C; C; FF4C; # FULLWIDTH LATIN CAPITAL LETTER L +FF2D; C; FF4D; # FULLWIDTH LATIN CAPITAL LETTER M +FF2E; C; FF4E; # FULLWIDTH LATIN CAPITAL LETTER N +FF2F; C; FF4F; # FULLWIDTH LATIN CAPITAL LETTER O +FF30; C; FF50; # FULLWIDTH LATIN CAPITAL LETTER P +FF31; C; FF51; # FULLWIDTH LATIN CAPITAL LETTER Q +FF32; C; FF52; # FULLWIDTH LATIN CAPITAL LETTER R +FF33; C; FF53; # FULLWIDTH LATIN CAPITAL LETTER S +FF34; C; FF54; # FULLWIDTH LATIN CAPITAL LETTER T +FF35; C; FF55; # FULLWIDTH LATIN CAPITAL LETTER U +FF36; C; FF56; # FULLWIDTH LATIN CAPITAL LETTER V +FF37; C; FF57; # FULLWIDTH LATIN CAPITAL LETTER W +FF38; C; FF58; # FULLWIDTH LATIN CAPITAL LETTER X +FF39; C; FF59; # FULLWIDTH LATIN CAPITAL LETTER Y +FF3A; C; FF5A; # FULLWIDTH LATIN CAPITAL LETTER Z +10400; C; 10428; # DESERET CAPITAL LETTER LONG I +10401; C; 10429; # DESERET CAPITAL LETTER LONG E +10402; C; 1042A; # DESERET CAPITAL LETTER LONG A +10403; C; 1042B; # DESERET CAPITAL LETTER LONG AH +10404; C; 1042C; # DESERET CAPITAL LETTER LONG O +10405; C; 1042D; # DESERET CAPITAL LETTER LONG OO +10406; C; 1042E; # DESERET CAPITAL LETTER SHORT I +10407; C; 1042F; # DESERET CAPITAL LETTER SHORT E +10408; C; 10430; # DESERET CAPITAL LETTER SHORT A +10409; C; 10431; # DESERET CAPITAL LETTER SHORT AH +1040A; C; 10432; # DESERET CAPITAL LETTER SHORT O +1040B; C; 10433; # DESERET CAPITAL LETTER SHORT OO +1040C; C; 10434; # DESERET CAPITAL LETTER AY +1040D; C; 10435; # DESERET CAPITAL LETTER OW +1040E; C; 10436; # DESERET CAPITAL LETTER WU +1040F; C; 10437; # DESERET CAPITAL LETTER YEE +10410; C; 10438; # DESERET CAPITAL LETTER H +10411; C; 10439; # DESERET CAPITAL LETTER PEE +10412; C; 1043A; # DESERET CAPITAL LETTER BEE +10413; C; 1043B; # DESERET CAPITAL LETTER TEE +10414; C; 1043C; # DESERET CAPITAL LETTER DEE +10415; C; 1043D; # DESERET CAPITAL LETTER CHEE +10416; C; 1043E; # DESERET CAPITAL LETTER JEE +10417; C; 1043F; # DESERET CAPITAL LETTER KAY +10418; C; 10440; # DESERET CAPITAL LETTER GAY +10419; C; 10441; # DESERET CAPITAL LETTER EF +1041A; C; 10442; # DESERET CAPITAL LETTER VEE +1041B; C; 10443; # DESERET CAPITAL LETTER ETH +1041C; C; 10444; # DESERET CAPITAL LETTER THEE +1041D; C; 10445; # DESERET CAPITAL LETTER ES +1041E; C; 10446; # DESERET CAPITAL LETTER ZEE +1041F; C; 10447; # DESERET CAPITAL LETTER ESH +10420; C; 10448; # DESERET CAPITAL LETTER ZHEE +10421; C; 10449; # DESERET CAPITAL LETTER ER +10422; C; 1044A; # DESERET CAPITAL LETTER EL +10423; C; 1044B; # DESERET CAPITAL LETTER EM +10424; C; 1044C; # DESERET CAPITAL LETTER EN +10425; C; 1044D; # DESERET CAPITAL LETTER ENG +10426; C; 1044E; # DESERET CAPITAL LETTER OI +10427; C; 1044F; # DESERET CAPITAL LETTER EW diff --git a/fontconfig/fc-case/Makefile.am b/fontconfig/fc-case/Makefile.am index 47d9634c6..4f255fc71 100644 --- a/fontconfig/fc-case/Makefile.am +++ b/fontconfig/fc-case/Makefile.am @@ -1,64 +1,64 @@ -# -# $Id $ -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# - -INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) - -TMPL=fccase.tmpl.h -STMPL=${top_srcdir}/fc-case/${TMPL} -TARG=fccase.h - -noinst_PROGRAMS=fc-case - -noinst_HEADERS=$(TARG) - -fc_case_SRCS= \ - fc-case.c \ - fccaseint.h \ - fccaseread.c - -CASEFOLDING=CaseFolding.txt -SCASEFOLDING=${top_srcdir}/fc-case/CaseFolding.txt - -EXTRA_DIST = $(TARG) $(TMPL) $(CASEFOLDING) - -if CROSS_COMPILING -$(TARG): $(STMPL) fc-case.c $(SCASEFOLDING) - @echo Warning: cannot rebuild $(TARG) when cross-compiling -else -$(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING) - $(AM_V_GEN) $(RM) $(TARG); \ - ./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG).tmp && \ - mv $(TARG).tmp $(TARG) -endif - -ALIAS_FILES = fcalias.h fcaliastail.h - -BUILT_SOURCES = $(ALIAS_FILES) - -$(ALIAS_FILES): - touch $(ALIAS_FILES) - -CLEANFILES = $(ALIAS_FILES) - -MAINTAINERCLEANFILES = $(TARG) +# +# $Id $ +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# + +INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) + +TMPL=fccase.tmpl.h +STMPL=${top_srcdir}/fc-case/${TMPL} +TARG=fccase.h + +noinst_PROGRAMS=fc-case + +noinst_HEADERS=$(TARG) + +fc_case_SRCS= \ + fc-case.c \ + fccaseint.h \ + fccaseread.c + +CASEFOLDING=CaseFolding.txt +SCASEFOLDING=${top_srcdir}/fc-case/CaseFolding.txt + +EXTRA_DIST = $(TARG) $(TMPL) $(CASEFOLDING) + +if CROSS_COMPILING +$(TARG): $(STMPL) fc-case.c $(SCASEFOLDING) + @echo Warning: cannot rebuild $(TARG) when cross-compiling +else +$(TARG): $(STMPL) fc-case$(EXEEXT) $(SCASEFOLDING) + $(AM_V_GEN) $(RM) $(TARG); \ + ./fc-case$(EXEEXT) $(SCASEFOLDING) < $(STMPL) > $(TARG).tmp && \ + mv $(TARG).tmp $(TARG) +endif + +ALIAS_FILES = fcalias.h fcaliastail.h + +BUILT_SOURCES = $(ALIAS_FILES) + +$(ALIAS_FILES): + touch $(ALIAS_FILES) + +CLEANFILES = $(ALIAS_FILES) + +MAINTAINERCLEANFILES = $(TARG) diff --git a/fontconfig/fc-case/fc-case.c b/fontconfig/fc-case/fc-case.c index dd8b1f08a..236bff5f0 100644 --- a/fontconfig/fc-case/fc-case.c +++ b/fontconfig/fc-case/fc-case.c @@ -1,363 +1,363 @@ -/* - * fontconfig/fc-case/fc-case.c - * - * Copyright © 2004 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include - -#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 + +#define MAX_OUT 32 +#define MAX_LINE 8192 + +typedef enum _caseFoldClass { CaseFoldCommon, CaseFoldFull, CaseFoldSimple, CaseFoldTurkic } CaseFoldClass; + +typedef struct _caseFoldClassMap { + const char *name; + CaseFoldClass class; +} CaseFoldClassMap; + +static const CaseFoldClassMap caseFoldClassMap[] = { + { "C", CaseFoldCommon }, + { "F", CaseFoldFull }, + { "S", CaseFoldSimple }, + { "T", CaseFoldTurkic }, + { 0, 0 } +}; + +typedef struct _caseFoldRaw { + FcChar32 upper; + CaseFoldClass class; + int nout; + FcChar32 lower[MAX_OUT]; +} CaseFoldRaw; + +static void +panic (const char *reason) +{ + fprintf (stderr, "fc-case: panic %s\n", reason); + exit (1); +} + +int maxExpand; +static FcCaseFold *folds; +int nfolds; + +static FcCaseFold * +addFold (void) +{ + if (folds) + folds = realloc (folds, (nfolds + 1) * sizeof (FcCaseFold)); + else + folds = malloc (sizeof (FcCaseFold)); + if (!folds) + panic ("out of memory"); + return &folds[nfolds++]; +} + +static int +ucs4_to_utf8 (FcChar32 ucs4, + FcChar8 dest[FC_UTF8_MAX_LEN]) +{ + int bits; + FcChar8 *d = dest; + + if (ucs4 < 0x80) { *d++= ucs4; bits= -6; } + else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; } + else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; } + else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; } + else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; } + else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; } + else return 0; + + for ( ; bits >= 0; bits-= 6) { + *d++= ((ucs4 >> bits) & 0x3F) | 0x80; + } + return d - dest; +} + +static int +utf8_size (FcChar32 ucs4) +{ + FcChar8 utf8[FC_UTF8_MAX_LEN]; + return ucs4_to_utf8 (ucs4, utf8 ); +} + +static FcChar8 *foldChars; +static int nfoldChars; +static int maxFoldChars; +static FcChar32 minFoldChar; +static FcChar32 maxFoldChar; + +static void +addChar (FcChar32 c) +{ + FcChar8 utf8[FC_UTF8_MAX_LEN]; + int len; + int i; + + len = ucs4_to_utf8 (c, utf8); + if (foldChars) + foldChars = realloc (foldChars, (nfoldChars + len) * sizeof (FcChar8)); + else + foldChars = malloc (sizeof (FcChar8) * len); + if (!foldChars) + panic ("out of memory"); + for (i = 0; i < len; i++) + foldChars[nfoldChars + i] = utf8[i]; + nfoldChars += len; +} + +static int +foldExtends (FcCaseFold *fold, CaseFoldRaw *raw) +{ + switch (fold->method) { + case FC_CASE_FOLD_RANGE: + if ((short) (raw->lower[0] - raw->upper) != fold->offset) + return 0; + if (raw->upper != fold->upper + fold->count) + return 0; + return 1; + case FC_CASE_FOLD_EVEN_ODD: + if ((short) (raw->lower[0] - raw->upper) != 1) + return 0; + if (raw->upper != fold->upper + fold->count + 1) + return 0; + return 1; + case FC_CASE_FOLD_FULL: + break; + } + return 0; +} + +static const char * +case_fold_method_name (FcChar16 method) +{ + switch (method) { + case FC_CASE_FOLD_RANGE: return "FC_CASE_FOLD_RANGE,"; + case FC_CASE_FOLD_EVEN_ODD: return "FC_CASE_FOLD_EVEN_ODD,"; + case FC_CASE_FOLD_FULL: return "FC_CASE_FOLD_FULL,"; + default: return "unknown"; + } +} + +static void +dump (void) +{ + int i; + + printf ( "#define FC_NUM_CASE_FOLD %d\n", nfolds); + printf ( "#define FC_NUM_CASE_FOLD_CHARS %d\n", nfoldChars); + printf ( "#define FC_MAX_CASE_FOLD_CHARS %d\n", maxFoldChars); + printf ( "#define FC_MAX_CASE_FOLD_EXPAND %d\n", maxExpand); + printf ( "#define FC_MIN_FOLD_CHAR 0x%08x\n", minFoldChar); + printf ( "#define FC_MAX_FOLD_CHAR 0x%08x\n", maxFoldChar); + printf ( "\n"); + + /* + * Dump out ranges + */ + printf ("static const FcCaseFold fcCaseFold[FC_NUM_CASE_FOLD] = {\n"); + for (i = 0; i < nfolds; i++) + { + printf (" { 0x%08x, %-22s 0x%04x, %6d },\n", + folds[i].upper, case_fold_method_name (folds[i].method), + folds[i].count, folds[i].offset); + } + printf ("};\n\n"); + + /* + * Dump out "other" values + */ + + printf ("static const FcChar8 fcCaseFoldChars[FC_NUM_CASE_FOLD_CHARS] = {\n"); + for (i = 0; i < nfoldChars; i++) + { + printf ("0x%02x", foldChars[i]); + if (i != nfoldChars - 1) + { + if ((i & 0xf) == 0xf) + printf (",\n"); + else + printf (","); + } + } + printf ("\n};\n"); +} + +/* + * Read the standard Unicode CaseFolding.txt file + */ +#define SEP "; \t\n" + +static int +parseRaw (char *line, CaseFoldRaw *raw) +{ + char *tok, *end; + int i; + + if (!isxdigit (line[0])) + return 0; + /* + * Get upper case value + */ + tok = strtok (line, SEP); + if (!tok || tok[0] == '#') + return 0; + raw->upper = strtol (tok, &end, 16); + if (end == tok) + return 0; + /* + * Get class + */ + tok = strtok (NULL, SEP); + if (!tok || tok[0] == '#') + return 0; + for (i = 0; caseFoldClassMap[i].name; i++) + if (!strcmp (tok, caseFoldClassMap[i].name)) + { + raw->class = caseFoldClassMap[i].class; + break; + } + if (!caseFoldClassMap[i].name) + return 0; + + /* + * Get list of result characters + */ + for (i = 0; i < MAX_OUT; i++) + { + tok = strtok (NULL, SEP); + if (!tok || tok[0] == '#') + break; + raw->lower[i] = strtol (tok, &end, 16); + if (end == tok) + break; + } + if (i == 0) + return 0; + raw->nout = i; + return 1; +} + +static int +caseFoldReadRaw (FILE *in, CaseFoldRaw *raw) +{ + char line[MAX_LINE]; + + for (;;) + { + if (!fgets (line, sizeof (line) - 1, in)) + return 0; + if (parseRaw (line, raw)) + return 1; + } +} + +int +main (int argc, char **argv) +{ + FcCaseFold *fold = 0; + CaseFoldRaw raw; + int i; + FILE *caseFile; + char line[MAX_LINE]; + int expand; + + if (argc != 2) + panic ("usage: fc-case CaseFolding.txt"); + caseFile = fopen (argv[1], "r"); + if (!caseFile) + panic ("can't open case folding file"); + + while (caseFoldReadRaw (caseFile, &raw)) + { + if (!minFoldChar) + minFoldChar = raw.upper; + maxFoldChar = raw.upper; + switch (raw.class) { + case CaseFoldCommon: + case CaseFoldFull: + if (raw.nout == 1) + { + if (fold && foldExtends (fold, &raw)) + fold->count = raw.upper - fold->upper + 1; + else + { + fold = addFold (); + fold->upper = raw.upper; + fold->offset = raw.lower[0] - raw.upper; + if (fold->offset == 1) + fold->method = FC_CASE_FOLD_EVEN_ODD; + else + fold->method = FC_CASE_FOLD_RANGE; + fold->count = 1; + } + expand = utf8_size (raw.lower[0]) - utf8_size(raw.upper); + } + else + { + fold = addFold (); + fold->upper = raw.upper; + fold->method = FC_CASE_FOLD_FULL; + fold->offset = nfoldChars; + for (i = 0; i < raw.nout; i++) + addChar (raw.lower[i]); + fold->count = nfoldChars - fold->offset; + if (fold->count > maxFoldChars) + maxFoldChars = fold->count; + expand = fold->count - utf8_size (raw.upper); + } + if (expand > maxExpand) + maxExpand = expand; + break; + case CaseFoldSimple: + break; + case CaseFoldTurkic: + break; + } + } + /* + * Scan the input until the marker is found + */ + + while (fgets (line, sizeof (line), stdin)) + { + if (!strncmp (line, "@@@", 3)) + break; + fputs (line, stdout); + } + + /* + * Dump these tables + */ + dump (); + + /* + * And flush out the rest of the input file + */ + + while (fgets (line, sizeof (line), stdin)) + fputs (line, stdout); + + fflush (stdout); + exit (ferror (stdout)); +} diff --git a/fontconfig/fc-case/fccase.tmpl.h b/fontconfig/fc-case/fccase.tmpl.h index 45d67d12b..c8e2925b9 100644 --- a/fontconfig/fc-case/fccase.tmpl.h +++ b/fontconfig/fc-case/fccase.tmpl.h @@ -1,25 +1,25 @@ -/* - * fontconfig/fc-case/fccase.tmpl.h - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@@@ +/* + * fontconfig/fc-case/fccase.tmpl.h + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@@@ diff --git a/fontconfig/fc-cat/Makefile.am b/fontconfig/fc-cat/Makefile.am index b88c1a499..587459591 100644 --- a/fontconfig/fc-cat/Makefile.am +++ b/fontconfig/fc-cat/Makefile.am @@ -1,59 +1,59 @@ -# -# fontconfig/fc-cat/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -DOC2MAN = docbook2man - -FC_CAT_SRC=${top_srcdir}/fc-cat - -SGML = ${FC_CAT_SRC}/fc-cat.sgml - -INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) - -bin_PROGRAMS=fc-cat - -BUILT_MANS=fc-cat.1 - -if ENABLE_DOCS -man_MANS=${BUILT_MANS} -endif - -EXTRA_DIST=fc-cat.sgml ${BUILT_MANS} - -fc_cat_LDADD = ${top_builddir}/src/libfontconfig.la - -if USEDOCBOOK - -${man_MANS}: ${SGML} - $(RM) $@ - $(DOC2MAN) ${SGML} - $(RM) manpage.* - -all-local: $(man_MANS) - -clean-local: - $(RM) $(man_MANS) - -else -all-local: -clean-local: -endif +# +# fontconfig/fc-cat/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC2MAN = docbook2man + +FC_CAT_SRC=${top_srcdir}/fc-cat + +SGML = ${FC_CAT_SRC}/fc-cat.sgml + +INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) + +bin_PROGRAMS=fc-cat + +BUILT_MANS=fc-cat.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-cat.sgml ${BUILT_MANS} + +fc_cat_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-cat/fc-cat.c b/fontconfig/fc-cat/fc-cat.c index 623a01466..5ee947ec2 100644 --- a/fontconfig/fc-cat/fc-cat.c +++ b/fontconfig/fc-cat/fc-cat.c @@ -1,392 +1,392 @@ -/* - * fontconfig/fc-cat/fc-cat.c - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include -#else -#ifdef linux -#define HAVE_GETOPT_LONG 1 -#endif -#define HAVE_GETOPT 1 -#endif - -#include -#include "../src/fcarch.h" -#include -#include -#include -#include -#include -#include -#include - -#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 -const struct option longopts[] = { - {"version", 0, 0, 'V'}, - {"verbose", 0, 0, 'v'}, - {"recurse", 0, 0, 'r'}, - {"help", 0, 0, 'h'}, - {NULL,0,0,0}, -}; -#else -#if HAVE_GETOPT -extern char *optarg; -extern int optind, opterr, optopt; -#endif -#endif - -/* - * POSIX has broken stdio so that getc must do thread-safe locking, - * this is a serious performance problem for applications doing large - * amounts of IO with getc (as is done here). If available, use - * the getc_unlocked varient instead. - */ - -#if defined(getc_unlocked) || defined(_IO_getc_unlocked) -#define GETC(f) getc_unlocked(f) -#define PUTC(c,f) putc_unlocked(c,f) -#else -#define GETC(f) getc(f) -#define PUTC(c,f) putc(c,f) -#endif - -static FcBool -write_chars (FILE *f, const FcChar8 *chars) -{ - FcChar8 c; - while ((c = *chars++)) - { - switch (c) { - case '"': - case '\\': - if (PUTC ('\\', f) == EOF) - return FcFalse; - /* fall through */ - default: - if (PUTC (c, f) == EOF) - return FcFalse; - } - } - return FcTrue; -} - -static FcBool -write_ulong (FILE *f, unsigned long t) -{ - int pow; - unsigned long temp, digit; - - temp = t; - pow = 1; - while (temp >= 10) - { - temp /= 10; - pow *= 10; - } - temp = t; - while (pow) - { - digit = temp / pow; - if (PUTC ((char) digit + '0', f) == EOF) - return FcFalse; - temp = temp - pow * digit; - pow = pow / 10; - } - return FcTrue; -} - -static FcBool -write_int (FILE *f, int i) -{ - return write_ulong (f, (unsigned long) i); -} - -static FcBool -write_string (FILE *f, const FcChar8 *string) -{ - - if (PUTC ('"', f) == EOF) - return FcFalse; - if (!write_chars (f, string)) - return FcFalse; - if (PUTC ('"', f) == EOF) - return FcFalse; - return FcTrue; -} - -static void -usage (char *program, int error) -{ - FILE *file = error ? stderr : stdout; -#if HAVE_GETOPT_LONG - fprintf (file, "usage: %s [-rv] [--recurse] [--verbose] [*-%s.cache-2|directory]...\n", - program, FC_ARCHITECTURE); - fprintf (file, " %s [-Vh] [--version] [--help]\n", program); -#else - fprintf (file, "usage: %s [-rvVh] [*-%s.cache-2|directory]...\n", - program, FC_ARCHITECTURE); -#endif - fprintf (file, "Reads font information cache from:\n"); - fprintf (file, " 1) specified fontconfig cache file\n"); - fprintf (file, " 2) related to a particular font directory\n"); - fprintf (file, "\n"); -#if HAVE_GETOPT_LONG - fprintf (file, " -r, --recurse recurse into subdirectories\n"); - fprintf (file, " -v, --verbose be verbose\n"); - fprintf (file, " -V, --version display font config version and exit\n"); - fprintf (file, " -h, --help display this help and exit\n"); -#else - fprintf (file, " -r (recurse) recurse into subdirectories\n"); - fprintf (file, " -v (verbose) be verbose\n"); - fprintf (file, " -V (version) display font config version and exit\n"); - fprintf (file, " -h (help) display this help and exit\n"); -#endif - exit (error); -} - -/* - * return the path from the directory containing 'cache' to 'file' - */ - -static const FcChar8 * -file_base_name (const FcChar8 *cache, const FcChar8 *file) -{ - int cache_len = strlen ((char *) cache); - - if (!strncmp ((char *) cache, (char *) file, cache_len) && file[cache_len] == '/') - return file + cache_len + 1; - return file; -} - -#define FC_FONT_FILE_DIR ((FcChar8 *) ".dir") - -static FcBool -cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBool verbose) -{ - FcChar8 *dir; - const FcChar8 *base; - int n; - int ndir = 0; - FcStrList *list; - - list = FcStrListCreate (dirs); - if (!list) - goto bail2; - - while ((dir = FcStrListNext (list))) - { - base = file_base_name (base_name, dir); - if (!write_string (stdout, base)) - goto bail3; - if (PUTC (' ', stdout) == EOF) - goto bail3; - if (!write_int (stdout, 0)) - goto bail3; - if (PUTC (' ', stdout) == EOF) - goto bail3; - if (!write_string (stdout, FC_FONT_FILE_DIR)) - goto bail3; - if (PUTC ('\n', stdout) == EOF) - goto bail3; - ndir++; - } - - for (n = 0; n < set->nfont; n++) - { - FcPattern *font = set->fonts[n]; - FcChar8 *s; - - s = FcPatternFormat (font, "%{=fccat}\n"); - if (s) - { - printf ("%s", s); - free (s); - } - } - if (verbose && !set->nfont && !ndir) - printf ("\n"); - - FcStrListDone (list); - - return FcTrue; - -bail3: - FcStrListDone (list); -bail2: - return FcFalse; -} - -int -main (int argc, char **argv) -{ - int i; - int ret = 0; - FcFontSet *fs; - FcStrSet *dirs; - FcStrSet *args = NULL; - FcStrList *arglist; - FcCache *cache; - FcConfig *config; - FcChar8 *arg; - int verbose = 0; - int recurse = 0; - FcBool first = FcTrue; -#if HAVE_GETOPT_LONG || HAVE_GETOPT - int c; - -#if HAVE_GETOPT_LONG - while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1) -#else - while ((c = getopt (argc, argv, "Vvrh")) != -1) -#endif - { - switch (c) { - case 'V': - fprintf (stderr, "fontconfig version %d.%d.%d\n", - FC_MAJOR, FC_MINOR, FC_REVISION); - exit (0); - case 'v': - verbose++; - break; - case 'r': - recurse++; - break; - case 'h': - usage (argv[0], 0); - default: - usage (argv[0], 1); - } - } - i = optind; -#else - i = 1; -#endif - - config = FcInitLoadConfig (); - if (!config) - { - fprintf (stderr, "%s: Can't init font config library\n", argv[0]); - return 1; - } - FcConfigSetCurrent (config); - - args = FcStrSetCreate (); - if (!args) - { - fprintf (stderr, "%s: malloc failure\n", argv[0]); - return 1; - } - if (i < argc) - { - for (; i < argc; i++) - { - if (!FcStrSetAddFilename (args, (const FcChar8 *) argv[i])) - { - fprintf (stderr, "%s: malloc failure\n", argv[0]); - return 1; - } - } - arglist = FcStrListCreate (args); - if (!arglist) - { - fprintf (stderr, "%s: malloc failure\n", argv[0]); - return 1; - } - } - else - { - recurse++; - arglist = FcConfigGetFontDirs (config); - while ((arg = FcStrListNext (arglist))) - if (!FcStrSetAdd (args, arg)) - { - fprintf (stderr, "%s: malloc failure\n", argv[0]); - return 1; - } - FcStrListDone (arglist); - } - arglist = FcStrListCreate (args); - if (!arglist) - { - fprintf (stderr, "%s: malloc failure\n", argv[0]); - return 1; - } - - while ((arg = FcStrListNext (arglist))) - { - int j; - FcChar8 *cache_file = NULL; - struct stat file_stat; - - if (FcFileIsDir (arg)) - cache = FcDirCacheLoad (arg, config, &cache_file); - else - cache = FcDirCacheLoadFile (arg, &file_stat); - if (!cache) - { - perror ((char *) arg); - ret++; - continue; - } - - dirs = FcStrSetCreate (); - fs = FcCacheCopySet (cache); - for (j = 0; j < FcCacheNumSubdir (cache); j++) - { - FcStrSetAdd (dirs, FcCacheSubdir (cache, j)); - if (recurse) - FcStrSetAdd (args, FcCacheSubdir (cache, j)); - } - - if (verbose) - { - if (!first) - printf ("\n"); - printf ("Directory: %s\nCache: %s\n--------\n", - FcCacheDir(cache), cache_file ? cache_file : arg); - first = FcFalse; - } - cache_print_set (fs, dirs, FcCacheDir (cache), verbose); - - FcStrSetDestroy (dirs); - - FcFontSetDestroy (fs); - FcDirCacheUnload (cache); - if (cache_file) - FcStrFree (cache_file); - } - - FcFini (); - return 0; -} +/* + * fontconfig/fc-cat/fc-cat.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include +#include "../src/fcarch.h" +#include +#include +#include +#include +#include +#include +#include + +#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 +const struct option longopts[] = { + {"version", 0, 0, 'V'}, + {"verbose", 0, 0, 'v'}, + {"recurse", 0, 0, 'r'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +/* + * POSIX has broken stdio so that getc must do thread-safe locking, + * this is a serious performance problem for applications doing large + * amounts of IO with getc (as is done here). If available, use + * the getc_unlocked varient instead. + */ + +#if defined(getc_unlocked) || defined(_IO_getc_unlocked) +#define GETC(f) getc_unlocked(f) +#define PUTC(c,f) putc_unlocked(c,f) +#else +#define GETC(f) getc(f) +#define PUTC(c,f) putc(c,f) +#endif + +static FcBool +write_chars (FILE *f, const FcChar8 *chars) +{ + FcChar8 c; + while ((c = *chars++)) + { + switch (c) { + case '"': + case '\\': + if (PUTC ('\\', f) == EOF) + return FcFalse; + /* fall through */ + default: + if (PUTC (c, f) == EOF) + return FcFalse; + } + } + return FcTrue; +} + +static FcBool +write_ulong (FILE *f, unsigned long t) +{ + int pow; + unsigned long temp, digit; + + temp = t; + pow = 1; + while (temp >= 10) + { + temp /= 10; + pow *= 10; + } + temp = t; + while (pow) + { + digit = temp / pow; + if (PUTC ((char) digit + '0', f) == EOF) + return FcFalse; + temp = temp - pow * digit; + pow = pow / 10; + } + return FcTrue; +} + +static FcBool +write_int (FILE *f, int i) +{ + return write_ulong (f, (unsigned long) i); +} + +static FcBool +write_string (FILE *f, const FcChar8 *string) +{ + + if (PUTC ('"', f) == EOF) + return FcFalse; + if (!write_chars (f, string)) + return FcFalse; + if (PUTC ('"', f) == EOF) + return FcFalse; + return FcTrue; +} + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-rv] [--recurse] [--verbose] [*-%s.cache-2|directory]...\n", + program, FC_ARCHITECTURE); + fprintf (file, " %s [-Vh] [--version] [--help]\n", program); +#else + fprintf (file, "usage: %s [-rvVh] [*-%s.cache-2|directory]...\n", + program, FC_ARCHITECTURE); +#endif + fprintf (file, "Reads font information cache from:\n"); + fprintf (file, " 1) specified fontconfig cache file\n"); + fprintf (file, " 2) related to a particular font directory\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -r, --recurse recurse into subdirectories\n"); + fprintf (file, " -v, --verbose be verbose\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -r (recurse) recurse into subdirectories\n"); + fprintf (file, " -v (verbose) be verbose\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +/* + * return the path from the directory containing 'cache' to 'file' + */ + +static const FcChar8 * +file_base_name (const FcChar8 *cache, const FcChar8 *file) +{ + int cache_len = strlen ((char *) cache); + + if (!strncmp ((char *) cache, (char *) file, cache_len) && file[cache_len] == '/') + return file + cache_len + 1; + return file; +} + +#define FC_FONT_FILE_DIR ((FcChar8 *) ".dir") + +static FcBool +cache_print_set (FcFontSet *set, FcStrSet *dirs, const FcChar8 *base_name, FcBool verbose) +{ + FcChar8 *dir; + const FcChar8 *base; + int n; + int ndir = 0; + FcStrList *list; + + list = FcStrListCreate (dirs); + if (!list) + goto bail2; + + while ((dir = FcStrListNext (list))) + { + base = file_base_name (base_name, dir); + if (!write_string (stdout, base)) + goto bail3; + if (PUTC (' ', stdout) == EOF) + goto bail3; + if (!write_int (stdout, 0)) + goto bail3; + if (PUTC (' ', stdout) == EOF) + goto bail3; + if (!write_string (stdout, FC_FONT_FILE_DIR)) + goto bail3; + if (PUTC ('\n', stdout) == EOF) + goto bail3; + ndir++; + } + + for (n = 0; n < set->nfont; n++) + { + FcPattern *font = set->fonts[n]; + FcChar8 *s; + + s = FcPatternFormat (font, "%{=fccat}\n"); + if (s) + { + printf ("%s", s); + free (s); + } + } + if (verbose && !set->nfont && !ndir) + printf ("\n"); + + FcStrListDone (list); + + return FcTrue; + +bail3: + FcStrListDone (list); +bail2: + return FcFalse; +} + +int +main (int argc, char **argv) +{ + int i; + int ret = 0; + FcFontSet *fs; + FcStrSet *dirs; + FcStrSet *args = NULL; + FcStrList *arglist; + FcCache *cache; + FcConfig *config; + FcChar8 *arg; + int verbose = 0; + int recurse = 0; + FcBool first = FcTrue; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "Vvrh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "Vvrh")) != -1) +#endif + { + switch (c) { + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'v': + verbose++; + break; + case 'r': + recurse++; + break; + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + config = FcInitLoadConfig (); + if (!config) + { + fprintf (stderr, "%s: Can't init font config library\n", argv[0]); + return 1; + } + FcConfigSetCurrent (config); + + args = FcStrSetCreate (); + if (!args) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + if (i < argc) + { + for (; i < argc; i++) + { + if (!FcStrSetAddFilename (args, (const FcChar8 *) argv[i])) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + } + arglist = FcStrListCreate (args); + if (!arglist) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + } + else + { + recurse++; + arglist = FcConfigGetFontDirs (config); + while ((arg = FcStrListNext (arglist))) + if (!FcStrSetAdd (args, arg)) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + FcStrListDone (arglist); + } + arglist = FcStrListCreate (args); + if (!arglist) + { + fprintf (stderr, "%s: malloc failure\n", argv[0]); + return 1; + } + + while ((arg = FcStrListNext (arglist))) + { + int j; + FcChar8 *cache_file = NULL; + struct stat file_stat; + + if (FcFileIsDir (arg)) + cache = FcDirCacheLoad (arg, config, &cache_file); + else + cache = FcDirCacheLoadFile (arg, &file_stat); + if (!cache) + { + perror ((char *) arg); + ret++; + continue; + } + + dirs = FcStrSetCreate (); + fs = FcCacheCopySet (cache); + for (j = 0; j < FcCacheNumSubdir (cache); j++) + { + FcStrSetAdd (dirs, FcCacheSubdir (cache, j)); + if (recurse) + FcStrSetAdd (args, FcCacheSubdir (cache, j)); + } + + if (verbose) + { + if (!first) + printf ("\n"); + printf ("Directory: %s\nCache: %s\n--------\n", + FcCacheDir(cache), cache_file ? cache_file : arg); + first = FcFalse; + } + cache_print_set (fs, dirs, FcCacheDir (cache), verbose); + + FcStrSetDestroy (dirs); + + FcFontSetDestroy (fs); + FcDirCacheUnload (cache); + if (cache_file) + FcStrFree (cache_file); + } + + FcFini (); + return 0; +} diff --git a/fontconfig/fc-cat/fc-cat.sgml b/fontconfig/fc-cat/fc-cat.sgml index 38ba0653e..ce4736de5 100644 --- a/fontconfig/fc-cat/fc-cat.sgml +++ b/fontconfig/fc-cat/fc-cat.sgml @@ -1,169 +1,169 @@ - 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. - - --> - - - Patrick"> - Lam"> - - Aug 13, 2008"> - - 1"> - plam@mit.edu"> - - fc-cat"> - - - Debian"> - GNU"> - GPL"> -]> - - - -
- &dhemail; -
- - &dhfirstname; - &dhsurname; - - - 2005 - &dhusername; - - &dhdate; -
- - &dhucpackage; - - &dhsection; - - - &dhpackage; - - read font information cache files - - - - &dhpackage; - - - - - - - - - - - - - - - - DESCRIPTION - - &dhpackage; reads the font information from - cache files or related to font directories - and emits it in ASCII form. - - - - OPTIONS - - This program follows the usual &gnu; command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. - - - - - - - - Recurse into subdirectories. - - - - - - - - Be verbose. - - - - - - - - Show summary of options. - - - - - - - - Show version of the program and exit. - - - - - - - SEE ALSO - - - fc-cache(1) - fc-list(1) - fc-match(1) - fc-pattern(1) - fc-query(1) - fc-scan(1) - - - The fontconfig user's guide, in HTML format: - /usr/share/doc/fontconfig/fontconfig-user.html. - - - - AUTHOR - - This manual page was written by &dhusername; &dhemail;. - - -
- - + 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. + + --> + + + Patrick"> + Lam"> + + Aug 13, 2008"> + + 1"> + plam@mit.edu"> + + fc-cat"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2005 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + read font information cache files + + + + &dhpackage; + + + + + + + + + + + + + + + + DESCRIPTION + + &dhpackage; reads the font information from + cache files or related to font directories + and emits it in ASCII form. + + + + OPTIONS + + This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. + + + + + + + + Recurse into subdirectories. + + + + + + + + Be verbose. + + + + + + + + Show summary of options. + + + + + + + + Show version of the program and exit. + + + + + + + SEE ALSO + + + fc-cache(1) + fc-list(1) + fc-match(1) + fc-pattern(1) + fc-query(1) + fc-scan(1) + + + The fontconfig user's guide, in HTML format: + /usr/share/doc/fontconfig/fontconfig-user.html. + + + + AUTHOR + + This manual page was written by &dhusername; &dhemail;. + + +
+ + diff --git a/fontconfig/fc-glyphname/Makefile.am b/fontconfig/fc-glyphname/Makefile.am index 2484f377e..3799880e5 100644 --- a/fontconfig/fc-glyphname/Makefile.am +++ b/fontconfig/fc-glyphname/Makefile.am @@ -1,57 +1,57 @@ -# -# $Id $ -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# - -INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) - -TMPL=fcglyphname.tmpl.h -STMPL=${top_srcdir}/fc-glyphname/${TMPL} -TARG=fcglyphname.h - -noinst_PROGRAMS=fc-glyphname - -GLYPHNAME=zapfdingbats.txt -SGLYPHNAME=${top_srcdir}/fc-glyphname/zapfdingbats.txt - -EXTRA_DIST = $(TARG) $(TMPL) $(GLYPHNAME) - -if CROSS_COMPILING -$(TARG): $(STMPL) fc-glyphname.c $(SGLYPHNAME) - @echo Warning: cannot rebuild $(TARG) when cross-compiling -else -$(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME) - $(AM_V_GEN) $(RM) $(TARG); \ - ./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG).tmp && \ - mv $(TARG).tmp $(TARG) -endif - -ALIAS_FILES = fcalias.h fcaliastail.h - -BUILT_SOURCES = $(ALIAS_FILES) $(TARG) - -$(ALIAS_FILES): - touch $(ALIAS_FILES) - -CLEANFILES = $(ALIAS_FILES) - -MAINTAINERCLEANFILES = $(TARG) +# +# $Id $ +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# + +INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) + +TMPL=fcglyphname.tmpl.h +STMPL=${top_srcdir}/fc-glyphname/${TMPL} +TARG=fcglyphname.h + +noinst_PROGRAMS=fc-glyphname + +GLYPHNAME=zapfdingbats.txt +SGLYPHNAME=${top_srcdir}/fc-glyphname/zapfdingbats.txt + +EXTRA_DIST = $(TARG) $(TMPL) $(GLYPHNAME) + +if CROSS_COMPILING +$(TARG): $(STMPL) fc-glyphname.c $(SGLYPHNAME) + @echo Warning: cannot rebuild $(TARG) when cross-compiling +else +$(TARG): $(STMPL) fc-glyphname$(EXEEXT) $(SGLYPHNAME) + $(AM_V_GEN) $(RM) $(TARG); \ + ./fc-glyphname$(EXEEXT) $(SGLYPHNAME) < $(STMPL) > $(TARG).tmp && \ + mv $(TARG).tmp $(TARG) +endif + +ALIAS_FILES = fcalias.h fcaliastail.h + +BUILT_SOURCES = $(ALIAS_FILES) $(TARG) + +$(ALIAS_FILES): + touch $(ALIAS_FILES) + +CLEANFILES = $(ALIAS_FILES) + +MAINTAINERCLEANFILES = $(TARG) diff --git a/fontconfig/fc-glyphname/fc-glyphname.c b/fontconfig/fc-glyphname/fc-glyphname.c index 0339073a2..b790d986f 100644 --- a/fontconfig/fc-glyphname/fc-glyphname.c +++ b/fontconfig/fc-glyphname/fc-glyphname.c @@ -1,325 +1,325 @@ -/* - * fontconfig/fc-glyphname/fc-glyphname.c - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" - -static int -rawindex (const FcGlyphName *gn); - -static void -scan (FILE *f, char *filename); - -static int -isprime (int i); - -static void -find_hash (void); - -static FcChar32 -FcHashGlyphName (const FcChar8 *name); - -static void -insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h); - -static void -dump (FcGlyphName * const *table, const char *name); - -static FcGlyphName * -FcAllocGlyphName (FcChar32 ucs, FcChar8 *name) -{ - FcGlyphName *gn; - - gn = malloc (sizeof (FcGlyphName) + strlen ((char *) name)); - if (!gn) - return 0; - gn->ucs = ucs; - strcpy ((char *) gn->name, (char *) name); - return gn; -} - -static void -fatal (const char *file, int lineno, const char *msg) -{ - if (lineno) - fprintf (stderr, "%s:%d: %s\n", file, lineno, msg); - else - fprintf (stderr, "%s: %s\n", file, msg); - - exit (1); -} - -#define MAX_GLYPHFILE 256 -#define MAX_GLYPHNAME 10240 -#define MAX_NAMELEN 1024 - -static FcGlyphName *raw[MAX_GLYPHNAME]; -static int nraw; -static int max_name_len; -static FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2]; -static FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2]; -static unsigned int hash, rehash; - -static int -rawindex (const FcGlyphName *gn) -{ - int i; - - for (i = 0; i < nraw; i++) - if (raw[i] == gn) - return i; - return -1; -} - -static void -scan (FILE *f, char *filename) -{ - char buf[MAX_NAMELEN]; - char name[MAX_NAMELEN]; - unsigned long ucs; - FcGlyphName *gn; - int lineno = 0; - int len; - - while (fgets (buf, sizeof (buf), f)) - { - lineno++; - if (sscanf (buf, "%[^;];%lx\n", name, &ucs) != 2) - continue; - gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name); - if (!gn) - fatal (filename, lineno, "out of memory"); - len = strlen (name); - if (len > max_name_len) - max_name_len = len; - raw[nraw++] = gn; - } -} - -static int compare_string (const void *a, const void *b) -{ - const char *const *as = a, *const *bs = b; - return strcmp (*as, *bs); -} - -static int compare_glyphname (const void *a, const void *b) -{ - const FcGlyphName *const *ag = a, *const *bg = b; - - return strcmp ((char *) (*ag)->name, (char *) (*bg)->name); -} - -static int -isqrt (int a) -{ - int l, h, m; - - l = 2; - h = a/2; - while ((h-l) > 1) - { - m = (h+l) >> 1; - if (m * m < a) - l = m; - else - h = m; - } - return h; -} - -static int -isprime (int i) -{ - int l, t; - - if (i < 2) - return FcFalse; - if ((i & 1) == 0) - { - if (i == 2) - return FcTrue; - return FcFalse; - } - l = isqrt (i) + 1; - for (t = 3; t <= l; t += 2) - if (i % t == 0) - return 0; - return 1; -} - -/* - * Find a prime pair that leaves at least 25% of the hash table empty - */ - -static void -find_hash (void) -{ - int h; - - h = nraw + nraw / 4; - if ((h & 1) == 0) - h++; - while (!isprime(h-2) || !isprime(h)) - h += 2; - hash = h; - rehash = h-2; -} - -static FcChar32 -FcHashGlyphName (const FcChar8 *name) -{ - FcChar32 h = 0; - FcChar8 c; - - while ((c = *name++)) - { - h = ((h << 1) | (h >> 31)) ^ c; - } - return h; -} - -static void -insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h) -{ - int i, r = 0; - - i = (int) (h % hash); - while (table[i]) - { - if (!r) r = (int) (h % rehash + 1); - i += r; - if (i >= hash) - i -= hash; - } - table[i] = gn; -} - -static void -dump (FcGlyphName * const *table, const char *name) -{ - int i; - - printf ("static const FcGlyphId %s[%d] = {\n", name, hash); - - for (i = 0; i < hash; i++) - if (table[i]) - printf (" %d,\n", rawindex(table[i])); - else - printf (" -1,\n"); - - printf ("};\n"); -} - -int -main (int argc, char **argv) -{ - char *files[MAX_GLYPHFILE]; - char line[1024]; - FILE *f; - int i; - char *type; - - i = 0; - while (argv[i+1]) - { - if (i == MAX_GLYPHFILE) - fatal (*argv, 0, "Too many glyphname files"); - files[i] = argv[i+1]; - i++; - } - files[i] = 0; - qsort (files, i, sizeof (char *), compare_string); - for (i = 0; files[i]; i++) - { - f = fopen (files[i], "r"); - if (!f) - fatal (files[i], 0, strerror (errno)); - scan (f, files[i]); - fclose (f); - } - qsort (raw, nraw, sizeof (FcGlyphName *), compare_glyphname); - - find_hash (); - - for (i = 0; i < nraw; i++) - { - insert (raw[i], name_to_ucs, FcHashGlyphName (raw[i]->name)); - insert (raw[i], ucs_to_name, raw[i]->ucs); - } - - /* - * Scan the input until the marker is found - */ - - while (fgets (line, sizeof (line), stdin)) - { - if (!strncmp (line, "@@@", 3)) - break; - fputs (line, stdout); - } - - printf ("/* %d glyphnames in %d entries, %d%% occupancy */\n\n", - nraw, hash, nraw * 100 / hash); - - printf ("#define FC_GLYPHNAME_HASH %u\n", hash); - printf ("#define FC_GLYPHNAME_REHASH %u\n", rehash); - printf ("#define FC_GLYPHNAME_MAXLEN %d\n\n", max_name_len); - if (nraw < 128) - type = "int8_t"; - else if (nraw < 32768) - type = "int16_t"; - else - type = "int32_t"; - - printf ("typedef %s FcGlyphId;\n\n", type); - - /* - * Dump out entries - */ - - printf ("static const struct { const FcChar32 ucs; const FcChar8 name[%d]; } _fc_glyph_names[%d] = {\n", - max_name_len + 1, nraw); - - for (i = 0; i < nraw; i++) - printf (" { 0x%lx, \"%s\" },\n", - (unsigned long) raw[i]->ucs, raw[i]->name); - - printf ("};\n"); - - /* - * Dump out name_to_ucs table - */ - - dump (name_to_ucs, "_fc_name_to_ucs"); - - /* - * Dump out ucs_to_name table - */ - dump (ucs_to_name, "_fc_ucs_to_name"); - - while (fgets (line, sizeof (line), stdin)) - fputs (line, stdout); - - fflush (stdout); - exit (ferror (stdout)); -} +/* + * fontconfig/fc-glyphname/fc-glyphname.c + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" + +static int +rawindex (const FcGlyphName *gn); + +static void +scan (FILE *f, char *filename); + +static int +isprime (int i); + +static void +find_hash (void); + +static FcChar32 +FcHashGlyphName (const FcChar8 *name); + +static void +insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h); + +static void +dump (FcGlyphName * const *table, const char *name); + +static FcGlyphName * +FcAllocGlyphName (FcChar32 ucs, FcChar8 *name) +{ + FcGlyphName *gn; + + gn = malloc (sizeof (FcGlyphName) + strlen ((char *) name)); + if (!gn) + return 0; + gn->ucs = ucs; + strcpy ((char *) gn->name, (char *) name); + return gn; +} + +static void +fatal (const char *file, int lineno, const char *msg) +{ + if (lineno) + fprintf (stderr, "%s:%d: %s\n", file, lineno, msg); + else + fprintf (stderr, "%s: %s\n", file, msg); + + exit (1); +} + +#define MAX_GLYPHFILE 256 +#define MAX_GLYPHNAME 10240 +#define MAX_NAMELEN 1024 + +static FcGlyphName *raw[MAX_GLYPHNAME]; +static int nraw; +static int max_name_len; +static FcGlyphName *name_to_ucs[MAX_GLYPHNAME*2]; +static FcGlyphName *ucs_to_name[MAX_GLYPHNAME*2]; +static unsigned int hash, rehash; + +static int +rawindex (const FcGlyphName *gn) +{ + int i; + + for (i = 0; i < nraw; i++) + if (raw[i] == gn) + return i; + return -1; +} + +static void +scan (FILE *f, char *filename) +{ + char buf[MAX_NAMELEN]; + char name[MAX_NAMELEN]; + unsigned long ucs; + FcGlyphName *gn; + int lineno = 0; + int len; + + while (fgets (buf, sizeof (buf), f)) + { + lineno++; + if (sscanf (buf, "%[^;];%lx\n", name, &ucs) != 2) + continue; + gn = FcAllocGlyphName ((FcChar32) ucs, (FcChar8 *) name); + if (!gn) + fatal (filename, lineno, "out of memory"); + len = strlen (name); + if (len > max_name_len) + max_name_len = len; + raw[nraw++] = gn; + } +} + +static int compare_string (const void *a, const void *b) +{ + const char *const *as = a, *const *bs = b; + return strcmp (*as, *bs); +} + +static int compare_glyphname (const void *a, const void *b) +{ + const FcGlyphName *const *ag = a, *const *bg = b; + + return strcmp ((char *) (*ag)->name, (char *) (*bg)->name); +} + +static int +isqrt (int a) +{ + int l, h, m; + + l = 2; + h = a/2; + while ((h-l) > 1) + { + m = (h+l) >> 1; + if (m * m < a) + l = m; + else + h = m; + } + return h; +} + +static int +isprime (int i) +{ + int l, t; + + if (i < 2) + return FcFalse; + if ((i & 1) == 0) + { + if (i == 2) + return FcTrue; + return FcFalse; + } + l = isqrt (i) + 1; + for (t = 3; t <= l; t += 2) + if (i % t == 0) + return 0; + return 1; +} + +/* + * Find a prime pair that leaves at least 25% of the hash table empty + */ + +static void +find_hash (void) +{ + int h; + + h = nraw + nraw / 4; + if ((h & 1) == 0) + h++; + while (!isprime(h-2) || !isprime(h)) + h += 2; + hash = h; + rehash = h-2; +} + +static FcChar32 +FcHashGlyphName (const FcChar8 *name) +{ + FcChar32 h = 0; + FcChar8 c; + + while ((c = *name++)) + { + h = ((h << 1) | (h >> 31)) ^ c; + } + return h; +} + +static void +insert (FcGlyphName *gn, FcGlyphName **table, FcChar32 h) +{ + int i, r = 0; + + i = (int) (h % hash); + while (table[i]) + { + if (!r) r = (int) (h % rehash + 1); + i += r; + if (i >= hash) + i -= hash; + } + table[i] = gn; +} + +static void +dump (FcGlyphName * const *table, const char *name) +{ + int i; + + printf ("static const FcGlyphId %s[%d] = {\n", name, hash); + + for (i = 0; i < hash; i++) + if (table[i]) + printf (" %d,\n", rawindex(table[i])); + else + printf (" -1,\n"); + + printf ("};\n"); +} + +int +main (int argc, char **argv) +{ + char *files[MAX_GLYPHFILE]; + char line[1024]; + FILE *f; + int i; + char *type; + + i = 0; + while (argv[i+1]) + { + if (i == MAX_GLYPHFILE) + fatal (*argv, 0, "Too many glyphname files"); + files[i] = argv[i+1]; + i++; + } + files[i] = 0; + qsort (files, i, sizeof (char *), compare_string); + for (i = 0; files[i]; i++) + { + f = fopen (files[i], "r"); + if (!f) + fatal (files[i], 0, strerror (errno)); + scan (f, files[i]); + fclose (f); + } + qsort (raw, nraw, sizeof (FcGlyphName *), compare_glyphname); + + find_hash (); + + for (i = 0; i < nraw; i++) + { + insert (raw[i], name_to_ucs, FcHashGlyphName (raw[i]->name)); + insert (raw[i], ucs_to_name, raw[i]->ucs); + } + + /* + * Scan the input until the marker is found + */ + + while (fgets (line, sizeof (line), stdin)) + { + if (!strncmp (line, "@@@", 3)) + break; + fputs (line, stdout); + } + + printf ("/* %d glyphnames in %d entries, %d%% occupancy */\n\n", + nraw, hash, nraw * 100 / hash); + + printf ("#define FC_GLYPHNAME_HASH %u\n", hash); + printf ("#define FC_GLYPHNAME_REHASH %u\n", rehash); + printf ("#define FC_GLYPHNAME_MAXLEN %d\n\n", max_name_len); + if (nraw < 128) + type = "int8_t"; + else if (nraw < 32768) + type = "int16_t"; + else + type = "int32_t"; + + printf ("typedef %s FcGlyphId;\n\n", type); + + /* + * Dump out entries + */ + + printf ("static const struct { const FcChar32 ucs; const FcChar8 name[%d]; } _fc_glyph_names[%d] = {\n", + max_name_len + 1, nraw); + + for (i = 0; i < nraw; i++) + printf (" { 0x%lx, \"%s\" },\n", + (unsigned long) raw[i]->ucs, raw[i]->name); + + printf ("};\n"); + + /* + * Dump out name_to_ucs table + */ + + dump (name_to_ucs, "_fc_name_to_ucs"); + + /* + * Dump out ucs_to_name table + */ + dump (ucs_to_name, "_fc_ucs_to_name"); + + while (fgets (line, sizeof (line), stdin)) + fputs (line, stdout); + + fflush (stdout); + exit (ferror (stdout)); +} diff --git a/fontconfig/fc-glyphname/fcglyphname.tmpl.h b/fontconfig/fc-glyphname/fcglyphname.tmpl.h index 7e2160996..d4f8a9524 100644 --- a/fontconfig/fc-glyphname/fcglyphname.tmpl.h +++ b/fontconfig/fc-glyphname/fcglyphname.tmpl.h @@ -1,25 +1,25 @@ -/* - * fontconfig/fc-glyphname/fcglyphname.tmpl.h - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@@@ +/* + * fontconfig/fc-glyphname/fcglyphname.tmpl.h + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@@@ diff --git a/fontconfig/fc-lang/Makefile.am b/fontconfig/fc-lang/Makefile.am index 1f6a4aef3..29cee5934 100644 --- a/fontconfig/fc-lang/Makefile.am +++ b/fontconfig/fc-lang/Makefile.am @@ -1,303 +1,303 @@ -# -# $Id $ -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# - -INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) - -TMPL=fclang.tmpl.h -STMPL=${top_srcdir}/fc-lang/fclang.tmpl.h -TARG=fclang.h - -noinst_PROGRAMS=fc-lang - -noinst_MANS=fc-lang.man - -EXTRA_DIST = $(TARG) $(TMPL) $(ORTH) - -if CROSS_COMPILING -$(TARG):$(ORTH) fc-lang.c $(STMPL) - @echo Warning: cannot rebuild $(TARG) when cross-compiling -else -$(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL) - $(AM_V_GEN) $(RM) $(TARG); \ - ./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG).tmp && \ - mv $(TARG).tmp $(TARG) -endif - -ALIAS_FILES = fcalias.h fcaliastail.h - -BUILT_SOURCES = $(ALIAS_FILES) $(TARG) - -$(ALIAS_FILES): - touch $(ALIAS_FILES) - -CLEANFILES = $(ALIAS_FILES) - -MAINTAINERCLEANFILES = $(TARG) - -# NOTE: -# -# The order of the orth files here is extremely important (part of the cache -# format) and should not be modified. New orth files should be added at the -# end. No files should be removed either. -# -ORTH = \ - aa.orth \ - ab.orth \ - af.orth \ - am.orth \ - ar.orth \ - as.orth \ - ast.orth \ - av.orth \ - ay.orth \ - az_az.orth \ - az_ir.orth \ - ba.orth \ - bm.orth \ - be.orth \ - bg.orth \ - bh.orth \ - bho.orth \ - bi.orth \ - bin.orth \ - bn.orth \ - bo.orth \ - br.orth \ - bs.orth \ - bua.orth \ - ca.orth \ - ce.orth \ - ch.orth \ - chm.orth \ - chr.orth \ - co.orth \ - cs.orth \ - cu.orth \ - cv.orth \ - cy.orth \ - da.orth \ - de.orth \ - dz.orth \ - el.orth \ - en.orth \ - eo.orth \ - es.orth \ - et.orth \ - eu.orth \ - fa.orth \ - fi.orth \ - fj.orth \ - fo.orth \ - fr.orth \ - ff.orth \ - fur.orth \ - fy.orth \ - ga.orth \ - gd.orth \ - gez.orth \ - gl.orth \ - gn.orth \ - gu.orth \ - gv.orth \ - ha.orth \ - haw.orth \ - he.orth \ - hi.orth \ - ho.orth \ - hr.orth \ - hu.orth \ - hy.orth \ - ia.orth \ - ig.orth \ - id.orth \ - ie.orth \ - ik.orth \ - io.orth \ - is.orth \ - it.orth \ - iu.orth \ - ja.orth \ - ka.orth \ - kaa.orth \ - ki.orth \ - kk.orth \ - kl.orth \ - km.orth \ - kn.orth \ - ko.orth \ - kok.orth \ - ks.orth \ - ku_am.orth \ - ku_ir.orth \ - kum.orth \ - kv.orth \ - kw.orth \ - ky.orth \ - la.orth \ - lb.orth \ - lez.orth \ - ln.orth \ - lo.orth \ - lt.orth \ - lv.orth \ - mg.orth \ - mh.orth \ - mi.orth \ - mk.orth \ - ml.orth \ - mn_cn.orth \ - mo.orth \ - mr.orth \ - mt.orth \ - my.orth \ - nb.orth \ - nds.orth \ - ne.orth \ - nl.orth \ - nn.orth \ - no.orth \ - nr.orth \ - nso.orth \ - ny.orth \ - oc.orth \ - om.orth \ - or.orth \ - os.orth \ - pa.orth \ - pl.orth \ - ps_af.orth \ - ps_pk.orth \ - pt.orth \ - rm.orth \ - ro.orth \ - ru.orth \ - sa.orth \ - sah.orth \ - sco.orth \ - se.orth \ - sel.orth \ - sh.orth \ - shs.orth \ - si.orth \ - sk.orth \ - sl.orth \ - sm.orth \ - sma.orth \ - smj.orth \ - smn.orth \ - sms.orth \ - so.orth \ - sq.orth \ - sr.orth \ - ss.orth \ - st.orth \ - sv.orth \ - sw.orth \ - syr.orth \ - ta.orth \ - te.orth \ - tg.orth \ - th.orth \ - ti_er.orth \ - ti_et.orth \ - tig.orth \ - tk.orth \ - tl.orth \ - tn.orth \ - to.orth \ - tr.orth \ - ts.orth \ - tt.orth \ - tw.orth \ - tyv.orth \ - ug.orth \ - uk.orth \ - ur.orth \ - uz.orth \ - ve.orth \ - vi.orth \ - vo.orth \ - vot.orth \ - wa.orth \ - wen.orth \ - wo.orth \ - xh.orth \ - yap.orth \ - yi.orth \ - yo.orth \ - zh_cn.orth \ - zh_hk.orth \ - zh_mo.orth \ - zh_sg.orth \ - zh_tw.orth \ - zu.orth \ - ak.orth \ - an.orth \ - ber_dz.orth \ - ber_ma.orth \ - byn.orth \ - crh.orth \ - csb.orth \ - dv.orth \ - ee.orth \ - fat.orth \ - fil.orth \ - hne.orth \ - hsb.orth \ - ht.orth \ - hz.orth \ - ii.orth \ - jv.orth \ - kab.orth \ - kj.orth \ - kr.orth \ - ku_iq.orth \ - ku_tr.orth \ - kwm.orth \ - lg.orth \ - li.orth \ - mai.orth \ - mn_mn.orth \ - ms.orth \ - na.orth \ - ng.orth \ - nv.orth \ - ota.orth \ - pa_pk.orth \ - pap_an.orth \ - pap_aw.orth \ - qu.orth \ - rn.orth \ - rw.orth \ - sc.orth \ - sd.orth \ - sg.orth \ - sid.orth \ - sn.orth \ - su.orth \ - ty.orth \ - wal.orth \ - za.orth \ - lah.orth -# ^-------------- Add new orth files here +# +# $Id $ +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# + +INCLUDES=-I${top_srcdir}/src -I${top_srcdir} $(WARN_CFLAGS) + +TMPL=fclang.tmpl.h +STMPL=${top_srcdir}/fc-lang/fclang.tmpl.h +TARG=fclang.h + +noinst_PROGRAMS=fc-lang + +noinst_MANS=fc-lang.man + +EXTRA_DIST = $(TARG) $(TMPL) $(ORTH) + +if CROSS_COMPILING +$(TARG):$(ORTH) fc-lang.c $(STMPL) + @echo Warning: cannot rebuild $(TARG) when cross-compiling +else +$(TARG):$(ORTH) fc-lang${EXEEXT} $(STMPL) + $(AM_V_GEN) $(RM) $(TARG); \ + ./fc-lang${EXEEXT} -d ${srcdir} $(ORTH) < $(STMPL) > $(TARG).tmp && \ + mv $(TARG).tmp $(TARG) +endif + +ALIAS_FILES = fcalias.h fcaliastail.h + +BUILT_SOURCES = $(ALIAS_FILES) $(TARG) + +$(ALIAS_FILES): + touch $(ALIAS_FILES) + +CLEANFILES = $(ALIAS_FILES) + +MAINTAINERCLEANFILES = $(TARG) + +# NOTE: +# +# The order of the orth files here is extremely important (part of the cache +# format) and should not be modified. New orth files should be added at the +# end. No files should be removed either. +# +ORTH = \ + aa.orth \ + ab.orth \ + af.orth \ + am.orth \ + ar.orth \ + as.orth \ + ast.orth \ + av.orth \ + ay.orth \ + az_az.orth \ + az_ir.orth \ + ba.orth \ + bm.orth \ + be.orth \ + bg.orth \ + bh.orth \ + bho.orth \ + bi.orth \ + bin.orth \ + bn.orth \ + bo.orth \ + br.orth \ + bs.orth \ + bua.orth \ + ca.orth \ + ce.orth \ + ch.orth \ + chm.orth \ + chr.orth \ + co.orth \ + cs.orth \ + cu.orth \ + cv.orth \ + cy.orth \ + da.orth \ + de.orth \ + dz.orth \ + el.orth \ + en.orth \ + eo.orth \ + es.orth \ + et.orth \ + eu.orth \ + fa.orth \ + fi.orth \ + fj.orth \ + fo.orth \ + fr.orth \ + ff.orth \ + fur.orth \ + fy.orth \ + ga.orth \ + gd.orth \ + gez.orth \ + gl.orth \ + gn.orth \ + gu.orth \ + gv.orth \ + ha.orth \ + haw.orth \ + he.orth \ + hi.orth \ + ho.orth \ + hr.orth \ + hu.orth \ + hy.orth \ + ia.orth \ + ig.orth \ + id.orth \ + ie.orth \ + ik.orth \ + io.orth \ + is.orth \ + it.orth \ + iu.orth \ + ja.orth \ + ka.orth \ + kaa.orth \ + ki.orth \ + kk.orth \ + kl.orth \ + km.orth \ + kn.orth \ + ko.orth \ + kok.orth \ + ks.orth \ + ku_am.orth \ + ku_ir.orth \ + kum.orth \ + kv.orth \ + kw.orth \ + ky.orth \ + la.orth \ + lb.orth \ + lez.orth \ + ln.orth \ + lo.orth \ + lt.orth \ + lv.orth \ + mg.orth \ + mh.orth \ + mi.orth \ + mk.orth \ + ml.orth \ + mn_cn.orth \ + mo.orth \ + mr.orth \ + mt.orth \ + my.orth \ + nb.orth \ + nds.orth \ + ne.orth \ + nl.orth \ + nn.orth \ + no.orth \ + nr.orth \ + nso.orth \ + ny.orth \ + oc.orth \ + om.orth \ + or.orth \ + os.orth \ + pa.orth \ + pl.orth \ + ps_af.orth \ + ps_pk.orth \ + pt.orth \ + rm.orth \ + ro.orth \ + ru.orth \ + sa.orth \ + sah.orth \ + sco.orth \ + se.orth \ + sel.orth \ + sh.orth \ + shs.orth \ + si.orth \ + sk.orth \ + sl.orth \ + sm.orth \ + sma.orth \ + smj.orth \ + smn.orth \ + sms.orth \ + so.orth \ + sq.orth \ + sr.orth \ + ss.orth \ + st.orth \ + sv.orth \ + sw.orth \ + syr.orth \ + ta.orth \ + te.orth \ + tg.orth \ + th.orth \ + ti_er.orth \ + ti_et.orth \ + tig.orth \ + tk.orth \ + tl.orth \ + tn.orth \ + to.orth \ + tr.orth \ + ts.orth \ + tt.orth \ + tw.orth \ + tyv.orth \ + ug.orth \ + uk.orth \ + ur.orth \ + uz.orth \ + ve.orth \ + vi.orth \ + vo.orth \ + vot.orth \ + wa.orth \ + wen.orth \ + wo.orth \ + xh.orth \ + yap.orth \ + yi.orth \ + yo.orth \ + zh_cn.orth \ + zh_hk.orth \ + zh_mo.orth \ + zh_sg.orth \ + zh_tw.orth \ + zu.orth \ + ak.orth \ + an.orth \ + ber_dz.orth \ + ber_ma.orth \ + byn.orth \ + crh.orth \ + csb.orth \ + dv.orth \ + ee.orth \ + fat.orth \ + fil.orth \ + hne.orth \ + hsb.orth \ + ht.orth \ + hz.orth \ + ii.orth \ + jv.orth \ + kab.orth \ + kj.orth \ + kr.orth \ + ku_iq.orth \ + ku_tr.orth \ + kwm.orth \ + lg.orth \ + li.orth \ + mai.orth \ + mn_mn.orth \ + ms.orth \ + na.orth \ + ng.orth \ + nv.orth \ + ota.orth \ + pa_pk.orth \ + pap_an.orth \ + pap_aw.orth \ + qu.orth \ + rn.orth \ + rw.orth \ + sc.orth \ + sd.orth \ + sg.orth \ + sid.orth \ + sn.orth \ + su.orth \ + ty.orth \ + wal.orth \ + za.orth \ + lah.orth +# ^-------------- Add new orth files here diff --git a/fontconfig/fc-lang/aa.orth b/fontconfig/fc-lang/aa.orth index d4e59d326..cd5ac64c3 100644 --- a/fontconfig/fc-lang/aa.orth +++ b/fontconfig/fc-lang/aa.orth @@ -1,40 +1,40 @@ -# -# fontconfig/fc-lang/aa.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Afar (AA) -# -# Taken from http://www.arhotaba.com/waldegram.htm -# and http://www.arhotaba.com/alphabet.htm -# -0041-005a # afar doesn't use J, P, V or Z -0061-007a # afar doesn't use j, p, v or z -00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +# +# fontconfig/fc-lang/aa.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Afar (AA) +# +# Taken from http://www.arhotaba.com/waldegram.htm +# and http://www.arhotaba.com/alphabet.htm +# +0041-005a # afar doesn't use J, P, V or Z +0061-007a # afar doesn't use j, p, v or z +00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX diff --git a/fontconfig/fc-lang/ab.orth b/fontconfig/fc-lang/ab.orth index ce2d1608b..82ab4290d 100644 --- a/fontconfig/fc-lang/ab.orth +++ b/fontconfig/fc-lang/ab.orth @@ -1,45 +1,45 @@ -# -# fontconfig/fc-lang/ab.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Abkhazia (AB) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -#00ab # double angle quotes -#00bb # double angle quotes -0401 -040f -0410-044f -0451 -045f -049e-049f -04a6-04a9 -04ac-04ad -04b2-04b7 -04bc-04bf -04d8 -04d9 -04e0-04e1 -#2039-203a # angle quotes +# +# fontconfig/fc-lang/ab.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Abkhazia (AB) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab # double angle quotes +#00bb # double angle quotes +0401 +040f +0410-044f +0451 +045f +049e-049f +04a6-04a9 +04ac-04ad +04b2-04b7 +04bc-04bf +04d8 +04d9 +04e0-04e1 +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/af.orth b/fontconfig/fc-lang/af.orth index df6bbc426..d8b377660 100644 --- a/fontconfig/fc-lang/af.orth +++ b/fontconfig/fc-lang/af.orth @@ -1,46 +1,46 @@ -# -# fontconfig/fc-lang/af.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Afrikaans (AF) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c8 -00e8 -00c9 -00e9 -00ca -00ea -00cb -00eb -00ce -00ee -00cf -00ef -00d4 -00f4 -00db -00fb -0149 +# +# fontconfig/fc-lang/af.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Afrikaans (AF) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c8 +00e8 +00c9 +00e9 +00ca +00ea +00cb +00eb +00ce +00ee +00cf +00ef +00d4 +00f4 +00db +00fb +0149 diff --git a/fontconfig/fc-lang/am.orth b/fontconfig/fc-lang/am.orth index 447aafc38..42c8d49fb 100644 --- a/fontconfig/fc-lang/am.orth +++ b/fontconfig/fc-lang/am.orth @@ -1,36 +1,36 @@ -# -# fontconfig/fc-lang/am.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Amharic (AM) -# -# The same as Ethiopic -# -include gez.orth -1238-123f # xe-xWa -1268-126e # ve-vo -1278-127f # ce-cWa -1298-129f # Ne-NWa -12a8 # ea -12e0-12e8 # Ze-ZWa -1300-1307 # je-jWa -1328-132f # Ce-CWa +# +# fontconfig/fc-lang/am.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Amharic (AM) +# +# The same as Ethiopic +# +include gez.orth +1238-123f # xe-xWa +1268-126e # ve-vo +1278-127f # ce-cWa +1298-129f # Ne-NWa +12a8 # ea +12e0-12e8 # Ze-ZWa +1300-1307 # je-jWa +1328-132f # Ce-CWa diff --git a/fontconfig/fc-lang/ar.orth b/fontconfig/fc-lang/ar.orth index cc2da0a16..fd673c672 100644 --- a/fontconfig/fc-lang/ar.orth +++ b/fontconfig/fc-lang/ar.orth @@ -1,39 +1,39 @@ -# -# fontconfig/fc-lang/ar.orth -# -# Copyright © 2002 Keith Packard -# Copyright © 2009 Roozbeh Pournader -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Arabic (ar) -# -# We are assuming that: -# * Most fonts that claim to support an Arabic letter actually do so; -# * Most modern text rendering software use OpenType tables, instead of -# directly using presentation forms. -# * Some good Arabic fonts do not support codepoints for Arabic presentation -# forms. -# Thus, we are switching to general forms of Arabic letters. -# -# General forms: -0621-063a -0641-064a -# Presentations forms: -# fe80-fefc +# +# fontconfig/fc-lang/ar.orth +# +# Copyright © 2002 Keith Packard +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Arabic (ar) +# +# We are assuming that: +# * Most fonts that claim to support an Arabic letter actually do so; +# * Most modern text rendering software use OpenType tables, instead of +# directly using presentation forms. +# * Some good Arabic fonts do not support codepoints for Arabic presentation +# forms. +# Thus, we are switching to general forms of Arabic letters. +# +# General forms: +0621-063a +0641-064a +# Presentations forms: +# fe80-fefc diff --git a/fontconfig/fc-lang/ast.orth b/fontconfig/fc-lang/ast.orth index 9a9cf0921..634f07910 100644 --- a/fontconfig/fc-lang/ast.orth +++ b/fontconfig/fc-lang/ast.orth @@ -1,43 +1,43 @@ -# -# fontconfig/fc-lang/ast.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Orthography from http://www.evertype.com/alphabets/asturian.pdf -# -# Asturian/Bable/Leonese/Asturleonese (ast) -# -0041-005a -0061-007a -00c1 -00c9 -00cd -00d1 -00d3 -00da -00dc -00e1 -00e9 -00ed -00f1 -00f3 -00fa -00fc +# +# fontconfig/fc-lang/ast.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Orthography from http://www.evertype.com/alphabets/asturian.pdf +# +# Asturian/Bable/Leonese/Asturleonese (ast) +# +0041-005a +0061-007a +00c1 +00c9 +00cd +00d1 +00d3 +00da +00dc +00e1 +00e9 +00ed +00f1 +00f3 +00fa +00fc diff --git a/fontconfig/fc-lang/av.orth b/fontconfig/fc-lang/av.orth index 9fc1c9a6d..bb3e6abca 100644 --- a/fontconfig/fc-lang/av.orth +++ b/fontconfig/fc-lang/av.orth @@ -1,97 +1,97 @@ -# -# fontconfig/fc-lang/av.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Avaric (av) -# -0401 -0406 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 +# +# fontconfig/fc-lang/av.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Avaric (av) +# +0401 +0406 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/ay.orth b/fontconfig/fc-lang/ay.orth index d7338fa91..538bc80f7 100644 --- a/fontconfig/fc-lang/ay.orth +++ b/fontconfig/fc-lang/ay.orth @@ -1,37 +1,37 @@ -# -# fontconfig/fc-lang/ay.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Aymara (KW) -# -# Orthography from http://www.aymara.org/arusa/qillqa_eng.html -# -0041-005a -0061-007a -00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -00D1 # LATIN CAPITAL LETTER N WITH TILDE -00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -00E4 # LATIN SMALL LETTER A WITH DIAERESIS -00EF # LATIN SMALL LETTER I WITH DIAERESIS -00F1 # LATIN SMALL LETTER N WITH TILDE -00FC # LATIN SMALL LETTER U WITH DIAERESIS +# +# fontconfig/fc-lang/ay.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Aymara (KW) +# +# Orthography from http://www.aymara.org/arusa/qillqa_eng.html +# +0041-005a +0061-007a +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +00D1 # LATIN CAPITAL LETTER N WITH TILDE +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00EF # LATIN SMALL LETTER I WITH DIAERESIS +00F1 # LATIN SMALL LETTER N WITH TILDE +00FC # LATIN SMALL LETTER U WITH DIAERESIS diff --git a/fontconfig/fc-lang/az_ir.orth b/fontconfig/fc-lang/az_ir.orth index dfa9681e5..1a5aea9a7 100644 --- a/fontconfig/fc-lang/az_ir.orth +++ b/fontconfig/fc-lang/az_ir.orth @@ -1,32 +1,32 @@ -# -# fontconfig/fc-lang/az_ir.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Azerbaijani in Iran (AZ-IR) -# -# Data from Roozbeh Pournader -# -# 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 +# +# Iran's Azerbaijani uses Persian letters plus an obligatory HAMZA ABOVE +# (only used over FARSI YEH). +# +include fa.orth +0654 # ARABIC HAMZA ABOVE diff --git a/fontconfig/fc-lang/ba.orth b/fontconfig/fc-lang/ba.orth index 513c1c775..9c91dda6c 100644 --- a/fontconfig/fc-lang/ba.orth +++ b/fontconfig/fc-lang/ba.orth @@ -1,56 +1,56 @@ -# -# fontconfig/fc-lang/ba.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Bashkir (BA) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -#00AA # FEMININE ORDINAL INDICATOR -#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * -#0401 # CYRILLIC CAPITAL LETTER IO in evertype.com -#0451 # CYRILLIC SMALL LETTER IO in evertype.com - -0410-044f # CYRILLIC -0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE -0493 # CYRILLIC SMALL LETTER GHE WITH STROKE -0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER -0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER -04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA -04A1 # CYRILLIC SMALL LETTER BASHKIR KA -04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER -04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER -04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER -04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER -04AE # CYRILLIC CAPITAL LETTER STRAIGHT U -04AF # CYRILLIC SMALL LETTER STRAIGHT U -04BA # CYRILLIC CAPITAL LETTER SHHA -04BB # CYRILLIC SMALL LETTER SHHA -04D8 # CYRILLIC CAPITAL LETTER SCHWA -04D9 # CYRILLIC SMALL LETTER SCHWA -04E8 # CYRILLIC CAPITAL LETTER BARRED O -04E9 # CYRILLIC SMALL LETTER BARRED O -#2018-2019 # single quotes -#201c-201d # double quotes -#2039-203a # angle quotes +# +# fontconfig/fc-lang/ba.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bashkir (BA) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00AA # FEMININE ORDINAL INDICATOR +#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * +#0401 # CYRILLIC CAPITAL LETTER IO in evertype.com +#0451 # CYRILLIC SMALL LETTER IO in evertype.com + +0410-044f # CYRILLIC +0492 # CYRILLIC CAPITAL LETTER GHE WITH STROKE +0493 # CYRILLIC SMALL LETTER GHE WITH STROKE +0498 # CYRILLIC CAPITAL LETTER ZE WITH DESCENDER +0499 # CYRILLIC SMALL LETTER ZE WITH DESCENDER +04A0 # CYRILLIC CAPITAL LETTER BASHKIR KA +04A1 # CYRILLIC SMALL LETTER BASHKIR KA +04A2 # CYRILLIC CAPITAL LETTER EN WITH DESCENDER +04A3 # CYRILLIC SMALL LETTER EN WITH DESCENDER +04AA # CYRILLIC CAPITAL LETTER ES WITH DESCENDER +04AB # CYRILLIC SMALL LETTER ES WITH DESCENDER +04AE # CYRILLIC CAPITAL LETTER STRAIGHT U +04AF # CYRILLIC SMALL LETTER STRAIGHT U +04BA # CYRILLIC CAPITAL LETTER SHHA +04BB # CYRILLIC SMALL LETTER SHHA +04D8 # CYRILLIC CAPITAL LETTER SCHWA +04D9 # CYRILLIC SMALL LETTER SCHWA +04E8 # CYRILLIC CAPITAL LETTER BARRED O +04E9 # CYRILLIC SMALL LETTER BARRED O +#2018-2019 # single quotes +#201c-201d # double quotes +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/be.orth b/fontconfig/fc-lang/be.orth index 0d93d5dc7..1bf5e3234 100644 --- a/fontconfig/fc-lang/be.orth +++ b/fontconfig/fc-lang/be.orth @@ -1,40 +1,40 @@ -# -# fontconfig/fc-lang/be.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Byelorussian (BE) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -#00ab -#00bb -#02BC # MODIFIER LETTER APOSTROPHE -#0401 # CYRILLIC CAPITAL LETTER IO evertype.com -0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I -040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) -0410-044f -#0451 # CYRILLIC SMALL LETTER IO evertype.com -0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I -045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian) -#2039-203a # angle quotes +# +# fontconfig/fc-lang/be.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Byelorussian (BE) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab +#00bb +#02BC # MODIFIER LETTER APOSTROPHE +#0401 # CYRILLIC CAPITAL LETTER IO evertype.com +0406 # CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRAINIAN I +040E # CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) +0410-044f +#0451 # CYRILLIC SMALL LETTER IO evertype.com +0456 # CYRILLIC SMALL LETTER BYELORUSSIAN-UKRAINIAN I +045E # CYRILLIC SMALL LETTER SHORT U (Byelorussian) +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/bg.orth b/fontconfig/fc-lang/bg.orth index bbedc44a2..c947490f0 100644 --- a/fontconfig/fc-lang/bg.orth +++ b/fontconfig/fc-lang/bg.orth @@ -1,43 +1,43 @@ -# -# fontconfig/fc-lang/bg.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Bulgarian (BG) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -#0400 # CYRILLIC CAPITAL IE WITH GRAVE evertype.com -#040d # CYRILLIC CAPITAL I WITH GRAVE evertype.com -0410-042a -042c -042e-042f -0430-044a -044c -044e-044f -#0450 # CYRILLIC SMALL IE WITH GRAVE evertype.com -#045d # CYRILLIC SMALL I WITH GRAVE evertype.com -#0462 # CYRILLIC CAPITAL LETTER YAT evertype.com -#0463 # CYRILLIC SMALL LETTER YAT evertype.com -#046A # CYRILLIC CAPITAL LETTER BIG YUS evertype.com -#046B # CYRILLIC SMALL LETTER BIG YUS evertype.com +# +# fontconfig/fc-lang/bg.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bulgarian (BG) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#0400 # CYRILLIC CAPITAL IE WITH GRAVE evertype.com +#040d # CYRILLIC CAPITAL I WITH GRAVE evertype.com +0410-042a +042c +042e-042f +0430-044a +044c +044e-044f +#0450 # CYRILLIC SMALL IE WITH GRAVE evertype.com +#045d # CYRILLIC SMALL I WITH GRAVE evertype.com +#0462 # CYRILLIC CAPITAL LETTER YAT evertype.com +#0463 # CYRILLIC SMALL LETTER YAT evertype.com +#046A # CYRILLIC CAPITAL LETTER BIG YUS evertype.com +#046B # CYRILLIC SMALL LETTER BIG YUS evertype.com diff --git a/fontconfig/fc-lang/bh.orth b/fontconfig/fc-lang/bh.orth index c39a7a676..2dd749cb4 100644 --- a/fontconfig/fc-lang/bh.orth +++ b/fontconfig/fc-lang/bh.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/bh.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Bihari (Devanagari script) (BH) -include hi.orth +# +# fontconfig/fc-lang/bh.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bihari (Devanagari script) (BH) +include hi.orth diff --git a/fontconfig/fc-lang/bho.orth b/fontconfig/fc-lang/bho.orth index e72746bd7..b5e34d851 100644 --- a/fontconfig/fc-lang/bho.orth +++ b/fontconfig/fc-lang/bho.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/bho.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Bhojpuri (Devanagari script) (BHO) -include hi.orth +# +# fontconfig/fc-lang/bho.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bhojpuri (Devanagari script) (BHO) +include hi.orth diff --git a/fontconfig/fc-lang/bi.orth b/fontconfig/fc-lang/bi.orth index c488c0c82..521d52981 100644 --- a/fontconfig/fc-lang/bi.orth +++ b/fontconfig/fc-lang/bi.orth @@ -1,39 +1,39 @@ -# -# fontconfig/fc-lang/bi.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Bislama (BI) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c9 -00e9 -00cf -00ef -#e000 # LATIN CAPITAL LETTER M WITH MACRON (no UCS code) -#e001 # LATIN SMALL LETTER M WITH MACRON (no UCS code) -#e002 # LATIN CAPITAL LETTER P WITH MACRON (no UCS code) -#e003 # LATIN SMALL LETTER P WITH MACRON (no UCS code) -00dc -00fc +# +# fontconfig/fc-lang/bi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bislama (BI) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c9 +00e9 +00cf +00ef +#e000 # LATIN CAPITAL LETTER M WITH MACRON (no UCS code) +#e001 # LATIN SMALL LETTER M WITH MACRON (no UCS code) +#e002 # LATIN CAPITAL LETTER P WITH MACRON (no UCS code) +#e003 # LATIN SMALL LETTER P WITH MACRON (no UCS code) +00dc +00fc diff --git a/fontconfig/fc-lang/bin.orth b/fontconfig/fc-lang/bin.orth index e0f8f7ad3..b9db3a182 100644 --- a/fontconfig/fc-lang/bin.orth +++ b/fontconfig/fc-lang/bin.orth @@ -1,55 +1,55 @@ -# -# fontconfig/fc-lang/bin.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Edo or Bini (BIN) -# -# Orthography from http://www.ideography.co.uk/library/pdf/charsets.pdf -# -0041-005a -0061-007a -00C0 # LATIN CAPITAL LETTER A WITH GRAVE -00C1 # LATIN CAPITAL LETTER A WITH ACUTE -00C8 # LATIN CAPITAL LETTER E WITH GRAVE -00C9 # LATIN CAPITAL LETTER E WITH ACUTE -00CC # LATIN CAPITAL LETTER I WITH GRAVE -00CD # LATIN CAPITAL LETTER I WITH ACUTE -00D2 # LATIN CAPITAL LETTER O WITH GRAVE -00D3 # LATIN CAPITAL LETTER O WITH ACUTE -00D9 # LATIN CAPITAL LETTER U WITH GRAVE -00DA # LATIN CAPITAL LETTER U WITH ACUTE -00E0 # LATIN SMALL LETTER A WITH GRAVE -00E1 # LATIN SMALL LETTER A WITH ACUTE -00E8 # LATIN SMALL LETTER E WITH GRAVE -00E9 # LATIN SMALL LETTER E WITH ACUTE -00EC # LATIN SMALL LETTER I WITH GRAVE -00ED # LATIN SMALL LETTER I WITH ACUTE -00F2 # LATIN SMALL LETTER O WITH GRAVE -00F3 # LATIN SMALL LETTER O WITH ACUTE -00F9 # LATIN SMALL LETTER U WITH GRAVE -00FA # LATIN SMALL LETTER U WITH ACUTE -1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW -1EB9 # LATIN SMALL LETTER E WITH DOT BELOW -1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW -1ECD # LATIN SMALL LETTER O WITH DOT BELOW -0300 # COMBINING GRAVE ACCENT (Varia) -0301 # COMBINING ACUTE ACCENT (Oxia, Tonos) +# +# fontconfig/fc-lang/bin.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Edo or Bini (BIN) +# +# Orthography from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a +00C0 # LATIN CAPITAL LETTER A WITH GRAVE +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +00C8 # LATIN CAPITAL LETTER E WITH GRAVE +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CC # LATIN CAPITAL LETTER I WITH GRAVE +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00D2 # LATIN CAPITAL LETTER O WITH GRAVE +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +00D9 # LATIN CAPITAL LETTER U WITH GRAVE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +00E0 # LATIN SMALL LETTER A WITH GRAVE +00E1 # LATIN SMALL LETTER A WITH ACUTE +00E8 # LATIN SMALL LETTER E WITH GRAVE +00E9 # LATIN SMALL LETTER E WITH ACUTE +00EC # LATIN SMALL LETTER I WITH GRAVE +00ED # LATIN SMALL LETTER I WITH ACUTE +00F2 # LATIN SMALL LETTER O WITH GRAVE +00F3 # LATIN SMALL LETTER O WITH ACUTE +00F9 # LATIN SMALL LETTER U WITH GRAVE +00FA # LATIN SMALL LETTER U WITH ACUTE +1EB8 # LATIN CAPITAL LETTER E WITH DOT BELOW +1EB9 # LATIN SMALL LETTER E WITH DOT BELOW +1ECC # LATIN CAPITAL LETTER O WITH DOT BELOW +1ECD # LATIN SMALL LETTER O WITH DOT BELOW +0300 # COMBINING GRAVE ACCENT (Varia) +0301 # COMBINING ACUTE ACCENT (Oxia, Tonos) diff --git a/fontconfig/fc-lang/bm.orth b/fontconfig/fc-lang/bm.orth index f19d9e8a6..fca67e86e 100644 --- a/fontconfig/fc-lang/bm.orth +++ b/fontconfig/fc-lang/bm.orth @@ -1,37 +1,37 @@ -# -# fontconfig/fc-lang/bm.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Bambara (bm) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0190 -025b -014a -014b -019d -0272 -0186 -0254 +# +# fontconfig/fc-lang/bm.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bambara (bm) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0190 +025b +014a +014b +019d +0272 +0186 +0254 diff --git a/fontconfig/fc-lang/bo.orth b/fontconfig/fc-lang/bo.orth index 00cb52dc5..a347759c5 100644 --- a/fontconfig/fc-lang/bo.orth +++ b/fontconfig/fc-lang/bo.orth @@ -1,39 +1,39 @@ -# -# fontconfig/fc-lang/bo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Tibetan (BO) -# -# Taken from the Unicode coverage of this language -# -0f40-0f47 -0f49-0f69 -0f71-0f76 -0f78 -0f7a-0f7d -0f80-0f81 -0f90-0f97 -0f99-0fb9 -# Fixed-form subjoined consonants -# These characters are used only for transliteration and transcription. -#0fba-0fbc - +# +# fontconfig/fc-lang/bo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tibetan (BO) +# +# Taken from the Unicode coverage of this language +# +0f40-0f47 +0f49-0f69 +0f71-0f76 +0f78 +0f7a-0f7d +0f80-0f81 +0f90-0f97 +0f99-0fb9 +# Fixed-form subjoined consonants +# These characters are used only for transliteration and transcription. +#0fba-0fbc + diff --git a/fontconfig/fc-lang/br.orth b/fontconfig/fc-lang/br.orth index f38d7f579..9d126ab59 100644 --- a/fontconfig/fc-lang/br.orth +++ b/fontconfig/fc-lang/br.orth @@ -1,47 +1,47 @@ -# -# fontconfig/fc-lang/br.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Breton (BR) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -#0027 -0041-005a -0061-007a -#00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK * -#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * -00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -00D1 # LATIN CAPITAL LETTER N WITH TILDE -00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX eki.ee -00D9 # LATIN CAPITAL LETTER U WITH GRAVE -00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -00F1 # LATIN SMALL LETTER N WITH TILDE -00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX eki.ee -00F9 # LATIN SMALL LETTER U WITH GRAVE -00FC # LATIN SMALL LETTER U WITH DIAERESIS -#2019-201a # single quote and comma +# +# fontconfig/fc-lang/br.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Breton (BR) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#0027 +0041-005a +0061-007a +#00AB # LEFT-POINTING DOUBLE ANGLE QUOTATION MARK * +#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * +00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00D1 # LATIN CAPITAL LETTER N WITH TILDE +00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX eki.ee +00D9 # LATIN CAPITAL LETTER U WITH GRAVE +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +00F1 # LATIN SMALL LETTER N WITH TILDE +00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX eki.ee +00F9 # LATIN SMALL LETTER U WITH GRAVE +00FC # LATIN SMALL LETTER U WITH DIAERESIS +#2019-201a # single quote and comma diff --git a/fontconfig/fc-lang/bs.orth b/fontconfig/fc-lang/bs.orth index 13dc27e23..3ef930908 100644 --- a/fontconfig/fc-lang/bs.orth +++ b/fontconfig/fc-lang/bs.orth @@ -1,39 +1,39 @@ -# -# fontconfig/fc-lang/bs.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Bosnian (BS) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0106 -0107 -010c -010d -0110 -0111 -0160 -0161 -017d -017e +# +# fontconfig/fc-lang/bs.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Bosnian (BS) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0106 +0107 +010c +010d +0110 +0111 +0160 +0161 +017d +017e diff --git a/fontconfig/fc-lang/bua.orth b/fontconfig/fc-lang/bua.orth index 14df6912a..8618310f3 100644 --- a/fontconfig/fc-lang/bua.orth +++ b/fontconfig/fc-lang/bua.orth @@ -1,102 +1,102 @@ -# -# fontconfig/fc-lang/bua.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Buriat (Buryat) (BUA) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) -#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) -04ae -04af -04ba -04bb +# +# fontconfig/fc-lang/bua.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Buriat (Buryat) (BUA) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) +#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) +04ae +04af +04ba +04bb diff --git a/fontconfig/fc-lang/ca.orth b/fontconfig/fc-lang/ca.orth index 7cb4d67f1..3436ab995 100644 --- a/fontconfig/fc-lang/ca.orth +++ b/fontconfig/fc-lang/ca.orth @@ -1,58 +1,58 @@ -# -# fontconfig/fc-lang/ca.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Catalan (CA) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00B7 # MIDDLE DOT -00C0 # LATIN CAPITAL LETTER A WITH GRAVE -00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -00C8 # LATIN CAPITAL LETTER E WITH GRAVE -00C9 # LATIN CAPITAL LETTER E WITH ACUTE -00CD # LATIN CAPITAL LETTER I WITH ACUTE -00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -#00D1 # LATIN CAPITAL LETTER N WITH TILDE "important" @ eki.ee -00D2 # LATIN CAPITAL LETTER O WITH GRAVE -00D3 # LATIN CAPITAL LETTER O WITH ACUTE -00DA # LATIN CAPITAL LETTER U WITH ACUTE -00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -00E0 # LATIN SMALL LETTER A WITH GRAVE -00E7 # LATIN SMALL LETTER C WITH CEDILLA -00E8 # LATIN SMALL LETTER E WITH GRAVE -00E9 # LATIN SMALL LETTER E WITH ACUTE -00ED # LATIN SMALL LETTER I WITH ACUTE -00EF # LATIN SMALL LETTER I WITH DIAERESIS -#00F1 # LATIN SMALL LETTER N WITH TILDE "important" @ eki.ee -00F2 # LATIN SMALL LETTER O WITH GRAVE -00F3 # LATIN SMALL LETTER O WITH ACUTE -00FA # LATIN SMALL LETTER U WITH ACUTE -00FC # LATIN SMALL LETTER U WITH DIAERESIS -013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT -0140 # LATIN SMALL LETTER L WITH MIDDLE DOT -#2018-2019 # single quotes -#201c-201d # double quotes +# +# fontconfig/fc-lang/ca.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Catalan (CA) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00B7 # MIDDLE DOT +00C0 # LATIN CAPITAL LETTER A WITH GRAVE +00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +00C8 # LATIN CAPITAL LETTER E WITH GRAVE +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +#00D1 # LATIN CAPITAL LETTER N WITH TILDE "important" @ eki.ee +00D2 # LATIN CAPITAL LETTER O WITH GRAVE +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E0 # LATIN SMALL LETTER A WITH GRAVE +00E7 # LATIN SMALL LETTER C WITH CEDILLA +00E8 # LATIN SMALL LETTER E WITH GRAVE +00E9 # LATIN SMALL LETTER E WITH ACUTE +00ED # LATIN SMALL LETTER I WITH ACUTE +00EF # LATIN SMALL LETTER I WITH DIAERESIS +#00F1 # LATIN SMALL LETTER N WITH TILDE "important" @ eki.ee +00F2 # LATIN SMALL LETTER O WITH GRAVE +00F3 # LATIN SMALL LETTER O WITH ACUTE +00FA # LATIN SMALL LETTER U WITH ACUTE +00FC # LATIN SMALL LETTER U WITH DIAERESIS +013F # LATIN CAPITAL LETTER L WITH MIDDLE DOT +0140 # LATIN SMALL LETTER L WITH MIDDLE DOT +#2018-2019 # single quotes +#201c-201d # double quotes diff --git a/fontconfig/fc-lang/ce.orth b/fontconfig/fc-lang/ce.orth index 502b1df44..fb9785a2e 100644 --- a/fontconfig/fc-lang/ce.orth +++ b/fontconfig/fc-lang/ce.orth @@ -1,97 +1,97 @@ -# -# fontconfig/fc-lang/ce.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Chechen (CE) -# -0401 -0406 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 +# +# fontconfig/fc-lang/ce.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Chechen (CE) +# +0401 +0406 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/ch.orth b/fontconfig/fc-lang/ch.orth index 45385b0c6..8e8ac6fb3 100644 --- a/fontconfig/fc-lang/ch.orth +++ b/fontconfig/fc-lang/ch.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/ch.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Chamorro (CH) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c2 -00e2 -00d1 -00f1 -00dc -00fc +# +# fontconfig/fc-lang/ch.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chamorro (CH) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c2 +00e2 +00d1 +00f1 +00dc +00fc diff --git a/fontconfig/fc-lang/chm.orth b/fontconfig/fc-lang/chm.orth index f400cd35c..3ff7d3b24 100644 --- a/fontconfig/fc-lang/chm.orth +++ b/fontconfig/fc-lang/chm.orth @@ -1,109 +1,109 @@ -# -# fontconfig/fc-lang/chm.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Mari (Lower Cheremis / Upper Cheremis) (CHM) -# -# I've merged both of these languages together so that a font -# for 'chm' will cover both orthographies -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -04a4 -04a5 -04d2 -04d3 -04e6 -04e7 -04f0 -04f1 -04f8 -04f9 +# +# fontconfig/fc-lang/chm.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Mari (Lower Cheremis / Upper Cheremis) (CHM) +# +# I've merged both of these languages together so that a font +# for 'chm' will cover both orthographies +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +04a4 +04a5 +04d2 +04d3 +04e6 +04e7 +04f0 +04f1 +04f8 +04f9 diff --git a/fontconfig/fc-lang/chr.orth b/fontconfig/fc-lang/chr.orth index 0d87148f6..22972613d 100644 --- a/fontconfig/fc-lang/chr.orth +++ b/fontconfig/fc-lang/chr.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/chr.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Cherokee (chr) -13a0-13f4 +# +# fontconfig/fc-lang/chr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Cherokee (chr) +13a0-13f4 diff --git a/fontconfig/fc-lang/co.orth b/fontconfig/fc-lang/co.orth index 91915bd5c..4c67f755f 100644 --- a/fontconfig/fc-lang/co.orth +++ b/fontconfig/fc-lang/co.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/co.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Corsican (CO) -include fr.orth +# +# fontconfig/fc-lang/co.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Corsican (CO) +include fr.orth diff --git a/fontconfig/fc-lang/cs.orth b/fontconfig/fc-lang/cs.orth index 422d4b6b8..3c03e80d2 100644 --- a/fontconfig/fc-lang/cs.orth +++ b/fontconfig/fc-lang/cs.orth @@ -1,67 +1,67 @@ -# -# fontconfig/fc-lang/cs.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Czech (CS) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00C1 # LATIN CAPITAL LETTER A WITH ACUTE -#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com -00C9 # LATIN CAPITAL LETTER E WITH ACUTE -00CD # LATIN CAPITAL LETTER I WITH ACUTE -00D3 # LATIN CAPITAL LETTER O WITH ACUTE -#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com -00DA # LATIN CAPITAL LETTER U WITH ACUTE -#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com -00DD # LATIN CAPITAL LETTER Y WITH ACUTE -00E1 # LATIN SMALL LETTER A WITH ACUTE -#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com -00E9 # LATIN SMALL LETTER E WITH ACUTE -00ED # LATIN SMALL LETTER I WITH ACUTE -00F3 # LATIN SMALL LETTER O WITH ACUTE -#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com -00FA # LATIN SMALL LETTER U WITH ACUTE -#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com -00FD # LATIN SMALL LETTER Y WITH ACUTE -010C # LATIN CAPITAL LETTER C WITH CARON -010D # LATIN SMALL LETTER C WITH CARON -010E # LATIN CAPITAL LETTER D WITH CARON -010F # LATIN SMALL LETTER D WITH CARON -011A # LATIN CAPITAL LETTER E WITH CARON -011B # LATIN SMALL LETTER E WITH CARON -0147 # LATIN CAPITAL LETTER N WITH CARON -0148 # LATIN SMALL LETTER N WITH CARON -0158 # LATIN CAPITAL LETTER R WITH CARON -0159 # LATIN SMALL LETTER R WITH CARON -0160 # LATIN CAPITAL LETTER S WITH CARON -0161 # LATIN SMALL LETTER S WITH CARON -0164 # LATIN CAPITAL LETTER T WITH CARON -0165 # LATIN SMALL LETTER T WITH CARON -016E # LATIN CAPITAL LETTER U WITH RING ABOVE -016F # LATIN SMALL LETTER U WITH RING ABOVE -017D # LATIN CAPITAL LETTER Z WITH CARON -017E # LATIN SMALL LETTER Z WITH CARON +# +# fontconfig/fc-lang/cs.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Czech (CS) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com +00DA # LATIN CAPITAL LETTER U WITH ACUTE +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com +00DD # LATIN CAPITAL LETTER Y WITH ACUTE +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com +00E9 # LATIN SMALL LETTER E WITH ACUTE +00ED # LATIN SMALL LETTER I WITH ACUTE +00F3 # LATIN SMALL LETTER O WITH ACUTE +#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com +00FA # LATIN SMALL LETTER U WITH ACUTE +#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com +00FD # LATIN SMALL LETTER Y WITH ACUTE +010C # LATIN CAPITAL LETTER C WITH CARON +010D # LATIN SMALL LETTER C WITH CARON +010E # LATIN CAPITAL LETTER D WITH CARON +010F # LATIN SMALL LETTER D WITH CARON +011A # LATIN CAPITAL LETTER E WITH CARON +011B # LATIN SMALL LETTER E WITH CARON +0147 # LATIN CAPITAL LETTER N WITH CARON +0148 # LATIN SMALL LETTER N WITH CARON +0158 # LATIN CAPITAL LETTER R WITH CARON +0159 # LATIN SMALL LETTER R WITH CARON +0160 # LATIN CAPITAL LETTER S WITH CARON +0161 # LATIN SMALL LETTER S WITH CARON +0164 # LATIN CAPITAL LETTER T WITH CARON +0165 # LATIN SMALL LETTER T WITH CARON +016E # LATIN CAPITAL LETTER U WITH RING ABOVE +016F # LATIN SMALL LETTER U WITH RING ABOVE +017D # LATIN CAPITAL LETTER Z WITH CARON +017E # LATIN SMALL LETTER Z WITH CARON diff --git a/fontconfig/fc-lang/cu.orth b/fontconfig/fc-lang/cu.orth index 6e7e7c290..f4f512778 100644 --- a/fontconfig/fc-lang/cu.orth +++ b/fontconfig/fc-lang/cu.orth @@ -1,42 +1,42 @@ -# -# fontconfig/fc-lang/cu.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Old Church Slavonic (CU) -# -# Orthography from http://www.evertype.com/alphabets/old-church-slavonic.pdf -# -0401-0402 -0405-0406 -0408 -040b -040d -040f-0418 -041a-042c -042e-044c -044e-0450 -0452 -0455-456 -0458 -045b -045d -045f-0479 +# +# fontconfig/fc-lang/cu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Old Church Slavonic (CU) +# +# Orthography from http://www.evertype.com/alphabets/old-church-slavonic.pdf +# +0401-0402 +0405-0406 +0408 +040b +040d +040f-0418 +041a-042c +042e-044c +044e-0450 +0452 +0455-456 +0458 +045b +045d +045f-0479 diff --git a/fontconfig/fc-lang/cv.orth b/fontconfig/fc-lang/cv.orth index 44ebe9282..58c739b23 100644 --- a/fontconfig/fc-lang/cv.orth +++ b/fontconfig/fc-lang/cv.orth @@ -1,109 +1,109 @@ -# -# fontconfig/fc-lang/cv.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Chuvash (CV) -# -# -# I'm guessing the c cedilla is really es with descender -# -#00c7 # C cedilla -#00e7 # c cedilla -04aa # capital es with descender -04ab # small es with descender -0102 -0103 -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -04d6 -04d7 -04f2 -04f3 +# +# fontconfig/fc-lang/cv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Chuvash (CV) +# +# +# I'm guessing the c cedilla is really es with descender +# +#00c7 # C cedilla +#00e7 # c cedilla +04aa # capital es with descender +04ab # small es with descender +0102 +0103 +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +04d6 +04d7 +04f2 +04f3 diff --git a/fontconfig/fc-lang/cy.orth b/fontconfig/fc-lang/cy.orth index 617df3d34..7d1b8a4db 100644 --- a/fontconfig/fc-lang/cy.orth +++ b/fontconfig/fc-lang/cy.orth @@ -1,63 +1,63 @@ -# -# fontconfig/fc-lang/cy.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Welsh (CY) -# -# Coverage given by Markus Kuhn -# and separately by Jessica Perry Hekman -# 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 +# and separately by Jessica Perry Hekman +# with help from Mark Kille and Jerry Hunter. +# +0041-005a +0061-007a +00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +00E9 # LATIN SMALL LETTER E WITH ACUTE +00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +00EF # LATIN SMALL LETTER I WITH DIAERESIS +00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +00FF # LATIN SMALL LETTER Y WITH DIAERESIS +# +# Non-Latin-1 characters needed for Welsh: +# +0174 # LATIN CAPITAL LETTER W WITH CIRCUMFLEX +0175 # LATIN SMALL LETTER W WITH CIRCUMFLEX +0176 # LATIN CAPITAL LETTER Y WITH CIRCUMFLEX +0177 # LATIN SMALL LETTER Y WITH CIRCUMFLEX +0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +# +# And stricktly speaking for dictionary authors also: +# +1E80 # LATIN CAPITAL LETTER W WITH GRAVE +1E81 # LATIN SMALL LETTER W WITH GRAVE +1E82 # LATIN CAPITAL LETTER W WITH ACUTE +1E83 # LATIN SMALL LETTER W WITH ACUTE +1E84 # LATIN CAPITAL LETTER W WITH DIAERESIS +1E85 # LATIN SMALL LETTER W WITH DIAERESIS +1EF2 # LATIN CAPITAL LETTER Y WITH GRAVE +1EF3 # LATIN SMALL LETTER Y WITH GRAVE diff --git a/fontconfig/fc-lang/da.orth b/fontconfig/fc-lang/da.orth index 3e74d81bb..a10ac7370 100644 --- a/fontconfig/fc-lang/da.orth +++ b/fontconfig/fc-lang/da.orth @@ -1,89 +1,89 @@ -# -# fontconfig/fc-lang/da.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Danish (DA) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# Note: -# The sources cited at www.evertype.com appear to have unified -# all of the nordic languages making the orthography significantly -# larger than needed for Danish. The orthography used here is -# just that from eki.ee with the evertype.com additions commented out -# -0041-005a -0061-007a -#00ab -#00bb -#00C0 # LATIN CAPITAL LETTER A WITH GRAVE -00C1 # LATIN CAPITAL LETTER A WITH ACUTE -#00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -00C6 # LATIN CAPITAL LETTER AE (ash) * -#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -#00C8 # LATIN CAPITAL LETTER E WITH GRAVE -00C9 # LATIN CAPITAL LETTER E WITH ACUTE -#00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -00CD # LATIN CAPITAL LETTER I WITH ACUTE -#00D0 # LATIN CAPITAL LETTER ETH (Icelandic) -00D3 # LATIN CAPITAL LETTER O WITH ACUTE -#00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -00D8 # LATIN CAPITAL LETTER O WITH STROKE -00DA # LATIN CAPITAL LETTER U WITH ACUTE -#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -00DD # LATIN CAPITAL LETTER Y WITH ACUTE -#00DE # LATIN CAPITAL LETTER THORN (Icelandic) -#00E0 # LATIN SMALL LETTER A WITH GRAVE -00E1 # LATIN SMALL LETTER A WITH ACUTE -#00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -#00E4 # LATIN SMALL LETTER A WITH DIAERESIS -00E5 # LATIN SMALL LETTER A WITH RING ABOVE -00E6 # LATIN SMALL LETTER AE (ash) * -#00E7 # LATIN SMALL LETTER C WITH CEDILLA -#00E8 # LATIN SMALL LETTER E WITH GRAVE -00E9 # LATIN SMALL LETTER E WITH ACUTE -#00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -#00EB # LATIN SMALL LETTER E WITH DIAERESIS -00ED # LATIN SMALL LETTER I WITH ACUTE -#00F0 # LATIN SMALL LETTER ETH (Icelandic) -00F3 # LATIN SMALL LETTER O WITH ACUTE -#00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -#00F6 # LATIN SMALL LETTER O WITH DIAERESIS -00F8 # LATIN SMALL LETTER O WITH STROKE -00FA # LATIN SMALL LETTER U WITH ACUTE -#00FC # LATIN SMALL LETTER U WITH DIAERESIS -00FD # LATIN SMALL LETTER Y WITH ACUTE -#00FE # LATIN SMALL LETTER THORN (Icelandic) -#0152 # LATIN CAPITAL LIGATURE OE -#0153 # LATIN SMALL LIGATURE OE -#01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE -#01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE -#01FC # LATIN CAPITAL LETTER AE WITH ACUTE (ash) * -#01FD # LATIN SMALL LETTER AE WITH ACUTE (ash) * -#01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE -#01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE -#2039-203a # angle quotes +# +# fontconfig/fc-lang/da.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Danish (DA) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# Note: +# The sources cited at www.evertype.com appear to have unified +# all of the nordic languages making the orthography significantly +# larger than needed for Danish. The orthography used here is +# just that from eki.ee with the evertype.com additions commented out +# +0041-005a +0061-007a +#00ab +#00bb +#00C0 # LATIN CAPITAL LETTER A WITH GRAVE +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +00C6 # LATIN CAPITAL LETTER AE (ash) * +#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +#00C8 # LATIN CAPITAL LETTER E WITH GRAVE +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +#00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +00CD # LATIN CAPITAL LETTER I WITH ACUTE +#00D0 # LATIN CAPITAL LETTER ETH (Icelandic) +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +#00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +00D8 # LATIN CAPITAL LETTER O WITH STROKE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00DD # LATIN CAPITAL LETTER Y WITH ACUTE +#00DE # LATIN CAPITAL LETTER THORN (Icelandic) +#00E0 # LATIN SMALL LETTER A WITH GRAVE +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +#00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00E5 # LATIN SMALL LETTER A WITH RING ABOVE +00E6 # LATIN SMALL LETTER AE (ash) * +#00E7 # LATIN SMALL LETTER C WITH CEDILLA +#00E8 # LATIN SMALL LETTER E WITH GRAVE +00E9 # LATIN SMALL LETTER E WITH ACUTE +#00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +#00EB # LATIN SMALL LETTER E WITH DIAERESIS +00ED # LATIN SMALL LETTER I WITH ACUTE +#00F0 # LATIN SMALL LETTER ETH (Icelandic) +00F3 # LATIN SMALL LETTER O WITH ACUTE +#00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +#00F6 # LATIN SMALL LETTER O WITH DIAERESIS +00F8 # LATIN SMALL LETTER O WITH STROKE +00FA # LATIN SMALL LETTER U WITH ACUTE +#00FC # LATIN SMALL LETTER U WITH DIAERESIS +00FD # LATIN SMALL LETTER Y WITH ACUTE +#00FE # LATIN SMALL LETTER THORN (Icelandic) +#0152 # LATIN CAPITAL LIGATURE OE +#0153 # LATIN SMALL LIGATURE OE +#01FA # LATIN CAPITAL LETTER A WITH RING ABOVE AND ACUTE +#01FB # LATIN SMALL LETTER A WITH RING ABOVE AND ACUTE +#01FC # LATIN CAPITAL LETTER AE WITH ACUTE (ash) * +#01FD # LATIN SMALL LETTER AE WITH ACUTE (ash) * +#01FE # LATIN CAPITAL LETTER O WITH STROKE AND ACUTE +#01FF # LATIN SMALL LETTER O WITH STROKE AND ACUTE +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/de.orth b/fontconfig/fc-lang/de.orth index 69dc73066..63a2eebf4 100644 --- a/fontconfig/fc-lang/de.orth +++ b/fontconfig/fc-lang/de.orth @@ -1,49 +1,49 @@ -# -# fontconfig/fc-lang/de.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# German (DE) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -#00ab -#00bb -0041-005a -0061-007a -#00C0 # LATIN CAPITAL LETTER A WITH GRAVE eki.ee -00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -#00C9 # LATIN CAPITAL LETTER E WITH ACUTE eki.ee -00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -00DF # LATIN SMALL LETTER SHARP S (German) -#00E0 # LATIN SMALL LETTER A WITH GRAVE eki.ee -00E4 # LATIN SMALL LETTER A WITH DIAERESIS -#00E9 # LATIN SMALL LETTER E WITH ACUTE eki.ee -00F6 # LATIN SMALL LETTER O WITH DIAERESIS -00FC # LATIN SMALL LETTER U WITH DIAERESIS -#2018 # single quotes -#201a # single quotes -#201c # double quotes -#201e # double quotes -#2039-203a # angle quotes +# +# fontconfig/fc-lang/de.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# German (DE) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab +#00bb +0041-005a +0061-007a +#00C0 # LATIN CAPITAL LETTER A WITH GRAVE eki.ee +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +#00C9 # LATIN CAPITAL LETTER E WITH ACUTE eki.ee +00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00DF # LATIN SMALL LETTER SHARP S (German) +#00E0 # LATIN SMALL LETTER A WITH GRAVE eki.ee +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +#00E9 # LATIN SMALL LETTER E WITH ACUTE eki.ee +00F6 # LATIN SMALL LETTER O WITH DIAERESIS +00FC # LATIN SMALL LETTER U WITH DIAERESIS +#2018 # single quotes +#201a # single quotes +#201c # double quotes +#201e # double quotes +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/dz.orth b/fontconfig/fc-lang/dz.orth index 58dc1a202..0d5306572 100644 --- a/fontconfig/fc-lang/dz.orth +++ b/fontconfig/fc-lang/dz.orth @@ -1,28 +1,28 @@ -# -# fontconfig/fc-lang/dz.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Dzongkha (DZ) -# -# Uses Tibetan script -# -include bo.orth +# +# fontconfig/fc-lang/dz.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Dzongkha (DZ) +# +# Uses Tibetan script +# +include bo.orth diff --git a/fontconfig/fc-lang/el.orth b/fontconfig/fc-lang/el.orth index 3c7eb0636..460d74074 100644 --- a/fontconfig/fc-lang/el.orth +++ b/fontconfig/fc-lang/el.orth @@ -1,32 +1,32 @@ -# -# fontconfig/fc-lang/el.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Greek (EL) -# -# From vvas@hal.csd.auth.gr (Vasilis Vasaitis) -# -0386 -0388-038a -038c -038e-03a1 -03a3-03ce +# +# fontconfig/fc-lang/el.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Greek (EL) +# +# From vvas@hal.csd.auth.gr (Vasilis Vasaitis) +# +0386 +0388-038a +038c +038e-03a1 +03a3-03ce diff --git a/fontconfig/fc-lang/en.orth b/fontconfig/fc-lang/en.orth index ce4214cd0..94e74dbcf 100644 --- a/fontconfig/fc-lang/en.orth +++ b/fontconfig/fc-lang/en.orth @@ -1,40 +1,40 @@ -# -# fontconfig/fc-lang/en.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# English (EN) -0041-005a -0061-007a -00c0 -00c7-00cb -00cf -00d1 -00d4 -00d6 -00e0 -00e7-00eb -00ef -00f1 -00f4 -00f6 -#2018-2019 # single quotes -#201c-201d # double quotes +# +# fontconfig/fc-lang/en.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# English (EN) +0041-005a +0061-007a +00c0 +00c7-00cb +00cf +00d1 +00d4 +00d6 +00e0 +00e7-00eb +00ef +00f1 +00f4 +00f6 +#2018-2019 # single quotes +#201c-201d # double quotes diff --git a/fontconfig/fc-lang/eo.orth b/fontconfig/fc-lang/eo.orth index e9c247a26..65351c829 100644 --- a/fontconfig/fc-lang/eo.orth +++ b/fontconfig/fc-lang/eo.orth @@ -1,32 +1,32 @@ -# -# fontconfig/fc-lang/eo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Esperanto (EO) -0041-005a -0061-007a -0108-0109 -011c-011d -0124-0125 -0134-0135 -015c-015d -016c-016d +# +# fontconfig/fc-lang/eo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Esperanto (EO) +0041-005a +0061-007a +0108-0109 +011c-011d +0124-0125 +0134-0135 +015c-015d +016c-016d diff --git a/fontconfig/fc-lang/es.orth b/fontconfig/fc-lang/es.orth index 9d43a33d9..b9db47bac 100644 --- a/fontconfig/fc-lang/es.orth +++ b/fontconfig/fc-lang/es.orth @@ -1,50 +1,50 @@ -# -# fontconfig/fc-lang/es.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Spanish (ES) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00A1 # INVERTED EXCLAMATION MARK -#00BF # INVERTED QUESTION MARK -00C1 # LATIN CAPITAL LETTER A WITH ACUTE -#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA important @eki.ee -00C9 # LATIN CAPITAL LETTER E WITH ACUTE -00CD # LATIN CAPITAL LETTER I WITH ACUTE -00D1 # LATIN CAPITAL LETTER N WITH TILDE -00D3 # LATIN CAPITAL LETTER O WITH ACUTE -00DA # LATIN CAPITAL LETTER U WITH ACUTE -00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -00E1 # LATIN SMALL LETTER A WITH ACUTE -#00E7 # LATIN SMALL LETTER C WITH CEDILLA important @eki.ee -00E9 # LATIN SMALL LETTER E WITH ACUTE -00ED # LATIN SMALL LETTER I WITH ACUTE -00F1 # LATIN SMALL LETTER N WITH TILDE -00F3 # LATIN SMALL LETTER O WITH ACUTE -00FA # LATIN SMALL LETTER U WITH ACUTE -00FC # LATIN SMALL LETTER U WITH DIAERESIS -# +# +# fontconfig/fc-lang/es.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Spanish (ES) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00A1 # INVERTED EXCLAMATION MARK +#00BF # INVERTED QUESTION MARK +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA important @eki.ee +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00D1 # LATIN CAPITAL LETTER N WITH TILDE +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E7 # LATIN SMALL LETTER C WITH CEDILLA important @eki.ee +00E9 # LATIN SMALL LETTER E WITH ACUTE +00ED # LATIN SMALL LETTER I WITH ACUTE +00F1 # LATIN SMALL LETTER N WITH TILDE +00F3 # LATIN SMALL LETTER O WITH ACUTE +00FA # LATIN SMALL LETTER U WITH ACUTE +00FC # LATIN SMALL LETTER U WITH DIAERESIS +# diff --git a/fontconfig/fc-lang/et.orth b/fontconfig/fc-lang/et.orth index da1108613..16c3684c5 100644 --- a/fontconfig/fc-lang/et.orth +++ b/fontconfig/fc-lang/et.orth @@ -1,47 +1,47 @@ -# -# fontconfig/fc-lang/et.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Estonian (ET) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -00D5 # LATIN CAPITAL LETTER O WITH TILDE -00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -00E4 # LATIN SMALL LETTER A WITH DIAERESIS -00F5 # LATIN SMALL LETTER O WITH TILDE -00F6 # LATIN SMALL LETTER O WITH DIAERESIS -00FC # LATIN SMALL LETTER U WITH DIAERESIS -0160 # LATIN CAPITAL LETTER S WITH CARON -0161 # LATIN SMALL LETTER S WITH CARON -017D # LATIN CAPITAL LETTER Z WITH CARON -017E # LATIN SMALL LETTER Z WITH CARON -#2018 # # single quote -#201a # # single quote -#201c # # double quote -#201e # # double quote +# +# fontconfig/fc-lang/et.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Estonian (ET) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00D5 # LATIN CAPITAL LETTER O WITH TILDE +00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00F5 # LATIN SMALL LETTER O WITH TILDE +00F6 # LATIN SMALL LETTER O WITH DIAERESIS +00FC # LATIN SMALL LETTER U WITH DIAERESIS +0160 # LATIN CAPITAL LETTER S WITH CARON +0161 # LATIN SMALL LETTER S WITH CARON +017D # LATIN CAPITAL LETTER Z WITH CARON +017E # LATIN SMALL LETTER Z WITH CARON +#2018 # # single quote +#201a # # single quote +#201c # # double quote +#201e # # double quote diff --git a/fontconfig/fc-lang/eu.orth b/fontconfig/fc-lang/eu.orth index ad3f5d91a..ab7b9070e 100644 --- a/fontconfig/fc-lang/eu.orth +++ b/fontconfig/fc-lang/eu.orth @@ -1,45 +1,45 @@ -# -# fontconfig/fc-lang/eu.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Basque (EU) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -# The orthography from evertype.com comes from the Académie de la Langue -# Basque prior to 1926. eki.ee adds some additional letters, marked here -# and commented out. I've also commented out some older letters -# from the evertype.com orthography which are (apparently) no longer -# in use -# -0041-005a -0061-007a -#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA eki.ee -00D1 LATIN CAPITAL LETTER N WITH TILDE -00DC LATIN CAPITAL LETTER U WITH DIAERESIS -#00E7 # LATIN SMALL LETTER C WITH CEDILLA eki.ee -00F1 LATIN SMALL LETTER N WITH TILDE -00FC LATIN SMALL LETTER U WITH DIAERESIS -#0154 LATIN CAPITAL LETTER R WITH ACUTE evertype.com -#0155 LATIN SMALL LETTER R WITH ACUTE evertype.com +# +# fontconfig/fc-lang/eu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Basque (EU) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +# The orthography from evertype.com comes from the Académie de la Langue +# Basque prior to 1926. eki.ee adds some additional letters, marked here +# and commented out. I've also commented out some older letters +# from the evertype.com orthography which are (apparently) no longer +# in use +# +0041-005a +0061-007a +#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA eki.ee +00D1 LATIN CAPITAL LETTER N WITH TILDE +00DC LATIN CAPITAL LETTER U WITH DIAERESIS +#00E7 # LATIN SMALL LETTER C WITH CEDILLA eki.ee +00F1 LATIN SMALL LETTER N WITH TILDE +00FC LATIN SMALL LETTER U WITH DIAERESIS +#0154 LATIN CAPITAL LETTER R WITH ACUTE evertype.com +#0155 LATIN SMALL LETTER R WITH ACUTE evertype.com diff --git a/fontconfig/fc-lang/fa.orth b/fontconfig/fc-lang/fa.orth index e404478bb..6e680f2d2 100644 --- a/fontconfig/fc-lang/fa.orth +++ b/fontconfig/fc-lang/fa.orth @@ -1,73 +1,73 @@ -# -# fontconfig/fc-lang/fa.orth -# -# Copyright © 2002 Keith Packard -# Copyright © 2009 Roozbeh Pournader -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Persian (fa) -# -# Sources: -# * ISIRI 6219:2002, "Information Technology — Persian Information -# Interchange and Display Mechanism, using Unicode" -# * "Dastur-e Khat-te Fārsi", Iranian Academy of Persian Language and -# Literature, 4th printing, December 2005, ISBN 964-7531-13-3. Available -# at http://www.persianacademy.ir/fa/das.aspx -# -# We are assuming that: -# * Most fonts that claim to support an Arabic letter actually do so; -# * Most modern text rendering software use OpenType tables, instead of -# directly using presentation forms. -# * Some good Arabic fonts do not support codepoints for Arabic presentation -# forms. -# Thus, we are switching to general forms of Arabic letters. -# -# General forms: -0621-0624 -0626-0628 -0629 # TEH MARBUTA, implicitly considered mandatory in the official orthography -062a-063a -0641-0642 -0644-0648 -064b # FATHATAN, considered mandatory in the official orthography -# 064b-064d # DAMMATAN and KASRATAN, considered mandatory in the official orthography, but very rare -# 064e-0650 # FATHA, DAMMA, and KASRA, not mandataroy in the official orthography -# 0651 # SHADDA, considered mandatory only for legal texts -# 0652 # SUKUN, not mandatory in the official orthography -0654 # HAMZA ABOVE, considered mandatory in the official orthography -# 0656 # SUBSCRIPT ALEF, not mentioned in official orthography, but sometimes used -# 0670 # SUPERSCRIPT ALEF, not explicilty listed in the official orthography, although used in the document; not mandatory -067e -0686 -0698 -06a9 -06af -06cc -# Presentations forms: -#fb56-fb59 -#fb7a-fb7d -#fb8a-fb8b -#fb8e-fb95 -#fbfc-fbff -#fe80-fe86 -#fe89-fed8 -#fedd-feee -##fef5-fef8 # These four happen very rarely -#fefb-fefc +# +# fontconfig/fc-lang/fa.orth +# +# Copyright © 2002 Keith Packard +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Persian (fa) +# +# Sources: +# * ISIRI 6219:2002, "Information Technology — Persian Information +# Interchange and Display Mechanism, using Unicode" +# * "Dastur-e Khat-te Fārsi", Iranian Academy of Persian Language and +# Literature, 4th printing, December 2005, ISBN 964-7531-13-3. Available +# at http://www.persianacademy.ir/fa/das.aspx +# +# We are assuming that: +# * Most fonts that claim to support an Arabic letter actually do so; +# * Most modern text rendering software use OpenType tables, instead of +# directly using presentation forms. +# * Some good Arabic fonts do not support codepoints for Arabic presentation +# forms. +# Thus, we are switching to general forms of Arabic letters. +# +# General forms: +0621-0624 +0626-0628 +0629 # TEH MARBUTA, implicitly considered mandatory in the official orthography +062a-063a +0641-0642 +0644-0648 +064b # FATHATAN, considered mandatory in the official orthography +# 064b-064d # DAMMATAN and KASRATAN, considered mandatory in the official orthography, but very rare +# 064e-0650 # FATHA, DAMMA, and KASRA, not mandataroy in the official orthography +# 0651 # SHADDA, considered mandatory only for legal texts +# 0652 # SUKUN, not mandatory in the official orthography +0654 # HAMZA ABOVE, considered mandatory in the official orthography +# 0656 # SUBSCRIPT ALEF, not mentioned in official orthography, but sometimes used +# 0670 # SUPERSCRIPT ALEF, not explicilty listed in the official orthography, although used in the document; not mandatory +067e +0686 +0698 +06a9 +06af +06cc +# Presentations forms: +#fb56-fb59 +#fb7a-fb7d +#fb8a-fb8b +#fb8e-fb95 +#fbfc-fbff +#fe80-fe86 +#fe89-fed8 +#fedd-feee +##fef5-fef8 # These four happen very rarely +#fefb-fefc diff --git a/fontconfig/fc-lang/fc-lang.c b/fontconfig/fc-lang/fc-lang.c index 67d0f1d5f..51717f952 100644 --- a/fontconfig/fc-lang/fc-lang.c +++ b/fontconfig/fc-lang/fc-lang.c @@ -1,592 +1,592 @@ -/* - * fontconfig/fc-lang/fc-lang.c - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fccharset.c" -#include "fcstr.c" -#include "fcserialize.c" - -/* - * fc-lang - * - * Read a set of language orthographies and build C declarations for - * charsets which can then be used to identify which languages are - * supported by a given font. Note that this uses some utilities - * from the fontconfig library, so the necessary file is simply - * included in this compilation. A couple of extra utility - * functions are also needed in slightly modified form - */ - -void -FcMemAlloc (int kind, int size) -{ -} - -void -FcMemFree (int kind, int size) -{ -} - -FcPrivate void -FcCacheObjectReference (void *object) -{ -} - -FcPrivate void -FcCacheObjectDereference (void *object) -{ -} - -int FcDebugVal; - -FcChar8 * -FcConfigHome (void) -{ - return (FcChar8 *) getenv ("HOME"); -} - -static void -fatal (const char *file, int lineno, const char *msg) -{ - if (lineno) - fprintf (stderr, "%s:%d: %s\n", file, lineno, msg); - else - fprintf (stderr, "%s: %s\n", file, msg); - exit (1); -} - -static char * -get_line (FILE *f, char *buf, int *lineno) -{ - char *hash; - char *line; - int end; - -next: - line = buf; - if (!fgets (line, 1024, f)) - return 0; - ++(*lineno); - hash = strchr (line, '#'); - if (hash) - *hash = '\0'; - - while (line[0] && isspace (line[0])) - line++; - end = strlen (line); - while (end > 0 && isspace (line[end-1])) - line[--end] = '\0'; - - if (line[0] == '\0' || line[0] == '\n' || line[0] == '\r') - goto next; - - return line; -} - -static char *dir = 0; - -static FILE * -scanopen (char *file) -{ - FILE *f; - - f = fopen (file, "r"); - if (!f && dir) - { - char path[1024]; - - strcpy (path, dir); - strcat (path, "/"); - strcat (path, file); - f = fopen (path, "r"); - } - return f; -} - -/* - * build a single charset from a source file - * - * The file format is quite simple, either - * a single hex value or a pair separated with a dash - * - * Comments begin with '#' - */ - -static FcCharSet * -scan (FILE *f, char *file, FcCharSetFreezer *freezer) -{ - FcCharSet *c = 0; - FcCharSet *n; - FcBool del; - int start, end, ucs4; - char buf[1024]; - char *line; - int lineno = 0; - - while ((line = get_line (f, buf, &lineno))) - { - if (!strncmp (line, "include", 7)) - { - FILE *included_f; - char *included_file; - included_file = strchr (line, ' '); - if (!included_file) - fatal (file, lineno, - "invalid syntax, expected: include filename"); - while (isspace(*included_file)) - included_file++; - included_f = scanopen (included_file); - if (!included_f) - fatal (included_file, 0, "can't open"); - n = scan (included_f, included_file, freezer); - fclose (included_f); - if (!c) - c = FcCharSetCreate (); - if (!FcCharSetMerge (c, n, NULL)) - fatal (file, lineno, "out of memory"); - FcCharSetDestroy (n); - continue; - } - del = FcFalse; - if (line[0] == '-') - { - del = FcTrue; - line++; - } - if (strchr (line, '-')) - { - if (sscanf (line, "%x-%x", &start, &end) != 2) - fatal (file, lineno, "parse error"); - } - else - { - if (sscanf (line, "%x", &start) != 1) - fatal (file, lineno, "parse error"); - end = start; - } - if (!c) - c = FcCharSetCreate (); - for (ucs4 = start; ucs4 <= end; ucs4++) - { - if (!((del ? FcCharSetDelChar : FcCharSetAddChar) (c, ucs4))) - fatal (file, lineno, "out of memory"); - } - } - n = (FcCharSet *) FcCharSetFreeze (freezer, c); - FcCharSetDestroy (c); - return n; -} - -/* - * Convert a file name into a name suitable for C declarations - */ -static char * -get_name (char *file) -{ - char *name; - char *dot; - - dot = strchr (file, '.'); - if (!dot) - dot = file + strlen(file); - name = malloc (dot - file + 1); - strncpy (name, file, dot - file); - name[dot-file] = '\0'; - return name; -} - -/* - * Convert a C name into a language name - */ -static char * -get_lang (char *name) -{ - char *lang = malloc (strlen (name) + 1); - char *l = lang; - char c; - - while ((c = *name++)) - { - if (isupper ((int) (unsigned char) c)) - c = tolower ((int) (unsigned char) c); - if (c == '_') - c = '-'; - if (c == ' ') - continue; - *l++ = c; - } - *l++ = '\0'; - return lang; -} - -typedef struct _Entry { - int id; - char *file; -} Entry; - -static int compare (const void *a, const void *b) -{ - const Entry *as = a, *bs = b; - return FcStrCmpIgnoreCase ((const FcChar8 *) as->file, (const FcChar8 *) bs->file); -} - -#define MAX_LANG 1024 -#define MAX_LANG_SET_MAP ((MAX_LANG + 31) / 32) - -#define BitSet(map, i) ((map)[(entries[i].id)>>5] |= ((FcChar32) 1 << ((entries[i].id) & 0x1f))) -#define BitGet(map, i) ((map)[(entries[i].id)>>5] >> ((entries[i].id) & 0x1f)) & 1) - -int -main (int argc, char **argv) -{ - static Entry entries[MAX_LANG]; - static FcCharSet *sets[MAX_LANG]; - static int duplicate[MAX_LANG]; - static int country[MAX_LANG]; - static char *names[MAX_LANG]; - static char *langs[MAX_LANG]; - static int off[MAX_LANG]; - FILE *f; - int ncountry = 0; - int i = 0; - int nsets = 0; - int argi; - FcCharLeaf **leaves; - int total_leaves = 0; - int l, sl, tl, tn; - static char line[1024]; - static FcChar32 map[MAX_LANG_SET_MAP]; - int num_lang_set_map; - int setRangeStart[26]; - int setRangeEnd[26]; - FcChar8 setRangeChar; - FcCharSetFreezer *freezer; - - freezer = FcCharSetFreezerCreate (); - if (!freezer) - fatal (argv[0], 0, "out of memory"); - argi = 1; - while (argv[argi]) - { - if (!strcmp (argv[argi], "-d")) - { - argi++; - dir = argv[argi++]; - continue; - } - if (i == MAX_LANG) - fatal (argv[0], 0, "Too many languages"); - entries[i].id = i; - entries[i].file = argv[argi++]; - i++; - } - entries[i].file = 0; - qsort (entries, i, sizeof (Entry), compare); - i = 0; - while (entries[i].file) - { - f = scanopen (entries[i].file); - if (!f) - fatal (entries[i].file, 0, strerror (errno)); - sets[i] = scan (f, entries[i].file, freezer); - names[i] = get_name (entries[i].file); - langs[i] = get_lang(names[i]); - if (strchr (langs[i], '-')) - country[ncountry++] = i; - - total_leaves += sets[i]->num; - i++; - fclose (f); - } - nsets = i; - sets[i] = 0; - leaves = malloc (total_leaves * sizeof (FcCharLeaf *)); - tl = 0; - /* - * Find unique leaves - */ - for (i = 0; sets[i]; i++) - { - for (sl = 0; sl < sets[i]->num; sl++) - { - for (l = 0; l < tl; l++) - if (leaves[l] == FcCharSetLeaf(sets[i], sl)) - break; - if (l == tl) - leaves[tl++] = FcCharSetLeaf(sets[i], sl); - } - } - - /* - * Scan the input until the marker is found - */ - - while (fgets (line, sizeof (line), stdin)) - { - if (!strncmp (line, "@@@", 3)) - break; - fputs (line, stdout); - } - - printf ("/* total size: %d unique leaves: %d */\n\n", - total_leaves, tl); - - /* - * Find duplicate charsets - */ - duplicate[0] = -1; - for (i = 1; sets[i]; i++) - { - int j; - - duplicate[i] = -1; - for (j = 0; j < i; j++) - if (sets[j] == sets[i]) - { - duplicate[i] = j; - break; - } - } - - tn = 0; - for (i = 0; sets[i]; i++) { - if (duplicate[i] >= 0) - continue; - off[i] = tn; - tn += sets[i]->num; - } - - printf ("#define LEAF0 (%d * sizeof (FcLangCharSet))\n", nsets); - printf ("#define OFF0 (LEAF0 + %d * sizeof (FcCharLeaf))\n", tl); - printf ("#define NUM0 (OFF0 + %d * sizeof (uintptr_t))\n", tn); - printf ("#define SET(n) (n * sizeof (FcLangCharSet) + offsetof (FcLangCharSet, charset))\n"); - printf ("#define OFF(s,o) (OFF0 + o * sizeof (uintptr_t) - SET(s))\n"); - printf ("#define NUM(s,n) (NUM0 + n * sizeof (FcChar16) - SET(s))\n"); - printf ("#define LEAF(o,l) (LEAF0 + l * sizeof (FcCharLeaf) - (OFF0 + o * sizeof (intptr_t)))\n"); - printf ("#define fcLangCharSets (fcLangData.langCharSets)\n"); - printf ("#define fcLangCharSetIndices (fcLangData.langIndices)\n"); - printf ("#define fcLangCharSetIndicesInv (fcLangData.langIndicesInv)\n"); - printf ("\n"); - - printf ("static const struct {\n" - " FcLangCharSet langCharSets[%d];\n" - " FcCharLeaf leaves[%d];\n" - " uintptr_t leaf_offsets[%d];\n" - " FcChar16 numbers[%d];\n" - " FcChar%s langIndices[%d];\n" - " FcChar%s langIndicesInv[%d];\n" - "} fcLangData = {\n", - nsets, tl, tn, tn, - nsets < 256 ? "8 " : "16", nsets, nsets < 256 ? "8 " : "16", nsets); - - /* - * Dump sets - */ - - printf ("{\n"); - for (i = 0; sets[i]; i++) - { - int j = duplicate[i]; - - if (j < 0) - j = i; - - printf (" { \"%s\", " - " { FC_REF_CONSTANT, %d, OFF(%d,%d), NUM(%d,%d) } }, /* %d */\n", - langs[i], - sets[j]->num, i, off[j], i, off[j], i); - } - printf ("},\n"); - - /* - * Dump leaves - */ - printf ("{\n"); - for (l = 0; l < tl; l++) - { - printf (" { { /* %d */", l); - for (i = 0; i < 256/32; i++) - { - if (i % 4 == 0) - printf ("\n "); - printf (" 0x%08x,", leaves[l]->map[i]); - } - printf ("\n } },\n"); - } - printf ("},\n"); - - /* - * Dump leaves - */ - printf ("{\n"); - for (i = 0; sets[i]; i++) - { - int n; - - if (duplicate[i] >= 0) - continue; - printf (" /* %s */\n", names[i]); - for (n = 0; n < sets[i]->num; n++) - { - if (n % 4 == 0) - printf (" "); - for (l = 0; l < tl; l++) - if (leaves[l] == FcCharSetLeaf(sets[i], n)) - break; - if (l == tl) - fatal (names[i], 0, "can't find leaf"); - printf (" LEAF(%3d,%3d),", off[i], l); - if (n % 4 == 3) - printf ("\n"); - } - if (n % 4 != 0) - printf ("\n"); - } - printf ("},\n"); - - - printf ("{\n"); - for (i = 0; sets[i]; i++) - { - int n; - - if (duplicate[i] >= 0) - continue; - printf (" /* %s */\n", names[i]); - for (n = 0; n < sets[i]->num; n++) - { - if (n % 8 == 0) - printf (" "); - printf (" 0x%04x,", FcCharSetNumbers (sets[i])[n]); - if (n % 8 == 7) - printf ("\n"); - } - if (n % 8 != 0) - printf ("\n"); - } - printf ("},\n"); - - /* langIndices */ - printf ("{\n"); - for (i = 0; sets[i]; i++) - { - printf (" %d, /* %s */\n", entries[i].id, names[i]); - } - printf ("},\n"); - - /* langIndicesInv */ - printf ("{\n"); - { - static int entries_inv[MAX_LANG]; - for (i = 0; sets[i]; i++) - entries_inv[entries[i].id] = i; - for (i = 0; sets[i]; i++) - printf (" %d, /* %s */\n", entries_inv[i], names[entries_inv[i]]); - } - printf ("}\n"); - - printf ("};\n\n"); - - printf ("#define NUM_LANG_CHAR_SET %d\n", i); - num_lang_set_map = (i + 31) / 32; - printf ("#define NUM_LANG_SET_MAP %d\n", num_lang_set_map); - /* - * Dump indices with country codes - */ - if (ncountry) - { - int c; - int ncountry_ent = 0; - printf ("\n"); - printf ("static const FcChar32 fcLangCountrySets[][NUM_LANG_SET_MAP] = {\n"); - for (c = 0; c < ncountry; c++) - { - i = country[c]; - if (i >= 0) - { - int lang = strchr (langs[i], '-') - langs[i]; - int d, k; - - for (k = 0; k < num_lang_set_map; k++) - map[k] = 0; - - BitSet (map, i); - for (d = c + 1; d < ncountry; d++) - { - int j = country[d]; - if (j >= 0 && !strncmp (langs[j], langs[i], lang + 1)) - { - BitSet(map, j); - country[d] = -1; - } - } - printf (" {"); - for (k = 0; k < num_lang_set_map; k++) - printf (" 0x%08x,", map[k]); - printf (" }, /* %*.*s */\n", - lang, lang, langs[i]); - ++ncountry_ent; - } - } - printf ("};\n\n"); - printf ("#define NUM_COUNTRY_SET %d\n", ncountry_ent); - } - - - /* - * Find ranges for each letter for faster searching - */ - setRangeChar = 'a'; - memset(setRangeStart, '\0', sizeof (setRangeStart)); - memset(setRangeEnd, '\0', sizeof (setRangeEnd)); - for (i = 0; sets[i]; i++) - { - char c = names[i][0]; - - while (setRangeChar <= c && c <= 'z') - setRangeStart[setRangeChar++ - 'a'] = i; - } - for (setRangeChar = 'a'; setRangeChar < 'z'; setRangeChar++) - setRangeEnd[setRangeChar - 'a'] = setRangeStart[setRangeChar+1-'a'] - 1; - setRangeEnd[setRangeChar - 'a'] = i - 1; - - /* - * Dump sets start/finish for the fastpath - */ - printf ("\n"); - printf ("static const FcLangCharSetRange fcLangCharSetRanges[] = {\n"); - printf ("\n"); - for (setRangeChar = 'a'; setRangeChar <= 'z' ; setRangeChar++) - { - printf (" { %d, %d }, /* %c */\n", - setRangeStart[setRangeChar - 'a'], - setRangeEnd[setRangeChar - 'a'], setRangeChar); - } - printf ("};\n\n"); - - while (fgets (line, sizeof (line), stdin)) - fputs (line, stdout); - - fflush (stdout); - exit (ferror (stdout)); -} +/* + * fontconfig/fc-lang/fc-lang.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fccharset.c" +#include "fcstr.c" +#include "fcserialize.c" + +/* + * fc-lang + * + * Read a set of language orthographies and build C declarations for + * charsets which can then be used to identify which languages are + * supported by a given font. Note that this uses some utilities + * from the fontconfig library, so the necessary file is simply + * included in this compilation. A couple of extra utility + * functions are also needed in slightly modified form + */ + +void +FcMemAlloc (int kind, int size) +{ +} + +void +FcMemFree (int kind, int size) +{ +} + +FcPrivate void +FcCacheObjectReference (void *object) +{ +} + +FcPrivate void +FcCacheObjectDereference (void *object) +{ +} + +int FcDebugVal; + +FcChar8 * +FcConfigHome (void) +{ + return (FcChar8 *) getenv ("HOME"); +} + +static void +fatal (const char *file, int lineno, const char *msg) +{ + if (lineno) + fprintf (stderr, "%s:%d: %s\n", file, lineno, msg); + else + fprintf (stderr, "%s: %s\n", file, msg); + exit (1); +} + +static char * +get_line (FILE *f, char *buf, int *lineno) +{ + char *hash; + char *line; + int end; + +next: + line = buf; + if (!fgets (line, 1024, f)) + return 0; + ++(*lineno); + hash = strchr (line, '#'); + if (hash) + *hash = '\0'; + + while (line[0] && isspace (line[0])) + line++; + end = strlen (line); + while (end > 0 && isspace (line[end-1])) + line[--end] = '\0'; + + if (line[0] == '\0' || line[0] == '\n' || line[0] == '\r') + goto next; + + return line; +} + +static char *dir = 0; + +static FILE * +scanopen (char *file) +{ + FILE *f; + + f = fopen (file, "r"); + if (!f && dir) + { + char path[1024]; + + strcpy (path, dir); + strcat (path, "/"); + strcat (path, file); + f = fopen (path, "r"); + } + return f; +} + +/* + * build a single charset from a source file + * + * The file format is quite simple, either + * a single hex value or a pair separated with a dash + * + * Comments begin with '#' + */ + +static FcCharSet * +scan (FILE *f, char *file, FcCharSetFreezer *freezer) +{ + FcCharSet *c = 0; + FcCharSet *n; + FcBool del; + int start, end, ucs4; + char buf[1024]; + char *line; + int lineno = 0; + + while ((line = get_line (f, buf, &lineno))) + { + if (!strncmp (line, "include", 7)) + { + FILE *included_f; + char *included_file; + included_file = strchr (line, ' '); + if (!included_file) + fatal (file, lineno, + "invalid syntax, expected: include filename"); + while (isspace(*included_file)) + included_file++; + included_f = scanopen (included_file); + if (!included_f) + fatal (included_file, 0, "can't open"); + n = scan (included_f, included_file, freezer); + fclose (included_f); + if (!c) + c = FcCharSetCreate (); + if (!FcCharSetMerge (c, n, NULL)) + fatal (file, lineno, "out of memory"); + FcCharSetDestroy (n); + continue; + } + del = FcFalse; + if (line[0] == '-') + { + del = FcTrue; + line++; + } + if (strchr (line, '-')) + { + if (sscanf (line, "%x-%x", &start, &end) != 2) + fatal (file, lineno, "parse error"); + } + else + { + if (sscanf (line, "%x", &start) != 1) + fatal (file, lineno, "parse error"); + end = start; + } + if (!c) + c = FcCharSetCreate (); + for (ucs4 = start; ucs4 <= end; ucs4++) + { + if (!((del ? FcCharSetDelChar : FcCharSetAddChar) (c, ucs4))) + fatal (file, lineno, "out of memory"); + } + } + n = (FcCharSet *) FcCharSetFreeze (freezer, c); + FcCharSetDestroy (c); + return n; +} + +/* + * Convert a file name into a name suitable for C declarations + */ +static char * +get_name (char *file) +{ + char *name; + char *dot; + + dot = strchr (file, '.'); + if (!dot) + dot = file + strlen(file); + name = malloc (dot - file + 1); + strncpy (name, file, dot - file); + name[dot-file] = '\0'; + return name; +} + +/* + * Convert a C name into a language name + */ +static char * +get_lang (char *name) +{ + char *lang = malloc (strlen (name) + 1); + char *l = lang; + char c; + + while ((c = *name++)) + { + if (isupper ((int) (unsigned char) c)) + c = tolower ((int) (unsigned char) c); + if (c == '_') + c = '-'; + if (c == ' ') + continue; + *l++ = c; + } + *l++ = '\0'; + return lang; +} + +typedef struct _Entry { + int id; + char *file; +} Entry; + +static int compare (const void *a, const void *b) +{ + const Entry *as = a, *bs = b; + return FcStrCmpIgnoreCase ((const FcChar8 *) as->file, (const FcChar8 *) bs->file); +} + +#define MAX_LANG 1024 +#define MAX_LANG_SET_MAP ((MAX_LANG + 31) / 32) + +#define BitSet(map, i) ((map)[(entries[i].id)>>5] |= ((FcChar32) 1 << ((entries[i].id) & 0x1f))) +#define BitGet(map, i) ((map)[(entries[i].id)>>5] >> ((entries[i].id) & 0x1f)) & 1) + +int +main (int argc, char **argv) +{ + static Entry entries[MAX_LANG]; + static FcCharSet *sets[MAX_LANG]; + static int duplicate[MAX_LANG]; + static int country[MAX_LANG]; + static char *names[MAX_LANG]; + static char *langs[MAX_LANG]; + static int off[MAX_LANG]; + FILE *f; + int ncountry = 0; + int i = 0; + int nsets = 0; + int argi; + FcCharLeaf **leaves; + int total_leaves = 0; + int l, sl, tl, tn; + static char line[1024]; + static FcChar32 map[MAX_LANG_SET_MAP]; + int num_lang_set_map; + int setRangeStart[26]; + int setRangeEnd[26]; + FcChar8 setRangeChar; + FcCharSetFreezer *freezer; + + freezer = FcCharSetFreezerCreate (); + if (!freezer) + fatal (argv[0], 0, "out of memory"); + argi = 1; + while (argv[argi]) + { + if (!strcmp (argv[argi], "-d")) + { + argi++; + dir = argv[argi++]; + continue; + } + if (i == MAX_LANG) + fatal (argv[0], 0, "Too many languages"); + entries[i].id = i; + entries[i].file = argv[argi++]; + i++; + } + entries[i].file = 0; + qsort (entries, i, sizeof (Entry), compare); + i = 0; + while (entries[i].file) + { + f = scanopen (entries[i].file); + if (!f) + fatal (entries[i].file, 0, strerror (errno)); + sets[i] = scan (f, entries[i].file, freezer); + names[i] = get_name (entries[i].file); + langs[i] = get_lang(names[i]); + if (strchr (langs[i], '-')) + country[ncountry++] = i; + + total_leaves += sets[i]->num; + i++; + fclose (f); + } + nsets = i; + sets[i] = 0; + leaves = malloc (total_leaves * sizeof (FcCharLeaf *)); + tl = 0; + /* + * Find unique leaves + */ + for (i = 0; sets[i]; i++) + { + for (sl = 0; sl < sets[i]->num; sl++) + { + for (l = 0; l < tl; l++) + if (leaves[l] == FcCharSetLeaf(sets[i], sl)) + break; + if (l == tl) + leaves[tl++] = FcCharSetLeaf(sets[i], sl); + } + } + + /* + * Scan the input until the marker is found + */ + + while (fgets (line, sizeof (line), stdin)) + { + if (!strncmp (line, "@@@", 3)) + break; + fputs (line, stdout); + } + + printf ("/* total size: %d unique leaves: %d */\n\n", + total_leaves, tl); + + /* + * Find duplicate charsets + */ + duplicate[0] = -1; + for (i = 1; sets[i]; i++) + { + int j; + + duplicate[i] = -1; + for (j = 0; j < i; j++) + if (sets[j] == sets[i]) + { + duplicate[i] = j; + break; + } + } + + tn = 0; + for (i = 0; sets[i]; i++) { + if (duplicate[i] >= 0) + continue; + off[i] = tn; + tn += sets[i]->num; + } + + printf ("#define LEAF0 (%d * sizeof (FcLangCharSet))\n", nsets); + printf ("#define OFF0 (LEAF0 + %d * sizeof (FcCharLeaf))\n", tl); + printf ("#define NUM0 (OFF0 + %d * sizeof (uintptr_t))\n", tn); + printf ("#define SET(n) (n * sizeof (FcLangCharSet) + offsetof (FcLangCharSet, charset))\n"); + printf ("#define OFF(s,o) (OFF0 + o * sizeof (uintptr_t) - SET(s))\n"); + printf ("#define NUM(s,n) (NUM0 + n * sizeof (FcChar16) - SET(s))\n"); + printf ("#define LEAF(o,l) (LEAF0 + l * sizeof (FcCharLeaf) - (OFF0 + o * sizeof (intptr_t)))\n"); + printf ("#define fcLangCharSets (fcLangData.langCharSets)\n"); + printf ("#define fcLangCharSetIndices (fcLangData.langIndices)\n"); + printf ("#define fcLangCharSetIndicesInv (fcLangData.langIndicesInv)\n"); + printf ("\n"); + + printf ("static const struct {\n" + " FcLangCharSet langCharSets[%d];\n" + " FcCharLeaf leaves[%d];\n" + " uintptr_t leaf_offsets[%d];\n" + " FcChar16 numbers[%d];\n" + " FcChar%s langIndices[%d];\n" + " FcChar%s langIndicesInv[%d];\n" + "} fcLangData = {\n", + nsets, tl, tn, tn, + nsets < 256 ? "8 " : "16", nsets, nsets < 256 ? "8 " : "16", nsets); + + /* + * Dump sets + */ + + printf ("{\n"); + for (i = 0; sets[i]; i++) + { + int j = duplicate[i]; + + if (j < 0) + j = i; + + printf (" { \"%s\", " + " { FC_REF_CONSTANT, %d, OFF(%d,%d), NUM(%d,%d) } }, /* %d */\n", + langs[i], + sets[j]->num, i, off[j], i, off[j], i); + } + printf ("},\n"); + + /* + * Dump leaves + */ + printf ("{\n"); + for (l = 0; l < tl; l++) + { + printf (" { { /* %d */", l); + for (i = 0; i < 256/32; i++) + { + if (i % 4 == 0) + printf ("\n "); + printf (" 0x%08x,", leaves[l]->map[i]); + } + printf ("\n } },\n"); + } + printf ("},\n"); + + /* + * Dump leaves + */ + printf ("{\n"); + for (i = 0; sets[i]; i++) + { + int n; + + if (duplicate[i] >= 0) + continue; + printf (" /* %s */\n", names[i]); + for (n = 0; n < sets[i]->num; n++) + { + if (n % 4 == 0) + printf (" "); + for (l = 0; l < tl; l++) + if (leaves[l] == FcCharSetLeaf(sets[i], n)) + break; + if (l == tl) + fatal (names[i], 0, "can't find leaf"); + printf (" LEAF(%3d,%3d),", off[i], l); + if (n % 4 == 3) + printf ("\n"); + } + if (n % 4 != 0) + printf ("\n"); + } + printf ("},\n"); + + + printf ("{\n"); + for (i = 0; sets[i]; i++) + { + int n; + + if (duplicate[i] >= 0) + continue; + printf (" /* %s */\n", names[i]); + for (n = 0; n < sets[i]->num; n++) + { + if (n % 8 == 0) + printf (" "); + printf (" 0x%04x,", FcCharSetNumbers (sets[i])[n]); + if (n % 8 == 7) + printf ("\n"); + } + if (n % 8 != 0) + printf ("\n"); + } + printf ("},\n"); + + /* langIndices */ + printf ("{\n"); + for (i = 0; sets[i]; i++) + { + printf (" %d, /* %s */\n", entries[i].id, names[i]); + } + printf ("},\n"); + + /* langIndicesInv */ + printf ("{\n"); + { + static int entries_inv[MAX_LANG]; + for (i = 0; sets[i]; i++) + entries_inv[entries[i].id] = i; + for (i = 0; sets[i]; i++) + printf (" %d, /* %s */\n", entries_inv[i], names[entries_inv[i]]); + } + printf ("}\n"); + + printf ("};\n\n"); + + printf ("#define NUM_LANG_CHAR_SET %d\n", i); + num_lang_set_map = (i + 31) / 32; + printf ("#define NUM_LANG_SET_MAP %d\n", num_lang_set_map); + /* + * Dump indices with country codes + */ + if (ncountry) + { + int c; + int ncountry_ent = 0; + printf ("\n"); + printf ("static const FcChar32 fcLangCountrySets[][NUM_LANG_SET_MAP] = {\n"); + for (c = 0; c < ncountry; c++) + { + i = country[c]; + if (i >= 0) + { + int lang = strchr (langs[i], '-') - langs[i]; + int d, k; + + for (k = 0; k < num_lang_set_map; k++) + map[k] = 0; + + BitSet (map, i); + for (d = c + 1; d < ncountry; d++) + { + int j = country[d]; + if (j >= 0 && !strncmp (langs[j], langs[i], lang + 1)) + { + BitSet(map, j); + country[d] = -1; + } + } + printf (" {"); + for (k = 0; k < num_lang_set_map; k++) + printf (" 0x%08x,", map[k]); + printf (" }, /* %*.*s */\n", + lang, lang, langs[i]); + ++ncountry_ent; + } + } + printf ("};\n\n"); + printf ("#define NUM_COUNTRY_SET %d\n", ncountry_ent); + } + + + /* + * Find ranges for each letter for faster searching + */ + setRangeChar = 'a'; + memset(setRangeStart, '\0', sizeof (setRangeStart)); + memset(setRangeEnd, '\0', sizeof (setRangeEnd)); + for (i = 0; sets[i]; i++) + { + char c = names[i][0]; + + while (setRangeChar <= c && c <= 'z') + setRangeStart[setRangeChar++ - 'a'] = i; + } + for (setRangeChar = 'a'; setRangeChar < 'z'; setRangeChar++) + setRangeEnd[setRangeChar - 'a'] = setRangeStart[setRangeChar+1-'a'] - 1; + setRangeEnd[setRangeChar - 'a'] = i - 1; + + /* + * Dump sets start/finish for the fastpath + */ + printf ("\n"); + printf ("static const FcLangCharSetRange fcLangCharSetRanges[] = {\n"); + printf ("\n"); + for (setRangeChar = 'a'; setRangeChar <= 'z' ; setRangeChar++) + { + printf (" { %d, %d }, /* %c */\n", + setRangeStart[setRangeChar - 'a'], + setRangeEnd[setRangeChar - 'a'], setRangeChar); + } + printf ("};\n\n"); + + while (fgets (line, sizeof (line), stdin)) + fputs (line, stdout); + + fflush (stdout); + exit (ferror (stdout)); +} diff --git a/fontconfig/fc-lang/fc-lang.man b/fontconfig/fc-lang/fc-lang.man index 2e8774935..f520c5115 100644 --- a/fontconfig/fc-lang/fc-lang.man +++ b/fontconfig/fc-lang/fc-lang.man @@ -1,39 +1,39 @@ -.\" -.\" Copyright © 2002 Keith Packard -.\" -.\" Permission to use, copy, modify, distribute, and sell this software and its -.\" documentation for any purpose is hereby granted without fee, provided that -.\" the above copyright notice appear in all copies and that both that -.\" copyright notice and this permission notice appear in supporting -.\" documentation, and that the name of the author(s) not be used in -.\" advertising or publicity pertaining to distribution of the software without -.\" specific, written prior permission. The authors make no -.\" representations about the suitability of this software for any purpose. It -.\" is provided "as is" without express or implied warranty. -.\" -.\" THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -.\" EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -.\" PERFORMANCE OF THIS SOFTWARE. -.\" -.\" -.\" fontconfig/fc-lang/fc-lang.man -.\" -.TH FC-LANG 1 __vendorversion__ -.SH NAME -fc-lang, fclang.h \- create an database of language orthographies -.SH SYNOPSIS -.B "fc-lang" -.RI [ language-coverage -\|.\|.\|. ] -.SH DESCRIPTION -.I Fc-lang -builds the fclang.h file used in the fontconfig library to automatically -determine language coverage for fonts which don't contain this information. -.SH FILES -.TP 15 -.B fclang.tmpl.h -The template file in which the tables are inserted +.\" +.\" Copyright © 2002 Keith Packard +.\" +.\" Permission to use, copy, modify, distribute, and sell this software and its +.\" documentation for any purpose is hereby granted without fee, provided that +.\" the above copyright notice appear in all copies and that both that +.\" copyright notice and this permission notice appear in supporting +.\" documentation, and that the name of the author(s) not be used in +.\" advertising or publicity pertaining to distribution of the software without +.\" specific, written prior permission. The authors make no +.\" representations about the suitability of this software for any purpose. It +.\" is provided "as is" without express or implied warranty. +.\" +.\" THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +.\" EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +.\" CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +.\" DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +.\" TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +.\" PERFORMANCE OF THIS SOFTWARE. +.\" +.\" +.\" fontconfig/fc-lang/fc-lang.man +.\" +.TH FC-LANG 1 __vendorversion__ +.SH NAME +fc-lang, fclang.h \- create an database of language orthographies +.SH SYNOPSIS +.B "fc-lang" +.RI [ language-coverage +\|.\|.\|. ] +.SH DESCRIPTION +.I Fc-lang +builds the fclang.h file used in the fontconfig library to automatically +determine language coverage for fonts which don't contain this information. +.SH FILES +.TP 15 +.B fclang.tmpl.h +The template file in which the tables are inserted diff --git a/fontconfig/fc-lang/fclang.tmpl.h b/fontconfig/fc-lang/fclang.tmpl.h index 946537bd7..605614870 100644 --- a/fontconfig/fc-lang/fclang.tmpl.h +++ b/fontconfig/fc-lang/fclang.tmpl.h @@ -1,25 +1,25 @@ -/* - * fontconfig/fc-lang/fclang.tmpl.h - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -@@@ +/* + * fontconfig/fc-lang/fclang.tmpl.h + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +@@@ diff --git a/fontconfig/fc-lang/ff.orth b/fontconfig/fc-lang/ff.orth index 05a12ffa0..bed81aeed 100644 --- a/fontconfig/fc-lang/ff.orth +++ b/fontconfig/fc-lang/ff.orth @@ -1,38 +1,38 @@ -# -# fontconfig/fc-lang/ff.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Fulah (Fula) (ff) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0181 -0253 -018a -0257 -014a -014b -019d -0272 -01b3-01b4 +# +# fontconfig/fc-lang/ff.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Fulah (Fula) (ff) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0181 +0253 +018a +0257 +014a +014b +019d +0272 +01b3-01b4 diff --git a/fontconfig/fc-lang/fi.orth b/fontconfig/fc-lang/fi.orth index eb3cd02e3..c0e19d99e 100644 --- a/fontconfig/fc-lang/fi.orth +++ b/fontconfig/fc-lang/fi.orth @@ -1,51 +1,51 @@ -# -# fontconfig/fc-lang/fi.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Finnish (FI) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * -00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS -00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE -#00C6 # LATIN CAPITAL LETTER AE (ash) * evertype.com -#00D5 # LATIN CAPITAL LETTER O WITH TILDE evertype.com -00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS -#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com -00E4 # LATIN SMALL LETTER A WITH DIAERESIS -00E5 # LATIN SMALL LETTER A WITH RING ABOVE -#00E6 # LATIN SMALL LETTER AE (ash) * evertype.com -#00F5 # LATIN SMALL LETTER O WITH TILDE evertype.com -00F6 # LATIN SMALL LETTER O WITH DIAERESIS -#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com -0160 # LATIN CAPITAL LETTER S WITH CARON -0161 # LATIN SMALL LETTER S WITH CARON -017D # LATIN CAPITAL LETTER Z WITH CARON -017E # LATIN SMALL LETTER Z WITH CARON -#2019 # single quote -#201d # double quote -#203a # angle quote +# +# fontconfig/fc-lang/fi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Finnish (FI) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00BB # RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK * +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE +#00C6 # LATIN CAPITAL LETTER AE (ash) * evertype.com +#00D5 # LATIN CAPITAL LETTER O WITH TILDE evertype.com +00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00E5 # LATIN SMALL LETTER A WITH RING ABOVE +#00E6 # LATIN SMALL LETTER AE (ash) * evertype.com +#00F5 # LATIN SMALL LETTER O WITH TILDE evertype.com +00F6 # LATIN SMALL LETTER O WITH DIAERESIS +#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com +0160 # LATIN CAPITAL LETTER S WITH CARON +0161 # LATIN SMALL LETTER S WITH CARON +017D # LATIN CAPITAL LETTER Z WITH CARON +017E # LATIN SMALL LETTER Z WITH CARON +#2019 # single quote +#201d # double quote +#203a # angle quote diff --git a/fontconfig/fc-lang/fj.orth b/fontconfig/fc-lang/fj.orth index a0e40d4ba..07f2f518d 100644 --- a/fontconfig/fc-lang/fj.orth +++ b/fontconfig/fc-lang/fj.orth @@ -1,34 +1,34 @@ -# -# fontconfig/fc-lang/fj.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Fijian (KW) -# -# Orthography guessed from http://www.deeptrans.com/deeptrans/german.html -# -# There may be diacritical marks used, but I couldn't find any information -# about them, nor any Fijian text using them. -# -# Fijian doesn't use h, x, z and uses f, j and p in loan words -# -0041-005a -0061-007a +# +# fontconfig/fc-lang/fj.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Fijian (KW) +# +# Orthography guessed from http://www.deeptrans.com/deeptrans/german.html +# +# There may be diacritical marks used, but I couldn't find any information +# about them, nor any Fijian text using them. +# +# Fijian doesn't use h, x, z and uses f, j and p in loan words +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/fo.orth b/fontconfig/fc-lang/fo.orth index 6bf70af76..d4b055b36 100644 --- a/fontconfig/fc-lang/fo.orth +++ b/fontconfig/fc-lang/fo.orth @@ -1,59 +1,59 @@ -# -# fontconfig/fc-lang/fo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Faroese (FO) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00C1 # LATIN CAPITAL LETTER A WITH ACUTE -#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com -#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com -00C6 # LATIN CAPITAL LETTER AE (ash) * -00CD # LATIN CAPITAL LETTER I WITH ACUTE -00D0 # LATIN CAPITAL LETTER ETH (Icelandic) -00D3 # LATIN CAPITAL LETTER O WITH ACUTE -#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com -00D8 # LATIN CAPITAL LETTER O WITH STROKE -00DA # LATIN CAPITAL LETTER U WITH ACUTE -#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com -00DD # LATIN CAPITAL LETTER Y WITH ACUTE -00E1 # LATIN SMALL LETTER A WITH ACUTE -#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com -#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com -00E6 # LATIN SMALL LETTER AE (ash) * -00ED # LATIN SMALL LETTER I WITH ACUTE -00F0 # LATIN SMALL LETTER ETH (Icelandic) -00F3 # LATIN SMALL LETTER O WITH ACUTE -#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com -00F8 # LATIN SMALL LETTER O WITH STROKE -00FA # LATIN SMALL LETTER U WITH ACUTE -#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com -00FD # LATIN SMALL LETTER Y WITH ACUTE -#2018 # single quote -#201a # single quote -#201c # double quote -#201e # double quote +# +# fontconfig/fc-lang/fo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Faroese (FO) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com +#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com +00C6 # LATIN CAPITAL LETTER AE (ash) * +00CD # LATIN CAPITAL LETTER I WITH ACUTE +00D0 # LATIN CAPITAL LETTER ETH (Icelandic) +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS evertype.com +00D8 # LATIN CAPITAL LETTER O WITH STROKE +00DA # LATIN CAPITAL LETTER U WITH ACUTE +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com +00DD # LATIN CAPITAL LETTER Y WITH ACUTE +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com +#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com +00E6 # LATIN SMALL LETTER AE (ash) * +00ED # LATIN SMALL LETTER I WITH ACUTE +00F0 # LATIN SMALL LETTER ETH (Icelandic) +00F3 # LATIN SMALL LETTER O WITH ACUTE +#00F6 # LATIN SMALL LETTER O WITH DIAERESIS evertype.com +00F8 # LATIN SMALL LETTER O WITH STROKE +00FA # LATIN SMALL LETTER U WITH ACUTE +#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com +00FD # LATIN SMALL LETTER Y WITH ACUTE +#2018 # single quote +#201a # single quote +#201c # double quote +#201e # double quote diff --git a/fontconfig/fc-lang/fr.orth b/fontconfig/fc-lang/fr.orth index e5eb4495f..6e88ff927 100644 --- a/fontconfig/fc-lang/fr.orth +++ b/fontconfig/fc-lang/fr.orth @@ -1,58 +1,58 @@ -# -# fontconfig/fc-lang/fr.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# French (FR) -0041-005a -0061-007a -00C0 # LATIN CAPITAL LETTER A WITH GRAVE -00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX -00E0 # LATIN SMALL LETTER A WITH GRAVE -00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX -00C7 # LATIN CAPITAL LETTER C WITH CEDILLA -00E7 # LATIN SMALL LETTER C WITH CEDILLA -00C8 # LATIN CAPITAL LETTER E WITH GRAVE -00E8 # LATIN SMALL LETTER E WITH GRAVE -00C9 # LATIN CAPITAL LETTER E WITH ACUTE -00E9 # LATIN SMALL LETTER E WITH ACUTE -00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX -00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX -00CB # LATIN CAPITAL LETTER E WITH DIAERESIS -00EB # LATIN SMALL LETTER E WITH DIAERESIS -00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX -00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX -00CF # LATIN CAPITAL LETTER I WITH DIAERESIS -00EF # LATIN SMALL LETTER I WITH DIAERESIS -00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX -00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX -0152 # LATIN CAPITAL LIGATURE OE -0153 # LATIN SMALL LIGATURE OE -00D9 # LATIN CAPITAL LETTER U WITH GRAVE -00F9 # LATIN SMALL LETTER U WITH GRAVE -00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX -00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX -00DC # LATIN CAPITAL LETTER U WITH DIAERESIS -00FC # LATIN SMALL LETTER U WITH DIAERESIS -0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS -00FF # LATIN SMALL LETTER Y WITH DIAERESIS -00C6 # LATIN CAPITAL LETTER AE (ash) * -00E6 # LATIN SMALL LETTER AE (ash) * +# +# fontconfig/fc-lang/fr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# French (FR) +0041-005a +0061-007a +00C0 # LATIN CAPITAL LETTER A WITH GRAVE +00C2 # LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00E0 # LATIN SMALL LETTER A WITH GRAVE +00E2 # LATIN SMALL LETTER A WITH CIRCUMFLEX +00C7 # LATIN CAPITAL LETTER C WITH CEDILLA +00E7 # LATIN SMALL LETTER C WITH CEDILLA +00C8 # LATIN CAPITAL LETTER E WITH GRAVE +00E8 # LATIN SMALL LETTER E WITH GRAVE +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +00E9 # LATIN SMALL LETTER E WITH ACUTE +00CA # LATIN CAPITAL LETTER E WITH CIRCUMFLEX +00EA # LATIN SMALL LETTER E WITH CIRCUMFLEX +00CB # LATIN CAPITAL LETTER E WITH DIAERESIS +00EB # LATIN SMALL LETTER E WITH DIAERESIS +00CE # LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00EE # LATIN SMALL LETTER I WITH CIRCUMFLEX +00CF # LATIN CAPITAL LETTER I WITH DIAERESIS +00EF # LATIN SMALL LETTER I WITH DIAERESIS +00D4 # LATIN CAPITAL LETTER O WITH CIRCUMFLEX +00F4 # LATIN SMALL LETTER O WITH CIRCUMFLEX +0152 # LATIN CAPITAL LIGATURE OE +0153 # LATIN SMALL LIGATURE OE +00D9 # LATIN CAPITAL LETTER U WITH GRAVE +00F9 # LATIN SMALL LETTER U WITH GRAVE +00DB # LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00FB # LATIN SMALL LETTER U WITH CIRCUMFLEX +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00FC # LATIN SMALL LETTER U WITH DIAERESIS +0178 # LATIN CAPITAL LETTER Y WITH DIAERESIS +00FF # LATIN SMALL LETTER Y WITH DIAERESIS +00C6 # LATIN CAPITAL LETTER AE (ash) * +00E6 # LATIN SMALL LETTER AE (ash) * diff --git a/fontconfig/fc-lang/fur.orth b/fontconfig/fc-lang/fur.orth index fa3e76a83..bf47ccd44 100644 --- a/fontconfig/fc-lang/fur.orth +++ b/fontconfig/fc-lang/fur.orth @@ -1,39 +1,39 @@ -# -# fontconfig/fc-lang/fur.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Friulian (FUR) -# -# Orthography from http://www.evertype.com/alphabets/friulian.pdf -# -0041-005a -0061-007a -00c0-00c2 -00c8 -00cc -00d2 -00d9 -00e0-00e2 -00e8 -00ec -00f2 -00f9 +# +# fontconfig/fc-lang/fur.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Friulian (FUR) +# +# Orthography from http://www.evertype.com/alphabets/friulian.pdf +# +0041-005a +0061-007a +00c0-00c2 +00c8 +00cc +00d2 +00d9 +00e0-00e2 +00e8 +00ec +00f2 +00f9 diff --git a/fontconfig/fc-lang/fy.orth b/fontconfig/fc-lang/fy.orth index a853f4111..b75112e62 100644 --- a/fontconfig/fc-lang/fy.orth +++ b/fontconfig/fc-lang/fy.orth @@ -1,61 +1,61 @@ -# -# fontconfig/fc-lang/fy.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Frisian (FY) -# -# West Frisian orthography from -# http://www.evertype.com/alphabets/west-frisian.pdf -# -# -# Checked with orthography from eki.ee/letter which include -# a few others (commented out here). -# -# Added in ß from German orthography -# -0041-005a -0061-007a -00c2 -00c4 -00c9 -00ca -00cb -#00ce # eki.ee -00cf -00d4 -00d6 -00da -00db -00dc -00df -00e2 -00e4 -00e9 -00ea -00eb -#00ee # eki.ee -00ef -00f4 -00f6 -00fa -00fb -00fc +# +# fontconfig/fc-lang/fy.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Frisian (FY) +# +# West Frisian orthography from +# http://www.evertype.com/alphabets/west-frisian.pdf +# +# +# Checked with orthography from eki.ee/letter which include +# a few others (commented out here). +# +# Added in ß from German orthography +# +0041-005a +0061-007a +00c2 +00c4 +00c9 +00ca +00cb +#00ce # eki.ee +00cf +00d4 +00d6 +00da +00db +00dc +00df +00e2 +00e4 +00e9 +00ea +00eb +#00ee # eki.ee +00ef +00f4 +00f6 +00fa +00fb +00fc diff --git a/fontconfig/fc-lang/ga.orth b/fontconfig/fc-lang/ga.orth index 4c3798c49..57fa7f5d3 100644 --- a/fontconfig/fc-lang/ga.orth +++ b/fontconfig/fc-lang/ga.orth @@ -1,84 +1,84 @@ -# -# fontconfig/fc-lang/ga.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Irish (GA) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -# The orthography from evertype.com includes the lenited consonants -# as indicated with seimhiu (dot above). I've included those here -# even though they're not present in the orthography listed from eki.ee; -# eki.ee mentions that the seimhiu form is still written but is -# often written by a following h instead. -# -0041-005a -0061-007a -#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com -00C1 # LATIN CAPITAL LETTER A WITH ACUTE -#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA evertype.com -#00C8 # LATIN CAPITAL LETTER E WITH GRAVE evertype.com -00C9 # LATIN CAPITAL LETTER E WITH ACUTE -#00CC # LATIN CAPITAL LETTER I WITH GRAVE evertype.com -00CD # LATIN CAPITAL LETTER I WITH ACUTE -#00D2 # LATIN CAPITAL LETTER O WITH GRAVE evertype.com -00D3 # LATIN CAPITAL LETTER O WITH ACUTE -#00D9 # LATIN CAPITAL LETTER U WITH GRAVE evertype.com -00DA # LATIN CAPITAL LETTER U WITH ACUTE -#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com -00E1 # LATIN SMALL LETTER A WITH ACUTE -#00E7 # LATIN SMALL LETTER C WITH CEDILLA evertype.com -#00E8 # LATIN SMALL LETTER E WITH GRAVE evertype.com -00E9 # LATIN SMALL LETTER E WITH ACUTE -#00EC # LATIN SMALL LETTER I WITH GRAVE -00ED # LATIN SMALL LETTER I WITH ACUTE -#00F2 # LATIN SMALL LETTER O WITH GRAVE evertype.com -00F3 # LATIN SMALL LETTER O WITH ACUTE -#00F9 # LATIN SMALL LETTER U WITH GRAVE evertype.com -00FA # LATIN SMALL LETTER U WITH ACUTE -010A # LATIN CAPITAL LETTER C WITH DOT ABOVE -010B # LATIN SMALL LETTER C WITH DOT ABOVE -0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE -0121 # LATIN SMALL LETTER G WITH DOT ABOVE -#017F # LATIN SMALL LETTER LONG S evertype.com -#027C # LATIN SMALL LETTER R WITH LONG LEG evertype.com -1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE -1E03 # LATIN SMALL LETTER B WITH DOT ABOVE -1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE -1E0B # LATIN SMALL LETTER D WITH DOT ABOVE -1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE -1E1F # LATIN SMALL LETTER F WITH DOT ABOVE -1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE -1E41 # LATIN SMALL LETTER M WITH DOT ABOVE -1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE -1E57 # LATIN SMALL LETTER P WITH DOT ABOVE -1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE -1E61 # LATIN SMALL LETTER S WITH DOT ABOVE -1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE -1E6B # LATIN SMALL LETTER T WITH DOT ABOVE -#1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE evertype.com -#1680-169c # Ogham -#2018-2019 # single quotes -#201c-201d # double quotes -#204a # tironian sign et +# +# fontconfig/fc-lang/ga.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Irish (GA) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +# The orthography from evertype.com includes the lenited consonants +# as indicated with seimhiu (dot above). I've included those here +# even though they're not present in the orthography listed from eki.ee; +# eki.ee mentions that the seimhiu form is still written but is +# often written by a following h instead. +# +0041-005a +0061-007a +#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com +00C1 # LATIN CAPITAL LETTER A WITH ACUTE +#00C7 # LATIN CAPITAL LETTER C WITH CEDILLA evertype.com +#00C8 # LATIN CAPITAL LETTER E WITH GRAVE evertype.com +00C9 # LATIN CAPITAL LETTER E WITH ACUTE +#00CC # LATIN CAPITAL LETTER I WITH GRAVE evertype.com +00CD # LATIN CAPITAL LETTER I WITH ACUTE +#00D2 # LATIN CAPITAL LETTER O WITH GRAVE evertype.com +00D3 # LATIN CAPITAL LETTER O WITH ACUTE +#00D9 # LATIN CAPITAL LETTER U WITH GRAVE evertype.com +00DA # LATIN CAPITAL LETTER U WITH ACUTE +#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com +00E1 # LATIN SMALL LETTER A WITH ACUTE +#00E7 # LATIN SMALL LETTER C WITH CEDILLA evertype.com +#00E8 # LATIN SMALL LETTER E WITH GRAVE evertype.com +00E9 # LATIN SMALL LETTER E WITH ACUTE +#00EC # LATIN SMALL LETTER I WITH GRAVE +00ED # LATIN SMALL LETTER I WITH ACUTE +#00F2 # LATIN SMALL LETTER O WITH GRAVE evertype.com +00F3 # LATIN SMALL LETTER O WITH ACUTE +#00F9 # LATIN SMALL LETTER U WITH GRAVE evertype.com +00FA # LATIN SMALL LETTER U WITH ACUTE +010A # LATIN CAPITAL LETTER C WITH DOT ABOVE +010B # LATIN SMALL LETTER C WITH DOT ABOVE +0120 # LATIN CAPITAL LETTER G WITH DOT ABOVE +0121 # LATIN SMALL LETTER G WITH DOT ABOVE +#017F # LATIN SMALL LETTER LONG S evertype.com +#027C # LATIN SMALL LETTER R WITH LONG LEG evertype.com +1E02 # LATIN CAPITAL LETTER B WITH DOT ABOVE +1E03 # LATIN SMALL LETTER B WITH DOT ABOVE +1E0A # LATIN CAPITAL LETTER D WITH DOT ABOVE +1E0B # LATIN SMALL LETTER D WITH DOT ABOVE +1E1E # LATIN CAPITAL LETTER F WITH DOT ABOVE +1E1F # LATIN SMALL LETTER F WITH DOT ABOVE +1E40 # LATIN CAPITAL LETTER M WITH DOT ABOVE +1E41 # LATIN SMALL LETTER M WITH DOT ABOVE +1E56 # LATIN CAPITAL LETTER P WITH DOT ABOVE +1E57 # LATIN SMALL LETTER P WITH DOT ABOVE +1E60 # LATIN CAPITAL LETTER S WITH DOT ABOVE +1E61 # LATIN SMALL LETTER S WITH DOT ABOVE +1E6A # LATIN CAPITAL LETTER T WITH DOT ABOVE +1E6B # LATIN SMALL LETTER T WITH DOT ABOVE +#1E9B # LATIN SMALL LETTER LONG S WITH DOT ABOVE evertype.com +#1680-169c # Ogham +#2018-2019 # single quotes +#201c-201d # double quotes +#204a # tironian sign et diff --git a/fontconfig/fc-lang/gd.orth b/fontconfig/fc-lang/gd.orth index e5b90fc56..035a3df04 100644 --- a/fontconfig/fc-lang/gd.orth +++ b/fontconfig/fc-lang/gd.orth @@ -1,51 +1,51 @@ -# -# fontconfig/fc-lang/gd.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Scots Gaelic (GD) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c0 -00c1 -00c7 -00c8 -00c9 -00cc -00d2 -00d3 -00d9 -00e0 -00e1 -00e7 -00e8 -00e9 -00ec -00f2 -00f3 -00f9 -#2018-2019 # single quotes -#201c-201d # double quotes +# +# fontconfig/fc-lang/gd.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Scots Gaelic (GD) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00c1 +00c7 +00c8 +00c9 +00cc +00d2 +00d3 +00d9 +00e0 +00e1 +00e7 +00e8 +00e9 +00ec +00f2 +00f3 +00f9 +#2018-2019 # single quotes +#201c-201d # double quotes diff --git a/fontconfig/fc-lang/gez.orth b/fontconfig/fc-lang/gez.orth index 88cadfecb..70c369485 100644 --- a/fontconfig/fc-lang/gez.orth +++ b/fontconfig/fc-lang/gez.orth @@ -1,60 +1,60 @@ -# -# fontconfig/fc-lang/gez.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Ethiopic (Geez) (eth) -# -# Taken from Unicode coverage (1200-137f) -# -# Sylables -1200-1206 # he-ho -1208-1216 # le-Ho, skip HWa -1218-1226 # me-`so, skip `sWa -1228-1230 # re-sWa -1238-1246 # re-qo -1248 # qWe -124a-124d # qWi-qW -1260-1267 # be-bWa -1270-1277 # te-to -1280-1286 # `he-`ho -1288 # hWe -128a-128d # hWi-hW -1290-1297 # ne-nWa -12a0-12a7 # a-o, skip ea -12a8-12ae # ke-ko -12b0 # kWe -12b2-12b5 # kWi-kW -12c8-12ce # we-wo -12d0-12d6 # `e-`o -12d8-12df # ze-zWa -12e8-12ee # ye-yo -12f0-12f7 # de-dWa -1308-130e # ge-go -1310 # gWe -1312-1315 # gWi-gW -1320-1328 # Te-TWa -1330-1346 # Pe-`So -1348-1356 # fe-po, skip pWa, rYa, mYa, fYa -#1361-1368 # punctuation -#1369-1371 # digits -#1372-137c # numbers -# +# +# fontconfig/fc-lang/gez.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Ethiopic (Geez) (eth) +# +# Taken from Unicode coverage (1200-137f) +# +# Sylables +1200-1206 # he-ho +1208-1216 # le-Ho, skip HWa +1218-1226 # me-`so, skip `sWa +1228-1230 # re-sWa +1238-1246 # re-qo +1248 # qWe +124a-124d # qWi-qW +1260-1267 # be-bWa +1270-1277 # te-to +1280-1286 # `he-`ho +1288 # hWe +128a-128d # hWi-hW +1290-1297 # ne-nWa +12a0-12a7 # a-o, skip ea +12a8-12ae # ke-ko +12b0 # kWe +12b2-12b5 # kWi-kW +12c8-12ce # we-wo +12d0-12d6 # `e-`o +12d8-12df # ze-zWa +12e8-12ee # ye-yo +12f0-12f7 # de-dWa +1308-130e # ge-go +1310 # gWe +1312-1315 # gWi-gW +1320-1328 # Te-TWa +1330-1346 # Pe-`So +1348-1356 # fe-po, skip pWa, rYa, mYa, fYa +#1361-1368 # punctuation +#1369-1371 # digits +#1372-137c # numbers +# diff --git a/fontconfig/fc-lang/gl.orth b/fontconfig/fc-lang/gl.orth index 364f0f2c2..5617088a3 100644 --- a/fontconfig/fc-lang/gl.orth +++ b/fontconfig/fc-lang/gl.orth @@ -1,50 +1,50 @@ -# -# fontconfig/fc-lang/gl.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Galician (GL) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00a1 -#00ab -#00bb -#00bf -00c1 -00c9 -00cd -00d1 -00d3 -00da -00dc -00e1 -00e9 -00ed -00f1 -00f3 -00fa -00fc -#2019-201a # single qutoes +# +# fontconfig/fc-lang/gl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Galician (GL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00a1 +#00ab +#00bb +#00bf +00c1 +00c9 +00cd +00d1 +00d3 +00da +00dc +00e1 +00e9 +00ed +00f1 +00f3 +00fa +00fc +#2019-201a # single qutoes diff --git a/fontconfig/fc-lang/gn.orth b/fontconfig/fc-lang/gn.orth index d9fca71c4..644ab9330 100644 --- a/fontconfig/fc-lang/gn.orth +++ b/fontconfig/fc-lang/gn.orth @@ -1,48 +1,48 @@ -# -# fontconfig/fc-lang/gn.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Guaraní (GN) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c1 -00e1 -00e3 -00c9 -00e9 -1ebd -#e005 # LATIN SMALL LETTER G WITH TILDE (no UCS) -00cd -00ed -0129 -00d1 -00f1 -00d3 -00f3 -00f5 -00da -00fa -0169 -1ef9 +# +# fontconfig/fc-lang/gn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Guaraní (GN) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +00e3 +00c9 +00e9 +1ebd +#e005 # LATIN SMALL LETTER G WITH TILDE (no UCS) +00cd +00ed +0129 +00d1 +00f1 +00d3 +00f3 +00f5 +00da +00fa +0169 +1ef9 diff --git a/fontconfig/fc-lang/gu.orth b/fontconfig/fc-lang/gu.orth index 48d6d8af5..5e556ce12 100644 --- a/fontconfig/fc-lang/gu.orth +++ b/fontconfig/fc-lang/gu.orth @@ -1,41 +1,41 @@ -# -# fontconfig/fc-lang/gu.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Gujarati (gu) -# -# Taken from the Unicode coverage of this language -# -0a81-0a83 -0a85-0a8b -0a8d -0a8f-0a91 -0a93-0aa8 -0aaa-0ab0 -0ab2-0ab3 -0ab5-0ab9 -0abc-0ac5 -0ac7-0ac9 -0acb-0acd -0ad0 -0ae0 -#0ae6-0aef # Digits +# +# fontconfig/fc-lang/gu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Gujarati (gu) +# +# Taken from the Unicode coverage of this language +# +0a81-0a83 +0a85-0a8b +0a8d +0a8f-0a91 +0a93-0aa8 +0aaa-0ab0 +0ab2-0ab3 +0ab5-0ab9 +0abc-0ac5 +0ac7-0ac9 +0acb-0acd +0ad0 +0ae0 +#0ae6-0aef # Digits diff --git a/fontconfig/fc-lang/gv.orth b/fontconfig/fc-lang/gv.orth index f089768c4..3d44e80a8 100644 --- a/fontconfig/fc-lang/gv.orth +++ b/fontconfig/fc-lang/gv.orth @@ -1,31 +1,31 @@ -# -# fontconfig/fc-lang/gv.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Manx Gaelic (GV) -# -# Orthography from http://www.evertype.com/alphabets/manx-gaelic.pdf -# -0041-005a -0061-007a -00c7 -00e7 +# +# fontconfig/fc-lang/gv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Manx Gaelic (GV) +# +# Orthography from http://www.evertype.com/alphabets/manx-gaelic.pdf +# +0041-005a +0061-007a +00c7 +00e7 diff --git a/fontconfig/fc-lang/ha.orth b/fontconfig/fc-lang/ha.orth index 33d95c36c..3a3d28670 100644 --- a/fontconfig/fc-lang/ha.orth +++ b/fontconfig/fc-lang/ha.orth @@ -1,36 +1,36 @@ -# -# fontconfig/fc-lang/ha.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Hausa (HA) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0181 -0253 -018a -0257 -0198-0199 -01b3 # used in Niger -01b4 # used in Niger +# +# fontconfig/fc-lang/ha.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hausa (HA) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0181 +0253 +018a +0257 +0198-0199 +01b3 # used in Niger +01b4 # used in Niger diff --git a/fontconfig/fc-lang/haw.orth b/fontconfig/fc-lang/haw.orth index e48192bdf..cdd24477a 100644 --- a/fontconfig/fc-lang/haw.orth +++ b/fontconfig/fc-lang/haw.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/haw.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Hawaiian (HAW) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0100-0101 -0112-0113 -012a-012b -014c-014d -016a-016b -02bb +# +# fontconfig/fc-lang/haw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hawaiian (HAW) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0100-0101 +0112-0113 +012a-012b +014c-014d +016a-016b +02bb diff --git a/fontconfig/fc-lang/he.orth b/fontconfig/fc-lang/he.orth index ceada0b65..756c191b2 100644 --- a/fontconfig/fc-lang/he.orth +++ b/fontconfig/fc-lang/he.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/he.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Hebrew (HE) -05d0-05ea +# +# fontconfig/fc-lang/he.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hebrew (HE) +05d0-05ea diff --git a/fontconfig/fc-lang/hi.orth b/fontconfig/fc-lang/hi.orth index 1e10f4658..3d18da5b8 100644 --- a/fontconfig/fc-lang/hi.orth +++ b/fontconfig/fc-lang/hi.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/hi.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Hindi (Devanagari script) (HI) -# -# From Unicode coverage for Devanagari -# -0905-0914 # Independent vowels -0915-0939 # Consonants -093f-094c # Dependent vowel signs -094d # virama -#0958-095f # Additional consonants -#0960-0965 # Generic additions -#0966-096f # Digits -#0970 # Abbreviation sign +# +# fontconfig/fc-lang/hi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hindi (Devanagari script) (HI) +# +# From Unicode coverage for Devanagari +# +0905-0914 # Independent vowels +0915-0939 # Consonants +093f-094c # Dependent vowel signs +094d # virama +#0958-095f # Additional consonants +#0960-0965 # Generic additions +#0966-096f # Digits +#0970 # Abbreviation sign diff --git a/fontconfig/fc-lang/ho.orth b/fontconfig/fc-lang/ho.orth index c2ac24615..ade4e8afb 100644 --- a/fontconfig/fc-lang/ho.orth +++ b/fontconfig/fc-lang/ho.orth @@ -1,33 +1,33 @@ -# -# fontconfig/fc-lang/ho.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Hiri Motu (HO) -# -# I found one sample of Hiri Motu text, a translation of the first part of -# Genesis at -# http://rosettaproject.org:8080/live/search/showpages?ethnocode=POM&doctype=gen&version=1&scale=six -# -# It appears to use only ASCII glyphs, so we'll go with that for now -# -0041-005a -0061-007a +# +# fontconfig/fc-lang/ho.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hiri Motu (HO) +# +# I found one sample of Hiri Motu text, a translation of the first part of +# Genesis at +# http://rosettaproject.org:8080/live/search/showpages?ethnocode=POM&doctype=gen&version=1&scale=six +# +# It appears to use only ASCII glyphs, so we'll go with that for now +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/hr.orth b/fontconfig/fc-lang/hr.orth index 3fed0e4a3..008ff7921 100644 --- a/fontconfig/fc-lang/hr.orth +++ b/fontconfig/fc-lang/hr.orth @@ -1,49 +1,49 @@ -# -# fontconfig/fc-lang/hr.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Croatian (HR) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00c0 # evertype.com -#00c8 # evertype.com -#00cc # evertype.com -#00d2 # evertype.com -#00d9 # evertype.com -#00e0 # evertype.com -#00e8 # evertype.com -#00ec # evertype.com -#00f2 # evertype.com -#00f9 # evertype.com -0106-0107 -010c-010d -0110-0111 -0160-0161 -017d-017e -#01c4-01cc # evertype.com -#01f1-01f5 # evertype.com -#0200-0217 # evertype.com +# +# fontconfig/fc-lang/hr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Croatian (HR) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00c0 # evertype.com +#00c8 # evertype.com +#00cc # evertype.com +#00d2 # evertype.com +#00d9 # evertype.com +#00e0 # evertype.com +#00e8 # evertype.com +#00ec # evertype.com +#00f2 # evertype.com +#00f9 # evertype.com +0106-0107 +010c-010d +0110-0111 +0160-0161 +017d-017e +#01c4-01cc # evertype.com +#01f1-01f5 # evertype.com +#0200-0217 # evertype.com diff --git a/fontconfig/fc-lang/hu.orth b/fontconfig/fc-lang/hu.orth index 8ef0d9a1b..3e597fd4d 100644 --- a/fontconfig/fc-lang/hu.orth +++ b/fontconfig/fc-lang/hu.orth @@ -1,49 +1,49 @@ -# -# fontconfig/fc-lang/hu.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Hungarian (HU) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com -00c1 -00c9 -00cd -00d3 -00d6 -00da -00dc -#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com -00e1 -00e9 -00ed -00f3 -00f6 -00fa -00fc -0150-0151 -0170-0171 +# +# fontconfig/fc-lang/hu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Hungarian (HU) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00C0 # LATIN CAPITAL LETTER A WITH GRAVE evertype.com +00c1 +00c9 +00cd +00d3 +00d6 +00da +00dc +#00E0 # LATIN SMALL LETTER A WITH GRAVE evertype.com +00e1 +00e9 +00ed +00f3 +00f6 +00fa +00fc +0150-0151 +0170-0171 diff --git a/fontconfig/fc-lang/hy.orth b/fontconfig/fc-lang/hy.orth index 15e8d649f..0ccc9eb74 100644 --- a/fontconfig/fc-lang/hy.orth +++ b/fontconfig/fc-lang/hy.orth @@ -1,26 +1,26 @@ -# -# fontconfig/fc-lang/hy.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Armenian (HY) -0531-0556 -0561-0587 +# +# fontconfig/fc-lang/hy.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Armenian (HY) +0531-0556 +0561-0587 diff --git a/fontconfig/fc-lang/ia.orth b/fontconfig/fc-lang/ia.orth index 1a434d72e..60a9582f9 100644 --- a/fontconfig/fc-lang/ia.orth +++ b/fontconfig/fc-lang/ia.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/ia.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Interlingua (IA) -# -# Orthography taken from http://www.geocities.com/linguablau/spelling_main.html -# -0041-005a -0061-007a +# +# fontconfig/fc-lang/ia.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Interlingua (IA) +# +# Orthography taken from http://www.geocities.com/linguablau/spelling_main.html +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/id.orth b/fontconfig/fc-lang/id.orth index 89e1a8d2f..36071be29 100644 --- a/fontconfig/fc-lang/id.orth +++ b/fontconfig/fc-lang/id.orth @@ -1,31 +1,31 @@ -# -# fontconfig/fc-lang/id.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Indonesian (ID) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c9 -00e9 +# +# fontconfig/fc-lang/id.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Indonesian (ID) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c9 +00e9 diff --git a/fontconfig/fc-lang/ie.orth b/fontconfig/fc-lang/ie.orth index 261070f99..19b35a2d6 100644 --- a/fontconfig/fc-lang/ie.orth +++ b/fontconfig/fc-lang/ie.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/ie.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Interlingue (IE) -# -# Orthography taken from http://www.kolumbus.fi/allkiv/itgr/itgrix.htm -# -0041-005a -0061-007a +# +# fontconfig/fc-lang/ie.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Interlingue (IE) +# +# Orthography taken from http://www.kolumbus.fi/allkiv/itgr/itgrix.htm +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/ig.orth b/fontconfig/fc-lang/ig.orth index 0453b21e5..9999117cb 100644 --- a/fontconfig/fc-lang/ig.orth +++ b/fontconfig/fc-lang/ig.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/ig.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Igbo (ig) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -1eca -1ecb -1ecc -1ecd -1ee4 -1ee5 +# +# fontconfig/fc-lang/ig.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Igbo (ig) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +1eca +1ecb +1ecc +1ecd +1ee4 +1ee5 diff --git a/fontconfig/fc-lang/ik.orth b/fontconfig/fc-lang/ik.orth index 21b16a888..87e26207c 100644 --- a/fontconfig/fc-lang/ik.orth +++ b/fontconfig/fc-lang/ik.orth @@ -1,100 +1,100 @@ -# -# fontconfig/fc-lang/ik.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Inupiaq (Inupiak, Eskimo) (IK) -# -# I'm making a guess that this is language is set using Cyrillic -# -0401 -040e -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -045e +# +# fontconfig/fc-lang/ik.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Inupiaq (Inupiak, Eskimo) (IK) +# +# I'm making a guess that this is language is set using Cyrillic +# +0401 +040e +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +045e diff --git a/fontconfig/fc-lang/io.orth b/fontconfig/fc-lang/io.orth index abe63ae08..407261d10 100644 --- a/fontconfig/fc-lang/io.orth +++ b/fontconfig/fc-lang/io.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/io.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Ido (IO) -# -# Orthography taken from http://www.homunculus.com/babel/aido.html -# -0041-005a -0061-007a +# +# fontconfig/fc-lang/io.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Ido (IO) +# +# Orthography taken from http://www.homunculus.com/babel/aido.html +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/is.orth b/fontconfig/fc-lang/is.orth index fcb8f4158..2867f8e35 100644 --- a/fontconfig/fc-lang/is.orth +++ b/fontconfig/fc-lang/is.orth @@ -1,64 +1,64 @@ -# -# fontconfig/fc-lang/is.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Icelandic (IS) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c1 -#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com -#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com -00c6 -00c9 -#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS evertype.com -00cd -00d0 -00d3 -#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS eki.ee -#00D8 # LATIN CAPITAL LETTER O WITH STROKE evertype.com -00da -#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com -00dd -00de -00e1 -#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com -#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com -00e6 -00e9 -00ed -00f0 -00f3 -#00F6 # LATIN SMALL LETTER O WITH DIAERESIS eki.ee -#00F8 # LATIN SMALL LETTER O WITH STROKE evertype.com -00fa -#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com -00fd -00fe -#2018 # single quote -#201a # single quote -#201c # double quote -#201e # double quote +# +# fontconfig/fc-lang/is.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Icelandic (IS) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +#00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS evertype.com +#00C5 # LATIN CAPITAL LETTER A WITH RING ABOVE evertype.com +00c6 +00c9 +#00CB # LATIN CAPITAL LETTER E WITH DIAERESIS evertype.com +00cd +00d0 +00d3 +#00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS eki.ee +#00D8 # LATIN CAPITAL LETTER O WITH STROKE evertype.com +00da +#00DC # LATIN CAPITAL LETTER U WITH DIAERESIS evertype.com +00dd +00de +00e1 +#00E4 # LATIN SMALL LETTER A WITH DIAERESIS evertype.com +#00E5 # LATIN SMALL LETTER A WITH RING ABOVE evertype.com +00e6 +00e9 +00ed +00f0 +00f3 +#00F6 # LATIN SMALL LETTER O WITH DIAERESIS eki.ee +#00F8 # LATIN SMALL LETTER O WITH STROKE evertype.com +00fa +#00FC # LATIN SMALL LETTER U WITH DIAERESIS evertype.com +00fd +00fe +#2018 # single quote +#201a # single quote +#201c # double quote +#201e # double quote diff --git a/fontconfig/fc-lang/it.orth b/fontconfig/fc-lang/it.orth index f216fa1d8..329d2f104 100644 --- a/fontconfig/fc-lang/it.orth +++ b/fontconfig/fc-lang/it.orth @@ -1,51 +1,51 @@ -# -# fontconfig/fc-lang/it.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Italian (IT) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c0 -#00c1 -00c8-00c9 -00cc -00cd -#00ce -00cf -00d2-00d3 -00d9 -00da -00e0 -#00e1 -00e8-00e9 -00ec -00ed -#00ee -00ef -00f2-00f3 -00f9 -00fa +# +# fontconfig/fc-lang/it.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Italian (IT) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +#00c1 +00c8-00c9 +00cc +00cd +#00ce +00cf +00d2-00d3 +00d9 +00da +00e0 +#00e1 +00e8-00e9 +00ec +00ed +#00ee +00ef +00f2-00f3 +00f9 +00fa diff --git a/fontconfig/fc-lang/iu.orth b/fontconfig/fc-lang/iu.orth index 6dde0bf98..24d4102c1 100644 --- a/fontconfig/fc-lang/iu.orth +++ b/fontconfig/fc-lang/iu.orth @@ -1,77 +1,77 @@ -# -# fontconfig/fc-lang/iu.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Inuktitut (IU) -# -# Taken from alphabetic coverage of the Pigiarniq font as -# produced by the legislative assembly of Nunavut -# http://www.assembly.nu.ca/unicode/fonts/ -# -1401-1406 -140a-140b -142f-1434 -1438-1439 -1449 -144c-1451 -1455-1456 -1466 -146b-1470 -1472-1473 -1483 -1489-148e -1490-1491 -14a1 -14a3-14a8 -14aa-14ab -14bb -14c0-14c5 -14c7-14c8 -14d0 -14d3-14d8 -14da-14db -14ea -14ed-14f2 -14f4-14f5 -14fa -14fc -14fe -1500 -1502 -1505 -1526-152b -152d-152e -153e -1542 -1545-1549 -154b-154c -1550 -1553-155a -155d -1575-1577 -1579-157c -157e-1585 -158b-1596 -15a0-15a6 -15a8-15ae -166f -1670-1676 +# +# fontconfig/fc-lang/iu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Inuktitut (IU) +# +# Taken from alphabetic coverage of the Pigiarniq font as +# produced by the legislative assembly of Nunavut +# http://www.assembly.nu.ca/unicode/fonts/ +# +1401-1406 +140a-140b +142f-1434 +1438-1439 +1449 +144c-1451 +1455-1456 +1466 +146b-1470 +1472-1473 +1483 +1489-148e +1490-1491 +14a1 +14a3-14a8 +14aa-14ab +14bb +14c0-14c5 +14c7-14c8 +14d0 +14d3-14d8 +14da-14db +14ea +14ed-14f2 +14f4-14f5 +14fa +14fc +14fe +1500 +1502 +1505 +1526-152b +152d-152e +153e +1542 +1545-1549 +154b-154c +1550 +1553-155a +155d +1575-1577 +1579-157c +157e-1585 +158b-1596 +15a0-15a6 +15a8-15ae +166f +1670-1676 diff --git a/fontconfig/fc-lang/ja.orth b/fontconfig/fc-lang/ja.orth index 5f8ea38d6..e87269b85 100644 --- a/fontconfig/fc-lang/ja.orth +++ b/fontconfig/fc-lang/ja.orth @@ -1,6565 +1,6565 @@ -# -# fontconfig/fc-lang/ja.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage from JIS X 0208 (1990) -# -0x3000 # IDEOGRAPHIC SPACE -0x3001 # IDEOGRAPHIC COMMA -0x3002 # IDEOGRAPHIC FULL STOP -0x3005 # IDEOGRAPHIC ITERATION MARK -0x3006 # IDEOGRAPHIC CLOSING MARK -0x3007 # IDEOGRAPHIC NUMBER ZERO -0x3041 # HIRAGANA LETTER SMALL A -0x3042 # HIRAGANA LETTER A -0x3043 # HIRAGANA LETTER SMALL I -0x3044 # HIRAGANA LETTER I -0x3045 # HIRAGANA LETTER SMALL U -0x3046 # HIRAGANA LETTER U -0x3047 # HIRAGANA LETTER SMALL E -0x3048 # HIRAGANA LETTER E -0x3049 # HIRAGANA LETTER SMALL O -0x304A # HIRAGANA LETTER O -0x304B # HIRAGANA LETTER KA -0x304C # HIRAGANA LETTER GA -0x304D # HIRAGANA LETTER KI -0x304E # HIRAGANA LETTER GI -0x304F # HIRAGANA LETTER KU -0x3050 # HIRAGANA LETTER GU -0x3051 # HIRAGANA LETTER KE -0x3052 # HIRAGANA LETTER GE -0x3053 # HIRAGANA LETTER KO -0x3054 # HIRAGANA LETTER GO -0x3055 # HIRAGANA LETTER SA -0x3056 # HIRAGANA LETTER ZA -0x3057 # HIRAGANA LETTER SI -0x3058 # HIRAGANA LETTER ZI -0x3059 # HIRAGANA LETTER SU -0x305A # HIRAGANA LETTER ZU -0x305B # HIRAGANA LETTER SE -0x305C # HIRAGANA LETTER ZE -0x305D # HIRAGANA LETTER SO -0x305E # HIRAGANA LETTER ZO -0x305F # HIRAGANA LETTER TA -0x3060 # HIRAGANA LETTER DA -0x3061 # HIRAGANA LETTER TI -0x3062 # HIRAGANA LETTER DI -0x3063 # HIRAGANA LETTER SMALL TU -0x3064 # HIRAGANA LETTER TU -0x3065 # HIRAGANA LETTER DU -0x3066 # HIRAGANA LETTER TE -0x3067 # HIRAGANA LETTER DE -0x3068 # HIRAGANA LETTER TO -0x3069 # HIRAGANA LETTER DO -0x306A # HIRAGANA LETTER NA -0x306B # HIRAGANA LETTER NI -0x306C # HIRAGANA LETTER NU -0x306D # HIRAGANA LETTER NE -0x306E # HIRAGANA LETTER NO -0x306F # HIRAGANA LETTER HA -0x3070 # HIRAGANA LETTER BA -0x3071 # HIRAGANA LETTER PA -0x3072 # HIRAGANA LETTER HI -0x3073 # HIRAGANA LETTER BI -0x3074 # HIRAGANA LETTER PI -0x3075 # HIRAGANA LETTER HU -0x3076 # HIRAGANA LETTER BU -0x3077 # HIRAGANA LETTER PU -0x3078 # HIRAGANA LETTER HE -0x3079 # HIRAGANA LETTER BE -0x307A # HIRAGANA LETTER PE -0x307B # HIRAGANA LETTER HO -0x307C # HIRAGANA LETTER BO -0x307D # HIRAGANA LETTER PO -0x307E # HIRAGANA LETTER MA -0x307F # HIRAGANA LETTER MI -0x3080 # HIRAGANA LETTER MU -0x3081 # HIRAGANA LETTER ME -0x3082 # HIRAGANA LETTER MO -0x3083 # HIRAGANA LETTER SMALL YA -0x3084 # HIRAGANA LETTER YA -0x3085 # HIRAGANA LETTER SMALL YU -0x3086 # HIRAGANA LETTER YU -0x3087 # HIRAGANA LETTER SMALL YO -0x3088 # HIRAGANA LETTER YO -0x3089 # HIRAGANA LETTER RA -0x308A # HIRAGANA LETTER RI -0x308B # HIRAGANA LETTER RU -0x308C # HIRAGANA LETTER RE -0x308D # HIRAGANA LETTER RO -0x308E # HIRAGANA LETTER SMALL WA -0x308F # HIRAGANA LETTER WA -0x3090 # HIRAGANA LETTER WI -0x3091 # HIRAGANA LETTER WE -0x3092 # HIRAGANA LETTER WO -0x3093 # HIRAGANA LETTER N -0x309B # KATAKANA-HIRAGANA VOICED SOUND MARK -0x309C # KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK -0x309D # HIRAGANA ITERATION MARK -0x309E # HIRAGANA VOICED ITERATION MARK -0x30A1 # KATAKANA LETTER SMALL A -0x30A2 # KATAKANA LETTER A -0x30A3 # KATAKANA LETTER SMALL I -0x30A4 # KATAKANA LETTER I -0x30A5 # KATAKANA LETTER SMALL U -0x30A6 # KATAKANA LETTER U -0x30A7 # KATAKANA LETTER SMALL E -0x30A8 # KATAKANA LETTER E -0x30A9 # KATAKANA LETTER SMALL O -0x30AA # KATAKANA LETTER O -0x30AB # KATAKANA LETTER KA -0x30AC # KATAKANA LETTER GA -0x30AD # KATAKANA LETTER KI -0x30AE # KATAKANA LETTER GI -0x30AF # KATAKANA LETTER KU -0x30B0 # KATAKANA LETTER GU -0x30B1 # KATAKANA LETTER KE -0x30B2 # KATAKANA LETTER GE -0x30B3 # KATAKANA LETTER KO -0x30B4 # KATAKANA LETTER GO -0x30B5 # KATAKANA LETTER SA -0x30B6 # KATAKANA LETTER ZA -0x30B7 # KATAKANA LETTER SI -0x30B8 # KATAKANA LETTER ZI -0x30B9 # KATAKANA LETTER SU -0x30BA # KATAKANA LETTER ZU -0x30BB # KATAKANA LETTER SE -0x30BC # KATAKANA LETTER ZE -0x30BD # KATAKANA LETTER SO -0x30BE # KATAKANA LETTER ZO -0x30BF # KATAKANA LETTER TA -0x30C0 # KATAKANA LETTER DA -0x30C1 # KATAKANA LETTER TI -0x30C2 # KATAKANA LETTER DI -0x30C3 # KATAKANA LETTER SMALL TU -0x30C4 # KATAKANA LETTER TU -0x30C5 # KATAKANA LETTER DU -0x30C6 # KATAKANA LETTER TE -0x30C7 # KATAKANA LETTER DE -0x30C8 # KATAKANA LETTER TO -0x30C9 # KATAKANA LETTER DO -0x30CA # KATAKANA LETTER NA -0x30CB # KATAKANA LETTER NI -0x30CC # KATAKANA LETTER NU -0x30CD # KATAKANA LETTER NE -0x30CE # KATAKANA LETTER NO -0x30CF # KATAKANA LETTER HA -0x30D0 # KATAKANA LETTER BA -0x30D1 # KATAKANA LETTER PA -0x30D2 # KATAKANA LETTER HI -0x30D3 # KATAKANA LETTER BI -0x30D4 # KATAKANA LETTER PI -0x30D5 # KATAKANA LETTER HU -0x30D6 # KATAKANA LETTER BU -0x30D7 # KATAKANA LETTER PU -0x30D8 # KATAKANA LETTER HE -0x30D9 # KATAKANA LETTER BE -0x30DA # KATAKANA LETTER PE -0x30DB # KATAKANA LETTER HO -0x30DC # KATAKANA LETTER BO -0x30DD # KATAKANA LETTER PO -0x30DE # KATAKANA LETTER MA -0x30DF # KATAKANA LETTER MI -0x30E0 # KATAKANA LETTER MU -0x30E1 # KATAKANA LETTER ME -0x30E2 # KATAKANA LETTER MO -0x30E3 # KATAKANA LETTER SMALL YA -0x30E4 # KATAKANA LETTER YA -0x30E5 # KATAKANA LETTER SMALL YU -0x30E6 # KATAKANA LETTER YU -0x30E7 # KATAKANA LETTER SMALL YO -0x30E8 # KATAKANA LETTER YO -0x30E9 # KATAKANA LETTER RA -0x30EA # KATAKANA LETTER RI -0x30EB # KATAKANA LETTER RU -0x30EC # KATAKANA LETTER RE -0x30ED # KATAKANA LETTER RO -0x30EE # KATAKANA LETTER SMALL WA -0x30EF # KATAKANA LETTER WA -0x30F0 # KATAKANA LETTER WI -0x30F1 # KATAKANA LETTER WE -0x30F2 # KATAKANA LETTER WO -0x30F3 # KATAKANA LETTER N -0x30F4 # KATAKANA LETTER VU -0x30F5 # KATAKANA LETTER SMALL KA -0x30F6 # KATAKANA LETTER SMALL KE -0x30FB # KATAKANA MIDDLE DOT -0x30FC # KATAKANA-HIRAGANA PROLONGED SOUND MARK -0x30FD # KATAKANA ITERATION MARK -0x30FE # KATAKANA VOICED ITERATION MARK -0x4E00 # -0x4E01 # -0x4E03 # -0x4E07 # -0x4E08 # -0x4E09 # -0x4E0A # -0x4E0B # -0x4E0D # -0x4E0E # -0x4E10 # -0x4E11 # -0x4E14 # -0x4E15 # -0x4E16 # -0x4E17 # -0x4E18 # -0x4E19 # -0x4E1E # -0x4E21 # -0x4E26 # -0x4E2A # -0x4E2D # -0x4E31 # -0x4E32 # -0x4E36 # -0x4E38 # -0x4E39 # -0x4E3B # -0x4E3C # -0x4E3F # -0x4E42 # -0x4E43 # -0x4E45 # -0x4E4B # -0x4E4D # -0x4E4E # -0x4E4F # -0x4E55 # -0x4E56 # -0x4E57 # -0x4E58 # -0x4E59 # -0x4E5D # -0x4E5E # -0x4E5F # -0x4E62 # -0x4E71 # -0x4E73 # -0x4E7E # -0x4E80 # -0x4E82 # -0x4E85 # -0x4E86 # -0x4E88 # -0x4E89 # -0x4E8A # -0x4E8B # -0x4E8C # -0x4E8E # -0x4E91 # -0x4E92 # -0x4E94 # -0x4E95 # -0x4E98 # -0x4E99 # -0x4E9B # -0x4E9C # -0x4E9E # -0x4E9F # -0x4EA0 # -0x4EA1 # -0x4EA2 # -0x4EA4 # -0x4EA5 # -0x4EA6 # -0x4EA8 # -0x4EAB # -0x4EAC # -0x4EAD # -0x4EAE # -0x4EB0 # -0x4EB3 # -0x4EB6 # -0x4EBA # -0x4EC0 # -0x4EC1 # -0x4EC2 # -0x4EC4 # -0x4EC6 # -0x4EC7 # -0x4ECA # -0x4ECB # -0x4ECD # -0x4ECE # -0x4ECF # -0x4ED4 # -0x4ED5 # -0x4ED6 # -0x4ED7 # -0x4ED8 # -0x4ED9 # -0x4EDD # -0x4EDE # -0x4EDF # -0x4EE3 # -0x4EE4 # -0x4EE5 # -0x4EED # -0x4EEE # -0x4EF0 # -0x4EF2 # -0x4EF6 # -0x4EF7 # -0x4EFB # -0x4F01 # -0x4F09 # -0x4F0A # -0x4F0D # -0x4F0E # -0x4F0F # -0x4F10 # -0x4F11 # -0x4F1A # -0x4F1C # -0x4F1D # -0x4F2F # -0x4F30 # -0x4F34 # -0x4F36 # -0x4F38 # -0x4F3A # -0x4F3C # -0x4F3D # -0x4F43 # -0x4F46 # -0x4F47 # -0x4F4D # -0x4F4E # -0x4F4F # -0x4F50 # -0x4F51 # -0x4F53 # -0x4F55 # -0x4F57 # -0x4F59 # -0x4F5A # -0x4F5B # -0x4F5C # -0x4F5D # -0x4F5E # -0x4F69 # -0x4F6F # -0x4F70 # -0x4F73 # -0x4F75 # -0x4F76 # -0x4F7B # -0x4F7C # -0x4F7F # -0x4F83 # -0x4F86 # -0x4F88 # -0x4F8B # -0x4F8D # -0x4F8F # -0x4F91 # -0x4F96 # -0x4F98 # -0x4F9B # -0x4F9D # -0x4FA0 # -0x4FA1 # -0x4FAB # -0x4FAD # -0x4FAE # -0x4FAF # -0x4FB5 # -0x4FB6 # -0x4FBF # -0x4FC2 # -0x4FC3 # -0x4FC4 # -0x4FCA # -0x4FCE # -0x4FD0 # -0x4FD1 # -0x4FD4 # -0x4FD7 # -0x4FD8 # -0x4FDA # -0x4FDB # -0x4FDD # -0x4FDF # -0x4FE1 # -0x4FE3 # -0x4FE4 # -0x4FE5 # -0x4FEE # -0x4FEF # -0x4FF3 # -0x4FF5 # -0x4FF6 # -0x4FF8 # -0x4FFA # -0x4FFE # -0x5005 # -0x5006 # -0x5009 # -0x500B # -0x500D # -0x500F # -0x5011 # -0x5012 # -0x5014 # -0x5016 # -0x5019 # -0x501A # -0x501F # -0x5021 # -0x5023 # -0x5024 # -0x5025 # -0x5026 # -0x5028 # -0x5029 # -0x502A # -0x502B # -0x502C # -0x502D # -0x5036 # -0x5039 # -0x5043 # -0x5047 # -0x5048 # -0x5049 # -0x504F # -0x5050 # -0x5055 # -0x5056 # -0x505A # -0x505C # -0x5065 # -0x506C # -0x5072 # -0x5074 # -0x5075 # -0x5076 # -0x5078 # -0x507D # -0x5080 # -0x5085 # -0x508D # -0x5091 # -0x5098 # -0x5099 # -0x509A # -0x50AC # -0x50AD # -0x50B2 # -0x50B3 # -0x50B4 # -0x50B5 # -0x50B7 # -0x50BE # -0x50C2 # -0x50C5 # -0x50C9 # -0x50CA # -0x50CD # -0x50CF # -0x50D1 # -0x50D5 # -0x50D6 # -0x50DA # -0x50DE # -0x50E3 # -0x50E5 # -0x50E7 # -0x50ED # -0x50EE # -0x50F5 # -0x50F9 # -0x50FB # -0x5100 # -0x5101 # -0x5102 # -0x5104 # -0x5109 # -0x5112 # -0x5114 # -0x5115 # -0x5116 # -0x5118 # -0x511A # -0x511F # -0x5121 # -0x512A # -0x5132 # -0x5137 # -0x513A # -0x513B # -0x513C # -0x513F # -0x5140 # -0x5141 # -0x5143 # -0x5144 # -0x5145 # -0x5146 # -0x5147 # -0x5148 # -0x5149 # -0x514B # -0x514C # -0x514D # -0x514E # -0x5150 # -0x5152 # -0x5154 # -0x515A # -0x515C # -0x5162 # -0x5165 # -0x5168 # -0x5169 # -0x516A # -0x516B # -0x516C # -0x516D # -0x516E # -0x5171 # -0x5175 # -0x5176 # -0x5177 # -0x5178 # -0x517C # -0x5180 # -0x5182 # -0x5185 # -0x5186 # -0x5189 # -0x518A # -0x518C # -0x518D # -0x518F # -0x5190 # -0x5191 # -0x5192 # -0x5193 # -0x5195 # -0x5196 # -0x5197 # -0x5199 # -0x51A0 # -0x51A2 # -0x51A4 # -0x51A5 # -0x51A6 # -0x51A8 # -0x51A9 # -0x51AA # -0x51AB # -0x51AC # -0x51B0 # -0x51B1 # -0x51B2 # -0x51B3 # -0x51B4 # -0x51B5 # -0x51B6 # -0x51B7 # -0x51BD # -0x51C4 # -0x51C5 # -0x51C6 # -0x51C9 # -0x51CB # -0x51CC # -0x51CD # -0x51D6 # -0x51DB # -#0x51DC # # not in kochi fonts -0x51DD # -0x51E0 # -0x51E1 # -0x51E6 # -0x51E7 # -0x51E9 # -0x51EA # -0x51ED # -0x51F0 # -0x51F1 # -0x51F5 # -0x51F6 # -0x51F8 # -0x51F9 # -0x51FA # -0x51FD # -0x51FE # -0x5200 # -0x5203 # -0x5204 # -0x5206 # -0x5207 # -0x5208 # -0x520A # -0x520B # -0x520E # -0x5211 # -0x5214 # -0x5217 # -0x521D # -0x5224 # -0x5225 # -0x5227 # -0x5229 # -0x522A # -0x522E # -0x5230 # -0x5233 # -0x5236 # -0x5237 # -0x5238 # -0x5239 # -0x523A # -0x523B # -0x5243 # -0x5244 # -0x5247 # -0x524A # -0x524B # -0x524C # -0x524D # -0x524F # -0x5254 # -0x5256 # -0x525B # -0x525E # -0x5263 # -0x5264 # -0x5265 # -0x5269 # -0x526A # -0x526F # -0x5270 # -0x5271 # -0x5272 # -0x5273 # -0x5274 # -0x5275 # -0x527D # -0x527F # -0x5283 # -0x5287 # -0x5288 # -0x5289 # -0x528D # -0x5291 # -0x5292 # -0x5294 # -0x529B # -0x529F # -0x52A0 # -0x52A3 # -0x52A9 # -0x52AA # -0x52AB # -0x52AC # -0x52AD # -0x52B1 # -0x52B4 # -0x52B5 # -0x52B9 # -0x52BC # -0x52BE # -0x52C1 # -0x52C3 # -0x52C5 # -0x52C7 # -0x52C9 # -0x52CD # -0x52D2 # -0x52D5 # -0x52D7 # -0x52D8 # -0x52D9 # -0x52DD # -0x52DE # -0x52DF # -0x52E0 # -0x52E2 # -0x52E3 # -0x52E4 # -0x52E6 # -0x52E7 # -0x52F2 # -0x52F3 # -0x52F5 # -0x52F8 # -0x52F9 # -0x52FA # -0x52FE # -0x52FF # -0x5301 # -0x5302 # -0x5305 # -0x5306 # -0x5308 # -0x530D # -0x530F # -0x5310 # -0x5315 # -0x5316 # -0x5317 # -0x5319 # -0x531A # -0x531D # -0x5320 # -0x5321 # -0x5323 # -0x532A # -0x532F # -0x5331 # -0x5333 # -0x5338 # -0x5339 # -0x533A # -0x533B # -0x533F # -0x5340 # -0x5341 # -0x5343 # -0x5345 # -0x5346 # -0x5347 # -0x5348 # -0x5349 # -0x534A # -0x534D # -0x5351 # -0x5352 # -0x5353 # -0x5354 # -0x5357 # -0x5358 # -0x535A # -0x535C # -0x535E # -0x5360 # -0x5366 # -0x5369 # -0x536E # -0x536F # -0x5370 # -0x5371 # -0x5373 # -0x5374 # -0x5375 # -0x5377 # -0x5378 # -0x537B # -0x537F # -0x5382 # -0x5384 # -0x5396 # -0x5398 # -0x539A # -0x539F # -0x53A0 # -0x53A5 # -0x53A6 # -0x53A8 # -0x53A9 # -0x53AD # -0x53AE # -0x53B0 # -0x53B3 # -0x53B6 # -0x53BB # -0x53C2 # -0x53C3 # -0x53C8 # -0x53C9 # -0x53CA # -0x53CB # -0x53CC # -0x53CD # -0x53CE # -0x53D4 # -0x53D6 # -0x53D7 # -0x53D9 # -0x53DB # -0x53DF # -0x53E1 # -0x53E2 # -0x53E3 # -0x53E4 # -0x53E5 # -0x53E8 # -0x53E9 # -0x53EA # -0x53EB # -0x53EC # -0x53ED # -0x53EE # -0x53EF # -0x53F0 # -0x53F1 # -0x53F2 # -0x53F3 # -0x53F6 # -0x53F7 # -0x53F8 # -0x53FA # -0x5401 # -0x5403 # -0x5404 # -0x5408 # -0x5409 # -0x540A # -0x540B # -0x540C # -0x540D # -0x540E # -0x540F # -0x5410 # -0x5411 # -0x541B # -0x541D # -0x541F # -0x5420 # -0x5426 # -0x5429 # -0x542B # -0x542C # -0x542D # -0x542E # -0x5436 # -0x5438 # -0x5439 # -0x543B # -0x543C # -0x543D # -0x543E # -0x5440 # -0x5442 # -0x5446 # -0x5448 # -0x5449 # -0x544A # -0x544E # -0x5451 # -0x545F # -0x5468 # -0x546A # -0x5470 # -0x5471 # -0x5473 # -0x5475 # -0x5476 # -0x5477 # -0x547B # -0x547C # -0x547D # -0x5480 # -0x5484 # -0x5486 # -0x548B # -0x548C # -0x548E # -0x548F # -0x5490 # -0x5492 # -0x54A2 # -0x54A4 # -0x54A5 # -0x54A8 # -0x54AB # -0x54AC # -0x54AF # -0x54B2 # -0x54B3 # -0x54B8 # -0x54BC # -0x54BD # -0x54BE # -0x54C0 # -0x54C1 # -0x54C2 # -0x54C4 # -0x54C7 # -0x54C8 # -0x54C9 # -0x54D8 # -0x54E1 # -0x54E2 # -0x54E5 # -0x54E6 # -0x54E8 # -0x54E9 # -0x54ED # -0x54EE # -0x54F2 # -0x54FA # -0x54FD # -0x5504 # -0x5506 # -0x5507 # -0x550F # -0x5510 # -0x5514 # -0x5516 # -0x552E # -0x552F # -0x5531 # -0x5533 # -0x5538 # -0x5539 # -0x553E # -0x5540 # -0x5544 # -0x5545 # -0x5546 # -0x554C # -0x554F # -0x5553 # -0x5556 # -0x5557 # -0x555C # -0x555D # -0x5563 # -0x557B # -0x557C # -0x557E # -0x5580 # -0x5583 # -0x5584 # -0x5587 # -0x5589 # -0x558A # -0x558B # -0x5598 # -0x5599 # -0x559A # -0x559C # -0x559D # -0x559E # -0x559F # -0x55A7 # -0x55A8 # -0x55A9 # -0x55AA # -0x55AB # -0x55AC # -0x55AE # -0x55B0 # -0x55B6 # -0x55C4 # -0x55C5 # -0x55C7 # -0x55D4 # -0x55DA # -0x55DC # -0x55DF # -0x55E3 # -0x55E4 # -0x55F7 # -0x55F9 # -0x55FD # -0x55FE # -0x5606 # -0x5609 # -0x5614 # -0x5616 # -0x5617 # -0x5618 # -0x561B # -0x5629 # -0x562F # -0x5631 # -0x5632 # -0x5634 # -0x5636 # -0x5638 # -0x5642 # -0x564C # -0x564E # -0x5650 # -0x565B # -0x5664 # -0x5668 # -0x566A # -0x566B # -0x566C # -0x5674 # -0x5678 # -0x567A # -0x5680 # -0x5686 # -0x5687 # -0x568A # -0x568F # -0x5694 # -0x56A0 # -0x56A2 # -0x56A5 # -0x56AE # -0x56B4 # -0x56B6 # -0x56BC # -0x56C0 # -0x56C1 # -0x56C2 # -0x56C3 # -0x56C8 # -0x56CE # -0x56D1 # -0x56D3 # -0x56D7 # -0x56D8 # -0x56DA # -0x56DB # -0x56DE # -0x56E0 # -0x56E3 # -0x56EE # -0x56F0 # -0x56F2 # -0x56F3 # -0x56F9 # -0x56FA # -0x56FD # -0x56FF # -0x5700 # -0x5703 # -0x5704 # -0x5708 # -0x5709 # -0x570B # -0x570D # -0x570F # -0x5712 # -0x5713 # -0x5716 # -0x5718 # -0x571C # -0x571F # -0x5726 # -0x5727 # -0x5728 # -0x572D # -0x5730 # -0x5737 # -0x5738 # -0x573B # -0x5740 # -0x5742 # -0x5747 # -0x574A # -0x574E # -0x574F # -0x5750 # -0x5751 # -0x5761 # -0x5764 # -0x5766 # -0x5769 # -0x576A # -0x577F # -0x5782 # -0x5788 # -0x5789 # -0x578B # -0x5793 # -0x57A0 # -0x57A2 # -0x57A3 # -0x57A4 # -0x57AA # -0x57B0 # -0x57B3 # -0x57C0 # -0x57C3 # -0x57C6 # -0x57CB # -0x57CE # -0x57D2 # -0x57D3 # -0x57D4 # -0x57D6 # -0x57DC # -0x57DF # -0x57E0 # -0x57E3 # -0x57F4 # -0x57F7 # -0x57F9 # -0x57FA # -0x57FC # -0x5800 # -0x5802 # -0x5805 # -0x5806 # -0x580A # -0x580B # -0x5815 # -0x5819 # -0x581D # -0x5821 # -0x5824 # -0x582A # -0x582F # -0x5830 # -0x5831 # -0x5834 # -0x5835 # -0x583A # -0x583D # -0x5840 # -0x5841 # -0x584A # -0x584B # -0x5851 # -0x5852 # -0x5854 # -0x5857 # -0x5858 # -0x5859 # -0x585A # -0x585E # -0x5862 # -0x5869 # -0x586B # -0x5870 # -0x5872 # -0x5875 # -0x5879 # -0x587E # -0x5883 # -0x5885 # -0x5893 # -0x5897 # -0x589C # -0x589F # -0x58A8 # -0x58AB # -0x58AE # -0x58B3 # -0x58B8 # -0x58B9 # -0x58BA # -0x58BB # -0x58BE # -0x58C1 # -0x58C5 # -0x58C7 # -0x58CA # -0x58CC # -0x58D1 # -0x58D3 # -0x58D5 # -0x58D7 # -0x58D8 # -0x58D9 # -0x58DC # -0x58DE # -0x58DF # -0x58E4 # -0x58E5 # -0x58EB # -0x58EC # -0x58EE # -0x58EF # -0x58F0 # -0x58F1 # -0x58F2 # -0x58F7 # -0x58F9 # -0x58FA # -0x58FB # -0x58FC # -0x58FD # -0x5902 # -0x5909 # -0x590A # -0x590F # -0x5910 # -0x5915 # -0x5916 # -0x5918 # -0x5919 # -0x591A # -0x591B # -0x591C # -0x5922 # -0x5925 # -0x5927 # -0x5929 # -0x592A # -0x592B # -0x592C # -0x592D # -0x592E # -0x5931 # -0x5932 # -0x5937 # -0x5938 # -0x593E # -0x5944 # -0x5947 # -0x5948 # -0x5949 # -0x594E # -0x594F # -0x5950 # -0x5951 # -0x5954 # -0x5955 # -0x5957 # -0x5958 # -0x595A # -0x5960 # -0x5962 # -0x5965 # -0x5967 # -0x5968 # -0x5969 # -0x596A # -0x596C # -0x596E # -0x5973 # -0x5974 # -0x5978 # -0x597D # -0x5981 # -0x5982 # -0x5983 # -0x5984 # -0x598A # -0x598D # -0x5993 # -0x5996 # -0x5999 # -0x599B # -0x599D # -0x59A3 # -0x59A5 # -0x59A8 # -0x59AC # -0x59B2 # -0x59B9 # -0x59BB # -0x59BE # -0x59C6 # -0x59C9 # -0x59CB # -0x59D0 # -0x59D1 # -0x59D3 # -0x59D4 # -0x59D9 # -0x59DA # -0x59DC # -0x59E5 # -0x59E6 # -0x59E8 # -0x59EA # -0x59EB # -0x59F6 # -0x59FB # -0x59FF # -0x5A01 # -0x5A03 # -0x5A09 # -0x5A11 # -0x5A18 # -0x5A1A # -0x5A1C # -0x5A1F # -0x5A20 # -0x5A25 # -0x5A29 # -0x5A2F # -0x5A35 # -0x5A36 # -0x5A3C # -0x5A40 # -0x5A41 # -0x5A46 # -0x5A49 # -0x5A5A # -0x5A62 # -0x5A66 # -0x5A6A # -0x5A6C # -0x5A7F # -0x5A92 # -0x5A9A # -0x5A9B # -0x5ABC # -0x5ABD # -0x5ABE # -0x5AC1 # -0x5AC2 # -0x5AC9 # -0x5ACB # -0x5ACC # -0x5AD0 # -0x5AD6 # -0x5AD7 # -0x5AE1 # -0x5AE3 # -0x5AE6 # -0x5AE9 # -0x5AFA # -0x5AFB # -0x5B09 # -0x5B0B # -0x5B0C # -0x5B16 # -0x5B22 # -0x5B2A # -0x5B2C # -0x5B30 # -0x5B32 # -0x5B36 # -0x5B3E # -0x5B40 # -0x5B43 # -0x5B45 # -0x5B50 # -0x5B51 # -0x5B54 # -0x5B55 # -0x5B57 # -0x5B58 # -0x5B5A # -0x5B5B # -0x5B5C # -0x5B5D # -0x5B5F # -0x5B63 # -0x5B64 # -0x5B65 # -0x5B66 # -0x5B69 # -0x5B6B # -0x5B70 # -0x5B71 # -0x5B73 # -0x5B75 # -0x5B78 # -0x5B7A # -0x5B80 # -0x5B83 # -0x5B85 # -0x5B87 # -0x5B88 # -0x5B89 # -0x5B8B # -0x5B8C # -0x5B8D # -0x5B8F # -0x5B95 # -0x5B97 # -0x5B98 # -0x5B99 # -0x5B9A # -0x5B9B # -0x5B9C # -0x5B9D # -0x5B9F # -0x5BA2 # -0x5BA3 # -0x5BA4 # -0x5BA5 # -0x5BA6 # -0x5BAE # -0x5BB0 # -0x5BB3 # -0x5BB4 # -0x5BB5 # -0x5BB6 # -0x5BB8 # -0x5BB9 # -0x5BBF # -0x5BC2 # -0x5BC3 # -0x5BC4 # -0x5BC5 # -0x5BC6 # -0x5BC7 # -0x5BC9 # -0x5BCC # -0x5BD0 # -0x5BD2 # -0x5BD3 # -0x5BD4 # -0x5BDB # -0x5BDD # -0x5BDE # -0x5BDF # -0x5BE1 # -0x5BE2 # -0x5BE4 # -0x5BE5 # -0x5BE6 # -0x5BE7 # -0x5BE8 # -0x5BE9 # -0x5BEB # -0x5BEE # -0x5BF0 # -0x5BF3 # -0x5BF5 # -0x5BF6 # -0x5BF8 # -0x5BFA # -0x5BFE # -0x5BFF # -0x5C01 # -0x5C02 # -0x5C04 # -0x5C05 # -0x5C06 # -0x5C07 # -0x5C08 # -0x5C09 # -0x5C0A # -0x5C0B # -0x5C0D # -0x5C0E # -0x5C0F # -0x5C11 # -0x5C13 # -0x5C16 # -0x5C1A # -0x5C20 # -0x5C22 # -0x5C24 # -0x5C28 # -0x5C2D # -0x5C31 # -0x5C38 # -0x5C39 # -0x5C3A # -0x5C3B # -0x5C3C # -0x5C3D # -0x5C3E # -0x5C3F # -0x5C40 # -0x5C41 # -0x5C45 # -0x5C46 # -0x5C48 # -0x5C4A # -0x5C4B # -0x5C4D # -0x5C4E # -0x5C4F # -0x5C50 # -0x5C51 # -0x5C53 # -0x5C55 # -0x5C5E # -0x5C60 # -0x5C61 # -0x5C64 # -0x5C65 # -0x5C6C # -0x5C6E # -0x5C6F # -0x5C71 # -0x5C76 # -0x5C79 # -0x5C8C # -0x5C90 # -0x5C91 # -0x5C94 # -0x5CA1 # -0x5CA8 # -0x5CA9 # -0x5CAB # -0x5CAC # -0x5CB1 # -0x5CB3 # -0x5CB6 # -0x5CB7 # -0x5CB8 # -0x5CBB # -0x5CBC # -0x5CBE # -0x5CC5 # -0x5CC7 # -0x5CD9 # -0x5CE0 # -0x5CE1 # -0x5CE8 # -0x5CE9 # -0x5CEA # -0x5CED # -0x5CEF # -0x5CF0 # -0x5CF6 # -0x5CFA # -0x5CFB # -0x5CFD # -0x5D07 # -0x5D0B # -0x5D0E # -0x5D11 # -0x5D14 # -0x5D15 # -0x5D16 # -0x5D17 # -0x5D18 # -0x5D19 # -0x5D1A # -0x5D1B # -0x5D1F # -0x5D22 # -0x5D29 # -0x5D4B # -0x5D4C # -0x5D4E # -0x5D50 # -0x5D52 # -0x5D5C # -0x5D69 # -0x5D6C # -0x5D6F # -0x5D73 # -0x5D76 # -0x5D82 # -0x5D84 # -0x5D87 # -0x5D8B # -0x5D8C # -0x5D90 # -0x5D9D # -0x5DA2 # -0x5DAC # -0x5DAE # -0x5DB7 # -0x5DBA # -0x5DBC # -0x5DBD # -0x5DC9 # -0x5DCC # -0x5DCD # -0x5DD2 # -0x5DD3 # -0x5DD6 # -0x5DDB # -0x5DDD # -0x5DDE # -0x5DE1 # -0x5DE3 # -0x5DE5 # -0x5DE6 # -0x5DE7 # -0x5DE8 # -0x5DEB # -0x5DEE # -0x5DF1 # -0x5DF2 # -0x5DF3 # -0x5DF4 # -0x5DF5 # -0x5DF7 # -0x5DFB # -0x5DFD # -0x5DFE # -0x5E02 # -0x5E03 # -0x5E06 # -0x5E0B # -0x5E0C # -0x5E11 # -0x5E16 # -0x5E19 # -0x5E1A # -0x5E1B # -0x5E1D # -0x5E25 # -0x5E2B # -0x5E2D # -0x5E2F # -0x5E30 # -0x5E33 # -0x5E36 # -0x5E37 # -0x5E38 # -0x5E3D # -0x5E40 # -0x5E43 # -0x5E44 # -0x5E45 # -0x5E47 # -0x5E4C # -0x5E4E # -0x5E54 # -0x5E55 # -0x5E57 # -0x5E5F # -0x5E61 # -0x5E62 # -0x5E63 # -0x5E64 # -0x5E72 # -0x5E73 # -0x5E74 # -0x5E75 # -0x5E76 # -0x5E78 # -0x5E79 # -0x5E7A # -0x5E7B # -0x5E7C # -0x5E7D # -0x5E7E # -0x5E7F # -0x5E81 # -0x5E83 # -0x5E84 # -0x5E87 # -0x5E8A # -0x5E8F # -0x5E95 # -0x5E96 # -0x5E97 # -0x5E9A # -0x5E9C # -0x5EA0 # -0x5EA6 # -0x5EA7 # -0x5EAB # -0x5EAD # -0x5EB5 # -0x5EB6 # -0x5EB7 # -0x5EB8 # -0x5EC1 # -0x5EC2 # -0x5EC3 # -0x5EC8 # -0x5EC9 # -0x5ECA # -0x5ECF # -0x5ED0 # -0x5ED3 # -0x5ED6 # -0x5EDA # -0x5EDB # -0x5EDD # -0x5EDF # -0x5EE0 # -0x5EE1 # -0x5EE2 # -0x5EE3 # -0x5EE8 # -0x5EE9 # -0x5EEC # -0x5EF0 # -0x5EF1 # -0x5EF3 # -0x5EF4 # -0x5EF6 # -0x5EF7 # -0x5EF8 # -0x5EFA # -0x5EFB # -0x5EFC # -0x5EFE # -0x5EFF # -0x5F01 # -0x5F03 # -0x5F04 # -0x5F09 # -0x5F0A # -0x5F0B # -0x5F0C # -0x5F0D # -0x5F0F # -0x5F10 # -0x5F11 # -0x5F13 # -0x5F14 # -0x5F15 # -0x5F16 # -0x5F17 # -0x5F18 # -0x5F1B # -0x5F1F # -0x5F25 # -0x5F26 # -0x5F27 # -0x5F29 # -0x5F2D # -0x5F2F # -0x5F31 # -0x5F35 # -0x5F37 # -0x5F38 # -0x5F3C # -0x5F3E # -0x5F41 # -0x5F48 # -0x5F4A # -0x5F4C # -0x5F4E # -0x5F51 # -0x5F53 # -0x5F56 # -0x5F57 # -0x5F59 # -0x5F5C # -0x5F5D # -0x5F61 # -0x5F62 # -0x5F66 # -0x5F69 # -0x5F6A # -0x5F6B # -0x5F6C # -0x5F6D # -0x5F70 # -0x5F71 # -0x5F73 # -0x5F77 # -0x5F79 # -0x5F7C # -0x5F7F # -0x5F80 # -0x5F81 # -0x5F82 # -0x5F83 # -0x5F84 # -0x5F85 # -0x5F87 # -0x5F88 # -0x5F8A # -0x5F8B # -0x5F8C # -0x5F90 # -0x5F91 # -0x5F92 # -0x5F93 # -0x5F97 # -0x5F98 # -0x5F99 # -0x5F9E # -0x5FA0 # -0x5FA1 # -0x5FA8 # -0x5FA9 # -0x5FAA # -0x5FAD # -0x5FAE # -0x5FB3 # -0x5FB4 # -0x5FB9 # -0x5FBC # -0x5FBD # -0x5FC3 # -0x5FC5 # -0x5FCC # -0x5FCD # -0x5FD6 # -0x5FD7 # -0x5FD8 # -0x5FD9 # -0x5FDC # -0x5FDD # -0x5FE0 # -0x5FE4 # -0x5FEB # -0x5FF0 # -0x5FF1 # -0x5FF5 # -0x5FF8 # -0x5FFB # -0x5FFD # -0x5FFF # -0x600E # -0x600F # -0x6010 # -0x6012 # -0x6015 # -0x6016 # -0x6019 # -0x601B # -0x601C # -0x601D # -0x6020 # -0x6021 # -0x6025 # -0x6026 # -0x6027 # -0x6028 # -0x6029 # -0x602A # -0x602B # -0x602F # -0x6031 # -0x603A # -0x6041 # -0x6042 # -0x6043 # -0x6046 # -0x604A # -0x604B # -0x604D # -0x6050 # -0x6052 # -0x6055 # -0x6059 # -0x605A # -0x605F # -0x6060 # -0x6062 # -0x6063 # -0x6064 # -0x6065 # -0x6068 # -0x6069 # -0x606A # -0x606B # -0x606C # -0x606D # -0x606F # -0x6070 # -0x6075 # -0x6077 # -0x6081 # -0x6083 # -0x6084 # -0x6089 # -0x608B # -0x608C # -0x608D # -0x6092 # -0x6094 # -0x6096 # -0x6097 # -0x609A # -0x609B # -0x609F # -0x60A0 # -0x60A3 # -0x60A6 # -0x60A7 # -0x60A9 # -0x60AA # -0x60B2 # -0x60B3 # -0x60B4 # -0x60B5 # -0x60B6 # -0x60B8 # -0x60BC # -0x60BD # -0x60C5 # -0x60C6 # -0x60C7 # -0x60D1 # -0x60D3 # -0x60D8 # -0x60DA # -0x60DC # -0x60DF # -0x60E0 # -0x60E1 # -0x60E3 # -0x60E7 # -0x60E8 # -0x60F0 # -0x60F1 # -0x60F3 # -0x60F4 # -0x60F6 # -0x60F7 # -0x60F9 # -0x60FA # -0x60FB # -0x6100 # -0x6101 # -0x6103 # -0x6106 # -0x6108 # -0x6109 # -0x610D # -0x610E # -0x610F # -0x6115 # -0x611A # -0x611B # -0x611F # -0x6121 # -0x6127 # -0x6128 # -0x612C # -0x6134 # -0x613C # -0x613D # -0x613E # -0x613F # -0x6142 # -0x6144 # -0x6147 # -0x6148 # -0x614A # -0x614B # -0x614C # -0x614D # -0x614E # -0x6153 # -0x6155 # -0x6158 # -0x6159 # -0x615A # -0x615D # -0x615F # -0x6162 # -0x6163 # -0x6165 # -0x6167 # -0x6168 # -0x616B # -0x616E # -0x616F # -0x6170 # -0x6171 # -0x6173 # -0x6174 # -0x6175 # -0x6176 # -0x6177 # -0x617E # -0x6182 # -0x6187 # -0x618A # -0x618E # -0x6190 # -0x6191 # -0x6194 # -0x6196 # -0x6199 # -0x619A # -0x61A4 # -0x61A7 # -0x61A9 # -0x61AB # -0x61AC # -0x61AE # -0x61B2 # -0x61B6 # -0x61BA # -0x61BE # -0x61C3 # -0x61C6 # -0x61C7 # -0x61C8 # -0x61C9 # -0x61CA # -0x61CB # -0x61CC # -0x61CD # -0x61D0 # -0x61E3 # -0x61E6 # -0x61F2 # -0x61F4 # -0x61F6 # -0x61F7 # -0x61F8 # -0x61FA # -0x61FC # -0x61FD # -0x61FE # -0x61FF # -0x6200 # -0x6208 # -0x6209 # -0x620A # -0x620C # -0x620D # -0x620E # -0x6210 # -0x6211 # -0x6212 # -0x6214 # -0x6216 # -0x621A # -0x621B # -0x621D # -0x621E # -0x621F # -0x6221 # -0x6226 # -0x622A # -0x622E # -0x622F # -0x6230 # -0x6232 # -0x6233 # -0x6234 # -0x6238 # -0x623B # -0x623F # -0x6240 # -0x6241 # -0x6247 # -0x6248 # -0x6249 # -0x624B # -0x624D # -0x624E # -0x6253 # -0x6255 # -0x6258 # -0x625B # -0x625E # -0x6260 # -0x6263 # -0x6268 # -0x626E # -0x6271 # -0x6276 # -0x6279 # -0x627C # -0x627E # -0x627F # -0x6280 # -0x6282 # -0x6283 # -0x6284 # -0x6289 # -0x628A # -0x6291 # -0x6292 # -0x6293 # -0x6294 # -0x6295 # -0x6296 # -0x6297 # -0x6298 # -0x629B # -0x629C # -0x629E # -0x62AB # -0x62AC # -0x62B1 # -0x62B5 # -0x62B9 # -0x62BB # -0x62BC # -0x62BD # -0x62C2 # -0x62C5 # -0x62C6 # -0x62C7 # -0x62C8 # -0x62C9 # -0x62CA # -0x62CC # -0x62CD # -0x62CF # -0x62D0 # -0x62D1 # -0x62D2 # -0x62D3 # -0x62D4 # -0x62D7 # -0x62D8 # -0x62D9 # -0x62DB # -0x62DC # -0x62DD # -0x62E0 # -0x62E1 # -0x62EC # -0x62ED # -0x62EE # -0x62EF # -0x62F1 # -0x62F3 # -0x62F5 # -0x62F6 # -0x62F7 # -0x62FE # -0x62FF # -0x6301 # -0x6302 # -0x6307 # -0x6308 # -0x6309 # -0x630C # -0x6311 # -0x6319 # -0x631F # -0x6327 # -0x6328 # -0x632B # -0x632F # -0x633A # -0x633D # -0x633E # -0x633F # -0x6349 # -0x634C # -0x634D # -0x634F # -0x6350 # -0x6355 # -0x6357 # -0x635C # -0x6367 # -0x6368 # -0x6369 # -0x636B # -0x636E # -0x6372 # -0x6376 # -0x6377 # -0x637A # -0x637B # -0x6380 # -0x6383 # -0x6388 # -0x6389 # -0x638C # -0x638E # -0x638F # -0x6392 # -0x6396 # -0x6398 # -0x639B # -0x639F # -0x63A0 # -0x63A1 # -0x63A2 # -0x63A3 # -0x63A5 # -0x63A7 # -0x63A8 # -0x63A9 # -0x63AA # -0x63AB # -0x63AC # -0x63B2 # -0x63B4 # -0x63B5 # -0x63BB # -0x63BE # -0x63C0 # -0x63C3 # -0x63C4 # -0x63C6 # -0x63C9 # -0x63CF # -0x63D0 # -0x63D2 # -0x63D6 # -0x63DA # -0x63DB # -0x63E1 # -0x63E3 # -0x63E9 # -0x63EE # -0x63F4 # -0x63F6 # -0x63FA # -0x6406 # -0x640D # -0x640F # -0x6413 # -0x6416 # -0x6417 # -0x641C # -0x6426 # -0x6428 # -0x642C # -0x642D # -0x6434 # -0x6436 # -0x643A # -0x643E # -0x6442 # -0x644E # -0x6458 # -0x6467 # -0x6469 # -0x646F # -0x6476 # -0x6478 # -0x647A # -0x6483 # -0x6488 # -0x6492 # -0x6493 # -0x6495 # -0x649A # -0x649E # -0x64A4 # -0x64A5 # -0x64A9 # -0x64AB # -0x64AD # -0x64AE # -0x64B0 # -0x64B2 # -0x64B9 # -0x64BB # -0x64BC # -0x64C1 # -0x64C2 # -0x64C5 # -0x64C7 # -0x64CD # -0x64D2 # -0x64D4 # -0x64D8 # -0x64DA # -0x64E0 # -0x64E1 # -0x64E2 # -0x64E3 # -0x64E6 # -0x64E7 # -0x64EC # -0x64EF # -0x64F1 # -0x64F2 # -0x64F4 # -0x64F6 # -0x64FA # -0x64FD # -0x64FE # -0x6500 # -0x6505 # -0x6518 # -0x651C # -0x651D # -0x6523 # -0x6524 # -0x652A # -0x652B # -0x652C # -0x652F # -0x6534 # -0x6535 # -0x6536 # -0x6537 # -0x6538 # -0x6539 # -0x653B # -0x653E # -0x653F # -0x6545 # -0x6548 # -0x654D # -0x654F # -0x6551 # -0x6555 # -0x6556 # -0x6557 # -0x6558 # -0x6559 # -0x655D # -0x655E # -0x6562 # -0x6563 # -0x6566 # -0x656C # -0x6570 # -0x6572 # -0x6574 # -0x6575 # -0x6577 # -0x6578 # -0x6582 # -0x6583 # -0x6587 # -0x6588 # -0x6589 # -0x658C # -0x658E # -0x6590 # -0x6591 # -0x6597 # -0x6599 # -0x659B # -0x659C # -0x659F # -0x65A1 # -0x65A4 # -0x65A5 # -0x65A7 # -0x65AB # -0x65AC # -0x65AD # -0x65AF # -0x65B0 # -0x65B7 # -0x65B9 # -0x65BC # -0x65BD # -0x65C1 # -0x65C3 # -0x65C4 # -0x65C5 # -0x65C6 # -0x65CB # -0x65CC # -0x65CF # -0x65D2 # -0x65D7 # -0x65D9 # -0x65DB # -0x65E0 # -0x65E1 # -0x65E2 # -0x65E5 # -0x65E6 # -0x65E7 # -0x65E8 # -0x65E9 # -0x65EC # -0x65ED # -0x65F1 # -0x65FA # -0x65FB # -0x6602 # -0x6603 # -0x6606 # -0x6607 # -0x660A # -0x660C # -0x660E # -0x660F # -0x6613 # -0x6614 # -0x661C # -0x661F # -0x6620 # -0x6625 # -0x6627 # -0x6628 # -0x662D # -0x662F # -0x6634 # -0x6635 # -0x6636 # -0x663C # -0x663F # -0x6641 # -0x6642 # -0x6643 # -0x6644 # -0x6649 # -0x664B # -0x664F # -0x6652 # -0x665D # -0x665E # -0x665F # -0x6662 # -0x6664 # -0x6666 # -0x6667 # -0x6668 # -0x6669 # -0x666E # -0x666F # -0x6670 # -0x6674 # -0x6676 # -0x667A # -0x6681 # -0x6683 # -0x6684 # -0x6687 # -0x6688 # -0x6689 # -0x668E # -0x6691 # -0x6696 # -0x6697 # -0x6698 # -0x669D # -0x66A2 # -0x66A6 # -0x66AB # -0x66AE # -0x66B4 # -0x66B8 # -0x66B9 # -0x66BC # -0x66BE # -0x66C1 # -0x66C4 # -0x66C7 # -0x66C9 # -0x66D6 # -0x66D9 # -0x66DA # -0x66DC # -0x66DD # -0x66E0 # -0x66E6 # -0x66E9 # -0x66F0 # -0x66F2 # -0x66F3 # -0x66F4 # -0x66F5 # -0x66F7 # -0x66F8 # -0x66F9 # -0x66FC # -0x66FD # -0x66FE # -0x66FF # -0x6700 # -0x6703 # -0x6708 # -0x6709 # -0x670B # -0x670D # -0x670F # -0x6714 # -0x6715 # -0x6716 # -0x6717 # -0x671B # -0x671D # -0x671E # -0x671F # -0x6726 # -0x6727 # -0x6728 # -0x672A # -0x672B # -0x672C # -0x672D # -0x672E # -0x6731 # -0x6734 # -0x6736 # -0x6737 # -0x6738 # -0x673A # -0x673D # -0x673F # -0x6741 # -0x6746 # -0x6749 # -0x674E # -0x674F # -0x6750 # -0x6751 # -0x6753 # -0x6756 # -0x6759 # -0x675C # -0x675E # -0x675F # -0x6760 # -0x6761 # -0x6762 # -0x6763 # -0x6764 # -0x6765 # -0x676A # -0x676D # -0x676F # -0x6770 # -0x6771 # -0x6772 # -0x6773 # -0x6775 # -0x6777 # -0x677C # -0x677E # -0x677F # -0x6785 # -0x6787 # -0x6789 # -0x678B # -0x678C # -0x6790 # -0x6795 # -0x6797 # -0x679A # -0x679C # -0x679D # -0x67A0 # -0x67A1 # -0x67A2 # -0x67A6 # -0x67A9 # -0x67AF # -0x67B3 # -0x67B4 # -0x67B6 # -0x67B7 # -0x67B8 # -0x67B9 # -0x67C1 # -0x67C4 # -0x67C6 # -0x67CA # -0x67CE # -0x67CF # -0x67D0 # -0x67D1 # -0x67D3 # -0x67D4 # -0x67D8 # -0x67DA # -0x67DD # -0x67DE # -0x67E2 # -0x67E4 # -0x67E7 # -0x67E9 # -0x67EC # -0x67EE # -0x67EF # -0x67F1 # -0x67F3 # -0x67F4 # -0x67F5 # -0x67FB # -0x67FE # -0x67FF # -0x6802 # -0x6803 # -0x6804 # -0x6813 # -0x6816 # -0x6817 # -0x681E # -0x6821 # -0x6822 # -0x6829 # -0x682A # -0x682B # -0x6832 # -0x6834 # -0x6838 # -0x6839 # -0x683C # -0x683D # -0x6840 # -0x6841 # -0x6842 # -0x6843 # -0x6846 # -0x6848 # -0x684D # -0x684E # -0x6850 # -0x6851 # -0x6853 # -0x6854 # -0x6859 # -0x685C # -0x685D # -0x685F # -0x6863 # -0x6867 # -0x6874 # -0x6876 # -0x6877 # -0x687E # -0x687F # -0x6881 # -0x6883 # -0x6885 # -0x688D # -0x688F # -0x6893 # -0x6894 # -0x6897 # -0x689B # -0x689D # -0x689F # -0x68A0 # -0x68A2 # -0x68A6 # -0x68A7 # -0x68A8 # -0x68AD # -0x68AF # -0x68B0 # -0x68B1 # -0x68B3 # -0x68B5 # -0x68B6 # -0x68B9 # -0x68BA # -0x68BC # -0x68C4 # -0x68C6 # -0x68C9 # -0x68CA # -0x68CB # -0x68CD # -0x68D2 # -0x68D4 # -0x68D5 # -0x68D7 # -0x68D8 # -0x68DA # -0x68DF # -0x68E0 # -0x68E1 # -0x68E3 # -0x68E7 # -0x68EE # -0x68EF # -0x68F2 # -0x68F9 # -0x68FA # -0x6900 # -0x6901 # -0x6904 # -0x6905 # -0x6908 # -0x690B # -0x690C # -0x690D # -0x690E # -0x690F # -0x6912 # -0x6919 # -0x691A # -0x691B # -0x691C # -0x6921 # -0x6922 # -0x6923 # -0x6925 # -0x6926 # -0x6928 # -0x692A # -0x6930 # -0x6934 # -0x6936 # -0x6939 # -0x693D # -0x693F # -0x694A # -0x6953 # -0x6954 # -0x6955 # -0x6959 # -0x695A # -0x695C # -0x695D # -0x695E # -0x6960 # -0x6961 # -0x6962 # -0x696A # -0x696B # -0x696D # -0x696E # -0x696F # -0x6973 # -0x6974 # -0x6975 # -0x6977 # -0x6978 # -0x6979 # -0x697C # -0x697D # -0x697E # -0x6981 # -0x6982 # -0x698A # -0x698E # -0x6991 # -0x6994 # -0x6995 # -0x699B # -0x699C # -0x69A0 # -0x69A7 # -0x69AE # -0x69B1 # -0x69B2 # -0x69B4 # -0x69BB # -0x69BE # -0x69BF # -0x69C1 # -0x69C3 # -0x69C7 # -0x69CA # -0x69CB # -0x69CC # -0x69CD # -0x69CE # -0x69D0 # -0x69D3 # -0x69D8 # -0x69D9 # -0x69DD # -0x69DE # -0x69E7 # -0x69E8 # -0x69EB # -0x69ED # -0x69F2 # -0x69F9 # -0x69FB # -0x69FD # -0x69FF # -0x6A02 # -0x6A05 # -0x6A0A # -0x6A0B # -0x6A0C # -0x6A12 # -0x6A13 # -0x6A14 # -0x6A17 # -0x6A19 # -0x6A1B # -0x6A1E # -0x6A1F # -0x6A21 # -0x6A22 # -0x6A23 # -0x6A29 # -0x6A2A # -0x6A2B # -0x6A2E # -0x6A35 # -0x6A36 # -0x6A38 # -0x6A39 # -0x6A3A # -0x6A3D # -0x6A44 # -0x6A47 # -0x6A48 # -0x6A4B # -0x6A58 # -0x6A59 # -0x6A5F # -0x6A61 # -0x6A62 # -0x6A66 # -0x6A72 # -0x6A78 # -0x6A7F # -0x6A80 # -0x6A84 # -0x6A8D # -0x6A8E # -0x6A90 # -0x6A97 # -0x6A9C # -0x6AA0 # -0x6AA2 # -0x6AA3 # -0x6AAA # -0x6AAC # -0x6AAE # -0x6AB3 # -0x6AB8 # -0x6ABB # -0x6AC1 # -0x6AC2 # -0x6AC3 # -0x6AD1 # -0x6AD3 # -0x6ADA # -0x6ADB # -0x6ADE # -0x6ADF # -0x6AE8 # -0x6AEA # -0x6AFA # -0x6AFB # -0x6B04 # -0x6B05 # -0x6B0A # -0x6B12 # -0x6B16 # -0x6B1D # -0x6B1F # -0x6B20 # -0x6B21 # -0x6B23 # -0x6B27 # -0x6B32 # -0x6B37 # -0x6B38 # -0x6B39 # -0x6B3A # -0x6B3D # -0x6B3E # -0x6B43 # -0x6B47 # -0x6B49 # -0x6B4C # -0x6B4E # -0x6B50 # -0x6B53 # -0x6B54 # -0x6B59 # -0x6B5B # -0x6B5F # -0x6B61 # -0x6B62 # -0x6B63 # -0x6B64 # -0x6B66 # -0x6B69 # -0x6B6A # -0x6B6F # -0x6B73 # -0x6B74 # -0x6B78 # -0x6B79 # -0x6B7B # -0x6B7F # -0x6B80 # -0x6B83 # -0x6B84 # -0x6B86 # -0x6B89 # -0x6B8A # -0x6B8B # -0x6B8D # -0x6B95 # -0x6B96 # -0x6B98 # -0x6B9E # -0x6BA4 # -0x6BAA # -0x6BAB # -0x6BAF # -0x6BB1 # -0x6BB2 # -0x6BB3 # -0x6BB4 # -0x6BB5 # -0x6BB7 # -0x6BBA # -0x6BBB # -0x6BBC # -0x6BBF # -0x6BC0 # -0x6BC5 # -0x6BC6 # -0x6BCB # -0x6BCD # -0x6BCE # -0x6BD2 # -0x6BD3 # -0x6BD4 # -0x6BD8 # -0x6BDB # -0x6BDF # -0x6BEB # -0x6BEC # -0x6BEF # -0x6BF3 # -0x6C08 # -0x6C0F # -0x6C11 # -0x6C13 # -0x6C14 # -0x6C17 # -0x6C1B # -0x6C23 # -0x6C24 # -0x6C34 # -0x6C37 # -0x6C38 # -0x6C3E # -0x6C40 # -0x6C41 # -0x6C42 # -0x6C4E # -0x6C50 # -0x6C55 # -0x6C57 # -0x6C5A # -0x6C5D # -0x6C5E # -0x6C5F # -0x6C60 # -0x6C62 # -0x6C68 # -0x6C6A # -0x6C70 # -0x6C72 # -0x6C73 # -0x6C7A # -0x6C7D # -0x6C7E # -0x6C81 # -0x6C82 # -0x6C83 # -0x6C88 # -0x6C8C # -0x6C8D # -0x6C90 # -0x6C92 # -0x6C93 # -0x6C96 # -0x6C99 # -0x6C9A # -0x6C9B # -0x6CA1 # -0x6CA2 # -0x6CAB # -0x6CAE # -0x6CB1 # -0x6CB3 # -0x6CB8 # -0x6CB9 # -0x6CBA # -0x6CBB # -0x6CBC # -0x6CBD # -0x6CBE # -0x6CBF # -0x6CC1 # -0x6CC4 # -0x6CC5 # -0x6CC9 # -0x6CCA # -0x6CCC # -0x6CD3 # -0x6CD5 # -0x6CD7 # -0x6CD9 # -0x6CDB # -0x6CDD # -0x6CE1 # -0x6CE2 # -0x6CE3 # -0x6CE5 # -0x6CE8 # -0x6CEA # -0x6CEF # -0x6CF0 # -0x6CF1 # -0x6CF3 # -0x6D0B # -0x6D0C # -0x6D12 # -0x6D17 # -0x6D19 # -0x6D1B # -0x6D1E # -0x6D1F # -0x6D25 # -0x6D29 # -0x6D2A # -0x6D2B # -0x6D32 # -0x6D33 # -0x6D35 # -0x6D36 # -0x6D38 # -0x6D3B # -0x6D3D # -0x6D3E # -0x6D41 # -0x6D44 # -0x6D45 # -0x6D59 # -0x6D5A # -0x6D5C # -0x6D63 # -0x6D64 # -0x6D66 # -0x6D69 # -0x6D6A # -0x6D6C # -0x6D6E # -0x6D74 # -0x6D77 # -0x6D78 # -0x6D79 # -0x6D85 # -0x6D88 # -0x6D8C # -0x6D8E # -0x6D93 # -0x6D95 # -0x6D99 # -0x6D9B # -0x6D9C # -0x6DAF # -0x6DB2 # -0x6DB5 # -0x6DB8 # -0x6DBC # -0x6DC0 # -0x6DC5 # -0x6DC6 # -0x6DC7 # -0x6DCB # -0x6DCC # -0x6DD1 # -0x6DD2 # -0x6DD5 # -0x6DD8 # -0x6DD9 # -0x6DDE # -0x6DE1 # -0x6DE4 # -0x6DE6 # -0x6DE8 # -0x6DEA # -0x6DEB # -0x6DEC # -0x6DEE # -0x6DF1 # -0x6DF3 # -0x6DF5 # -0x6DF7 # -0x6DF9 # -0x6DFA # -0x6DFB # -0x6E05 # -0x6E07 # -0x6E08 # -0x6E09 # -0x6E0A # -0x6E0B # -0x6E13 # -0x6E15 # -0x6E19 # -0x6E1A # -0x6E1B # -0x6E1D # -0x6E1F # -0x6E20 # -0x6E21 # -0x6E23 # -0x6E24 # -0x6E25 # -0x6E26 # -0x6E29 # -0x6E2B # -0x6E2C # -0x6E2D # -0x6E2E # -0x6E2F # -0x6E38 # -0x6E3A # -0x6E3E # -0x6E43 # -0x6E4A # -0x6E4D # -0x6E4E # -0x6E56 # -0x6E58 # -0x6E5B # -0x6E5F # -0x6E67 # -0x6E6B # -0x6E6E # -0x6E6F # -0x6E72 # -0x6E76 # -0x6E7E # -0x6E7F # -0x6E80 # -0x6E82 # -0x6E8C # -0x6E8F # -0x6E90 # -0x6E96 # -0x6E98 # -0x6E9C # -0x6E9D # -0x6E9F # -0x6EA2 # -0x6EA5 # -0x6EAA # -0x6EAF # -0x6EB2 # -0x6EB6 # -0x6EB7 # -0x6EBA # -0x6EBD # -0x6EC2 # -0x6EC4 # -0x6EC5 # -0x6EC9 # -0x6ECB # -0x6ECC # -0x6ED1 # -0x6ED3 # -0x6ED4 # -0x6ED5 # -0x6EDD # -0x6EDE # -0x6EEC # -0x6EEF # -0x6EF2 # -0x6EF4 # -0x6EF7 # -0x6EF8 # -0x6EFE # -0x6EFF # -0x6F01 # -0x6F02 # -0x6F06 # -0x6F09 # -0x6F0F # -0x6F11 # -0x6F13 # -0x6F14 # -0x6F15 # -0x6F20 # -0x6F22 # -0x6F23 # -0x6F2B # -0x6F2C # -0x6F31 # -0x6F32 # -0x6F38 # -0x6F3E # -0x6F3F # -0x6F41 # -0x6F45 # -0x6F54 # -0x6F58 # -0x6F5B # -0x6F5C # -0x6F5F # -0x6F64 # -0x6F66 # -0x6F6D # -0x6F6E # -0x6F6F # -0x6F70 # -0x6F74 # -0x6F78 # -0x6F7A # -0x6F7C # -0x6F80 # -0x6F81 # -0x6F82 # -0x6F84 # -0x6F86 # -0x6F8E # -0x6F91 # -0x6F97 # -0x6FA1 # -0x6FA3 # -0x6FA4 # -0x6FAA # -0x6FB1 # -0x6FB3 # -0x6FB9 # -0x6FC0 # -0x6FC1 # -0x6FC2 # -0x6FC3 # -0x6FC6 # -0x6FD4 # -0x6FD5 # -0x6FD8 # -0x6FDB # -0x6FDF # -0x6FE0 # -0x6FE1 # -0x6FE4 # -0x6FEB # -0x6FEC # -0x6FEE # -0x6FEF # -0x6FF1 # -0x6FF3 # -0x6FF6 # -0x6FFA # -0x6FFE # -0x7001 # -0x7009 # -0x700B # -0x700F # -0x7011 # -0x7015 # -0x7018 # -0x701A # -0x701B # -0x701D # -0x701E # -0x701F # -0x7026 # -0x7027 # -0x702C # -0x7030 # -0x7032 # -0x703E # -0x704C # -0x7051 # -0x7058 # -0x7063 # -0x706B # -0x706F # -0x7070 # -0x7078 # -0x707C # -0x707D # -0x7089 # -0x708A # -0x708E # -0x7092 # -0x7099 # -0x70AC # -0x70AD # -0x70AE # -0x70AF # -0x70B3 # -0x70B8 # -0x70B9 # -0x70BA # -0x70C8 # -0x70CB # -0x70CF # -0x70D9 # -0x70DD # -0x70DF # -0x70F1 # -0x70F9 # -0x70FD # -0x7109 # -0x7114 # -0x7119 # -0x711A # -0x711C # -0x7121 # -0x7126 # -0x7136 # -0x713C # -0x7149 # -0x714C # -0x714E # -0x7155 # -0x7156 # -0x7159 # -0x7162 # -0x7164 # -0x7165 # -0x7166 # -0x7167 # -0x7169 # -0x716C # -0x716E # -0x717D # -0x7184 # -0x7188 # -0x718A # -0x718F # -0x7194 # -0x7195 # -#0x7199 # # not in kochi fonts -0x719F # -0x71A8 # -0x71AC # -0x71B1 # -0x71B9 # -0x71BE # -0x71C3 # -0x71C8 # -0x71C9 # -0x71CE # -0x71D0 # -0x71D2 # -0x71D4 # -0x71D5 # -0x71D7 # -0x71DF # -0x71E0 # -0x71E5 # -0x71E6 # -0x71E7 # -0x71EC # -0x71ED # -0x71EE # -0x71F5 # -0x71F9 # -0x71FB # -0x71FC # -0x71FF # -0x7206 # -0x720D # -0x7210 # -0x721B # -0x7228 # -0x722A # -0x722C # -0x722D # -0x7230 # -0x7232 # -0x7235 # -0x7236 # -0x723A # -0x723B # -0x723C # -0x723D # -0x723E # -0x723F # -0x7240 # -0x7246 # -0x7247 # -0x7248 # -0x724B # -0x724C # -0x7252 # -0x7258 # -0x7259 # -0x725B # -0x725D # -0x725F # -0x7261 # -0x7262 # -0x7267 # -0x7269 # -0x7272 # -0x7274 # -0x7279 # -0x727D # -0x727E # -0x7280 # -0x7281 # -0x7282 # -0x7287 # -0x7292 # -0x7296 # -0x72A0 # -0x72A2 # -0x72A7 # -0x72AC # -0x72AF # -0x72B2 # -0x72B6 # -0x72B9 # -0x72C2 # -0x72C3 # -0x72C4 # -0x72C6 # -0x72CE # -0x72D0 # -0x72D2 # -0x72D7 # -0x72D9 # -0x72DB # -0x72E0 # -0x72E1 # -0x72E2 # -0x72E9 # -0x72EC # -0x72ED # -0x72F7 # -0x72F8 # -0x72F9 # -0x72FC # -0x72FD # -0x730A # -0x7316 # -0x7317 # -0x731B # -0x731C # -0x731D # -0x731F # -0x7325 # -0x7329 # -0x732A # -0x732B # -0x732E # -0x732F # -0x7334 # -0x7336 # -0x7337 # -0x733E # -0x733F # -0x7344 # -0x7345 # -0x734E # -0x734F # -0x7357 # -0x7363 # -0x7368 # -0x736A # -0x7370 # -0x7372 # -0x7375 # -0x7378 # -0x737A # -0x737B # -0x7384 # -0x7387 # -0x7389 # -0x738B # -0x7396 # -0x73A9 # -0x73B2 # -0x73B3 # -0x73BB # -0x73C0 # -0x73C2 # -0x73C8 # -0x73CA # -0x73CD # -0x73CE # -0x73DE # -0x73E0 # -0x73E5 # -0x73EA # -0x73ED # -0x73EE # -0x73F1 # -0x73F8 # -0x73FE # -0x7403 # -0x7405 # -0x7406 # -0x7409 # -0x7422 # -0x7425 # -0x7432 # -0x7433 # -0x7434 # -0x7435 # -0x7436 # -0x743A # -0x743F # -0x7441 # -0x7455 # -0x7459 # -0x745A # -0x745B # -0x745C # -0x745E # -0x745F # -0x7460 # -0x7463 # -0x7464 # -0x7469 # -0x746A # -0x746F # -0x7470 # -0x7473 # -0x7476 # -0x747E # -0x7483 # -0x748B # -0x749E # -0x74A2 # -0x74A7 # -0x74B0 # -0x74BD # -0x74CA # -0x74CF # -0x74D4 # -0x74DC # -0x74E0 # -0x74E2 # -0x74E3 # -0x74E6 # -0x74E7 # -0x74E9 # -0x74EE # -0x74F0 # -0x74F1 # -0x74F2 # -0x74F6 # -0x74F7 # -0x74F8 # -0x7503 # -0x7504 # -0x7505 # -0x750C # -0x750D # -0x750E # -0x7511 # -0x7513 # -0x7515 # -0x7518 # -0x751A # -0x751C # -0x751E # -0x751F # -0x7523 # -0x7525 # -0x7526 # -0x7528 # -0x752B # -0x752C # -0x7530 # -0x7531 # -0x7532 # -0x7533 # -0x7537 # -0x7538 # -0x753A # -0x753B # -0x753C # -0x7544 # -0x7546 # -0x7549 # -0x754A # -0x754B # -0x754C # -0x754D # -0x754F # -0x7551 # -0x7554 # -0x7559 # -0x755A # -0x755B # -0x755C # -0x755D # -0x7560 # -0x7562 # -0x7564 # -0x7565 # -0x7566 # -0x7567 # -0x7569 # -0x756A # -0x756B # -0x756D # -0x7570 # -0x7573 # -0x7574 # -0x7576 # -0x7577 # -0x7578 # -0x757F # -0x7582 # -0x7586 # -0x7587 # -0x7589 # -0x758A # -0x758B # -0x758E # -0x758F # -0x7591 # -0x7594 # -0x759A # -0x759D # -0x75A3 # -0x75A5 # -0x75AB # -0x75B1 # -0x75B2 # -0x75B3 # -0x75B5 # -0x75B8 # -0x75B9 # -0x75BC # -0x75BD # -0x75BE # -0x75C2 # -0x75C3 # -0x75C5 # -0x75C7 # -0x75CA # -0x75CD # -0x75D2 # -0x75D4 # -0x75D5 # -0x75D8 # -0x75D9 # -0x75DB # -0x75DE # -0x75E2 # -0x75E3 # -0x75E9 # -0x75F0 # -0x75F2 # -0x75F3 # -0x75F4 # -0x75FA # -0x75FC # -0x75FE # -0x75FF # -0x7601 # -0x7609 # -0x760B # -0x760D # -0x761F # -0x7620 # -0x7621 # -0x7622 # -0x7624 # -0x7627 # -0x7630 # -0x7634 # -0x763B # -0x7642 # -0x7646 # -0x7647 # -0x7648 # -0x764C # -0x7652 # -0x7656 # -0x7658 # -0x765C # -0x7661 # -0x7662 # -0x7667 # -0x7668 # -0x7669 # -0x766A # -0x766C # -0x7670 # -0x7672 # -0x7676 # -0x7678 # -0x767A # -0x767B # -0x767C # -0x767D # -0x767E # -0x7680 # -0x7683 # -0x7684 # -0x7686 # -0x7687 # -0x7688 # -0x768B # -0x768E # -0x7690 # -0x7693 # -0x7696 # -0x7699 # -0x769A # -0x76AE # -0x76B0 # -0x76B4 # -0x76B7 # -0x76B8 # -0x76B9 # -0x76BA # -0x76BF # -0x76C2 # -0x76C3 # -0x76C6 # -0x76C8 # -0x76CA # -0x76CD # -0x76D2 # -0x76D6 # -0x76D7 # -0x76DB # -0x76DC # -0x76DE # -0x76DF # -0x76E1 # -0x76E3 # -0x76E4 # -0x76E5 # -0x76E7 # -0x76EA # -0x76EE # -0x76F2 # -0x76F4 # -0x76F8 # -0x76FB # -0x76FE # -0x7701 # -0x7704 # -0x7707 # -0x7708 # -0x7709 # -0x770B # -0x770C # -0x771B # -0x771E # -0x771F # -0x7720 # -0x7724 # -0x7725 # -0x7726 # -0x7729 # -0x7737 # -0x7738 # -0x773A # -0x773C # -0x7740 # -0x7747 # -0x775A # -0x775B # -0x7761 # -0x7763 # -0x7765 # -0x7766 # -0x7768 # -0x776B # -0x7779 # -0x777E # -0x777F # -0x778B # -0x778E # -0x7791 # -0x779E # -0x77A0 # -0x77A5 # -0x77AC # -0x77AD # -0x77B0 # -0x77B3 # -0x77B6 # -0x77B9 # -0x77BB # -0x77BC # -0x77BD # -0x77BF # -0x77C7 # -0x77CD # -0x77D7 # -0x77DA # -0x77DB # -0x77DC # -0x77E2 # -0x77E3 # -0x77E5 # -0x77E7 # -0x77E9 # -0x77ED # -0x77EE # -0x77EF # -0x77F3 # -0x77FC # -0x7802 # -0x780C # -0x7812 # -0x7814 # -0x7815 # -0x7820 # -0x7825 # -0x7826 # -0x7827 # -0x7832 # -0x7834 # -0x783A # -0x783F # -0x7845 # -0x785D # -0x786B # -0x786C # -0x786F # -0x7872 # -0x7874 # -0x787C # -0x7881 # -0x7886 # -0x7887 # -0x788C # -0x788D # -0x788E # -0x7891 # -0x7893 # -0x7895 # -0x7897 # -0x789A # -0x78A3 # -0x78A7 # -0x78A9 # -0x78AA # -0x78AF # -0x78B5 # -0x78BA # -0x78BC # -0x78BE # -0x78C1 # -0x78C5 # -0x78C6 # -0x78CA # -0x78CB # -0x78D0 # -0x78D1 # -0x78D4 # -0x78DA # -0x78E7 # -0x78E8 # -0x78EC # -0x78EF # -0x78F4 # -0x78FD # -0x7901 # -0x7907 # -0x790E # -0x7911 # -0x7912 # -0x7919 # -0x7926 # -0x792A # -0x792B # -0x792C # -0x793A # -0x793C # -0x793E # -0x7940 # -0x7941 # -0x7947 # -0x7948 # -0x7949 # -0x7950 # -0x7953 # -0x7955 # -0x7956 # -0x7957 # -0x795A # -0x795D # -0x795E # -0x795F # -0x7960 # -0x7962 # -0x7965 # -0x7968 # -0x796D # -0x7977 # -0x797A # -0x797F # -0x7980 # -0x7981 # -0x7984 # -0x7985 # -0x798A # -0x798D # -0x798E # -0x798F # -0x799D # -0x79A6 # -0x79A7 # -0x79AA # -0x79AE # -0x79B0 # -0x79B3 # -0x79B9 # -0x79BA # -0x79BD # -0x79BE # -0x79BF # -0x79C0 # -0x79C1 # -0x79C9 # -0x79CB # -0x79D1 # -0x79D2 # -0x79D5 # -0x79D8 # -0x79DF # -0x79E1 # -0x79E3 # -0x79E4 # -0x79E6 # -0x79E7 # -0x79E9 # -0x79EC # -0x79F0 # -0x79FB # -0x7A00 # -0x7A08 # -0x7A0B # -0x7A0D # -0x7A0E # -0x7A14 # -0x7A17 # -0x7A18 # -0x7A19 # -0x7A1A # -0x7A1C # -0x7A1F # -0x7A20 # -0x7A2E # -0x7A31 # -0x7A32 # -0x7A37 # -0x7A3B # -0x7A3C # -0x7A3D # -0x7A3E # -0x7A3F # -0x7A40 # -0x7A42 # -0x7A43 # -0x7A46 # -0x7A49 # -0x7A4D # -0x7A4E # -0x7A4F # -0x7A50 # -0x7A57 # -0x7A61 # -0x7A62 # -0x7A63 # -0x7A69 # -0x7A6B # -0x7A70 # -0x7A74 # -0x7A76 # -0x7A79 # -0x7A7A # -0x7A7D # -0x7A7F # -0x7A81 # -0x7A83 # -0x7A84 # -0x7A88 # -0x7A92 # -0x7A93 # -0x7A95 # -0x7A96 # -0x7A97 # -0x7A98 # -0x7A9F # -0x7AA9 # -0x7AAA # -0x7AAE # -0x7AAF # -0x7AB0 # -0x7AB6 # -0x7ABA # -0x7ABF # -0x7AC3 # -0x7AC4 # -0x7AC5 # -0x7AC7 # -0x7AC8 # -0x7ACA # -0x7ACB # -0x7ACD # -0x7ACF # -0x7AD2 # -0x7AD3 # -0x7AD5 # -0x7AD9 # -0x7ADA # -0x7ADC # -0x7ADD # -0x7ADF # -0x7AE0 # -0x7AE1 # -0x7AE2 # -0x7AE3 # -0x7AE5 # -0x7AE6 # -0x7AEA # -0x7AED # -0x7AEF # -0x7AF0 # -0x7AF6 # -0x7AF8 # -0x7AF9 # -0x7AFA # -0x7AFF # -0x7B02 # -0x7B04 # -0x7B06 # -0x7B08 # -0x7B0A # -0x7B0B # -0x7B0F # -0x7B11 # -0x7B18 # -0x7B19 # -0x7B1B # -0x7B1E # -0x7B20 # -0x7B25 # -0x7B26 # -0x7B28 # -0x7B2C # -0x7B33 # -0x7B35 # -0x7B36 # -0x7B39 # -0x7B45 # -0x7B46 # -0x7B48 # -0x7B49 # -0x7B4B # -0x7B4C # -0x7B4D # -0x7B4F # -0x7B50 # -0x7B51 # -0x7B52 # -0x7B54 # -0x7B56 # -0x7B5D # -0x7B65 # -0x7B67 # -0x7B6C # -0x7B6E # -0x7B70 # -0x7B71 # -0x7B74 # -0x7B75 # -0x7B7A # -0x7B86 # -0x7B87 # -0x7B8B # -0x7B8D # -0x7B8F # -0x7B92 # -0x7B94 # -0x7B95 # -0x7B97 # -0x7B98 # -0x7B99 # -0x7B9A # -0x7B9C # -0x7B9D # -0x7B9F # -0x7BA1 # -0x7BAA # -0x7BAD # -0x7BB1 # -0x7BB4 # -0x7BB8 # -0x7BC0 # -0x7BC1 # -0x7BC4 # -0x7BC6 # -0x7BC7 # -0x7BC9 # -0x7BCB # -0x7BCC # -0x7BCF # -0x7BDD # -0x7BE0 # -0x7BE4 # -0x7BE5 # -0x7BE6 # -0x7BE9 # -0x7BED # -0x7BF3 # -0x7BF6 # -0x7BF7 # -0x7C00 # -0x7C07 # -0x7C0D # -0x7C11 # -0x7C12 # -0x7C13 # -0x7C14 # -0x7C17 # -0x7C1F # -0x7C21 # -0x7C23 # -0x7C27 # -0x7C2A # -0x7C2B # -0x7C37 # -0x7C38 # -0x7C3D # -0x7C3E # -0x7C3F # -0x7C40 # -0x7C43 # -0x7C4C # -0x7C4D # -0x7C4F # -0x7C50 # -0x7C54 # -0x7C56 # -0x7C58 # -0x7C5F # -0x7C60 # -0x7C64 # -0x7C65 # -0x7C6C # -0x7C73 # -0x7C75 # -0x7C7E # -0x7C81 # -0x7C82 # -0x7C83 # -0x7C89 # -0x7C8B # -0x7C8D # -0x7C90 # -0x7C92 # -0x7C95 # -0x7C97 # -0x7C98 # -0x7C9B # -0x7C9F # -0x7CA1 # -0x7CA2 # -0x7CA4 # -0x7CA5 # -0x7CA7 # -0x7CA8 # -0x7CAB # -0x7CAD # -0x7CAE # -0x7CB1 # -0x7CB2 # -0x7CB3 # -0x7CB9 # -0x7CBD # -0x7CBE # -0x7CC0 # -0x7CC2 # -0x7CC5 # -0x7CCA # -0x7CCE # -0x7CD2 # -0x7CD6 # -0x7CD8 # -0x7CDC # -0x7CDE # -0x7CDF # -0x7CE0 # -0x7CE2 # -0x7CE7 # -0x7CEF # -0x7CF2 # -0x7CF4 # -0x7CF6 # -0x7CF8 # -0x7CFA # -0x7CFB # -0x7CFE # -0x7D00 # -0x7D02 # -0x7D04 # -0x7D05 # -0x7D06 # -0x7D0A # -0x7D0B # -0x7D0D # -0x7D10 # -0x7D14 # -0x7D15 # -0x7D17 # -0x7D18 # -0x7D19 # -0x7D1A # -0x7D1B # -0x7D1C # -0x7D20 # -0x7D21 # -0x7D22 # -0x7D2B # -0x7D2C # -0x7D2E # -0x7D2F # -0x7D30 # -0x7D32 # -0x7D33 # -0x7D35 # -0x7D39 # -0x7D3A # -0x7D3F # -0x7D42 # -0x7D43 # -0x7D44 # -0x7D45 # -0x7D46 # -0x7D4B # -0x7D4C # -0x7D4E # -0x7D4F # -0x7D50 # -0x7D56 # -0x7D5B # -0x7D5E # -0x7D61 # -0x7D62 # -0x7D63 # -0x7D66 # -0x7D68 # -0x7D6E # -0x7D71 # -0x7D72 # -0x7D73 # -0x7D75 # -0x7D76 # -0x7D79 # -0x7D7D # -0x7D89 # -0x7D8F # -0x7D93 # -0x7D99 # -0x7D9A # -0x7D9B # -0x7D9C # -0x7D9F # -0x7DA2 # -0x7DA3 # -0x7DAB # -0x7DAC # -0x7DAD # -0x7DAE # -0x7DAF # -0x7DB0 # -0x7DB1 # -0x7DB2 # -0x7DB4 # -0x7DB5 # -0x7DB8 # -0x7DBA # -0x7DBB # -0x7DBD # -0x7DBE # -0x7DBF # -0x7DC7 # -0x7DCA # -0x7DCB # -0x7DCF # -0x7DD1 # -0x7DD2 # -0x7DD5 # -0x7DD8 # -0x7DDA # -0x7DDC # -0x7DDD # -0x7DDE # -0x7DE0 # -0x7DE1 # -0x7DE4 # -0x7DE8 # -0x7DE9 # -0x7DEC # -0x7DEF # -0x7DF2 # -0x7DF4 # -0x7DFB # -0x7E01 # -0x7E04 # -0x7E05 # -0x7E09 # -0x7E0A # -0x7E0B # -0x7E12 # -0x7E1B # -0x7E1E # -0x7E1F # -0x7E21 # -0x7E22 # -0x7E23 # -0x7E26 # -0x7E2B # -0x7E2E # -0x7E31 # -0x7E32 # -0x7E35 # -0x7E37 # -0x7E39 # -0x7E3A # -0x7E3B # -0x7E3D # -0x7E3E # -0x7E41 # -0x7E43 # -0x7E46 # -0x7E4A # -0x7E4B # -0x7E4D # -0x7E54 # -0x7E55 # -0x7E56 # -0x7E59 # -0x7E5A # -0x7E5D # -0x7E5E # -0x7E66 # -0x7E67 # -0x7E69 # -0x7E6A # -0x7E6D # -0x7E70 # -0x7E79 # -0x7E7B # -0x7E7C # -0x7E7D # -0x7E7F # -0x7E82 # -0x7E83 # -0x7E88 # -0x7E89 # -0x7E8C # -0x7E8E # -0x7E8F # -0x7E90 # -0x7E92 # -0x7E93 # -0x7E94 # -0x7E96 # -0x7E9B # -0x7E9C # -0x7F36 # -0x7F38 # -0x7F3A # -0x7F45 # -0x7F4C # -0x7F4D # -0x7F4E # -0x7F50 # -0x7F51 # -0x7F54 # -0x7F55 # -0x7F58 # -0x7F5F # -0x7F60 # -0x7F67 # -0x7F68 # -0x7F69 # -0x7F6A # -0x7F6B # -0x7F6E # -0x7F70 # -0x7F72 # -0x7F75 # -0x7F77 # -0x7F78 # -0x7F79 # -0x7F82 # -0x7F83 # -0x7F85 # -0x7F86 # -0x7F87 # -0x7F88 # -0x7F8A # -0x7F8C # -0x7F8E # -0x7F94 # -0x7F9A # -0x7F9D # -0x7F9E # -0x7FA3 # -0x7FA4 # -0x7FA8 # -0x7FA9 # -0x7FAE # -0x7FAF # -0x7FB2 # -0x7FB6 # -0x7FB8 # -0x7FB9 # -0x7FBD # -0x7FC1 # -0x7FC5 # -0x7FC6 # -0x7FCA # -0x7FCC # -0x7FD2 # -0x7FD4 # -0x7FD5 # -0x7FE0 # -0x7FE1 # -0x7FE6 # -0x7FE9 # -0x7FEB # -0x7FF0 # -0x7FF3 # -0x7FF9 # -0x7FFB # -0x7FFC # -0x8000 # -0x8001 # -0x8003 # -0x8004 # -0x8005 # -0x8006 # -0x800B # -0x800C # -0x8010 # -0x8012 # -0x8015 # -0x8017 # -0x8018 # -0x8019 # -0x801C # -0x8021 # -0x8028 # -0x8033 # -0x8036 # -0x803B # -0x803D # -0x803F # -0x8046 # -0x804A # -0x8052 # -0x8056 # -0x8058 # -0x805A # -0x805E # -0x805F # -0x8061 # -0x8062 # -0x8068 # -0x806F # -0x8070 # -0x8072 # -0x8073 # -0x8074 # -0x8076 # -0x8077 # -0x8079 # -0x807D # -0x807E # -0x807F # -0x8084 # -0x8085 # -0x8086 # -0x8087 # -0x8089 # -0x808B # -0x808C # -0x8093 # -0x8096 # -0x8098 # -0x809A # -0x809B # -0x809D # -0x80A1 # -0x80A2 # -0x80A5 # -0x80A9 # -0x80AA # -0x80AC # -0x80AD # -0x80AF # -0x80B1 # -0x80B2 # -0x80B4 # -0x80BA # -0x80C3 # -0x80C4 # -0x80C6 # -0x80CC # -0x80CE # -0x80D6 # -0x80D9 # -0x80DA # -0x80DB # -0x80DD # -0x80DE # -0x80E1 # -0x80E4 # -0x80E5 # -0x80EF # -0x80F1 # -0x80F4 # -0x80F8 # -0x80FC # -0x80FD # -0x8102 # -0x8105 # -0x8106 # -0x8107 # -0x8108 # -0x8109 # -0x810A # -0x811A # -0x811B # -0x8123 # -0x8129 # -0x812F # -0x8131 # -0x8133 # -0x8139 # -0x813E # -0x8146 # -0x814B # -0x814E # -0x8150 # -0x8151 # -0x8153 # -0x8154 # -0x8155 # -0x815F # -0x8165 # -0x8166 # -0x816B # -0x816E # -0x8170 # -0x8171 # -0x8174 # -0x8178 # -0x8179 # -0x817A # -0x817F # -0x8180 # -0x8182 # -0x8183 # -0x8188 # -0x818A # -0x818F # -0x8193 # -0x8195 # -0x819A # -0x819C # -0x819D # -0x81A0 # -0x81A3 # -0x81A4 # -0x81A8 # -0x81A9 # -0x81B0 # -0x81B3 # -0x81B5 # -0x81B8 # -0x81BA # -0x81BD # -0x81BE # -0x81BF # -0x81C0 # -0x81C2 # -0x81C6 # -0x81C8 # -0x81C9 # -0x81CD # -0x81D1 # -0x81D3 # -0x81D8 # -0x81D9 # -0x81DA # -0x81DF # -0x81E0 # -0x81E3 # -0x81E5 # -0x81E7 # -0x81E8 # -0x81EA # -0x81ED # -0x81F3 # -0x81F4 # -0x81FA # -0x81FB # -0x81FC # -0x81FE # -0x8201 # -0x8202 # -0x8205 # -0x8207 # -0x8208 # -0x8209 # -0x820A # -0x820C # -0x820D # -0x820E # -0x8210 # -0x8212 # -0x8216 # -0x8217 # -0x8218 # -0x821B # -0x821C # -0x821E # -0x821F # -0x8229 # -0x822A # -0x822B # -0x822C # -0x822E # -0x8233 # -0x8235 # -0x8236 # -0x8237 # -0x8238 # -0x8239 # -0x8240 # -0x8247 # -0x8258 # -0x8259 # -0x825A # -0x825D # -0x825F # -0x8262 # -0x8264 # -0x8266 # -0x8268 # -0x826A # -0x826B # -0x826E # -0x826F # -0x8271 # -0x8272 # -0x8276 # -0x8277 # -0x8278 # -0x827E # -0x828B # -0x828D # -0x8292 # -0x8299 # -0x829D # -0x829F # -0x82A5 # -0x82A6 # -0x82AB # -0x82AC # -0x82AD # -0x82AF # -0x82B1 # -0x82B3 # -0x82B8 # -0x82B9 # -0x82BB # -0x82BD # -0x82C5 # -0x82D1 # -0x82D2 # -0x82D3 # -0x82D4 # -0x82D7 # -0x82D9 # -0x82DB # -0x82DC # -0x82DE # -0x82DF # -0x82E1 # -0x82E3 # -0x82E5 # -0x82E6 # -0x82E7 # -0x82EB # -0x82F1 # -0x82F3 # -0x82F4 # -0x82F9 # -0x82FA # -0x82FB # -0x8302 # -0x8303 # -0x8304 # -0x8305 # -0x8306 # -0x8309 # -0x830E # -0x8316 # -0x8317 # -0x8318 # -0x831C # -0x8323 # -0x8328 # -0x832B # -0x832F # -0x8331 # -0x8332 # -0x8334 # -0x8335 # -0x8336 # -0x8338 # -0x8339 # -0x8340 # -0x8345 # -0x8349 # -0x834A # -0x834F # -0x8350 # -0x8352 # -0x8358 # -0x8373 # -0x8375 # -0x8377 # -0x837B # -0x837C # -0x8385 # -0x8387 # -0x8389 # -0x838A # -0x838E # -0x8393 # -0x8396 # -0x839A # -0x839E # -0x839F # -0x83A0 # -0x83A2 # -0x83A8 # -0x83AA # -0x83AB # -0x83B1 # -0x83B5 # -0x83BD # -0x83C1 # -0x83C5 # -0x83CA # -0x83CC # -0x83CE # -0x83D3 # -0x83D6 # -0x83D8 # -0x83DC # -0x83DF # -0x83E0 # -0x83E9 # -0x83EB # -0x83EF # -0x83F0 # -0x83F1 # -0x83F2 # -0x83F4 # -0x83F7 # -0x83FB # -0x83FD # -0x8403 # -0x8404 # -0x8407 # -0x840B # -0x840C # -0x840D # -0x840E # -0x8413 # -0x8420 # -0x8422 # -0x8429 # -0x842A # -0x842C # -0x8431 # -0x8435 # -0x8438 # -0x843C # -0x843D # -0x8446 # -0x8449 # -0x844E # -0x8457 # -0x845B # -0x8461 # -0x8462 # -0x8463 # -0x8466 # -0x8469 # -0x846B # -0x846C # -0x846D # -0x846E # -0x846F # -0x8471 # -0x8475 # -0x8477 # -0x8479 # -0x847A # -0x8482 # -0x8484 # -0x848B # -0x8490 # -0x8494 # -0x8499 # -0x849C # -0x849F # -0x84A1 # -0x84AD # -0x84B2 # -0x84B8 # -0x84B9 # -0x84BB # -0x84BC # -0x84BF # -0x84C1 # -0x84C4 # -0x84C6 # -0x84C9 # -0x84CA # -0x84CB # -0x84CD # -0x84D0 # -0x84D1 # -0x84D6 # -0x84D9 # -0x84DA # -0x84EC # -0x84EE # -0x84F4 # -0x84FC # -0x84FF # -0x8500 # -0x8506 # -0x8511 # -0x8513 # -0x8514 # -0x8515 # -0x8517 # -0x8518 # -0x851A # -0x851F # -0x8521 # -0x8526 # -0x852C # -0x852D # -0x8535 # -0x853D # -0x8540 # -0x8541 # -0x8543 # -0x8548 # -0x8549 # -0x854A # -0x854B # -0x854E # -0x8555 # -0x8557 # -0x8558 # -0x855A # -0x8563 # -0x8568 # -0x8569 # -0x856A # -0x856D # -0x8577 # -0x857E # -0x8580 # -0x8584 # -0x8587 # -0x8588 # -0x858A # -0x8590 # -0x8591 # -0x8594 # -0x8597 # -0x8599 # -0x859B # -0x859C # -0x85A4 # -0x85A6 # -0x85A8 # -0x85A9 # -0x85AA # -0x85AB # -0x85AC # -0x85AE # -0x85AF # -0x85B9 # -0x85BA # -0x85C1 # -0x85C9 # -0x85CD # -0x85CF # -0x85D0 # -0x85D5 # -0x85DC # -0x85DD # -0x85E4 # -0x85E5 # -0x85E9 # -0x85EA # -0x85F7 # -0x85F9 # -0x85FA # -0x85FB # -0x85FE # -0x8602 # -0x8606 # -0x8607 # -0x860A # -0x860B # -0x8613 # -0x8616 # -0x8617 # -0x861A # -0x8622 # -0x862D # -0x862F # -0x8630 # -0x863F # -0x864D # -0x864E # -0x8650 # -0x8654 # -0x8655 # -0x865A # -0x865C # -0x865E # -0x865F # -0x8667 # -0x866B # -0x8671 # -0x8679 # -0x867B # -0x868A # -0x868B # -0x868C # -0x8693 # -0x8695 # -0x86A3 # -0x86A4 # -0x86A9 # -0x86AA # -0x86AB # -0x86AF # -0x86B0 # -0x86B6 # -0x86C4 # -0x86C6 # -0x86C7 # -0x86C9 # -0x86CB # -0x86CD # -0x86CE # -0x86D4 # -0x86D9 # -0x86DB # -0x86DE # -0x86DF # -0x86E4 # -0x86E9 # -0x86EC # -0x86ED # -0x86EE # -0x86EF # -0x86F8 # -0x86F9 # -0x86FB # -0x86FE # -0x8700 # -0x8702 # -0x8703 # -0x8706 # -0x8708 # -0x8709 # -0x870A # -0x870D # -0x8711 # -0x8712 # -0x8718 # -0x871A # -0x871C # -0x8725 # -0x8729 # -0x8734 # -0x8737 # -0x873B # -0x873F # -0x8749 # -0x874B # -0x874C # -0x874E # -0x8753 # -0x8755 # -0x8757 # -0x8759 # -0x875F # -0x8760 # -0x8763 # -0x8766 # -0x8768 # -0x876A # -0x876E # -0x8774 # -0x8776 # -0x8778 # -0x877F # -0x8782 # -0x878D # -0x879F # -0x87A2 # -0x87AB # -0x87AF # -0x87B3 # -0x87BA # -0x87BB # -0x87BD # -0x87C0 # -0x87C4 # -0x87C6 # -0x87C7 # -0x87CB # -0x87D0 # -0x87D2 # -0x87E0 # -0x87EF # -0x87F2 # -0x87F6 # -0x87F7 # -0x87F9 # -0x87FB # -0x87FE # -0x8805 # -0x880D # -0x880E # -0x880F # -0x8811 # -0x8815 # -0x8816 # -0x8821 # -0x8822 # -0x8823 # -0x8827 # -0x8831 # -0x8836 # -0x8839 # -0x883B # -0x8840 # -0x8842 # -0x8844 # -0x8846 # -0x884C # -0x884D # -0x8852 # -0x8853 # -0x8857 # -0x8859 # -0x885B # -0x885D # -0x885E # -0x8861 # -0x8862 # -0x8863 # -0x8868 # -0x886B # -0x8870 # -0x8872 # -0x8875 # -0x8877 # -0x887D # -0x887E # -0x887F # -0x8881 # -0x8882 # -0x8888 # -0x888B # -0x888D # -0x8892 # -0x8896 # -0x8897 # -0x8899 # -0x889E # -0x88A2 # -0x88A4 # -0x88AB # -0x88AE # -0x88B0 # -0x88B1 # -0x88B4 # -0x88B5 # -0x88B7 # -0x88BF # -0x88C1 # -0x88C2 # -0x88C3 # -0x88C4 # -0x88C5 # -0x88CF # -0x88D4 # -0x88D5 # -0x88D8 # -0x88D9 # -0x88DC # -0x88DD # -0x88DF # -0x88E1 # -0x88E8 # -0x88F2 # -0x88F3 # -0x88F4 # -0x88F8 # -0x88F9 # -0x88FC # -0x88FD # -0x88FE # -0x8902 # -0x8904 # -0x8907 # -0x890A # -0x890C # -0x8910 # -0x8912 # -0x8913 # -0x891D # -0x891E # -0x8925 # -0x892A # -0x892B # -0x8936 # -0x8938 # -0x893B # -0x8941 # -0x8943 # -0x8944 # -0x894C # -0x894D # -0x8956 # -0x895E # -0x895F # -0x8960 # -0x8964 # -0x8966 # -0x896A # -0x896D # -0x896F # -0x8972 # -0x8974 # -0x8977 # -0x897E # -0x897F # -0x8981 # -0x8983 # -0x8986 # -0x8987 # -0x8988 # -0x898A # -0x898B # -0x898F # -0x8993 # -0x8996 # -0x8997 # -0x8998 # -0x899A # -0x89A1 # -0x89A6 # -0x89A7 # -0x89A9 # -0x89AA # -0x89AC # -0x89AF # -0x89B2 # -0x89B3 # -0x89BA # -0x89BD # -0x89BF # -0x89C0 # -0x89D2 # -0x89DA # -0x89DC # -0x89DD # -0x89E3 # -0x89E6 # -0x89E7 # -0x89F4 # -0x89F8 # -0x8A00 # -0x8A02 # -0x8A03 # -0x8A08 # -0x8A0A # -0x8A0C # -0x8A0E # -0x8A10 # -0x8A13 # -0x8A16 # -0x8A17 # -0x8A18 # -0x8A1B # -0x8A1D # -0x8A1F # -0x8A23 # -0x8A25 # -0x8A2A # -0x8A2D # -0x8A31 # -0x8A33 # -0x8A34 # -0x8A36 # -0x8A3A # -0x8A3B # -0x8A3C # -0x8A41 # -0x8A46 # -0x8A48 # -0x8A50 # -0x8A51 # -0x8A52 # -0x8A54 # -0x8A55 # -0x8A5B # -0x8A5E # -0x8A60 # -0x8A62 # -0x8A63 # -0x8A66 # -0x8A69 # -0x8A6B # -0x8A6C # -0x8A6D # -0x8A6E # -0x8A70 # -0x8A71 # -0x8A72 # -0x8A73 # -0x8A7C # -0x8A82 # -0x8A84 # -0x8A85 # -0x8A87 # -0x8A89 # -0x8A8C # -0x8A8D # -0x8A91 # -0x8A93 # -0x8A95 # -0x8A98 # -0x8A9A # -0x8A9E # -0x8AA0 # -0x8AA1 # -0x8AA3 # -0x8AA4 # -0x8AA5 # -0x8AA6 # -0x8AA8 # -0x8AAC # -0x8AAD # -0x8AB0 # -0x8AB2 # -0x8AB9 # -0x8ABC # -0x8ABF # -0x8AC2 # -0x8AC4 # -0x8AC7 # -0x8ACB # -0x8ACC # -0x8ACD # -0x8ACF # -0x8AD2 # -0x8AD6 # -0x8ADA # -0x8ADB # -0x8ADC # -0x8ADE # -0x8AE0 # -0x8AE1 # -0x8AE2 # -0x8AE4 # -0x8AE6 # -0x8AE7 # -0x8AEB # -0x8AED # -0x8AEE # -0x8AF1 # -0x8AF3 # -0x8AF7 # -0x8AF8 # -0x8AFA # -0x8AFE # -0x8B00 # -0x8B01 # -0x8B02 # -0x8B04 # -0x8B07 # -0x8B0C # -0x8B0E # -0x8B10 # -0x8B14 # -0x8B16 # -0x8B17 # -0x8B19 # -0x8B1A # -0x8B1B # -0x8B1D # -0x8B20 # -0x8B21 # -0x8B26 # -0x8B28 # -0x8B2B # -0x8B2C # -0x8B33 # -0x8B39 # -0x8B3E # -0x8B41 # -0x8B49 # -0x8B4C # -0x8B4E # -0x8B4F # -0x8B56 # -0x8B58 # -0x8B5A # -0x8B5B # -0x8B5C # -0x8B5F # -0x8B66 # -0x8B6B # -0x8B6C # -0x8B6F # -0x8B70 # -0x8B71 # -0x8B72 # -0x8B74 # -0x8B77 # -0x8B7D # -0x8B80 # -0x8B83 # -0x8B8A # -0x8B8C # -0x8B8E # -0x8B90 # -0x8B92 # -0x8B93 # -0x8B96 # -0x8B99 # -0x8B9A # -0x8C37 # -0x8C3A # -0x8C3F # -0x8C41 # -0x8C46 # -0x8C48 # -0x8C4A # -0x8C4C # -0x8C4E # -0x8C50 # -0x8C55 # -0x8C5A # -0x8C61 # -0x8C62 # -0x8C6A # -0x8C6B # -0x8C6C # -0x8C78 # -0x8C79 # -0x8C7A # -0x8C7C # -0x8C82 # -0x8C85 # -0x8C89 # -0x8C8A # -0x8C8C # -0x8C8D # -0x8C8E # -0x8C94 # -0x8C98 # -0x8C9D # -0x8C9E # -0x8CA0 # -0x8CA1 # -0x8CA2 # -0x8CA7 # -0x8CA8 # -0x8CA9 # -0x8CAA # -0x8CAB # -0x8CAC # -0x8CAD # -0x8CAE # -0x8CAF # -0x8CB0 # -0x8CB2 # -0x8CB3 # -0x8CB4 # -0x8CB6 # -0x8CB7 # -0x8CB8 # -0x8CBB # -0x8CBC # -0x8CBD # -0x8CBF # -0x8CC0 # -0x8CC1 # -0x8CC2 # -0x8CC3 # -0x8CC4 # -0x8CC7 # -0x8CC8 # -0x8CCA # -0x8CCD # -0x8CCE # -0x8CD1 # -0x8CD3 # -0x8CDA # -0x8CDB # -0x8CDC # -0x8CDE # -0x8CE0 # -0x8CE2 # -0x8CE3 # -0x8CE4 # -0x8CE6 # -0x8CEA # -0x8CED # -0x8CFA # -0x8CFB # -0x8CFC # -0x8CFD # -0x8D04 # -0x8D05 # -0x8D07 # -0x8D08 # -0x8D0A # -0x8D0B # -0x8D0D # -0x8D0F # -0x8D10 # -0x8D13 # -0x8D14 # -0x8D16 # -0x8D64 # -0x8D66 # -0x8D67 # -0x8D6B # -0x8D6D # -0x8D70 # -0x8D71 # -0x8D73 # -0x8D74 # -0x8D77 # -0x8D81 # -0x8D85 # -0x8D8A # -0x8D99 # -0x8DA3 # -0x8DA8 # -0x8DB3 # -0x8DBA # -0x8DBE # -0x8DC2 # -0x8DCB # -0x8DCC # -0x8DCF # -0x8DD6 # -0x8DDA # -0x8DDB # -0x8DDD # -0x8DDF # -0x8DE1 # -0x8DE3 # -0x8DE8 # -0x8DEA # -0x8DEB # -0x8DEF # -0x8DF3 # -0x8DF5 # -0x8DFC # -0x8DFF # -0x8E08 # -0x8E09 # -0x8E0A # -0x8E0F # -0x8E10 # -0x8E1D # -0x8E1E # -0x8E1F # -0x8E2A # -0x8E30 # -0x8E34 # -0x8E35 # -0x8E42 # -0x8E44 # -0x8E47 # -0x8E48 # -0x8E49 # -0x8E4A # -0x8E4C # -0x8E50 # -0x8E55 # -0x8E59 # -0x8E5F # -0x8E60 # -0x8E63 # -0x8E64 # -0x8E72 # -0x8E74 # -0x8E76 # -0x8E7C # -0x8E81 # -0x8E84 # -0x8E85 # -0x8E87 # -0x8E8A # -0x8E8B # -0x8E8D # -0x8E91 # -0x8E93 # -0x8E94 # -0x8E99 # -0x8EA1 # -0x8EAA # -0x8EAB # -0x8EAC # -0x8EAF # -0x8EB0 # -0x8EB1 # -0x8EBE # -0x8EC5 # -0x8EC6 # -0x8EC8 # -0x8ECA # -0x8ECB # -0x8ECC # -0x8ECD # -0x8ED2 # -0x8EDB # -0x8EDF # -0x8EE2 # -0x8EE3 # -0x8EEB # -0x8EF8 # -0x8EFB # -0x8EFC # -0x8EFD # -0x8EFE # -0x8F03 # -0x8F05 # -0x8F09 # -0x8F0A # -0x8F0C # -0x8F12 # -0x8F13 # -0x8F14 # -0x8F15 # -0x8F19 # -0x8F1B # -0x8F1C # -0x8F1D # -0x8F1F # -0x8F26 # -0x8F29 # -0x8F2A # -0x8F2F # -0x8F33 # -0x8F38 # -0x8F39 # -0x8F3B # -0x8F3E # -0x8F3F # -0x8F42 # -0x8F44 # -0x8F45 # -0x8F46 # -0x8F49 # -0x8F4C # -0x8F4D # -0x8F4E # -0x8F57 # -0x8F5C # -0x8F5F # -0x8F61 # -0x8F62 # -0x8F63 # -0x8F64 # -0x8F9B # -0x8F9C # -0x8F9E # -0x8F9F # -0x8FA3 # -0x8FA7 # -0x8FA8 # -0x8FAD # -0x8FAE # -0x8FAF # -0x8FB0 # -0x8FB1 # -0x8FB2 # -0x8FB7 # -0x8FBA # -0x8FBB # -0x8FBC # -0x8FBF # -0x8FC2 # -0x8FC4 # -0x8FC5 # -0x8FCE # -0x8FD1 # -0x8FD4 # -0x8FDA # -0x8FE2 # -0x8FE5 # -0x8FE6 # -0x8FE9 # -0x8FEA # -0x8FEB # -0x8FED # -0x8FEF # -0x8FF0 # -0x8FF4 # -0x8FF7 # -0x8FF8 # -0x8FF9 # -0x8FFA # -0x8FFD # -0x9000 # -0x9001 # -0x9003 # -0x9005 # -0x9006 # -0x900B # -0x900D # -0x900E # -0x900F # -0x9010 # -0x9011 # -0x9013 # -0x9014 # -0x9015 # -0x9016 # -0x9017 # -0x9019 # -0x901A # -0x901D # -0x901E # -0x901F # -0x9020 # -0x9021 # -0x9022 # -0x9023 # -0x9027 # -0x902E # -0x9031 # -0x9032 # -0x9035 # -0x9036 # -0x9038 # -0x9039 # -0x903C # -0x903E # -0x9041 # -0x9042 # -0x9045 # -0x9047 # -0x9049 # -0x904A # -0x904B # -0x904D # -0x904E # -0x904F # -0x9050 # -0x9051 # -0x9052 # -0x9053 # -0x9054 # -0x9055 # -0x9056 # -0x9058 # -0x9059 # -0x905C # -0x905E # -0x9060 # -0x9061 # -0x9063 # -0x9065 # -0x9068 # -0x9069 # -0x906D # -0x906E # -0x906F # -0x9072 # -0x9075 # -0x9076 # -0x9077 # -0x9078 # -0x907A # -0x907C # -0x907D # -0x907F # -0x9080 # -0x9081 # -0x9082 # -0x9083 # -0x9084 # -0x9087 # -0x9089 # -0x908A # -0x908F # -0x9091 # -0x90A3 # -0x90A6 # -0x90A8 # -0x90AA # -0x90AF # -0x90B1 # -0x90B5 # -0x90B8 # -0x90C1 # -0x90CA # -0x90CE # -0x90DB # -0x90E1 # -0x90E2 # -0x90E4 # -0x90E8 # -0x90ED # -0x90F5 # -0x90F7 # -0x90FD # -0x9102 # -0x9112 # -0x9119 # -0x912D # -0x9130 # -0x9132 # -0x9149 # -0x914A # -0x914B # -0x914C # -0x914D # -0x914E # -0x9152 # -0x9154 # -0x9156 # -0x9158 # -0x9162 # -0x9163 # -0x9165 # -0x9169 # -0x916A # -0x916C # -0x9172 # -0x9173 # -0x9175 # -0x9177 # -0x9178 # -0x9182 # -0x9187 # -0x9189 # -0x918B # -0x918D # -0x9190 # -0x9192 # -0x9197 # -0x919C # -0x91A2 # -0x91A4 # -0x91AA # -0x91AB # -0x91AF # -0x91B4 # -0x91B5 # -0x91B8 # -0x91BA # -0x91C0 # -0x91C1 # -0x91C6 # -0x91C7 # -0x91C8 # -0x91C9 # -0x91CB # -0x91CC # -0x91CD # -0x91CE # -0x91CF # -0x91D0 # -0x91D1 # -0x91D6 # -0x91D8 # -0x91DB # -0x91DC # -0x91DD # -0x91DF # -0x91E1 # -0x91E3 # -0x91E6 # -0x91E7 # -0x91F5 # -0x91F6 # -0x91FC # -0x91FF # -0x920D # -0x920E # -0x9211 # -0x9214 # -0x9215 # -0x921E # -0x9229 # -0x922C # -0x9234 # -0x9237 # -0x923F # -0x9244 # -0x9245 # -0x9248 # -0x9249 # -0x924B # -0x9250 # -0x9257 # -0x925A # -0x925B # -0x925E # -0x9262 # -0x9264 # -0x9266 # -0x9271 # -0x927E # -0x9280 # -0x9283 # -0x9285 # -0x9291 # -0x9293 # -0x9295 # -0x9296 # -0x9298 # -0x929A # -0x929B # -0x929C # -0x92AD # -0x92B7 # -0x92B9 # -0x92CF # -0x92D2 # -0x92E4 # -0x92E9 # -0x92EA # -0x92ED # -0x92F2 # -0x92F3 # -0x92F8 # -0x92FA # -0x92FC # -0x9306 # -0x930F # -0x9310 # -0x9318 # -0x9319 # -0x931A # -0x9320 # -0x9322 # -0x9323 # -0x9326 # -0x9328 # -0x932B # -0x932C # -0x932E # -0x932F # -0x9332 # -0x9335 # -0x933A # -0x933B # -0x9344 # -0x934B # -0x934D # -0x9354 # -0x9356 # -0x935B # -0x935C # -0x9360 # -0x936C # -0x936E # -0x9375 # -0x937C # -0x937E # -0x938C # -0x9394 # -0x9396 # -0x9397 # -0x939A # -0x93A7 # -0x93AC # -0x93AD # -0x93AE # -0x93B0 # -0x93B9 # -0x93C3 # -0x93C8 # -0x93D0 # -0x93D1 # -0x93D6 # -0x93D7 # -0x93D8 # -0x93DD # -0x93E1 # -0x93E4 # -0x93E5 # -0x93E8 # -0x9403 # -0x9407 # -0x9410 # -0x9413 # -0x9414 # -0x9418 # -0x9419 # -0x941A # -0x9421 # -0x942B # -0x9435 # -0x9436 # -0x9438 # -0x943A # -0x9441 # -0x9444 # -0x9451 # -0x9452 # -0x9453 # -0x945A # -0x945B # -0x945E # -0x9460 # -0x9462 # -0x946A # -0x9470 # -0x9475 # -0x9477 # -0x947C # -0x947D # -0x947E # -0x947F # -0x9481 # -0x9577 # -0x9580 # -0x9582 # -0x9583 # -0x9587 # -0x9589 # -0x958A # -0x958B # -0x958F # -0x9591 # -0x9593 # -0x9594 # -0x9596 # -0x9598 # -0x9599 # -0x95A0 # -0x95A2 # -0x95A3 # -0x95A4 # -0x95A5 # -0x95A7 # -0x95A8 # -0x95AD # -0x95B2 # -0x95B9 # -0x95BB # -0x95BC # -0x95BE # -0x95C3 # -0x95C7 # -0x95CA # -0x95CC # -0x95CD # -0x95D4 # -0x95D5 # -0x95D6 # -0x95D8 # -0x95DC # -0x95E1 # -0x95E2 # -0x95E5 # -0x961C # -0x9621 # -0x9628 # -0x962A # -0x962E # -0x962F # -0x9632 # -0x963B # -0x963F # -0x9640 # -0x9642 # -0x9644 # -0x964B # -0x964C # -0x964D # -0x964F # -0x9650 # -0x965B # -0x965C # -0x965D # -0x965E # -0x965F # -0x9662 # -0x9663 # -0x9664 # -0x9665 # -0x9666 # -0x966A # -0x966C # -0x9670 # -0x9672 # -0x9673 # -0x9675 # -0x9676 # -0x9677 # -0x9678 # -0x967A # -0x967D # -0x9685 # -0x9686 # -0x9688 # -0x968A # -0x968B # -0x968D # -0x968E # -0x968F # -0x9694 # -0x9695 # -0x9697 # -0x9698 # -0x9699 # -0x969B # -0x969C # -0x96A0 # -0x96A3 # -0x96A7 # -0x96A8 # -0x96AA # -0x96B0 # -0x96B1 # -0x96B2 # -0x96B4 # -0x96B6 # -0x96B7 # -0x96B8 # -0x96B9 # -0x96BB # -0x96BC # -0x96C0 # -0x96C1 # -0x96C4 # -0x96C5 # -0x96C6 # -0x96C7 # -0x96C9 # -0x96CB # -0x96CC # -0x96CD # -0x96CE # -0x96D1 # -0x96D5 # -0x96D6 # -0x96D9 # -0x96DB # -0x96DC # -0x96E2 # -0x96E3 # -0x96E8 # -0x96EA # -0x96EB # -0x96F0 # -0x96F2 # -0x96F6 # -0x96F7 # -0x96F9 # -0x96FB # -0x9700 # -0x9704 # -0x9706 # -0x9707 # -0x9708 # -0x970A # -0x970D # -0x970E # -0x970F # -0x9711 # -0x9713 # -0x9716 # -0x9719 # -0x971C # -0x971E # -0x9724 # -0x9727 # -0x972A # -0x9730 # -0x9732 # -0x9738 # -0x9739 # -0x973D # -0x973E # -0x9742 # -0x9744 # -0x9746 # -0x9748 # -0x9749 # -0x9752 # -0x9756 # -0x9759 # -0x975C # -0x975E # -0x9760 # -0x9761 # -0x9762 # -0x9764 # -0x9766 # -0x9768 # -0x9769 # -0x976B # -0x976D # -0x9771 # -0x9774 # -0x9779 # -0x977A # -0x977C # -0x9781 # -0x9784 # -0x9785 # -0x9786 # -0x978B # -0x978D # -0x978F # -0x9790 # -0x9798 # -0x979C # -0x97A0 # -0x97A3 # -0x97A6 # -0x97A8 # -0x97AB # -0x97AD # -0x97B3 # -0x97B4 # -0x97C3 # -0x97C6 # -0x97C8 # -0x97CB # -0x97D3 # -0x97DC # -0x97ED # -0x97EE # -0x97F2 # -0x97F3 # -0x97F5 # -0x97F6 # -0x97FB # -0x97FF # -0x9801 # -0x9802 # -0x9803 # -0x9805 # -0x9806 # -0x9808 # -0x980C # -0x980F # -0x9810 # -0x9811 # -0x9812 # -0x9813 # -0x9817 # -0x9818 # -0x981A # -0x9821 # -0x9824 # -0x982C # -0x982D # -0x9834 # -0x9837 # -0x9838 # -0x983B # -0x983C # -0x983D # -0x9846 # -0x984B # -0x984C # -0x984D # -0x984E # -0x984F # -0x9854 # -0x9855 # -0x9858 # -0x985B # -0x985E # -0x9867 # -0x986B # -0x986F # -0x9870 # -0x9871 # -0x9873 # -0x9874 # -0x98A8 # -0x98AA # -0x98AF # -0x98B1 # -0x98B6 # -0x98C3 # -0x98C4 # -0x98C6 # -0x98DB # -0x98DC # -0x98DF # -0x98E2 # -0x98E9 # -0x98EB # -0x98ED # -0x98EE # -0x98EF # -0x98F2 # -0x98F4 # -0x98FC # -0x98FD # -0x98FE # -0x9903 # -0x9905 # -0x9909 # -0x990A # -0x990C # -0x9910 # -0x9912 # -0x9913 # -0x9914 # -0x9918 # -0x991D # -0x991E # -0x9920 # -0x9921 # -0x9924 # -0x9928 # -0x992C # -0x992E # -0x993D # -0x993E # -0x9942 # -0x9945 # -0x9949 # -0x994B # -0x994C # -0x9950 # -0x9951 # -0x9952 # -0x9955 # -0x9957 # -0x9996 # -0x9997 # -0x9998 # -0x9999 # -0x99A5 # -0x99A8 # -0x99AC # -0x99AD # -0x99AE # -0x99B3 # -0x99B4 # -0x99BC # -0x99C1 # -0x99C4 # -0x99C5 # -0x99C6 # -0x99C8 # -0x99D0 # -0x99D1 # -0x99D2 # -0x99D5 # -0x99D8 # -0x99DB # -0x99DD # -0x99DF # -0x99E2 # -0x99ED # -0x99EE # -0x99F1 # -0x99F2 # -0x99F8 # -0x99FB # -0x99FF # -0x9A01 # -0x9A05 # -0x9A0E # -0x9A0F # -0x9A12 # -0x9A13 # -0x9A19 # -0x9A28 # -0x9A2B # -0x9A30 # -0x9A37 # -0x9A3E # -0x9A40 # -0x9A42 # -0x9A43 # -0x9A45 # -0x9A4D # -0x9A55 # -0x9A57 # -0x9A5A # -0x9A5B # -0x9A5F # -0x9A62 # -0x9A64 # -0x9A65 # -0x9A69 # -0x9A6A # -0x9A6B # -0x9AA8 # -0x9AAD # -0x9AB0 # -0x9AB8 # -0x9ABC # -0x9AC0 # -0x9AC4 # -0x9ACF # -0x9AD1 # -0x9AD3 # -0x9AD4 # -0x9AD8 # -0x9ADE # -0x9ADF # -0x9AE2 # -0x9AE3 # -0x9AE6 # -0x9AEA # -0x9AEB # -0x9AED # -0x9AEE # -0x9AEF # -0x9AF1 # -0x9AF4 # -0x9AF7 # -0x9AFB # -0x9B06 # -0x9B18 # -0x9B1A # -0x9B1F # -0x9B22 # -0x9B23 # -0x9B25 # -0x9B27 # -0x9B28 # -0x9B29 # -0x9B2A # -0x9B2E # -0x9B2F # -0x9B31 # -0x9B32 # -0x9B3B # -0x9B3C # -0x9B41 # -0x9B42 # -0x9B43 # -0x9B44 # -0x9B45 # -0x9B4D # -0x9B4E # -0x9B4F # -0x9B51 # -0x9B54 # -0x9B58 # -0x9B5A # -0x9B6F # -0x9B74 # -0x9B83 # -0x9B8E # -0x9B91 # -0x9B92 # -0x9B93 # -0x9B96 # -0x9B97 # -0x9B9F # -0x9BA0 # -0x9BA8 # -0x9BAA # -0x9BAB # -0x9BAD # -0x9BAE # -0x9BB4 # -0x9BB9 # -0x9BC0 # -0x9BC6 # -0x9BC9 # -0x9BCA # -0x9BCF # -0x9BD1 # -0x9BD2 # -0x9BD4 # -0x9BD6 # -0x9BDB # -0x9BE1 # -0x9BE2 # -0x9BE3 # -0x9BE4 # -0x9BE8 # -0x9BF0 # -0x9BF1 # -0x9BF2 # -0x9BF5 # -0x9C04 # -0x9C06 # -0x9C08 # -0x9C09 # -0x9C0A # -0x9C0C # -0x9C0D # -0x9C10 # -0x9C12 # -0x9C13 # -0x9C14 # -0x9C15 # -0x9C1B # -0x9C21 # -0x9C24 # -0x9C25 # -0x9C2D # -0x9C2E # -0x9C2F # -0x9C30 # -0x9C32 # -0x9C39 # -0x9C3A # -0x9C3B # -0x9C3E # -0x9C46 # -0x9C47 # -0x9C48 # -0x9C52 # -0x9C57 # -0x9C5A # -0x9C60 # -0x9C67 # -0x9C76 # -0x9C78 # -0x9CE5 # -0x9CE7 # -0x9CE9 # -0x9CEB # -0x9CEC # -0x9CF0 # -0x9CF3 # -0x9CF4 # -0x9CF6 # -0x9D03 # -0x9D06 # -0x9D07 # -0x9D08 # -0x9D09 # -0x9D0E # -0x9D12 # -0x9D15 # -0x9D1B # -0x9D1F # -0x9D23 # -0x9D26 # -0x9D28 # -0x9D2A # -0x9D2B # -0x9D2C # -0x9D3B # -0x9D3E # -0x9D3F # -0x9D41 # -0x9D44 # -0x9D46 # -0x9D48 # -0x9D50 # -0x9D51 # -0x9D59 # -0x9D5C # -0x9D5D # -0x9D5E # -0x9D60 # -0x9D61 # -0x9D64 # -0x9D6C # -0x9D6F # -0x9D72 # -0x9D7A # -0x9D87 # -0x9D89 # -0x9D8F # -0x9D9A # -0x9DA4 # -0x9DA9 # -0x9DAB # -0x9DAF # -0x9DB2 # -0x9DB4 # -0x9DB8 # -0x9DBA # -0x9DBB # -0x9DC1 # -0x9DC2 # -0x9DC4 # -0x9DC6 # -0x9DCF # -0x9DD3 # -0x9DD9 # -0x9DE6 # -0x9DED # -0x9DEF # -0x9DF2 # -0x9DF8 # -0x9DF9 # -0x9DFA # -0x9DFD # -0x9E1A # -0x9E1B # -0x9E1E # -0x9E75 # -0x9E78 # -0x9E79 # -0x9E7D # -0x9E7F # -0x9E81 # -0x9E88 # -0x9E8B # -0x9E8C # -0x9E91 # -0x9E92 # -0x9E93 # -0x9E95 # -0x9E97 # -0x9E9D # -0x9E9F # -0x9EA5 # -0x9EA6 # -0x9EA9 # -0x9EAA # -0x9EAD # -0x9EB8 # -0x9EB9 # -0x9EBA # -0x9EBB # -0x9EBC # -0x9EBE # -0x9EBF # -0x9EC4 # -0x9ECC # -0x9ECD # -0x9ECE # -0x9ECF # -0x9ED0 # -0x9ED2 # -0x9ED4 # -0x9ED8 # -0x9ED9 # -0x9EDB # -0x9EDC # -0x9EDD # -0x9EDE # -0x9EE0 # -0x9EE5 # -0x9EE8 # -0x9EEF # -0x9EF4 # -0x9EF6 # -0x9EF7 # -0x9EF9 # -0x9EFB # -0x9EFC # -0x9EFD # -0x9F07 # -0x9F08 # -0x9F0E # -0x9F13 # -0x9F15 # -0x9F20 # -0x9F21 # -0x9F2C # -0x9F3B # -0x9F3E # -0x9F4A # -0x9F4B # -0x9F4E # -0x9F4F # -0x9F52 # -0x9F54 # -0x9F5F # -0x9F60 # -0x9F61 # -0x9F62 # -0x9F63 # -0x9F66 # -0x9F67 # -0x9F6A # -0x9F6C # -0x9F72 # -0x9F76 # -0x9F77 # -0x9F8D # -0x9F95 # -0x9F9C # -0x9F9D # -0x9FA0 # -#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 # +0x4E01 # +0x4E03 # +0x4E07 # +0x4E08 # +0x4E09 # +0x4E0A # +0x4E0B # +0x4E0D # +0x4E0E # +0x4E10 # +0x4E11 # +0x4E14 # +0x4E15 # +0x4E16 # +0x4E17 # +0x4E18 # +0x4E19 # +0x4E1E # +0x4E21 # +0x4E26 # +0x4E2A # +0x4E2D # +0x4E31 # +0x4E32 # +0x4E36 # +0x4E38 # +0x4E39 # +0x4E3B # +0x4E3C # +0x4E3F # +0x4E42 # +0x4E43 # +0x4E45 # +0x4E4B # +0x4E4D # +0x4E4E # +0x4E4F # +0x4E55 # +0x4E56 # +0x4E57 # +0x4E58 # +0x4E59 # +0x4E5D # +0x4E5E # +0x4E5F # +0x4E62 # +0x4E71 # +0x4E73 # +0x4E7E # +0x4E80 # +0x4E82 # +0x4E85 # +0x4E86 # +0x4E88 # +0x4E89 # +0x4E8A # +0x4E8B # +0x4E8C # +0x4E8E # +0x4E91 # +0x4E92 # +0x4E94 # +0x4E95 # +0x4E98 # +0x4E99 # +0x4E9B # +0x4E9C # +0x4E9E # +0x4E9F # +0x4EA0 # +0x4EA1 # +0x4EA2 # +0x4EA4 # +0x4EA5 # +0x4EA6 # +0x4EA8 # +0x4EAB # +0x4EAC # +0x4EAD # +0x4EAE # +0x4EB0 # +0x4EB3 # +0x4EB6 # +0x4EBA # +0x4EC0 # +0x4EC1 # +0x4EC2 # +0x4EC4 # +0x4EC6 # +0x4EC7 # +0x4ECA # +0x4ECB # +0x4ECD # +0x4ECE # +0x4ECF # +0x4ED4 # +0x4ED5 # +0x4ED6 # +0x4ED7 # +0x4ED8 # +0x4ED9 # +0x4EDD # +0x4EDE # +0x4EDF # +0x4EE3 # +0x4EE4 # +0x4EE5 # +0x4EED # +0x4EEE # +0x4EF0 # +0x4EF2 # +0x4EF6 # +0x4EF7 # +0x4EFB # +0x4F01 # +0x4F09 # +0x4F0A # +0x4F0D # +0x4F0E # +0x4F0F # +0x4F10 # +0x4F11 # +0x4F1A # +0x4F1C # +0x4F1D # +0x4F2F # +0x4F30 # +0x4F34 # +0x4F36 # +0x4F38 # +0x4F3A # +0x4F3C # +0x4F3D # +0x4F43 # +0x4F46 # +0x4F47 # +0x4F4D # +0x4F4E # +0x4F4F # +0x4F50 # +0x4F51 # +0x4F53 # +0x4F55 # +0x4F57 # +0x4F59 # +0x4F5A # +0x4F5B # +0x4F5C # +0x4F5D # +0x4F5E # +0x4F69 # +0x4F6F # +0x4F70 # +0x4F73 # +0x4F75 # +0x4F76 # +0x4F7B # +0x4F7C # +0x4F7F # +0x4F83 # +0x4F86 # +0x4F88 # +0x4F8B # +0x4F8D # +0x4F8F # +0x4F91 # +0x4F96 # +0x4F98 # +0x4F9B # +0x4F9D # +0x4FA0 # +0x4FA1 # +0x4FAB # +0x4FAD # +0x4FAE # +0x4FAF # +0x4FB5 # +0x4FB6 # +0x4FBF # +0x4FC2 # +0x4FC3 # +0x4FC4 # +0x4FCA # +0x4FCE # +0x4FD0 # +0x4FD1 # +0x4FD4 # +0x4FD7 # +0x4FD8 # +0x4FDA # +0x4FDB # +0x4FDD # +0x4FDF # +0x4FE1 # +0x4FE3 # +0x4FE4 # +0x4FE5 # +0x4FEE # +0x4FEF # +0x4FF3 # +0x4FF5 # +0x4FF6 # +0x4FF8 # +0x4FFA # +0x4FFE # +0x5005 # +0x5006 # +0x5009 # +0x500B # +0x500D # +0x500F # +0x5011 # +0x5012 # +0x5014 # +0x5016 # +0x5019 # +0x501A # +0x501F # +0x5021 # +0x5023 # +0x5024 # +0x5025 # +0x5026 # +0x5028 # +0x5029 # +0x502A # +0x502B # +0x502C # +0x502D # +0x5036 # +0x5039 # +0x5043 # +0x5047 # +0x5048 # +0x5049 # +0x504F # +0x5050 # +0x5055 # +0x5056 # +0x505A # +0x505C # +0x5065 # +0x506C # +0x5072 # +0x5074 # +0x5075 # +0x5076 # +0x5078 # +0x507D # +0x5080 # +0x5085 # +0x508D # +0x5091 # +0x5098 # +0x5099 # +0x509A # +0x50AC # +0x50AD # +0x50B2 # +0x50B3 # +0x50B4 # +0x50B5 # +0x50B7 # +0x50BE # +0x50C2 # +0x50C5 # +0x50C9 # +0x50CA # +0x50CD # +0x50CF # +0x50D1 # +0x50D5 # +0x50D6 # +0x50DA # +0x50DE # +0x50E3 # +0x50E5 # +0x50E7 # +0x50ED # +0x50EE # +0x50F5 # +0x50F9 # +0x50FB # +0x5100 # +0x5101 # +0x5102 # +0x5104 # +0x5109 # +0x5112 # +0x5114 # +0x5115 # +0x5116 # +0x5118 # +0x511A # +0x511F # +0x5121 # +0x512A # +0x5132 # +0x5137 # +0x513A # +0x513B # +0x513C # +0x513F # +0x5140 # +0x5141 # +0x5143 # +0x5144 # +0x5145 # +0x5146 # +0x5147 # +0x5148 # +0x5149 # +0x514B # +0x514C # +0x514D # +0x514E # +0x5150 # +0x5152 # +0x5154 # +0x515A # +0x515C # +0x5162 # +0x5165 # +0x5168 # +0x5169 # +0x516A # +0x516B # +0x516C # +0x516D # +0x516E # +0x5171 # +0x5175 # +0x5176 # +0x5177 # +0x5178 # +0x517C # +0x5180 # +0x5182 # +0x5185 # +0x5186 # +0x5189 # +0x518A # +0x518C # +0x518D # +0x518F # +0x5190 # +0x5191 # +0x5192 # +0x5193 # +0x5195 # +0x5196 # +0x5197 # +0x5199 # +0x51A0 # +0x51A2 # +0x51A4 # +0x51A5 # +0x51A6 # +0x51A8 # +0x51A9 # +0x51AA # +0x51AB # +0x51AC # +0x51B0 # +0x51B1 # +0x51B2 # +0x51B3 # +0x51B4 # +0x51B5 # +0x51B6 # +0x51B7 # +0x51BD # +0x51C4 # +0x51C5 # +0x51C6 # +0x51C9 # +0x51CB # +0x51CC # +0x51CD # +0x51D6 # +0x51DB # +#0x51DC # # not in kochi fonts +0x51DD # +0x51E0 # +0x51E1 # +0x51E6 # +0x51E7 # +0x51E9 # +0x51EA # +0x51ED # +0x51F0 # +0x51F1 # +0x51F5 # +0x51F6 # +0x51F8 # +0x51F9 # +0x51FA # +0x51FD # +0x51FE # +0x5200 # +0x5203 # +0x5204 # +0x5206 # +0x5207 # +0x5208 # +0x520A # +0x520B # +0x520E # +0x5211 # +0x5214 # +0x5217 # +0x521D # +0x5224 # +0x5225 # +0x5227 # +0x5229 # +0x522A # +0x522E # +0x5230 # +0x5233 # +0x5236 # +0x5237 # +0x5238 # +0x5239 # +0x523A # +0x523B # +0x5243 # +0x5244 # +0x5247 # +0x524A # +0x524B # +0x524C # +0x524D # +0x524F # +0x5254 # +0x5256 # +0x525B # +0x525E # +0x5263 # +0x5264 # +0x5265 # +0x5269 # +0x526A # +0x526F # +0x5270 # +0x5271 # +0x5272 # +0x5273 # +0x5274 # +0x5275 # +0x527D # +0x527F # +0x5283 # +0x5287 # +0x5288 # +0x5289 # +0x528D # +0x5291 # +0x5292 # +0x5294 # +0x529B # +0x529F # +0x52A0 # +0x52A3 # +0x52A9 # +0x52AA # +0x52AB # +0x52AC # +0x52AD # +0x52B1 # +0x52B4 # +0x52B5 # +0x52B9 # +0x52BC # +0x52BE # +0x52C1 # +0x52C3 # +0x52C5 # +0x52C7 # +0x52C9 # +0x52CD # +0x52D2 # +0x52D5 # +0x52D7 # +0x52D8 # +0x52D9 # +0x52DD # +0x52DE # +0x52DF # +0x52E0 # +0x52E2 # +0x52E3 # +0x52E4 # +0x52E6 # +0x52E7 # +0x52F2 # +0x52F3 # +0x52F5 # +0x52F8 # +0x52F9 # +0x52FA # +0x52FE # +0x52FF # +0x5301 # +0x5302 # +0x5305 # +0x5306 # +0x5308 # +0x530D # +0x530F # +0x5310 # +0x5315 # +0x5316 # +0x5317 # +0x5319 # +0x531A # +0x531D # +0x5320 # +0x5321 # +0x5323 # +0x532A # +0x532F # +0x5331 # +0x5333 # +0x5338 # +0x5339 # +0x533A # +0x533B # +0x533F # +0x5340 # +0x5341 # +0x5343 # +0x5345 # +0x5346 # +0x5347 # +0x5348 # +0x5349 # +0x534A # +0x534D # +0x5351 # +0x5352 # +0x5353 # +0x5354 # +0x5357 # +0x5358 # +0x535A # +0x535C # +0x535E # +0x5360 # +0x5366 # +0x5369 # +0x536E # +0x536F # +0x5370 # +0x5371 # +0x5373 # +0x5374 # +0x5375 # +0x5377 # +0x5378 # +0x537B # +0x537F # +0x5382 # +0x5384 # +0x5396 # +0x5398 # +0x539A # +0x539F # +0x53A0 # +0x53A5 # +0x53A6 # +0x53A8 # +0x53A9 # +0x53AD # +0x53AE # +0x53B0 # +0x53B3 # +0x53B6 # +0x53BB # +0x53C2 # +0x53C3 # +0x53C8 # +0x53C9 # +0x53CA # +0x53CB # +0x53CC # +0x53CD # +0x53CE # +0x53D4 # +0x53D6 # +0x53D7 # +0x53D9 # +0x53DB # +0x53DF # +0x53E1 # +0x53E2 # +0x53E3 # +0x53E4 # +0x53E5 # +0x53E8 # +0x53E9 # +0x53EA # +0x53EB # +0x53EC # +0x53ED # +0x53EE # +0x53EF # +0x53F0 # +0x53F1 # +0x53F2 # +0x53F3 # +0x53F6 # +0x53F7 # +0x53F8 # +0x53FA # +0x5401 # +0x5403 # +0x5404 # +0x5408 # +0x5409 # +0x540A # +0x540B # +0x540C # +0x540D # +0x540E # +0x540F # +0x5410 # +0x5411 # +0x541B # +0x541D # +0x541F # +0x5420 # +0x5426 # +0x5429 # +0x542B # +0x542C # +0x542D # +0x542E # +0x5436 # +0x5438 # +0x5439 # +0x543B # +0x543C # +0x543D # +0x543E # +0x5440 # +0x5442 # +0x5446 # +0x5448 # +0x5449 # +0x544A # +0x544E # +0x5451 # +0x545F # +0x5468 # +0x546A # +0x5470 # +0x5471 # +0x5473 # +0x5475 # +0x5476 # +0x5477 # +0x547B # +0x547C # +0x547D # +0x5480 # +0x5484 # +0x5486 # +0x548B # +0x548C # +0x548E # +0x548F # +0x5490 # +0x5492 # +0x54A2 # +0x54A4 # +0x54A5 # +0x54A8 # +0x54AB # +0x54AC # +0x54AF # +0x54B2 # +0x54B3 # +0x54B8 # +0x54BC # +0x54BD # +0x54BE # +0x54C0 # +0x54C1 # +0x54C2 # +0x54C4 # +0x54C7 # +0x54C8 # +0x54C9 # +0x54D8 # +0x54E1 # +0x54E2 # +0x54E5 # +0x54E6 # +0x54E8 # +0x54E9 # +0x54ED # +0x54EE # +0x54F2 # +0x54FA # +0x54FD # +0x5504 # +0x5506 # +0x5507 # +0x550F # +0x5510 # +0x5514 # +0x5516 # +0x552E # +0x552F # +0x5531 # +0x5533 # +0x5538 # +0x5539 # +0x553E # +0x5540 # +0x5544 # +0x5545 # +0x5546 # +0x554C # +0x554F # +0x5553 # +0x5556 # +0x5557 # +0x555C # +0x555D # +0x5563 # +0x557B # +0x557C # +0x557E # +0x5580 # +0x5583 # +0x5584 # +0x5587 # +0x5589 # +0x558A # +0x558B # +0x5598 # +0x5599 # +0x559A # +0x559C # +0x559D # +0x559E # +0x559F # +0x55A7 # +0x55A8 # +0x55A9 # +0x55AA # +0x55AB # +0x55AC # +0x55AE # +0x55B0 # +0x55B6 # +0x55C4 # +0x55C5 # +0x55C7 # +0x55D4 # +0x55DA # +0x55DC # +0x55DF # +0x55E3 # +0x55E4 # +0x55F7 # +0x55F9 # +0x55FD # +0x55FE # +0x5606 # +0x5609 # +0x5614 # +0x5616 # +0x5617 # +0x5618 # +0x561B # +0x5629 # +0x562F # +0x5631 # +0x5632 # +0x5634 # +0x5636 # +0x5638 # +0x5642 # +0x564C # +0x564E # +0x5650 # +0x565B # +0x5664 # +0x5668 # +0x566A # +0x566B # +0x566C # +0x5674 # +0x5678 # +0x567A # +0x5680 # +0x5686 # +0x5687 # +0x568A # +0x568F # +0x5694 # +0x56A0 # +0x56A2 # +0x56A5 # +0x56AE # +0x56B4 # +0x56B6 # +0x56BC # +0x56C0 # +0x56C1 # +0x56C2 # +0x56C3 # +0x56C8 # +0x56CE # +0x56D1 # +0x56D3 # +0x56D7 # +0x56D8 # +0x56DA # +0x56DB # +0x56DE # +0x56E0 # +0x56E3 # +0x56EE # +0x56F0 # +0x56F2 # +0x56F3 # +0x56F9 # +0x56FA # +0x56FD # +0x56FF # +0x5700 # +0x5703 # +0x5704 # +0x5708 # +0x5709 # +0x570B # +0x570D # +0x570F # +0x5712 # +0x5713 # +0x5716 # +0x5718 # +0x571C # +0x571F # +0x5726 # +0x5727 # +0x5728 # +0x572D # +0x5730 # +0x5737 # +0x5738 # +0x573B # +0x5740 # +0x5742 # +0x5747 # +0x574A # +0x574E # +0x574F # +0x5750 # +0x5751 # +0x5761 # +0x5764 # +0x5766 # +0x5769 # +0x576A # +0x577F # +0x5782 # +0x5788 # +0x5789 # +0x578B # +0x5793 # +0x57A0 # +0x57A2 # +0x57A3 # +0x57A4 # +0x57AA # +0x57B0 # +0x57B3 # +0x57C0 # +0x57C3 # +0x57C6 # +0x57CB # +0x57CE # +0x57D2 # +0x57D3 # +0x57D4 # +0x57D6 # +0x57DC # +0x57DF # +0x57E0 # +0x57E3 # +0x57F4 # +0x57F7 # +0x57F9 # +0x57FA # +0x57FC # +0x5800 # +0x5802 # +0x5805 # +0x5806 # +0x580A # +0x580B # +0x5815 # +0x5819 # +0x581D # +0x5821 # +0x5824 # +0x582A # +0x582F # +0x5830 # +0x5831 # +0x5834 # +0x5835 # +0x583A # +0x583D # +0x5840 # +0x5841 # +0x584A # +0x584B # +0x5851 # +0x5852 # +0x5854 # +0x5857 # +0x5858 # +0x5859 # +0x585A # +0x585E # +0x5862 # +0x5869 # +0x586B # +0x5870 # +0x5872 # +0x5875 # +0x5879 # +0x587E # +0x5883 # +0x5885 # +0x5893 # +0x5897 # +0x589C # +0x589F # +0x58A8 # +0x58AB # +0x58AE # +0x58B3 # +0x58B8 # +0x58B9 # +0x58BA # +0x58BB # +0x58BE # +0x58C1 # +0x58C5 # +0x58C7 # +0x58CA # +0x58CC # +0x58D1 # +0x58D3 # +0x58D5 # +0x58D7 # +0x58D8 # +0x58D9 # +0x58DC # +0x58DE # +0x58DF # +0x58E4 # +0x58E5 # +0x58EB # +0x58EC # +0x58EE # +0x58EF # +0x58F0 # +0x58F1 # +0x58F2 # +0x58F7 # +0x58F9 # +0x58FA # +0x58FB # +0x58FC # +0x58FD # +0x5902 # +0x5909 # +0x590A # +0x590F # +0x5910 # +0x5915 # +0x5916 # +0x5918 # +0x5919 # +0x591A # +0x591B # +0x591C # +0x5922 # +0x5925 # +0x5927 # +0x5929 # +0x592A # +0x592B # +0x592C # +0x592D # +0x592E # +0x5931 # +0x5932 # +0x5937 # +0x5938 # +0x593E # +0x5944 # +0x5947 # +0x5948 # +0x5949 # +0x594E # +0x594F # +0x5950 # +0x5951 # +0x5954 # +0x5955 # +0x5957 # +0x5958 # +0x595A # +0x5960 # +0x5962 # +0x5965 # +0x5967 # +0x5968 # +0x5969 # +0x596A # +0x596C # +0x596E # +0x5973 # +0x5974 # +0x5978 # +0x597D # +0x5981 # +0x5982 # +0x5983 # +0x5984 # +0x598A # +0x598D # +0x5993 # +0x5996 # +0x5999 # +0x599B # +0x599D # +0x59A3 # +0x59A5 # +0x59A8 # +0x59AC # +0x59B2 # +0x59B9 # +0x59BB # +0x59BE # +0x59C6 # +0x59C9 # +0x59CB # +0x59D0 # +0x59D1 # +0x59D3 # +0x59D4 # +0x59D9 # +0x59DA # +0x59DC # +0x59E5 # +0x59E6 # +0x59E8 # +0x59EA # +0x59EB # +0x59F6 # +0x59FB # +0x59FF # +0x5A01 # +0x5A03 # +0x5A09 # +0x5A11 # +0x5A18 # +0x5A1A # +0x5A1C # +0x5A1F # +0x5A20 # +0x5A25 # +0x5A29 # +0x5A2F # +0x5A35 # +0x5A36 # +0x5A3C # +0x5A40 # +0x5A41 # +0x5A46 # +0x5A49 # +0x5A5A # +0x5A62 # +0x5A66 # +0x5A6A # +0x5A6C # +0x5A7F # +0x5A92 # +0x5A9A # +0x5A9B # +0x5ABC # +0x5ABD # +0x5ABE # +0x5AC1 # +0x5AC2 # +0x5AC9 # +0x5ACB # +0x5ACC # +0x5AD0 # +0x5AD6 # +0x5AD7 # +0x5AE1 # +0x5AE3 # +0x5AE6 # +0x5AE9 # +0x5AFA # +0x5AFB # +0x5B09 # +0x5B0B # +0x5B0C # +0x5B16 # +0x5B22 # +0x5B2A # +0x5B2C # +0x5B30 # +0x5B32 # +0x5B36 # +0x5B3E # +0x5B40 # +0x5B43 # +0x5B45 # +0x5B50 # +0x5B51 # +0x5B54 # +0x5B55 # +0x5B57 # +0x5B58 # +0x5B5A # +0x5B5B # +0x5B5C # +0x5B5D # +0x5B5F # +0x5B63 # +0x5B64 # +0x5B65 # +0x5B66 # +0x5B69 # +0x5B6B # +0x5B70 # +0x5B71 # +0x5B73 # +0x5B75 # +0x5B78 # +0x5B7A # +0x5B80 # +0x5B83 # +0x5B85 # +0x5B87 # +0x5B88 # +0x5B89 # +0x5B8B # +0x5B8C # +0x5B8D # +0x5B8F # +0x5B95 # +0x5B97 # +0x5B98 # +0x5B99 # +0x5B9A # +0x5B9B # +0x5B9C # +0x5B9D # +0x5B9F # +0x5BA2 # +0x5BA3 # +0x5BA4 # +0x5BA5 # +0x5BA6 # +0x5BAE # +0x5BB0 # +0x5BB3 # +0x5BB4 # +0x5BB5 # +0x5BB6 # +0x5BB8 # +0x5BB9 # +0x5BBF # +0x5BC2 # +0x5BC3 # +0x5BC4 # +0x5BC5 # +0x5BC6 # +0x5BC7 # +0x5BC9 # +0x5BCC # +0x5BD0 # +0x5BD2 # +0x5BD3 # +0x5BD4 # +0x5BDB # +0x5BDD # +0x5BDE # +0x5BDF # +0x5BE1 # +0x5BE2 # +0x5BE4 # +0x5BE5 # +0x5BE6 # +0x5BE7 # +0x5BE8 # +0x5BE9 # +0x5BEB # +0x5BEE # +0x5BF0 # +0x5BF3 # +0x5BF5 # +0x5BF6 # +0x5BF8 # +0x5BFA # +0x5BFE # +0x5BFF # +0x5C01 # +0x5C02 # +0x5C04 # +0x5C05 # +0x5C06 # +0x5C07 # +0x5C08 # +0x5C09 # +0x5C0A # +0x5C0B # +0x5C0D # +0x5C0E # +0x5C0F # +0x5C11 # +0x5C13 # +0x5C16 # +0x5C1A # +0x5C20 # +0x5C22 # +0x5C24 # +0x5C28 # +0x5C2D # +0x5C31 # +0x5C38 # +0x5C39 # +0x5C3A # +0x5C3B # +0x5C3C # +0x5C3D # +0x5C3E # +0x5C3F # +0x5C40 # +0x5C41 # +0x5C45 # +0x5C46 # +0x5C48 # +0x5C4A # +0x5C4B # +0x5C4D # +0x5C4E # +0x5C4F # +0x5C50 # +0x5C51 # +0x5C53 # +0x5C55 # +0x5C5E # +0x5C60 # +0x5C61 # +0x5C64 # +0x5C65 # +0x5C6C # +0x5C6E # +0x5C6F # +0x5C71 # +0x5C76 # +0x5C79 # +0x5C8C # +0x5C90 # +0x5C91 # +0x5C94 # +0x5CA1 # +0x5CA8 # +0x5CA9 # +0x5CAB # +0x5CAC # +0x5CB1 # +0x5CB3 # +0x5CB6 # +0x5CB7 # +0x5CB8 # +0x5CBB # +0x5CBC # +0x5CBE # +0x5CC5 # +0x5CC7 # +0x5CD9 # +0x5CE0 # +0x5CE1 # +0x5CE8 # +0x5CE9 # +0x5CEA # +0x5CED # +0x5CEF # +0x5CF0 # +0x5CF6 # +0x5CFA # +0x5CFB # +0x5CFD # +0x5D07 # +0x5D0B # +0x5D0E # +0x5D11 # +0x5D14 # +0x5D15 # +0x5D16 # +0x5D17 # +0x5D18 # +0x5D19 # +0x5D1A # +0x5D1B # +0x5D1F # +0x5D22 # +0x5D29 # +0x5D4B # +0x5D4C # +0x5D4E # +0x5D50 # +0x5D52 # +0x5D5C # +0x5D69 # +0x5D6C # +0x5D6F # +0x5D73 # +0x5D76 # +0x5D82 # +0x5D84 # +0x5D87 # +0x5D8B # +0x5D8C # +0x5D90 # +0x5D9D # +0x5DA2 # +0x5DAC # +0x5DAE # +0x5DB7 # +0x5DBA # +0x5DBC # +0x5DBD # +0x5DC9 # +0x5DCC # +0x5DCD # +0x5DD2 # +0x5DD3 # +0x5DD6 # +0x5DDB # +0x5DDD # +0x5DDE # +0x5DE1 # +0x5DE3 # +0x5DE5 # +0x5DE6 # +0x5DE7 # +0x5DE8 # +0x5DEB # +0x5DEE # +0x5DF1 # +0x5DF2 # +0x5DF3 # +0x5DF4 # +0x5DF5 # +0x5DF7 # +0x5DFB # +0x5DFD # +0x5DFE # +0x5E02 # +0x5E03 # +0x5E06 # +0x5E0B # +0x5E0C # +0x5E11 # +0x5E16 # +0x5E19 # +0x5E1A # +0x5E1B # +0x5E1D # +0x5E25 # +0x5E2B # +0x5E2D # +0x5E2F # +0x5E30 # +0x5E33 # +0x5E36 # +0x5E37 # +0x5E38 # +0x5E3D # +0x5E40 # +0x5E43 # +0x5E44 # +0x5E45 # +0x5E47 # +0x5E4C # +0x5E4E # +0x5E54 # +0x5E55 # +0x5E57 # +0x5E5F # +0x5E61 # +0x5E62 # +0x5E63 # +0x5E64 # +0x5E72 # +0x5E73 # +0x5E74 # +0x5E75 # +0x5E76 # +0x5E78 # +0x5E79 # +0x5E7A # +0x5E7B # +0x5E7C # +0x5E7D # +0x5E7E # +0x5E7F # +0x5E81 # +0x5E83 # +0x5E84 # +0x5E87 # +0x5E8A # +0x5E8F # +0x5E95 # +0x5E96 # +0x5E97 # +0x5E9A # +0x5E9C # +0x5EA0 # +0x5EA6 # +0x5EA7 # +0x5EAB # +0x5EAD # +0x5EB5 # +0x5EB6 # +0x5EB7 # +0x5EB8 # +0x5EC1 # +0x5EC2 # +0x5EC3 # +0x5EC8 # +0x5EC9 # +0x5ECA # +0x5ECF # +0x5ED0 # +0x5ED3 # +0x5ED6 # +0x5EDA # +0x5EDB # +0x5EDD # +0x5EDF # +0x5EE0 # +0x5EE1 # +0x5EE2 # +0x5EE3 # +0x5EE8 # +0x5EE9 # +0x5EEC # +0x5EF0 # +0x5EF1 # +0x5EF3 # +0x5EF4 # +0x5EF6 # +0x5EF7 # +0x5EF8 # +0x5EFA # +0x5EFB # +0x5EFC # +0x5EFE # +0x5EFF # +0x5F01 # +0x5F03 # +0x5F04 # +0x5F09 # +0x5F0A # +0x5F0B # +0x5F0C # +0x5F0D # +0x5F0F # +0x5F10 # +0x5F11 # +0x5F13 # +0x5F14 # +0x5F15 # +0x5F16 # +0x5F17 # +0x5F18 # +0x5F1B # +0x5F1F # +0x5F25 # +0x5F26 # +0x5F27 # +0x5F29 # +0x5F2D # +0x5F2F # +0x5F31 # +0x5F35 # +0x5F37 # +0x5F38 # +0x5F3C # +0x5F3E # +0x5F41 # +0x5F48 # +0x5F4A # +0x5F4C # +0x5F4E # +0x5F51 # +0x5F53 # +0x5F56 # +0x5F57 # +0x5F59 # +0x5F5C # +0x5F5D # +0x5F61 # +0x5F62 # +0x5F66 # +0x5F69 # +0x5F6A # +0x5F6B # +0x5F6C # +0x5F6D # +0x5F70 # +0x5F71 # +0x5F73 # +0x5F77 # +0x5F79 # +0x5F7C # +0x5F7F # +0x5F80 # +0x5F81 # +0x5F82 # +0x5F83 # +0x5F84 # +0x5F85 # +0x5F87 # +0x5F88 # +0x5F8A # +0x5F8B # +0x5F8C # +0x5F90 # +0x5F91 # +0x5F92 # +0x5F93 # +0x5F97 # +0x5F98 # +0x5F99 # +0x5F9E # +0x5FA0 # +0x5FA1 # +0x5FA8 # +0x5FA9 # +0x5FAA # +0x5FAD # +0x5FAE # +0x5FB3 # +0x5FB4 # +0x5FB9 # +0x5FBC # +0x5FBD # +0x5FC3 # +0x5FC5 # +0x5FCC # +0x5FCD # +0x5FD6 # +0x5FD7 # +0x5FD8 # +0x5FD9 # +0x5FDC # +0x5FDD # +0x5FE0 # +0x5FE4 # +0x5FEB # +0x5FF0 # +0x5FF1 # +0x5FF5 # +0x5FF8 # +0x5FFB # +0x5FFD # +0x5FFF # +0x600E # +0x600F # +0x6010 # +0x6012 # +0x6015 # +0x6016 # +0x6019 # +0x601B # +0x601C # +0x601D # +0x6020 # +0x6021 # +0x6025 # +0x6026 # +0x6027 # +0x6028 # +0x6029 # +0x602A # +0x602B # +0x602F # +0x6031 # +0x603A # +0x6041 # +0x6042 # +0x6043 # +0x6046 # +0x604A # +0x604B # +0x604D # +0x6050 # +0x6052 # +0x6055 # +0x6059 # +0x605A # +0x605F # +0x6060 # +0x6062 # +0x6063 # +0x6064 # +0x6065 # +0x6068 # +0x6069 # +0x606A # +0x606B # +0x606C # +0x606D # +0x606F # +0x6070 # +0x6075 # +0x6077 # +0x6081 # +0x6083 # +0x6084 # +0x6089 # +0x608B # +0x608C # +0x608D # +0x6092 # +0x6094 # +0x6096 # +0x6097 # +0x609A # +0x609B # +0x609F # +0x60A0 # +0x60A3 # +0x60A6 # +0x60A7 # +0x60A9 # +0x60AA # +0x60B2 # +0x60B3 # +0x60B4 # +0x60B5 # +0x60B6 # +0x60B8 # +0x60BC # +0x60BD # +0x60C5 # +0x60C6 # +0x60C7 # +0x60D1 # +0x60D3 # +0x60D8 # +0x60DA # +0x60DC # +0x60DF # +0x60E0 # +0x60E1 # +0x60E3 # +0x60E7 # +0x60E8 # +0x60F0 # +0x60F1 # +0x60F3 # +0x60F4 # +0x60F6 # +0x60F7 # +0x60F9 # +0x60FA # +0x60FB # +0x6100 # +0x6101 # +0x6103 # +0x6106 # +0x6108 # +0x6109 # +0x610D # +0x610E # +0x610F # +0x6115 # +0x611A # +0x611B # +0x611F # +0x6121 # +0x6127 # +0x6128 # +0x612C # +0x6134 # +0x613C # +0x613D # +0x613E # +0x613F # +0x6142 # +0x6144 # +0x6147 # +0x6148 # +0x614A # +0x614B # +0x614C # +0x614D # +0x614E # +0x6153 # +0x6155 # +0x6158 # +0x6159 # +0x615A # +0x615D # +0x615F # +0x6162 # +0x6163 # +0x6165 # +0x6167 # +0x6168 # +0x616B # +0x616E # +0x616F # +0x6170 # +0x6171 # +0x6173 # +0x6174 # +0x6175 # +0x6176 # +0x6177 # +0x617E # +0x6182 # +0x6187 # +0x618A # +0x618E # +0x6190 # +0x6191 # +0x6194 # +0x6196 # +0x6199 # +0x619A # +0x61A4 # +0x61A7 # +0x61A9 # +0x61AB # +0x61AC # +0x61AE # +0x61B2 # +0x61B6 # +0x61BA # +0x61BE # +0x61C3 # +0x61C6 # +0x61C7 # +0x61C8 # +0x61C9 # +0x61CA # +0x61CB # +0x61CC # +0x61CD # +0x61D0 # +0x61E3 # +0x61E6 # +0x61F2 # +0x61F4 # +0x61F6 # +0x61F7 # +0x61F8 # +0x61FA # +0x61FC # +0x61FD # +0x61FE # +0x61FF # +0x6200 # +0x6208 # +0x6209 # +0x620A # +0x620C # +0x620D # +0x620E # +0x6210 # +0x6211 # +0x6212 # +0x6214 # +0x6216 # +0x621A # +0x621B # +0x621D # +0x621E # +0x621F # +0x6221 # +0x6226 # +0x622A # +0x622E # +0x622F # +0x6230 # +0x6232 # +0x6233 # +0x6234 # +0x6238 # +0x623B # +0x623F # +0x6240 # +0x6241 # +0x6247 # +0x6248 # +0x6249 # +0x624B # +0x624D # +0x624E # +0x6253 # +0x6255 # +0x6258 # +0x625B # +0x625E # +0x6260 # +0x6263 # +0x6268 # +0x626E # +0x6271 # +0x6276 # +0x6279 # +0x627C # +0x627E # +0x627F # +0x6280 # +0x6282 # +0x6283 # +0x6284 # +0x6289 # +0x628A # +0x6291 # +0x6292 # +0x6293 # +0x6294 # +0x6295 # +0x6296 # +0x6297 # +0x6298 # +0x629B # +0x629C # +0x629E # +0x62AB # +0x62AC # +0x62B1 # +0x62B5 # +0x62B9 # +0x62BB # +0x62BC # +0x62BD # +0x62C2 # +0x62C5 # +0x62C6 # +0x62C7 # +0x62C8 # +0x62C9 # +0x62CA # +0x62CC # +0x62CD # +0x62CF # +0x62D0 # +0x62D1 # +0x62D2 # +0x62D3 # +0x62D4 # +0x62D7 # +0x62D8 # +0x62D9 # +0x62DB # +0x62DC # +0x62DD # +0x62E0 # +0x62E1 # +0x62EC # +0x62ED # +0x62EE # +0x62EF # +0x62F1 # +0x62F3 # +0x62F5 # +0x62F6 # +0x62F7 # +0x62FE # +0x62FF # +0x6301 # +0x6302 # +0x6307 # +0x6308 # +0x6309 # +0x630C # +0x6311 # +0x6319 # +0x631F # +0x6327 # +0x6328 # +0x632B # +0x632F # +0x633A # +0x633D # +0x633E # +0x633F # +0x6349 # +0x634C # +0x634D # +0x634F # +0x6350 # +0x6355 # +0x6357 # +0x635C # +0x6367 # +0x6368 # +0x6369 # +0x636B # +0x636E # +0x6372 # +0x6376 # +0x6377 # +0x637A # +0x637B # +0x6380 # +0x6383 # +0x6388 # +0x6389 # +0x638C # +0x638E # +0x638F # +0x6392 # +0x6396 # +0x6398 # +0x639B # +0x639F # +0x63A0 # +0x63A1 # +0x63A2 # +0x63A3 # +0x63A5 # +0x63A7 # +0x63A8 # +0x63A9 # +0x63AA # +0x63AB # +0x63AC # +0x63B2 # +0x63B4 # +0x63B5 # +0x63BB # +0x63BE # +0x63C0 # +0x63C3 # +0x63C4 # +0x63C6 # +0x63C9 # +0x63CF # +0x63D0 # +0x63D2 # +0x63D6 # +0x63DA # +0x63DB # +0x63E1 # +0x63E3 # +0x63E9 # +0x63EE # +0x63F4 # +0x63F6 # +0x63FA # +0x6406 # +0x640D # +0x640F # +0x6413 # +0x6416 # +0x6417 # +0x641C # +0x6426 # +0x6428 # +0x642C # +0x642D # +0x6434 # +0x6436 # +0x643A # +0x643E # +0x6442 # +0x644E # +0x6458 # +0x6467 # +0x6469 # +0x646F # +0x6476 # +0x6478 # +0x647A # +0x6483 # +0x6488 # +0x6492 # +0x6493 # +0x6495 # +0x649A # +0x649E # +0x64A4 # +0x64A5 # +0x64A9 # +0x64AB # +0x64AD # +0x64AE # +0x64B0 # +0x64B2 # +0x64B9 # +0x64BB # +0x64BC # +0x64C1 # +0x64C2 # +0x64C5 # +0x64C7 # +0x64CD # +0x64D2 # +0x64D4 # +0x64D8 # +0x64DA # +0x64E0 # +0x64E1 # +0x64E2 # +0x64E3 # +0x64E6 # +0x64E7 # +0x64EC # +0x64EF # +0x64F1 # +0x64F2 # +0x64F4 # +0x64F6 # +0x64FA # +0x64FD # +0x64FE # +0x6500 # +0x6505 # +0x6518 # +0x651C # +0x651D # +0x6523 # +0x6524 # +0x652A # +0x652B # +0x652C # +0x652F # +0x6534 # +0x6535 # +0x6536 # +0x6537 # +0x6538 # +0x6539 # +0x653B # +0x653E # +0x653F # +0x6545 # +0x6548 # +0x654D # +0x654F # +0x6551 # +0x6555 # +0x6556 # +0x6557 # +0x6558 # +0x6559 # +0x655D # +0x655E # +0x6562 # +0x6563 # +0x6566 # +0x656C # +0x6570 # +0x6572 # +0x6574 # +0x6575 # +0x6577 # +0x6578 # +0x6582 # +0x6583 # +0x6587 # +0x6588 # +0x6589 # +0x658C # +0x658E # +0x6590 # +0x6591 # +0x6597 # +0x6599 # +0x659B # +0x659C # +0x659F # +0x65A1 # +0x65A4 # +0x65A5 # +0x65A7 # +0x65AB # +0x65AC # +0x65AD # +0x65AF # +0x65B0 # +0x65B7 # +0x65B9 # +0x65BC # +0x65BD # +0x65C1 # +0x65C3 # +0x65C4 # +0x65C5 # +0x65C6 # +0x65CB # +0x65CC # +0x65CF # +0x65D2 # +0x65D7 # +0x65D9 # +0x65DB # +0x65E0 # +0x65E1 # +0x65E2 # +0x65E5 # +0x65E6 # +0x65E7 # +0x65E8 # +0x65E9 # +0x65EC # +0x65ED # +0x65F1 # +0x65FA # +0x65FB # +0x6602 # +0x6603 # +0x6606 # +0x6607 # +0x660A # +0x660C # +0x660E # +0x660F # +0x6613 # +0x6614 # +0x661C # +0x661F # +0x6620 # +0x6625 # +0x6627 # +0x6628 # +0x662D # +0x662F # +0x6634 # +0x6635 # +0x6636 # +0x663C # +0x663F # +0x6641 # +0x6642 # +0x6643 # +0x6644 # +0x6649 # +0x664B # +0x664F # +0x6652 # +0x665D # +0x665E # +0x665F # +0x6662 # +0x6664 # +0x6666 # +0x6667 # +0x6668 # +0x6669 # +0x666E # +0x666F # +0x6670 # +0x6674 # +0x6676 # +0x667A # +0x6681 # +0x6683 # +0x6684 # +0x6687 # +0x6688 # +0x6689 # +0x668E # +0x6691 # +0x6696 # +0x6697 # +0x6698 # +0x669D # +0x66A2 # +0x66A6 # +0x66AB # +0x66AE # +0x66B4 # +0x66B8 # +0x66B9 # +0x66BC # +0x66BE # +0x66C1 # +0x66C4 # +0x66C7 # +0x66C9 # +0x66D6 # +0x66D9 # +0x66DA # +0x66DC # +0x66DD # +0x66E0 # +0x66E6 # +0x66E9 # +0x66F0 # +0x66F2 # +0x66F3 # +0x66F4 # +0x66F5 # +0x66F7 # +0x66F8 # +0x66F9 # +0x66FC # +0x66FD # +0x66FE # +0x66FF # +0x6700 # +0x6703 # +0x6708 # +0x6709 # +0x670B # +0x670D # +0x670F # +0x6714 # +0x6715 # +0x6716 # +0x6717 # +0x671B # +0x671D # +0x671E # +0x671F # +0x6726 # +0x6727 # +0x6728 # +0x672A # +0x672B # +0x672C # +0x672D # +0x672E # +0x6731 # +0x6734 # +0x6736 # +0x6737 # +0x6738 # +0x673A # +0x673D # +0x673F # +0x6741 # +0x6746 # +0x6749 # +0x674E # +0x674F # +0x6750 # +0x6751 # +0x6753 # +0x6756 # +0x6759 # +0x675C # +0x675E # +0x675F # +0x6760 # +0x6761 # +0x6762 # +0x6763 # +0x6764 # +0x6765 # +0x676A # +0x676D # +0x676F # +0x6770 # +0x6771 # +0x6772 # +0x6773 # +0x6775 # +0x6777 # +0x677C # +0x677E # +0x677F # +0x6785 # +0x6787 # +0x6789 # +0x678B # +0x678C # +0x6790 # +0x6795 # +0x6797 # +0x679A # +0x679C # +0x679D # +0x67A0 # +0x67A1 # +0x67A2 # +0x67A6 # +0x67A9 # +0x67AF # +0x67B3 # +0x67B4 # +0x67B6 # +0x67B7 # +0x67B8 # +0x67B9 # +0x67C1 # +0x67C4 # +0x67C6 # +0x67CA # +0x67CE # +0x67CF # +0x67D0 # +0x67D1 # +0x67D3 # +0x67D4 # +0x67D8 # +0x67DA # +0x67DD # +0x67DE # +0x67E2 # +0x67E4 # +0x67E7 # +0x67E9 # +0x67EC # +0x67EE # +0x67EF # +0x67F1 # +0x67F3 # +0x67F4 # +0x67F5 # +0x67FB # +0x67FE # +0x67FF # +0x6802 # +0x6803 # +0x6804 # +0x6813 # +0x6816 # +0x6817 # +0x681E # +0x6821 # +0x6822 # +0x6829 # +0x682A # +0x682B # +0x6832 # +0x6834 # +0x6838 # +0x6839 # +0x683C # +0x683D # +0x6840 # +0x6841 # +0x6842 # +0x6843 # +0x6846 # +0x6848 # +0x684D # +0x684E # +0x6850 # +0x6851 # +0x6853 # +0x6854 # +0x6859 # +0x685C # +0x685D # +0x685F # +0x6863 # +0x6867 # +0x6874 # +0x6876 # +0x6877 # +0x687E # +0x687F # +0x6881 # +0x6883 # +0x6885 # +0x688D # +0x688F # +0x6893 # +0x6894 # +0x6897 # +0x689B # +0x689D # +0x689F # +0x68A0 # +0x68A2 # +0x68A6 # +0x68A7 # +0x68A8 # +0x68AD # +0x68AF # +0x68B0 # +0x68B1 # +0x68B3 # +0x68B5 # +0x68B6 # +0x68B9 # +0x68BA # +0x68BC # +0x68C4 # +0x68C6 # +0x68C9 # +0x68CA # +0x68CB # +0x68CD # +0x68D2 # +0x68D4 # +0x68D5 # +0x68D7 # +0x68D8 # +0x68DA # +0x68DF # +0x68E0 # +0x68E1 # +0x68E3 # +0x68E7 # +0x68EE # +0x68EF # +0x68F2 # +0x68F9 # +0x68FA # +0x6900 # +0x6901 # +0x6904 # +0x6905 # +0x6908 # +0x690B # +0x690C # +0x690D # +0x690E # +0x690F # +0x6912 # +0x6919 # +0x691A # +0x691B # +0x691C # +0x6921 # +0x6922 # +0x6923 # +0x6925 # +0x6926 # +0x6928 # +0x692A # +0x6930 # +0x6934 # +0x6936 # +0x6939 # +0x693D # +0x693F # +0x694A # +0x6953 # +0x6954 # +0x6955 # +0x6959 # +0x695A # +0x695C # +0x695D # +0x695E # +0x6960 # +0x6961 # +0x6962 # +0x696A # +0x696B # +0x696D # +0x696E # +0x696F # +0x6973 # +0x6974 # +0x6975 # +0x6977 # +0x6978 # +0x6979 # +0x697C # +0x697D # +0x697E # +0x6981 # +0x6982 # +0x698A # +0x698E # +0x6991 # +0x6994 # +0x6995 # +0x699B # +0x699C # +0x69A0 # +0x69A7 # +0x69AE # +0x69B1 # +0x69B2 # +0x69B4 # +0x69BB # +0x69BE # +0x69BF # +0x69C1 # +0x69C3 # +0x69C7 # +0x69CA # +0x69CB # +0x69CC # +0x69CD # +0x69CE # +0x69D0 # +0x69D3 # +0x69D8 # +0x69D9 # +0x69DD # +0x69DE # +0x69E7 # +0x69E8 # +0x69EB # +0x69ED # +0x69F2 # +0x69F9 # +0x69FB # +0x69FD # +0x69FF # +0x6A02 # +0x6A05 # +0x6A0A # +0x6A0B # +0x6A0C # +0x6A12 # +0x6A13 # +0x6A14 # +0x6A17 # +0x6A19 # +0x6A1B # +0x6A1E # +0x6A1F # +0x6A21 # +0x6A22 # +0x6A23 # +0x6A29 # +0x6A2A # +0x6A2B # +0x6A2E # +0x6A35 # +0x6A36 # +0x6A38 # +0x6A39 # +0x6A3A # +0x6A3D # +0x6A44 # +0x6A47 # +0x6A48 # +0x6A4B # +0x6A58 # +0x6A59 # +0x6A5F # +0x6A61 # +0x6A62 # +0x6A66 # +0x6A72 # +0x6A78 # +0x6A7F # +0x6A80 # +0x6A84 # +0x6A8D # +0x6A8E # +0x6A90 # +0x6A97 # +0x6A9C # +0x6AA0 # +0x6AA2 # +0x6AA3 # +0x6AAA # +0x6AAC # +0x6AAE # +0x6AB3 # +0x6AB8 # +0x6ABB # +0x6AC1 # +0x6AC2 # +0x6AC3 # +0x6AD1 # +0x6AD3 # +0x6ADA # +0x6ADB # +0x6ADE # +0x6ADF # +0x6AE8 # +0x6AEA # +0x6AFA # +0x6AFB # +0x6B04 # +0x6B05 # +0x6B0A # +0x6B12 # +0x6B16 # +0x6B1D # +0x6B1F # +0x6B20 # +0x6B21 # +0x6B23 # +0x6B27 # +0x6B32 # +0x6B37 # +0x6B38 # +0x6B39 # +0x6B3A # +0x6B3D # +0x6B3E # +0x6B43 # +0x6B47 # +0x6B49 # +0x6B4C # +0x6B4E # +0x6B50 # +0x6B53 # +0x6B54 # +0x6B59 # +0x6B5B # +0x6B5F # +0x6B61 # +0x6B62 # +0x6B63 # +0x6B64 # +0x6B66 # +0x6B69 # +0x6B6A # +0x6B6F # +0x6B73 # +0x6B74 # +0x6B78 # +0x6B79 # +0x6B7B # +0x6B7F # +0x6B80 # +0x6B83 # +0x6B84 # +0x6B86 # +0x6B89 # +0x6B8A # +0x6B8B # +0x6B8D # +0x6B95 # +0x6B96 # +0x6B98 # +0x6B9E # +0x6BA4 # +0x6BAA # +0x6BAB # +0x6BAF # +0x6BB1 # +0x6BB2 # +0x6BB3 # +0x6BB4 # +0x6BB5 # +0x6BB7 # +0x6BBA # +0x6BBB # +0x6BBC # +0x6BBF # +0x6BC0 # +0x6BC5 # +0x6BC6 # +0x6BCB # +0x6BCD # +0x6BCE # +0x6BD2 # +0x6BD3 # +0x6BD4 # +0x6BD8 # +0x6BDB # +0x6BDF # +0x6BEB # +0x6BEC # +0x6BEF # +0x6BF3 # +0x6C08 # +0x6C0F # +0x6C11 # +0x6C13 # +0x6C14 # +0x6C17 # +0x6C1B # +0x6C23 # +0x6C24 # +0x6C34 # +0x6C37 # +0x6C38 # +0x6C3E # +0x6C40 # +0x6C41 # +0x6C42 # +0x6C4E # +0x6C50 # +0x6C55 # +0x6C57 # +0x6C5A # +0x6C5D # +0x6C5E # +0x6C5F # +0x6C60 # +0x6C62 # +0x6C68 # +0x6C6A # +0x6C70 # +0x6C72 # +0x6C73 # +0x6C7A # +0x6C7D # +0x6C7E # +0x6C81 # +0x6C82 # +0x6C83 # +0x6C88 # +0x6C8C # +0x6C8D # +0x6C90 # +0x6C92 # +0x6C93 # +0x6C96 # +0x6C99 # +0x6C9A # +0x6C9B # +0x6CA1 # +0x6CA2 # +0x6CAB # +0x6CAE # +0x6CB1 # +0x6CB3 # +0x6CB8 # +0x6CB9 # +0x6CBA # +0x6CBB # +0x6CBC # +0x6CBD # +0x6CBE # +0x6CBF # +0x6CC1 # +0x6CC4 # +0x6CC5 # +0x6CC9 # +0x6CCA # +0x6CCC # +0x6CD3 # +0x6CD5 # +0x6CD7 # +0x6CD9 # +0x6CDB # +0x6CDD # +0x6CE1 # +0x6CE2 # +0x6CE3 # +0x6CE5 # +0x6CE8 # +0x6CEA # +0x6CEF # +0x6CF0 # +0x6CF1 # +0x6CF3 # +0x6D0B # +0x6D0C # +0x6D12 # +0x6D17 # +0x6D19 # +0x6D1B # +0x6D1E # +0x6D1F # +0x6D25 # +0x6D29 # +0x6D2A # +0x6D2B # +0x6D32 # +0x6D33 # +0x6D35 # +0x6D36 # +0x6D38 # +0x6D3B # +0x6D3D # +0x6D3E # +0x6D41 # +0x6D44 # +0x6D45 # +0x6D59 # +0x6D5A # +0x6D5C # +0x6D63 # +0x6D64 # +0x6D66 # +0x6D69 # +0x6D6A # +0x6D6C # +0x6D6E # +0x6D74 # +0x6D77 # +0x6D78 # +0x6D79 # +0x6D85 # +0x6D88 # +0x6D8C # +0x6D8E # +0x6D93 # +0x6D95 # +0x6D99 # +0x6D9B # +0x6D9C # +0x6DAF # +0x6DB2 # +0x6DB5 # +0x6DB8 # +0x6DBC # +0x6DC0 # +0x6DC5 # +0x6DC6 # +0x6DC7 # +0x6DCB # +0x6DCC # +0x6DD1 # +0x6DD2 # +0x6DD5 # +0x6DD8 # +0x6DD9 # +0x6DDE # +0x6DE1 # +0x6DE4 # +0x6DE6 # +0x6DE8 # +0x6DEA # +0x6DEB # +0x6DEC # +0x6DEE # +0x6DF1 # +0x6DF3 # +0x6DF5 # +0x6DF7 # +0x6DF9 # +0x6DFA # +0x6DFB # +0x6E05 # +0x6E07 # +0x6E08 # +0x6E09 # +0x6E0A # +0x6E0B # +0x6E13 # +0x6E15 # +0x6E19 # +0x6E1A # +0x6E1B # +0x6E1D # +0x6E1F # +0x6E20 # +0x6E21 # +0x6E23 # +0x6E24 # +0x6E25 # +0x6E26 # +0x6E29 # +0x6E2B # +0x6E2C # +0x6E2D # +0x6E2E # +0x6E2F # +0x6E38 # +0x6E3A # +0x6E3E # +0x6E43 # +0x6E4A # +0x6E4D # +0x6E4E # +0x6E56 # +0x6E58 # +0x6E5B # +0x6E5F # +0x6E67 # +0x6E6B # +0x6E6E # +0x6E6F # +0x6E72 # +0x6E76 # +0x6E7E # +0x6E7F # +0x6E80 # +0x6E82 # +0x6E8C # +0x6E8F # +0x6E90 # +0x6E96 # +0x6E98 # +0x6E9C # +0x6E9D # +0x6E9F # +0x6EA2 # +0x6EA5 # +0x6EAA # +0x6EAF # +0x6EB2 # +0x6EB6 # +0x6EB7 # +0x6EBA # +0x6EBD # +0x6EC2 # +0x6EC4 # +0x6EC5 # +0x6EC9 # +0x6ECB # +0x6ECC # +0x6ED1 # +0x6ED3 # +0x6ED4 # +0x6ED5 # +0x6EDD # +0x6EDE # +0x6EEC # +0x6EEF # +0x6EF2 # +0x6EF4 # +0x6EF7 # +0x6EF8 # +0x6EFE # +0x6EFF # +0x6F01 # +0x6F02 # +0x6F06 # +0x6F09 # +0x6F0F # +0x6F11 # +0x6F13 # +0x6F14 # +0x6F15 # +0x6F20 # +0x6F22 # +0x6F23 # +0x6F2B # +0x6F2C # +0x6F31 # +0x6F32 # +0x6F38 # +0x6F3E # +0x6F3F # +0x6F41 # +0x6F45 # +0x6F54 # +0x6F58 # +0x6F5B # +0x6F5C # +0x6F5F # +0x6F64 # +0x6F66 # +0x6F6D # +0x6F6E # +0x6F6F # +0x6F70 # +0x6F74 # +0x6F78 # +0x6F7A # +0x6F7C # +0x6F80 # +0x6F81 # +0x6F82 # +0x6F84 # +0x6F86 # +0x6F8E # +0x6F91 # +0x6F97 # +0x6FA1 # +0x6FA3 # +0x6FA4 # +0x6FAA # +0x6FB1 # +0x6FB3 # +0x6FB9 # +0x6FC0 # +0x6FC1 # +0x6FC2 # +0x6FC3 # +0x6FC6 # +0x6FD4 # +0x6FD5 # +0x6FD8 # +0x6FDB # +0x6FDF # +0x6FE0 # +0x6FE1 # +0x6FE4 # +0x6FEB # +0x6FEC # +0x6FEE # +0x6FEF # +0x6FF1 # +0x6FF3 # +0x6FF6 # +0x6FFA # +0x6FFE # +0x7001 # +0x7009 # +0x700B # +0x700F # +0x7011 # +0x7015 # +0x7018 # +0x701A # +0x701B # +0x701D # +0x701E # +0x701F # +0x7026 # +0x7027 # +0x702C # +0x7030 # +0x7032 # +0x703E # +0x704C # +0x7051 # +0x7058 # +0x7063 # +0x706B # +0x706F # +0x7070 # +0x7078 # +0x707C # +0x707D # +0x7089 # +0x708A # +0x708E # +0x7092 # +0x7099 # +0x70AC # +0x70AD # +0x70AE # +0x70AF # +0x70B3 # +0x70B8 # +0x70B9 # +0x70BA # +0x70C8 # +0x70CB # +0x70CF # +0x70D9 # +0x70DD # +0x70DF # +0x70F1 # +0x70F9 # +0x70FD # +0x7109 # +0x7114 # +0x7119 # +0x711A # +0x711C # +0x7121 # +0x7126 # +0x7136 # +0x713C # +0x7149 # +0x714C # +0x714E # +0x7155 # +0x7156 # +0x7159 # +0x7162 # +0x7164 # +0x7165 # +0x7166 # +0x7167 # +0x7169 # +0x716C # +0x716E # +0x717D # +0x7184 # +0x7188 # +0x718A # +0x718F # +0x7194 # +0x7195 # +#0x7199 # # not in kochi fonts +0x719F # +0x71A8 # +0x71AC # +0x71B1 # +0x71B9 # +0x71BE # +0x71C3 # +0x71C8 # +0x71C9 # +0x71CE # +0x71D0 # +0x71D2 # +0x71D4 # +0x71D5 # +0x71D7 # +0x71DF # +0x71E0 # +0x71E5 # +0x71E6 # +0x71E7 # +0x71EC # +0x71ED # +0x71EE # +0x71F5 # +0x71F9 # +0x71FB # +0x71FC # +0x71FF # +0x7206 # +0x720D # +0x7210 # +0x721B # +0x7228 # +0x722A # +0x722C # +0x722D # +0x7230 # +0x7232 # +0x7235 # +0x7236 # +0x723A # +0x723B # +0x723C # +0x723D # +0x723E # +0x723F # +0x7240 # +0x7246 # +0x7247 # +0x7248 # +0x724B # +0x724C # +0x7252 # +0x7258 # +0x7259 # +0x725B # +0x725D # +0x725F # +0x7261 # +0x7262 # +0x7267 # +0x7269 # +0x7272 # +0x7274 # +0x7279 # +0x727D # +0x727E # +0x7280 # +0x7281 # +0x7282 # +0x7287 # +0x7292 # +0x7296 # +0x72A0 # +0x72A2 # +0x72A7 # +0x72AC # +0x72AF # +0x72B2 # +0x72B6 # +0x72B9 # +0x72C2 # +0x72C3 # +0x72C4 # +0x72C6 # +0x72CE # +0x72D0 # +0x72D2 # +0x72D7 # +0x72D9 # +0x72DB # +0x72E0 # +0x72E1 # +0x72E2 # +0x72E9 # +0x72EC # +0x72ED # +0x72F7 # +0x72F8 # +0x72F9 # +0x72FC # +0x72FD # +0x730A # +0x7316 # +0x7317 # +0x731B # +0x731C # +0x731D # +0x731F # +0x7325 # +0x7329 # +0x732A # +0x732B # +0x732E # +0x732F # +0x7334 # +0x7336 # +0x7337 # +0x733E # +0x733F # +0x7344 # +0x7345 # +0x734E # +0x734F # +0x7357 # +0x7363 # +0x7368 # +0x736A # +0x7370 # +0x7372 # +0x7375 # +0x7378 # +0x737A # +0x737B # +0x7384 # +0x7387 # +0x7389 # +0x738B # +0x7396 # +0x73A9 # +0x73B2 # +0x73B3 # +0x73BB # +0x73C0 # +0x73C2 # +0x73C8 # +0x73CA # +0x73CD # +0x73CE # +0x73DE # +0x73E0 # +0x73E5 # +0x73EA # +0x73ED # +0x73EE # +0x73F1 # +0x73F8 # +0x73FE # +0x7403 # +0x7405 # +0x7406 # +0x7409 # +0x7422 # +0x7425 # +0x7432 # +0x7433 # +0x7434 # +0x7435 # +0x7436 # +0x743A # +0x743F # +0x7441 # +0x7455 # +0x7459 # +0x745A # +0x745B # +0x745C # +0x745E # +0x745F # +0x7460 # +0x7463 # +0x7464 # +0x7469 # +0x746A # +0x746F # +0x7470 # +0x7473 # +0x7476 # +0x747E # +0x7483 # +0x748B # +0x749E # +0x74A2 # +0x74A7 # +0x74B0 # +0x74BD # +0x74CA # +0x74CF # +0x74D4 # +0x74DC # +0x74E0 # +0x74E2 # +0x74E3 # +0x74E6 # +0x74E7 # +0x74E9 # +0x74EE # +0x74F0 # +0x74F1 # +0x74F2 # +0x74F6 # +0x74F7 # +0x74F8 # +0x7503 # +0x7504 # +0x7505 # +0x750C # +0x750D # +0x750E # +0x7511 # +0x7513 # +0x7515 # +0x7518 # +0x751A # +0x751C # +0x751E # +0x751F # +0x7523 # +0x7525 # +0x7526 # +0x7528 # +0x752B # +0x752C # +0x7530 # +0x7531 # +0x7532 # +0x7533 # +0x7537 # +0x7538 # +0x753A # +0x753B # +0x753C # +0x7544 # +0x7546 # +0x7549 # +0x754A # +0x754B # +0x754C # +0x754D # +0x754F # +0x7551 # +0x7554 # +0x7559 # +0x755A # +0x755B # +0x755C # +0x755D # +0x7560 # +0x7562 # +0x7564 # +0x7565 # +0x7566 # +0x7567 # +0x7569 # +0x756A # +0x756B # +0x756D # +0x7570 # +0x7573 # +0x7574 # +0x7576 # +0x7577 # +0x7578 # +0x757F # +0x7582 # +0x7586 # +0x7587 # +0x7589 # +0x758A # +0x758B # +0x758E # +0x758F # +0x7591 # +0x7594 # +0x759A # +0x759D # +0x75A3 # +0x75A5 # +0x75AB # +0x75B1 # +0x75B2 # +0x75B3 # +0x75B5 # +0x75B8 # +0x75B9 # +0x75BC # +0x75BD # +0x75BE # +0x75C2 # +0x75C3 # +0x75C5 # +0x75C7 # +0x75CA # +0x75CD # +0x75D2 # +0x75D4 # +0x75D5 # +0x75D8 # +0x75D9 # +0x75DB # +0x75DE # +0x75E2 # +0x75E3 # +0x75E9 # +0x75F0 # +0x75F2 # +0x75F3 # +0x75F4 # +0x75FA # +0x75FC # +0x75FE # +0x75FF # +0x7601 # +0x7609 # +0x760B # +0x760D # +0x761F # +0x7620 # +0x7621 # +0x7622 # +0x7624 # +0x7627 # +0x7630 # +0x7634 # +0x763B # +0x7642 # +0x7646 # +0x7647 # +0x7648 # +0x764C # +0x7652 # +0x7656 # +0x7658 # +0x765C # +0x7661 # +0x7662 # +0x7667 # +0x7668 # +0x7669 # +0x766A # +0x766C # +0x7670 # +0x7672 # +0x7676 # +0x7678 # +0x767A # +0x767B # +0x767C # +0x767D # +0x767E # +0x7680 # +0x7683 # +0x7684 # +0x7686 # +0x7687 # +0x7688 # +0x768B # +0x768E # +0x7690 # +0x7693 # +0x7696 # +0x7699 # +0x769A # +0x76AE # +0x76B0 # +0x76B4 # +0x76B7 # +0x76B8 # +0x76B9 # +0x76BA # +0x76BF # +0x76C2 # +0x76C3 # +0x76C6 # +0x76C8 # +0x76CA # +0x76CD # +0x76D2 # +0x76D6 # +0x76D7 # +0x76DB # +0x76DC # +0x76DE # +0x76DF # +0x76E1 # +0x76E3 # +0x76E4 # +0x76E5 # +0x76E7 # +0x76EA # +0x76EE # +0x76F2 # +0x76F4 # +0x76F8 # +0x76FB # +0x76FE # +0x7701 # +0x7704 # +0x7707 # +0x7708 # +0x7709 # +0x770B # +0x770C # +0x771B # +0x771E # +0x771F # +0x7720 # +0x7724 # +0x7725 # +0x7726 # +0x7729 # +0x7737 # +0x7738 # +0x773A # +0x773C # +0x7740 # +0x7747 # +0x775A # +0x775B # +0x7761 # +0x7763 # +0x7765 # +0x7766 # +0x7768 # +0x776B # +0x7779 # +0x777E # +0x777F # +0x778B # +0x778E # +0x7791 # +0x779E # +0x77A0 # +0x77A5 # +0x77AC # +0x77AD # +0x77B0 # +0x77B3 # +0x77B6 # +0x77B9 # +0x77BB # +0x77BC # +0x77BD # +0x77BF # +0x77C7 # +0x77CD # +0x77D7 # +0x77DA # +0x77DB # +0x77DC # +0x77E2 # +0x77E3 # +0x77E5 # +0x77E7 # +0x77E9 # +0x77ED # +0x77EE # +0x77EF # +0x77F3 # +0x77FC # +0x7802 # +0x780C # +0x7812 # +0x7814 # +0x7815 # +0x7820 # +0x7825 # +0x7826 # +0x7827 # +0x7832 # +0x7834 # +0x783A # +0x783F # +0x7845 # +0x785D # +0x786B # +0x786C # +0x786F # +0x7872 # +0x7874 # +0x787C # +0x7881 # +0x7886 # +0x7887 # +0x788C # +0x788D # +0x788E # +0x7891 # +0x7893 # +0x7895 # +0x7897 # +0x789A # +0x78A3 # +0x78A7 # +0x78A9 # +0x78AA # +0x78AF # +0x78B5 # +0x78BA # +0x78BC # +0x78BE # +0x78C1 # +0x78C5 # +0x78C6 # +0x78CA # +0x78CB # +0x78D0 # +0x78D1 # +0x78D4 # +0x78DA # +0x78E7 # +0x78E8 # +0x78EC # +0x78EF # +0x78F4 # +0x78FD # +0x7901 # +0x7907 # +0x790E # +0x7911 # +0x7912 # +0x7919 # +0x7926 # +0x792A # +0x792B # +0x792C # +0x793A # +0x793C # +0x793E # +0x7940 # +0x7941 # +0x7947 # +0x7948 # +0x7949 # +0x7950 # +0x7953 # +0x7955 # +0x7956 # +0x7957 # +0x795A # +0x795D # +0x795E # +0x795F # +0x7960 # +0x7962 # +0x7965 # +0x7968 # +0x796D # +0x7977 # +0x797A # +0x797F # +0x7980 # +0x7981 # +0x7984 # +0x7985 # +0x798A # +0x798D # +0x798E # +0x798F # +0x799D # +0x79A6 # +0x79A7 # +0x79AA # +0x79AE # +0x79B0 # +0x79B3 # +0x79B9 # +0x79BA # +0x79BD # +0x79BE # +0x79BF # +0x79C0 # +0x79C1 # +0x79C9 # +0x79CB # +0x79D1 # +0x79D2 # +0x79D5 # +0x79D8 # +0x79DF # +0x79E1 # +0x79E3 # +0x79E4 # +0x79E6 # +0x79E7 # +0x79E9 # +0x79EC # +0x79F0 # +0x79FB # +0x7A00 # +0x7A08 # +0x7A0B # +0x7A0D # +0x7A0E # +0x7A14 # +0x7A17 # +0x7A18 # +0x7A19 # +0x7A1A # +0x7A1C # +0x7A1F # +0x7A20 # +0x7A2E # +0x7A31 # +0x7A32 # +0x7A37 # +0x7A3B # +0x7A3C # +0x7A3D # +0x7A3E # +0x7A3F # +0x7A40 # +0x7A42 # +0x7A43 # +0x7A46 # +0x7A49 # +0x7A4D # +0x7A4E # +0x7A4F # +0x7A50 # +0x7A57 # +0x7A61 # +0x7A62 # +0x7A63 # +0x7A69 # +0x7A6B # +0x7A70 # +0x7A74 # +0x7A76 # +0x7A79 # +0x7A7A # +0x7A7D # +0x7A7F # +0x7A81 # +0x7A83 # +0x7A84 # +0x7A88 # +0x7A92 # +0x7A93 # +0x7A95 # +0x7A96 # +0x7A97 # +0x7A98 # +0x7A9F # +0x7AA9 # +0x7AAA # +0x7AAE # +0x7AAF # +0x7AB0 # +0x7AB6 # +0x7ABA # +0x7ABF # +0x7AC3 # +0x7AC4 # +0x7AC5 # +0x7AC7 # +0x7AC8 # +0x7ACA # +0x7ACB # +0x7ACD # +0x7ACF # +0x7AD2 # +0x7AD3 # +0x7AD5 # +0x7AD9 # +0x7ADA # +0x7ADC # +0x7ADD # +0x7ADF # +0x7AE0 # +0x7AE1 # +0x7AE2 # +0x7AE3 # +0x7AE5 # +0x7AE6 # +0x7AEA # +0x7AED # +0x7AEF # +0x7AF0 # +0x7AF6 # +0x7AF8 # +0x7AF9 # +0x7AFA # +0x7AFF # +0x7B02 # +0x7B04 # +0x7B06 # +0x7B08 # +0x7B0A # +0x7B0B # +0x7B0F # +0x7B11 # +0x7B18 # +0x7B19 # +0x7B1B # +0x7B1E # +0x7B20 # +0x7B25 # +0x7B26 # +0x7B28 # +0x7B2C # +0x7B33 # +0x7B35 # +0x7B36 # +0x7B39 # +0x7B45 # +0x7B46 # +0x7B48 # +0x7B49 # +0x7B4B # +0x7B4C # +0x7B4D # +0x7B4F # +0x7B50 # +0x7B51 # +0x7B52 # +0x7B54 # +0x7B56 # +0x7B5D # +0x7B65 # +0x7B67 # +0x7B6C # +0x7B6E # +0x7B70 # +0x7B71 # +0x7B74 # +0x7B75 # +0x7B7A # +0x7B86 # +0x7B87 # +0x7B8B # +0x7B8D # +0x7B8F # +0x7B92 # +0x7B94 # +0x7B95 # +0x7B97 # +0x7B98 # +0x7B99 # +0x7B9A # +0x7B9C # +0x7B9D # +0x7B9F # +0x7BA1 # +0x7BAA # +0x7BAD # +0x7BB1 # +0x7BB4 # +0x7BB8 # +0x7BC0 # +0x7BC1 # +0x7BC4 # +0x7BC6 # +0x7BC7 # +0x7BC9 # +0x7BCB # +0x7BCC # +0x7BCF # +0x7BDD # +0x7BE0 # +0x7BE4 # +0x7BE5 # +0x7BE6 # +0x7BE9 # +0x7BED # +0x7BF3 # +0x7BF6 # +0x7BF7 # +0x7C00 # +0x7C07 # +0x7C0D # +0x7C11 # +0x7C12 # +0x7C13 # +0x7C14 # +0x7C17 # +0x7C1F # +0x7C21 # +0x7C23 # +0x7C27 # +0x7C2A # +0x7C2B # +0x7C37 # +0x7C38 # +0x7C3D # +0x7C3E # +0x7C3F # +0x7C40 # +0x7C43 # +0x7C4C # +0x7C4D # +0x7C4F # +0x7C50 # +0x7C54 # +0x7C56 # +0x7C58 # +0x7C5F # +0x7C60 # +0x7C64 # +0x7C65 # +0x7C6C # +0x7C73 # +0x7C75 # +0x7C7E # +0x7C81 # +0x7C82 # +0x7C83 # +0x7C89 # +0x7C8B # +0x7C8D # +0x7C90 # +0x7C92 # +0x7C95 # +0x7C97 # +0x7C98 # +0x7C9B # +0x7C9F # +0x7CA1 # +0x7CA2 # +0x7CA4 # +0x7CA5 # +0x7CA7 # +0x7CA8 # +0x7CAB # +0x7CAD # +0x7CAE # +0x7CB1 # +0x7CB2 # +0x7CB3 # +0x7CB9 # +0x7CBD # +0x7CBE # +0x7CC0 # +0x7CC2 # +0x7CC5 # +0x7CCA # +0x7CCE # +0x7CD2 # +0x7CD6 # +0x7CD8 # +0x7CDC # +0x7CDE # +0x7CDF # +0x7CE0 # +0x7CE2 # +0x7CE7 # +0x7CEF # +0x7CF2 # +0x7CF4 # +0x7CF6 # +0x7CF8 # +0x7CFA # +0x7CFB # +0x7CFE # +0x7D00 # +0x7D02 # +0x7D04 # +0x7D05 # +0x7D06 # +0x7D0A # +0x7D0B # +0x7D0D # +0x7D10 # +0x7D14 # +0x7D15 # +0x7D17 # +0x7D18 # +0x7D19 # +0x7D1A # +0x7D1B # +0x7D1C # +0x7D20 # +0x7D21 # +0x7D22 # +0x7D2B # +0x7D2C # +0x7D2E # +0x7D2F # +0x7D30 # +0x7D32 # +0x7D33 # +0x7D35 # +0x7D39 # +0x7D3A # +0x7D3F # +0x7D42 # +0x7D43 # +0x7D44 # +0x7D45 # +0x7D46 # +0x7D4B # +0x7D4C # +0x7D4E # +0x7D4F # +0x7D50 # +0x7D56 # +0x7D5B # +0x7D5E # +0x7D61 # +0x7D62 # +0x7D63 # +0x7D66 # +0x7D68 # +0x7D6E # +0x7D71 # +0x7D72 # +0x7D73 # +0x7D75 # +0x7D76 # +0x7D79 # +0x7D7D # +0x7D89 # +0x7D8F # +0x7D93 # +0x7D99 # +0x7D9A # +0x7D9B # +0x7D9C # +0x7D9F # +0x7DA2 # +0x7DA3 # +0x7DAB # +0x7DAC # +0x7DAD # +0x7DAE # +0x7DAF # +0x7DB0 # +0x7DB1 # +0x7DB2 # +0x7DB4 # +0x7DB5 # +0x7DB8 # +0x7DBA # +0x7DBB # +0x7DBD # +0x7DBE # +0x7DBF # +0x7DC7 # +0x7DCA # +0x7DCB # +0x7DCF # +0x7DD1 # +0x7DD2 # +0x7DD5 # +0x7DD8 # +0x7DDA # +0x7DDC # +0x7DDD # +0x7DDE # +0x7DE0 # +0x7DE1 # +0x7DE4 # +0x7DE8 # +0x7DE9 # +0x7DEC # +0x7DEF # +0x7DF2 # +0x7DF4 # +0x7DFB # +0x7E01 # +0x7E04 # +0x7E05 # +0x7E09 # +0x7E0A # +0x7E0B # +0x7E12 # +0x7E1B # +0x7E1E # +0x7E1F # +0x7E21 # +0x7E22 # +0x7E23 # +0x7E26 # +0x7E2B # +0x7E2E # +0x7E31 # +0x7E32 # +0x7E35 # +0x7E37 # +0x7E39 # +0x7E3A # +0x7E3B # +0x7E3D # +0x7E3E # +0x7E41 # +0x7E43 # +0x7E46 # +0x7E4A # +0x7E4B # +0x7E4D # +0x7E54 # +0x7E55 # +0x7E56 # +0x7E59 # +0x7E5A # +0x7E5D # +0x7E5E # +0x7E66 # +0x7E67 # +0x7E69 # +0x7E6A # +0x7E6D # +0x7E70 # +0x7E79 # +0x7E7B # +0x7E7C # +0x7E7D # +0x7E7F # +0x7E82 # +0x7E83 # +0x7E88 # +0x7E89 # +0x7E8C # +0x7E8E # +0x7E8F # +0x7E90 # +0x7E92 # +0x7E93 # +0x7E94 # +0x7E96 # +0x7E9B # +0x7E9C # +0x7F36 # +0x7F38 # +0x7F3A # +0x7F45 # +0x7F4C # +0x7F4D # +0x7F4E # +0x7F50 # +0x7F51 # +0x7F54 # +0x7F55 # +0x7F58 # +0x7F5F # +0x7F60 # +0x7F67 # +0x7F68 # +0x7F69 # +0x7F6A # +0x7F6B # +0x7F6E # +0x7F70 # +0x7F72 # +0x7F75 # +0x7F77 # +0x7F78 # +0x7F79 # +0x7F82 # +0x7F83 # +0x7F85 # +0x7F86 # +0x7F87 # +0x7F88 # +0x7F8A # +0x7F8C # +0x7F8E # +0x7F94 # +0x7F9A # +0x7F9D # +0x7F9E # +0x7FA3 # +0x7FA4 # +0x7FA8 # +0x7FA9 # +0x7FAE # +0x7FAF # +0x7FB2 # +0x7FB6 # +0x7FB8 # +0x7FB9 # +0x7FBD # +0x7FC1 # +0x7FC5 # +0x7FC6 # +0x7FCA # +0x7FCC # +0x7FD2 # +0x7FD4 # +0x7FD5 # +0x7FE0 # +0x7FE1 # +0x7FE6 # +0x7FE9 # +0x7FEB # +0x7FF0 # +0x7FF3 # +0x7FF9 # +0x7FFB # +0x7FFC # +0x8000 # +0x8001 # +0x8003 # +0x8004 # +0x8005 # +0x8006 # +0x800B # +0x800C # +0x8010 # +0x8012 # +0x8015 # +0x8017 # +0x8018 # +0x8019 # +0x801C # +0x8021 # +0x8028 # +0x8033 # +0x8036 # +0x803B # +0x803D # +0x803F # +0x8046 # +0x804A # +0x8052 # +0x8056 # +0x8058 # +0x805A # +0x805E # +0x805F # +0x8061 # +0x8062 # +0x8068 # +0x806F # +0x8070 # +0x8072 # +0x8073 # +0x8074 # +0x8076 # +0x8077 # +0x8079 # +0x807D # +0x807E # +0x807F # +0x8084 # +0x8085 # +0x8086 # +0x8087 # +0x8089 # +0x808B # +0x808C # +0x8093 # +0x8096 # +0x8098 # +0x809A # +0x809B # +0x809D # +0x80A1 # +0x80A2 # +0x80A5 # +0x80A9 # +0x80AA # +0x80AC # +0x80AD # +0x80AF # +0x80B1 # +0x80B2 # +0x80B4 # +0x80BA # +0x80C3 # +0x80C4 # +0x80C6 # +0x80CC # +0x80CE # +0x80D6 # +0x80D9 # +0x80DA # +0x80DB # +0x80DD # +0x80DE # +0x80E1 # +0x80E4 # +0x80E5 # +0x80EF # +0x80F1 # +0x80F4 # +0x80F8 # +0x80FC # +0x80FD # +0x8102 # +0x8105 # +0x8106 # +0x8107 # +0x8108 # +0x8109 # +0x810A # +0x811A # +0x811B # +0x8123 # +0x8129 # +0x812F # +0x8131 # +0x8133 # +0x8139 # +0x813E # +0x8146 # +0x814B # +0x814E # +0x8150 # +0x8151 # +0x8153 # +0x8154 # +0x8155 # +0x815F # +0x8165 # +0x8166 # +0x816B # +0x816E # +0x8170 # +0x8171 # +0x8174 # +0x8178 # +0x8179 # +0x817A # +0x817F # +0x8180 # +0x8182 # +0x8183 # +0x8188 # +0x818A # +0x818F # +0x8193 # +0x8195 # +0x819A # +0x819C # +0x819D # +0x81A0 # +0x81A3 # +0x81A4 # +0x81A8 # +0x81A9 # +0x81B0 # +0x81B3 # +0x81B5 # +0x81B8 # +0x81BA # +0x81BD # +0x81BE # +0x81BF # +0x81C0 # +0x81C2 # +0x81C6 # +0x81C8 # +0x81C9 # +0x81CD # +0x81D1 # +0x81D3 # +0x81D8 # +0x81D9 # +0x81DA # +0x81DF # +0x81E0 # +0x81E3 # +0x81E5 # +0x81E7 # +0x81E8 # +0x81EA # +0x81ED # +0x81F3 # +0x81F4 # +0x81FA # +0x81FB # +0x81FC # +0x81FE # +0x8201 # +0x8202 # +0x8205 # +0x8207 # +0x8208 # +0x8209 # +0x820A # +0x820C # +0x820D # +0x820E # +0x8210 # +0x8212 # +0x8216 # +0x8217 # +0x8218 # +0x821B # +0x821C # +0x821E # +0x821F # +0x8229 # +0x822A # +0x822B # +0x822C # +0x822E # +0x8233 # +0x8235 # +0x8236 # +0x8237 # +0x8238 # +0x8239 # +0x8240 # +0x8247 # +0x8258 # +0x8259 # +0x825A # +0x825D # +0x825F # +0x8262 # +0x8264 # +0x8266 # +0x8268 # +0x826A # +0x826B # +0x826E # +0x826F # +0x8271 # +0x8272 # +0x8276 # +0x8277 # +0x8278 # +0x827E # +0x828B # +0x828D # +0x8292 # +0x8299 # +0x829D # +0x829F # +0x82A5 # +0x82A6 # +0x82AB # +0x82AC # +0x82AD # +0x82AF # +0x82B1 # +0x82B3 # +0x82B8 # +0x82B9 # +0x82BB # +0x82BD # +0x82C5 # +0x82D1 # +0x82D2 # +0x82D3 # +0x82D4 # +0x82D7 # +0x82D9 # +0x82DB # +0x82DC # +0x82DE # +0x82DF # +0x82E1 # +0x82E3 # +0x82E5 # +0x82E6 # +0x82E7 # +0x82EB # +0x82F1 # +0x82F3 # +0x82F4 # +0x82F9 # +0x82FA # +0x82FB # +0x8302 # +0x8303 # +0x8304 # +0x8305 # +0x8306 # +0x8309 # +0x830E # +0x8316 # +0x8317 # +0x8318 # +0x831C # +0x8323 # +0x8328 # +0x832B # +0x832F # +0x8331 # +0x8332 # +0x8334 # +0x8335 # +0x8336 # +0x8338 # +0x8339 # +0x8340 # +0x8345 # +0x8349 # +0x834A # +0x834F # +0x8350 # +0x8352 # +0x8358 # +0x8373 # +0x8375 # +0x8377 # +0x837B # +0x837C # +0x8385 # +0x8387 # +0x8389 # +0x838A # +0x838E # +0x8393 # +0x8396 # +0x839A # +0x839E # +0x839F # +0x83A0 # +0x83A2 # +0x83A8 # +0x83AA # +0x83AB # +0x83B1 # +0x83B5 # +0x83BD # +0x83C1 # +0x83C5 # +0x83CA # +0x83CC # +0x83CE # +0x83D3 # +0x83D6 # +0x83D8 # +0x83DC # +0x83DF # +0x83E0 # +0x83E9 # +0x83EB # +0x83EF # +0x83F0 # +0x83F1 # +0x83F2 # +0x83F4 # +0x83F7 # +0x83FB # +0x83FD # +0x8403 # +0x8404 # +0x8407 # +0x840B # +0x840C # +0x840D # +0x840E # +0x8413 # +0x8420 # +0x8422 # +0x8429 # +0x842A # +0x842C # +0x8431 # +0x8435 # +0x8438 # +0x843C # +0x843D # +0x8446 # +0x8449 # +0x844E # +0x8457 # +0x845B # +0x8461 # +0x8462 # +0x8463 # +0x8466 # +0x8469 # +0x846B # +0x846C # +0x846D # +0x846E # +0x846F # +0x8471 # +0x8475 # +0x8477 # +0x8479 # +0x847A # +0x8482 # +0x8484 # +0x848B # +0x8490 # +0x8494 # +0x8499 # +0x849C # +0x849F # +0x84A1 # +0x84AD # +0x84B2 # +0x84B8 # +0x84B9 # +0x84BB # +0x84BC # +0x84BF # +0x84C1 # +0x84C4 # +0x84C6 # +0x84C9 # +0x84CA # +0x84CB # +0x84CD # +0x84D0 # +0x84D1 # +0x84D6 # +0x84D9 # +0x84DA # +0x84EC # +0x84EE # +0x84F4 # +0x84FC # +0x84FF # +0x8500 # +0x8506 # +0x8511 # +0x8513 # +0x8514 # +0x8515 # +0x8517 # +0x8518 # +0x851A # +0x851F # +0x8521 # +0x8526 # +0x852C # +0x852D # +0x8535 # +0x853D # +0x8540 # +0x8541 # +0x8543 # +0x8548 # +0x8549 # +0x854A # +0x854B # +0x854E # +0x8555 # +0x8557 # +0x8558 # +0x855A # +0x8563 # +0x8568 # +0x8569 # +0x856A # +0x856D # +0x8577 # +0x857E # +0x8580 # +0x8584 # +0x8587 # +0x8588 # +0x858A # +0x8590 # +0x8591 # +0x8594 # +0x8597 # +0x8599 # +0x859B # +0x859C # +0x85A4 # +0x85A6 # +0x85A8 # +0x85A9 # +0x85AA # +0x85AB # +0x85AC # +0x85AE # +0x85AF # +0x85B9 # +0x85BA # +0x85C1 # +0x85C9 # +0x85CD # +0x85CF # +0x85D0 # +0x85D5 # +0x85DC # +0x85DD # +0x85E4 # +0x85E5 # +0x85E9 # +0x85EA # +0x85F7 # +0x85F9 # +0x85FA # +0x85FB # +0x85FE # +0x8602 # +0x8606 # +0x8607 # +0x860A # +0x860B # +0x8613 # +0x8616 # +0x8617 # +0x861A # +0x8622 # +0x862D # +0x862F # +0x8630 # +0x863F # +0x864D # +0x864E # +0x8650 # +0x8654 # +0x8655 # +0x865A # +0x865C # +0x865E # +0x865F # +0x8667 # +0x866B # +0x8671 # +0x8679 # +0x867B # +0x868A # +0x868B # +0x868C # +0x8693 # +0x8695 # +0x86A3 # +0x86A4 # +0x86A9 # +0x86AA # +0x86AB # +0x86AF # +0x86B0 # +0x86B6 # +0x86C4 # +0x86C6 # +0x86C7 # +0x86C9 # +0x86CB # +0x86CD # +0x86CE # +0x86D4 # +0x86D9 # +0x86DB # +0x86DE # +0x86DF # +0x86E4 # +0x86E9 # +0x86EC # +0x86ED # +0x86EE # +0x86EF # +0x86F8 # +0x86F9 # +0x86FB # +0x86FE # +0x8700 # +0x8702 # +0x8703 # +0x8706 # +0x8708 # +0x8709 # +0x870A # +0x870D # +0x8711 # +0x8712 # +0x8718 # +0x871A # +0x871C # +0x8725 # +0x8729 # +0x8734 # +0x8737 # +0x873B # +0x873F # +0x8749 # +0x874B # +0x874C # +0x874E # +0x8753 # +0x8755 # +0x8757 # +0x8759 # +0x875F # +0x8760 # +0x8763 # +0x8766 # +0x8768 # +0x876A # +0x876E # +0x8774 # +0x8776 # +0x8778 # +0x877F # +0x8782 # +0x878D # +0x879F # +0x87A2 # +0x87AB # +0x87AF # +0x87B3 # +0x87BA # +0x87BB # +0x87BD # +0x87C0 # +0x87C4 # +0x87C6 # +0x87C7 # +0x87CB # +0x87D0 # +0x87D2 # +0x87E0 # +0x87EF # +0x87F2 # +0x87F6 # +0x87F7 # +0x87F9 # +0x87FB # +0x87FE # +0x8805 # +0x880D # +0x880E # +0x880F # +0x8811 # +0x8815 # +0x8816 # +0x8821 # +0x8822 # +0x8823 # +0x8827 # +0x8831 # +0x8836 # +0x8839 # +0x883B # +0x8840 # +0x8842 # +0x8844 # +0x8846 # +0x884C # +0x884D # +0x8852 # +0x8853 # +0x8857 # +0x8859 # +0x885B # +0x885D # +0x885E # +0x8861 # +0x8862 # +0x8863 # +0x8868 # +0x886B # +0x8870 # +0x8872 # +0x8875 # +0x8877 # +0x887D # +0x887E # +0x887F # +0x8881 # +0x8882 # +0x8888 # +0x888B # +0x888D # +0x8892 # +0x8896 # +0x8897 # +0x8899 # +0x889E # +0x88A2 # +0x88A4 # +0x88AB # +0x88AE # +0x88B0 # +0x88B1 # +0x88B4 # +0x88B5 # +0x88B7 # +0x88BF # +0x88C1 # +0x88C2 # +0x88C3 # +0x88C4 # +0x88C5 # +0x88CF # +0x88D4 # +0x88D5 # +0x88D8 # +0x88D9 # +0x88DC # +0x88DD # +0x88DF # +0x88E1 # +0x88E8 # +0x88F2 # +0x88F3 # +0x88F4 # +0x88F8 # +0x88F9 # +0x88FC # +0x88FD # +0x88FE # +0x8902 # +0x8904 # +0x8907 # +0x890A # +0x890C # +0x8910 # +0x8912 # +0x8913 # +0x891D # +0x891E # +0x8925 # +0x892A # +0x892B # +0x8936 # +0x8938 # +0x893B # +0x8941 # +0x8943 # +0x8944 # +0x894C # +0x894D # +0x8956 # +0x895E # +0x895F # +0x8960 # +0x8964 # +0x8966 # +0x896A # +0x896D # +0x896F # +0x8972 # +0x8974 # +0x8977 # +0x897E # +0x897F # +0x8981 # +0x8983 # +0x8986 # +0x8987 # +0x8988 # +0x898A # +0x898B # +0x898F # +0x8993 # +0x8996 # +0x8997 # +0x8998 # +0x899A # +0x89A1 # +0x89A6 # +0x89A7 # +0x89A9 # +0x89AA # +0x89AC # +0x89AF # +0x89B2 # +0x89B3 # +0x89BA # +0x89BD # +0x89BF # +0x89C0 # +0x89D2 # +0x89DA # +0x89DC # +0x89DD # +0x89E3 # +0x89E6 # +0x89E7 # +0x89F4 # +0x89F8 # +0x8A00 # +0x8A02 # +0x8A03 # +0x8A08 # +0x8A0A # +0x8A0C # +0x8A0E # +0x8A10 # +0x8A13 # +0x8A16 # +0x8A17 # +0x8A18 # +0x8A1B # +0x8A1D # +0x8A1F # +0x8A23 # +0x8A25 # +0x8A2A # +0x8A2D # +0x8A31 # +0x8A33 # +0x8A34 # +0x8A36 # +0x8A3A # +0x8A3B # +0x8A3C # +0x8A41 # +0x8A46 # +0x8A48 # +0x8A50 # +0x8A51 # +0x8A52 # +0x8A54 # +0x8A55 # +0x8A5B # +0x8A5E # +0x8A60 # +0x8A62 # +0x8A63 # +0x8A66 # +0x8A69 # +0x8A6B # +0x8A6C # +0x8A6D # +0x8A6E # +0x8A70 # +0x8A71 # +0x8A72 # +0x8A73 # +0x8A7C # +0x8A82 # +0x8A84 # +0x8A85 # +0x8A87 # +0x8A89 # +0x8A8C # +0x8A8D # +0x8A91 # +0x8A93 # +0x8A95 # +0x8A98 # +0x8A9A # +0x8A9E # +0x8AA0 # +0x8AA1 # +0x8AA3 # +0x8AA4 # +0x8AA5 # +0x8AA6 # +0x8AA8 # +0x8AAC # +0x8AAD # +0x8AB0 # +0x8AB2 # +0x8AB9 # +0x8ABC # +0x8ABF # +0x8AC2 # +0x8AC4 # +0x8AC7 # +0x8ACB # +0x8ACC # +0x8ACD # +0x8ACF # +0x8AD2 # +0x8AD6 # +0x8ADA # +0x8ADB # +0x8ADC # +0x8ADE # +0x8AE0 # +0x8AE1 # +0x8AE2 # +0x8AE4 # +0x8AE6 # +0x8AE7 # +0x8AEB # +0x8AED # +0x8AEE # +0x8AF1 # +0x8AF3 # +0x8AF7 # +0x8AF8 # +0x8AFA # +0x8AFE # +0x8B00 # +0x8B01 # +0x8B02 # +0x8B04 # +0x8B07 # +0x8B0C # +0x8B0E # +0x8B10 # +0x8B14 # +0x8B16 # +0x8B17 # +0x8B19 # +0x8B1A # +0x8B1B # +0x8B1D # +0x8B20 # +0x8B21 # +0x8B26 # +0x8B28 # +0x8B2B # +0x8B2C # +0x8B33 # +0x8B39 # +0x8B3E # +0x8B41 # +0x8B49 # +0x8B4C # +0x8B4E # +0x8B4F # +0x8B56 # +0x8B58 # +0x8B5A # +0x8B5B # +0x8B5C # +0x8B5F # +0x8B66 # +0x8B6B # +0x8B6C # +0x8B6F # +0x8B70 # +0x8B71 # +0x8B72 # +0x8B74 # +0x8B77 # +0x8B7D # +0x8B80 # +0x8B83 # +0x8B8A # +0x8B8C # +0x8B8E # +0x8B90 # +0x8B92 # +0x8B93 # +0x8B96 # +0x8B99 # +0x8B9A # +0x8C37 # +0x8C3A # +0x8C3F # +0x8C41 # +0x8C46 # +0x8C48 # +0x8C4A # +0x8C4C # +0x8C4E # +0x8C50 # +0x8C55 # +0x8C5A # +0x8C61 # +0x8C62 # +0x8C6A # +0x8C6B # +0x8C6C # +0x8C78 # +0x8C79 # +0x8C7A # +0x8C7C # +0x8C82 # +0x8C85 # +0x8C89 # +0x8C8A # +0x8C8C # +0x8C8D # +0x8C8E # +0x8C94 # +0x8C98 # +0x8C9D # +0x8C9E # +0x8CA0 # +0x8CA1 # +0x8CA2 # +0x8CA7 # +0x8CA8 # +0x8CA9 # +0x8CAA # +0x8CAB # +0x8CAC # +0x8CAD # +0x8CAE # +0x8CAF # +0x8CB0 # +0x8CB2 # +0x8CB3 # +0x8CB4 # +0x8CB6 # +0x8CB7 # +0x8CB8 # +0x8CBB # +0x8CBC # +0x8CBD # +0x8CBF # +0x8CC0 # +0x8CC1 # +0x8CC2 # +0x8CC3 # +0x8CC4 # +0x8CC7 # +0x8CC8 # +0x8CCA # +0x8CCD # +0x8CCE # +0x8CD1 # +0x8CD3 # +0x8CDA # +0x8CDB # +0x8CDC # +0x8CDE # +0x8CE0 # +0x8CE2 # +0x8CE3 # +0x8CE4 # +0x8CE6 # +0x8CEA # +0x8CED # +0x8CFA # +0x8CFB # +0x8CFC # +0x8CFD # +0x8D04 # +0x8D05 # +0x8D07 # +0x8D08 # +0x8D0A # +0x8D0B # +0x8D0D # +0x8D0F # +0x8D10 # +0x8D13 # +0x8D14 # +0x8D16 # +0x8D64 # +0x8D66 # +0x8D67 # +0x8D6B # +0x8D6D # +0x8D70 # +0x8D71 # +0x8D73 # +0x8D74 # +0x8D77 # +0x8D81 # +0x8D85 # +0x8D8A # +0x8D99 # +0x8DA3 # +0x8DA8 # +0x8DB3 # +0x8DBA # +0x8DBE # +0x8DC2 # +0x8DCB # +0x8DCC # +0x8DCF # +0x8DD6 # +0x8DDA # +0x8DDB # +0x8DDD # +0x8DDF # +0x8DE1 # +0x8DE3 # +0x8DE8 # +0x8DEA # +0x8DEB # +0x8DEF # +0x8DF3 # +0x8DF5 # +0x8DFC # +0x8DFF # +0x8E08 # +0x8E09 # +0x8E0A # +0x8E0F # +0x8E10 # +0x8E1D # +0x8E1E # +0x8E1F # +0x8E2A # +0x8E30 # +0x8E34 # +0x8E35 # +0x8E42 # +0x8E44 # +0x8E47 # +0x8E48 # +0x8E49 # +0x8E4A # +0x8E4C # +0x8E50 # +0x8E55 # +0x8E59 # +0x8E5F # +0x8E60 # +0x8E63 # +0x8E64 # +0x8E72 # +0x8E74 # +0x8E76 # +0x8E7C # +0x8E81 # +0x8E84 # +0x8E85 # +0x8E87 # +0x8E8A # +0x8E8B # +0x8E8D # +0x8E91 # +0x8E93 # +0x8E94 # +0x8E99 # +0x8EA1 # +0x8EAA # +0x8EAB # +0x8EAC # +0x8EAF # +0x8EB0 # +0x8EB1 # +0x8EBE # +0x8EC5 # +0x8EC6 # +0x8EC8 # +0x8ECA # +0x8ECB # +0x8ECC # +0x8ECD # +0x8ED2 # +0x8EDB # +0x8EDF # +0x8EE2 # +0x8EE3 # +0x8EEB # +0x8EF8 # +0x8EFB # +0x8EFC # +0x8EFD # +0x8EFE # +0x8F03 # +0x8F05 # +0x8F09 # +0x8F0A # +0x8F0C # +0x8F12 # +0x8F13 # +0x8F14 # +0x8F15 # +0x8F19 # +0x8F1B # +0x8F1C # +0x8F1D # +0x8F1F # +0x8F26 # +0x8F29 # +0x8F2A # +0x8F2F # +0x8F33 # +0x8F38 # +0x8F39 # +0x8F3B # +0x8F3E # +0x8F3F # +0x8F42 # +0x8F44 # +0x8F45 # +0x8F46 # +0x8F49 # +0x8F4C # +0x8F4D # +0x8F4E # +0x8F57 # +0x8F5C # +0x8F5F # +0x8F61 # +0x8F62 # +0x8F63 # +0x8F64 # +0x8F9B # +0x8F9C # +0x8F9E # +0x8F9F # +0x8FA3 # +0x8FA7 # +0x8FA8 # +0x8FAD # +0x8FAE # +0x8FAF # +0x8FB0 # +0x8FB1 # +0x8FB2 # +0x8FB7 # +0x8FBA # +0x8FBB # +0x8FBC # +0x8FBF # +0x8FC2 # +0x8FC4 # +0x8FC5 # +0x8FCE # +0x8FD1 # +0x8FD4 # +0x8FDA # +0x8FE2 # +0x8FE5 # +0x8FE6 # +0x8FE9 # +0x8FEA # +0x8FEB # +0x8FED # +0x8FEF # +0x8FF0 # +0x8FF4 # +0x8FF7 # +0x8FF8 # +0x8FF9 # +0x8FFA # +0x8FFD # +0x9000 # +0x9001 # +0x9003 # +0x9005 # +0x9006 # +0x900B # +0x900D # +0x900E # +0x900F # +0x9010 # +0x9011 # +0x9013 # +0x9014 # +0x9015 # +0x9016 # +0x9017 # +0x9019 # +0x901A # +0x901D # +0x901E # +0x901F # +0x9020 # +0x9021 # +0x9022 # +0x9023 # +0x9027 # +0x902E # +0x9031 # +0x9032 # +0x9035 # +0x9036 # +0x9038 # +0x9039 # +0x903C # +0x903E # +0x9041 # +0x9042 # +0x9045 # +0x9047 # +0x9049 # +0x904A # +0x904B # +0x904D # +0x904E # +0x904F # +0x9050 # +0x9051 # +0x9052 # +0x9053 # +0x9054 # +0x9055 # +0x9056 # +0x9058 # +0x9059 # +0x905C # +0x905E # +0x9060 # +0x9061 # +0x9063 # +0x9065 # +0x9068 # +0x9069 # +0x906D # +0x906E # +0x906F # +0x9072 # +0x9075 # +0x9076 # +0x9077 # +0x9078 # +0x907A # +0x907C # +0x907D # +0x907F # +0x9080 # +0x9081 # +0x9082 # +0x9083 # +0x9084 # +0x9087 # +0x9089 # +0x908A # +0x908F # +0x9091 # +0x90A3 # +0x90A6 # +0x90A8 # +0x90AA # +0x90AF # +0x90B1 # +0x90B5 # +0x90B8 # +0x90C1 # +0x90CA # +0x90CE # +0x90DB # +0x90E1 # +0x90E2 # +0x90E4 # +0x90E8 # +0x90ED # +0x90F5 # +0x90F7 # +0x90FD # +0x9102 # +0x9112 # +0x9119 # +0x912D # +0x9130 # +0x9132 # +0x9149 # +0x914A # +0x914B # +0x914C # +0x914D # +0x914E # +0x9152 # +0x9154 # +0x9156 # +0x9158 # +0x9162 # +0x9163 # +0x9165 # +0x9169 # +0x916A # +0x916C # +0x9172 # +0x9173 # +0x9175 # +0x9177 # +0x9178 # +0x9182 # +0x9187 # +0x9189 # +0x918B # +0x918D # +0x9190 # +0x9192 # +0x9197 # +0x919C # +0x91A2 # +0x91A4 # +0x91AA # +0x91AB # +0x91AF # +0x91B4 # +0x91B5 # +0x91B8 # +0x91BA # +0x91C0 # +0x91C1 # +0x91C6 # +0x91C7 # +0x91C8 # +0x91C9 # +0x91CB # +0x91CC # +0x91CD # +0x91CE # +0x91CF # +0x91D0 # +0x91D1 # +0x91D6 # +0x91D8 # +0x91DB # +0x91DC # +0x91DD # +0x91DF # +0x91E1 # +0x91E3 # +0x91E6 # +0x91E7 # +0x91F5 # +0x91F6 # +0x91FC # +0x91FF # +0x920D # +0x920E # +0x9211 # +0x9214 # +0x9215 # +0x921E # +0x9229 # +0x922C # +0x9234 # +0x9237 # +0x923F # +0x9244 # +0x9245 # +0x9248 # +0x9249 # +0x924B # +0x9250 # +0x9257 # +0x925A # +0x925B # +0x925E # +0x9262 # +0x9264 # +0x9266 # +0x9271 # +0x927E # +0x9280 # +0x9283 # +0x9285 # +0x9291 # +0x9293 # +0x9295 # +0x9296 # +0x9298 # +0x929A # +0x929B # +0x929C # +0x92AD # +0x92B7 # +0x92B9 # +0x92CF # +0x92D2 # +0x92E4 # +0x92E9 # +0x92EA # +0x92ED # +0x92F2 # +0x92F3 # +0x92F8 # +0x92FA # +0x92FC # +0x9306 # +0x930F # +0x9310 # +0x9318 # +0x9319 # +0x931A # +0x9320 # +0x9322 # +0x9323 # +0x9326 # +0x9328 # +0x932B # +0x932C # +0x932E # +0x932F # +0x9332 # +0x9335 # +0x933A # +0x933B # +0x9344 # +0x934B # +0x934D # +0x9354 # +0x9356 # +0x935B # +0x935C # +0x9360 # +0x936C # +0x936E # +0x9375 # +0x937C # +0x937E # +0x938C # +0x9394 # +0x9396 # +0x9397 # +0x939A # +0x93A7 # +0x93AC # +0x93AD # +0x93AE # +0x93B0 # +0x93B9 # +0x93C3 # +0x93C8 # +0x93D0 # +0x93D1 # +0x93D6 # +0x93D7 # +0x93D8 # +0x93DD # +0x93E1 # +0x93E4 # +0x93E5 # +0x93E8 # +0x9403 # +0x9407 # +0x9410 # +0x9413 # +0x9414 # +0x9418 # +0x9419 # +0x941A # +0x9421 # +0x942B # +0x9435 # +0x9436 # +0x9438 # +0x943A # +0x9441 # +0x9444 # +0x9451 # +0x9452 # +0x9453 # +0x945A # +0x945B # +0x945E # +0x9460 # +0x9462 # +0x946A # +0x9470 # +0x9475 # +0x9477 # +0x947C # +0x947D # +0x947E # +0x947F # +0x9481 # +0x9577 # +0x9580 # +0x9582 # +0x9583 # +0x9587 # +0x9589 # +0x958A # +0x958B # +0x958F # +0x9591 # +0x9593 # +0x9594 # +0x9596 # +0x9598 # +0x9599 # +0x95A0 # +0x95A2 # +0x95A3 # +0x95A4 # +0x95A5 # +0x95A7 # +0x95A8 # +0x95AD # +0x95B2 # +0x95B9 # +0x95BB # +0x95BC # +0x95BE # +0x95C3 # +0x95C7 # +0x95CA # +0x95CC # +0x95CD # +0x95D4 # +0x95D5 # +0x95D6 # +0x95D8 # +0x95DC # +0x95E1 # +0x95E2 # +0x95E5 # +0x961C # +0x9621 # +0x9628 # +0x962A # +0x962E # +0x962F # +0x9632 # +0x963B # +0x963F # +0x9640 # +0x9642 # +0x9644 # +0x964B # +0x964C # +0x964D # +0x964F # +0x9650 # +0x965B # +0x965C # +0x965D # +0x965E # +0x965F # +0x9662 # +0x9663 # +0x9664 # +0x9665 # +0x9666 # +0x966A # +0x966C # +0x9670 # +0x9672 # +0x9673 # +0x9675 # +0x9676 # +0x9677 # +0x9678 # +0x967A # +0x967D # +0x9685 # +0x9686 # +0x9688 # +0x968A # +0x968B # +0x968D # +0x968E # +0x968F # +0x9694 # +0x9695 # +0x9697 # +0x9698 # +0x9699 # +0x969B # +0x969C # +0x96A0 # +0x96A3 # +0x96A7 # +0x96A8 # +0x96AA # +0x96B0 # +0x96B1 # +0x96B2 # +0x96B4 # +0x96B6 # +0x96B7 # +0x96B8 # +0x96B9 # +0x96BB # +0x96BC # +0x96C0 # +0x96C1 # +0x96C4 # +0x96C5 # +0x96C6 # +0x96C7 # +0x96C9 # +0x96CB # +0x96CC # +0x96CD # +0x96CE # +0x96D1 # +0x96D5 # +0x96D6 # +0x96D9 # +0x96DB # +0x96DC # +0x96E2 # +0x96E3 # +0x96E8 # +0x96EA # +0x96EB # +0x96F0 # +0x96F2 # +0x96F6 # +0x96F7 # +0x96F9 # +0x96FB # +0x9700 # +0x9704 # +0x9706 # +0x9707 # +0x9708 # +0x970A # +0x970D # +0x970E # +0x970F # +0x9711 # +0x9713 # +0x9716 # +0x9719 # +0x971C # +0x971E # +0x9724 # +0x9727 # +0x972A # +0x9730 # +0x9732 # +0x9738 # +0x9739 # +0x973D # +0x973E # +0x9742 # +0x9744 # +0x9746 # +0x9748 # +0x9749 # +0x9752 # +0x9756 # +0x9759 # +0x975C # +0x975E # +0x9760 # +0x9761 # +0x9762 # +0x9764 # +0x9766 # +0x9768 # +0x9769 # +0x976B # +0x976D # +0x9771 # +0x9774 # +0x9779 # +0x977A # +0x977C # +0x9781 # +0x9784 # +0x9785 # +0x9786 # +0x978B # +0x978D # +0x978F # +0x9790 # +0x9798 # +0x979C # +0x97A0 # +0x97A3 # +0x97A6 # +0x97A8 # +0x97AB # +0x97AD # +0x97B3 # +0x97B4 # +0x97C3 # +0x97C6 # +0x97C8 # +0x97CB # +0x97D3 # +0x97DC # +0x97ED # +0x97EE # +0x97F2 # +0x97F3 # +0x97F5 # +0x97F6 # +0x97FB # +0x97FF # +0x9801 # +0x9802 # +0x9803 # +0x9805 # +0x9806 # +0x9808 # +0x980C # +0x980F # +0x9810 # +0x9811 # +0x9812 # +0x9813 # +0x9817 # +0x9818 # +0x981A # +0x9821 # +0x9824 # +0x982C # +0x982D # +0x9834 # +0x9837 # +0x9838 # +0x983B # +0x983C # +0x983D # +0x9846 # +0x984B # +0x984C # +0x984D # +0x984E # +0x984F # +0x9854 # +0x9855 # +0x9858 # +0x985B # +0x985E # +0x9867 # +0x986B # +0x986F # +0x9870 # +0x9871 # +0x9873 # +0x9874 # +0x98A8 # +0x98AA # +0x98AF # +0x98B1 # +0x98B6 # +0x98C3 # +0x98C4 # +0x98C6 # +0x98DB # +0x98DC # +0x98DF # +0x98E2 # +0x98E9 # +0x98EB # +0x98ED # +0x98EE # +0x98EF # +0x98F2 # +0x98F4 # +0x98FC # +0x98FD # +0x98FE # +0x9903 # +0x9905 # +0x9909 # +0x990A # +0x990C # +0x9910 # +0x9912 # +0x9913 # +0x9914 # +0x9918 # +0x991D # +0x991E # +0x9920 # +0x9921 # +0x9924 # +0x9928 # +0x992C # +0x992E # +0x993D # +0x993E # +0x9942 # +0x9945 # +0x9949 # +0x994B # +0x994C # +0x9950 # +0x9951 # +0x9952 # +0x9955 # +0x9957 # +0x9996 # +0x9997 # +0x9998 # +0x9999 # +0x99A5 # +0x99A8 # +0x99AC # +0x99AD # +0x99AE # +0x99B3 # +0x99B4 # +0x99BC # +0x99C1 # +0x99C4 # +0x99C5 # +0x99C6 # +0x99C8 # +0x99D0 # +0x99D1 # +0x99D2 # +0x99D5 # +0x99D8 # +0x99DB # +0x99DD # +0x99DF # +0x99E2 # +0x99ED # +0x99EE # +0x99F1 # +0x99F2 # +0x99F8 # +0x99FB # +0x99FF # +0x9A01 # +0x9A05 # +0x9A0E # +0x9A0F # +0x9A12 # +0x9A13 # +0x9A19 # +0x9A28 # +0x9A2B # +0x9A30 # +0x9A37 # +0x9A3E # +0x9A40 # +0x9A42 # +0x9A43 # +0x9A45 # +0x9A4D # +0x9A55 # +0x9A57 # +0x9A5A # +0x9A5B # +0x9A5F # +0x9A62 # +0x9A64 # +0x9A65 # +0x9A69 # +0x9A6A # +0x9A6B # +0x9AA8 # +0x9AAD # +0x9AB0 # +0x9AB8 # +0x9ABC # +0x9AC0 # +0x9AC4 # +0x9ACF # +0x9AD1 # +0x9AD3 # +0x9AD4 # +0x9AD8 # +0x9ADE # +0x9ADF # +0x9AE2 # +0x9AE3 # +0x9AE6 # +0x9AEA # +0x9AEB # +0x9AED # +0x9AEE # +0x9AEF # +0x9AF1 # +0x9AF4 # +0x9AF7 # +0x9AFB # +0x9B06 # +0x9B18 # +0x9B1A # +0x9B1F # +0x9B22 # +0x9B23 # +0x9B25 # +0x9B27 # +0x9B28 # +0x9B29 # +0x9B2A # +0x9B2E # +0x9B2F # +0x9B31 # +0x9B32 # +0x9B3B # +0x9B3C # +0x9B41 # +0x9B42 # +0x9B43 # +0x9B44 # +0x9B45 # +0x9B4D # +0x9B4E # +0x9B4F # +0x9B51 # +0x9B54 # +0x9B58 # +0x9B5A # +0x9B6F # +0x9B74 # +0x9B83 # +0x9B8E # +0x9B91 # +0x9B92 # +0x9B93 # +0x9B96 # +0x9B97 # +0x9B9F # +0x9BA0 # +0x9BA8 # +0x9BAA # +0x9BAB # +0x9BAD # +0x9BAE # +0x9BB4 # +0x9BB9 # +0x9BC0 # +0x9BC6 # +0x9BC9 # +0x9BCA # +0x9BCF # +0x9BD1 # +0x9BD2 # +0x9BD4 # +0x9BD6 # +0x9BDB # +0x9BE1 # +0x9BE2 # +0x9BE3 # +0x9BE4 # +0x9BE8 # +0x9BF0 # +0x9BF1 # +0x9BF2 # +0x9BF5 # +0x9C04 # +0x9C06 # +0x9C08 # +0x9C09 # +0x9C0A # +0x9C0C # +0x9C0D # +0x9C10 # +0x9C12 # +0x9C13 # +0x9C14 # +0x9C15 # +0x9C1B # +0x9C21 # +0x9C24 # +0x9C25 # +0x9C2D # +0x9C2E # +0x9C2F # +0x9C30 # +0x9C32 # +0x9C39 # +0x9C3A # +0x9C3B # +0x9C3E # +0x9C46 # +0x9C47 # +0x9C48 # +0x9C52 # +0x9C57 # +0x9C5A # +0x9C60 # +0x9C67 # +0x9C76 # +0x9C78 # +0x9CE5 # +0x9CE7 # +0x9CE9 # +0x9CEB # +0x9CEC # +0x9CF0 # +0x9CF3 # +0x9CF4 # +0x9CF6 # +0x9D03 # +0x9D06 # +0x9D07 # +0x9D08 # +0x9D09 # +0x9D0E # +0x9D12 # +0x9D15 # +0x9D1B # +0x9D1F # +0x9D23 # +0x9D26 # +0x9D28 # +0x9D2A # +0x9D2B # +0x9D2C # +0x9D3B # +0x9D3E # +0x9D3F # +0x9D41 # +0x9D44 # +0x9D46 # +0x9D48 # +0x9D50 # +0x9D51 # +0x9D59 # +0x9D5C # +0x9D5D # +0x9D5E # +0x9D60 # +0x9D61 # +0x9D64 # +0x9D6C # +0x9D6F # +0x9D72 # +0x9D7A # +0x9D87 # +0x9D89 # +0x9D8F # +0x9D9A # +0x9DA4 # +0x9DA9 # +0x9DAB # +0x9DAF # +0x9DB2 # +0x9DB4 # +0x9DB8 # +0x9DBA # +0x9DBB # +0x9DC1 # +0x9DC2 # +0x9DC4 # +0x9DC6 # +0x9DCF # +0x9DD3 # +0x9DD9 # +0x9DE6 # +0x9DED # +0x9DEF # +0x9DF2 # +0x9DF8 # +0x9DF9 # +0x9DFA # +0x9DFD # +0x9E1A # +0x9E1B # +0x9E1E # +0x9E75 # +0x9E78 # +0x9E79 # +0x9E7D # +0x9E7F # +0x9E81 # +0x9E88 # +0x9E8B # +0x9E8C # +0x9E91 # +0x9E92 # +0x9E93 # +0x9E95 # +0x9E97 # +0x9E9D # +0x9E9F # +0x9EA5 # +0x9EA6 # +0x9EA9 # +0x9EAA # +0x9EAD # +0x9EB8 # +0x9EB9 # +0x9EBA # +0x9EBB # +0x9EBC # +0x9EBE # +0x9EBF # +0x9EC4 # +0x9ECC # +0x9ECD # +0x9ECE # +0x9ECF # +0x9ED0 # +0x9ED2 # +0x9ED4 # +0x9ED8 # +0x9ED9 # +0x9EDB # +0x9EDC # +0x9EDD # +0x9EDE # +0x9EE0 # +0x9EE5 # +0x9EE8 # +0x9EEF # +0x9EF4 # +0x9EF6 # +0x9EF7 # +0x9EF9 # +0x9EFB # +0x9EFC # +0x9EFD # +0x9F07 # +0x9F08 # +0x9F0E # +0x9F13 # +0x9F15 # +0x9F20 # +0x9F21 # +0x9F2C # +0x9F3B # +0x9F3E # +0x9F4A # +0x9F4B # +0x9F4E # +0x9F4F # +0x9F52 # +0x9F54 # +0x9F5F # +0x9F60 # +0x9F61 # +0x9F62 # +0x9F63 # +0x9F66 # +0x9F67 # +0x9F6A # +0x9F6C # +0x9F72 # +0x9F76 # +0x9F77 # +0x9F8D # +0x9F95 # +0x9F9C # +0x9F9D # +0x9FA0 # +#0xFFE5 # FULLWIDTH YEN SIGN diff --git a/fontconfig/fc-lang/ka.orth b/fontconfig/fc-lang/ka.orth index 3f5e17747..f135f3bc5 100644 --- a/fontconfig/fc-lang/ka.orth +++ b/fontconfig/fc-lang/ka.orth @@ -1,34 +1,34 @@ -# -# fontconfig/fc-lang/ka.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Georgian (KA) -# 0589 # Armenian full stop (vertsaket) -#10a0-10c5 # capital letters, not used in normal writing -10d0-10f0 -#10f1-10f6 # Archaic letters not included in modern fonts -#10f7-10f8 # additional letters for Mingrelian and Svan -#10fb # Ancient Georgian paragraph separator -#2018 # single quote -#201a # single quote -#201c # double quote -#201e # double quote +# +# fontconfig/fc-lang/ka.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Georgian (KA) +# 0589 # Armenian full stop (vertsaket) +#10a0-10c5 # capital letters, not used in normal writing +10d0-10f0 +#10f1-10f6 # Archaic letters not included in modern fonts +#10f7-10f8 # additional letters for Mingrelian and Svan +#10fb # Ancient Georgian paragraph separator +#2018 # single quote +#201a # single quote +#201c # double quote +#201e # double quote diff --git a/fontconfig/fc-lang/kaa.orth b/fontconfig/fc-lang/kaa.orth index 4c2253434..b5ee6315c 100644 --- a/fontconfig/fc-lang/kaa.orth +++ b/fontconfig/fc-lang/kaa.orth @@ -1,110 +1,110 @@ -# -# fontconfig/fc-lang/kaa.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Kara-Kalpak (Karakalpak) (KAA) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) -#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) -0492 -0493 -049a -049b -04a2 -04a3 -04ae -04af -04b2 -04b3 -04d8 -04d9 +# +# fontconfig/fc-lang/kaa.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Kara-Kalpak (Karakalpak) (KAA) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) +#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) +0492 +0493 +049a +049b +04a2 +04a3 +04ae +04af +04b2 +04b3 +04d8 +04d9 diff --git a/fontconfig/fc-lang/ki.orth b/fontconfig/fc-lang/ki.orth index 0d3e054ad..6de49253c 100644 --- a/fontconfig/fc-lang/ki.orth +++ b/fontconfig/fc-lang/ki.orth @@ -1,33 +1,33 @@ -# -# fontconfig/fc-lang/ki.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Kikuyu (KI) -# -# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf -# -0041-005a -0061-007a -0128 # LATIN CAPITAL LETTER I WITH TILDE -0129 # LATIN SMALL LETTER I WITH TILDE -0168 # LATIN CAPITAL LETTER U WITH TILDE -0169 # LATIN SMALL LETTER U WITH TILDE +# +# fontconfig/fc-lang/ki.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kikuyu (KI) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a +0128 # LATIN CAPITAL LETTER I WITH TILDE +0129 # LATIN SMALL LETTER I WITH TILDE +0168 # LATIN CAPITAL LETTER U WITH TILDE +0169 # LATIN SMALL LETTER U WITH TILDE diff --git a/fontconfig/fc-lang/kk.orth b/fontconfig/fc-lang/kk.orth index 9b59e2c39..8fbe803ad 100644 --- a/fontconfig/fc-lang/kk.orth +++ b/fontconfig/fc-lang/kk.orth @@ -1,45 +1,45 @@ -# -# fontconfig/fc-lang/kk.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Kazakh (KK) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -#00ab -#00bb -#0401 -#0406 -0410-044f -#0451 -0456 -0492-0493 -049a-049b -04a2-04a3 -#04ae-04af -#04b0-04b1 -04ba-04bb -04d8-04d9 -04e8-04e9 -#2039-203a # angle quotes +# +# fontconfig/fc-lang/kk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kazakh (KK) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab +#00bb +#0401 +#0406 +0410-044f +#0451 +0456 +0492-0493 +049a-049b +04a2-04a3 +#04ae-04af +#04b0-04b1 +04ba-04bb +04d8-04d9 +04e8-04e9 +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/kl.orth b/fontconfig/fc-lang/kl.orth index a6b818a6d..a32d926ce 100644 --- a/fontconfig/fc-lang/kl.orth +++ b/fontconfig/fc-lang/kl.orth @@ -1,63 +1,63 @@ -# -# fontconfig/fc-lang/kl.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Greenlandic (KL) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00ab -#00bb -00c1 -00c2 -00c3 -00c5 -00c6 -#00c9 -00ca -00cd -00ce -00d4 -00d8 -00da -00db -00e1 -00e2 -00e3 -00e5 -00e6 -#00e9 -00ea -00ed -00ee -00f4 -00f8 -00fa -00fb -0128-0129 -0138 -0168-0169 -#2039-203a # angle quotes +# +# fontconfig/fc-lang/kl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Greenlandic (KL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00ab +#00bb +00c1 +00c2 +00c3 +00c5 +00c6 +#00c9 +00ca +00cd +00ce +00d4 +00d8 +00da +00db +00e1 +00e2 +00e3 +00e5 +00e6 +#00e9 +00ea +00ed +00ee +00f4 +00f8 +00fa +00fb +0128-0129 +0138 +0168-0169 +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/kn.orth b/fontconfig/fc-lang/kn.orth index 8366a44bf..781d775d7 100644 --- a/fontconfig/fc-lang/kn.orth +++ b/fontconfig/fc-lang/kn.orth @@ -1,40 +1,40 @@ -# -# fontconfig/fc-lang/kn.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Kannada (kn) -# -# Taken from the Unicode coverage of this language -# -0c82-0c83 -0c85-0c8c -0c8e-0c90 -0c92-0ca8 -0caa-0cb3 -0cb5-0cb9 -0cbe-0cc4 -0cc6-0cc8 -0cca-0ccd -0cd5-0cd6 -0cde -0ce0-0ce1 -#0ce6-0cef # Digits +# +# fontconfig/fc-lang/kn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kannada (kn) +# +# Taken from the Unicode coverage of this language +# +0c82-0c83 +0c85-0c8c +0c8e-0c90 +0c92-0ca8 +0caa-0cb3 +0cb5-0cb9 +0cbe-0cc4 +0cc6-0cc8 +0cca-0ccd +0cd5-0cd6 +0cde +0ce0-0ce1 +#0ce6-0cef # Digits diff --git a/fontconfig/fc-lang/ko.orth b/fontconfig/fc-lang/ko.orth index e2af7651a..39114a5af 100644 --- a/fontconfig/fc-lang/ko.orth +++ b/fontconfig/fc-lang/ko.orth @@ -1,2538 +1,2538 @@ -# -# fontconfig/fc-lang/ko.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Korean (KO) -# -# Coverage from KS X 1001 -# -# Does not include any Han characters as many Korean fonts -# don't cover them, and modern Korean usage is moving away from them -# -# Tor Andersson -# -#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 +# +#0x3000 # IDEOGRAPHIC SPACE +#0x3001 # IDEOGRAPHIC COMMA +#0x3002 # IDEOGRAPHIC FULL STOP +#0x327F # KOREAN STANDARD SYMBOL +#0xFFE6 # FULLWIDTH WON SIGN +0x3131 # HANGUL LETTER KIYEOK +0x3132 # HANGUL LETTER SSANGKIYEOK +0x3133 # HANGUL LETTER KIYEOK-SIOS +0x3134 # HANGUL LETTER NIEUN +0x3135 # HANGUL LETTER NIEUN-CIEUC +0x3136 # HANGUL LETTER NIEUN-HIEUH +0x3137 # HANGUL LETTER TIKEUT +0x3138 # HANGUL LETTER SSANGTIKEUT +0x3139 # HANGUL LETTER RIEUL +0x313A # HANGUL LETTER RIEUL-KIYEOK +0x313B # HANGUL LETTER RIEUL-MIEUM +0x313C # HANGUL LETTER RIEUL-PIEUP +0x313D # HANGUL LETTER RIEUL-SIOS +0x313E # HANGUL LETTER RIEUL-THIEUTH +0x313F # HANGUL LETTER RIEUL-PHIEUPH +0x3140 # HANGUL LETTER RIEUL-HIEUH +0x3141 # HANGUL LETTER MIEUM +0x3142 # HANGUL LETTER PIEUP +0x3143 # HANGUL LETTER SSANGPIEUP +0x3144 # HANGUL LETTER PIEUP-SIOS +0x3145 # HANGUL LETTER SIOS +0x3146 # HANGUL LETTER SSANGSIOS +0x3147 # HANGUL LETTER IEUNG +0x3148 # HANGUL LETTER CIEUC +0x3149 # HANGUL LETTER SSANGCIEUC +0x314A # HANGUL LETTER CHIEUCH +0x314B # HANGUL LETTER KHIEUKH +0x314C # HANGUL LETTER THIEUTH +0x314D # HANGUL LETTER PHIEUPH +0x314E # HANGUL LETTER HIEUH +0x314F # HANGUL LETTER A +0x3150 # HANGUL LETTER AE +0x3151 # HANGUL LETTER YA +0x3152 # HANGUL LETTER YAE +0x3153 # HANGUL LETTER EO +0x3154 # HANGUL LETTER E +0x3155 # HANGUL LETTER YEO +0x3156 # HANGUL LETTER YE +0x3157 # HANGUL LETTER O +0x3158 # HANGUL LETTER WA +0x3159 # HANGUL LETTER WAE +0x315A # HANGUL LETTER OE +0x315B # HANGUL LETTER YO +0x315C # HANGUL LETTER U +0x315D # HANGUL LETTER WEO +0x315E # HANGUL LETTER WE +0x315F # HANGUL LETTER WI +0x3160 # HANGUL LETTER YU +0x3161 # HANGUL LETTER EU +0x3162 # HANGUL LETTER YI +0x3163 # HANGUL LETTER I +0x3164 # HANGUL FILLER +0x3165 # HANGUL LETTER SSANGNIEUN +0x3166 # HANGUL LETTER NIEUN-TIKEUT +0x3167 # HANGUL LETTER NIEUN-SIOS +0x3168 # HANGUL LETTER NIEUN-PANSIOS +0x3169 # HANGUL LETTER RIEUL-KIYEOK-SIOS +0x316A # HANGUL LETTER RIEUL-TIKEUT +0x316B # HANGUL LETTER RIEUL-PIEUP-SIOS +0x316C # HANGUL LETTER RIEUL-PANSIOS +0x316D # HANGUL LETTER RIEUL-YEORINHIEUH +0x316E # HANGUL LETTER MIEUM-PIEUP +0x316F # HANGUL LETTER MIEUM-SIOS +0x3170 # HANGUL LETTER MIEUM-PANSIOS +0x3171 # HANGUL LETTER KAPYEOUNMIEUM +0x3172 # HANGUL LETTER PIEUP-KIYEOK +0x3173 # HANGUL LETTER PIEUP-TIKEUT +0x3174 # HANGUL LETTER PIEUP-SIOS-KIYEOK +0x3175 # HANGUL LETTER PIEUP-SIOS-TIKEUT +0x3176 # HANGUL LETTER PIEUP-CIEUC +0x3177 # HANGUL LETTER PIEUP-THIEUTH +0x3178 # HANGUL LETTER KAPYEOUNPIEUP +0x3179 # HANGUL LETTER KAPYEOUNSSANGPIEUP +0x317A # HANGUL LETTER SIOS-KIYEOK +0x317B # HANGUL LETTER SIOS-NIEUN +0x317C # HANGUL LETTER SIOS-TIKEUT +0x317D # HANGUL LETTER SIOS-PIEUP +0x317E # HANGUL LETTER SIOS-CIEUC +0x317F # HANGUL LETTER PANSIOS +0x3180 # HANGUL LETTER SSANGIEUNG +0x3181 # HANGUL LETTER YESIEUNG +0x3182 # HANGUL LETTER YESIEUNG-SIOS +0x3183 # HANGUL LETTER YESIEUNG-PANSIOS +0x3184 # HANGUL LETTER KAPYEOUNPHIEUPH +0x3185 # HANGUL LETTER SSANGHIEUH +0x3186 # HANGUL LETTER YEORINHIEUH +0x3187 # HANGUL LETTER YO-YA +0x3188 # HANGUL LETTER YO-YAE +0x3189 # HANGUL LETTER YO-I +0x318A # HANGUL LETTER YU-YEO +0x318B # HANGUL LETTER YU-YE +0x318C # HANGUL LETTER YU-I +0x318D # HANGUL LETTER ARAEA +0x318E # HANGUL LETTER ARAEAE +#0x3260 # CIRCLED HANGUL KIYEOK +#0x3261 # CIRCLED HANGUL NIEUN +#0x3262 # CIRCLED HANGUL TIKEUT +#0x3263 # CIRCLED HANGUL RIEUL +#0x3264 # CIRCLED HANGUL MIEUM +#0x3265 # CIRCLED HANGUL PIEUP +#0x3266 # CIRCLED HANGUL SIOS +#0x3267 # CIRCLED HANGUL IEUNG +#0x3268 # CIRCLED HANGUL CIEUC +#0x3269 # CIRCLED HANGUL CHIEUCH +#0x326A # CIRCLED HANGUL KHIEUKH +#0x326B # CIRCLED HANGUL THIEUTH +#0x326C # CIRCLED HANGUL PHIEUPH +#0x326D # CIRCLED HANGUL HIEUH +#0x326E # CIRCLED HANGUL KIYEOK A +#0x326F # CIRCLED HANGUL NIEUN A +#0x3270 # CIRCLED HANGUL TIKEUT A +#0x3271 # CIRCLED HANGUL RIEUL A +#0x3272 # CIRCLED HANGUL MIEUM A +#0x3273 # CIRCLED HANGUL PIEUP A +#0x3274 # CIRCLED HANGUL SIOS A +#0x3275 # CIRCLED HANGUL IEUNG A +#0x3276 # CIRCLED HANGUL CIEUC A +#0x3277 # CIRCLED HANGUL CHIEUCH A +#0x3278 # CIRCLED HANGUL KHIEUKH A +#0x3279 # CIRCLED HANGUL THIEUTH A +#0x327A # CIRCLED HANGUL PHIEUPH A +#0x327B # CIRCLED HANGUL HIEUH A +#0x3200 # PARENTHESIZED HANGUL KIYEOK +#0x3201 # PARENTHESIZED HANGUL NIEUN +#0x3202 # PARENTHESIZED HANGUL TIKEUT +#0x3203 # PARENTHESIZED HANGUL RIEUL +#0x3204 # PARENTHESIZED HANGUL MIEUM +#0x3205 # PARENTHESIZED HANGUL PIEUP +#0x3206 # PARENTHESIZED HANGUL SIOS +#0x3207 # PARENTHESIZED HANGUL IEUNG +#0x3208 # PARENTHESIZED HANGUL CIEUC +#0x3209 # PARENTHESIZED HANGUL CHIEUCH +#0x320A # PARENTHESIZED HANGUL KHIEUKH +#0x320B # PARENTHESIZED HANGUL THIEUTH +#0x320C # PARENTHESIZED HANGUL PHIEUPH +#0x320D # PARENTHESIZED HANGUL HIEUH +#0x320E # PARENTHESIZED HANGUL KIYEOK A +#0x320F # PARENTHESIZED HANGUL NIEUN A +#0x3210 # PARENTHESIZED HANGUL TIKEUT A +#0x3211 # PARENTHESIZED HANGUL RIEUL A +#0x3212 # PARENTHESIZED HANGUL MIEUM A +#0x3213 # PARENTHESIZED HANGUL PIEUP A +#0x3214 # PARENTHESIZED HANGUL SIOS A +#0x3215 # PARENTHESIZED HANGUL IEUNG A +#0x3216 # PARENTHESIZED HANGUL CIEUC A +#0x3217 # PARENTHESIZED HANGUL CHIEUCH A +#0x3218 # PARENTHESIZED HANGUL KHIEUKH A +#0x3219 # PARENTHESIZED HANGUL THIEUTH A +#0x321A # PARENTHESIZED HANGUL PHIEUPH A +#0x321B # PARENTHESIZED HANGUL HIEUH A +#0x321C # PARENTHESIZED HANGUL CIEUC U +0xAC00 # HANGUL SYLLABLE KIYEOK-A +0xAC01 # HANGUL SYLLABLE KIYEOK-A-KIYEOK +0xAC04 # HANGUL SYLLABLE KIYEOK-A-NIEUN +0xAC07 # HANGUL SYLLABLE KIYEOK-A-TIKEUT +0xAC08 # HANGUL SYLLABLE KIYEOK-A-RIEUL +0xAC09 # HANGUL SYLLABLE KIYEOK-A-RIEULKIYEOK +0xAC0A # HANGUL SYLLABLE KIYEOK-A-RIEULMIEUM +0xAC10 # HANGUL SYLLABLE KIYEOK-A-MIEUM +0xAC11 # HANGUL SYLLABLE KIYEOK-A-PIEUP +0xAC12 # HANGUL SYLLABLE KIYEOK-A-PIEUPSIOS +0xAC13 # HANGUL SYLLABLE KIYEOK-A-SIOS +0xAC14 # HANGUL SYLLABLE KIYEOK-A-SSANGSIOS +0xAC15 # HANGUL SYLLABLE KIYEOK-A-IEUNG +0xAC16 # HANGUL SYLLABLE KIYEOK-A-CIEUC +0xAC17 # HANGUL SYLLABLE KIYEOK-A-CHIEUCH +0xAC19 # HANGUL SYLLABLE KIYEOK-A-THIEUTH +0xAC1A # HANGUL SYLLABLE KIYEOK-A-PHIEUPH +0xAC1B # HANGUL SYLLABLE KIYEOK-A-HIEUH +0xAC1C # HANGUL SYLLABLE KIYEOK-AE +0xAC1D # HANGUL SYLLABLE KIYEOK-AE-KIYEOK +0xAC20 # HANGUL SYLLABLE KIYEOK-AE-NIEUN +0xAC24 # HANGUL SYLLABLE KIYEOK-AE-RIEUL +0xAC2C # HANGUL SYLLABLE KIYEOK-AE-MIEUM +0xAC2D # HANGUL SYLLABLE KIYEOK-AE-PIEUP +0xAC2F # HANGUL SYLLABLE KIYEOK-AE-SIOS +0xAC30 # HANGUL SYLLABLE KIYEOK-AE-SSANGSIOS +0xAC31 # HANGUL SYLLABLE KIYEOK-AE-IEUNG +0xAC38 # HANGUL SYLLABLE KIYEOK-YA +0xAC39 # HANGUL SYLLABLE KIYEOK-YA-KIYEOK +0xAC3C # HANGUL SYLLABLE KIYEOK-YA-NIEUN +0xAC40 # HANGUL SYLLABLE KIYEOK-YA-RIEUL +0xAC4B # HANGUL SYLLABLE KIYEOK-YA-SIOS +0xAC4D # HANGUL SYLLABLE KIYEOK-YA-IEUNG +0xAC54 # HANGUL SYLLABLE KIYEOK-YAE +0xAC58 # HANGUL SYLLABLE KIYEOK-YAE-NIEUN +0xAC5C # HANGUL SYLLABLE KIYEOK-YAE-RIEUL +0xAC70 # HANGUL SYLLABLE KIYEOK-EO +0xAC71 # HANGUL SYLLABLE KIYEOK-EO-KIYEOK +0xAC74 # HANGUL SYLLABLE KIYEOK-EO-NIEUN +0xAC77 # HANGUL SYLLABLE KIYEOK-EO-TIKEUT +0xAC78 # HANGUL SYLLABLE KIYEOK-EO-RIEUL +0xAC7A # HANGUL SYLLABLE KIYEOK-EO-RIEULMIEUM +0xAC80 # HANGUL SYLLABLE KIYEOK-EO-MIEUM +0xAC81 # HANGUL SYLLABLE KIYEOK-EO-PIEUP +0xAC83 # HANGUL SYLLABLE KIYEOK-EO-SIOS +0xAC84 # HANGUL SYLLABLE KIYEOK-EO-SSANGSIOS +0xAC85 # HANGUL SYLLABLE KIYEOK-EO-IEUNG +0xAC86 # HANGUL SYLLABLE KIYEOK-EO-CIEUC +0xAC89 # HANGUL SYLLABLE KIYEOK-EO-THIEUTH +0xAC8A # HANGUL SYLLABLE KIYEOK-EO-PHIEUPH +0xAC8B # HANGUL SYLLABLE KIYEOK-EO-HIEUH +0xAC8C # HANGUL SYLLABLE KIYEOK-E +0xAC90 # HANGUL SYLLABLE KIYEOK-E-NIEUN +0xAC94 # HANGUL SYLLABLE KIYEOK-E-RIEUL +0xAC9C # HANGUL SYLLABLE KIYEOK-E-MIEUM +0xAC9D # HANGUL SYLLABLE KIYEOK-E-PIEUP +0xAC9F # HANGUL SYLLABLE KIYEOK-E-SIOS +0xACA0 # HANGUL SYLLABLE KIYEOK-E-SSANGSIOS +0xACA1 # HANGUL SYLLABLE KIYEOK-E-IEUNG +0xACA8 # HANGUL SYLLABLE KIYEOK-YEO +0xACA9 # HANGUL SYLLABLE KIYEOK-YEO-KIYEOK +0xACAA # HANGUL SYLLABLE KIYEOK-YEO-SSANGKIYEOK +0xACAC # HANGUL SYLLABLE KIYEOK-YEO-NIEUN +0xACAF # HANGUL SYLLABLE KIYEOK-YEO-TIKEUT +0xACB0 # HANGUL SYLLABLE KIYEOK-YEO-RIEUL +0xACB8 # HANGUL SYLLABLE KIYEOK-YEO-MIEUM +0xACB9 # HANGUL SYLLABLE KIYEOK-YEO-PIEUP +0xACBB # HANGUL SYLLABLE KIYEOK-YEO-SIOS +0xACBC # HANGUL SYLLABLE KIYEOK-YEO-SSANGSIOS +0xACBD # HANGUL SYLLABLE KIYEOK-YEO-IEUNG +0xACC1 # HANGUL SYLLABLE KIYEOK-YEO-THIEUTH +0xACC4 # HANGUL SYLLABLE KIYEOK-YE +0xACC8 # HANGUL SYLLABLE KIYEOK-YE-NIEUN +0xACCC # HANGUL SYLLABLE KIYEOK-YE-RIEUL +0xACD5 # HANGUL SYLLABLE KIYEOK-YE-PIEUP +0xACD7 # HANGUL SYLLABLE KIYEOK-YE-SIOS +0xACE0 # HANGUL SYLLABLE KIYEOK-O +0xACE1 # HANGUL SYLLABLE KIYEOK-O-KIYEOK +0xACE4 # HANGUL SYLLABLE KIYEOK-O-NIEUN +0xACE7 # HANGUL SYLLABLE KIYEOK-O-TIKEUT +0xACE8 # HANGUL SYLLABLE KIYEOK-O-RIEUL +0xACEA # HANGUL SYLLABLE KIYEOK-O-RIEULMIEUM +0xACEC # HANGUL SYLLABLE KIYEOK-O-RIEULSIOS +0xACEF # HANGUL SYLLABLE KIYEOK-O-RIEULHIEUH +0xACF0 # HANGUL SYLLABLE KIYEOK-O-MIEUM +0xACF1 # HANGUL SYLLABLE KIYEOK-O-PIEUP +0xACF3 # HANGUL SYLLABLE KIYEOK-O-SIOS +0xACF5 # HANGUL SYLLABLE KIYEOK-O-IEUNG +0xACF6 # HANGUL SYLLABLE KIYEOK-O-CIEUC +0xACFC # HANGUL SYLLABLE KIYEOK-WA +0xACFD # HANGUL SYLLABLE KIYEOK-WA-KIYEOK +0xAD00 # HANGUL SYLLABLE KIYEOK-WA-NIEUN +0xAD04 # HANGUL SYLLABLE KIYEOK-WA-RIEUL +0xAD06 # HANGUL SYLLABLE KIYEOK-WA-RIEULMIEUM +0xAD0C # HANGUL SYLLABLE KIYEOK-WA-MIEUM +0xAD0D # HANGUL SYLLABLE KIYEOK-WA-PIEUP +0xAD0F # HANGUL SYLLABLE KIYEOK-WA-SIOS +0xAD11 # HANGUL SYLLABLE KIYEOK-WA-IEUNG +0xAD18 # HANGUL SYLLABLE KIYEOK-WAE +0xAD1C # HANGUL SYLLABLE KIYEOK-WAE-NIEUN +0xAD20 # HANGUL SYLLABLE KIYEOK-WAE-RIEUL +0xAD29 # HANGUL SYLLABLE KIYEOK-WAE-PIEUP +0xAD2C # HANGUL SYLLABLE KIYEOK-WAE-SSANGSIOS +0xAD2D # HANGUL SYLLABLE KIYEOK-WAE-IEUNG +0xAD34 # HANGUL SYLLABLE KIYEOK-OE +0xAD35 # HANGUL SYLLABLE KIYEOK-OE-KIYEOK +0xAD38 # HANGUL SYLLABLE KIYEOK-OE-NIEUN +0xAD3C # HANGUL SYLLABLE KIYEOK-OE-RIEUL +0xAD44 # HANGUL SYLLABLE KIYEOK-OE-MIEUM +0xAD45 # HANGUL SYLLABLE KIYEOK-OE-PIEUP +0xAD47 # HANGUL SYLLABLE KIYEOK-OE-SIOS +0xAD49 # HANGUL SYLLABLE KIYEOK-OE-IEUNG +0xAD50 # HANGUL SYLLABLE KIYEOK-YO +0xAD54 # HANGUL SYLLABLE KIYEOK-YO-NIEUN +0xAD58 # HANGUL SYLLABLE KIYEOK-YO-RIEUL +0xAD61 # HANGUL SYLLABLE KIYEOK-YO-PIEUP +0xAD63 # HANGUL SYLLABLE KIYEOK-YO-SIOS +0xAD6C # HANGUL SYLLABLE KIYEOK-U +0xAD6D # HANGUL SYLLABLE KIYEOK-U-KIYEOK +0xAD70 # HANGUL SYLLABLE KIYEOK-U-NIEUN +0xAD73 # HANGUL SYLLABLE KIYEOK-U-TIKEUT +0xAD74 # HANGUL SYLLABLE KIYEOK-U-RIEUL +0xAD75 # HANGUL SYLLABLE KIYEOK-U-RIEULKIYEOK +0xAD76 # HANGUL SYLLABLE KIYEOK-U-RIEULMIEUM +0xAD7B # HANGUL SYLLABLE KIYEOK-U-RIEULHIEUH +0xAD7C # HANGUL SYLLABLE KIYEOK-U-MIEUM +0xAD7D # HANGUL SYLLABLE KIYEOK-U-PIEUP +0xAD7F # HANGUL SYLLABLE KIYEOK-U-SIOS +0xAD81 # HANGUL SYLLABLE KIYEOK-U-IEUNG +0xAD82 # HANGUL SYLLABLE KIYEOK-U-CIEUC +0xAD88 # HANGUL SYLLABLE KIYEOK-WEO +0xAD89 # HANGUL SYLLABLE KIYEOK-WEO-KIYEOK +0xAD8C # HANGUL SYLLABLE KIYEOK-WEO-NIEUN +0xAD90 # HANGUL SYLLABLE KIYEOK-WEO-RIEUL +0xAD9C # HANGUL SYLLABLE KIYEOK-WEO-SSANGSIOS +0xAD9D # HANGUL SYLLABLE KIYEOK-WEO-IEUNG +0xADA4 # HANGUL SYLLABLE KIYEOK-WE +0xADB7 # HANGUL SYLLABLE KIYEOK-WE-SIOS +0xADC0 # HANGUL SYLLABLE KIYEOK-WI +0xADC1 # HANGUL SYLLABLE KIYEOK-WI-KIYEOK +0xADC4 # HANGUL SYLLABLE KIYEOK-WI-NIEUN +0xADC8 # HANGUL SYLLABLE KIYEOK-WI-RIEUL +0xADD0 # HANGUL SYLLABLE KIYEOK-WI-MIEUM +0xADD1 # HANGUL SYLLABLE KIYEOK-WI-PIEUP +0xADD3 # HANGUL SYLLABLE KIYEOK-WI-SIOS +0xADDC # HANGUL SYLLABLE KIYEOK-YU +0xADE0 # HANGUL SYLLABLE KIYEOK-YU-NIEUN +0xADE4 # HANGUL SYLLABLE KIYEOK-YU-RIEUL +0xADF8 # HANGUL SYLLABLE KIYEOK-EU +0xADF9 # HANGUL SYLLABLE KIYEOK-EU-KIYEOK +0xADFC # HANGUL SYLLABLE KIYEOK-EU-NIEUN +0xADFF # HANGUL SYLLABLE KIYEOK-EU-TIKEUT +0xAE00 # HANGUL SYLLABLE KIYEOK-EU-RIEUL +0xAE01 # HANGUL SYLLABLE KIYEOK-EU-RIEULKIYEOK +0xAE08 # HANGUL SYLLABLE KIYEOK-EU-MIEUM +0xAE09 # HANGUL SYLLABLE KIYEOK-EU-PIEUP +0xAE0B # HANGUL SYLLABLE KIYEOK-EU-SIOS +0xAE0D # HANGUL SYLLABLE KIYEOK-EU-IEUNG +0xAE14 # HANGUL SYLLABLE KIYEOK-YI +0xAE30 # HANGUL SYLLABLE KIYEOK-I +0xAE31 # HANGUL SYLLABLE KIYEOK-I-KIYEOK +0xAE34 # HANGUL SYLLABLE KIYEOK-I-NIEUN +0xAE37 # HANGUL SYLLABLE KIYEOK-I-TIKEUT +0xAE38 # HANGUL SYLLABLE KIYEOK-I-RIEUL +0xAE3A # HANGUL SYLLABLE KIYEOK-I-RIEULMIEUM +0xAE40 # HANGUL SYLLABLE KIYEOK-I-MIEUM +0xAE41 # HANGUL SYLLABLE KIYEOK-I-PIEUP +0xAE43 # HANGUL SYLLABLE KIYEOK-I-SIOS +0xAE45 # HANGUL SYLLABLE KIYEOK-I-IEUNG +0xAE46 # HANGUL SYLLABLE KIYEOK-I-CIEUC +0xAE4A # HANGUL SYLLABLE KIYEOK-I-PHIEUPH +0xAE4C # HANGUL SYLLABLE SSANGKIYEOK-A +0xAE4D # HANGUL SYLLABLE SSANGKIYEOK-A-KIYEOK +0xAE4E # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGKIYEOK +0xAE50 # HANGUL SYLLABLE SSANGKIYEOK-A-NIEUN +0xAE54 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEUL +0xAE56 # HANGUL SYLLABLE SSANGKIYEOK-A-RIEULMIEUM +0xAE5C # HANGUL SYLLABLE SSANGKIYEOK-A-MIEUM +0xAE5D # HANGUL SYLLABLE SSANGKIYEOK-A-PIEUP +0xAE5F # HANGUL SYLLABLE SSANGKIYEOK-A-SIOS +0xAE60 # HANGUL SYLLABLE SSANGKIYEOK-A-SSANGSIOS +0xAE61 # HANGUL SYLLABLE SSANGKIYEOK-A-IEUNG +0xAE65 # HANGUL SYLLABLE SSANGKIYEOK-A-THIEUTH +0xAE68 # HANGUL SYLLABLE SSANGKIYEOK-AE +0xAE69 # HANGUL SYLLABLE SSANGKIYEOK-AE-KIYEOK +0xAE6C # HANGUL SYLLABLE SSANGKIYEOK-AE-NIEUN +0xAE70 # HANGUL SYLLABLE SSANGKIYEOK-AE-RIEUL +0xAE78 # HANGUL SYLLABLE SSANGKIYEOK-AE-MIEUM +0xAE79 # HANGUL SYLLABLE SSANGKIYEOK-AE-PIEUP +0xAE7B # HANGUL SYLLABLE SSANGKIYEOK-AE-SIOS +0xAE7C # HANGUL SYLLABLE SSANGKIYEOK-AE-SSANGSIOS +0xAE7D # HANGUL SYLLABLE SSANGKIYEOK-AE-IEUNG +0xAE84 # HANGUL SYLLABLE SSANGKIYEOK-YA +0xAE85 # HANGUL SYLLABLE SSANGKIYEOK-YA-KIYEOK +0xAE8C # HANGUL SYLLABLE SSANGKIYEOK-YA-RIEUL +0xAEBC # HANGUL SYLLABLE SSANGKIYEOK-EO +0xAEBD # HANGUL SYLLABLE SSANGKIYEOK-EO-KIYEOK +0xAEBE # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGKIYEOK +0xAEC0 # HANGUL SYLLABLE SSANGKIYEOK-EO-NIEUN +0xAEC4 # HANGUL SYLLABLE SSANGKIYEOK-EO-RIEUL +0xAECC # HANGUL SYLLABLE SSANGKIYEOK-EO-MIEUM +0xAECD # HANGUL SYLLABLE SSANGKIYEOK-EO-PIEUP +0xAECF # HANGUL SYLLABLE SSANGKIYEOK-EO-SIOS +0xAED0 # HANGUL SYLLABLE SSANGKIYEOK-EO-SSANGSIOS +0xAED1 # HANGUL SYLLABLE SSANGKIYEOK-EO-IEUNG +0xAED8 # HANGUL SYLLABLE SSANGKIYEOK-E +0xAED9 # HANGUL SYLLABLE SSANGKIYEOK-E-KIYEOK +0xAEDC # HANGUL SYLLABLE SSANGKIYEOK-E-NIEUN +0xAEE8 # HANGUL SYLLABLE SSANGKIYEOK-E-MIEUM +0xAEEB # HANGUL SYLLABLE SSANGKIYEOK-E-SIOS +0xAEED # HANGUL SYLLABLE SSANGKIYEOK-E-IEUNG +0xAEF4 # HANGUL SYLLABLE SSANGKIYEOK-YEO +0xAEF8 # HANGUL SYLLABLE SSANGKIYEOK-YEO-NIEUN +0xAEFC # HANGUL SYLLABLE SSANGKIYEOK-YEO-RIEUL +0xAF07 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SIOS +0xAF08 # HANGUL SYLLABLE SSANGKIYEOK-YEO-SSANGSIOS +0xAF0D # HANGUL SYLLABLE SSANGKIYEOK-YEO-THIEUTH +0xAF10 # HANGUL SYLLABLE SSANGKIYEOK-YE +0xAF2C # HANGUL SYLLABLE SSANGKIYEOK-O +0xAF2D # HANGUL SYLLABLE SSANGKIYEOK-O-KIYEOK +0xAF30 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUN +0xAF32 # HANGUL SYLLABLE SSANGKIYEOK-O-NIEUNHIEUH +0xAF34 # HANGUL SYLLABLE SSANGKIYEOK-O-RIEUL +0xAF3C # HANGUL SYLLABLE SSANGKIYEOK-O-MIEUM +0xAF3D # HANGUL SYLLABLE SSANGKIYEOK-O-PIEUP +0xAF3F # HANGUL SYLLABLE SSANGKIYEOK-O-SIOS +0xAF41 # HANGUL SYLLABLE SSANGKIYEOK-O-IEUNG +0xAF42 # HANGUL SYLLABLE SSANGKIYEOK-O-CIEUC +0xAF43 # HANGUL SYLLABLE SSANGKIYEOK-O-CHIEUCH +0xAF48 # HANGUL SYLLABLE SSANGKIYEOK-WA +0xAF49 # HANGUL SYLLABLE SSANGKIYEOK-WA-KIYEOK +0xAF50 # HANGUL SYLLABLE SSANGKIYEOK-WA-RIEUL +0xAF5C # HANGUL SYLLABLE SSANGKIYEOK-WA-SSANGSIOS +0xAF5D # HANGUL SYLLABLE SSANGKIYEOK-WA-IEUNG +0xAF64 # HANGUL SYLLABLE SSANGKIYEOK-WAE +0xAF65 # HANGUL SYLLABLE SSANGKIYEOK-WAE-KIYEOK +0xAF79 # HANGUL SYLLABLE SSANGKIYEOK-WAE-IEUNG +0xAF80 # HANGUL SYLLABLE SSANGKIYEOK-OE +0xAF84 # HANGUL SYLLABLE SSANGKIYEOK-OE-NIEUN +0xAF88 # HANGUL SYLLABLE SSANGKIYEOK-OE-RIEUL +0xAF90 # HANGUL SYLLABLE SSANGKIYEOK-OE-MIEUM +0xAF91 # HANGUL SYLLABLE SSANGKIYEOK-OE-PIEUP +0xAF95 # HANGUL SYLLABLE SSANGKIYEOK-OE-IEUNG +0xAF9C # HANGUL SYLLABLE SSANGKIYEOK-YO +0xAFB8 # HANGUL SYLLABLE SSANGKIYEOK-U +0xAFB9 # HANGUL SYLLABLE SSANGKIYEOK-U-KIYEOK +0xAFBC # HANGUL SYLLABLE SSANGKIYEOK-U-NIEUN +0xAFC0 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEUL +0xAFC7 # HANGUL SYLLABLE SSANGKIYEOK-U-RIEULHIEUH +0xAFC8 # HANGUL SYLLABLE SSANGKIYEOK-U-MIEUM +0xAFC9 # HANGUL SYLLABLE SSANGKIYEOK-U-PIEUP +0xAFCB # HANGUL SYLLABLE SSANGKIYEOK-U-SIOS +0xAFCD # HANGUL SYLLABLE SSANGKIYEOK-U-IEUNG +0xAFCE # HANGUL SYLLABLE SSANGKIYEOK-U-CIEUC +0xAFD4 # HANGUL SYLLABLE SSANGKIYEOK-WEO +0xAFDC # HANGUL SYLLABLE SSANGKIYEOK-WEO-RIEUL +0xAFE8 # HANGUL SYLLABLE SSANGKIYEOK-WEO-SSANGSIOS +0xAFE9 # HANGUL SYLLABLE SSANGKIYEOK-WEO-IEUNG +0xAFF0 # HANGUL SYLLABLE SSANGKIYEOK-WE +0xAFF1 # HANGUL SYLLABLE SSANGKIYEOK-WE-KIYEOK +0xAFF4 # HANGUL SYLLABLE SSANGKIYEOK-WE-NIEUN +0xAFF8 # HANGUL SYLLABLE SSANGKIYEOK-WE-RIEUL +0xB000 # HANGUL SYLLABLE SSANGKIYEOK-WE-MIEUM +0xB001 # HANGUL SYLLABLE SSANGKIYEOK-WE-PIEUP +0xB004 # HANGUL SYLLABLE SSANGKIYEOK-WE-SSANGSIOS +0xB00C # HANGUL SYLLABLE SSANGKIYEOK-WI +0xB010 # HANGUL SYLLABLE SSANGKIYEOK-WI-NIEUN +0xB014 # HANGUL SYLLABLE SSANGKIYEOK-WI-RIEUL +0xB01C # HANGUL SYLLABLE SSANGKIYEOK-WI-MIEUM +0xB01D # HANGUL SYLLABLE SSANGKIYEOK-WI-PIEUP +0xB028 # HANGUL SYLLABLE SSANGKIYEOK-YU +0xB044 # HANGUL SYLLABLE SSANGKIYEOK-EU +0xB045 # HANGUL SYLLABLE SSANGKIYEOK-EU-KIYEOK +0xB048 # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUN +0xB04A # HANGUL SYLLABLE SSANGKIYEOK-EU-NIEUNHIEUH +0xB04C # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEUL +0xB04E # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULMIEUM +0xB053 # HANGUL SYLLABLE SSANGKIYEOK-EU-RIEULHIEUH +0xB054 # HANGUL SYLLABLE SSANGKIYEOK-EU-MIEUM +0xB055 # HANGUL SYLLABLE SSANGKIYEOK-EU-PIEUP +0xB057 # HANGUL SYLLABLE SSANGKIYEOK-EU-SIOS +0xB059 # HANGUL SYLLABLE SSANGKIYEOK-EU-IEUNG +0xB05D # HANGUL SYLLABLE SSANGKIYEOK-EU-THIEUTH +0xB07C # HANGUL SYLLABLE SSANGKIYEOK-I +0xB07D # HANGUL SYLLABLE SSANGKIYEOK-I-KIYEOK +0xB080 # HANGUL SYLLABLE SSANGKIYEOK-I-NIEUN +0xB084 # HANGUL SYLLABLE SSANGKIYEOK-I-RIEUL +0xB08C # HANGUL SYLLABLE SSANGKIYEOK-I-MIEUM +0xB08D # HANGUL SYLLABLE SSANGKIYEOK-I-PIEUP +0xB08F # HANGUL SYLLABLE SSANGKIYEOK-I-SIOS +0xB091 # HANGUL SYLLABLE SSANGKIYEOK-I-IEUNG +0xB098 # HANGUL SYLLABLE NIEUN-A +0xB099 # HANGUL SYLLABLE NIEUN-A-KIYEOK +0xB09A # HANGUL SYLLABLE NIEUN-A-SSANGKIYEOK +0xB09C # HANGUL SYLLABLE NIEUN-A-NIEUN +0xB09F # HANGUL SYLLABLE NIEUN-A-TIKEUT +0xB0A0 # HANGUL SYLLABLE NIEUN-A-RIEUL +0xB0A1 # HANGUL SYLLABLE NIEUN-A-RIEULKIYEOK +0xB0A2 # HANGUL SYLLABLE NIEUN-A-RIEULMIEUM +0xB0A8 # HANGUL SYLLABLE NIEUN-A-MIEUM +0xB0A9 # HANGUL SYLLABLE NIEUN-A-PIEUP +0xB0AB # HANGUL SYLLABLE NIEUN-A-SIOS +0xB0AC # HANGUL SYLLABLE NIEUN-A-SSANGSIOS +0xB0AD # HANGUL SYLLABLE NIEUN-A-IEUNG +0xB0AE # HANGUL SYLLABLE NIEUN-A-CIEUC +0xB0AF # HANGUL SYLLABLE NIEUN-A-CHIEUCH +0xB0B1 # HANGUL SYLLABLE NIEUN-A-THIEUTH +0xB0B3 # HANGUL SYLLABLE NIEUN-A-HIEUH +0xB0B4 # HANGUL SYLLABLE NIEUN-AE +0xB0B5 # HANGUL SYLLABLE NIEUN-AE-KIYEOK +0xB0B8 # HANGUL SYLLABLE NIEUN-AE-NIEUN +0xB0BC # HANGUL SYLLABLE NIEUN-AE-RIEUL +0xB0C4 # HANGUL SYLLABLE NIEUN-AE-MIEUM +0xB0C5 # HANGUL SYLLABLE NIEUN-AE-PIEUP +0xB0C7 # HANGUL SYLLABLE NIEUN-AE-SIOS +0xB0C8 # HANGUL SYLLABLE NIEUN-AE-SSANGSIOS +0xB0C9 # HANGUL SYLLABLE NIEUN-AE-IEUNG +0xB0D0 # HANGUL SYLLABLE NIEUN-YA +0xB0D1 # HANGUL SYLLABLE NIEUN-YA-KIYEOK +0xB0D4 # HANGUL SYLLABLE NIEUN-YA-NIEUN +0xB0D8 # HANGUL SYLLABLE NIEUN-YA-RIEUL +0xB0E0 # HANGUL SYLLABLE NIEUN-YA-MIEUM +0xB0E5 # HANGUL SYLLABLE NIEUN-YA-IEUNG +0xB108 # HANGUL SYLLABLE NIEUN-EO +0xB109 # HANGUL SYLLABLE NIEUN-EO-KIYEOK +0xB10B # HANGUL SYLLABLE NIEUN-EO-KIYEOKSIOS +0xB10C # HANGUL SYLLABLE NIEUN-EO-NIEUN +0xB110 # HANGUL SYLLABLE NIEUN-EO-RIEUL +0xB112 # HANGUL SYLLABLE NIEUN-EO-RIEULMIEUM +0xB113 # HANGUL SYLLABLE NIEUN-EO-RIEULPIEUP +0xB118 # HANGUL SYLLABLE NIEUN-EO-MIEUM +0xB119 # HANGUL SYLLABLE NIEUN-EO-PIEUP +0xB11B # HANGUL SYLLABLE NIEUN-EO-SIOS +0xB11C # HANGUL SYLLABLE NIEUN-EO-SSANGSIOS +0xB11D # HANGUL SYLLABLE NIEUN-EO-IEUNG +0xB123 # HANGUL SYLLABLE NIEUN-EO-HIEUH +0xB124 # HANGUL SYLLABLE NIEUN-E +0xB125 # HANGUL SYLLABLE NIEUN-E-KIYEOK +0xB128 # HANGUL SYLLABLE NIEUN-E-NIEUN +0xB12C # HANGUL SYLLABLE NIEUN-E-RIEUL +0xB134 # HANGUL SYLLABLE NIEUN-E-MIEUM +0xB135 # HANGUL SYLLABLE NIEUN-E-PIEUP +0xB137 # HANGUL SYLLABLE NIEUN-E-SIOS +0xB138 # HANGUL SYLLABLE NIEUN-E-SSANGSIOS +0xB139 # HANGUL SYLLABLE NIEUN-E-IEUNG +0xB140 # HANGUL SYLLABLE NIEUN-YEO +0xB141 # HANGUL SYLLABLE NIEUN-YEO-KIYEOK +0xB144 # HANGUL SYLLABLE NIEUN-YEO-NIEUN +0xB148 # HANGUL SYLLABLE NIEUN-YEO-RIEUL +0xB150 # HANGUL SYLLABLE NIEUN-YEO-MIEUM +0xB151 # HANGUL SYLLABLE NIEUN-YEO-PIEUP +0xB154 # HANGUL SYLLABLE NIEUN-YEO-SSANGSIOS +0xB155 # HANGUL SYLLABLE NIEUN-YEO-IEUNG +0xB158 # HANGUL SYLLABLE NIEUN-YEO-KHIEUKH +0xB15C # HANGUL SYLLABLE NIEUN-YE +0xB160 # HANGUL SYLLABLE NIEUN-YE-NIEUN +0xB178 # HANGUL SYLLABLE NIEUN-O +0xB179 # HANGUL SYLLABLE NIEUN-O-KIYEOK +0xB17C # HANGUL SYLLABLE NIEUN-O-NIEUN +0xB180 # HANGUL SYLLABLE NIEUN-O-RIEUL +0xB182 # HANGUL SYLLABLE NIEUN-O-RIEULMIEUM +0xB188 # HANGUL SYLLABLE NIEUN-O-MIEUM +0xB189 # HANGUL SYLLABLE NIEUN-O-PIEUP +0xB18B # HANGUL SYLLABLE NIEUN-O-SIOS +0xB18D # HANGUL SYLLABLE NIEUN-O-IEUNG +0xB192 # HANGUL SYLLABLE NIEUN-O-PHIEUPH +0xB193 # HANGUL SYLLABLE NIEUN-O-HIEUH +0xB194 # HANGUL SYLLABLE NIEUN-WA +0xB198 # HANGUL SYLLABLE NIEUN-WA-NIEUN +0xB19C # HANGUL SYLLABLE NIEUN-WA-RIEUL +0xB1A8 # HANGUL SYLLABLE NIEUN-WA-SSANGSIOS +0xB1CC # HANGUL SYLLABLE NIEUN-OE +0xB1D0 # HANGUL SYLLABLE NIEUN-OE-NIEUN +0xB1D4 # HANGUL SYLLABLE NIEUN-OE-RIEUL +0xB1DC # HANGUL SYLLABLE NIEUN-OE-MIEUM +0xB1DD # HANGUL SYLLABLE NIEUN-OE-PIEUP +0xB1DF # HANGUL SYLLABLE NIEUN-OE-SIOS +0xB1E8 # HANGUL SYLLABLE NIEUN-YO +0xB1E9 # HANGUL SYLLABLE NIEUN-YO-KIYEOK +0xB1EC # HANGUL SYLLABLE NIEUN-YO-NIEUN +0xB1F0 # HANGUL SYLLABLE NIEUN-YO-RIEUL +0xB1F9 # HANGUL SYLLABLE NIEUN-YO-PIEUP +0xB1FB # HANGUL SYLLABLE NIEUN-YO-SIOS +0xB1FD # HANGUL SYLLABLE NIEUN-YO-IEUNG +0xB204 # HANGUL SYLLABLE NIEUN-U +0xB205 # HANGUL SYLLABLE NIEUN-U-KIYEOK +0xB208 # HANGUL SYLLABLE NIEUN-U-NIEUN +0xB20B # HANGUL SYLLABLE NIEUN-U-TIKEUT +0xB20C # HANGUL SYLLABLE NIEUN-U-RIEUL +0xB214 # HANGUL SYLLABLE NIEUN-U-MIEUM +0xB215 # HANGUL SYLLABLE NIEUN-U-PIEUP +0xB217 # HANGUL SYLLABLE NIEUN-U-SIOS +0xB219 # HANGUL SYLLABLE NIEUN-U-IEUNG +0xB220 # HANGUL SYLLABLE NIEUN-WEO +0xB234 # HANGUL SYLLABLE NIEUN-WEO-SSANGSIOS +0xB23C # HANGUL SYLLABLE NIEUN-WE +0xB258 # HANGUL SYLLABLE NIEUN-WI +0xB25C # HANGUL SYLLABLE NIEUN-WI-NIEUN +0xB260 # HANGUL SYLLABLE NIEUN-WI-RIEUL +0xB268 # HANGUL SYLLABLE NIEUN-WI-MIEUM +0xB269 # HANGUL SYLLABLE NIEUN-WI-PIEUP +0xB274 # HANGUL SYLLABLE NIEUN-YU +0xB275 # HANGUL SYLLABLE NIEUN-YU-KIYEOK +0xB27C # HANGUL SYLLABLE NIEUN-YU-RIEUL +0xB284 # HANGUL SYLLABLE NIEUN-YU-MIEUM +0xB285 # HANGUL SYLLABLE NIEUN-YU-PIEUP +0xB289 # HANGUL SYLLABLE NIEUN-YU-IEUNG +0xB290 # HANGUL SYLLABLE NIEUN-EU +0xB291 # HANGUL SYLLABLE NIEUN-EU-KIYEOK +0xB294 # HANGUL SYLLABLE NIEUN-EU-NIEUN +0xB298 # HANGUL SYLLABLE NIEUN-EU-RIEUL +0xB299 # HANGUL SYLLABLE NIEUN-EU-RIEULKIYEOK +0xB29A # HANGUL SYLLABLE NIEUN-EU-RIEULMIEUM +0xB2A0 # HANGUL SYLLABLE NIEUN-EU-MIEUM +0xB2A1 # HANGUL SYLLABLE NIEUN-EU-PIEUP +0xB2A3 # HANGUL SYLLABLE NIEUN-EU-SIOS +0xB2A5 # HANGUL SYLLABLE NIEUN-EU-IEUNG +0xB2A6 # HANGUL SYLLABLE NIEUN-EU-CIEUC +0xB2AA # HANGUL SYLLABLE NIEUN-EU-PHIEUPH +0xB2AC # HANGUL SYLLABLE NIEUN-YI +0xB2B0 # HANGUL SYLLABLE NIEUN-YI-NIEUN +0xB2B4 # HANGUL SYLLABLE NIEUN-YI-RIEUL +0xB2C8 # HANGUL SYLLABLE NIEUN-I +0xB2C9 # HANGUL SYLLABLE NIEUN-I-KIYEOK +0xB2CC # HANGUL SYLLABLE NIEUN-I-NIEUN +0xB2D0 # HANGUL SYLLABLE NIEUN-I-RIEUL +0xB2D2 # HANGUL SYLLABLE NIEUN-I-RIEULMIEUM-<3/22/95> +0xB2D8 # HANGUL SYLLABLE NIEUN-I-MIEUM +0xB2D9 # HANGUL SYLLABLE NIEUN-I-PIEUP +0xB2DB # HANGUL SYLLABLE NIEUN-I-SIOS +0xB2DD # HANGUL SYLLABLE NIEUN-I-IEUNG +0xB2E2 # HANGUL SYLLABLE NIEUN-I-PHIEUPH +0xB2E4 # HANGUL SYLLABLE TIKEUT-A +0xB2E5 # HANGUL SYLLABLE TIKEUT-A-KIYEOK +0xB2E6 # HANGUL SYLLABLE TIKEUT-A-SSANGKIYEOK +0xB2E8 # HANGUL SYLLABLE TIKEUT-A-NIEUN +0xB2EB # HANGUL SYLLABLE TIKEUT-A-TIKEUT +0xB2EC # HANGUL SYLLABLE TIKEUT-A-RIEUL +0xB2ED # HANGUL SYLLABLE TIKEUT-A-RIEULKIYEOK +0xB2EE # HANGUL SYLLABLE TIKEUT-A-RIEULMIEUM +0xB2EF # HANGUL SYLLABLE TIKEUT-A-RIEULPIEUP +0xB2F3 # HANGUL SYLLABLE TIKEUT-A-RIEULHIEUH +0xB2F4 # HANGUL SYLLABLE TIKEUT-A-MIEUM +0xB2F5 # HANGUL SYLLABLE TIKEUT-A-PIEUP +0xB2F7 # HANGUL SYLLABLE TIKEUT-A-SIOS +0xB2F8 # HANGUL SYLLABLE TIKEUT-A-SSANGSIOS +0xB2F9 # HANGUL SYLLABLE TIKEUT-A-IEUNG +0xB2FA # HANGUL SYLLABLE TIKEUT-A-CIEUC +0xB2FB # HANGUL SYLLABLE TIKEUT-A-CHIEUCH +0xB2FF # HANGUL SYLLABLE TIKEUT-A-HIEUH +0xB300 # HANGUL SYLLABLE TIKEUT-AE +0xB301 # HANGUL SYLLABLE TIKEUT-AE-KIYEOK +0xB304 # HANGUL SYLLABLE TIKEUT-AE-NIEUN +0xB308 # HANGUL SYLLABLE TIKEUT-AE-RIEUL +0xB310 # HANGUL SYLLABLE TIKEUT-AE-MIEUM +0xB311 # HANGUL SYLLABLE TIKEUT-AE-PIEUP +0xB313 # HANGUL SYLLABLE TIKEUT-AE-SIOS +0xB314 # HANGUL SYLLABLE TIKEUT-AE-SSANGSIOS +0xB315 # HANGUL SYLLABLE TIKEUT-AE-IEUNG +0xB31C # HANGUL SYLLABLE TIKEUT-YA +0xB354 # HANGUL SYLLABLE TIKEUT-EO +0xB355 # HANGUL SYLLABLE TIKEUT-EO-KIYEOK +0xB356 # HANGUL SYLLABLE TIKEUT-EO-SSANGKIYEOK +0xB358 # HANGUL SYLLABLE TIKEUT-EO-NIEUN +0xB35B # HANGUL SYLLABLE TIKEUT-EO-TIKEUT +0xB35C # HANGUL SYLLABLE TIKEUT-EO-RIEUL +0xB35E # HANGUL SYLLABLE TIKEUT-EO-RIEULMIEUM +0xB35F # HANGUL SYLLABLE TIKEUT-EO-RIEULPIEUP +0xB364 # HANGUL SYLLABLE TIKEUT-EO-MIEUM +0xB365 # HANGUL SYLLABLE TIKEUT-EO-PIEUP +0xB367 # HANGUL SYLLABLE TIKEUT-EO-SIOS +0xB369 # HANGUL SYLLABLE TIKEUT-EO-IEUNG +0xB36B # HANGUL SYLLABLE TIKEUT-EO-CHIEUCH +0xB36E # HANGUL SYLLABLE TIKEUT-EO-PHIEUPH +0xB370 # HANGUL SYLLABLE TIKEUT-E +0xB371 # HANGUL SYLLABLE TIKEUT-E-KIYEOK +0xB374 # HANGUL SYLLABLE TIKEUT-E-NIEUN +0xB378 # HANGUL SYLLABLE TIKEUT-E-RIEUL +0xB380 # HANGUL SYLLABLE TIKEUT-E-MIEUM +0xB381 # HANGUL SYLLABLE TIKEUT-E-PIEUP +0xB383 # HANGUL SYLLABLE TIKEUT-E-SIOS +0xB384 # HANGUL SYLLABLE TIKEUT-E-SSANGSIOS +0xB385 # HANGUL SYLLABLE TIKEUT-E-IEUNG +0xB38C # HANGUL SYLLABLE TIKEUT-YEO +0xB390 # HANGUL SYLLABLE TIKEUT-YEO-NIEUN +0xB394 # HANGUL SYLLABLE TIKEUT-YEO-RIEUL +0xB3A0 # HANGUL SYLLABLE TIKEUT-YEO-SSANGSIOS +0xB3A1 # HANGUL SYLLABLE TIKEUT-YEO-IEUNG +0xB3A8 # HANGUL SYLLABLE TIKEUT-YE +0xB3AC # HANGUL SYLLABLE TIKEUT-YE-NIEUN +0xB3C4 # HANGUL SYLLABLE TIKEUT-O +0xB3C5 # HANGUL SYLLABLE TIKEUT-O-KIYEOK +0xB3C8 # HANGUL SYLLABLE TIKEUT-O-NIEUN +0xB3CB # HANGUL SYLLABLE TIKEUT-O-TIKEUT +0xB3CC # HANGUL SYLLABLE TIKEUT-O-RIEUL +0xB3CE # HANGUL SYLLABLE TIKEUT-O-RIEULMIEUM +0xB3D0 # HANGUL SYLLABLE TIKEUT-O-RIEULSIOS +0xB3D4 # HANGUL SYLLABLE TIKEUT-O-MIEUM +0xB3D5 # HANGUL SYLLABLE TIKEUT-O-PIEUP +0xB3D7 # HANGUL SYLLABLE TIKEUT-O-SIOS +0xB3D9 # HANGUL SYLLABLE TIKEUT-O-IEUNG +0xB3DB # HANGUL SYLLABLE TIKEUT-O-CHIEUCH +0xB3DD # HANGUL SYLLABLE TIKEUT-O-THIEUTH +0xB3E0 # HANGUL SYLLABLE TIKEUT-WA +0xB3E4 # HANGUL SYLLABLE TIKEUT-WA-NIEUN +0xB3E8 # HANGUL SYLLABLE TIKEUT-WA-RIEUL +0xB3FC # HANGUL SYLLABLE TIKEUT-WAE +0xB410 # HANGUL SYLLABLE TIKEUT-WAE-SSANGSIOS +0xB418 # HANGUL SYLLABLE TIKEUT-OE +0xB41C # HANGUL SYLLABLE TIKEUT-OE-NIEUN +0xB420 # HANGUL SYLLABLE TIKEUT-OE-RIEUL +0xB428 # HANGUL SYLLABLE TIKEUT-OE-MIEUM +0xB429 # HANGUL SYLLABLE TIKEUT-OE-PIEUP +0xB42B # HANGUL SYLLABLE TIKEUT-OE-SIOS +0xB434 # HANGUL SYLLABLE TIKEUT-YO +0xB450 # HANGUL SYLLABLE TIKEUT-U +0xB451 # HANGUL SYLLABLE TIKEUT-U-KIYEOK +0xB454 # HANGUL SYLLABLE TIKEUT-U-NIEUN +0xB458 # HANGUL SYLLABLE TIKEUT-U-RIEUL +0xB460 # HANGUL SYLLABLE TIKEUT-U-MIEUM +0xB461 # HANGUL SYLLABLE TIKEUT-U-PIEUP +0xB463 # HANGUL SYLLABLE TIKEUT-U-SIOS +0xB465 # HANGUL SYLLABLE TIKEUT-U-IEUNG +0xB46C # HANGUL SYLLABLE TIKEUT-WEO +0xB480 # HANGUL SYLLABLE TIKEUT-WEO-SSANGSIOS +0xB488 # HANGUL SYLLABLE TIKEUT-WE +0xB49D # HANGUL SYLLABLE TIKEUT-WE-IEUNG +0xB4A4 # HANGUL SYLLABLE TIKEUT-WI +0xB4A8 # HANGUL SYLLABLE TIKEUT-WI-NIEUN +0xB4AC # HANGUL SYLLABLE TIKEUT-WI-RIEUL +0xB4B5 # HANGUL SYLLABLE TIKEUT-WI-PIEUP +0xB4B7 # HANGUL SYLLABLE TIKEUT-WI-SIOS +0xB4B9 # HANGUL SYLLABLE TIKEUT-WI-IEUNG +0xB4C0 # HANGUL SYLLABLE TIKEUT-YU +0xB4C4 # HANGUL SYLLABLE TIKEUT-YU-NIEUN +0xB4C8 # HANGUL SYLLABLE TIKEUT-YU-RIEUL +0xB4D0 # HANGUL SYLLABLE TIKEUT-YU-MIEUM +0xB4D5 # HANGUL SYLLABLE TIKEUT-YU-IEUNG +0xB4DC # HANGUL SYLLABLE TIKEUT-EU +0xB4DD # HANGUL SYLLABLE TIKEUT-EU-KIYEOK +0xB4E0 # HANGUL SYLLABLE TIKEUT-EU-NIEUN +0xB4E3 # HANGUL SYLLABLE TIKEUT-EU-TIKEUT +0xB4E4 # HANGUL SYLLABLE TIKEUT-EU-RIEUL +0xB4E6 # HANGUL SYLLABLE TIKEUT-EU-RIEULMIEUM +0xB4EC # HANGUL SYLLABLE TIKEUT-EU-MIEUM +0xB4ED # HANGUL SYLLABLE TIKEUT-EU-PIEUP +0xB4EF # HANGUL SYLLABLE TIKEUT-EU-SIOS +0xB4F1 # HANGUL SYLLABLE TIKEUT-EU-IEUNG +0xB4F8 # HANGUL SYLLABLE TIKEUT-YI +0xB514 # HANGUL SYLLABLE TIKEUT-I +0xB515 # HANGUL SYLLABLE TIKEUT-I-KIYEOK +0xB518 # HANGUL SYLLABLE TIKEUT-I-NIEUN +0xB51B # HANGUL SYLLABLE TIKEUT-I-TIKEUT +0xB51C # HANGUL SYLLABLE TIKEUT-I-RIEUL +0xB524 # HANGUL SYLLABLE TIKEUT-I-MIEUM +0xB525 # HANGUL SYLLABLE TIKEUT-I-PIEUP +0xB527 # HANGUL SYLLABLE TIKEUT-I-SIOS +0xB528 # HANGUL SYLLABLE TIKEUT-I-SSANGSIOS +0xB529 # HANGUL SYLLABLE TIKEUT-I-IEUNG +0xB52A # HANGUL SYLLABLE TIKEUT-I-CIEUC +0xB530 # HANGUL SYLLABLE SSANGTIKEUT-A +0xB531 # HANGUL SYLLABLE SSANGTIKEUT-A-KIYEOK +0xB534 # HANGUL SYLLABLE SSANGTIKEUT-A-NIEUN +0xB538 # HANGUL SYLLABLE SSANGTIKEUT-A-RIEUL +0xB540 # HANGUL SYLLABLE SSANGTIKEUT-A-MIEUM +0xB541 # HANGUL SYLLABLE SSANGTIKEUT-A-PIEUP +0xB543 # HANGUL SYLLABLE SSANGTIKEUT-A-SIOS +0xB544 # HANGUL SYLLABLE SSANGTIKEUT-A-SSANGSIOS +0xB545 # HANGUL SYLLABLE SSANGTIKEUT-A-IEUNG +0xB54B # HANGUL SYLLABLE SSANGTIKEUT-A-HIEUH +0xB54C # HANGUL SYLLABLE SSANGTIKEUT-AE +0xB54D # HANGUL SYLLABLE SSANGTIKEUT-AE-KIYEOK +0xB550 # HANGUL SYLLABLE SSANGTIKEUT-AE-NIEUN +0xB554 # HANGUL SYLLABLE SSANGTIKEUT-AE-RIEUL +0xB55C # HANGUL SYLLABLE SSANGTIKEUT-AE-MIEUM +0xB55D # HANGUL SYLLABLE SSANGTIKEUT-AE-PIEUP +0xB55F # HANGUL SYLLABLE SSANGTIKEUT-AE-SIOS +0xB560 # HANGUL SYLLABLE SSANGTIKEUT-AE-SSANGSIOS +0xB561 # HANGUL SYLLABLE SSANGTIKEUT-AE-IEUNG +0xB5A0 # HANGUL SYLLABLE SSANGTIKEUT-EO +0xB5A1 # HANGUL SYLLABLE SSANGTIKEUT-EO-KIYEOK +0xB5A4 # HANGUL SYLLABLE SSANGTIKEUT-EO-NIEUN +0xB5A8 # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEUL +0xB5AA # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULMIEUM +0xB5AB # HANGUL SYLLABLE SSANGTIKEUT-EO-RIEULPIEUP +0xB5B0 # HANGUL SYLLABLE SSANGTIKEUT-EO-MIEUM +0xB5B1 # HANGUL SYLLABLE SSANGTIKEUT-EO-PIEUP +0xB5B3 # HANGUL SYLLABLE SSANGTIKEUT-EO-SIOS +0xB5B4 # HANGUL SYLLABLE SSANGTIKEUT-EO-SSANGSIOS +0xB5B5 # HANGUL SYLLABLE SSANGTIKEUT-EO-IEUNG +0xB5BB # HANGUL SYLLABLE SSANGTIKEUT-EO-HIEUH +0xB5BC # HANGUL SYLLABLE SSANGTIKEUT-E +0xB5BD # HANGUL SYLLABLE SSANGTIKEUT-E-KIYEOK +0xB5C0 # HANGUL SYLLABLE SSANGTIKEUT-E-NIEUN +0xB5C4 # HANGUL SYLLABLE SSANGTIKEUT-E-RIEUL +0xB5CC # HANGUL SYLLABLE SSANGTIKEUT-E-MIEUM +0xB5CD # HANGUL SYLLABLE SSANGTIKEUT-E-PIEUP +0xB5CF # HANGUL SYLLABLE SSANGTIKEUT-E-SIOS +0xB5D0 # HANGUL SYLLABLE SSANGTIKEUT-E-SSANGSIOS +0xB5D1 # HANGUL SYLLABLE SSANGTIKEUT-E-IEUNG +0xB5D8 # HANGUL SYLLABLE SSANGTIKEUT-YEO +0xB5EC # HANGUL SYLLABLE SSANGTIKEUT-YEO-SSANGSIOS +0xB610 # HANGUL SYLLABLE SSANGTIKEUT-O +0xB611 # HANGUL SYLLABLE SSANGTIKEUT-O-KIYEOK +0xB614 # HANGUL SYLLABLE SSANGTIKEUT-O-NIEUN +0xB618 # HANGUL SYLLABLE SSANGTIKEUT-O-RIEUL +0xB625 # HANGUL SYLLABLE SSANGTIKEUT-O-IEUNG +0xB62C # HANGUL SYLLABLE SSANGTIKEUT-WA +0xB634 # HANGUL SYLLABLE SSANGTIKEUT-WA-RIEUL +0xB648 # HANGUL SYLLABLE SSANGTIKEUT-WAE +0xB664 # HANGUL SYLLABLE SSANGTIKEUT-OE +0xB668 # HANGUL SYLLABLE SSANGTIKEUT-OE-NIEUN +0xB69C # HANGUL SYLLABLE SSANGTIKEUT-U +0xB69D # HANGUL SYLLABLE SSANGTIKEUT-U-KIYEOK +0xB6A0 # HANGUL SYLLABLE SSANGTIKEUT-U-NIEUN +0xB6A4 # HANGUL SYLLABLE SSANGTIKEUT-U-RIEUL +0xB6AB # HANGUL SYLLABLE SSANGTIKEUT-U-RIEULHIEUH +0xB6AC # HANGUL SYLLABLE SSANGTIKEUT-U-MIEUM +0xB6B1 # HANGUL SYLLABLE SSANGTIKEUT-U-IEUNG +0xB6D4 # HANGUL SYLLABLE SSANGTIKEUT-WE +0xB6F0 # HANGUL SYLLABLE SSANGTIKEUT-WI +0xB6F4 # HANGUL SYLLABLE SSANGTIKEUT-WI-NIEUN +0xB6F8 # HANGUL SYLLABLE SSANGTIKEUT-WI-RIEUL +0xB700 # HANGUL SYLLABLE SSANGTIKEUT-WI-MIEUM +0xB701 # HANGUL SYLLABLE SSANGTIKEUT-WI-PIEUP +0xB705 # HANGUL SYLLABLE SSANGTIKEUT-WI-IEUNG +0xB728 # HANGUL SYLLABLE SSANGTIKEUT-EU +0xB729 # HANGUL SYLLABLE SSANGTIKEUT-EU-KIYEOK +0xB72C # HANGUL SYLLABLE SSANGTIKEUT-EU-NIEUN +0xB72F # HANGUL SYLLABLE SSANGTIKEUT-EU-TIKEUT +0xB730 # HANGUL SYLLABLE SSANGTIKEUT-EU-RIEUL +0xB738 # HANGUL SYLLABLE SSANGTIKEUT-EU-MIEUM +0xB739 # HANGUL SYLLABLE SSANGTIKEUT-EU-PIEUP +0xB73B # HANGUL SYLLABLE SSANGTIKEUT-EU-SIOS +0xB744 # HANGUL SYLLABLE SSANGTIKEUT-YI +0xB748 # HANGUL SYLLABLE SSANGTIKEUT-YI-NIEUN +0xB74C # HANGUL SYLLABLE SSANGTIKEUT-YI-RIEUL +0xB754 # HANGUL SYLLABLE SSANGTIKEUT-YI-MIEUM +0xB755 # HANGUL SYLLABLE SSANGTIKEUT-YI-PIEUP +0xB760 # HANGUL SYLLABLE SSANGTIKEUT-I +0xB764 # HANGUL SYLLABLE SSANGTIKEUT-I-NIEUN +0xB768 # HANGUL SYLLABLE SSANGTIKEUT-I-RIEUL +0xB770 # HANGUL SYLLABLE SSANGTIKEUT-I-MIEUM +0xB771 # HANGUL SYLLABLE SSANGTIKEUT-I-PIEUP +0xB773 # HANGUL SYLLABLE SSANGTIKEUT-I-SIOS +0xB775 # HANGUL SYLLABLE SSANGTIKEUT-I-IEUNG +0xB77C # HANGUL SYLLABLE RIEUL-A +0xB77D # HANGUL SYLLABLE RIEUL-A-KIYEOK +0xB780 # HANGUL SYLLABLE RIEUL-A-NIEUN +0xB784 # HANGUL SYLLABLE RIEUL-A-RIEUL +0xB78C # HANGUL SYLLABLE RIEUL-A-MIEUM +0xB78D # HANGUL SYLLABLE RIEUL-A-PIEUP +0xB78F # HANGUL SYLLABLE RIEUL-A-SIOS +0xB790 # HANGUL SYLLABLE RIEUL-A-SSANGSIOS +0xB791 # HANGUL SYLLABLE RIEUL-A-IEUNG +0xB792 # HANGUL SYLLABLE RIEUL-A-CIEUC +0xB796 # HANGUL SYLLABLE RIEUL-A-PHIEUPH +0xB797 # HANGUL SYLLABLE RIEUL-A-HIEUH +0xB798 # HANGUL SYLLABLE RIEUL-AE +0xB799 # HANGUL SYLLABLE RIEUL-AE-KIYEOK +0xB79C # HANGUL SYLLABLE RIEUL-AE-NIEUN +0xB7A0 # HANGUL SYLLABLE RIEUL-AE-RIEUL +0xB7A8 # HANGUL SYLLABLE RIEUL-AE-MIEUM +0xB7A9 # HANGUL SYLLABLE RIEUL-AE-PIEUP +0xB7AB # HANGUL SYLLABLE RIEUL-AE-SIOS +0xB7AC # HANGUL SYLLABLE RIEUL-AE-SSANGSIOS +0xB7AD # HANGUL SYLLABLE RIEUL-AE-IEUNG +0xB7B4 # HANGUL SYLLABLE RIEUL-YA +0xB7B5 # HANGUL SYLLABLE RIEUL-YA-KIYEOK +0xB7B8 # HANGUL SYLLABLE RIEUL-YA-NIEUN +0xB7C7 # HANGUL SYLLABLE RIEUL-YA-SIOS +0xB7C9 # HANGUL SYLLABLE RIEUL-YA-IEUNG +0xB7EC # HANGUL SYLLABLE RIEUL-EO +0xB7ED # HANGUL SYLLABLE RIEUL-EO-KIYEOK +0xB7F0 # HANGUL SYLLABLE RIEUL-EO-NIEUN +0xB7F4 # HANGUL SYLLABLE RIEUL-EO-RIEUL +0xB7FC # HANGUL SYLLABLE RIEUL-EO-MIEUM +0xB7FD # HANGUL SYLLABLE RIEUL-EO-PIEUP +0xB7FF # HANGUL SYLLABLE RIEUL-EO-SIOS +0xB800 # HANGUL SYLLABLE RIEUL-EO-SSANGSIOS +0xB801 # HANGUL SYLLABLE RIEUL-EO-IEUNG +0xB807 # HANGUL SYLLABLE RIEUL-EO-HIEUH +0xB808 # HANGUL SYLLABLE RIEUL-E +0xB809 # HANGUL SYLLABLE RIEUL-E-KIYEOK +0xB80C # HANGUL SYLLABLE RIEUL-E-NIEUN +0xB810 # HANGUL SYLLABLE RIEUL-E-RIEUL +0xB818 # HANGUL SYLLABLE RIEUL-E-MIEUM +0xB819 # HANGUL SYLLABLE RIEUL-E-PIEUP +0xB81B # HANGUL SYLLABLE RIEUL-E-SIOS +0xB81D # HANGUL SYLLABLE RIEUL-E-IEUNG +0xB824 # HANGUL SYLLABLE RIEUL-YEO +0xB825 # HANGUL SYLLABLE RIEUL-YEO-KIYEOK +0xB828 # HANGUL SYLLABLE RIEUL-YEO-NIEUN +0xB82C # HANGUL SYLLABLE RIEUL-YEO-RIEUL +0xB834 # HANGUL SYLLABLE RIEUL-YEO-MIEUM +0xB835 # HANGUL SYLLABLE RIEUL-YEO-PIEUP +0xB837 # HANGUL SYLLABLE RIEUL-YEO-SIOS +0xB838 # HANGUL SYLLABLE RIEUL-YEO-SSANGSIOS +0xB839 # HANGUL SYLLABLE RIEUL-YEO-IEUNG +0xB840 # HANGUL SYLLABLE RIEUL-YE +0xB844 # HANGUL SYLLABLE RIEUL-YE-NIEUN +0xB851 # HANGUL SYLLABLE RIEUL-YE-PIEUP +0xB853 # HANGUL SYLLABLE RIEUL-YE-SIOS +0xB85C # HANGUL SYLLABLE RIEUL-O +0xB85D # HANGUL SYLLABLE RIEUL-O-KIYEOK +0xB860 # HANGUL SYLLABLE RIEUL-O-NIEUN +0xB864 # HANGUL SYLLABLE RIEUL-O-RIEUL +0xB86C # HANGUL SYLLABLE RIEUL-O-MIEUM +0xB86D # HANGUL SYLLABLE RIEUL-O-PIEUP +0xB86F # HANGUL SYLLABLE RIEUL-O-SIOS +0xB871 # HANGUL SYLLABLE RIEUL-O-IEUNG +0xB878 # HANGUL SYLLABLE RIEUL-WA +0xB87C # HANGUL SYLLABLE RIEUL-WA-NIEUN +0xB88D # HANGUL SYLLABLE RIEUL-WA-IEUNG +0xB8A8 # HANGUL SYLLABLE RIEUL-WAE-SSANGSIOS +0xB8B0 # HANGUL SYLLABLE RIEUL-OE +0xB8B4 # HANGUL SYLLABLE RIEUL-OE-NIEUN +0xB8B8 # HANGUL SYLLABLE RIEUL-OE-RIEUL +0xB8C0 # HANGUL SYLLABLE RIEUL-OE-MIEUM +0xB8C1 # HANGUL SYLLABLE RIEUL-OE-PIEUP +0xB8C3 # HANGUL SYLLABLE RIEUL-OE-SIOS +0xB8C5 # HANGUL SYLLABLE RIEUL-OE-IEUNG +0xB8CC # HANGUL SYLLABLE RIEUL-YO +0xB8D0 # HANGUL SYLLABLE RIEUL-YO-NIEUN +0xB8D4 # HANGUL SYLLABLE RIEUL-YO-RIEUL +0xB8DD # HANGUL SYLLABLE RIEUL-YO-PIEUP +0xB8DF # HANGUL SYLLABLE RIEUL-YO-SIOS +0xB8E1 # HANGUL SYLLABLE RIEUL-YO-IEUNG +0xB8E8 # HANGUL SYLLABLE RIEUL-U +0xB8E9 # HANGUL SYLLABLE RIEUL-U-KIYEOK +0xB8EC # HANGUL SYLLABLE RIEUL-U-NIEUN +0xB8F0 # HANGUL SYLLABLE RIEUL-U-RIEUL +0xB8F8 # HANGUL SYLLABLE RIEUL-U-MIEUM +0xB8F9 # HANGUL SYLLABLE RIEUL-U-PIEUP +0xB8FB # HANGUL SYLLABLE RIEUL-U-SIOS +0xB8FD # HANGUL SYLLABLE RIEUL-U-IEUNG +0xB904 # HANGUL SYLLABLE RIEUL-WEO +0xB918 # HANGUL SYLLABLE RIEUL-WEO-SSANGSIOS +0xB920 # HANGUL SYLLABLE RIEUL-WE +0xB93C # HANGUL SYLLABLE RIEUL-WI +0xB93D # HANGUL SYLLABLE RIEUL-WI-KIYEOK +0xB940 # HANGUL SYLLABLE RIEUL-WI-NIEUN +0xB944 # HANGUL SYLLABLE RIEUL-WI-RIEUL +0xB94C # HANGUL SYLLABLE RIEUL-WI-MIEUM +0xB94F # HANGUL SYLLABLE RIEUL-WI-SIOS +0xB951 # HANGUL SYLLABLE RIEUL-WI-IEUNG +0xB958 # HANGUL SYLLABLE RIEUL-YU +0xB959 # HANGUL SYLLABLE RIEUL-YU-KIYEOK +0xB95C # HANGUL SYLLABLE RIEUL-YU-NIEUN +0xB960 # HANGUL SYLLABLE RIEUL-YU-RIEUL +0xB968 # HANGUL SYLLABLE RIEUL-YU-MIEUM +0xB969 # HANGUL SYLLABLE RIEUL-YU-PIEUP +0xB96B # HANGUL SYLLABLE RIEUL-YU-SIOS +0xB96D # HANGUL SYLLABLE RIEUL-YU-IEUNG +0xB974 # HANGUL SYLLABLE RIEUL-EU +0xB975 # HANGUL SYLLABLE RIEUL-EU-KIYEOK +0xB978 # HANGUL SYLLABLE RIEUL-EU-NIEUN +0xB97C # HANGUL SYLLABLE RIEUL-EU-RIEUL +0xB984 # HANGUL SYLLABLE RIEUL-EU-MIEUM +0xB985 # HANGUL SYLLABLE RIEUL-EU-PIEUP +0xB987 # HANGUL SYLLABLE RIEUL-EU-SIOS +0xB989 # HANGUL SYLLABLE RIEUL-EU-IEUNG +0xB98A # HANGUL SYLLABLE RIEUL-EU-CIEUC +0xB98D # HANGUL SYLLABLE RIEUL-EU-THIEUTH +0xB98E # HANGUL SYLLABLE RIEUL-EU-PHIEUPH +0xB9AC # HANGUL SYLLABLE RIEUL-I +0xB9AD # HANGUL SYLLABLE RIEUL-I-KIYEOK +0xB9B0 # HANGUL SYLLABLE RIEUL-I-NIEUN +0xB9B4 # HANGUL SYLLABLE RIEUL-I-RIEUL +0xB9BC # HANGUL SYLLABLE RIEUL-I-MIEUM +0xB9BD # HANGUL SYLLABLE RIEUL-I-PIEUP +0xB9BF # HANGUL SYLLABLE RIEUL-I-SIOS +0xB9C1 # HANGUL SYLLABLE RIEUL-I-IEUNG +0xB9C8 # HANGUL SYLLABLE MIEUM-A +0xB9C9 # HANGUL SYLLABLE MIEUM-A-KIYEOK +0xB9CC # HANGUL SYLLABLE MIEUM-A-NIEUN +0xB9CE # HANGUL SYLLABLE MIEUM-A-NIEUNHIEUH +0xB9CF # HANGUL SYLLABLE MIEUM-A-TIKEUT +0xB9D0 # HANGUL SYLLABLE MIEUM-A-RIEUL +0xB9D1 # HANGUL SYLLABLE MIEUM-A-RIEULKIYEOK +0xB9D2 # HANGUL SYLLABLE MIEUM-A-RIEULMIEUM +0xB9D8 # HANGUL SYLLABLE MIEUM-A-MIEUM +0xB9D9 # HANGUL SYLLABLE MIEUM-A-PIEUP +0xB9DB # HANGUL SYLLABLE MIEUM-A-SIOS +0xB9DD # HANGUL SYLLABLE MIEUM-A-IEUNG +0xB9DE # HANGUL SYLLABLE MIEUM-A-CIEUC +0xB9E1 # HANGUL SYLLABLE MIEUM-A-THIEUTH +0xB9E3 # HANGUL SYLLABLE MIEUM-A-HIEUH +0xB9E4 # HANGUL SYLLABLE MIEUM-AE +0xB9E5 # HANGUL SYLLABLE MIEUM-AE-KIYEOK +0xB9E8 # HANGUL SYLLABLE MIEUM-AE-NIEUN +0xB9EC # HANGUL SYLLABLE MIEUM-AE-RIEUL +0xB9F4 # HANGUL SYLLABLE MIEUM-AE-MIEUM +0xB9F5 # HANGUL SYLLABLE MIEUM-AE-PIEUP +0xB9F7 # HANGUL SYLLABLE MIEUM-AE-SIOS +0xB9F8 # HANGUL SYLLABLE MIEUM-AE-SSANGSIOS +0xB9F9 # HANGUL SYLLABLE MIEUM-AE-IEUNG +0xB9FA # HANGUL SYLLABLE MIEUM-AE-CIEUC +0xBA00 # HANGUL SYLLABLE MIEUM-YA +0xBA01 # HANGUL SYLLABLE MIEUM-YA-KIYEOK +0xBA08 # HANGUL SYLLABLE MIEUM-YA-RIEUL +0xBA15 # HANGUL SYLLABLE MIEUM-YA-IEUNG +0xBA38 # HANGUL SYLLABLE MIEUM-EO +0xBA39 # HANGUL SYLLABLE MIEUM-EO-KIYEOK +0xBA3C # HANGUL SYLLABLE MIEUM-EO-NIEUN +0xBA40 # HANGUL SYLLABLE MIEUM-EO-RIEUL +0xBA42 # HANGUL SYLLABLE MIEUM-EO-RIEULMIEUM +0xBA48 # HANGUL SYLLABLE MIEUM-EO-MIEUM +0xBA49 # HANGUL SYLLABLE MIEUM-EO-PIEUP +0xBA4B # HANGUL SYLLABLE MIEUM-EO-SIOS +0xBA4D # HANGUL SYLLABLE MIEUM-EO-IEUNG +0xBA4E # HANGUL SYLLABLE MIEUM-EO-CIEUC +0xBA53 # HANGUL SYLLABLE MIEUM-EO-HIEUH +0xBA54 # HANGUL SYLLABLE MIEUM-E +0xBA55 # HANGUL SYLLABLE MIEUM-E-KIYEOK +0xBA58 # HANGUL SYLLABLE MIEUM-E-NIEUN +0xBA5C # HANGUL SYLLABLE MIEUM-E-RIEUL +0xBA64 # HANGUL SYLLABLE MIEUM-E-MIEUM +0xBA65 # HANGUL SYLLABLE MIEUM-E-PIEUP +0xBA67 # HANGUL SYLLABLE MIEUM-E-SIOS +0xBA68 # HANGUL SYLLABLE MIEUM-E-SSANGSIOS +0xBA69 # HANGUL SYLLABLE MIEUM-E-IEUNG +0xBA70 # HANGUL SYLLABLE MIEUM-YEO +0xBA71 # HANGUL SYLLABLE MIEUM-YEO-KIYEOK +0xBA74 # HANGUL SYLLABLE MIEUM-YEO-NIEUN +0xBA78 # HANGUL SYLLABLE MIEUM-YEO-RIEUL +0xBA83 # HANGUL SYLLABLE MIEUM-YEO-SIOS +0xBA84 # HANGUL SYLLABLE MIEUM-YEO-SSANGSIOS +0xBA85 # HANGUL SYLLABLE MIEUM-YEO-IEUNG +0xBA87 # HANGUL SYLLABLE MIEUM-YEO-CHIEUCH +0xBA8C # HANGUL SYLLABLE MIEUM-YE +0xBAA8 # HANGUL SYLLABLE MIEUM-O +0xBAA9 # HANGUL SYLLABLE MIEUM-O-KIYEOK +0xBAAB # HANGUL SYLLABLE MIEUM-O-KIYEOKSIOS +0xBAAC # HANGUL SYLLABLE MIEUM-O-NIEUN +0xBAB0 # HANGUL SYLLABLE MIEUM-O-RIEUL +0xBAB2 # HANGUL SYLLABLE MIEUM-O-RIEULMIEUM +0xBAB8 # HANGUL SYLLABLE MIEUM-O-MIEUM +0xBAB9 # HANGUL SYLLABLE MIEUM-O-PIEUP +0xBABB # HANGUL SYLLABLE MIEUM-O-SIOS +0xBABD # HANGUL SYLLABLE MIEUM-O-IEUNG +0xBAC4 # HANGUL SYLLABLE MIEUM-WA +0xBAC8 # HANGUL SYLLABLE MIEUM-WA-NIEUN +0xBAD8 # HANGUL SYLLABLE MIEUM-WA-SSANGSIOS +0xBAD9 # HANGUL SYLLABLE MIEUM-WA-IEUNG +0xBAFC # HANGUL SYLLABLE MIEUM-OE +0xBB00 # HANGUL SYLLABLE MIEUM-OE-NIEUN +0xBB04 # HANGUL SYLLABLE MIEUM-OE-RIEUL +0xBB0D # HANGUL SYLLABLE MIEUM-OE-PIEUP +0xBB0F # HANGUL SYLLABLE MIEUM-OE-SIOS +0xBB11 # HANGUL SYLLABLE MIEUM-OE-IEUNG +0xBB18 # HANGUL SYLLABLE MIEUM-YO +0xBB1C # HANGUL SYLLABLE MIEUM-YO-NIEUN +0xBB20 # HANGUL SYLLABLE MIEUM-YO-RIEUL +0xBB29 # HANGUL SYLLABLE MIEUM-YO-PIEUP +0xBB2B # HANGUL SYLLABLE MIEUM-YO-SIOS +0xBB34 # HANGUL SYLLABLE MIEUM-U +0xBB35 # HANGUL SYLLABLE MIEUM-U-KIYEOK +0xBB36 # HANGUL SYLLABLE MIEUM-U-SSANGKIYEOK +0xBB38 # HANGUL SYLLABLE MIEUM-U-NIEUN +0xBB3B # HANGUL SYLLABLE MIEUM-U-TIKEUT +0xBB3C # HANGUL SYLLABLE MIEUM-U-RIEUL +0xBB3D # HANGUL SYLLABLE MIEUM-U-RIEULKIYEOK +0xBB3E # HANGUL SYLLABLE MIEUM-U-RIEULMIEUM +0xBB44 # HANGUL SYLLABLE MIEUM-U-MIEUM +0xBB45 # HANGUL SYLLABLE MIEUM-U-PIEUP +0xBB47 # HANGUL SYLLABLE MIEUM-U-SIOS +0xBB49 # HANGUL SYLLABLE MIEUM-U-IEUNG +0xBB4D # HANGUL SYLLABLE MIEUM-U-THIEUTH +0xBB4F # HANGUL SYLLABLE MIEUM-U-HIEUH +0xBB50 # HANGUL SYLLABLE MIEUM-WEO +0xBB54 # HANGUL SYLLABLE MIEUM-WEO-NIEUN +0xBB58 # HANGUL SYLLABLE MIEUM-WEO-RIEUL +0xBB61 # HANGUL SYLLABLE MIEUM-WEO-PIEUP +0xBB63 # HANGUL SYLLABLE MIEUM-WEO-SIOS +0xBB6C # HANGUL SYLLABLE MIEUM-WE +0xBB88 # HANGUL SYLLABLE MIEUM-WI +0xBB8C # HANGUL SYLLABLE MIEUM-WI-NIEUN +0xBB90 # HANGUL SYLLABLE MIEUM-WI-RIEUL +0xBBA4 # HANGUL SYLLABLE MIEUM-YU +0xBBA8 # HANGUL SYLLABLE MIEUM-YU-NIEUN +0xBBAC # HANGUL SYLLABLE MIEUM-YU-RIEUL +0xBBB4 # HANGUL SYLLABLE MIEUM-YU-MIEUM +0xBBB7 # HANGUL SYLLABLE MIEUM-YU-SIOS +0xBBC0 # HANGUL SYLLABLE MIEUM-EU +0xBBC4 # HANGUL SYLLABLE MIEUM-EU-NIEUN +0xBBC8 # HANGUL SYLLABLE MIEUM-EU-RIEUL +0xBBD0 # HANGUL SYLLABLE MIEUM-EU-MIEUM +0xBBD3 # HANGUL SYLLABLE MIEUM-EU-SIOS +0xBBF8 # HANGUL SYLLABLE MIEUM-I +0xBBF9 # HANGUL SYLLABLE MIEUM-I-KIYEOK +0xBBFC # HANGUL SYLLABLE MIEUM-I-NIEUN +0xBBFF # HANGUL SYLLABLE MIEUM-I-TIKEUT +0xBC00 # HANGUL SYLLABLE MIEUM-I-RIEUL +0xBC02 # HANGUL SYLLABLE MIEUM-I-RIEULMIEUM +0xBC08 # HANGUL SYLLABLE MIEUM-I-MIEUM +0xBC09 # HANGUL SYLLABLE MIEUM-I-PIEUP +0xBC0B # HANGUL SYLLABLE MIEUM-I-SIOS +0xBC0C # HANGUL SYLLABLE MIEUM-I-SSANGSIOS +0xBC0D # HANGUL SYLLABLE MIEUM-I-IEUNG +0xBC0F # HANGUL SYLLABLE MIEUM-I-CHIEUCH +0xBC11 # HANGUL SYLLABLE MIEUM-I-THIEUTH +0xBC14 # HANGUL SYLLABLE PIEUP-A +0xBC15 # HANGUL SYLLABLE PIEUP-A-KIYEOK +0xBC16 # HANGUL SYLLABLE PIEUP-A-SSANGKIYEOK +0xBC17 # HANGUL SYLLABLE PIEUP-A-KIYEOKSIOS +0xBC18 # HANGUL SYLLABLE PIEUP-A-NIEUN +0xBC1B # HANGUL SYLLABLE PIEUP-A-TIKEUT +0xBC1C # HANGUL SYLLABLE PIEUP-A-RIEUL +0xBC1D # HANGUL SYLLABLE PIEUP-A-RIEULKIYEOK +0xBC1E # HANGUL SYLLABLE PIEUP-A-RIEULMIEUM +0xBC1F # HANGUL SYLLABLE PIEUP-A-RIEULPIEUP +0xBC24 # HANGUL SYLLABLE PIEUP-A-MIEUM +0xBC25 # HANGUL SYLLABLE PIEUP-A-PIEUP +0xBC27 # HANGUL SYLLABLE PIEUP-A-SIOS +0xBC29 # HANGUL SYLLABLE PIEUP-A-IEUNG +0xBC2D # HANGUL SYLLABLE PIEUP-A-THIEUTH +0xBC30 # HANGUL SYLLABLE PIEUP-AE +0xBC31 # HANGUL SYLLABLE PIEUP-AE-KIYEOK +0xBC34 # HANGUL SYLLABLE PIEUP-AE-NIEUN +0xBC38 # HANGUL SYLLABLE PIEUP-AE-RIEUL +0xBC40 # HANGUL SYLLABLE PIEUP-AE-MIEUM +0xBC41 # HANGUL SYLLABLE PIEUP-AE-PIEUP +0xBC43 # HANGUL SYLLABLE PIEUP-AE-SIOS +0xBC44 # HANGUL SYLLABLE PIEUP-AE-SSANGSIOS +0xBC45 # HANGUL SYLLABLE PIEUP-AE-IEUNG +0xBC49 # HANGUL SYLLABLE PIEUP-AE-THIEUTH +0xBC4C # HANGUL SYLLABLE PIEUP-YA +0xBC4D # HANGUL SYLLABLE PIEUP-YA-KIYEOK +0xBC50 # HANGUL SYLLABLE PIEUP-YA-NIEUN +0xBC5D # HANGUL SYLLABLE PIEUP-YA-PIEUP +0xBC84 # HANGUL SYLLABLE PIEUP-EO +0xBC85 # HANGUL SYLLABLE PIEUP-EO-KIYEOK +0xBC88 # HANGUL SYLLABLE PIEUP-EO-NIEUN +0xBC8B # HANGUL SYLLABLE PIEUP-EO-TIKEUT +0xBC8C # HANGUL SYLLABLE PIEUP-EO-RIEUL +0xBC8E # HANGUL SYLLABLE PIEUP-EO-RIEULMIEUM +0xBC94 # HANGUL SYLLABLE PIEUP-EO-MIEUM +0xBC95 # HANGUL SYLLABLE PIEUP-EO-PIEUP +0xBC97 # HANGUL SYLLABLE PIEUP-EO-SIOS +0xBC99 # HANGUL SYLLABLE PIEUP-EO-IEUNG +0xBC9A # HANGUL SYLLABLE PIEUP-EO-CIEUC +0xBCA0 # HANGUL SYLLABLE PIEUP-E +0xBCA1 # HANGUL SYLLABLE PIEUP-E-KIYEOK +0xBCA4 # HANGUL SYLLABLE PIEUP-E-NIEUN +0xBCA7 # HANGUL SYLLABLE PIEUP-E-TIKEUT +0xBCA8 # HANGUL SYLLABLE PIEUP-E-RIEUL +0xBCB0 # HANGUL SYLLABLE PIEUP-E-MIEUM +0xBCB1 # HANGUL SYLLABLE PIEUP-E-PIEUP +0xBCB3 # HANGUL SYLLABLE PIEUP-E-SIOS +0xBCB4 # HANGUL SYLLABLE PIEUP-E-SSANGSIOS +0xBCB5 # HANGUL SYLLABLE PIEUP-E-IEUNG +0xBCBC # HANGUL SYLLABLE PIEUP-YEO +0xBCBD # HANGUL SYLLABLE PIEUP-YEO-KIYEOK +0xBCC0 # HANGUL SYLLABLE PIEUP-YEO-NIEUN +0xBCC4 # HANGUL SYLLABLE PIEUP-YEO-RIEUL +0xBCCD # HANGUL SYLLABLE PIEUP-YEO-PIEUP +0xBCCF # HANGUL SYLLABLE PIEUP-YEO-SIOS +0xBCD0 # HANGUL SYLLABLE PIEUP-YEO-SSANGSIOS +0xBCD1 # HANGUL SYLLABLE PIEUP-YEO-IEUNG +0xBCD5 # HANGUL SYLLABLE PIEUP-YEO-THIEUTH +0xBCD8 # HANGUL SYLLABLE PIEUP-YE +0xBCDC # HANGUL SYLLABLE PIEUP-YE-NIEUN +0xBCF4 # HANGUL SYLLABLE PIEUP-O +0xBCF5 # HANGUL SYLLABLE PIEUP-O-KIYEOK +0xBCF6 # HANGUL SYLLABLE PIEUP-O-SSANGKIYEOK +0xBCF8 # HANGUL SYLLABLE PIEUP-O-NIEUN +0xBCFC # HANGUL SYLLABLE PIEUP-O-RIEUL +0xBD04 # HANGUL SYLLABLE PIEUP-O-MIEUM +0xBD05 # HANGUL SYLLABLE PIEUP-O-PIEUP +0xBD07 # HANGUL SYLLABLE PIEUP-O-SIOS +0xBD09 # HANGUL SYLLABLE PIEUP-O-IEUNG +0xBD10 # HANGUL SYLLABLE PIEUP-WA +0xBD14 # HANGUL SYLLABLE PIEUP-WA-NIEUN +0xBD24 # HANGUL SYLLABLE PIEUP-WA-SSANGSIOS +0xBD2C # HANGUL SYLLABLE PIEUP-WAE +0xBD40 # HANGUL SYLLABLE PIEUP-WAE-SSANGSIOS +0xBD48 # HANGUL SYLLABLE PIEUP-OE +0xBD49 # HANGUL SYLLABLE PIEUP-OE-KIYEOK +0xBD4C # HANGUL SYLLABLE PIEUP-OE-NIEUN +0xBD50 # HANGUL SYLLABLE PIEUP-OE-RIEUL +0xBD58 # HANGUL SYLLABLE PIEUP-OE-MIEUM +0xBD59 # HANGUL SYLLABLE PIEUP-OE-PIEUP +0xBD64 # HANGUL SYLLABLE PIEUP-YO +0xBD68 # HANGUL SYLLABLE PIEUP-YO-NIEUN +0xBD80 # HANGUL SYLLABLE PIEUP-U +0xBD81 # HANGUL SYLLABLE PIEUP-U-KIYEOK +0xBD84 # HANGUL SYLLABLE PIEUP-U-NIEUN +0xBD87 # HANGUL SYLLABLE PIEUP-U-TIKEUT +0xBD88 # HANGUL SYLLABLE PIEUP-U-RIEUL +0xBD89 # HANGUL SYLLABLE PIEUP-U-RIEULKIYEOK +0xBD8A # HANGUL SYLLABLE PIEUP-U-RIEULMIEUM +0xBD90 # HANGUL SYLLABLE PIEUP-U-MIEUM +0xBD91 # HANGUL SYLLABLE PIEUP-U-PIEUP +0xBD93 # HANGUL SYLLABLE PIEUP-U-SIOS +0xBD95 # HANGUL SYLLABLE PIEUP-U-IEUNG +0xBD99 # HANGUL SYLLABLE PIEUP-U-THIEUTH +0xBD9A # HANGUL SYLLABLE PIEUP-U-PHIEUPH +0xBD9C # HANGUL SYLLABLE PIEUP-WEO +0xBDA4 # HANGUL SYLLABLE PIEUP-WEO-RIEUL +0xBDB0 # HANGUL SYLLABLE PIEUP-WEO-SSANGSIOS +0xBDB8 # HANGUL SYLLABLE PIEUP-WE +0xBDD4 # HANGUL SYLLABLE PIEUP-WI +0xBDD5 # HANGUL SYLLABLE PIEUP-WI-KIYEOK +0xBDD8 # HANGUL SYLLABLE PIEUP-WI-NIEUN +0xBDDC # HANGUL SYLLABLE PIEUP-WI-RIEUL +0xBDE9 # HANGUL SYLLABLE PIEUP-WI-IEUNG +0xBDF0 # HANGUL SYLLABLE PIEUP-YU +0xBDF4 # HANGUL SYLLABLE PIEUP-YU-NIEUN +0xBDF8 # HANGUL SYLLABLE PIEUP-YU-RIEUL +0xBE00 # HANGUL SYLLABLE PIEUP-YU-MIEUM +0xBE03 # HANGUL SYLLABLE PIEUP-YU-SIOS +0xBE05 # HANGUL SYLLABLE PIEUP-YU-IEUNG +0xBE0C # HANGUL SYLLABLE PIEUP-EU +0xBE0D # HANGUL SYLLABLE PIEUP-EU-KIYEOK +0xBE10 # HANGUL SYLLABLE PIEUP-EU-NIEUN +0xBE14 # HANGUL SYLLABLE PIEUP-EU-RIEUL +0xBE1C # HANGUL SYLLABLE PIEUP-EU-MIEUM +0xBE1D # HANGUL SYLLABLE PIEUP-EU-PIEUP +0xBE1F # HANGUL SYLLABLE PIEUP-EU-SIOS +0xBE44 # HANGUL SYLLABLE PIEUP-I +0xBE45 # HANGUL SYLLABLE PIEUP-I-KIYEOK +0xBE48 # HANGUL SYLLABLE PIEUP-I-NIEUN +0xBE4C # HANGUL SYLLABLE PIEUP-I-RIEUL +0xBE4E # HANGUL SYLLABLE PIEUP-I-RIEULMIEUM +0xBE54 # HANGUL SYLLABLE PIEUP-I-MIEUM +0xBE55 # HANGUL SYLLABLE PIEUP-I-PIEUP +0xBE57 # HANGUL SYLLABLE PIEUP-I-SIOS +0xBE59 # HANGUL SYLLABLE PIEUP-I-IEUNG +0xBE5A # HANGUL SYLLABLE PIEUP-I-CIEUC +0xBE5B # HANGUL SYLLABLE PIEUP-I-CHIEUCH +0xBE60 # HANGUL SYLLABLE SSANGPIEUP-A +0xBE61 # HANGUL SYLLABLE SSANGPIEUP-A-KIYEOK +0xBE64 # HANGUL SYLLABLE SSANGPIEUP-A-NIEUN +0xBE68 # HANGUL SYLLABLE SSANGPIEUP-A-RIEUL +0xBE6A # HANGUL SYLLABLE SSANGPIEUP-A-RIEULMIEUM +0xBE70 # HANGUL SYLLABLE SSANGPIEUP-A-MIEUM +0xBE71 # HANGUL SYLLABLE SSANGPIEUP-A-PIEUP +0xBE73 # HANGUL SYLLABLE SSANGPIEUP-A-SIOS +0xBE74 # HANGUL SYLLABLE SSANGPIEUP-A-SSANGSIOS +0xBE75 # HANGUL SYLLABLE SSANGPIEUP-A-IEUNG +0xBE7B # HANGUL SYLLABLE SSANGPIEUP-A-HIEUH +0xBE7C # HANGUL SYLLABLE SSANGPIEUP-AE +0xBE7D # HANGUL SYLLABLE SSANGPIEUP-AE-KIYEOK +0xBE80 # HANGUL SYLLABLE SSANGPIEUP-AE-NIEUN +0xBE84 # HANGUL SYLLABLE SSANGPIEUP-AE-RIEUL +0xBE8C # HANGUL SYLLABLE SSANGPIEUP-AE-MIEUM +0xBE8D # HANGUL SYLLABLE SSANGPIEUP-AE-PIEUP +0xBE8F # HANGUL SYLLABLE SSANGPIEUP-AE-SIOS +0xBE90 # HANGUL SYLLABLE SSANGPIEUP-AE-SSANGSIOS +0xBE91 # HANGUL SYLLABLE SSANGPIEUP-AE-IEUNG +0xBE98 # HANGUL SYLLABLE SSANGPIEUP-YA +0xBE99 # HANGUL SYLLABLE SSANGPIEUP-YA-KIYEOK +0xBEA8 # HANGUL SYLLABLE SSANGPIEUP-YA-MIEUM +0xBED0 # HANGUL SYLLABLE SSANGPIEUP-EO +0xBED1 # HANGUL SYLLABLE SSANGPIEUP-EO-KIYEOK +0xBED4 # HANGUL SYLLABLE SSANGPIEUP-EO-NIEUN +0xBED7 # HANGUL SYLLABLE SSANGPIEUP-EO-TIKEUT +0xBED8 # HANGUL SYLLABLE SSANGPIEUP-EO-RIEUL +0xBEE0 # HANGUL SYLLABLE SSANGPIEUP-EO-MIEUM +0xBEE3 # HANGUL SYLLABLE SSANGPIEUP-EO-SIOS +0xBEE4 # HANGUL SYLLABLE SSANGPIEUP-EO-SSANGSIOS +0xBEE5 # HANGUL SYLLABLE SSANGPIEUP-EO-IEUNG +0xBEEC # HANGUL SYLLABLE SSANGPIEUP-E +0xBF01 # HANGUL SYLLABLE SSANGPIEUP-E-IEUNG +0xBF08 # HANGUL SYLLABLE SSANGPIEUP-YEO +0xBF09 # HANGUL SYLLABLE SSANGPIEUP-YEO-KIYEOK +0xBF18 # HANGUL SYLLABLE SSANGPIEUP-YEO-MIEUM +0xBF19 # HANGUL SYLLABLE SSANGPIEUP-YEO-PIEUP +0xBF1B # HANGUL SYLLABLE SSANGPIEUP-YEO-SIOS +0xBF1C # HANGUL SYLLABLE SSANGPIEUP-YEO-SSANGSIOS +0xBF1D # HANGUL SYLLABLE SSANGPIEUP-YEO-IEUNG +0xBF40 # HANGUL SYLLABLE SSANGPIEUP-O +0xBF41 # HANGUL SYLLABLE SSANGPIEUP-O-KIYEOK +0xBF44 # HANGUL SYLLABLE SSANGPIEUP-O-NIEUN +0xBF48 # HANGUL SYLLABLE SSANGPIEUP-O-RIEUL +0xBF50 # HANGUL SYLLABLE SSANGPIEUP-O-MIEUM +0xBF51 # HANGUL SYLLABLE SSANGPIEUP-O-PIEUP +0xBF55 # HANGUL SYLLABLE SSANGPIEUP-O-IEUNG +0xBF94 # HANGUL SYLLABLE SSANGPIEUP-OE +0xBFB0 # HANGUL SYLLABLE SSANGPIEUP-YO +0xBFC5 # HANGUL SYLLABLE SSANGPIEUP-YO-IEUNG +0xBFCC # HANGUL SYLLABLE SSANGPIEUP-U +0xBFCD # HANGUL SYLLABLE SSANGPIEUP-U-KIYEOK +0xBFD0 # HANGUL SYLLABLE SSANGPIEUP-U-NIEUN +0xBFD4 # HANGUL SYLLABLE SSANGPIEUP-U-RIEUL +0xBFDC # HANGUL SYLLABLE SSANGPIEUP-U-MIEUM +0xBFDF # HANGUL SYLLABLE SSANGPIEUP-U-SIOS +0xBFE1 # HANGUL SYLLABLE SSANGPIEUP-U-IEUNG +0xC03C # HANGUL SYLLABLE SSANGPIEUP-YU +0xC051 # HANGUL SYLLABLE SSANGPIEUP-YU-IEUNG +0xC058 # HANGUL SYLLABLE SSANGPIEUP-EU +0xC05C # HANGUL SYLLABLE SSANGPIEUP-EU-NIEUN +0xC060 # HANGUL SYLLABLE SSANGPIEUP-EU-RIEUL +0xC068 # HANGUL SYLLABLE SSANGPIEUP-EU-MIEUM +0xC069 # HANGUL SYLLABLE SSANGPIEUP-EU-PIEUP +0xC090 # HANGUL SYLLABLE SSANGPIEUP-I +0xC091 # HANGUL SYLLABLE SSANGPIEUP-I-KIYEOK +0xC094 # HANGUL SYLLABLE SSANGPIEUP-I-NIEUN +0xC098 # HANGUL SYLLABLE SSANGPIEUP-I-RIEUL +0xC0A0 # HANGUL SYLLABLE SSANGPIEUP-I-MIEUM +0xC0A1 # HANGUL SYLLABLE SSANGPIEUP-I-PIEUP +0xC0A3 # HANGUL SYLLABLE SSANGPIEUP-I-SIOS +0xC0A5 # HANGUL SYLLABLE SSANGPIEUP-I-IEUNG +0xC0AC # HANGUL SYLLABLE SIOS-A +0xC0AD # HANGUL SYLLABLE SIOS-A-KIYEOK +0xC0AF # HANGUL SYLLABLE SIOS-A-KIYEOKSIOS +0xC0B0 # HANGUL SYLLABLE SIOS-A-NIEUN +0xC0B3 # HANGUL SYLLABLE SIOS-A-TIKEUT +0xC0B4 # HANGUL SYLLABLE SIOS-A-RIEUL +0xC0B5 # HANGUL SYLLABLE SIOS-A-RIEULKIYEOK +0xC0B6 # HANGUL SYLLABLE SIOS-A-RIEULMIEUM +0xC0BC # HANGUL SYLLABLE SIOS-A-MIEUM +0xC0BD # HANGUL SYLLABLE SIOS-A-PIEUP +0xC0BF # HANGUL SYLLABLE SIOS-A-SIOS +0xC0C0 # HANGUL SYLLABLE SIOS-A-SSANGSIOS +0xC0C1 # HANGUL SYLLABLE SIOS-A-IEUNG +0xC0C5 # HANGUL SYLLABLE SIOS-A-THIEUTH +0xC0C8 # HANGUL SYLLABLE SIOS-AE +0xC0C9 # HANGUL SYLLABLE SIOS-AE-KIYEOK +0xC0CC # HANGUL SYLLABLE SIOS-AE-NIEUN +0xC0D0 # HANGUL SYLLABLE SIOS-AE-RIEUL +0xC0D8 # HANGUL SYLLABLE SIOS-AE-MIEUM +0xC0D9 # HANGUL SYLLABLE SIOS-AE-PIEUP +0xC0DB # HANGUL SYLLABLE SIOS-AE-SIOS +0xC0DC # HANGUL SYLLABLE SIOS-AE-SSANGSIOS +0xC0DD # HANGUL SYLLABLE SIOS-AE-IEUNG +0xC0E4 # HANGUL SYLLABLE SIOS-YA +0xC0E5 # HANGUL SYLLABLE SIOS-YA-KIYEOK +0xC0E8 # HANGUL SYLLABLE SIOS-YA-NIEUN +0xC0EC # HANGUL SYLLABLE SIOS-YA-RIEUL +0xC0F4 # HANGUL SYLLABLE SIOS-YA-MIEUM +0xC0F5 # HANGUL SYLLABLE SIOS-YA-PIEUP +0xC0F7 # HANGUL SYLLABLE SIOS-YA-SIOS +0xC0F9 # HANGUL SYLLABLE SIOS-YA-IEUNG +0xC100 # HANGUL SYLLABLE SIOS-YAE +0xC104 # HANGUL SYLLABLE SIOS-YAE-NIEUN +0xC108 # HANGUL SYLLABLE SIOS-YAE-RIEUL +0xC110 # HANGUL SYLLABLE SIOS-YAE-MIEUM +0xC115 # HANGUL SYLLABLE SIOS-YAE-IEUNG +0xC11C # HANGUL SYLLABLE SIOS-EO +0xC11D # HANGUL SYLLABLE SIOS-EO-KIYEOK +0xC11E # HANGUL SYLLABLE SIOS-EO-SSANGKIYEOK +0xC11F # HANGUL SYLLABLE SIOS-EO-KIYEOKSIOS +0xC120 # HANGUL SYLLABLE SIOS-EO-NIEUN +0xC123 # HANGUL SYLLABLE SIOS-EO-TIKEUT +0xC124 # HANGUL SYLLABLE SIOS-EO-RIEUL +0xC126 # HANGUL SYLLABLE SIOS-EO-RIEULMIEUM +0xC127 # HANGUL SYLLABLE SIOS-EO-RIEULPIEUP +0xC12C # HANGUL SYLLABLE SIOS-EO-MIEUM +0xC12D # HANGUL SYLLABLE SIOS-EO-PIEUP +0xC12F # HANGUL SYLLABLE SIOS-EO-SIOS +0xC130 # HANGUL SYLLABLE SIOS-EO-SSANGSIOS +0xC131 # HANGUL SYLLABLE SIOS-EO-IEUNG +0xC136 # HANGUL SYLLABLE SIOS-EO-PHIEUPH +0xC138 # HANGUL SYLLABLE SIOS-E +0xC139 # HANGUL SYLLABLE SIOS-E-KIYEOK +0xC13C # HANGUL SYLLABLE SIOS-E-NIEUN +0xC140 # HANGUL SYLLABLE SIOS-E-RIEUL +0xC148 # HANGUL SYLLABLE SIOS-E-MIEUM +0xC149 # HANGUL SYLLABLE SIOS-E-PIEUP +0xC14B # HANGUL SYLLABLE SIOS-E-SIOS +0xC14C # HANGUL SYLLABLE SIOS-E-SSANGSIOS +0xC14D # HANGUL SYLLABLE SIOS-E-IEUNG +0xC154 # HANGUL SYLLABLE SIOS-YEO +0xC155 # HANGUL SYLLABLE SIOS-YEO-KIYEOK +0xC158 # HANGUL SYLLABLE SIOS-YEO-NIEUN +0xC15C # HANGUL SYLLABLE SIOS-YEO-RIEUL +0xC164 # HANGUL SYLLABLE SIOS-YEO-MIEUM +0xC165 # HANGUL SYLLABLE SIOS-YEO-PIEUP +0xC167 # HANGUL SYLLABLE SIOS-YEO-SIOS +0xC168 # HANGUL SYLLABLE SIOS-YEO-SSANGSIOS +0xC169 # HANGUL SYLLABLE SIOS-YEO-IEUNG +0xC170 # HANGUL SYLLABLE SIOS-YE +0xC174 # HANGUL SYLLABLE SIOS-YE-NIEUN +0xC178 # HANGUL SYLLABLE SIOS-YE-RIEUL +0xC185 # HANGUL SYLLABLE SIOS-YE-IEUNG +0xC18C # HANGUL SYLLABLE SIOS-O +0xC18D # HANGUL SYLLABLE SIOS-O-KIYEOK +0xC18E # HANGUL SYLLABLE SIOS-O-SSANGKIYEOK +0xC190 # HANGUL SYLLABLE SIOS-O-NIEUN +0xC194 # HANGUL SYLLABLE SIOS-O-RIEUL +0xC196 # HANGUL SYLLABLE SIOS-O-RIEULMIEUM +0xC19C # HANGUL SYLLABLE SIOS-O-MIEUM +0xC19D # HANGUL SYLLABLE SIOS-O-PIEUP +0xC19F # HANGUL SYLLABLE SIOS-O-SIOS +0xC1A1 # HANGUL SYLLABLE SIOS-O-IEUNG +0xC1A5 # HANGUL SYLLABLE SIOS-O-THIEUTH +0xC1A8 # HANGUL SYLLABLE SIOS-WA +0xC1A9 # HANGUL SYLLABLE SIOS-WA-KIYEOK +0xC1AC # HANGUL SYLLABLE SIOS-WA-NIEUN +0xC1B0 # HANGUL SYLLABLE SIOS-WA-RIEUL +0xC1BD # HANGUL SYLLABLE SIOS-WA-IEUNG +0xC1C4 # HANGUL SYLLABLE SIOS-WAE +0xC1C8 # HANGUL SYLLABLE SIOS-WAE-NIEUN +0xC1CC # HANGUL SYLLABLE SIOS-WAE-RIEUL +0xC1D4 # HANGUL SYLLABLE SIOS-WAE-MIEUM +0xC1D7 # HANGUL SYLLABLE SIOS-WAE-SIOS +0xC1D8 # HANGUL SYLLABLE SIOS-WAE-SSANGSIOS +0xC1E0 # HANGUL SYLLABLE SIOS-OE +0xC1E4 # HANGUL SYLLABLE SIOS-OE-NIEUN +0xC1E8 # HANGUL SYLLABLE SIOS-OE-RIEUL +0xC1F0 # HANGUL SYLLABLE SIOS-OE-MIEUM +0xC1F1 # HANGUL SYLLABLE SIOS-OE-PIEUP +0xC1F3 # HANGUL SYLLABLE SIOS-OE-SIOS +0xC1FC # HANGUL SYLLABLE SIOS-YO +0xC1FD # HANGUL SYLLABLE SIOS-YO-KIYEOK +0xC200 # HANGUL SYLLABLE SIOS-YO-NIEUN +0xC204 # HANGUL SYLLABLE SIOS-YO-RIEUL +0xC20C # HANGUL SYLLABLE SIOS-YO-MIEUM +0xC20D # HANGUL SYLLABLE SIOS-YO-PIEUP +0xC20F # HANGUL SYLLABLE SIOS-YO-SIOS +0xC211 # HANGUL SYLLABLE SIOS-YO-IEUNG +0xC218 # HANGUL SYLLABLE SIOS-U +0xC219 # HANGUL SYLLABLE SIOS-U-KIYEOK +0xC21C # HANGUL SYLLABLE SIOS-U-NIEUN +0xC21F # HANGUL SYLLABLE SIOS-U-TIKEUT +0xC220 # HANGUL SYLLABLE SIOS-U-RIEUL +0xC228 # HANGUL SYLLABLE SIOS-U-MIEUM +0xC229 # HANGUL SYLLABLE SIOS-U-PIEUP +0xC22B # HANGUL SYLLABLE SIOS-U-SIOS +0xC22D # HANGUL SYLLABLE SIOS-U-IEUNG +0xC22F # HANGUL SYLLABLE SIOS-U-CHIEUCH +0xC231 # HANGUL SYLLABLE SIOS-U-THIEUTH +0xC232 # HANGUL SYLLABLE SIOS-U-PHIEUPH +0xC234 # HANGUL SYLLABLE SIOS-WEO +0xC248 # HANGUL SYLLABLE SIOS-WEO-SSANGSIOS +0xC250 # HANGUL SYLLABLE SIOS-WE +0xC251 # HANGUL SYLLABLE SIOS-WE-KIYEOK +0xC254 # HANGUL SYLLABLE SIOS-WE-NIEUN +0xC258 # HANGUL SYLLABLE SIOS-WE-RIEUL +0xC260 # HANGUL SYLLABLE SIOS-WE-MIEUM +0xC265 # HANGUL SYLLABLE SIOS-WE-IEUNG +0xC26C # HANGUL SYLLABLE SIOS-WI +0xC26D # HANGUL SYLLABLE SIOS-WI-KIYEOK +0xC270 # HANGUL SYLLABLE SIOS-WI-NIEUN +0xC274 # HANGUL SYLLABLE SIOS-WI-RIEUL +0xC27C # HANGUL SYLLABLE SIOS-WI-MIEUM +0xC27D # HANGUL SYLLABLE SIOS-WI-PIEUP +0xC27F # HANGUL SYLLABLE SIOS-WI-SIOS +0xC281 # HANGUL SYLLABLE SIOS-WI-IEUNG +0xC288 # HANGUL SYLLABLE SIOS-YU +0xC289 # HANGUL SYLLABLE SIOS-YU-KIYEOK +0xC290 # HANGUL SYLLABLE SIOS-YU-RIEUL +0xC298 # HANGUL SYLLABLE SIOS-YU-MIEUM +0xC29B # HANGUL SYLLABLE SIOS-YU-SIOS +0xC29D # HANGUL SYLLABLE SIOS-YU-IEUNG +0xC2A4 # HANGUL SYLLABLE SIOS-EU +0xC2A5 # HANGUL SYLLABLE SIOS-EU-KIYEOK +0xC2A8 # HANGUL SYLLABLE SIOS-EU-NIEUN +0xC2AC # HANGUL SYLLABLE SIOS-EU-RIEUL +0xC2AD # HANGUL SYLLABLE SIOS-EU-RIEULKIYEOK +0xC2B4 # HANGUL SYLLABLE SIOS-EU-MIEUM +0xC2B5 # HANGUL SYLLABLE SIOS-EU-PIEUP +0xC2B7 # HANGUL SYLLABLE SIOS-EU-SIOS +0xC2B9 # HANGUL SYLLABLE SIOS-EU-IEUNG +0xC2DC # HANGUL SYLLABLE SIOS-I +0xC2DD # HANGUL SYLLABLE SIOS-I-KIYEOK +0xC2E0 # HANGUL SYLLABLE SIOS-I-NIEUN +0xC2E3 # HANGUL SYLLABLE SIOS-I-TIKEUT +0xC2E4 # HANGUL SYLLABLE SIOS-I-RIEUL +0xC2EB # HANGUL SYLLABLE SIOS-I-RIEULHIEUH +0xC2EC # HANGUL SYLLABLE SIOS-I-MIEUM +0xC2ED # HANGUL SYLLABLE SIOS-I-PIEUP +0xC2EF # HANGUL SYLLABLE SIOS-I-SIOS +0xC2F1 # HANGUL SYLLABLE SIOS-I-IEUNG +0xC2F6 # HANGUL SYLLABLE SIOS-I-PHIEUPH +0xC2F8 # HANGUL SYLLABLE SSANGSIOS-A +0xC2F9 # HANGUL SYLLABLE SSANGSIOS-A-KIYEOK +0xC2FB # HANGUL SYLLABLE SSANGSIOS-A-KIYEOKSIOS +0xC2FC # HANGUL SYLLABLE SSANGSIOS-A-NIEUN +0xC300 # HANGUL SYLLABLE SSANGSIOS-A-RIEUL +0xC308 # HANGUL SYLLABLE SSANGSIOS-A-MIEUM +0xC309 # HANGUL SYLLABLE SSANGSIOS-A-PIEUP +0xC30C # HANGUL SYLLABLE SSANGSIOS-A-SSANGSIOS +0xC30D # HANGUL SYLLABLE SSANGSIOS-A-IEUNG +0xC313 # HANGUL SYLLABLE SSANGSIOS-A-HIEUH +0xC314 # HANGUL SYLLABLE SSANGSIOS-AE +0xC315 # HANGUL SYLLABLE SSANGSIOS-AE-KIYEOK +0xC318 # HANGUL SYLLABLE SSANGSIOS-AE-NIEUN +0xC31C # HANGUL SYLLABLE SSANGSIOS-AE-RIEUL +0xC324 # HANGUL SYLLABLE SSANGSIOS-AE-MIEUM +0xC325 # HANGUL SYLLABLE SSANGSIOS-AE-PIEUP +0xC328 # HANGUL SYLLABLE SSANGSIOS-AE-SSANGSIOS +0xC329 # HANGUL SYLLABLE SSANGSIOS-AE-IEUNG +0xC345 # HANGUL SYLLABLE SSANGSIOS-YA-IEUNG +0xC368 # HANGUL SYLLABLE SSANGSIOS-EO +0xC369 # HANGUL SYLLABLE SSANGSIOS-EO-KIYEOK +0xC36C # HANGUL SYLLABLE SSANGSIOS-EO-NIEUN +0xC370 # HANGUL SYLLABLE SSANGSIOS-EO-RIEUL +0xC372 # HANGUL SYLLABLE SSANGSIOS-EO-RIEULMIEUM +0xC378 # HANGUL SYLLABLE SSANGSIOS-EO-MIEUM +0xC379 # HANGUL SYLLABLE SSANGSIOS-EO-PIEUP +0xC37C # HANGUL SYLLABLE SSANGSIOS-EO-SSANGSIOS +0xC37D # HANGUL SYLLABLE SSANGSIOS-EO-IEUNG +0xC384 # HANGUL SYLLABLE SSANGSIOS-E +0xC388 # HANGUL SYLLABLE SSANGSIOS-E-NIEUN +0xC38C # HANGUL SYLLABLE SSANGSIOS-E-RIEUL +# 0xC3C0 # HANGUL SYLLABLE SSANGSIOS-YE-NIEUN # (dotum.ttf, hline.ttf) +0xC3D8 # HANGUL SYLLABLE SSANGSIOS-O +0xC3D9 # HANGUL SYLLABLE SSANGSIOS-O-KIYEOK +0xC3DC # HANGUL SYLLABLE SSANGSIOS-O-NIEUN +0xC3DF # HANGUL SYLLABLE SSANGSIOS-O-TIKEUT +0xC3E0 # HANGUL SYLLABLE SSANGSIOS-O-RIEUL +0xC3E2 # HANGUL SYLLABLE SSANGSIOS-O-RIEULMIEUM +0xC3E8 # HANGUL SYLLABLE SSANGSIOS-O-MIEUM +0xC3E9 # HANGUL SYLLABLE SSANGSIOS-O-PIEUP +0xC3ED # HANGUL SYLLABLE SSANGSIOS-O-IEUNG +0xC3F4 # HANGUL SYLLABLE SSANGSIOS-WA +0xC3F5 # HANGUL SYLLABLE SSANGSIOS-WA-KIYEOK +0xC3F8 # HANGUL SYLLABLE SSANGSIOS-WA-NIEUN +0xC408 # HANGUL SYLLABLE SSANGSIOS-WA-SSANGSIOS +0xC410 # HANGUL SYLLABLE SSANGSIOS-WAE +0xC424 # HANGUL SYLLABLE SSANGSIOS-WAE-SSANGSIOS +0xC42C # HANGUL SYLLABLE SSANGSIOS-OE +0xC430 # HANGUL SYLLABLE SSANGSIOS-OE-NIEUN +0xC434 # HANGUL SYLLABLE SSANGSIOS-OE-RIEUL +0xC43C # HANGUL SYLLABLE SSANGSIOS-OE-MIEUM +0xC43D # HANGUL SYLLABLE SSANGSIOS-OE-PIEUP +0xC448 # HANGUL SYLLABLE SSANGSIOS-YO +0xC464 # HANGUL SYLLABLE SSANGSIOS-U +0xC465 # HANGUL SYLLABLE SSANGSIOS-U-KIYEOK +0xC468 # HANGUL SYLLABLE SSANGSIOS-U-NIEUN +0xC46C # HANGUL SYLLABLE SSANGSIOS-U-RIEUL +0xC474 # HANGUL SYLLABLE SSANGSIOS-U-MIEUM +0xC475 # HANGUL SYLLABLE SSANGSIOS-U-PIEUP +0xC479 # HANGUL SYLLABLE SSANGSIOS-U-IEUNG +0xC480 # HANGUL SYLLABLE SSANGSIOS-WEO +0xC494 # HANGUL SYLLABLE SSANGSIOS-WEO-SSANGSIOS +0xC49C # HANGUL SYLLABLE SSANGSIOS-WE +0xC4B8 # HANGUL SYLLABLE SSANGSIOS-WI +0xC4BC # HANGUL SYLLABLE SSANGSIOS-WI-NIEUN +0xC4E9 # HANGUL SYLLABLE SSANGSIOS-YU-IEUNG +0xC4F0 # HANGUL SYLLABLE SSANGSIOS-EU +0xC4F1 # HANGUL SYLLABLE SSANGSIOS-EU-KIYEOK +0xC4F4 # HANGUL SYLLABLE SSANGSIOS-EU-NIEUN +0xC4F8 # HANGUL SYLLABLE SSANGSIOS-EU-RIEUL +0xC4FA # HANGUL SYLLABLE SSANGSIOS-EU-RIEULMIEUM +0xC4FF # HANGUL SYLLABLE SSANGSIOS-EU-RIEULHIEUH +0xC500 # HANGUL SYLLABLE SSANGSIOS-EU-MIEUM +0xC501 # HANGUL SYLLABLE SSANGSIOS-EU-PIEUP +0xC50C # HANGUL SYLLABLE SSANGSIOS-YI +0xC510 # HANGUL SYLLABLE SSANGSIOS-YI-NIEUN +0xC514 # HANGUL SYLLABLE SSANGSIOS-YI-RIEUL +0xC51C # HANGUL SYLLABLE SSANGSIOS-YI-MIEUM +0xC528 # HANGUL SYLLABLE SSANGSIOS-I +0xC529 # HANGUL SYLLABLE SSANGSIOS-I-KIYEOK +0xC52C # HANGUL SYLLABLE SSANGSIOS-I-NIEUN +0xC530 # HANGUL SYLLABLE SSANGSIOS-I-RIEUL +0xC538 # HANGUL SYLLABLE SSANGSIOS-I-MIEUM +0xC539 # HANGUL SYLLABLE SSANGSIOS-I-PIEUP +0xC53B # HANGUL SYLLABLE SSANGSIOS-I-SIOS +0xC53D # HANGUL SYLLABLE SSANGSIOS-I-IEUNG +0xC544 # HANGUL SYLLABLE IEUNG-A +0xC545 # HANGUL SYLLABLE IEUNG-A-KIYEOK +0xC548 # HANGUL SYLLABLE IEUNG-A-NIEUN +0xC549 # HANGUL SYLLABLE IEUNG-A-NIEUNCIEUC +0xC54A # HANGUL SYLLABLE IEUNG-A-NIEUNHIEUH +0xC54C # HANGUL SYLLABLE IEUNG-A-RIEUL +0xC54D # HANGUL SYLLABLE IEUNG-A-RIEULKIYEOK +0xC54E # HANGUL SYLLABLE IEUNG-A-RIEULMIEUM +0xC553 # HANGUL SYLLABLE IEUNG-A-RIEULHIEUH +0xC554 # HANGUL SYLLABLE IEUNG-A-MIEUM +0xC555 # HANGUL SYLLABLE IEUNG-A-PIEUP +0xC557 # HANGUL SYLLABLE IEUNG-A-SIOS +0xC558 # HANGUL SYLLABLE IEUNG-A-SSANGSIOS +0xC559 # HANGUL SYLLABLE IEUNG-A-IEUNG +0xC55D # HANGUL SYLLABLE IEUNG-A-THIEUTH +0xC55E # HANGUL SYLLABLE IEUNG-A-PHIEUPH +0xC560 # HANGUL SYLLABLE IEUNG-AE +0xC561 # HANGUL SYLLABLE IEUNG-AE-KIYEOK +0xC564 # HANGUL SYLLABLE IEUNG-AE-NIEUN +0xC568 # HANGUL SYLLABLE IEUNG-AE-RIEUL +0xC570 # HANGUL SYLLABLE IEUNG-AE-MIEUM +0xC571 # HANGUL SYLLABLE IEUNG-AE-PIEUP +0xC573 # HANGUL SYLLABLE IEUNG-AE-SIOS +0xC574 # HANGUL SYLLABLE IEUNG-AE-SSANGSIOS +0xC575 # HANGUL SYLLABLE IEUNG-AE-IEUNG +0xC57C # HANGUL SYLLABLE IEUNG-YA +0xC57D # HANGUL SYLLABLE IEUNG-YA-KIYEOK +0xC580 # HANGUL SYLLABLE IEUNG-YA-NIEUN +0xC584 # HANGUL SYLLABLE IEUNG-YA-RIEUL +0xC587 # HANGUL SYLLABLE IEUNG-YA-RIEULPIEUP +0xC58C # HANGUL SYLLABLE IEUNG-YA-MIEUM +0xC58D # HANGUL SYLLABLE IEUNG-YA-PIEUP +0xC58F # HANGUL SYLLABLE IEUNG-YA-SIOS +0xC591 # HANGUL SYLLABLE IEUNG-YA-IEUNG +0xC595 # HANGUL SYLLABLE IEUNG-YA-THIEUTH +0xC597 # HANGUL SYLLABLE IEUNG-YA-HIEUH +0xC598 # HANGUL SYLLABLE IEUNG-YAE +0xC59C # HANGUL SYLLABLE IEUNG-YAE-NIEUN +0xC5A0 # HANGUL SYLLABLE IEUNG-YAE-RIEUL +0xC5A9 # HANGUL SYLLABLE IEUNG-YAE-PIEUP +0xC5B4 # HANGUL SYLLABLE IEUNG-EO +0xC5B5 # HANGUL SYLLABLE IEUNG-EO-KIYEOK +0xC5B8 # HANGUL SYLLABLE IEUNG-EO-NIEUN +0xC5B9 # HANGUL SYLLABLE IEUNG-EO-NIEUNCIEUC +0xC5BB # HANGUL SYLLABLE IEUNG-EO-TIKEUT +0xC5BC # HANGUL SYLLABLE IEUNG-EO-RIEUL +0xC5BD # HANGUL SYLLABLE IEUNG-EO-RIEULKIYEOK +0xC5BE # HANGUL SYLLABLE IEUNG-EO-RIEULMIEUM +0xC5C4 # HANGUL SYLLABLE IEUNG-EO-MIEUM +0xC5C5 # HANGUL SYLLABLE IEUNG-EO-PIEUP +0xC5C6 # HANGUL SYLLABLE IEUNG-EO-PIEUPSIOS +0xC5C7 # HANGUL SYLLABLE IEUNG-EO-SIOS +0xC5C8 # HANGUL SYLLABLE IEUNG-EO-SSANGSIOS +0xC5C9 # HANGUL SYLLABLE IEUNG-EO-IEUNG +0xC5CA # HANGUL SYLLABLE IEUNG-EO-CIEUC +0xC5CC # HANGUL SYLLABLE IEUNG-EO-KHIEUKH +0xC5CE # HANGUL SYLLABLE IEUNG-EO-PHIEUPH +0xC5D0 # HANGUL SYLLABLE IEUNG-E +0xC5D1 # HANGUL SYLLABLE IEUNG-E-KIYEOK +0xC5D4 # HANGUL SYLLABLE IEUNG-E-NIEUN +0xC5D8 # HANGUL SYLLABLE IEUNG-E-RIEUL +0xC5E0 # HANGUL SYLLABLE IEUNG-E-MIEUM +0xC5E1 # HANGUL SYLLABLE IEUNG-E-PIEUP +0xC5E3 # HANGUL SYLLABLE IEUNG-E-SIOS +0xC5E5 # HANGUL SYLLABLE IEUNG-E-IEUNG +0xC5EC # HANGUL SYLLABLE IEUNG-YEO +0xC5ED # HANGUL SYLLABLE IEUNG-YEO-KIYEOK +0xC5EE # HANGUL SYLLABLE IEUNG-YEO-SSANGKIYEOK +0xC5F0 # HANGUL SYLLABLE IEUNG-YEO-NIEUN +0xC5F4 # HANGUL SYLLABLE IEUNG-YEO-RIEUL +0xC5F6 # HANGUL SYLLABLE IEUNG-YEO-RIEULMIEUM +0xC5F7 # HANGUL SYLLABLE IEUNG-YEO-RIEULPIEUP +0xC5FC # HANGUL SYLLABLE IEUNG-YEO-MIEUM +0xC5FD # HANGUL SYLLABLE IEUNG-YEO-PIEUP +0xC5FE # HANGUL SYLLABLE IEUNG-YEO-PIEUPSIOS +0xC5FF # HANGUL SYLLABLE IEUNG-YEO-SIOS +0xC600 # HANGUL SYLLABLE IEUNG-YEO-SSANGSIOS +0xC601 # HANGUL SYLLABLE IEUNG-YEO-IEUNG +0xC605 # HANGUL SYLLABLE IEUNG-YEO-THIEUTH +0xC606 # HANGUL SYLLABLE IEUNG-YEO-PHIEUPH +0xC607 # HANGUL SYLLABLE IEUNG-YEO-HIEUH +0xC608 # HANGUL SYLLABLE IEUNG-YE +0xC60C # HANGUL SYLLABLE IEUNG-YE-NIEUN +0xC610 # HANGUL SYLLABLE IEUNG-YE-RIEUL +0xC618 # HANGUL SYLLABLE IEUNG-YE-MIEUM +0xC619 # HANGUL SYLLABLE IEUNG-YE-PIEUP +0xC61B # HANGUL SYLLABLE IEUNG-YE-SIOS +0xC61C # HANGUL SYLLABLE IEUNG-YE-SSANGSIOS +0xC624 # HANGUL SYLLABLE IEUNG-O +0xC625 # HANGUL SYLLABLE IEUNG-O-KIYEOK +0xC628 # HANGUL SYLLABLE IEUNG-O-NIEUN +0xC62C # HANGUL SYLLABLE IEUNG-O-RIEUL +0xC62D # HANGUL SYLLABLE IEUNG-O-RIEULKIYEOK +0xC62E # HANGUL SYLLABLE IEUNG-O-RIEULMIEUM +0xC630 # HANGUL SYLLABLE IEUNG-O-RIEULSIOS +0xC633 # HANGUL SYLLABLE IEUNG-O-RIEULHIEUH +0xC634 # HANGUL SYLLABLE IEUNG-O-MIEUM +0xC635 # HANGUL SYLLABLE IEUNG-O-PIEUP +0xC637 # HANGUL SYLLABLE IEUNG-O-SIOS +0xC639 # HANGUL SYLLABLE IEUNG-O-IEUNG +0xC63B # HANGUL SYLLABLE IEUNG-O-CHIEUCH +0xC640 # HANGUL SYLLABLE IEUNG-WA +0xC641 # HANGUL SYLLABLE IEUNG-WA-KIYEOK +0xC644 # HANGUL SYLLABLE IEUNG-WA-NIEUN +0xC648 # HANGUL SYLLABLE IEUNG-WA-RIEUL +0xC650 # HANGUL SYLLABLE IEUNG-WA-MIEUM +0xC651 # HANGUL SYLLABLE IEUNG-WA-PIEUP +0xC653 # HANGUL SYLLABLE IEUNG-WA-SIOS +0xC654 # HANGUL SYLLABLE IEUNG-WA-SSANGSIOS +0xC655 # HANGUL SYLLABLE IEUNG-WA-IEUNG +0xC65C # HANGUL SYLLABLE IEUNG-WAE +0xC65D # HANGUL SYLLABLE IEUNG-WAE-KIYEOK +0xC660 # HANGUL SYLLABLE IEUNG-WAE-NIEUN +0xC66C # HANGUL SYLLABLE IEUNG-WAE-MIEUM +0xC66F # HANGUL SYLLABLE IEUNG-WAE-SIOS +0xC671 # HANGUL SYLLABLE IEUNG-WAE-IEUNG +0xC678 # HANGUL SYLLABLE IEUNG-OE +0xC679 # HANGUL SYLLABLE IEUNG-OE-KIYEOK +0xC67C # HANGUL SYLLABLE IEUNG-OE-NIEUN +0xC680 # HANGUL SYLLABLE IEUNG-OE-RIEUL +0xC688 # HANGUL SYLLABLE IEUNG-OE-MIEUM +0xC689 # HANGUL SYLLABLE IEUNG-OE-PIEUP +0xC68B # HANGUL SYLLABLE IEUNG-OE-SIOS +0xC68D # HANGUL SYLLABLE IEUNG-OE-IEUNG +0xC694 # HANGUL SYLLABLE IEUNG-YO +0xC695 # HANGUL SYLLABLE IEUNG-YO-KIYEOK +0xC698 # HANGUL SYLLABLE IEUNG-YO-NIEUN +0xC69C # HANGUL SYLLABLE IEUNG-YO-RIEUL +0xC6A4 # HANGUL SYLLABLE IEUNG-YO-MIEUM +0xC6A5 # HANGUL SYLLABLE IEUNG-YO-PIEUP +0xC6A7 # HANGUL SYLLABLE IEUNG-YO-SIOS +0xC6A9 # HANGUL SYLLABLE IEUNG-YO-IEUNG +0xC6B0 # HANGUL SYLLABLE IEUNG-U +0xC6B1 # HANGUL SYLLABLE IEUNG-U-KIYEOK +0xC6B4 # HANGUL SYLLABLE IEUNG-U-NIEUN +0xC6B8 # HANGUL SYLLABLE IEUNG-U-RIEUL +0xC6B9 # HANGUL SYLLABLE IEUNG-U-RIEULKIYEOK +0xC6BA # HANGUL SYLLABLE IEUNG-U-RIEULMIEUM +0xC6C0 # HANGUL SYLLABLE IEUNG-U-MIEUM +0xC6C1 # HANGUL SYLLABLE IEUNG-U-PIEUP +0xC6C3 # HANGUL SYLLABLE IEUNG-U-SIOS +0xC6C5 # HANGUL SYLLABLE IEUNG-U-IEUNG +0xC6CC # HANGUL SYLLABLE IEUNG-WEO +0xC6CD # HANGUL SYLLABLE IEUNG-WEO-KIYEOK +0xC6D0 # HANGUL SYLLABLE IEUNG-WEO-NIEUN +0xC6D4 # HANGUL SYLLABLE IEUNG-WEO-RIEUL +0xC6DC # HANGUL SYLLABLE IEUNG-WEO-MIEUM +0xC6DD # HANGUL SYLLABLE IEUNG-WEO-PIEUP +0xC6E0 # HANGUL SYLLABLE IEUNG-WEO-SSANGSIOS +0xC6E1 # HANGUL SYLLABLE IEUNG-WEO-IEUNG +0xC6E8 # HANGUL SYLLABLE IEUNG-WE +0xC6E9 # HANGUL SYLLABLE IEUNG-WE-KIYEOK +0xC6EC # HANGUL SYLLABLE IEUNG-WE-NIEUN +0xC6F0 # HANGUL SYLLABLE IEUNG-WE-RIEUL +0xC6F8 # HANGUL SYLLABLE IEUNG-WE-MIEUM +0xC6F9 # HANGUL SYLLABLE IEUNG-WE-PIEUP +0xC6FD # HANGUL SYLLABLE IEUNG-WE-IEUNG +0xC704 # HANGUL SYLLABLE IEUNG-WI +0xC705 # HANGUL SYLLABLE IEUNG-WI-KIYEOK +0xC708 # HANGUL SYLLABLE IEUNG-WI-NIEUN +0xC70C # HANGUL SYLLABLE IEUNG-WI-RIEUL +0xC714 # HANGUL SYLLABLE IEUNG-WI-MIEUM +0xC715 # HANGUL SYLLABLE IEUNG-WI-PIEUP +0xC717 # HANGUL SYLLABLE IEUNG-WI-SIOS +0xC719 # HANGUL SYLLABLE IEUNG-WI-IEUNG +0xC720 # HANGUL SYLLABLE IEUNG-YU +0xC721 # HANGUL SYLLABLE IEUNG-YU-KIYEOK +0xC724 # HANGUL SYLLABLE IEUNG-YU-NIEUN +0xC728 # HANGUL SYLLABLE IEUNG-YU-RIEUL +0xC730 # HANGUL SYLLABLE IEUNG-YU-MIEUM +0xC731 # HANGUL SYLLABLE IEUNG-YU-PIEUP +0xC733 # HANGUL SYLLABLE IEUNG-YU-SIOS +0xC735 # HANGUL SYLLABLE IEUNG-YU-IEUNG +0xC737 # HANGUL SYLLABLE IEUNG-YU-CHIEUCH +0xC73C # HANGUL SYLLABLE IEUNG-EU +0xC73D # HANGUL SYLLABLE IEUNG-EU-KIYEOK +0xC740 # HANGUL SYLLABLE IEUNG-EU-NIEUN +0xC744 # HANGUL SYLLABLE IEUNG-EU-RIEUL +0xC74A # HANGUL SYLLABLE IEUNG-EU-RIEULPHIEUPH +0xC74C # HANGUL SYLLABLE IEUNG-EU-MIEUM +0xC74D # HANGUL SYLLABLE IEUNG-EU-PIEUP +0xC74F # HANGUL SYLLABLE IEUNG-EU-SIOS +0xC751 # HANGUL SYLLABLE IEUNG-EU-IEUNG +0xC752 # HANGUL SYLLABLE IEUNG-EU-CIEUC +0xC753 # HANGUL SYLLABLE IEUNG-EU-CHIEUCH +0xC754 # HANGUL SYLLABLE IEUNG-EU-KHIEUKH +0xC755 # HANGUL SYLLABLE IEUNG-EU-THIEUTH +0xC756 # HANGUL SYLLABLE IEUNG-EU-PHIEUPH +0xC757 # HANGUL SYLLABLE IEUNG-EU-HIEUH +0xC758 # HANGUL SYLLABLE IEUNG-YI +0xC75C # HANGUL SYLLABLE IEUNG-YI-NIEUN +0xC760 # HANGUL SYLLABLE IEUNG-YI-RIEUL +0xC768 # HANGUL SYLLABLE IEUNG-YI-MIEUM +0xC76B # HANGUL SYLLABLE IEUNG-YI-SIOS +0xC774 # HANGUL SYLLABLE IEUNG-I +0xC775 # HANGUL SYLLABLE IEUNG-I-KIYEOK +0xC778 # HANGUL SYLLABLE IEUNG-I-NIEUN +0xC77C # HANGUL SYLLABLE IEUNG-I-RIEUL +0xC77D # HANGUL SYLLABLE IEUNG-I-RIEULKIYEOK +0xC77E # HANGUL SYLLABLE IEUNG-I-RIEULMIEUM +0xC783 # HANGUL SYLLABLE IEUNG-I-RIEULHIEUH +0xC784 # HANGUL SYLLABLE IEUNG-I-MIEUM +0xC785 # HANGUL SYLLABLE IEUNG-I-PIEUP +0xC787 # HANGUL SYLLABLE IEUNG-I-SIOS +0xC788 # HANGUL SYLLABLE IEUNG-I-SSANGSIOS +0xC789 # HANGUL SYLLABLE IEUNG-I-IEUNG +0xC78A # HANGUL SYLLABLE IEUNG-I-CIEUC +0xC78E # HANGUL SYLLABLE IEUNG-I-PHIEUPH +0xC790 # HANGUL SYLLABLE CIEUC-A +0xC791 # HANGUL SYLLABLE CIEUC-A-KIYEOK +0xC794 # HANGUL SYLLABLE CIEUC-A-NIEUN +0xC796 # HANGUL SYLLABLE CIEUC-A-NIEUNHIEUH +0xC797 # HANGUL SYLLABLE CIEUC-A-TIKEUT +0xC798 # HANGUL SYLLABLE CIEUC-A-RIEUL +0xC79A # HANGUL SYLLABLE CIEUC-A-RIEULMIEUM +0xC7A0 # HANGUL SYLLABLE CIEUC-A-MIEUM +0xC7A1 # HANGUL SYLLABLE CIEUC-A-PIEUP +0xC7A3 # HANGUL SYLLABLE CIEUC-A-SIOS +0xC7A4 # HANGUL SYLLABLE CIEUC-A-SSANGSIOS +0xC7A5 # HANGUL SYLLABLE CIEUC-A-IEUNG +0xC7A6 # HANGUL SYLLABLE CIEUC-A-CIEUC +0xC7AC # HANGUL SYLLABLE CIEUC-AE +0xC7AD # HANGUL SYLLABLE CIEUC-AE-KIYEOK +0xC7B0 # HANGUL SYLLABLE CIEUC-AE-NIEUN +0xC7B4 # HANGUL SYLLABLE CIEUC-AE-RIEUL +0xC7BC # HANGUL SYLLABLE CIEUC-AE-MIEUM +0xC7BD # HANGUL SYLLABLE CIEUC-AE-PIEUP +0xC7BF # HANGUL SYLLABLE CIEUC-AE-SIOS +0xC7C0 # HANGUL SYLLABLE CIEUC-AE-SSANGSIOS +0xC7C1 # HANGUL SYLLABLE CIEUC-AE-IEUNG +0xC7C8 # HANGUL SYLLABLE CIEUC-YA +0xC7C9 # HANGUL SYLLABLE CIEUC-YA-KIYEOK +0xC7CC # HANGUL SYLLABLE CIEUC-YA-NIEUN +0xC7CE # HANGUL SYLLABLE CIEUC-YA-NIEUNHIEUH +0xC7D0 # HANGUL SYLLABLE CIEUC-YA-RIEUL +0xC7D8 # HANGUL SYLLABLE CIEUC-YA-MIEUM +0xC7DD # HANGUL SYLLABLE CIEUC-YA-IEUNG +0xC7E4 # HANGUL SYLLABLE CIEUC-YAE +0xC7E8 # HANGUL SYLLABLE CIEUC-YAE-NIEUN +0xC7EC # HANGUL SYLLABLE CIEUC-YAE-RIEUL +0xC800 # HANGUL SYLLABLE CIEUC-EO +0xC801 # HANGUL SYLLABLE CIEUC-EO-KIYEOK +0xC804 # HANGUL SYLLABLE CIEUC-EO-NIEUN +0xC808 # HANGUL SYLLABLE CIEUC-EO-RIEUL +0xC80A # HANGUL SYLLABLE CIEUC-EO-RIEULMIEUM +0xC810 # HANGUL SYLLABLE CIEUC-EO-MIEUM +0xC811 # HANGUL SYLLABLE CIEUC-EO-PIEUP +0xC813 # HANGUL SYLLABLE CIEUC-EO-SIOS +0xC815 # HANGUL SYLLABLE CIEUC-EO-IEUNG +0xC816 # HANGUL SYLLABLE CIEUC-EO-CIEUC +0xC81C # HANGUL SYLLABLE CIEUC-E +0xC81D # HANGUL SYLLABLE CIEUC-E-KIYEOK +0xC820 # HANGUL SYLLABLE CIEUC-E-NIEUN +0xC824 # HANGUL SYLLABLE CIEUC-E-RIEUL +0xC82C # HANGUL SYLLABLE CIEUC-E-MIEUM +0xC82D # HANGUL SYLLABLE CIEUC-E-PIEUP +0xC82F # HANGUL SYLLABLE CIEUC-E-SIOS +0xC831 # HANGUL SYLLABLE CIEUC-E-IEUNG +0xC838 # HANGUL SYLLABLE CIEUC-YEO +0xC83C # HANGUL SYLLABLE CIEUC-YEO-NIEUN +0xC840 # HANGUL SYLLABLE CIEUC-YEO-RIEUL +0xC848 # HANGUL SYLLABLE CIEUC-YEO-MIEUM +0xC849 # HANGUL SYLLABLE CIEUC-YEO-PIEUP +0xC84C # HANGUL SYLLABLE CIEUC-YEO-SSANGSIOS +0xC84D # HANGUL SYLLABLE CIEUC-YEO-IEUNG +0xC854 # HANGUL SYLLABLE CIEUC-YE +0xC870 # HANGUL SYLLABLE CIEUC-O +0xC871 # HANGUL SYLLABLE CIEUC-O-KIYEOK +0xC874 # HANGUL SYLLABLE CIEUC-O-NIEUN +0xC878 # HANGUL SYLLABLE CIEUC-O-RIEUL +0xC87A # HANGUL SYLLABLE CIEUC-O-RIEULMIEUM +0xC880 # HANGUL SYLLABLE CIEUC-O-MIEUM +0xC881 # HANGUL SYLLABLE CIEUC-O-PIEUP +0xC883 # HANGUL SYLLABLE CIEUC-O-SIOS +0xC885 # HANGUL SYLLABLE CIEUC-O-IEUNG +0xC886 # HANGUL SYLLABLE CIEUC-O-CIEUC +0xC887 # HANGUL SYLLABLE CIEUC-O-CHIEUCH +0xC88B # HANGUL SYLLABLE CIEUC-O-HIEUH +0xC88C # HANGUL SYLLABLE CIEUC-WA +0xC88D # HANGUL SYLLABLE CIEUC-WA-KIYEOK +0xC894 # HANGUL SYLLABLE CIEUC-WA-RIEUL +0xC89D # HANGUL SYLLABLE CIEUC-WA-PIEUP +0xC89F # HANGUL SYLLABLE CIEUC-WA-SIOS +0xC8A1 # HANGUL SYLLABLE CIEUC-WA-IEUNG +0xC8A8 # HANGUL SYLLABLE CIEUC-WAE +0xC8BC # HANGUL SYLLABLE CIEUC-WAE-SSANGSIOS +0xC8BD # HANGUL SYLLABLE CIEUC-WAE-IEUNG +0xC8C4 # HANGUL SYLLABLE CIEUC-OE +0xC8C8 # HANGUL SYLLABLE CIEUC-OE-NIEUN +0xC8CC # HANGUL SYLLABLE CIEUC-OE-RIEUL +0xC8D4 # HANGUL SYLLABLE CIEUC-OE-MIEUM +0xC8D5 # HANGUL SYLLABLE CIEUC-OE-PIEUP +0xC8D7 # HANGUL SYLLABLE CIEUC-OE-SIOS +0xC8D9 # HANGUL SYLLABLE CIEUC-OE-IEUNG +0xC8E0 # HANGUL SYLLABLE CIEUC-YO +0xC8E1 # HANGUL SYLLABLE CIEUC-YO-KIYEOK +0xC8E4 # HANGUL SYLLABLE CIEUC-YO-NIEUN +0xC8F5 # HANGUL SYLLABLE CIEUC-YO-IEUNG +0xC8FC # HANGUL SYLLABLE CIEUC-U +0xC8FD # HANGUL SYLLABLE CIEUC-U-KIYEOK +0xC900 # HANGUL SYLLABLE CIEUC-U-NIEUN +0xC904 # HANGUL SYLLABLE CIEUC-U-RIEUL +0xC905 # HANGUL SYLLABLE CIEUC-U-RIEULKIYEOK +0xC906 # HANGUL SYLLABLE CIEUC-U-RIEULMIEUM +0xC90C # HANGUL SYLLABLE CIEUC-U-MIEUM +0xC90D # HANGUL SYLLABLE CIEUC-U-PIEUP +0xC90F # HANGUL SYLLABLE CIEUC-U-SIOS +0xC911 # HANGUL SYLLABLE CIEUC-U-IEUNG +0xC918 # HANGUL SYLLABLE CIEUC-WEO +0xC92C # HANGUL SYLLABLE CIEUC-WEO-SSANGSIOS +0xC934 # HANGUL SYLLABLE CIEUC-WE +0xC950 # HANGUL SYLLABLE CIEUC-WI +0xC951 # HANGUL SYLLABLE CIEUC-WI-KIYEOK +0xC954 # HANGUL SYLLABLE CIEUC-WI-NIEUN +0xC958 # HANGUL SYLLABLE CIEUC-WI-RIEUL +0xC960 # HANGUL SYLLABLE CIEUC-WI-MIEUM +0xC961 # HANGUL SYLLABLE CIEUC-WI-PIEUP +0xC963 # HANGUL SYLLABLE CIEUC-WI-SIOS +0xC96C # HANGUL SYLLABLE CIEUC-YU +0xC970 # HANGUL SYLLABLE CIEUC-YU-NIEUN +0xC974 # HANGUL SYLLABLE CIEUC-YU-RIEUL +0xC97C # HANGUL SYLLABLE CIEUC-YU-MIEUM +0xC988 # HANGUL SYLLABLE CIEUC-EU +0xC989 # HANGUL SYLLABLE CIEUC-EU-KIYEOK +0xC98C # HANGUL SYLLABLE CIEUC-EU-NIEUN +0xC990 # HANGUL SYLLABLE CIEUC-EU-RIEUL +0xC998 # HANGUL SYLLABLE CIEUC-EU-MIEUM +0xC999 # HANGUL SYLLABLE CIEUC-EU-PIEUP +0xC99B # HANGUL SYLLABLE CIEUC-EU-SIOS +0xC99D # HANGUL SYLLABLE CIEUC-EU-IEUNG +0xC9C0 # HANGUL SYLLABLE CIEUC-I +0xC9C1 # HANGUL SYLLABLE CIEUC-I-KIYEOK +0xC9C4 # HANGUL SYLLABLE CIEUC-I-NIEUN +0xC9C7 # HANGUL SYLLABLE CIEUC-I-TIKEUT +0xC9C8 # HANGUL SYLLABLE CIEUC-I-RIEUL +0xC9CA # HANGUL SYLLABLE CIEUC-I-RIEULMIEUM +0xC9D0 # HANGUL SYLLABLE CIEUC-I-MIEUM +0xC9D1 # HANGUL SYLLABLE CIEUC-I-PIEUP +0xC9D3 # HANGUL SYLLABLE CIEUC-I-SIOS +0xC9D5 # HANGUL SYLLABLE CIEUC-I-IEUNG +0xC9D6 # HANGUL SYLLABLE CIEUC-I-CIEUC +0xC9D9 # HANGUL SYLLABLE CIEUC-I-THIEUTH +0xC9DA # HANGUL SYLLABLE CIEUC-I-PHIEUPH +0xC9DC # HANGUL SYLLABLE SSANGCIEUC-A +0xC9DD # HANGUL SYLLABLE SSANGCIEUC-A-KIYEOK +0xC9E0 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUN +0xC9E2 # HANGUL SYLLABLE SSANGCIEUC-A-NIEUNHIEUH +0xC9E4 # HANGUL SYLLABLE SSANGCIEUC-A-RIEUL +0xC9E7 # HANGUL SYLLABLE SSANGCIEUC-A-RIEULPIEUP +0xC9EC # HANGUL SYLLABLE SSANGCIEUC-A-MIEUM +0xC9ED # HANGUL SYLLABLE SSANGCIEUC-A-PIEUP +0xC9EF # HANGUL SYLLABLE SSANGCIEUC-A-SIOS +0xC9F0 # HANGUL SYLLABLE SSANGCIEUC-A-SSANGSIOS +0xC9F1 # HANGUL SYLLABLE SSANGCIEUC-A-IEUNG +0xC9F8 # HANGUL SYLLABLE SSANGCIEUC-AE +0xC9F9 # HANGUL SYLLABLE SSANGCIEUC-AE-KIYEOK +0xC9FC # HANGUL SYLLABLE SSANGCIEUC-AE-NIEUN +0xCA00 # HANGUL SYLLABLE SSANGCIEUC-AE-RIEUL +0xCA08 # HANGUL SYLLABLE SSANGCIEUC-AE-MIEUM +0xCA09 # HANGUL SYLLABLE SSANGCIEUC-AE-PIEUP +0xCA0B # HANGUL SYLLABLE SSANGCIEUC-AE-SIOS +0xCA0C # HANGUL SYLLABLE SSANGCIEUC-AE-SSANGSIOS +0xCA0D # HANGUL SYLLABLE SSANGCIEUC-AE-IEUNG +0xCA14 # HANGUL SYLLABLE SSANGCIEUC-YA +0xCA18 # HANGUL SYLLABLE SSANGCIEUC-YA-NIEUN +0xCA29 # HANGUL SYLLABLE SSANGCIEUC-YA-IEUNG +0xCA4C # HANGUL SYLLABLE SSANGCIEUC-EO +0xCA4D # HANGUL SYLLABLE SSANGCIEUC-EO-KIYEOK +0xCA50 # HANGUL SYLLABLE SSANGCIEUC-EO-NIEUN +0xCA54 # HANGUL SYLLABLE SSANGCIEUC-EO-RIEUL +0xCA5C # HANGUL SYLLABLE SSANGCIEUC-EO-MIEUM +0xCA5D # HANGUL SYLLABLE SSANGCIEUC-EO-PIEUP +0xCA5F # HANGUL SYLLABLE SSANGCIEUC-EO-SIOS +0xCA60 # HANGUL SYLLABLE SSANGCIEUC-EO-SSANGSIOS +0xCA61 # HANGUL SYLLABLE SSANGCIEUC-EO-IEUNG +0xCA68 # HANGUL SYLLABLE SSANGCIEUC-E +0xCA7D # HANGUL SYLLABLE SSANGCIEUC-E-IEUNG +0xCA84 # HANGUL SYLLABLE SSANGCIEUC-YEO +0xCA98 # HANGUL SYLLABLE SSANGCIEUC-YEO-SSANGSIOS +0xCABC # HANGUL SYLLABLE SSANGCIEUC-O +0xCABD # HANGUL SYLLABLE SSANGCIEUC-O-KIYEOK +0xCAC0 # HANGUL SYLLABLE SSANGCIEUC-O-NIEUN +0xCAC4 # HANGUL SYLLABLE SSANGCIEUC-O-RIEUL +0xCACC # HANGUL SYLLABLE SSANGCIEUC-O-MIEUM +0xCACD # HANGUL SYLLABLE SSANGCIEUC-O-PIEUP +0xCACF # HANGUL SYLLABLE SSANGCIEUC-O-SIOS +0xCAD1 # HANGUL SYLLABLE SSANGCIEUC-O-IEUNG +0xCAD3 # HANGUL SYLLABLE SSANGCIEUC-O-CHIEUCH +0xCAD8 # HANGUL SYLLABLE SSANGCIEUC-WA +0xCAD9 # HANGUL SYLLABLE SSANGCIEUC-WA-KIYEOK +0xCAE0 # HANGUL SYLLABLE SSANGCIEUC-WA-RIEUL +0xCAEC # HANGUL SYLLABLE SSANGCIEUC-WA-SSANGSIOS +0xCAF4 # HANGUL SYLLABLE SSANGCIEUC-WAE +0xCB08 # HANGUL SYLLABLE SSANGCIEUC-WAE-SSANGSIOS +0xCB10 # HANGUL SYLLABLE SSANGCIEUC-OE +0xCB14 # HANGUL SYLLABLE SSANGCIEUC-OE-NIEUN +0xCB18 # HANGUL SYLLABLE SSANGCIEUC-OE-RIEUL +0xCB20 # HANGUL SYLLABLE SSANGCIEUC-OE-MIEUM +0xCB21 # HANGUL SYLLABLE SSANGCIEUC-OE-PIEUP +0xCB41 # HANGUL SYLLABLE SSANGCIEUC-YO-IEUNG +0xCB48 # HANGUL SYLLABLE SSANGCIEUC-U +0xCB49 # HANGUL SYLLABLE SSANGCIEUC-U-KIYEOK +0xCB4C # HANGUL SYLLABLE SSANGCIEUC-U-NIEUN +0xCB50 # HANGUL SYLLABLE SSANGCIEUC-U-RIEUL +0xCB58 # HANGUL SYLLABLE SSANGCIEUC-U-MIEUM +0xCB59 # HANGUL SYLLABLE SSANGCIEUC-U-PIEUP +0xCB5D # HANGUL SYLLABLE SSANGCIEUC-U-IEUNG +0xCB64 # HANGUL SYLLABLE SSANGCIEUC-WEO +0xCB78 # HANGUL SYLLABLE SSANGCIEUC-WEO-SSANGSIOS +0xCB79 # HANGUL SYLLABLE SSANGCIEUC-WEO-IEUNG +0xCB9C # HANGUL SYLLABLE SSANGCIEUC-WI +0xCBB8 # HANGUL SYLLABLE SSANGCIEUC-YU +0xCBD4 # HANGUL SYLLABLE SSANGCIEUC-EU +0xCBE4 # HANGUL SYLLABLE SSANGCIEUC-EU-MIEUM +0xCBE7 # HANGUL SYLLABLE SSANGCIEUC-EU-SIOS +0xCBE9 # HANGUL SYLLABLE SSANGCIEUC-EU-IEUNG +0xCC0C # HANGUL SYLLABLE SSANGCIEUC-I +0xCC0D # HANGUL SYLLABLE SSANGCIEUC-I-KIYEOK +0xCC10 # HANGUL SYLLABLE SSANGCIEUC-I-NIEUN +0xCC14 # HANGUL SYLLABLE SSANGCIEUC-I-RIEUL +0xCC1C # HANGUL SYLLABLE SSANGCIEUC-I-MIEUM +0xCC1D # HANGUL SYLLABLE SSANGCIEUC-I-PIEUP +0xCC21 # HANGUL SYLLABLE SSANGCIEUC-I-IEUNG +0xCC22 # HANGUL SYLLABLE SSANGCIEUC-I-CIEUC +0xCC27 # HANGUL SYLLABLE SSANGCIEUC-I-HIEUH +0xCC28 # HANGUL SYLLABLE CHIEUCH-A +0xCC29 # HANGUL SYLLABLE CHIEUCH-A-KIYEOK +0xCC2C # HANGUL SYLLABLE CHIEUCH-A-NIEUN +0xCC2E # HANGUL SYLLABLE CHIEUCH-A-NIEUNHIEUH +0xCC30 # HANGUL SYLLABLE CHIEUCH-A-RIEUL +0xCC38 # HANGUL SYLLABLE CHIEUCH-A-MIEUM +0xCC39 # HANGUL SYLLABLE CHIEUCH-A-PIEUP +0xCC3B # HANGUL SYLLABLE CHIEUCH-A-SIOS +0xCC3C # HANGUL SYLLABLE CHIEUCH-A-SSANGSIOS +0xCC3D # HANGUL SYLLABLE CHIEUCH-A-IEUNG +0xCC3E # HANGUL SYLLABLE CHIEUCH-A-CIEUC +0xCC44 # HANGUL SYLLABLE CHIEUCH-AE +0xCC45 # HANGUL SYLLABLE CHIEUCH-AE-KIYEOK +0xCC48 # HANGUL SYLLABLE CHIEUCH-AE-NIEUN +0xCC4C # HANGUL SYLLABLE CHIEUCH-AE-RIEUL +0xCC54 # HANGUL SYLLABLE CHIEUCH-AE-MIEUM +0xCC55 # HANGUL SYLLABLE CHIEUCH-AE-PIEUP +0xCC57 # HANGUL SYLLABLE CHIEUCH-AE-SIOS +0xCC58 # HANGUL SYLLABLE CHIEUCH-AE-SSANGSIOS +0xCC59 # HANGUL SYLLABLE CHIEUCH-AE-IEUNG +0xCC60 # HANGUL SYLLABLE CHIEUCH-YA +0xCC64 # HANGUL SYLLABLE CHIEUCH-YA-NIEUN +0xCC66 # HANGUL SYLLABLE CHIEUCH-YA-NIEUNHIEUH +0xCC68 # HANGUL SYLLABLE CHIEUCH-YA-RIEUL +0xCC70 # HANGUL SYLLABLE CHIEUCH-YA-MIEUM +0xCC75 # HANGUL SYLLABLE CHIEUCH-YA-IEUNG +0xCC98 # HANGUL SYLLABLE CHIEUCH-EO +0xCC99 # HANGUL SYLLABLE CHIEUCH-EO-KIYEOK +0xCC9C # HANGUL SYLLABLE CHIEUCH-EO-NIEUN +0xCCA0 # HANGUL SYLLABLE CHIEUCH-EO-RIEUL +0xCCA8 # HANGUL SYLLABLE CHIEUCH-EO-MIEUM +0xCCA9 # HANGUL SYLLABLE CHIEUCH-EO-PIEUP +0xCCAB # HANGUL SYLLABLE CHIEUCH-EO-SIOS +0xCCAC # HANGUL SYLLABLE CHIEUCH-EO-SSANGSIOS +0xCCAD # HANGUL SYLLABLE CHIEUCH-EO-IEUNG +0xCCB4 # HANGUL SYLLABLE CHIEUCH-E +0xCCB5 # HANGUL SYLLABLE CHIEUCH-E-KIYEOK +0xCCB8 # HANGUL SYLLABLE CHIEUCH-E-NIEUN +0xCCBC # HANGUL SYLLABLE CHIEUCH-E-RIEUL +0xCCC4 # HANGUL SYLLABLE CHIEUCH-E-MIEUM +0xCCC5 # HANGUL SYLLABLE CHIEUCH-E-PIEUP +0xCCC7 # HANGUL SYLLABLE CHIEUCH-E-SIOS +0xCCC9 # HANGUL SYLLABLE CHIEUCH-E-IEUNG +0xCCD0 # HANGUL SYLLABLE CHIEUCH-YEO +0xCCD4 # HANGUL SYLLABLE CHIEUCH-YEO-NIEUN +0xCCE4 # HANGUL SYLLABLE CHIEUCH-YEO-SSANGSIOS +0xCCEC # HANGUL SYLLABLE CHIEUCH-YE +0xCCF0 # HANGUL SYLLABLE CHIEUCH-YE-NIEUN +0xCD01 # HANGUL SYLLABLE CHIEUCH-YE-IEUNG +0xCD08 # HANGUL SYLLABLE CHIEUCH-O +0xCD09 # HANGUL SYLLABLE CHIEUCH-O-KIYEOK +0xCD0C # HANGUL SYLLABLE CHIEUCH-O-NIEUN +0xCD10 # HANGUL SYLLABLE CHIEUCH-O-RIEUL +0xCD18 # HANGUL SYLLABLE CHIEUCH-O-MIEUM +0xCD19 # HANGUL SYLLABLE CHIEUCH-O-PIEUP +0xCD1B # HANGUL SYLLABLE CHIEUCH-O-SIOS +0xCD1D # HANGUL SYLLABLE CHIEUCH-O-IEUNG +0xCD24 # HANGUL SYLLABLE CHIEUCH-WA +0xCD28 # HANGUL SYLLABLE CHIEUCH-WA-NIEUN +0xCD2C # HANGUL SYLLABLE CHIEUCH-WA-RIEUL +0xCD39 # HANGUL SYLLABLE CHIEUCH-WA-IEUNG +0xCD5C # HANGUL SYLLABLE CHIEUCH-OE +0xCD60 # HANGUL SYLLABLE CHIEUCH-OE-NIEUN +0xCD64 # HANGUL SYLLABLE CHIEUCH-OE-RIEUL +0xCD6C # HANGUL SYLLABLE CHIEUCH-OE-MIEUM +0xCD6D # HANGUL SYLLABLE CHIEUCH-OE-PIEUP +0xCD6F # HANGUL SYLLABLE CHIEUCH-OE-SIOS +0xCD71 # HANGUL SYLLABLE CHIEUCH-OE-IEUNG +0xCD78 # HANGUL SYLLABLE CHIEUCH-YO +0xCD88 # HANGUL SYLLABLE CHIEUCH-YO-MIEUM +0xCD94 # HANGUL SYLLABLE CHIEUCH-U +0xCD95 # HANGUL SYLLABLE CHIEUCH-U-KIYEOK +0xCD98 # HANGUL SYLLABLE CHIEUCH-U-NIEUN +0xCD9C # HANGUL SYLLABLE CHIEUCH-U-RIEUL +0xCDA4 # HANGUL SYLLABLE CHIEUCH-U-MIEUM +0xCDA5 # HANGUL SYLLABLE CHIEUCH-U-PIEUP +0xCDA7 # HANGUL SYLLABLE CHIEUCH-U-SIOS +0xCDA9 # HANGUL SYLLABLE CHIEUCH-U-IEUNG +0xCDB0 # HANGUL SYLLABLE CHIEUCH-WEO +0xCDC4 # HANGUL SYLLABLE CHIEUCH-WEO-SSANGSIOS +0xCDCC # HANGUL SYLLABLE CHIEUCH-WE +0xCDD0 # HANGUL SYLLABLE CHIEUCH-WE-NIEUN +0xCDE8 # HANGUL SYLLABLE CHIEUCH-WI +0xCDEC # HANGUL SYLLABLE CHIEUCH-WI-NIEUN +0xCDF0 # HANGUL SYLLABLE CHIEUCH-WI-RIEUL +0xCDF8 # HANGUL SYLLABLE CHIEUCH-WI-MIEUM +0xCDF9 # HANGUL SYLLABLE CHIEUCH-WI-PIEUP +0xCDFB # HANGUL SYLLABLE CHIEUCH-WI-SIOS +0xCDFD # HANGUL SYLLABLE CHIEUCH-WI-IEUNG +0xCE04 # HANGUL SYLLABLE CHIEUCH-YU +0xCE08 # HANGUL SYLLABLE CHIEUCH-YU-NIEUN +0xCE0C # HANGUL SYLLABLE CHIEUCH-YU-RIEUL +0xCE14 # HANGUL SYLLABLE CHIEUCH-YU-MIEUM +0xCE19 # HANGUL SYLLABLE CHIEUCH-YU-IEUNG +0xCE20 # HANGUL SYLLABLE CHIEUCH-EU +0xCE21 # HANGUL SYLLABLE CHIEUCH-EU-KIYEOK +0xCE24 # HANGUL SYLLABLE CHIEUCH-EU-NIEUN +0xCE28 # HANGUL SYLLABLE CHIEUCH-EU-RIEUL +0xCE30 # HANGUL SYLLABLE CHIEUCH-EU-MIEUM +0xCE31 # HANGUL SYLLABLE CHIEUCH-EU-PIEUP +0xCE33 # HANGUL SYLLABLE CHIEUCH-EU-SIOS +0xCE35 # HANGUL SYLLABLE CHIEUCH-EU-IEUNG +0xCE58 # HANGUL SYLLABLE CHIEUCH-I +0xCE59 # HANGUL SYLLABLE CHIEUCH-I-KIYEOK +0xCE5C # HANGUL SYLLABLE CHIEUCH-I-NIEUN +0xCE5F # HANGUL SYLLABLE CHIEUCH-I-TIKEUT +0xCE60 # HANGUL SYLLABLE CHIEUCH-I-RIEUL +0xCE61 # HANGUL SYLLABLE CHIEUCH-I-RIEULKIYEOK +0xCE68 # HANGUL SYLLABLE CHIEUCH-I-MIEUM +0xCE69 # HANGUL SYLLABLE CHIEUCH-I-PIEUP +0xCE6B # HANGUL SYLLABLE CHIEUCH-I-SIOS +0xCE6D # HANGUL SYLLABLE CHIEUCH-I-IEUNG +0xCE74 # HANGUL SYLLABLE KHIEUKH-A +0xCE75 # HANGUL SYLLABLE KHIEUKH-A-KIYEOK +0xCE78 # HANGUL SYLLABLE KHIEUKH-A-NIEUN +0xCE7C # HANGUL SYLLABLE KHIEUKH-A-RIEUL +0xCE84 # HANGUL SYLLABLE KHIEUKH-A-MIEUM +0xCE85 # HANGUL SYLLABLE KHIEUKH-A-PIEUP +0xCE87 # HANGUL SYLLABLE KHIEUKH-A-SIOS +0xCE89 # HANGUL SYLLABLE KHIEUKH-A-IEUNG +0xCE90 # HANGUL SYLLABLE KHIEUKH-AE +0xCE91 # HANGUL SYLLABLE KHIEUKH-AE-KIYEOK +0xCE94 # HANGUL SYLLABLE KHIEUKH-AE-NIEUN +0xCE98 # HANGUL SYLLABLE KHIEUKH-AE-RIEUL +0xCEA0 # HANGUL SYLLABLE KHIEUKH-AE-MIEUM +0xCEA1 # HANGUL SYLLABLE KHIEUKH-AE-PIEUP +0xCEA3 # HANGUL SYLLABLE KHIEUKH-AE-SIOS +0xCEA4 # HANGUL SYLLABLE KHIEUKH-AE-SSANGSIOS +0xCEA5 # HANGUL SYLLABLE KHIEUKH-AE-IEUNG +0xCEAC # HANGUL SYLLABLE KHIEUKH-YA +0xCEAD # HANGUL SYLLABLE KHIEUKH-YA-KIYEOK +0xCEC1 # HANGUL SYLLABLE KHIEUKH-YA-IEUNG +0xCEE4 # HANGUL SYLLABLE KHIEUKH-EO +0xCEE5 # HANGUL SYLLABLE KHIEUKH-EO-KIYEOK +0xCEE8 # HANGUL SYLLABLE KHIEUKH-EO-NIEUN +0xCEEB # HANGUL SYLLABLE KHIEUKH-EO-TIKEUT +0xCEEC # HANGUL SYLLABLE KHIEUKH-EO-RIEUL +0xCEF4 # HANGUL SYLLABLE KHIEUKH-EO-MIEUM +0xCEF5 # HANGUL SYLLABLE KHIEUKH-EO-PIEUP +0xCEF7 # HANGUL SYLLABLE KHIEUKH-EO-SIOS +0xCEF8 # HANGUL SYLLABLE KHIEUKH-EO-SSANGSIOS +0xCEF9 # HANGUL SYLLABLE KHIEUKH-EO-IEUNG +0xCF00 # HANGUL SYLLABLE KHIEUKH-E +0xCF01 # HANGUL SYLLABLE KHIEUKH-E-KIYEOK +0xCF04 # HANGUL SYLLABLE KHIEUKH-E-NIEUN +0xCF08 # HANGUL SYLLABLE KHIEUKH-E-RIEUL +0xCF10 # HANGUL SYLLABLE KHIEUKH-E-MIEUM +0xCF11 # HANGUL SYLLABLE KHIEUKH-E-PIEUP +0xCF13 # HANGUL SYLLABLE KHIEUKH-E-SIOS +0xCF15 # HANGUL SYLLABLE KHIEUKH-E-IEUNG +0xCF1C # HANGUL SYLLABLE KHIEUKH-YEO +0xCF20 # HANGUL SYLLABLE KHIEUKH-YEO-NIEUN +0xCF24 # HANGUL SYLLABLE KHIEUKH-YEO-RIEUL +0xCF2C # HANGUL SYLLABLE KHIEUKH-YEO-MIEUM +0xCF2D # HANGUL SYLLABLE KHIEUKH-YEO-PIEUP +0xCF2F # HANGUL SYLLABLE KHIEUKH-YEO-SIOS +0xCF30 # HANGUL SYLLABLE KHIEUKH-YEO-SSANGSIOS +0xCF31 # HANGUL SYLLABLE KHIEUKH-YEO-IEUNG +0xCF38 # HANGUL SYLLABLE KHIEUKH-YE +0xCF54 # HANGUL SYLLABLE KHIEUKH-O +0xCF55 # HANGUL SYLLABLE KHIEUKH-O-KIYEOK +0xCF58 # HANGUL SYLLABLE KHIEUKH-O-NIEUN +0xCF5C # HANGUL SYLLABLE KHIEUKH-O-RIEUL +0xCF64 # HANGUL SYLLABLE KHIEUKH-O-MIEUM +0xCF65 # HANGUL SYLLABLE KHIEUKH-O-PIEUP +0xCF67 # HANGUL SYLLABLE KHIEUKH-O-SIOS +0xCF69 # HANGUL SYLLABLE KHIEUKH-O-IEUNG +0xCF70 # HANGUL SYLLABLE KHIEUKH-WA +0xCF71 # HANGUL SYLLABLE KHIEUKH-WA-KIYEOK +0xCF74 # HANGUL SYLLABLE KHIEUKH-WA-NIEUN +0xCF78 # HANGUL SYLLABLE KHIEUKH-WA-RIEUL +0xCF80 # HANGUL SYLLABLE KHIEUKH-WA-MIEUM +0xCF85 # HANGUL SYLLABLE KHIEUKH-WA-IEUNG +0xCF8C # HANGUL SYLLABLE KHIEUKH-WAE +0xCFA1 # HANGUL SYLLABLE KHIEUKH-WAE-IEUNG +0xCFA8 # HANGUL SYLLABLE KHIEUKH-OE +0xCFB0 # HANGUL SYLLABLE KHIEUKH-OE-RIEUL +0xCFC4 # HANGUL SYLLABLE KHIEUKH-YO +0xCFE0 # HANGUL SYLLABLE KHIEUKH-U +0xCFE1 # HANGUL SYLLABLE KHIEUKH-U-KIYEOK +0xCFE4 # HANGUL SYLLABLE KHIEUKH-U-NIEUN +0xCFE8 # HANGUL SYLLABLE KHIEUKH-U-RIEUL +0xCFF0 # HANGUL SYLLABLE KHIEUKH-U-MIEUM +0xCFF1 # HANGUL SYLLABLE KHIEUKH-U-PIEUP +0xCFF3 # HANGUL SYLLABLE KHIEUKH-U-SIOS +0xCFF5 # HANGUL SYLLABLE KHIEUKH-U-IEUNG +0xCFFC # HANGUL SYLLABLE KHIEUKH-WEO +0xD000 # HANGUL SYLLABLE KHIEUKH-WEO-NIEUN +0xD004 # HANGUL SYLLABLE KHIEUKH-WEO-RIEUL +0xD011 # HANGUL SYLLABLE KHIEUKH-WEO-IEUNG +0xD018 # HANGUL SYLLABLE KHIEUKH-WE +0xD02D # HANGUL SYLLABLE KHIEUKH-WE-IEUNG +0xD034 # HANGUL SYLLABLE KHIEUKH-WI +0xD035 # HANGUL SYLLABLE KHIEUKH-WI-KIYEOK +0xD038 # HANGUL SYLLABLE KHIEUKH-WI-NIEUN +0xD03C # HANGUL SYLLABLE KHIEUKH-WI-RIEUL +0xD044 # HANGUL SYLLABLE KHIEUKH-WI-MIEUM +0xD045 # HANGUL SYLLABLE KHIEUKH-WI-PIEUP +0xD047 # HANGUL SYLLABLE KHIEUKH-WI-SIOS +0xD049 # HANGUL SYLLABLE KHIEUKH-WI-IEUNG +0xD050 # HANGUL SYLLABLE KHIEUKH-YU +0xD054 # HANGUL SYLLABLE KHIEUKH-YU-NIEUN +0xD058 # HANGUL SYLLABLE KHIEUKH-YU-RIEUL +0xD060 # HANGUL SYLLABLE KHIEUKH-YU-MIEUM +0xD06C # HANGUL SYLLABLE KHIEUKH-EU +0xD06D # HANGUL SYLLABLE KHIEUKH-EU-KIYEOK +0xD070 # HANGUL SYLLABLE KHIEUKH-EU-NIEUN +0xD074 # HANGUL SYLLABLE KHIEUKH-EU-RIEUL +0xD07C # HANGUL SYLLABLE KHIEUKH-EU-MIEUM +0xD07D # HANGUL SYLLABLE KHIEUKH-EU-PIEUP +0xD081 # HANGUL SYLLABLE KHIEUKH-EU-IEUNG +0xD0A4 # HANGUL SYLLABLE KHIEUKH-I +0xD0A5 # HANGUL SYLLABLE KHIEUKH-I-KIYEOK +0xD0A8 # HANGUL SYLLABLE KHIEUKH-I-NIEUN +0xD0AC # HANGUL SYLLABLE KHIEUKH-I-RIEUL +0xD0B4 # HANGUL SYLLABLE KHIEUKH-I-MIEUM +0xD0B5 # HANGUL SYLLABLE KHIEUKH-I-PIEUP +0xD0B7 # HANGUL SYLLABLE KHIEUKH-I-SIOS +0xD0B9 # HANGUL SYLLABLE KHIEUKH-I-IEUNG +0xD0C0 # HANGUL SYLLABLE THIEUTH-A +0xD0C1 # HANGUL SYLLABLE THIEUTH-A-KIYEOK +0xD0C4 # HANGUL SYLLABLE THIEUTH-A-NIEUN +0xD0C8 # HANGUL SYLLABLE THIEUTH-A-RIEUL +0xD0C9 # HANGUL SYLLABLE THIEUTH-A-RIEULKIYEOK +0xD0D0 # HANGUL SYLLABLE THIEUTH-A-MIEUM +0xD0D1 # HANGUL SYLLABLE THIEUTH-A-PIEUP +0xD0D3 # HANGUL SYLLABLE THIEUTH-A-SIOS +0xD0D4 # HANGUL SYLLABLE THIEUTH-A-SSANGSIOS +0xD0D5 # HANGUL SYLLABLE THIEUTH-A-IEUNG +0xD0DC # HANGUL SYLLABLE THIEUTH-AE +0xD0DD # HANGUL SYLLABLE THIEUTH-AE-KIYEOK +0xD0E0 # HANGUL SYLLABLE THIEUTH-AE-NIEUN +0xD0E4 # HANGUL SYLLABLE THIEUTH-AE-RIEUL +0xD0EC # HANGUL SYLLABLE THIEUTH-AE-MIEUM +0xD0ED # HANGUL SYLLABLE THIEUTH-AE-PIEUP +0xD0EF # HANGUL SYLLABLE THIEUTH-AE-SIOS +0xD0F0 # HANGUL SYLLABLE THIEUTH-AE-SSANGSIOS +0xD0F1 # HANGUL SYLLABLE THIEUTH-AE-IEUNG +0xD0F8 # HANGUL SYLLABLE THIEUTH-YA +0xD10D # HANGUL SYLLABLE THIEUTH-YA-IEUNG +0xD130 # HANGUL SYLLABLE THIEUTH-EO +0xD131 # HANGUL SYLLABLE THIEUTH-EO-KIYEOK +0xD134 # HANGUL SYLLABLE THIEUTH-EO-NIEUN +0xD138 # HANGUL SYLLABLE THIEUTH-EO-RIEUL +0xD13A # HANGUL SYLLABLE THIEUTH-EO-RIEULMIEUM +0xD140 # HANGUL SYLLABLE THIEUTH-EO-MIEUM +0xD141 # HANGUL SYLLABLE THIEUTH-EO-PIEUP +0xD143 # HANGUL SYLLABLE THIEUTH-EO-SIOS +0xD144 # HANGUL SYLLABLE THIEUTH-EO-SSANGSIOS +0xD145 # HANGUL SYLLABLE THIEUTH-EO-IEUNG +0xD14C # HANGUL SYLLABLE THIEUTH-E +0xD14D # HANGUL SYLLABLE THIEUTH-E-KIYEOK +0xD150 # HANGUL SYLLABLE THIEUTH-E-NIEUN +0xD154 # HANGUL SYLLABLE THIEUTH-E-RIEUL +0xD15C # HANGUL SYLLABLE THIEUTH-E-MIEUM +0xD15D # HANGUL SYLLABLE THIEUTH-E-PIEUP +0xD15F # HANGUL SYLLABLE THIEUTH-E-SIOS +0xD161 # HANGUL SYLLABLE THIEUTH-E-IEUNG +0xD168 # HANGUL SYLLABLE THIEUTH-YEO +0xD16C # HANGUL SYLLABLE THIEUTH-YEO-NIEUN +0xD17C # HANGUL SYLLABLE THIEUTH-YEO-SSANGSIOS +0xD184 # HANGUL SYLLABLE THIEUTH-YE +0xD188 # HANGUL SYLLABLE THIEUTH-YE-NIEUN +0xD1A0 # HANGUL SYLLABLE THIEUTH-O +0xD1A1 # HANGUL SYLLABLE THIEUTH-O-KIYEOK +0xD1A4 # HANGUL SYLLABLE THIEUTH-O-NIEUN +0xD1A8 # HANGUL SYLLABLE THIEUTH-O-RIEUL +0xD1B0 # HANGUL SYLLABLE THIEUTH-O-MIEUM +0xD1B1 # HANGUL SYLLABLE THIEUTH-O-PIEUP +0xD1B3 # HANGUL SYLLABLE THIEUTH-O-SIOS +0xD1B5 # HANGUL SYLLABLE THIEUTH-O-IEUNG +0xD1BA # HANGUL SYLLABLE THIEUTH-O-PHIEUPH +0xD1BC # HANGUL SYLLABLE THIEUTH-WA +0xD1C0 # HANGUL SYLLABLE THIEUTH-WA-NIEUN +0xD1D8 # HANGUL SYLLABLE THIEUTH-WAE +0xD1F4 # HANGUL SYLLABLE THIEUTH-OE +0xD1F8 # HANGUL SYLLABLE THIEUTH-OE-NIEUN +0xD207 # HANGUL SYLLABLE THIEUTH-OE-SIOS +0xD209 # HANGUL SYLLABLE THIEUTH-OE-IEUNG +0xD210 # HANGUL SYLLABLE THIEUTH-YO +0xD22C # HANGUL SYLLABLE THIEUTH-U +0xD22D # HANGUL SYLLABLE THIEUTH-U-KIYEOK +0xD230 # HANGUL SYLLABLE THIEUTH-U-NIEUN +0xD234 # HANGUL SYLLABLE THIEUTH-U-RIEUL +0xD23C # HANGUL SYLLABLE THIEUTH-U-MIEUM +0xD23D # HANGUL SYLLABLE THIEUTH-U-PIEUP +0xD23F # HANGUL SYLLABLE THIEUTH-U-SIOS +0xD241 # HANGUL SYLLABLE THIEUTH-U-IEUNG +0xD248 # HANGUL SYLLABLE THIEUTH-WEO +0xD25C # HANGUL SYLLABLE THIEUTH-WEO-SSANGSIOS +0xD264 # HANGUL SYLLABLE THIEUTH-WE +0xD280 # HANGUL SYLLABLE THIEUTH-WI +0xD281 # HANGUL SYLLABLE THIEUTH-WI-KIYEOK +0xD284 # HANGUL SYLLABLE THIEUTH-WI-NIEUN +0xD288 # HANGUL SYLLABLE THIEUTH-WI-RIEUL +0xD290 # HANGUL SYLLABLE THIEUTH-WI-MIEUM +0xD291 # HANGUL SYLLABLE THIEUTH-WI-PIEUP +0xD295 # HANGUL SYLLABLE THIEUTH-WI-IEUNG +0xD29C # HANGUL SYLLABLE THIEUTH-YU +0xD2A0 # HANGUL SYLLABLE THIEUTH-YU-NIEUN +0xD2A4 # HANGUL SYLLABLE THIEUTH-YU-RIEUL +0xD2AC # HANGUL SYLLABLE THIEUTH-YU-MIEUM +0xD2B1 # HANGUL SYLLABLE THIEUTH-YU-IEUNG +0xD2B8 # HANGUL SYLLABLE THIEUTH-EU +0xD2B9 # HANGUL SYLLABLE THIEUTH-EU-KIYEOK +0xD2BC # HANGUL SYLLABLE THIEUTH-EU-NIEUN +0xD2BF # HANGUL SYLLABLE THIEUTH-EU-TIKEUT +0xD2C0 # HANGUL SYLLABLE THIEUTH-EU-RIEUL +0xD2C2 # HANGUL SYLLABLE THIEUTH-EU-RIEULMIEUM +0xD2C8 # HANGUL SYLLABLE THIEUTH-EU-MIEUM +0xD2C9 # HANGUL SYLLABLE THIEUTH-EU-PIEUP +0xD2CB # HANGUL SYLLABLE THIEUTH-EU-SIOS +0xD2D4 # HANGUL SYLLABLE THIEUTH-YI +0xD2D8 # HANGUL SYLLABLE THIEUTH-YI-NIEUN +0xD2DC # HANGUL SYLLABLE THIEUTH-YI-RIEUL +0xD2E4 # HANGUL SYLLABLE THIEUTH-YI-MIEUM +0xD2E5 # HANGUL SYLLABLE THIEUTH-YI-PIEUP +0xD2F0 # HANGUL SYLLABLE THIEUTH-I +0xD2F1 # HANGUL SYLLABLE THIEUTH-I-KIYEOK +0xD2F4 # HANGUL SYLLABLE THIEUTH-I-NIEUN +0xD2F8 # HANGUL SYLLABLE THIEUTH-I-RIEUL +0xD300 # HANGUL SYLLABLE THIEUTH-I-MIEUM +0xD301 # HANGUL SYLLABLE THIEUTH-I-PIEUP +0xD303 # HANGUL SYLLABLE THIEUTH-I-SIOS +0xD305 # HANGUL SYLLABLE THIEUTH-I-IEUNG +0xD30C # HANGUL SYLLABLE PHIEUPH-A +0xD30D # HANGUL SYLLABLE PHIEUPH-A-KIYEOK +0xD30E # HANGUL SYLLABLE PHIEUPH-A-SSANGKIYEOK +0xD310 # HANGUL SYLLABLE PHIEUPH-A-NIEUN +0xD314 # HANGUL SYLLABLE PHIEUPH-A-RIEUL +0xD316 # HANGUL SYLLABLE PHIEUPH-A-RIEULMIEUM +0xD31C # HANGUL SYLLABLE PHIEUPH-A-MIEUM +0xD31D # HANGUL SYLLABLE PHIEUPH-A-PIEUP +0xD31F # HANGUL SYLLABLE PHIEUPH-A-SIOS +0xD320 # HANGUL SYLLABLE PHIEUPH-A-SSANGSIOS +0xD321 # HANGUL SYLLABLE PHIEUPH-A-IEUNG +0xD325 # HANGUL SYLLABLE PHIEUPH-A-THIEUTH +0xD328 # HANGUL SYLLABLE PHIEUPH-AE +0xD329 # HANGUL SYLLABLE PHIEUPH-AE-KIYEOK +0xD32C # HANGUL SYLLABLE PHIEUPH-AE-NIEUN +0xD330 # HANGUL SYLLABLE PHIEUPH-AE-RIEUL +0xD338 # HANGUL SYLLABLE PHIEUPH-AE-MIEUM +0xD339 # HANGUL SYLLABLE PHIEUPH-AE-PIEUP +0xD33B # HANGUL SYLLABLE PHIEUPH-AE-SIOS +0xD33C # HANGUL SYLLABLE PHIEUPH-AE-SSANGSIOS +0xD33D # HANGUL SYLLABLE PHIEUPH-AE-IEUNG +0xD344 # HANGUL SYLLABLE PHIEUPH-YA +0xD345 # HANGUL SYLLABLE PHIEUPH-YA-KIYEOK +0xD37C # HANGUL SYLLABLE PHIEUPH-EO +0xD37D # HANGUL SYLLABLE PHIEUPH-EO-KIYEOK +0xD380 # HANGUL SYLLABLE PHIEUPH-EO-NIEUN +0xD384 # HANGUL SYLLABLE PHIEUPH-EO-RIEUL +0xD38C # HANGUL SYLLABLE PHIEUPH-EO-MIEUM +0xD38D # HANGUL SYLLABLE PHIEUPH-EO-PIEUP +0xD38F # HANGUL SYLLABLE PHIEUPH-EO-SIOS +0xD390 # HANGUL SYLLABLE PHIEUPH-EO-SSANGSIOS +0xD391 # HANGUL SYLLABLE PHIEUPH-EO-IEUNG +0xD398 # HANGUL SYLLABLE PHIEUPH-E +0xD399 # HANGUL SYLLABLE PHIEUPH-E-KIYEOK +0xD39C # HANGUL SYLLABLE PHIEUPH-E-NIEUN +0xD3A0 # HANGUL SYLLABLE PHIEUPH-E-RIEUL +0xD3A8 # HANGUL SYLLABLE PHIEUPH-E-MIEUM +0xD3A9 # HANGUL SYLLABLE PHIEUPH-E-PIEUP +0xD3AB # HANGUL SYLLABLE PHIEUPH-E-SIOS +0xD3AD # HANGUL SYLLABLE PHIEUPH-E-IEUNG +0xD3B4 # HANGUL SYLLABLE PHIEUPH-YEO +0xD3B8 # HANGUL SYLLABLE PHIEUPH-YEO-NIEUN +0xD3BC # HANGUL SYLLABLE PHIEUPH-YEO-RIEUL +0xD3C4 # HANGUL SYLLABLE PHIEUPH-YEO-MIEUM +0xD3C5 # HANGUL SYLLABLE PHIEUPH-YEO-PIEUP +0xD3C8 # HANGUL SYLLABLE PHIEUPH-YEO-SSANGSIOS +0xD3C9 # HANGUL SYLLABLE PHIEUPH-YEO-IEUNG +0xD3D0 # HANGUL SYLLABLE PHIEUPH-YE +0xD3D8 # HANGUL SYLLABLE PHIEUPH-YE-RIEUL +0xD3E1 # HANGUL SYLLABLE PHIEUPH-YE-PIEUP +0xD3E3 # HANGUL SYLLABLE PHIEUPH-YE-SIOS +0xD3EC # HANGUL SYLLABLE PHIEUPH-O +0xD3ED # HANGUL SYLLABLE PHIEUPH-O-KIYEOK +0xD3F0 # HANGUL SYLLABLE PHIEUPH-O-NIEUN +0xD3F4 # HANGUL SYLLABLE PHIEUPH-O-RIEUL +0xD3FC # HANGUL SYLLABLE PHIEUPH-O-MIEUM +0xD3FD # HANGUL SYLLABLE PHIEUPH-O-PIEUP +0xD3FF # HANGUL SYLLABLE PHIEUPH-O-SIOS +0xD401 # HANGUL SYLLABLE PHIEUPH-O-IEUNG +0xD408 # HANGUL SYLLABLE PHIEUPH-WA +0xD41D # HANGUL SYLLABLE PHIEUPH-WA-IEUNG +0xD440 # HANGUL SYLLABLE PHIEUPH-OE +0xD444 # HANGUL SYLLABLE PHIEUPH-OE-NIEUN +0xD45C # HANGUL SYLLABLE PHIEUPH-YO +0xD460 # HANGUL SYLLABLE PHIEUPH-YO-NIEUN +0xD464 # HANGUL SYLLABLE PHIEUPH-YO-RIEUL +0xD46D # HANGUL SYLLABLE PHIEUPH-YO-PIEUP +0xD46F # HANGUL SYLLABLE PHIEUPH-YO-SIOS +0xD478 # HANGUL SYLLABLE PHIEUPH-U +0xD479 # HANGUL SYLLABLE PHIEUPH-U-KIYEOK +0xD47C # HANGUL SYLLABLE PHIEUPH-U-NIEUN +0xD47F # HANGUL SYLLABLE PHIEUPH-U-TIKEUT +0xD480 # HANGUL SYLLABLE PHIEUPH-U-RIEUL +0xD482 # HANGUL SYLLABLE PHIEUPH-U-RIEULMIEUM +0xD488 # HANGUL SYLLABLE PHIEUPH-U-MIEUM +0xD489 # HANGUL SYLLABLE PHIEUPH-U-PIEUP +0xD48B # HANGUL SYLLABLE PHIEUPH-U-SIOS +0xD48D # HANGUL SYLLABLE PHIEUPH-U-IEUNG +0xD494 # HANGUL SYLLABLE PHIEUPH-WEO +0xD4A9 # HANGUL SYLLABLE PHIEUPH-WEO-IEUNG +0xD4CC # HANGUL SYLLABLE PHIEUPH-WI +0xD4D0 # HANGUL SYLLABLE PHIEUPH-WI-NIEUN +0xD4D4 # HANGUL SYLLABLE PHIEUPH-WI-RIEUL +0xD4DC # HANGUL SYLLABLE PHIEUPH-WI-MIEUM +0xD4DF # HANGUL SYLLABLE PHIEUPH-WI-SIOS +0xD4E8 # HANGUL SYLLABLE PHIEUPH-YU +0xD4EC # HANGUL SYLLABLE PHIEUPH-YU-NIEUN +0xD4F0 # HANGUL SYLLABLE PHIEUPH-YU-RIEUL +0xD4F8 # HANGUL SYLLABLE PHIEUPH-YU-MIEUM +0xD4FB # HANGUL SYLLABLE PHIEUPH-YU-SIOS +0xD4FD # HANGUL SYLLABLE PHIEUPH-YU-IEUNG +0xD504 # HANGUL SYLLABLE PHIEUPH-EU +0xD508 # HANGUL SYLLABLE PHIEUPH-EU-NIEUN +0xD50C # HANGUL SYLLABLE PHIEUPH-EU-RIEUL +0xD514 # HANGUL SYLLABLE PHIEUPH-EU-MIEUM +0xD515 # HANGUL SYLLABLE PHIEUPH-EU-PIEUP +0xD517 # HANGUL SYLLABLE PHIEUPH-EU-SIOS +0xD53C # HANGUL SYLLABLE PHIEUPH-I +0xD53D # HANGUL SYLLABLE PHIEUPH-I-KIYEOK +0xD540 # HANGUL SYLLABLE PHIEUPH-I-NIEUN +0xD544 # HANGUL SYLLABLE PHIEUPH-I-RIEUL +0xD54C # HANGUL SYLLABLE PHIEUPH-I-MIEUM +0xD54D # HANGUL SYLLABLE PHIEUPH-I-PIEUP +0xD54F # HANGUL SYLLABLE PHIEUPH-I-SIOS +0xD551 # HANGUL SYLLABLE PHIEUPH-I-IEUNG +0xD558 # HANGUL SYLLABLE HIEUH-A +0xD559 # HANGUL SYLLABLE HIEUH-A-KIYEOK +0xD55C # HANGUL SYLLABLE HIEUH-A-NIEUN +0xD560 # HANGUL SYLLABLE HIEUH-A-RIEUL +0xD565 # HANGUL SYLLABLE HIEUH-A-RIEULTHIEUTH +0xD568 # HANGUL SYLLABLE HIEUH-A-MIEUM +0xD569 # HANGUL SYLLABLE HIEUH-A-PIEUP +0xD56B # HANGUL SYLLABLE HIEUH-A-SIOS +0xD56D # HANGUL SYLLABLE HIEUH-A-IEUNG +0xD574 # HANGUL SYLLABLE HIEUH-AE +0xD575 # HANGUL SYLLABLE HIEUH-AE-KIYEOK +0xD578 # HANGUL SYLLABLE HIEUH-AE-NIEUN +0xD57C # HANGUL SYLLABLE HIEUH-AE-RIEUL +0xD584 # HANGUL SYLLABLE HIEUH-AE-MIEUM +0xD585 # HANGUL SYLLABLE HIEUH-AE-PIEUP +0xD587 # HANGUL SYLLABLE HIEUH-AE-SIOS +0xD588 # HANGUL SYLLABLE HIEUH-AE-SSANGSIOS +0xD589 # HANGUL SYLLABLE HIEUH-AE-IEUNG +0xD590 # HANGUL SYLLABLE HIEUH-YA +0xD5A5 # HANGUL SYLLABLE HIEUH-YA-IEUNG +0xD5C8 # HANGUL SYLLABLE HIEUH-EO +0xD5C9 # HANGUL SYLLABLE HIEUH-EO-KIYEOK +0xD5CC # HANGUL SYLLABLE HIEUH-EO-NIEUN +0xD5D0 # HANGUL SYLLABLE HIEUH-EO-RIEUL +0xD5D2 # HANGUL SYLLABLE HIEUH-EO-RIEULMIEUM +0xD5D8 # HANGUL SYLLABLE HIEUH-EO-MIEUM +0xD5D9 # HANGUL SYLLABLE HIEUH-EO-PIEUP +0xD5DB # HANGUL SYLLABLE HIEUH-EO-SIOS +0xD5DD # HANGUL SYLLABLE HIEUH-EO-IEUNG +0xD5E4 # HANGUL SYLLABLE HIEUH-E +0xD5E5 # HANGUL SYLLABLE HIEUH-E-KIYEOK +0xD5E8 # HANGUL SYLLABLE HIEUH-E-NIEUN +0xD5EC # HANGUL SYLLABLE HIEUH-E-RIEUL +0xD5F4 # HANGUL SYLLABLE HIEUH-E-MIEUM +0xD5F5 # HANGUL SYLLABLE HIEUH-E-PIEUP +0xD5F7 # HANGUL SYLLABLE HIEUH-E-SIOS +0xD5F9 # HANGUL SYLLABLE HIEUH-E-IEUNG +0xD600 # HANGUL SYLLABLE HIEUH-YEO +0xD601 # HANGUL SYLLABLE HIEUH-YEO-KIYEOK +0xD604 # HANGUL SYLLABLE HIEUH-YEO-NIEUN +0xD608 # HANGUL SYLLABLE HIEUH-YEO-RIEUL +0xD610 # HANGUL SYLLABLE HIEUH-YEO-MIEUM +0xD611 # HANGUL SYLLABLE HIEUH-YEO-PIEUP +0xD613 # HANGUL SYLLABLE HIEUH-YEO-SIOS +0xD614 # HANGUL SYLLABLE HIEUH-YEO-SSANGSIOS +0xD615 # HANGUL SYLLABLE HIEUH-YEO-IEUNG +0xD61C # HANGUL SYLLABLE HIEUH-YE +0xD620 # HANGUL SYLLABLE HIEUH-YE-NIEUN +0xD624 # HANGUL SYLLABLE HIEUH-YE-RIEUL +0xD62D # HANGUL SYLLABLE HIEUH-YE-PIEUP +0xD638 # HANGUL SYLLABLE HIEUH-O +0xD639 # HANGUL SYLLABLE HIEUH-O-KIYEOK +0xD63C # HANGUL SYLLABLE HIEUH-O-NIEUN +0xD640 # HANGUL SYLLABLE HIEUH-O-RIEUL +0xD645 # HANGUL SYLLABLE HIEUH-O-RIEULTHIEUTH +0xD648 # HANGUL SYLLABLE HIEUH-O-MIEUM +0xD649 # HANGUL SYLLABLE HIEUH-O-PIEUP +0xD64B # HANGUL SYLLABLE HIEUH-O-SIOS +0xD64D # HANGUL SYLLABLE HIEUH-O-IEUNG +0xD651 # HANGUL SYLLABLE HIEUH-O-THIEUTH +0xD654 # HANGUL SYLLABLE HIEUH-WA +0xD655 # HANGUL SYLLABLE HIEUH-WA-KIYEOK +0xD658 # HANGUL SYLLABLE HIEUH-WA-NIEUN +0xD65C # HANGUL SYLLABLE HIEUH-WA-RIEUL +0xD667 # HANGUL SYLLABLE HIEUH-WA-SIOS +0xD669 # HANGUL SYLLABLE HIEUH-WA-IEUNG +0xD670 # HANGUL SYLLABLE HIEUH-WAE +0xD671 # HANGUL SYLLABLE HIEUH-WAE-KIYEOK +0xD674 # HANGUL SYLLABLE HIEUH-WAE-NIEUN +0xD683 # HANGUL SYLLABLE HIEUH-WAE-SIOS +0xD685 # HANGUL SYLLABLE HIEUH-WAE-IEUNG +0xD68C # HANGUL SYLLABLE HIEUH-OE +0xD68D # HANGUL SYLLABLE HIEUH-OE-KIYEOK +0xD690 # HANGUL SYLLABLE HIEUH-OE-NIEUN +0xD694 # HANGUL SYLLABLE HIEUH-OE-RIEUL +0xD69D # HANGUL SYLLABLE HIEUH-OE-PIEUP +0xD69F # HANGUL SYLLABLE HIEUH-OE-SIOS +0xD6A1 # HANGUL SYLLABLE HIEUH-OE-IEUNG +0xD6A8 # HANGUL SYLLABLE HIEUH-YO +0xD6AC # HANGUL SYLLABLE HIEUH-YO-NIEUN +0xD6B0 # HANGUL SYLLABLE HIEUH-YO-RIEUL +0xD6B9 # HANGUL SYLLABLE HIEUH-YO-PIEUP +0xD6BB # HANGUL SYLLABLE HIEUH-YO-SIOS +0xD6C4 # HANGUL SYLLABLE HIEUH-U +0xD6C5 # HANGUL SYLLABLE HIEUH-U-KIYEOK +0xD6C8 # HANGUL SYLLABLE HIEUH-U-NIEUN +0xD6CC # HANGUL SYLLABLE HIEUH-U-RIEUL +0xD6D1 # HANGUL SYLLABLE HIEUH-U-RIEULTHIEUTH +0xD6D4 # HANGUL SYLLABLE HIEUH-U-MIEUM +0xD6D7 # HANGUL SYLLABLE HIEUH-U-SIOS +0xD6D9 # HANGUL SYLLABLE HIEUH-U-IEUNG +0xD6E0 # HANGUL SYLLABLE HIEUH-WEO +0xD6E4 # HANGUL SYLLABLE HIEUH-WEO-NIEUN +0xD6E8 # HANGUL SYLLABLE HIEUH-WEO-RIEUL +0xD6F0 # HANGUL SYLLABLE HIEUH-WEO-MIEUM +0xD6F5 # HANGUL SYLLABLE HIEUH-WEO-IEUNG +0xD6FC # HANGUL SYLLABLE HIEUH-WE +0xD6FD # HANGUL SYLLABLE HIEUH-WE-KIYEOK +0xD700 # HANGUL SYLLABLE HIEUH-WE-NIEUN +0xD704 # HANGUL SYLLABLE HIEUH-WE-RIEUL +0xD711 # HANGUL SYLLABLE HIEUH-WE-IEUNG +0xD718 # HANGUL SYLLABLE HIEUH-WI +0xD719 # HANGUL SYLLABLE HIEUH-WI-KIYEOK +0xD71C # HANGUL SYLLABLE HIEUH-WI-NIEUN +0xD720 # HANGUL SYLLABLE HIEUH-WI-RIEUL +0xD728 # HANGUL SYLLABLE HIEUH-WI-MIEUM +0xD729 # HANGUL SYLLABLE HIEUH-WI-PIEUP +0xD72B # HANGUL SYLLABLE HIEUH-WI-SIOS +0xD72D # HANGUL SYLLABLE HIEUH-WI-IEUNG +0xD734 # HANGUL SYLLABLE HIEUH-YU +0xD735 # HANGUL SYLLABLE HIEUH-YU-KIYEOK +0xD738 # HANGUL SYLLABLE HIEUH-YU-NIEUN +0xD73C # HANGUL SYLLABLE HIEUH-YU-RIEUL +0xD744 # HANGUL SYLLABLE HIEUH-YU-MIEUM +0xD747 # HANGUL SYLLABLE HIEUH-YU-SIOS +0xD749 # HANGUL SYLLABLE HIEUH-YU-IEUNG +0xD750 # HANGUL SYLLABLE HIEUH-EU +0xD751 # HANGUL SYLLABLE HIEUH-EU-KIYEOK +0xD754 # HANGUL SYLLABLE HIEUH-EU-NIEUN +0xD756 # HANGUL SYLLABLE HIEUH-EU-NIEUNHIEUH +0xD757 # HANGUL SYLLABLE HIEUH-EU-TIKEUT +0xD758 # HANGUL SYLLABLE HIEUH-EU-RIEUL +0xD759 # HANGUL SYLLABLE HIEUH-EU-RIEULKIYEOK +0xD760 # HANGUL SYLLABLE HIEUH-EU-MIEUM +0xD761 # HANGUL SYLLABLE HIEUH-EU-PIEUP +0xD763 # HANGUL SYLLABLE HIEUH-EU-SIOS +0xD765 # HANGUL SYLLABLE HIEUH-EU-IEUNG +0xD769 # HANGUL SYLLABLE HIEUH-EU-THIEUTH +0xD76C # HANGUL SYLLABLE HIEUH-YI +0xD770 # HANGUL SYLLABLE HIEUH-YI-NIEUN +0xD774 # HANGUL SYLLABLE HIEUH-YI-RIEUL +0xD77C # HANGUL SYLLABLE HIEUH-YI-MIEUM +0xD77D # HANGUL SYLLABLE HIEUH-YI-PIEUP +0xD781 # HANGUL SYLLABLE HIEUH-YI-IEUNG +0xD788 # HANGUL SYLLABLE HIEUH-I +0xD789 # HANGUL SYLLABLE HIEUH-I-KIYEOK +0xD78C # HANGUL SYLLABLE HIEUH-I-NIEUN +0xD790 # HANGUL SYLLABLE HIEUH-I-RIEUL +0xD798 # HANGUL SYLLABLE HIEUH-I-MIEUM +0xD799 # HANGUL SYLLABLE HIEUH-I-PIEUP +0xD79B # HANGUL SYLLABLE HIEUH-I-SIOS +0xD79D # HANGUL SYLLABLE HIEUH-I-IEUNG diff --git a/fontconfig/fc-lang/kok.orth b/fontconfig/fc-lang/kok.orth index e5cbe8703..f7661e923 100644 --- a/fontconfig/fc-lang/kok.orth +++ b/fontconfig/fc-lang/kok.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/kok.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Kokani (Devanagari script) (KOK) -include hi.orth +# +# fontconfig/fc-lang/kok.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Kokani (Devanagari script) (KOK) +include hi.orth diff --git a/fontconfig/fc-lang/ku_am.orth b/fontconfig/fc-lang/ku_am.orth index 15a565966..c9f482100 100644 --- a/fontconfig/fc-lang/ku_am.orth +++ b/fontconfig/fc-lang/ku_am.orth @@ -1,91 +1,91 @@ -# -# fontconfig/fc-lang/ku_am.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Kurdish in Armenia (ku-AM) -# -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0427 -0428 -0429 -042a -042d -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0447 -0448 -0449 -044a -044d -04ba -04bb -04d8 -04d9 -04e6 -04e7 -051a-051d +# +# fontconfig/fc-lang/ku_am.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Kurdish in Armenia (ku-AM) +# +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0427 +0428 +0429 +042a +042d +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0447 +0448 +0449 +044a +044d +04ba +04bb +04d8 +04d9 +04e6 +04e7 +051a-051d diff --git a/fontconfig/fc-lang/ku_ir.orth b/fontconfig/fc-lang/ku_ir.orth index 407502f5a..233b4aab6 100644 --- a/fontconfig/fc-lang/ku_ir.orth +++ b/fontconfig/fc-lang/ku_ir.orth @@ -1,49 +1,49 @@ -# -# fontconfig/fc-lang/ku_ir.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Kurdish in Iran (KU-IR) -# -# Data from Roozbeh Pournader -# -# 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 +# +# Since the Unicode Presentation Forms don't contain some of the Kurdish +# letters, we are going with the general forms instead of the Presentation +# forms, unlike Arabic, Persian, or Urdu. +# +0626-0628 +062a +062c-062f +0631-0634 +0639-063a +0641-0642 +0644-0648 +067e +0686 +0692 +0698 +06a4 +06a9 +06af +06b5 +06c6 +06cc +06ce diff --git a/fontconfig/fc-lang/kum.orth b/fontconfig/fc-lang/kum.orth index cb6b470c4..20f0b51b6 100644 --- a/fontconfig/fc-lang/kum.orth +++ b/fontconfig/fc-lang/kum.orth @@ -1,96 +1,96 @@ -# -# fontconfig/fc-lang/kum.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Kumyk (KUM) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 +# +# fontconfig/fc-lang/kum.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Kumyk (KUM) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/kv.orth b/fontconfig/fc-lang/kv.orth index cb2b02614..5dbb28bb6 100644 --- a/fontconfig/fc-lang/kv.orth +++ b/fontconfig/fc-lang/kv.orth @@ -1,101 +1,101 @@ -# -# fontconfig/fc-lang/kv.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Komi (Komi-Permyak/Komi-Siryan) (KV) -# -# I've taken Komi-Permyak as it contains two extra codepoints -0401 -0406 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -0456 -04e6 -04e7 +# +# fontconfig/fc-lang/kv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Komi (Komi-Permyak/Komi-Siryan) (KV) +# +# I've taken Komi-Permyak as it contains two extra codepoints +0401 +0406 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +0456 +04e6 +04e7 diff --git a/fontconfig/fc-lang/kw.orth b/fontconfig/fc-lang/kw.orth index df6eac36a..3933a6801 100644 --- a/fontconfig/fc-lang/kw.orth +++ b/fontconfig/fc-lang/kw.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/kw.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Cornish (KW) -# -# Orthography from http://www.evertype.com/alphabets/cornish.pdf -# -0041-005a -0061-007a -0100-0101 -0112-0113 -012a-012b -014c-014d -016a-016b -0232-0233 +# +# fontconfig/fc-lang/kw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Cornish (KW) +# +# Orthography from http://www.evertype.com/alphabets/cornish.pdf +# +0041-005a +0061-007a +0100-0101 +0112-0113 +012a-012b +014c-014d +016a-016b +0232-0233 diff --git a/fontconfig/fc-lang/ky.orth b/fontconfig/fc-lang/ky.orth index a7fd3d437..bf7dbe0d2 100644 --- a/fontconfig/fc-lang/ky.orth +++ b/fontconfig/fc-lang/ky.orth @@ -1,102 +1,102 @@ -# -# fontconfig/fc-lang/ky.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Kirgiz (KY) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) -#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) -04a2 -04a3 -04ae -04af +# +# fontconfig/fc-lang/ky.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Kirgiz (KY) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA (Historic cyrillic letter) +#0473 # CYRILLIC SMALL LETTER FITA (Historic cyrillic letter) +04a2 +04a3 +04ae +04af diff --git a/fontconfig/fc-lang/la.orth b/fontconfig/fc-lang/la.orth index 1c1a1291c..359b36be7 100644 --- a/fontconfig/fc-lang/la.orth +++ b/fontconfig/fc-lang/la.orth @@ -1,31 +1,31 @@ -# -# fontconfig/fc-lang/la.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Latin (LA) -0041-005a -0061-007a -0100-0101 -0112-0113 -012a-012d -014c-014f -016a-016d +# +# fontconfig/fc-lang/la.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Latin (LA) +0041-005a +0061-007a +0100-0101 +0112-0113 +012a-012d +014c-014f +016a-016d diff --git a/fontconfig/fc-lang/lb.orth b/fontconfig/fc-lang/lb.orth index ba299af61..51cbcc5d5 100644 --- a/fontconfig/fc-lang/lb.orth +++ b/fontconfig/fc-lang/lb.orth @@ -1,62 +1,62 @@ -# -# fontconfig/fc-lang/lb.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Luxembourgish (Letzeburgesch) (LB) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -# -# Required characters -# -00c4 -00e4 -00c9 -00e9 -00cb -00eb -00d6 -00f6 -00dc -00fc -# -# Important characters -# -00c2 -00e2 -00c8 -00e8 -00ca -00ea -00ce -00ee -#e006 # LATIN CAPITAL LETTER M WITH CIRCUMFLEX (no UCS) -#e007 # LATIN SMALL LETTER M WITH CIRCUMFLEX (no UCS) -#e008 # LATIN CAPITAL LETTER N WITH CIRCUMFLEX (no UCS) -#e009 # LATIN SMALL LETTER N WITH CIRCUMFLEX (no UCS) -00d4 -00f4 -00db -00fb -00df +# +# fontconfig/fc-lang/lb.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Luxembourgish (Letzeburgesch) (LB) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +# +# Required characters +# +00c4 +00e4 +00c9 +00e9 +00cb +00eb +00d6 +00f6 +00dc +00fc +# +# Important characters +# +00c2 +00e2 +00c8 +00e8 +00ca +00ea +00ce +00ee +#e006 # LATIN CAPITAL LETTER M WITH CIRCUMFLEX (no UCS) +#e007 # LATIN SMALL LETTER M WITH CIRCUMFLEX (no UCS) +#e008 # LATIN CAPITAL LETTER N WITH CIRCUMFLEX (no UCS) +#e009 # LATIN SMALL LETTER N WITH CIRCUMFLEX (no UCS) +00d4 +00f4 +00db +00fb +00df diff --git a/fontconfig/fc-lang/lez.orth b/fontconfig/fc-lang/lez.orth index 1f2ac70a3..541d2faa6 100644 --- a/fontconfig/fc-lang/lez.orth +++ b/fontconfig/fc-lang/lez.orth @@ -1,97 +1,97 @@ -# -# fontconfig/fc-lang/lez.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Lezghian (Lezgian) (LEZ) -# -0401 -0406 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 +# +# fontconfig/fc-lang/lez.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Lezghian (Lezgian) (LEZ) +# +0401 +0406 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/ln.orth b/fontconfig/fc-lang/ln.orth index 49575ced4..659e2be20 100644 --- a/fontconfig/fc-lang/ln.orth +++ b/fontconfig/fc-lang/ln.orth @@ -1,43 +1,43 @@ -# -# fontconfig/fc-lang/ln.orth -# -# Copyright © 2006 Danis Jacquerye -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Lingala (LN) -0041-005a # r used in borrowed words, x and q unused. -0061-007a -00c1-00c2 # tonal orthography -00c9-00ca -00cd-00ce -00d3-00d4 -00da-00db -00e1-00e2 -00e9-00ea -00ed-00ee -00f3-00f4 -00fa-00fb -011a-011b -0186 -0190 -0254 -025b -0301-0302 # combining diacritics for accented 0186, 0190, 0254, 025b -030c +# +# fontconfig/fc-lang/ln.orth +# +# Copyright © 2006 Danis Jacquerye +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Lingala (LN) +0041-005a # r used in borrowed words, x and q unused. +0061-007a +00c1-00c2 # tonal orthography +00c9-00ca +00cd-00ce +00d3-00d4 +00da-00db +00e1-00e2 +00e9-00ea +00ed-00ee +00f3-00f4 +00fa-00fb +011a-011b +0186 +0190 +0254 +025b +0301-0302 # combining diacritics for accented 0186, 0190, 0254, 025b +030c diff --git a/fontconfig/fc-lang/lo.orth b/fontconfig/fc-lang/lo.orth index 6b6333bc2..42cfaeb3b 100644 --- a/fontconfig/fc-lang/lo.orth +++ b/fontconfig/fc-lang/lo.orth @@ -1,45 +1,45 @@ -# -# fontconfig/fc-lang/lo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Lao (lo) -# -# Taken from the Unicode coverage of this language -# -0e81-0e82 -0e84 -0e87-0e88 -0e8a -0e8d -0e94-0e97 -0e99-0e9f -0ea1-0ea3 -0ea5 -0ea7 -0eaa-0eab -0ead-0eb9 -0ebb-0ebd -0ec0-0ec4 -0ec6 -0ec8-0ecd -#0ed0-0ed9 # Digits -0edc-0edd +# +# fontconfig/fc-lang/lo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Lao (lo) +# +# Taken from the Unicode coverage of this language +# +0e81-0e82 +0e84 +0e87-0e88 +0e8a +0e8d +0e94-0e97 +0e99-0e9f +0ea1-0ea3 +0ea5 +0ea7 +0eaa-0eab +0ead-0eb9 +0ebb-0ebd +0ec0-0ec4 +0ec6 +0ec8-0ecd +#0ed0-0ed9 # Digits +0edc-0edd diff --git a/fontconfig/fc-lang/lt.orth b/fontconfig/fc-lang/lt.orth index 946ba19a2..582300a55 100644 --- a/fontconfig/fc-lang/lt.orth +++ b/fontconfig/fc-lang/lt.orth @@ -1,43 +1,43 @@ -# -# fontconfig/fc-lang/lt.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Lithuanian (LT) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -0104-0105 -010c-010d -#0106-0109 -0116-0117 -0118-0119 -012e-012f -0160-0161 -016a-016b -0172-0173 -017d-017e -#2019-201a # single quotes -#201d-201e # double quotes +# +# fontconfig/fc-lang/lt.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Lithuanian (LT) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +0104-0105 +010c-010d +#0106-0109 +0116-0117 +0118-0119 +012e-012f +0160-0161 +016a-016b +0172-0173 +017d-017e +#2019-201a # single quotes +#201d-201e # double quotes diff --git a/fontconfig/fc-lang/lv.orth b/fontconfig/fc-lang/lv.orth index 49b971055..e83cbd7d1 100644 --- a/fontconfig/fc-lang/lv.orth +++ b/fontconfig/fc-lang/lv.orth @@ -1,44 +1,44 @@ -# -# fontconfig/fc-lang/lv.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Latvian (LV) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -0100-0101 -010c-010d -0112-0113 -0122-0123 -012a-012b -0136-0137 -013b-013c -0145-0146 -014c-014d -0156-0157 -0160-0161 -016a-016b -017d-017e +# +# fontconfig/fc-lang/lv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Latvian (LV) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +0100-0101 +010c-010d +0112-0113 +0122-0123 +012a-012b +0136-0137 +013b-013c +0145-0146 +014c-014d +0156-0157 +0160-0161 +016a-016b +017d-017e diff --git a/fontconfig/fc-lang/mai.orth b/fontconfig/fc-lang/mai.orth index e66119007..943e74801 100644 --- a/fontconfig/fc-lang/mai.orth +++ b/fontconfig/fc-lang/mai.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/mai.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Maithili (Devanagari script) (MAI) -include hi.orth +# +# fontconfig/fc-lang/mai.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Maithili (Devanagari script) (MAI) +include hi.orth diff --git a/fontconfig/fc-lang/mg.orth b/fontconfig/fc-lang/mg.orth index c79c9e030..99778b84e 100644 --- a/fontconfig/fc-lang/mg.orth +++ b/fontconfig/fc-lang/mg.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/mg.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Malagasy (MG) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c1 -00e1 -#e010 # LATIN CAPITAL LETTER N WITH DIAERESIS -#e011 # LATIN SMALL LETTER N WITH DIAERESIS -00d4 -00f4 +# +# fontconfig/fc-lang/mg.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Malagasy (MG) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +#e010 # LATIN CAPITAL LETTER N WITH DIAERESIS +#e011 # LATIN SMALL LETTER N WITH DIAERESIS +00d4 +00f4 diff --git a/fontconfig/fc-lang/mh.orth b/fontconfig/fc-lang/mh.orth index 5a0b1c93f..1ebf23b34 100644 --- a/fontconfig/fc-lang/mh.orth +++ b/fontconfig/fc-lang/mh.orth @@ -1,45 +1,45 @@ -# -# fontconfig/fc-lang/mh.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Marshallese (MH) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0100 -0101 -013b -013c -#e00a # LATIN CAPITAL LETTER M WITH CEDILLA (no UCS) -#e00b # LATIN SMALL LETTER M WITH CEDILLA (no UCS) -#e00c # LATIN CAPITAL LETTER N WITH MACRON (no UCS) -#e00d # LATIN SMALL LETTER N WITH MACRON (no UCS) -0145 -0146 -014c -014d -#e00e # LATIN CAPITAL LETTER O WITH CEDILLA (no UCS) -#e00f # LATIN SMALL LETTER O WITH CEDILLA (no UCS) -016a -016b +# +# fontconfig/fc-lang/mh.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Marshallese (MH) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0100 +0101 +013b +013c +#e00a # LATIN CAPITAL LETTER M WITH CEDILLA (no UCS) +#e00b # LATIN SMALL LETTER M WITH CEDILLA (no UCS) +#e00c # LATIN CAPITAL LETTER N WITH MACRON (no UCS) +#e00d # LATIN SMALL LETTER N WITH MACRON (no UCS) +0145 +0146 +014c +014d +#e00e # LATIN CAPITAL LETTER O WITH CEDILLA (no UCS) +#e00f # LATIN SMALL LETTER O WITH CEDILLA (no UCS) +016a +016b diff --git a/fontconfig/fc-lang/mi.orth b/fontconfig/fc-lang/mi.orth index 81a5c02aa..a506c2b18 100644 --- a/fontconfig/fc-lang/mi.orth +++ b/fontconfig/fc-lang/mi.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/mi.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Maori (MI) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0100-0101 -0112-0113 -012a-012b -014c-014d -016a-016b -1e34-1e35 # Ngai Tahu specific +# +# fontconfig/fc-lang/mi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Maori (MI) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0100-0101 +0112-0113 +012a-012b +014c-014d +016a-016b +1e34-1e35 # Ngai Tahu specific diff --git a/fontconfig/fc-lang/mk.orth b/fontconfig/fc-lang/mk.orth index 0705a9f75..908e5922c 100644 --- a/fontconfig/fc-lang/mk.orth +++ b/fontconfig/fc-lang/mk.orth @@ -1,40 +1,40 @@ -# -# fontconfig/fc-lang/mk.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Macedonian (MK) -0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE -0403 -0405 -0408-040a -040c -040d # CYRILLIC CAPITAL LETTER I WITH GRAVE -040f -0410-0418 -041a-0428 -0450 # CYRILLIC SMALL LETTER IE WITH GRAVE -0453 -0455 -0458-045a -045c -045d # CYRILLIC SMALL LETTER I WITH GRAVE -045f +# +# fontconfig/fc-lang/mk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Macedonian (MK) +0400 # CYRILLIC CAPITAL LETTER IE WITH GRAVE +0403 +0405 +0408-040a +040c +040d # CYRILLIC CAPITAL LETTER I WITH GRAVE +040f +0410-0418 +041a-0428 +0450 # CYRILLIC SMALL LETTER IE WITH GRAVE +0453 +0455 +0458-045a +045c +045d # CYRILLIC SMALL LETTER I WITH GRAVE +045f diff --git a/fontconfig/fc-lang/ml.orth b/fontconfig/fc-lang/ml.orth index 46a25a750..2d62d65ea 100644 --- a/fontconfig/fc-lang/ml.orth +++ b/fontconfig/fc-lang/ml.orth @@ -1,38 +1,38 @@ -# -# fontconfig/fc-lang/ml.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Malayalam (ml) -# -# Taken from the Unicode coverage of this language -# -0d02-0d03 -0d05-0d0c -0d0e-0d10 -0d12-0d28 -0d2a-0d39 -0d3e-0d43 -0d46-0d48 -0d4a-0d4d -0d57 -0d60-0d61 -#0d66-0d6f # Digits +# +# fontconfig/fc-lang/ml.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Malayalam (ml) +# +# Taken from the Unicode coverage of this language +# +0d02-0d03 +0d05-0d0c +0d0e-0d10 +0d12-0d28 +0d2a-0d39 +0d3e-0d43 +0d46-0d48 +0d4a-0d4d +0d57 +0d60-0d61 +#0d66-0d6f # Digits diff --git a/fontconfig/fc-lang/mn_cn.orth b/fontconfig/fc-lang/mn_cn.orth index 1647dceb1..5c4a8af23 100644 --- a/fontconfig/fc-lang/mn_cn.orth +++ b/fontconfig/fc-lang/mn_cn.orth @@ -1,37 +1,37 @@ -# -# fontconfig/fc-lang/mn_cn.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Mongolian in China (mn-CN) -# -# Taken from the Unicode coverage of this language -# -# Basic letters -1820-1842 -# Todo letters -1843-185c -# Sibe letters -185d-1872 -# Manchu letters -1873-1877 -# Extensions for Sanskrit and Tibetan -1880-18a9 +# +# fontconfig/fc-lang/mn_cn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Mongolian in China (mn-CN) +# +# Taken from the Unicode coverage of this language +# +# Basic letters +1820-1842 +# Todo letters +1843-185c +# Sibe letters +185d-1872 +# Manchu letters +1873-1877 +# Extensions for Sanskrit and Tibetan +1880-18a9 diff --git a/fontconfig/fc-lang/mo.orth b/fontconfig/fc-lang/mo.orth index f76aeec5d..5b22c61f4 100644 --- a/fontconfig/fc-lang/mo.orth +++ b/fontconfig/fc-lang/mo.orth @@ -1,37 +1,37 @@ -# -# fontconfig/fc-lang/mo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Moldavian (MO) -0041-005a -0061-007a -00c2 -00ce -00e2 -00ee -0102-0103 -0218-021b # Comma below forms (preferred over cedilla) -0401 -0410-044f -0451 -#2019-201a # single quotes -#201d-201e # double quotes +# +# fontconfig/fc-lang/mo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Moldavian (MO) +0041-005a +0061-007a +00c2 +00ce +00e2 +00ee +0102-0103 +0218-021b # Comma below forms (preferred over cedilla) +0401 +0410-044f +0451 +#2019-201a # single quotes +#201d-201e # double quotes diff --git a/fontconfig/fc-lang/mr.orth b/fontconfig/fc-lang/mr.orth index d8f457d33..26399093f 100644 --- a/fontconfig/fc-lang/mr.orth +++ b/fontconfig/fc-lang/mr.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/mr.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Marathi (Devanagari script) (MR) -include hi.orth +# +# fontconfig/fc-lang/mr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Marathi (Devanagari script) (MR) +include hi.orth diff --git a/fontconfig/fc-lang/mt.orth b/fontconfig/fc-lang/mt.orth index 1e8cbfed2..0172ad5e2 100644 --- a/fontconfig/fc-lang/mt.orth +++ b/fontconfig/fc-lang/mt.orth @@ -1,67 +1,67 @@ -# -# fontconfig/fc-lang/mt.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Maltese (MT) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c0 -#00c1 -#00c2 -00c8 -#00c9 -#00ca -00cc -#00cd -00ce -00d2 -#00d3 -#00d4 -00d9 -#00da -#00db -00e0 -#00e1 -#00e2 -00e8 -#00e9 -#00ea -00ec -#00ed -00ee -00f2 -#00f3 -#00f4 -00f9 -#00fa -#00fb -010a-010b -0120-0121 -0126-0127 -017b-017c -#02bc -# +# +# fontconfig/fc-lang/mt.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Maltese (MT) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +#00c1 +#00c2 +00c8 +#00c9 +#00ca +00cc +#00cd +00ce +00d2 +#00d3 +#00d4 +00d9 +#00da +#00db +00e0 +#00e1 +#00e2 +00e8 +#00e9 +#00ea +00ec +#00ed +00ee +00f2 +#00f3 +#00f4 +00f9 +#00fa +#00fb +010a-010b +0120-0121 +0126-0127 +017b-017c +#02bc +# diff --git a/fontconfig/fc-lang/my.orth b/fontconfig/fc-lang/my.orth index c660f7e22..3e3ecf890 100644 --- a/fontconfig/fc-lang/my.orth +++ b/fontconfig/fc-lang/my.orth @@ -1,37 +1,37 @@ -# -# fontconfig/fc-lang/my.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Burmese (Myanmar) (MY) -# -# Orthography from Unicode range (U+1000-U+1059) -# -# Consonants -1000-1020 -# Independent vowels -1021 -1023-1027 -1029-102a -# Dependent vowel signs -102c-1032 -# Pali and Sanskrit extensions -#1050-1059 +# +# fontconfig/fc-lang/my.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Burmese (Myanmar) (MY) +# +# Orthography from Unicode range (U+1000-U+1059) +# +# Consonants +1000-1020 +# Independent vowels +1021 +1023-1027 +1029-102a +# Dependent vowel signs +102c-1032 +# Pali and Sanskrit extensions +#1050-1059 diff --git a/fontconfig/fc-lang/nb.orth b/fontconfig/fc-lang/nb.orth index b904b05e5..1cac7f584 100644 --- a/fontconfig/fc-lang/nb.orth +++ b/fontconfig/fc-lang/nb.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/nb.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Norwegian Bokmål (nb) -include no.orth +# +# fontconfig/fc-lang/nb.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Norwegian Bokmål (nb) +include no.orth diff --git a/fontconfig/fc-lang/nds.orth b/fontconfig/fc-lang/nds.orth index 73188aa21..8a6546aa0 100644 --- a/fontconfig/fc-lang/nds.orth +++ b/fontconfig/fc-lang/nds.orth @@ -1,40 +1,40 @@ -# -# fontconfig/fc-lang/nds.orth -# -# Copyright © 2004 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Low Saxon (NDS) -# -# Sources: -# Kenneth Rohde Christiansen -# 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 +# ANS - +# Algemeyne Neddersassische Schryvwys' (DE) +# Algemeyne Nedersaksische Schryvwyse (NL) +# +0041-005a # LATIN CAPITAL LETTER A through Z +0061-007a # LATIN SMALL LETTER A through Z +00C4 # LATIN CAPITAL LETTER A WITH DIAERESIS +00D6 # LATIN CAPITAL LETTER O WITH DIAERESIS +00DC # LATIN CAPITAL LETTER U WITH DIAERESIS +00DF # LATIN SMALL LETTER SHARP S (German) +00E4 # LATIN SMALL LETTER A WITH DIAERESIS +00F6 # LATIN SMALL LETTER O WITH DIAERESIS +00FC # LATIN SMALL LETTER U WITH DIAERESIS diff --git a/fontconfig/fc-lang/ne.orth b/fontconfig/fc-lang/ne.orth index 782e7939a..246386f0b 100644 --- a/fontconfig/fc-lang/ne.orth +++ b/fontconfig/fc-lang/ne.orth @@ -1,26 +1,26 @@ -# -# fontconfig/fc-lang/ne.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Nepali (Devanagari script) (NE) -include hi.orth --090C-090E # See bug 30685 +# +# fontconfig/fc-lang/ne.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Nepali (Devanagari script) (NE) +include hi.orth +-090C-090E # See bug 30685 diff --git a/fontconfig/fc-lang/nl.orth b/fontconfig/fc-lang/nl.orth index f694963c0..ea896fb51 100644 --- a/fontconfig/fc-lang/nl.orth +++ b/fontconfig/fc-lang/nl.orth @@ -1,63 +1,63 @@ -# -# fontconfig/fc-lang/nl.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Dutch (NL) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c1 -00c2 -00c4 -00c8 -00c9 -00ca -00cb -00cd -00cf -00d3 -00d4 -00d6 -00da -00db -00dc -00e1 -00e2 -00e4 -00e8 -00e9 -00ea -00eb -00ed -00ef -00f3 -00f4 -00f6 -00fa -00fb -00fc -#0132-0133 # IJ and ij ligatures - +# +# fontconfig/fc-lang/nl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Dutch (NL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00c2 +00c4 +00c8 +00c9 +00ca +00cb +00cd +00cf +00d3 +00d4 +00d6 +00da +00db +00dc +00e1 +00e2 +00e4 +00e8 +00e9 +00ea +00eb +00ed +00ef +00f3 +00f4 +00f6 +00fa +00fb +00fc +#0132-0133 # IJ and ij ligatures + diff --git a/fontconfig/fc-lang/nn.orth b/fontconfig/fc-lang/nn.orth index 01d325da9..3e9224d50 100644 --- a/fontconfig/fc-lang/nn.orth +++ b/fontconfig/fc-lang/nn.orth @@ -1,43 +1,43 @@ -# -# fontconfig/fc-lang/nn.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Norwegian Nynorsk (NN) -0041-005a -0061-007a -#00ab # double angle quotes -#00bb # double angle quotes -00c0 -00c4-00c6 -00c9-00ca -00d2-00d4 -00d6 -00d8 -00dc -00e0 -00e4-00e6 -00e9-00ea -00f2-00f4 -00f6 -00f8 -00fc -#2039-203a # single quotes +# +# fontconfig/fc-lang/nn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Norwegian Nynorsk (NN) +0041-005a +0061-007a +#00ab # double angle quotes +#00bb # double angle quotes +00c0 +00c4-00c6 +00c9-00ca +00d2-00d4 +00d6 +00d8 +00dc +00e0 +00e4-00e6 +00e9-00ea +00f2-00f4 +00f6 +00f8 +00fc +#2039-203a # single quotes diff --git a/fontconfig/fc-lang/no.orth b/fontconfig/fc-lang/no.orth index 3b00143d8..67e0ae9ac 100644 --- a/fontconfig/fc-lang/no.orth +++ b/fontconfig/fc-lang/no.orth @@ -1,68 +1,68 @@ -# -# fontconfig/fc-lang/no.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Norwegian (Bokmål) (NO) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00ab -#00bb -00c0 -#00c1 -#00c2 -#00c4 -00c5 -00c6 -#00c7 -#00c8 -00c9 -00ca -#00cb -00d2 -00d3 -00d4 -#00d6 -00d8 -#00dc -00e0 -#00e1 -#00e2 -#00e4 -00e5 -00e6 -#00e7 -#00e8 -00e9 -00ea -#00eb -00f2 -00f3 -00f4 -#00f6 -00f8 -#00fc -#2039-203a # angle quotes +# +# fontconfig/fc-lang/no.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Norwegian (Bokmål) (NO) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00ab +#00bb +00c0 +#00c1 +#00c2 +#00c4 +00c5 +00c6 +#00c7 +#00c8 +00c9 +00ca +#00cb +00d2 +00d3 +00d4 +#00d6 +00d8 +#00dc +00e0 +#00e1 +#00e2 +#00e4 +00e5 +00e6 +#00e7 +#00e8 +00e9 +00ea +#00eb +00f2 +00f3 +00f4 +#00f6 +00f8 +#00fc +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/ny.orth b/fontconfig/fc-lang/ny.orth index e168da566..6ffacd956 100644 --- a/fontconfig/fc-lang/ny.orth +++ b/fontconfig/fc-lang/ny.orth @@ -1,30 +1,30 @@ -# -# fontconfig/fc-lang/ny.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Chichewa (NY) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0174-0175 +# +# fontconfig/fc-lang/ny.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chichewa (NY) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0174-0175 diff --git a/fontconfig/fc-lang/oc.orth b/fontconfig/fc-lang/oc.orth index eb4bb8795..07822e758 100644 --- a/fontconfig/fc-lang/oc.orth +++ b/fontconfig/fc-lang/oc.orth @@ -1,53 +1,53 @@ -# -# fontconfig/fc-lang/oc.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Occitan (OC) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c0 -00c1 -00c7 -00c8 -00c9 -#00cb -00cd -#00cf -00d2 -00d3 -00da -00e0 -00e1 -00e7 -00e8 -00e9 -#00eb -00ed -#00ef -00f2 -00f3 -00fa +# +# fontconfig/fc-lang/oc.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Occitan (OC) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00c1 +00c7 +00c8 +00c9 +#00cb +00cd +#00cf +00d2 +00d3 +00da +00e0 +00e1 +00e7 +00e8 +00e9 +#00eb +00ed +#00ef +00f2 +00f3 +00fa diff --git a/fontconfig/fc-lang/om.orth b/fontconfig/fc-lang/om.orth index 3f7eb7d93..21422bf55 100644 --- a/fontconfig/fc-lang/om.orth +++ b/fontconfig/fc-lang/om.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/om.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Oromo or Galla (OM) -# -# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf -# -0041-005a # Oromo doesn't use v or z -0061-007a +# +# fontconfig/fc-lang/om.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Oromo or Galla (OM) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a # Oromo doesn't use v or z +0061-007a diff --git a/fontconfig/fc-lang/or.orth b/fontconfig/fc-lang/or.orth index fc4a774bb..eeb1dbe84 100644 --- a/fontconfig/fc-lang/or.orth +++ b/fontconfig/fc-lang/or.orth @@ -1,42 +1,42 @@ -# -# fontconfig/fc-lang/or.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Oriya (or) -# -# Taken from the Unicode coverage of this language -# -0b01-0b03 -0b05-0b0c -0b0f-0b10 -0b13-0b28 -0b2a-0b30 -0b32-0b33 -0b36-0b39 -0b3c-0b43 -0b47-0b48 -0b4b-0b4d -0b56-0b57 -0b5c-0b5d -0b5f-0b61 -#0b66-0b6f # Digits -#0b70 # Symbol +# +# fontconfig/fc-lang/or.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Oriya (or) +# +# Taken from the Unicode coverage of this language +# +0b01-0b03 +0b05-0b0c +0b0f-0b10 +0b13-0b28 +0b2a-0b30 +0b32-0b33 +0b36-0b39 +0b3c-0b43 +0b47-0b48 +0b4b-0b4d +0b56-0b57 +0b5c-0b5d +0b5f-0b61 +#0b66-0b6f # Digits +#0b70 # Symbol diff --git a/fontconfig/fc-lang/os.orth b/fontconfig/fc-lang/os.orth index 7f771cc92..e689d908f 100644 --- a/fontconfig/fc-lang/os.orth +++ b/fontconfig/fc-lang/os.orth @@ -1,96 +1,96 @@ -# -# fontconfig/fc-lang/os.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Ossetic (OS) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 +# +# fontconfig/fc-lang/os.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Ossetic (OS) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/pes.orth b/fontconfig/fc-lang/pes.orth index 9700cc52a..0c160f9b4 100644 --- a/fontconfig/fc-lang/pes.orth +++ b/fontconfig/fc-lang/pes.orth @@ -1,26 +1,26 @@ -# -# fontconfig/fc-lang/pes.orth -# -# Copyright © 2009 Roozbeh Pournader -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Western Farsi (pes) -# -include fa.orth +# +# fontconfig/fc-lang/pes.orth +# +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Western Farsi (pes) +# +include fa.orth diff --git a/fontconfig/fc-lang/pl.orth b/fontconfig/fc-lang/pl.orth index 1858395b2..4b069dfbb 100644 --- a/fontconfig/fc-lang/pl.orth +++ b/fontconfig/fc-lang/pl.orth @@ -1,41 +1,41 @@ -# -# fontconfig/fc-lang/pl.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Polish (PL) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00d3 -00f3 -0104-0105 -0106-0107 -0118-0119 -0141-0142 -0143-0144 -015a-015b -0179-017a -017b-017c +# +# fontconfig/fc-lang/pl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Polish (PL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00d3 +00f3 +0104-0105 +0106-0107 +0118-0119 +0141-0142 +0143-0144 +015a-015b +0179-017a +017b-017c diff --git a/fontconfig/fc-lang/prs.orth b/fontconfig/fc-lang/prs.orth index edb3bca31..b6a2ef5bf 100644 --- a/fontconfig/fc-lang/prs.orth +++ b/fontconfig/fc-lang/prs.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/prs.orth -# -# Copyright © 2009 Roozbeh Pournader -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Dari/Eastern Farsi (prs) -# -# We assume that Afghan Persian uses the same orthography as Iranian -# Persian, although the actual orthography is probably less strict than that -# of the Iranian Academy of Persian Language and Literature. -include fa.orth +# +# fontconfig/fc-lang/prs.orth +# +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Dari/Eastern Farsi (prs) +# +# We assume that Afghan Persian uses the same orthography as Iranian +# Persian, although the actual orthography is probably less strict than that +# of the Iranian Academy of Persian Language and Literature. +include fa.orth diff --git a/fontconfig/fc-lang/ps_af.orth b/fontconfig/fc-lang/ps_af.orth index 3fabdf3c1..47c19dda9 100644 --- a/fontconfig/fc-lang/ps_af.orth +++ b/fontconfig/fc-lang/ps_af.orth @@ -1,52 +1,52 @@ -# -# fontconfig/fc-lang/ps_af.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Pashto in Afghanistan (PS-AF) -# -# Data from Roozbeh Pournader -# -# 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 +# +# Since the Unicode Presentation Forms don't contain any of the +# Pashto-specific letters (that is Pashto letters not in Persian), we are +# going with the general forms instead of the Presentation forms, unlike +# Arabic, Persian, or Urdu. +# +0621-0624 +0626-063a +0641-0642 +0644-0648 +064a +067c +067e +0681 +0685-0686 +0689 +0693 +0696 +0698 +069a +06a9 +06ab +06bc +06cc +06cd +06d0 diff --git a/fontconfig/fc-lang/ps_pk.orth b/fontconfig/fc-lang/ps_pk.orth index c0d982441..659f4fb0e 100644 --- a/fontconfig/fc-lang/ps_pk.orth +++ b/fontconfig/fc-lang/ps_pk.orth @@ -1,52 +1,52 @@ -# -# fontconfig/fc-lang/ps_pk.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Pashto in Pakistan (PS-PK) -# -# Data from Roozbeh Pournader -# -# 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 +# +# Since the Unicode Presentation Forms don't contain any of the +# Pashto-specific letters (that is Pashto letters not in Persian), we are +# going with the general forms instead of the Presentation forms, unlike +# Arabic, Persian, or Urdu. +# +0621-0624 +0626-063a +0641-0642 +0644-0648 +064a +067c +067e +0681 +0685-0686 +0689 +0693 +0696 +0698 +069a +06a9 +06ab +06bc +06cd +06d0 +06d2 diff --git a/fontconfig/fc-lang/pt.orth b/fontconfig/fc-lang/pt.orth index 862d82f1d..07aa83d76 100644 --- a/fontconfig/fc-lang/pt.orth +++ b/fontconfig/fc-lang/pt.orth @@ -1,64 +1,64 @@ -# -# fontconfig/fc-lang/pt.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Portuguese (PT) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -#00bb -00c0 -00c1 -00c2 -00c3 -00c7 -00c8 -00c9 -00ca -00cd -00d2 -00d3 -00d4 -00d5 -00da -00dc -00e0 -00e1 -00e2 -00e3 -00e7 -00e8 -00e9 -00ea -00ed -00f2 -00f3 -00f4 -00f5 -00fa -00fc -##203a # angle quote -# +# +# fontconfig/fc-lang/pt.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Portuguese (PT) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +#00bb +00c0 +00c1 +00c2 +00c3 +00c7 +00c8 +00c9 +00ca +00cd +00d2 +00d3 +00d4 +00d5 +00da +00dc +00e0 +00e1 +00e2 +00e3 +00e7 +00e8 +00e9 +00ea +00ed +00f2 +00f3 +00f4 +00f5 +00fa +00fc +##203a # angle quote +# diff --git a/fontconfig/fc-lang/rm.orth b/fontconfig/fc-lang/rm.orth index 20948ea7e..9a54d879e 100644 --- a/fontconfig/fc-lang/rm.orth +++ b/fontconfig/fc-lang/rm.orth @@ -1,45 +1,45 @@ -# -# fontconfig/fc-lang/rm.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Rhaeto-Romance (Romansch) (RM) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c0 -00c8 -00c9 -00cc -00ce -00d2 -00d9 -00e0 -00e8 -00e9 -00ec -00ee -00f2 -00f9 +# +# fontconfig/fc-lang/rm.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Rhaeto-Romance (Romansch) (RM) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00c8 +00c9 +00cc +00ce +00d2 +00d9 +00e0 +00e8 +00e9 +00ec +00ee +00f2 +00f9 diff --git a/fontconfig/fc-lang/ro.orth b/fontconfig/fc-lang/ro.orth index a2f887b71..0433de951 100644 --- a/fontconfig/fc-lang/ro.orth +++ b/fontconfig/fc-lang/ro.orth @@ -1,38 +1,38 @@ -# -# fontconfig/fc-lang/ro.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Romanian (RO) -# -# Sources: -# www.eki.ee/letter -# -0041-005a -0061-007a -00c2 -00ce -00e2 -00ee -0102-0103 -0218-021b # comma-below forms (preferred over cedilla) -#2019-201a # single quotes -#201d-201e # double quotes +# +# fontconfig/fc-lang/ro.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Romanian (RO) +# +# Sources: +# www.eki.ee/letter +# +0041-005a +0061-007a +00c2 +00ce +00e2 +00ee +0102-0103 +0218-021b # comma-below forms (preferred over cedilla) +#2019-201a # single quotes +#201d-201e # double quotes diff --git a/fontconfig/fc-lang/ru.orth b/fontconfig/fc-lang/ru.orth index e6eb3501b..d4391f33a 100644 --- a/fontconfig/fc-lang/ru.orth +++ b/fontconfig/fc-lang/ru.orth @@ -1,38 +1,38 @@ -# -# fontconfig/fc-lang/ru.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Russian (RU) -#00ab -#00bb -0401 -#0406 # eliminated in 1918 in favor of 418 -0410-044f -0451 -#0456 # eliminated in 1918 in favor of 438 -#0462 # CYRILLIC CAPITAL LETTER YAT -#0463 # CYRILLIC SMALL LETTER YAT -#0472 # CYRILLIC CAPITAL LETTER FITA -#0473 # CYRILLIC SMALL LETTER FITA -#0474 # CYRILLIC CAPITAL LETTER IZHITSA -#0475 # CYRILLIC SMALL LETTER IZHITSA -#2039-203a # angle quotes +# +# fontconfig/fc-lang/ru.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Russian (RU) +#00ab +#00bb +0401 +#0406 # eliminated in 1918 in favor of 418 +0410-044f +0451 +#0456 # eliminated in 1918 in favor of 438 +#0462 # CYRILLIC CAPITAL LETTER YAT +#0463 # CYRILLIC SMALL LETTER YAT +#0472 # CYRILLIC CAPITAL LETTER FITA +#0473 # CYRILLIC SMALL LETTER FITA +#0474 # CYRILLIC CAPITAL LETTER IZHITSA +#0475 # CYRILLIC SMALL LETTER IZHITSA +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/sa.orth b/fontconfig/fc-lang/sa.orth index 7d17bd1cf..9b8e399da 100644 --- a/fontconfig/fc-lang/sa.orth +++ b/fontconfig/fc-lang/sa.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/sa.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Sanskrit (Devanagari script) (SA) -include hi.orth +# +# fontconfig/fc-lang/sa.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Sanskrit (Devanagari script) (SA) +include hi.orth diff --git a/fontconfig/fc-lang/sah.orth b/fontconfig/fc-lang/sah.orth index 928b8070f..f22317d4d 100644 --- a/fontconfig/fc-lang/sah.orth +++ b/fontconfig/fc-lang/sah.orth @@ -1,108 +1,108 @@ -# -# fontconfig/fc-lang/sah.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Yakut (SAH) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -#0472 # CYRILLIC CAPITAL LETTER FITA -#0473 # CYRILLIC SMALL LETTER FITA -0494 -0495 -04a4 -04a5 -04ae -04af -04ba -04bb -04d8 -04d9 +# +# fontconfig/fc-lang/sah.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Yakut (SAH) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA +#0473 # CYRILLIC SMALL LETTER FITA +0494 +0495 +04a4 +04a5 +04ae +04af +04ba +04bb +04d8 +04d9 diff --git a/fontconfig/fc-lang/sco.orth b/fontconfig/fc-lang/sco.orth index e515ca27c..11022e164 100644 --- a/fontconfig/fc-lang/sco.orth +++ b/fontconfig/fc-lang/sco.orth @@ -1,32 +1,32 @@ -# -# fontconfig/fc-lang/sco.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Scots (CU) -# -# Orthography from http://www.evertype.com/alphabets/scots.pdf -# -0041-005a -0061-007a -01b7 -021c-021d -0292 +# +# fontconfig/fc-lang/sco.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Scots (CU) +# +# Orthography from http://www.evertype.com/alphabets/scots.pdf +# +0041-005a +0061-007a +01b7 +021c-021d +0292 diff --git a/fontconfig/fc-lang/se.orth b/fontconfig/fc-lang/se.orth index d67da376c..6ed02f888 100644 --- a/fontconfig/fc-lang/se.orth +++ b/fontconfig/fc-lang/se.orth @@ -1,37 +1,37 @@ -# -# fontconfig/fc-lang/se.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# North Sámi (SE) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c1 -00e1 -010c-010d -0110-0111 -014a-014b -0160-0161 -0166-0167 -017d-017e +# +# fontconfig/fc-lang/se.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# North Sámi (SE) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +010c-010d +0110-0111 +014a-014b +0160-0161 +0166-0167 +017d-017e diff --git a/fontconfig/fc-lang/sel.orth b/fontconfig/fc-lang/sel.orth index 0bc87b874..ba8fe5981 100644 --- a/fontconfig/fc-lang/sel.orth +++ b/fontconfig/fc-lang/sel.orth @@ -1,96 +1,96 @@ -# -# fontconfig/fc-lang/sel.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Selkup (Ostyak-Samoyed) (SEL) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 +# +# fontconfig/fc-lang/sel.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Selkup (Ostyak-Samoyed) (SEL) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 diff --git a/fontconfig/fc-lang/sk.orth b/fontconfig/fc-lang/sk.orth index 08b639818..c2a36f0d3 100644 --- a/fontconfig/fc-lang/sk.orth +++ b/fontconfig/fc-lang/sk.orth @@ -1,63 +1,63 @@ -# -# fontconfig/fc-lang/sk.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Slovak (SK) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c1 -00c4 -00c9 -00cd -00d3 -00d4 -#00d6 # evertype.com -00da -#00dc # evertype.com -00dd -00e1 -00e4 -00e9 -00ed -00f3 -00f4 -#00f6 # evertype.com -00fa -#00fc # evertype.com -00fd -010c-010d -010e-010f -0139-013a -013d-013e -0147-0148 -#0150-0151 # evertype.com -0154-0155 -0160-0161 -0164-0165 -#0170-0171 # evertype.com -017d-017e -# +# +# fontconfig/fc-lang/sk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Slovak (SK) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00c4 +00c9 +00cd +00d3 +00d4 +#00d6 # evertype.com +00da +#00dc # evertype.com +00dd +00e1 +00e4 +00e9 +00ed +00f3 +00f4 +#00f6 # evertype.com +00fa +#00fc # evertype.com +00fd +010c-010d +010e-010f +0139-013a +013d-013e +0147-0148 +#0150-0151 # evertype.com +0154-0155 +0160-0161 +0164-0165 +#0170-0171 # evertype.com +017d-017e +# diff --git a/fontconfig/fc-lang/sl.orth b/fontconfig/fc-lang/sl.orth index 0a53eda90..ea28aa376 100644 --- a/fontconfig/fc-lang/sl.orth +++ b/fontconfig/fc-lang/sl.orth @@ -1,88 +1,88 @@ -# -# fontconfig/fc-lang/sl.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Slovenian (SL) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -# -# Included in eki.ee -# -#00C4 LATIN CAPITAL LETTER A WITH DIAERESIS -#00D6 LATIN CAPITAL LETTER O WITH DIAERESIS -#00DC LATIN CAPITAL LETTER U WITH DIAERESIS -#00E4 LATIN SMALL LETTER A WITH DIAERESIS -#00F6 LATIN SMALL LETTER O WITH DIAERESIS -#00FC LATIN SMALL LETTER U WITH DIAERESIS -0106 LATIN CAPITAL LETTER C WITH ACUTE -0107 LATIN SMALL LETTER C WITH ACUTE -010C LATIN CAPITAL LETTER C WITH CARON -010D LATIN SMALL LETTER C WITH CARON -0110 LATIN CAPITAL LETTER D WITH STROKE -0111 LATIN SMALL LETTER D WITH STROKE -0160 LATIN CAPITAL LETTER S WITH CARON -0161 LATIN SMALL LETTER S WITH CARON -017D LATIN CAPITAL LETTER Z WITH CARON -017E LATIN SMALL LETTER Z WITH CARON -# -# According to evertype.com: -# -# In slovenian, these letters are often used to transliterate -# Serbian and Macedonian letters -# -#01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON -#01C6 LATIN SMALL LETTER DZ WITH CARON -#01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J -#01C9 LATIN SMALL LETTER LJ -#01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J -#01CC LATIN SMALL LETTER NJ -#01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z -#01F3 LATIN SMALL LETTER DZ -#01F4 LATIN CAPITAL LETTER G WITH ACUTE -#01F5 LATIN SMALL LETTER G WITH ACUTE -#1E30 LATIN CAPITAL LETTER K WITH ACUTE -#1E31 LATIN SMALL LETTER K WITH ACUTE -# -# These are the transliteration target letters which are -# not used in Slovenian at all -# -#0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian) -#0403 CYRILLIC CAPITAL LETTER GJE -#0405 CYRILLIC CAPITAL LETTER DZE -#0409 CYRILLIC CAPITAL LETTER LJE -#040A CYRILLIC CAPITAL LETTER NJE -#040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) -#040C CYRILLIC CAPITAL LETTER KJE -#040F CYRILLIC CAPITAL LETTER DZHE -#0452 CYRILLIC SMALL LETTER DJE (Serbocroatian) -#0453 CYRILLIC SMALL LETTER GJE -#0455 CYRILLIC SMALL LETTER DZE -#0459 CYRILLIC SMALL LETTER LJE -#045A CYRILLIC SMALL LETTER NJE -#045B CYRILLIC SMALL LETTER TSHE (Serbocroatian) -#045C CYRILLIC SMALL LETTER KJE -#045F CYRILLIC SMALL LETTER DZHE +# +# fontconfig/fc-lang/sl.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Slovenian (SL) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +# +# Included in eki.ee +# +#00C4 LATIN CAPITAL LETTER A WITH DIAERESIS +#00D6 LATIN CAPITAL LETTER O WITH DIAERESIS +#00DC LATIN CAPITAL LETTER U WITH DIAERESIS +#00E4 LATIN SMALL LETTER A WITH DIAERESIS +#00F6 LATIN SMALL LETTER O WITH DIAERESIS +#00FC LATIN SMALL LETTER U WITH DIAERESIS +0106 LATIN CAPITAL LETTER C WITH ACUTE +0107 LATIN SMALL LETTER C WITH ACUTE +010C LATIN CAPITAL LETTER C WITH CARON +010D LATIN SMALL LETTER C WITH CARON +0110 LATIN CAPITAL LETTER D WITH STROKE +0111 LATIN SMALL LETTER D WITH STROKE +0160 LATIN CAPITAL LETTER S WITH CARON +0161 LATIN SMALL LETTER S WITH CARON +017D LATIN CAPITAL LETTER Z WITH CARON +017E LATIN SMALL LETTER Z WITH CARON +# +# According to evertype.com: +# +# In slovenian, these letters are often used to transliterate +# Serbian and Macedonian letters +# +#01C5 LATIN CAPITAL LETTER D WITH SMALL LETTER Z WITH CARON +#01C6 LATIN SMALL LETTER DZ WITH CARON +#01C8 LATIN CAPITAL LETTER L WITH SMALL LETTER J +#01C9 LATIN SMALL LETTER LJ +#01CB LATIN CAPITAL LETTER N WITH SMALL LETTER J +#01CC LATIN SMALL LETTER NJ +#01F2 LATIN CAPITAL LETTER D WITH SMALL LETTER Z +#01F3 LATIN SMALL LETTER DZ +#01F4 LATIN CAPITAL LETTER G WITH ACUTE +#01F5 LATIN SMALL LETTER G WITH ACUTE +#1E30 LATIN CAPITAL LETTER K WITH ACUTE +#1E31 LATIN SMALL LETTER K WITH ACUTE +# +# These are the transliteration target letters which are +# not used in Slovenian at all +# +#0402 CYRILLIC CAPITAL LETTER DJE (Serbocroatian) +#0403 CYRILLIC CAPITAL LETTER GJE +#0405 CYRILLIC CAPITAL LETTER DZE +#0409 CYRILLIC CAPITAL LETTER LJE +#040A CYRILLIC CAPITAL LETTER NJE +#040B CYRILLIC CAPITAL LETTER TSHE (Serbocroatian) +#040C CYRILLIC CAPITAL LETTER KJE +#040F CYRILLIC CAPITAL LETTER DZHE +#0452 CYRILLIC SMALL LETTER DJE (Serbocroatian) +#0453 CYRILLIC SMALL LETTER GJE +#0455 CYRILLIC SMALL LETTER DZE +#0459 CYRILLIC SMALL LETTER LJE +#045A CYRILLIC SMALL LETTER NJE +#045B CYRILLIC SMALL LETTER TSHE (Serbocroatian) +#045C CYRILLIC SMALL LETTER KJE +#045F CYRILLIC SMALL LETTER DZHE diff --git a/fontconfig/fc-lang/sm.orth b/fontconfig/fc-lang/sm.orth index f2c663ed6..e8dc63ab3 100644 --- a/fontconfig/fc-lang/sm.orth +++ b/fontconfig/fc-lang/sm.orth @@ -1,30 +1,30 @@ -# -# fontconfig/fc-lang/sm.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Samoan (AF) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -02bb +# +# fontconfig/fc-lang/sm.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Samoan (AF) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +02bb diff --git a/fontconfig/fc-lang/sma.orth b/fontconfig/fc-lang/sma.orth index 6d6bc4048..4292ec7c5 100644 --- a/fontconfig/fc-lang/sma.orth +++ b/fontconfig/fc-lang/sma.orth @@ -1,37 +1,37 @@ -# -# fontconfig/fc-lang/sma.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# South Sámi (SMA) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c4 -00e4 -00c5 -00e5 -00d6 -00f6 -00cf -00ef +# +# fontconfig/fc-lang/sma.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# South Sámi (SMA) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c4 +00e4 +00c5 +00e5 +00d6 +00f6 +00cf +00ef diff --git a/fontconfig/fc-lang/smj.orth b/fontconfig/fc-lang/smj.orth index 9488bccbc..3d466fdda 100644 --- a/fontconfig/fc-lang/smj.orth +++ b/fontconfig/fc-lang/smj.orth @@ -1,37 +1,37 @@ -# -# fontconfig/fc-lang/smj.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Lule Sámi (SMJ) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c1 -00e1 -00c4 -00e4 -00c5 -00e5 -00d1 -00f1 +# +# fontconfig/fc-lang/smj.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Lule Sámi (SMJ) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +00c4 +00e4 +00c5 +00e5 +00d1 +00f1 diff --git a/fontconfig/fc-lang/smn.orth b/fontconfig/fc-lang/smn.orth index 330de638b..54ac9cef7 100644 --- a/fontconfig/fc-lang/smn.orth +++ b/fontconfig/fc-lang/smn.orth @@ -1,40 +1,40 @@ -# -# fontconfig/fc-lang/smn.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Inari Sámi (SMN) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c1 -00e1 -00c2 -00e2 -00c4 -00e4 -010c-010d -0110-0111 -014a-014b -0160-0161 -017d-017e +# +# fontconfig/fc-lang/smn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Inari Sámi (SMN) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c1 +00e1 +00c2 +00e2 +00c4 +00e4 +010c-010d +0110-0111 +014a-014b +0160-0161 +017d-017e diff --git a/fontconfig/fc-lang/sms.orth b/fontconfig/fc-lang/sms.orth index cf92fe0c5..b9391ae42 100644 --- a/fontconfig/fc-lang/sms.orth +++ b/fontconfig/fc-lang/sms.orth @@ -1,48 +1,48 @@ -# -# fontconfig/fc-lang/sms.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Skolt Sámi (SMJ) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c2 -00e2 -00c4 -00e4 -00c5 -00e5 -010c-010d -0110-0111 -01b7 -0292 -01ee-01ef -01e6-01e7 -01e4-01e5 -01e8-01e9 -014a-014b -00d5 -00f5 -0160-0161 -017d-017e +# +# fontconfig/fc-lang/sms.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Skolt Sámi (SMJ) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c2 +00e2 +00c4 +00e4 +00c5 +00e5 +010c-010d +0110-0111 +01b7 +0292 +01ee-01ef +01e6-01e7 +01e4-01e5 +01e8-01e9 +014a-014b +00d5 +00f5 +0160-0161 +017d-017e diff --git a/fontconfig/fc-lang/so.orth b/fontconfig/fc-lang/so.orth index 0df2d91c0..0867a4595 100644 --- a/fontconfig/fc-lang/so.orth +++ b/fontconfig/fc-lang/so.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/so.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Somali (SO) -# -# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf -# -0041-005a # Somali doesn't use p, v or z -0061-007a +# +# fontconfig/fc-lang/so.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Somali (SO) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a # Somali doesn't use p, v or z +0061-007a diff --git a/fontconfig/fc-lang/sq.orth b/fontconfig/fc-lang/sq.orth index 01d7db0b6..21c885acf 100644 --- a/fontconfig/fc-lang/sq.orth +++ b/fontconfig/fc-lang/sq.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/sq.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Albanian (SQ) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00c7 -00cb -00e7 -00eb +# +# fontconfig/fc-lang/sq.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Albanian (SQ) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00c7 +00cb +00e7 +00eb diff --git a/fontconfig/fc-lang/sr.orth b/fontconfig/fc-lang/sr.orth index f3e65f13d..0350a687c 100644 --- a/fontconfig/fc-lang/sr.orth +++ b/fontconfig/fc-lang/sr.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/sr.orth -# -# Copyright © 2008 Danilo Šegan -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Serbian (SR) -# -0402 -0408-040b -040f -0410-0418 -041a-0428 -0430-0438 -043a-0448 -0452 -0458-045b -045f +# +# fontconfig/fc-lang/sr.orth +# +# Copyright © 2008 Danilo Šegan +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Serbian (SR) +# +0402 +0408-040b +040f +0410-0418 +041a-0428 +0430-0438 +043a-0448 +0452 +0458-045b +045f diff --git a/fontconfig/fc-lang/sv.orth b/fontconfig/fc-lang/sv.orth index 35645c3de..4f40fff33 100644 --- a/fontconfig/fc-lang/sv.orth +++ b/fontconfig/fc-lang/sv.orth @@ -1,100 +1,100 @@ -# -# fontconfig/fc-lang/sv.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Swedish (SV) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -# evertype.com includes a large number of additional precomposed letters -# not marked by eki.ee; I've left those commented out here -# -0041-005a -0061-007a -#00bb -00c0 -00c1 -#00c2 -#00c3 -00c4 -00c5 -#00c6 -#00c7 -#00c8 -00c9 -#00ca -00cb -#00cc -#00cd -#00ce -#00cf -#00d0 -#00d1 -#00d2 -#00d3 -#00d4 -00d6 -#00d7 -#00d8 -#00d9 -#00da -#00db -00dc -#00dd -00e0 -00e1 -#00e2 -#00e3 -00e4 -00e5 -#00e6 -#00e7 -#00e8 -00e9 -#00ea -00eb -#00ec -#00ed -#00ee -#00ef -#00f0 -#00f1 -#00f2 -#00f3 -#00f4 -00f6 -#00f8 -#00f9 -#00fa -#00fb -00fc -#00fd -#0106-0107 # C, c with acute -#010c-010d # C, c with caron -#0141-0144 # L, l with stroke N, n with acute -#0158-015b # R, r with caron S, s with acute -#0160-0161 # S, s with caron -#2019 # single quote -#201d # double quote -#203a # angle quote +# +# fontconfig/fc-lang/sv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Swedish (SV) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +# evertype.com includes a large number of additional precomposed letters +# not marked by eki.ee; I've left those commented out here +# +0041-005a +0061-007a +#00bb +00c0 +00c1 +#00c2 +#00c3 +00c4 +00c5 +#00c6 +#00c7 +#00c8 +00c9 +#00ca +00cb +#00cc +#00cd +#00ce +#00cf +#00d0 +#00d1 +#00d2 +#00d3 +#00d4 +00d6 +#00d7 +#00d8 +#00d9 +#00da +#00db +00dc +#00dd +00e0 +00e1 +#00e2 +#00e3 +00e4 +00e5 +#00e6 +#00e7 +#00e8 +00e9 +#00ea +00eb +#00ec +#00ed +#00ee +#00ef +#00f0 +#00f1 +#00f2 +#00f3 +#00f4 +00f6 +#00f8 +#00f9 +#00fa +#00fb +00fc +#00fd +#0106-0107 # C, c with acute +#010c-010d # C, c with caron +#0141-0144 # L, l with stroke N, n with acute +#0158-015b # R, r with caron S, s with acute +#0160-0161 # S, s with caron +#2019 # single quote +#201d # double quote +#203a # angle quote diff --git a/fontconfig/fc-lang/sw.orth b/fontconfig/fc-lang/sw.orth index c2988a96e..f4bff3d19 100644 --- a/fontconfig/fc-lang/sw.orth +++ b/fontconfig/fc-lang/sw.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/sw.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Swahili (SW) -# -# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf -# -0041-005a # Swahili doesn't use f, q or x and uses r only for loan words -0061-007a +# +# fontconfig/fc-lang/sw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Swahili (SW) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a # Swahili doesn't use f, q or x and uses r only for loan words +0061-007a diff --git a/fontconfig/fc-lang/syr.orth b/fontconfig/fc-lang/syr.orth index 88366a459..97d6edc48 100644 --- a/fontconfig/fc-lang/syr.orth +++ b/fontconfig/fc-lang/syr.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/syr.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Syriac (SYR) -# -# Coverage given by Emil Soleyman-Zomalan -# -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 +# +0710-072c # Syriac letters +0730-073f # Syriac points (vowels) diff --git a/fontconfig/fc-lang/ta.orth b/fontconfig/fc-lang/ta.orth index 995a3c84b..52a6f1d58 100644 --- a/fontconfig/fc-lang/ta.orth +++ b/fontconfig/fc-lang/ta.orth @@ -1,46 +1,46 @@ -# -# fontconfig/fc-lang/ta.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Tamil (TA) -# -# Taken from the Unicode coverage of this language -# -# updates from Jungshik Shin -# -#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 +# +#0b82 # not present in many Tamil fonts +0b83 +0b85-0b8a +0b8e-0b90 +0b92-0b95 +0b99-0b9a +0b9c +0b9e-0b9f +0ba3-0ba4 +0ba8-0baa +0bae-0bb5 +0bb7-0bb9 +0bbe-0bc2 +0bc6-0bc8 +0bca-0bcd +0bd7 +#0be7-0bf2 # Tamil digits and numbers diff --git a/fontconfig/fc-lang/te.orth b/fontconfig/fc-lang/te.orth index 162029156..141c932ed 100644 --- a/fontconfig/fc-lang/te.orth +++ b/fontconfig/fc-lang/te.orth @@ -1,39 +1,39 @@ -# -# fontconfig/fc-lang/te.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Telugu (te) -# -# Taken from the Unicode coverage of this language -# -0c01-0c03 -0c05-0c0c -0c0e-0c10 -0c12-0c28 -0c2a-0c33 -0c35-0c39 -0c3e-0c44 -0c46-0c48 -0c4a-0c4d -0c55-0c56 -0c60-0c61 -#0c66-0c6f # Digits +# +# fontconfig/fc-lang/te.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Telugu (te) +# +# Taken from the Unicode coverage of this language +# +0c01-0c03 +0c05-0c0c +0c0e-0c10 +0c12-0c28 +0c2a-0c33 +0c35-0c39 +0c3e-0c44 +0c46-0c48 +0c4a-0c4d +0c55-0c56 +0c60-0c61 +#0c66-0c6f # Digits diff --git a/fontconfig/fc-lang/tg.orth b/fontconfig/fc-lang/tg.orth index 800dd7579..fc99ab1da 100644 --- a/fontconfig/fc-lang/tg.orth +++ b/fontconfig/fc-lang/tg.orth @@ -1,108 +1,108 @@ -# -# fontconfig/fc-lang/tg.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Tajik (TG) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -0492 -0493 -049a -049b -04b2 -04b3 -04b6 -04b7 -04e2 -04e3 -04ee -04ef +# +# fontconfig/fc-lang/tg.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Tajik (TG) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +0492 +0493 +049a +049b +04b2 +04b3 +04b6 +04b7 +04e2 +04e3 +04ee +04ef diff --git a/fontconfig/fc-lang/th.orth b/fontconfig/fc-lang/th.orth index 1f2f51208..03c3c32ea 100644 --- a/fontconfig/fc-lang/th.orth +++ b/fontconfig/fc-lang/th.orth @@ -1,30 +1,30 @@ -# -# fontconfig/fc-lang/th.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Thai (th) -# -0e01-0e3a -0e3f-0e4e -#0e4f # Punctuation -#0e50-0e59 # Digits -#0e5a-0e5b # Punctuation +# +# fontconfig/fc-lang/th.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Thai (th) +# +0e01-0e3a +0e3f-0e4e +#0e4f # Punctuation +#0e50-0e59 # Digits +#0e5a-0e5b # Punctuation diff --git a/fontconfig/fc-lang/ti_er.orth b/fontconfig/fc-lang/ti_er.orth index 9438bd07e..91b37acc5 100644 --- a/fontconfig/fc-lang/ti_er.orth +++ b/fontconfig/fc-lang/ti_er.orth @@ -1,56 +1,56 @@ -# -# fontconfig/fc-lang/ti_er.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Eritrean Tigrinya (TI-ER) Ethiopic Convention -# -# Taken from Unicode coverage (1200-137f) -# -# Sylables -1200-1206 # he-ho -1208-1216 # le-Ho, skip HWa -1218-121f # me-mWa -1228-1230 # re-sWa -1238-1246 # re-qo -1248 # qWe -124a-124d # qWi-qW -1250-1256 # Qe-Qo -1258 # QWe -125a-125d # QWi-QW -1260-126e # be-vo -1270-127f # te-cWa -1290-12a7 # ne-o -12a8-12ae # ke-ko -12b0 # kWe -12b2-12b5 # kWi-kW -12c8-12ce # Ke-Ko -12c0 # KWe -12c2-12c5 # KWi-KW -12c8-12ce # we-wo -12d0-12d6 # `e-`o -12d8-12ee # ze-yo -12f0-12f7 # de-dWa -1300-130e # je-go -1310 # gWe -1312-1315 # gWi-gW -1320-133f # Te-SWa -1348-1356 # fe-po, skip pWa, rYa, mYa, fYa +# +# fontconfig/fc-lang/ti_er.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Eritrean Tigrinya (TI-ER) Ethiopic Convention +# +# Taken from Unicode coverage (1200-137f) +# +# Sylables +1200-1206 # he-ho +1208-1216 # le-Ho, skip HWa +1218-121f # me-mWa +1228-1230 # re-sWa +1238-1246 # re-qo +1248 # qWe +124a-124d # qWi-qW +1250-1256 # Qe-Qo +1258 # QWe +125a-125d # QWi-QW +1260-126e # be-vo +1270-127f # te-cWa +1290-12a7 # ne-o +12a8-12ae # ke-ko +12b0 # kWe +12b2-12b5 # kWi-kW +12c8-12ce # Ke-Ko +12c0 # KWe +12c2-12c5 # KWi-KW +12c8-12ce # we-wo +12d0-12d6 # `e-`o +12d8-12ee # ze-yo +12f0-12f7 # de-dWa +1300-130e # je-go +1310 # gWe +1312-1315 # gWi-gW +1320-133f # Te-SWa +1348-1356 # fe-po, skip pWa, rYa, mYa, fYa diff --git a/fontconfig/fc-lang/ti_et.orth b/fontconfig/fc-lang/ti_et.orth index a9f123521..b80be9915 100644 --- a/fontconfig/fc-lang/ti_et.orth +++ b/fontconfig/fc-lang/ti_et.orth @@ -1,33 +1,33 @@ -# -# fontconfig/fc-lang/ti_et.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Ethiopian Tigrinya (TI-ET) Ethiopic Convention -# -# The same as Ethiopic -# -include ti_er.orth -1220-1226 # `se-`so -1280-1286 # `he-`ho -1288 # hWe -128a-128d # hWi-hW -1340-1346 # `Se-`So +# +# fontconfig/fc-lang/ti_et.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Ethiopian Tigrinya (TI-ET) Ethiopic Convention +# +# The same as Ethiopic +# +include ti_er.orth +1220-1226 # `se-`so +1280-1286 # `he-`ho +1288 # hWe +128a-128d # hWi-hW +1340-1346 # `Se-`So diff --git a/fontconfig/fc-lang/tig.orth b/fontconfig/fc-lang/tig.orth index c569e9300..d731ebc2b 100644 --- a/fontconfig/fc-lang/tig.orth +++ b/fontconfig/fc-lang/tig.orth @@ -1,52 +1,52 @@ -# -# fontconfig/fc-lang/tig.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Tigre (TIG) Ethiopic Convention -# -# Taken from Unicode coverage (1200-137f) -# -# Sylables -1200-1206 # he-ho -1208-1216 # le-Ho, skip HWa -1218-121f # me-mWa -1228-1230 # re-sWa -1238-1246 # re-qo -1248 # qWe -124a-124d # qWi-qW -1260-126e # be-vo -1270-127f # te-cWa -1290-1297 # ne-nWa -12a0-12a6 # a-o -12a8-12ae # ke-ko -12b0 # kWe -12b2-12b5 # kWi-kW -12c8-12ce # we-wo -12d0-12d6 # `e-`o -12d8-12df # ze-zWa -12e8-12ee # ye-yo -12f0-12f7 # de-dWa -1300-130e # je-go -1310 # gWe -1312-1315 # gWi-gW -1320-133f # Te-SWa -1348-1356 # fe-po, skip pWa, rYa, mYa, fYa +# +# fontconfig/fc-lang/tig.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tigre (TIG) Ethiopic Convention +# +# Taken from Unicode coverage (1200-137f) +# +# Sylables +1200-1206 # he-ho +1208-1216 # le-Ho, skip HWa +1218-121f # me-mWa +1228-1230 # re-sWa +1238-1246 # re-qo +1248 # qWe +124a-124d # qWi-qW +1260-126e # be-vo +1270-127f # te-cWa +1290-1297 # ne-nWa +12a0-12a6 # a-o +12a8-12ae # ke-ko +12b0 # kWe +12b2-12b5 # kWi-kW +12c8-12ce # we-wo +12d0-12d6 # `e-`o +12d8-12df # ze-zWa +12e8-12ee # ye-yo +12f0-12f7 # de-dWa +1300-130e # je-go +1310 # gWe +1312-1315 # gWi-gW +1320-133f # Te-SWa +1348-1356 # fe-po, skip pWa, rYa, mYa, fYa diff --git a/fontconfig/fc-lang/tn.orth b/fontconfig/fc-lang/tn.orth index 16f607311..2a1510a82 100644 --- a/fontconfig/fc-lang/tn.orth +++ b/fontconfig/fc-lang/tn.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/tn.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Tswana (TN) -# -# Orthography from http://www.eki.ee/letter -# and http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml -# -0041-005a -0061-007a -00ca -00ea -00d4 -00f4 -0160-0161 +# +# fontconfig/fc-lang/tn.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tswana (TN) +# +# Orthography from http://www.eki.ee/letter +# and http://www.inference.phy.cam.ac.uk/dasher/download/alphabets/alphabet.Tswana.xml +# +0041-005a +0061-007a +00ca +00ea +00d4 +00f4 +0160-0161 diff --git a/fontconfig/fc-lang/to.orth b/fontconfig/fc-lang/to.orth index 4e1cd03aa..2a5f73670 100644 --- a/fontconfig/fc-lang/to.orth +++ b/fontconfig/fc-lang/to.orth @@ -1,30 +1,30 @@ -# -# fontconfig/fc-lang/to.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Tonga (TO) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -02bb +# +# fontconfig/fc-lang/to.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tonga (TO) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +02bb diff --git a/fontconfig/fc-lang/tr.orth b/fontconfig/fc-lang/tr.orth index f14b75a65..11031bb4e 100644 --- a/fontconfig/fc-lang/tr.orth +++ b/fontconfig/fc-lang/tr.orth @@ -1,49 +1,49 @@ -# -# fontconfig/fc-lang/tr.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Turkish (TR) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -0041-005a -0061-007a -00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX -00C7 LATIN CAPITAL LETTER C WITH CEDILLA -00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX -00D6 LATIN CAPITAL LETTER O WITH DIAERESIS -00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX -00DC LATIN CAPITAL LETTER U WITH DIAERESIS -00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX -00E7 LATIN SMALL LETTER C WITH CEDILLA -00EE LATIN SMALL LETTER I WITH CIRCUMFLEX -00F6 LATIN SMALL LETTER O WITH DIAERESIS -00FB LATIN SMALL LETTER U WITH CIRCUMFLEX -00FC LATIN SMALL LETTER U WITH DIAERESIS -011E LATIN CAPITAL LETTER G WITH BREVE -011F LATIN SMALL LETTER G WITH BREVE -0130 LATIN CAPITAL LETTER I WITH DOT ABOVE -0131 LATIN SMALL LETTER DOTLESS I -015E LATIN CAPITAL LETTER S WITH CEDILLA * -015F LATIN SMALL LETTER S WITH CEDILLA * +# +# fontconfig/fc-lang/tr.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Turkish (TR) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +0041-005a +0061-007a +00C2 LATIN CAPITAL LETTER A WITH CIRCUMFLEX +00C7 LATIN CAPITAL LETTER C WITH CEDILLA +00CE LATIN CAPITAL LETTER I WITH CIRCUMFLEX +00D6 LATIN CAPITAL LETTER O WITH DIAERESIS +00DB LATIN CAPITAL LETTER U WITH CIRCUMFLEX +00DC LATIN CAPITAL LETTER U WITH DIAERESIS +00E2 LATIN SMALL LETTER A WITH CIRCUMFLEX +00E7 LATIN SMALL LETTER C WITH CEDILLA +00EE LATIN SMALL LETTER I WITH CIRCUMFLEX +00F6 LATIN SMALL LETTER O WITH DIAERESIS +00FB LATIN SMALL LETTER U WITH CIRCUMFLEX +00FC LATIN SMALL LETTER U WITH DIAERESIS +011E LATIN CAPITAL LETTER G WITH BREVE +011F LATIN SMALL LETTER G WITH BREVE +0130 LATIN CAPITAL LETTER I WITH DOT ABOVE +0131 LATIN SMALL LETTER DOTLESS I +015E LATIN CAPITAL LETTER S WITH CEDILLA * +015F LATIN SMALL LETTER S WITH CEDILLA * diff --git a/fontconfig/fc-lang/ts.orth b/fontconfig/fc-lang/ts.orth index 1226dd842..ade4e3bbf 100644 --- a/fontconfig/fc-lang/ts.orth +++ b/fontconfig/fc-lang/ts.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/ts.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Tsonga (TS) -# -# Orthography taken from http://www.eki.ee/letter -# -0041-005a -0061-007a +# +# fontconfig/fc-lang/ts.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Tsonga (TS) +# +# Orthography taken from http://www.eki.ee/letter +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/tt.orth b/fontconfig/fc-lang/tt.orth index 588b2c444..0292d1ff0 100644 --- a/fontconfig/fc-lang/tt.orth +++ b/fontconfig/fc-lang/tt.orth @@ -1,108 +1,108 @@ -# -# fontconfig/fc-lang/tt.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Tatar (TT) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -#0472 # CYRILLIC CAPITAL LETTER FITA -#0473 # CYRILLIC SMALL LETTER FITA -0496 -0497 -04a2 -04a3 -04ae -04af -04ba -04bb -04d8 -04d9 +# +# fontconfig/fc-lang/tt.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Tatar (TT) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA +#0473 # CYRILLIC SMALL LETTER FITA +0496 +0497 +04a2 +04a3 +04ae +04af +04ba +04bb +04d8 +04d9 diff --git a/fontconfig/fc-lang/tw.orth b/fontconfig/fc-lang/tw.orth index f89379cc4..4cee88b63 100644 --- a/fontconfig/fc-lang/tw.orth +++ b/fontconfig/fc-lang/tw.orth @@ -1,50 +1,50 @@ -# -# fontconfig/fc-lang/tw.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Twi (tw) -# -# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf -# -0041-005a -0061-007a -00C3 # LATIN CAPITAL LETTER A WITH TILDE -00E3 # LATIN SMALL LETTER A WITH TILDE -00D1 # LATIN CAPITAL LETTER N WITH TILDE -00D5 # LATIN CAPITAL LETTER O WITH TILDE -00F1 # LATIN SMALL LETTER N WITH TILDE -00F5 # LATIN SMALL LETTER O WITH TILDE -0128 # LATIN CAPITAL LETTER I WITH TILDE -0129 # LATIN SMALL LETTER I WITH TILDE -0168 # LATIN CAPITAL LETTER U WITH TILDE -0169 # LATIN SMALL LETTER U WITH TILDE -0186 # LATIN CAPITAL LETTER OPEN O -0254 # LATIN SMALL LETTER OPEN O -0190 # LATIN CAPITAL LETTER OPEN E -025B # LATIN SMALL LETTER OPEN E -0303 # COMBINING TILDE -0306 # COMBINING BREVE (Vrachy) -0329 # COMBINING VERTICAL LINE BELOW -1EBC # LATIN CAPITAL LETTER E WITH TILDE -1EBD # LATIN SMALL LETTER E WITH TILDE -1EF8 # LATIN CAPITAL LETTER Y WITH TILDE -1EF9 # LATIN SMALL LETTER Y WITH TILDE +# +# fontconfig/fc-lang/tw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Twi (tw) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a +00C3 # LATIN CAPITAL LETTER A WITH TILDE +00E3 # LATIN SMALL LETTER A WITH TILDE +00D1 # LATIN CAPITAL LETTER N WITH TILDE +00D5 # LATIN CAPITAL LETTER O WITH TILDE +00F1 # LATIN SMALL LETTER N WITH TILDE +00F5 # LATIN SMALL LETTER O WITH TILDE +0128 # LATIN CAPITAL LETTER I WITH TILDE +0129 # LATIN SMALL LETTER I WITH TILDE +0168 # LATIN CAPITAL LETTER U WITH TILDE +0169 # LATIN SMALL LETTER U WITH TILDE +0186 # LATIN CAPITAL LETTER OPEN O +0254 # LATIN SMALL LETTER OPEN O +0190 # LATIN CAPITAL LETTER OPEN E +025B # LATIN SMALL LETTER OPEN E +0303 # COMBINING TILDE +0306 # COMBINING BREVE (Vrachy) +0329 # COMBINING VERTICAL LINE BELOW +1EBC # LATIN CAPITAL LETTER E WITH TILDE +1EBD # LATIN SMALL LETTER E WITH TILDE +1EF8 # LATIN CAPITAL LETTER Y WITH TILDE +1EF9 # LATIN SMALL LETTER Y WITH TILDE diff --git a/fontconfig/fc-lang/tyv.orth b/fontconfig/fc-lang/tyv.orth index 7926a6768..9498541f9 100644 --- a/fontconfig/fc-lang/tyv.orth +++ b/fontconfig/fc-lang/tyv.orth @@ -1,102 +1,102 @@ -# -# fontconfig/fc-lang/tyv.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Coverage taken from TITUS (Thesaurus Indogermanischer Text und -# Sprachmaterialien) -# -# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm -# -# Tuvinian (TYV) -# -0401 -0410 -0411 -0412 -0413 -0414 -0415 -0416 -0417 -0418 -0419 -041a -041b -041c -041d -041e -041f -0420 -0421 -0422 -0423 -0424 -0425 -0426 -0427 -0428 -0429 -042a -042b -042c -042d -042e -042f -0430 -0431 -0432 -0433 -0434 -0435 -0436 -0437 -0438 -0439 -043a -043b -043c -043d -043e -043f -0440 -0441 -0442 -0443 -0444 -0445 -0446 -0447 -0448 -0449 -044a -044b -044c -044d -044e -044f -0451 -#0472 # CYRILLIC CAPITAL LETTER FITA -#0473 # CYRILLIC SMALL LETTER FITA -04a2 -04a3 -04ae -04af +# +# fontconfig/fc-lang/tyv.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Coverage taken from TITUS (Thesaurus Indogermanischer Text und +# Sprachmaterialien) +# +# http://titus.uni-frankfurt.de/unicode/alphabet/nslatest.htm +# +# Tuvinian (TYV) +# +0401 +0410 +0411 +0412 +0413 +0414 +0415 +0416 +0417 +0418 +0419 +041a +041b +041c +041d +041e +041f +0420 +0421 +0422 +0423 +0424 +0425 +0426 +0427 +0428 +0429 +042a +042b +042c +042d +042e +042f +0430 +0431 +0432 +0433 +0434 +0435 +0436 +0437 +0438 +0439 +043a +043b +043c +043d +043e +043f +0440 +0441 +0442 +0443 +0444 +0445 +0446 +0447 +0448 +0449 +044a +044b +044c +044d +044e +044f +0451 +#0472 # CYRILLIC CAPITAL LETTER FITA +#0473 # CYRILLIC SMALL LETTER FITA +04a2 +04a3 +04ae +04af diff --git a/fontconfig/fc-lang/ug.orth b/fontconfig/fc-lang/ug.orth index 6b97b9a04..1a6f28d99 100644 --- a/fontconfig/fc-lang/ug.orth +++ b/fontconfig/fc-lang/ug.orth @@ -1,50 +1,50 @@ -# -# fontconfig/fc-lang/ug.orth -# -# Copyright © 2010 -# UKIJ - Uyghur Computer Science Association (http://www.ukij.org/) -# Ubuntu Uyghur Translation Team (https://launchpad.net/~ubuntu-l10n-ug) -# Kenjisoft (http://kenjisoft.homelinux.com/) -# Bilik (http://www.bilik.cn/) -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors makes no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Uyghur (UG) -# -# Uyghur is written in a modified Persian-Arabic script. For detailed -# information, refer to http://en.wikipedia.org/wiki/Uyghur_language -# -0626-0628 -062A -062C -062E-062F -0631-0634 -063A -0641-0646 -0648-064A -067E -0686 -0698 -06AD -06AF -06BE -06C6-06C8 -06CB -06D0 -06D5 +# +# fontconfig/fc-lang/ug.orth +# +# Copyright © 2010 +# UKIJ - Uyghur Computer Science Association (http://www.ukij.org/) +# Ubuntu Uyghur Translation Team (https://launchpad.net/~ubuntu-l10n-ug) +# Kenjisoft (http://kenjisoft.homelinux.com/) +# Bilik (http://www.bilik.cn/) +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors makes no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Uyghur (UG) +# +# Uyghur is written in a modified Persian-Arabic script. For detailed +# information, refer to http://en.wikipedia.org/wiki/Uyghur_language +# +0626-0628 +062A +062C +062E-062F +0631-0634 +063A +0641-0646 +0648-064A +067E +0686 +0698 +06AD +06AF +06BE +06C6-06C8 +06CB +06D0 +06D5 diff --git a/fontconfig/fc-lang/uk.orth b/fontconfig/fc-lang/uk.orth index 639593360..d1dc05b46 100644 --- a/fontconfig/fc-lang/uk.orth +++ b/fontconfig/fc-lang/uk.orth @@ -1,43 +1,43 @@ -# -# fontconfig/fc-lang/uk.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Ukrainian (UK) -# -# Sources: -# www.evertype.com -# www.eki.ee/letter -# -#00ab -#00bb -#0401 # evertype.com -0404 -0406 -0407 -0410-044f -#0451 # evertype.com -0454 -0456 -0457 -0490 -0491 -#2039-203a # angle quotes +# +# fontconfig/fc-lang/uk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Ukrainian (UK) +# +# Sources: +# www.evertype.com +# www.eki.ee/letter +# +#00ab +#00bb +#0401 # evertype.com +0404 +0406 +0407 +0410-044f +#0451 # evertype.com +0454 +0456 +0457 +0490 +0491 +#2039-203a # angle quotes diff --git a/fontconfig/fc-lang/ur.orth b/fontconfig/fc-lang/ur.orth index 5b7b5e656..57f724d10 100644 --- a/fontconfig/fc-lang/ur.orth +++ b/fontconfig/fc-lang/ur.orth @@ -1,65 +1,65 @@ -# -# fontconfig/fc-lang/ur.orth -# -# Copyright © 2002 Keith Packard -# Copyright © 2009 Roozbeh Pournader -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Urdu (ur) -# -# We are assuming that: -# * Most fonts that claim to support an Arabic letter actually do so; -# * Most modern text rendering software use OpenType tables, instead of -# directly using presentation forms. -# * Some good Arabic fonts do not support codepoints for Arabic presentation -# forms. -# Thus, we are switching to general forms of Arabic letters. -# -# General forms: -0621-0624 -0626-063a -0641-0642 -0644-0648 -0679 -067e -0686 -0688 -0691 -0698 -06a9 -06af -06ba -06be -06cc -06d2 -# Presentations forms: -#fb56-fb59 -#fb66-fb69 -#fb7a-fb7d -#fb88-fb8d -#fb8e-fb95 -#fb9e-fb9f -#fbfc-fbff -#fbaa-fbaf -#fe80-fe86 -#fe89-fed8 -#fedd-feee -##fef5-fef8 # These four happen very rarely -#fefb-fefc +# +# fontconfig/fc-lang/ur.orth +# +# Copyright © 2002 Keith Packard +# Copyright © 2009 Roozbeh Pournader +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Urdu (ur) +# +# We are assuming that: +# * Most fonts that claim to support an Arabic letter actually do so; +# * Most modern text rendering software use OpenType tables, instead of +# directly using presentation forms. +# * Some good Arabic fonts do not support codepoints for Arabic presentation +# forms. +# Thus, we are switching to general forms of Arabic letters. +# +# General forms: +0621-0624 +0626-063a +0641-0642 +0644-0648 +0679 +067e +0686 +0688 +0691 +0698 +06a9 +06af +06ba +06be +06cc +06d2 +# Presentations forms: +#fb56-fb59 +#fb66-fb69 +#fb7a-fb7d +#fb88-fb8d +#fb8e-fb95 +#fb9e-fb9f +#fbfc-fbff +#fbaa-fbaf +#fe80-fe86 +#fe89-fed8 +#fedd-feee +##fef5-fef8 # These four happen very rarely +#fefb-fefc diff --git a/fontconfig/fc-lang/ve.orth b/fontconfig/fc-lang/ve.orth index 96d9af3e2..173cbf5a6 100644 --- a/fontconfig/fc-lang/ve.orth +++ b/fontconfig/fc-lang/ve.orth @@ -1,34 +1,34 @@ -# -# fontconfig/fc-lang/ve.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Venda (ve) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -1e12-1e13 -1e3c-1e3d -1e44-1e45 -1e4a-1e4b -1e70-1e71 +# +# fontconfig/fc-lang/ve.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Venda (ve) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +1e12-1e13 +1e3c-1e3d +1e44-1e45 +1e4a-1e4b +1e70-1e71 diff --git a/fontconfig/fc-lang/vi.orth b/fontconfig/fc-lang/vi.orth index 8255c3d68..96c51a95d 100644 --- a/fontconfig/fc-lang/vi.orth +++ b/fontconfig/fc-lang/vi.orth @@ -1,58 +1,58 @@ -# -# fontconfig/fc-lang/vi.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Vietnamese (VI) -# -# Information extracted from email sent by Markus Kuhn about the -# standard Vietnamese character set (TCVN 6909:2001) -# -0041-005a -0061-007a -00c0-00c3 -00c8-00ca -00cc-00cd -00d2-00d5 -00d9-00da -00dd -00e0-00e3 -00e8-00ea -00ec-00ed -00f2-00f5 -00f9-00fa -00fd -0102-0103 -0110-0111 -0128-0129 -0168-0169 -01a0-01a1 -01af-01b0 -# diacritical marks -0300-0303 -0306 -0309 -031b -0323 -# more precomposed latin -1ea0-1ef9 -# double quote marks -#201c-201d +# +# fontconfig/fc-lang/vi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Vietnamese (VI) +# +# Information extracted from email sent by Markus Kuhn about the +# standard Vietnamese character set (TCVN 6909:2001) +# +0041-005a +0061-007a +00c0-00c3 +00c8-00ca +00cc-00cd +00d2-00d5 +00d9-00da +00dd +00e0-00e3 +00e8-00ea +00ec-00ed +00f2-00f5 +00f9-00fa +00fd +0102-0103 +0110-0111 +0128-0129 +0168-0169 +01a0-01a1 +01af-01b0 +# diacritical marks +0300-0303 +0306 +0309 +031b +0323 +# more precomposed latin +1ea0-1ef9 +# double quote marks +#201c-201d diff --git a/fontconfig/fc-lang/vo.orth b/fontconfig/fc-lang/vo.orth index fe2b34946..52dcb1899 100644 --- a/fontconfig/fc-lang/vo.orth +++ b/fontconfig/fc-lang/vo.orth @@ -1,36 +1,36 @@ -# -# fontconfig/fc-lang/vo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Volapük (VO) -0041-0050 -0052-0056 -0058-005a -0061-0070 -0072-0076 -0078-007a -00c4 -00d6 -00dc -00e4 -00f6 -00fc +# +# fontconfig/fc-lang/vo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Volapük (VO) +0041-0050 +0052-0056 +0058-005a +0061-0070 +0072-0076 +0078-007a +00c4 +00d6 +00dc +00e4 +00f6 +00fc diff --git a/fontconfig/fc-lang/vot.orth b/fontconfig/fc-lang/vot.orth index 2bfafdba2..b31b22fb1 100644 --- a/fontconfig/fc-lang/vot.orth +++ b/fontconfig/fc-lang/vot.orth @@ -1,40 +1,40 @@ -# -# fontconfig/fc-lang/vot.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Orthography from http://www.everytype.com/alphabets/votic.pdf -# -# Votic (VOT) -# -# Sources: -# www.evertype.com -# -0041-005a -0061-007a -00c4 -00d6 -00dc -00e4 -00f6 -00fc -0160-0161 -017d-017e +# +# fontconfig/fc-lang/vot.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Orthography from http://www.everytype.com/alphabets/votic.pdf +# +# Votic (VOT) +# +# Sources: +# www.evertype.com +# +0041-005a +0061-007a +00c4 +00d6 +00dc +00e4 +00f6 +00fc +0160-0161 +017d-017e diff --git a/fontconfig/fc-lang/wa.orth b/fontconfig/fc-lang/wa.orth index bb854343e..25e6ff54e 100644 --- a/fontconfig/fc-lang/wa.orth +++ b/fontconfig/fc-lang/wa.orth @@ -1,47 +1,47 @@ -# -# fontconfig/fc-lang/wa.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Walloon (WA) -# -# Data from private communication with Pablo Saratxaga -# -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 +# +0041-005a +0061-007a +00c2 # A circumflex +00c5 # A ring +00c7 # C cedilla +00c8 # E grave +00c9 # E acute +00ca # E circumflex +00ce # I circumflex +00d4 # O circumflex +00db # U circumflex +00e2 # a circumflex +00e5 # a ring +00e7 # c cedilla +00e8 # e grave +00e9 # e acute +00ea # e circumflex +00ee # i circumflex +00f4 # o circumflex +00fb # u circumflex diff --git a/fontconfig/fc-lang/wen.orth b/fontconfig/fc-lang/wen.orth index b17f6508c..d53dd12a4 100644 --- a/fontconfig/fc-lang/wen.orth +++ b/fontconfig/fc-lang/wen.orth @@ -1,42 +1,42 @@ -# -# fontconfig/fc-lang/wen.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Sorbian languages (lower and upper) (WEN) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -0106-0107 -010c-010d -011a-011b -0141-0142 -0143-0144 -00d3 -00f3 -0154-0155 -0158-0159 -015a-015b -0160-0161 -0179-017a -017d-017e +# +# fontconfig/fc-lang/wen.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Sorbian languages (lower and upper) (WEN) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +0106-0107 +010c-010d +011a-011b +0141-0142 +0143-0144 +00d3 +00f3 +0154-0155 +0158-0159 +015a-015b +0160-0161 +0179-017a +017d-017e diff --git a/fontconfig/fc-lang/wo.orth b/fontconfig/fc-lang/wo.orth index e11500452..8e94e218e 100644 --- a/fontconfig/fc-lang/wo.orth +++ b/fontconfig/fc-lang/wo.orth @@ -1,42 +1,42 @@ -# -# fontconfig/fc-lang/wo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Wolof (WO) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c0 -00e0 -00c3 -00e3 -00c9 -00e9 -00cb -00eb -00d1 -00f1 -014a-014b -00d3 -00f3 +# +# fontconfig/fc-lang/wo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Wolof (WO) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00e0 +00c3 +00e3 +00c9 +00e9 +00cb +00eb +00d1 +00f1 +014a-014b +00d3 +00f3 diff --git a/fontconfig/fc-lang/xh.orth b/fontconfig/fc-lang/xh.orth index 4a8aaa2c4..c6dddac4e 100644 --- a/fontconfig/fc-lang/xh.orth +++ b/fontconfig/fc-lang/xh.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/xh.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Xhosa (XH) -# -# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf -# -0041-005a -0061-007a +# +# fontconfig/fc-lang/xh.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Xhosa (XH) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a diff --git a/fontconfig/fc-lang/yap.orth b/fontconfig/fc-lang/yap.orth index 35979cdde..5aedf0ef9 100644 --- a/fontconfig/fc-lang/yap.orth +++ b/fontconfig/fc-lang/yap.orth @@ -1,35 +1,35 @@ -# -# fontconfig/fc-lang/yap.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Yapese (YAP) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c4 -00e4 -00cb -00eb -00d6 -00f6 +# +# fontconfig/fc-lang/yap.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Yapese (YAP) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c4 +00e4 +00cb +00eb +00d6 +00f6 diff --git a/fontconfig/fc-lang/yi.orth b/fontconfig/fc-lang/yi.orth index 1f799fcbf..51d6ca329 100644 --- a/fontconfig/fc-lang/yi.orth +++ b/fontconfig/fc-lang/yi.orth @@ -1,25 +1,25 @@ -# -# fontconfig/fc-lang/yi.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Yiddish (YI) -include he.orth +# +# fontconfig/fc-lang/yi.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Yiddish (YI) +include he.orth diff --git a/fontconfig/fc-lang/yo.orth b/fontconfig/fc-lang/yo.orth index aa98b419e..77c5eca25 100644 --- a/fontconfig/fc-lang/yo.orth +++ b/fontconfig/fc-lang/yo.orth @@ -1,86 +1,86 @@ -# -# fontconfig/fc-lang/yo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Yoruba (YO) -# -# Orthography from http://www.eki.ee/letter -# -0041-005a -0061-007a -00c0 -00c1 -00c2 -00c3 -00c8 -00c9 -00ca -00cc -00cd -00ce -00d2 -00d3 -00d4 -00d5 -00d9 -00da -00db -00e0 -00e1 -00e2 -00e3 -00e8 -00e9 -00ea -00ec -00ed -00ee -00f2 -00f3 -00f4 -00f5 -00f9 -00fa -00fb -011a-011b -0128-0129 -0143-0144 -0168-0169 -01cd-01ce -01cf-01d0 -01d1-01d2 -01d3-01d4 -01f8-01f9 # LATIN LETTER N WITH GRAVE -0300 -0301 -0302 -0303 -030c -1e3e-1e3f -1e62-1e63 -1eb8-1eb9 -1ebc-1ebd -1ecc-1ecd -# LATIN CAPTIAL LETTER M WITH MACRON (no UCS code) -# LATIN CAPTIAL LETTER N WITH MACRON (no UCS code) -# LATIN SMALL LETTER M WITH MACRON (no UCS code) -# LATIN SMALL LETTER N WITH MACRON (no UCS code) +# +# fontconfig/fc-lang/yo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Yoruba (YO) +# +# Orthography from http://www.eki.ee/letter +# +0041-005a +0061-007a +00c0 +00c1 +00c2 +00c3 +00c8 +00c9 +00ca +00cc +00cd +00ce +00d2 +00d3 +00d4 +00d5 +00d9 +00da +00db +00e0 +00e1 +00e2 +00e3 +00e8 +00e9 +00ea +00ec +00ed +00ee +00f2 +00f3 +00f4 +00f5 +00f9 +00fa +00fb +011a-011b +0128-0129 +0143-0144 +0168-0169 +01cd-01ce +01cf-01d0 +01d1-01d2 +01d3-01d4 +01f8-01f9 # LATIN LETTER N WITH GRAVE +0300 +0301 +0302 +0303 +030c +1e3e-1e3f +1e62-1e63 +1eb8-1eb9 +1ebc-1ebd +1ecc-1ecd +# LATIN CAPTIAL LETTER M WITH MACRON (no UCS code) +# LATIN CAPTIAL LETTER N WITH MACRON (no UCS code) +# LATIN SMALL LETTER M WITH MACRON (no UCS code) +# LATIN SMALL LETTER N WITH MACRON (no UCS code) diff --git a/fontconfig/fc-lang/zh_cn.orth b/fontconfig/fc-lang/zh_cn.orth index 357af6c51..135c0ea93 100644 --- a/fontconfig/fc-lang/zh_cn.orth +++ b/fontconfig/fc-lang/zh_cn.orth @@ -1,6792 +1,6792 @@ -# -# fontconfig/fc-lang/zh_cn.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Chinese (simplified) (ZH-CN) -# -# Coverage computed from GB2312 -# -0x02C7 # CARON (Mandarin Chinese third tone) -0x02C9 # MODIFIER LETTER MACRON (Mandarin Chinese first tone) -0x4E00 # -0x4E01 # -0x4E03 # -0x4E07 # -0x4E08 # -0x4E09 # -0x4E0A # -0x4E0B # -0x4E0C # -0x4E0D # -0x4E0E # -0x4E10 # -0x4E11 # -0x4E13 # -0x4E14 # -0x4E15 # -0x4E16 # -0x4E18 # -0x4E19 # -0x4E1A # -0x4E1B # -0x4E1C # -0x4E1D # -0x4E1E # -0x4E22 # -0x4E24 # -0x4E25 # -0x4E27 # -0x4E28 # -0x4E2A # -0x4E2B # -0x4E2C # -0x4E2D # -0x4E30 # -0x4E32 # -0x4E34 # -0x4E36 # -0x4E38 # -0x4E39 # -0x4E3A # -0x4E3B # -0x4E3D # -0x4E3E # -0x4E3F # -0x4E43 # -0x4E45 # -0x4E47 # -0x4E48 # -0x4E49 # -0x4E4B # -0x4E4C # -0x4E4D # -0x4E4E # -0x4E4F # -0x4E50 # -0x4E52 # -0x4E53 # -0x4E54 # -0x4E56 # -0x4E58 # -0x4E59 # -0x4E5C # -0x4E5D # -0x4E5E # -0x4E5F # -0x4E60 # -0x4E61 # -0x4E66 # -0x4E69 # -0x4E70 # -0x4E71 # -0x4E73 # -0x4E7E # -0x4E86 # -0x4E88 # -0x4E89 # -0x4E8B # -0x4E8C # -0x4E8D # -0x4E8E # -0x4E8F # -0x4E91 # -0x4E92 # -0x4E93 # -0x4E94 # -0x4E95 # -0x4E98 # -0x4E9A # -0x4E9B # -0x4E9F # -0x4EA0 # -0x4EA1 # -0x4EA2 # -0x4EA4 # -0x4EA5 # -0x4EA6 # -0x4EA7 # -0x4EA8 # -0x4EA9 # -0x4EAB # -0x4EAC # -0x4EAD # -0x4EAE # -0x4EB2 # -0x4EB3 # -0x4EB5 # -0x4EBA # -0x4EBB # -0x4EBF # -0x4EC0 # -0x4EC1 # -0x4EC2 # -0x4EC3 # -0x4EC4 # -0x4EC5 # -0x4EC6 # -0x4EC7 # -0x4EC9 # -0x4ECA # -0x4ECB # -0x4ECD # -0x4ECE # -0x4ED1 # -0x4ED3 # -0x4ED4 # -0x4ED5 # -0x4ED6 # -0x4ED7 # -0x4ED8 # -0x4ED9 # -0x4EDD # -0x4EDE # -0x4EDF # -0x4EE1 # -0x4EE3 # -0x4EE4 # -0x4EE5 # -0x4EE8 # -0x4EEA # -0x4EEB # -0x4EEC # -0x4EF0 # -0x4EF2 # -0x4EF3 # -0x4EF5 # -0x4EF6 # -0x4EF7 # -0x4EFB # -0x4EFD # -0x4EFF # -0x4F01 # -0x4F09 # -0x4F0A # -0x4F0D # -0x4F0E # -0x4F0F # -0x4F10 # -0x4F11 # -0x4F17 # -0x4F18 # -0x4F19 # -0x4F1A # -0x4F1B # -0x4F1E # -0x4F1F # -0x4F20 # -0x4F22 # -0x4F24 # -0x4F25 # -0x4F26 # -0x4F27 # -0x4F2A # -0x4F2B # -0x4F2F # -0x4F30 # -0x4F32 # -0x4F34 # -0x4F36 # -0x4F38 # -0x4F3A # -0x4F3C # -0x4F3D # -0x4F43 # -0x4F46 # -0x4F4D # -0x4F4E # -0x4F4F # -0x4F50 # -0x4F51 # -0x4F53 # -0x4F55 # -0x4F57 # -0x4F58 # -0x4F59 # -0x4F5A # -0x4F5B # -0x4F5C # -0x4F5D # -0x4F5E # -0x4F5F # -0x4F60 # -0x4F63 # -0x4F64 # -0x4F65 # -0x4F67 # -0x4F69 # -0x4F6C # -0x4F6F # -0x4F70 # -0x4F73 # -0x4F74 # -0x4F76 # -0x4F7B # -0x4F7C # -0x4F7E # -0x4F7F # -0x4F83 # -0x4F84 # -0x4F88 # -0x4F89 # -0x4F8B # -0x4F8D # -0x4F8F # -0x4F91 # -0x4F94 # -0x4F97 # -0x4F9B # -0x4F9D # -0x4FA0 # -0x4FA3 # -0x4FA5 # -0x4FA6 # -0x4FA7 # -0x4FA8 # -0x4FA9 # -0x4FAA # -0x4FAC # -0x4FAE # -0x4FAF # -0x4FB5 # -0x4FBF # -0x4FC3 # -0x4FC4 # -0x4FC5 # -0x4FCA # -0x4FCE # -0x4FCF # -0x4FD0 # -0x4FD1 # -0x4FD7 # -0x4FD8 # -0x4FDA # -0x4FDC # -0x4FDD # -0x4FDE # -0x4FDF # -0x4FE1 # -0x4FE3 # -0x4FE6 # -0x4FE8 # -0x4FE9 # -0x4FEA # -0x4FED # -0x4FEE # -0x4FEF # -0x4FF1 # -0x4FF3 # -0x4FF8 # -0x4FFA # -0x4FFE # -0x500C # -0x500D # -0x500F # -0x5012 # -0x5014 # -0x5018 # -0x5019 # -0x501A # -0x501C # -0x501F # -0x5021 # -0x5025 # -0x5026 # -0x5028 # -0x5029 # -0x502A # -0x502C # -0x502D # -0x502E # -0x503A # -0x503C # -0x503E # -0x5043 # -0x5047 # -0x5048 # -0x504C # -0x504E # -0x504F # -0x5055 # -0x505A # -0x505C # -0x5065 # -0x506C # -0x5076 # -0x5077 # -0x507B # -0x507E # -0x507F # -0x5080 # -0x5085 # -0x5088 # -0x508D # -0x50A3 # -0x50A5 # -0x50A7 # -0x50A8 # -0x50A9 # -0x50AC # -0x50B2 # -0x50BA # -0x50BB # -0x50CF # -0x50D6 # -0x50DA # -0x50E6 # -0x50E7 # -0x50EC # -0x50ED # -0x50EE # -0x50F3 # -0x50F5 # -0x50FB # -0x5106 # -0x5107 # -0x510B # -0x5112 # -0x5121 # -0x513F # -0x5140 # -0x5141 # -0x5143 # -0x5144 # -0x5145 # -0x5146 # -0x5148 # -0x5149 # -0x514B # -0x514D # -0x5151 # -0x5154 # -0x5155 # -0x5156 # -0x515A # -0x515C # -0x5162 # -0x5165 # -0x5168 # -0x516B # -0x516C # -0x516D # -0x516E # -0x5170 # -0x5171 # -0x5173 # -0x5174 # -0x5175 # -0x5176 # -0x5177 # -0x5178 # -0x5179 # -0x517B # -0x517C # -0x517D # -0x5180 # -0x5181 # -0x5182 # -0x5185 # -0x5188 # -0x5189 # -0x518C # -0x518D # -0x5192 # -0x5195 # -0x5196 # -0x5197 # -0x5199 # -0x519B # -0x519C # -0x51A0 # -0x51A2 # -0x51A4 # -0x51A5 # -0x51AB # -0x51AC # -0x51AF # -0x51B0 # -0x51B1 # -0x51B2 # -0x51B3 # -0x51B5 # -0x51B6 # -0x51B7 # -0x51BB # -0x51BC # -0x51BD # -0x51C0 # -0x51C4 # -0x51C6 # -0x51C7 # -0x51C9 # -0x51CB # -0x51CC # -0x51CF # -0x51D1 # -0x51DB # -0x51DD # -0x51E0 # -0x51E1 # -0x51E4 # -0x51EB # -0x51ED # -0x51EF # -0x51F0 # -0x51F3 # -0x51F5 # -0x51F6 # -0x51F8 # -0x51F9 # -0x51FA # -0x51FB # -0x51FC # -0x51FD # -0x51FF # -0x5200 # -0x5201 # -0x5202 # -0x5203 # -0x5206 # -0x5207 # -0x5208 # -0x520A # -0x520D # -0x520E # -0x5211 # -0x5212 # -0x5216 # -0x5217 # -0x5218 # -0x5219 # -0x521A # -0x521B # -0x521D # -0x5220 # -0x5224 # -0x5228 # -0x5229 # -0x522B # -0x522D # -0x522E # -0x5230 # -0x5233 # -0x5236 # -0x5237 # -0x5238 # -0x5239 # -0x523A # -0x523B # -0x523D # -0x523F # -0x5240 # -0x5241 # -0x5242 # -0x5243 # -0x524A # -0x524C # -0x524D # -0x5250 # -0x5251 # -0x5254 # -0x5256 # -0x525C # -0x525E # -0x5261 # -0x5265 # -0x5267 # -0x5269 # -0x526A # -0x526F # -0x5272 # -0x527D # -0x527F # -0x5281 # -0x5282 # -0x5288 # -0x5290 # -0x5293 # -0x529B # -0x529D # -0x529E # -0x529F # -0x52A0 # -0x52A1 # -0x52A2 # -0x52A3 # -0x52A8 # -0x52A9 # -0x52AA # -0x52AB # -0x52AC # -0x52AD # -0x52B1 # -0x52B2 # -0x52B3 # -0x52BE # -0x52BF # -0x52C3 # -0x52C7 # -0x52C9 # -0x52CB # -0x52D0 # -0x52D2 # -0x52D6 # -0x52D8 # -0x52DF # -0x52E4 # -0x52F0 # -0x52F9 # -0x52FA # -0x52FE # -0x52FF # -0x5300 # -0x5305 # -0x5306 # -0x5308 # -0x530D # -0x530F # -0x5310 # -0x5315 # -0x5316 # -0x5317 # -0x5319 # -0x531A # -0x531D # -0x5320 # -0x5321 # -0x5323 # -0x5326 # -0x532A # -0x532E # -0x5339 # -0x533A # -0x533B # -0x533E # -0x533F # -0x5341 # -0x5343 # -0x5345 # -0x5347 # -0x5348 # -0x5349 # -0x534A # -0x534E # -0x534F # -0x5351 # -0x5352 # -0x5353 # -0x5355 # -0x5356 # -0x5357 # -0x535A # -0x535C # -0x535E # -0x535F # -0x5360 # -0x5361 # -0x5362 # -0x5363 # -0x5364 # -0x5366 # -0x5367 # -0x5369 # -0x536B # -0x536E # -0x536F # -0x5370 # -0x5371 # -0x5373 # -0x5374 # -0x5375 # -0x5377 # -0x5378 # -0x537A # -0x537F # -0x5382 # -0x5384 # -0x5385 # -0x5386 # -0x5389 # -0x538B # -0x538C # -0x538D # -0x5395 # -0x5398 # -0x539A # -0x539D # -0x539F # -0x53A2 # -0x53A3 # -0x53A5 # -0x53A6 # -0x53A8 # -0x53A9 # -0x53AE # -0x53B6 # -0x53BB # -0x53BF # -0x53C1 # -0x53C2 # -0x53C8 # -0x53C9 # -0x53CA # -0x53CB # -0x53CC # -0x53CD # -0x53D1 # -0x53D4 # -0x53D6 # -0x53D7 # -0x53D8 # -0x53D9 # -0x53DB # -0x53DF # -0x53E0 # -0x53E3 # -0x53E4 # -0x53E5 # -0x53E6 # -0x53E8 # -0x53E9 # -0x53EA # -0x53EB # -0x53EC # -0x53ED # -0x53EE # -0x53EF # -0x53F0 # -0x53F1 # -0x53F2 # -0x53F3 # -0x53F5 # -0x53F6 # -0x53F7 # -0x53F8 # -0x53F9 # -0x53FB # -0x53FC # -0x53FD # -0x5401 # -0x5403 # -0x5404 # -0x5406 # -0x5408 # -0x5409 # -0x540A # -0x540C # -0x540D # -0x540E # -0x540F # -0x5410 # -0x5411 # -0x5412 # -0x5413 # -0x5415 # -0x5416 # -0x5417 # -0x541B # -0x541D # -0x541E # -0x541F # -0x5420 # -0x5421 # -0x5423 # -0x5426 # -0x5427 # -0x5428 # -0x5429 # -0x542B # -0x542C # -0x542D # -0x542E # -0x542F # -0x5431 # -0x5432 # -0x5434 # -0x5435 # -0x5438 # -0x5439 # -0x543B # -0x543C # -0x543E # -0x5440 # -0x5443 # -0x5446 # -0x5448 # -0x544A # -0x544B # -0x5450 # -0x5452 # -0x5453 # -0x5454 # -0x5455 # -0x5456 # -0x5457 # -0x5458 # -0x5459 # -0x545B # -0x545C # -0x5462 # -0x5464 # -0x5466 # -0x5468 # -0x5471 # -0x5472 # -0x5473 # -0x5475 # -0x5476 # -0x5477 # -0x5478 # -0x547B # -0x547C # -0x547D # -0x5480 # -0x5482 # -0x5484 # -0x5486 # -0x548B # -0x548C # -0x548E # -0x548F # -0x5490 # -0x5492 # -0x5494 # -0x5495 # -0x5496 # -0x5499 # -0x549A # -0x549B # -0x549D # -0x54A3 # -0x54A4 # -0x54A6 # -0x54A7 # -0x54A8 # -0x54A9 # -0x54AA # -0x54AB # -0x54AC # -0x54AD # -0x54AF # -0x54B1 # -0x54B3 # -0x54B4 # -0x54B8 # -0x54BB # -0x54BD # -0x54BF # -0x54C0 # -0x54C1 # -0x54C2 # -0x54C4 # -0x54C6 # -0x54C7 # -0x54C8 # -0x54C9 # -0x54CC # -0x54CD # -0x54CE # -0x54CF # -0x54D0 # -0x54D1 # -0x54D2 # -0x54D3 # -0x54D4 # -0x54D5 # -0x54D7 # -0x54D9 # -0x54DA # -0x54DC # -0x54DD # -0x54DE # -0x54DF # -0x54E5 # -0x54E6 # -0x54E7 # -0x54E8 # -0x54E9 # -0x54EA # -0x54ED # -0x54EE # -0x54F2 # -0x54F3 # -0x54FA # -0x54FC # -0x54FD # -0x54FF # -0x5501 # -0x5506 # -0x5507 # -0x5509 # -0x550F # -0x5510 # -0x5511 # -0x5514 # -0x551B # -0x5520 # -0x5522 # -0x5523 # -0x5524 # -0x5527 # -0x552A # -0x552C # -0x552E # -0x552F # -0x5530 # -0x5531 # -0x5533 # -0x5537 # -0x553C # -0x553E # -0x553F # -0x5541 # -0x5543 # -0x5544 # -0x5546 # -0x5549 # -0x554A # -0x5550 # -0x5555 # -0x5556 # -0x555C # -0x5561 # -0x5564 # -0x5565 # -0x5566 # -0x5567 # -0x556A # -0x556C # -0x556D # -0x556E # -0x5575 # -0x5576 # -0x5577 # -0x5578 # -0x557B # -0x557C # -0x557E # -0x5580 # -0x5581 # -0x5582 # -0x5583 # -0x5584 # -0x5587 # -0x5588 # -0x5589 # -0x558A # -0x558B # -0x558F # -0x5591 # -0x5594 # -0x5598 # -0x5599 # -0x559C # -0x559D # -0x559F # -0x55A7 # -0x55B1 # -0x55B3 # -0x55B5 # -0x55B7 # -0x55B9 # -0x55BB # -0x55BD # -0x55BE # -0x55C4 # -0x55C5 # -0x55C9 # -0x55CC # -0x55CD # -0x55D1 # -0x55D2 # -0x55D3 # -0x55D4 # -0x55D6 # -0x55DC # -0x55DD # -0x55DF # -0x55E1 # -0x55E3 # -0x55E4 # -0x55E5 # -0x55E6 # -0x55E8 # -0x55EA # -0x55EB # -0x55EC # -0x55EF # -0x55F2 # -0x55F3 # -0x55F5 # -0x55F7 # -0x55FD # -0x55FE # -0x5600 # -0x5601 # -0x5608 # -0x5609 # -0x560C # -0x560E # -0x560F # -0x5618 # -0x561B # -0x561E # -0x561F # -0x5623 # -0x5624 # -0x5627 # -0x562C # -0x562D # -0x5631 # -0x5632 # -0x5634 # -0x5636 # -0x5639 # -0x563B # -0x563F # -0x564C # -0x564D # -0x564E # -0x5654 # -0x5657 # -0x5658 # -0x5659 # -0x565C # -0x5662 # -0x5664 # -0x5668 # -0x5669 # -0x566A # -0x566B # -0x566C # -0x5671 # -0x5676 # -0x567B # -0x567C # -0x5685 # -0x5686 # -0x568E # -0x568F # -0x5693 # -0x56A3 # -0x56AF # -0x56B7 # -0x56BC # -0x56CA # -0x56D4 # -0x56D7 # -0x56DA # -0x56DB # -0x56DD # -0x56DE # -0x56DF # -0x56E0 # -0x56E1 # -0x56E2 # -0x56E4 # -0x56EB # -0x56ED # -0x56F0 # -0x56F1 # -0x56F4 # -0x56F5 # -0x56F9 # -0x56FA # -0x56FD # -0x56FE # -0x56FF # -0x5703 # -0x5704 # -0x5706 # -0x5708 # -0x5709 # -0x570A # -0x571C # -0x571F # -0x5723 # -0x5728 # -0x5729 # -0x572A # -0x572C # -0x572D # -0x572E # -0x572F # -0x5730 # -0x5733 # -0x5739 # -0x573A # -0x573B # -0x573E # -0x5740 # -0x5742 # -0x5747 # -0x574A # -0x574C # -0x574D # -0x574E # -0x574F # -0x5750 # -0x5751 # -0x5757 # -0x575A # -0x575B # -0x575C # -0x575D # -0x575E # -0x575F # -0x5760 # -0x5761 # -0x5764 # -0x5766 # -0x5768 # -0x5769 # -0x576A # -0x576B # -0x576D # -0x576F # -0x5773 # -0x5776 # -0x5777 # -0x577B # -0x577C # -0x5782 # -0x5783 # -0x5784 # -0x5785 # -0x5786 # -0x578B # -0x578C # -0x5792 # -0x5793 # -0x579B # -0x57A0 # -0x57A1 # -0x57A2 # -0x57A3 # -0x57A4 # -0x57A6 # -0x57A7 # -0x57A9 # -0x57AB # -0x57AD # -0x57AE # -0x57B2 # -0x57B4 # -0x57B8 # -0x57C2 # -0x57C3 # -0x57CB # -0x57CE # -0x57CF # -0x57D2 # -0x57D4 # -0x57D5 # -0x57D8 # -0x57D9 # -0x57DA # -0x57DD # -0x57DF # -0x57E0 # -0x57E4 # -0x57ED # -0x57EF # -0x57F4 # -0x57F8 # -0x57F9 # -0x57FA # -0x57FD # -0x5800 # -0x5802 # -0x5806 # -0x5807 # -0x580B # -0x580D # -0x5811 # -0x5815 # -0x5819 # -0x581E # -0x5820 # -0x5821 # -0x5824 # -0x582A # -0x5830 # -0x5835 # -0x5844 # -0x584C # -0x584D # -0x5851 # -0x5854 # -0x5858 # -0x585E # -0x5865 # -0x586B # -0x586C # -0x587E # -0x5880 # -0x5881 # -0x5883 # -0x5885 # -0x5889 # -0x5892 # -0x5893 # -0x5899 # -0x589A # -0x589E # -0x589F # -0x58A8 # -0x58A9 # -0x58BC # -0x58C1 # -0x58C5 # -0x58D1 # -0x58D5 # -0x58E4 # -0x58EB # -0x58EC # -0x58EE # -0x58F0 # -0x58F3 # -0x58F6 # -0x58F9 # -0x5902 # -0x5904 # -0x5907 # -0x590D # -0x590F # -0x5914 # -0x5915 # -0x5916 # -0x5919 # -0x591A # -0x591C # -0x591F # -0x5924 # -0x5925 # -0x5927 # -0x5929 # -0x592A # -0x592B # -0x592D # -0x592E # -0x592F # -0x5931 # -0x5934 # -0x5937 # -0x5938 # -0x5939 # -0x593A # -0x593C # -0x5941 # -0x5942 # -0x5944 # -0x5947 # -0x5948 # -0x5949 # -0x594B # -0x594E # -0x594F # -0x5951 # -0x5954 # -0x5955 # -0x5956 # -0x5957 # -0x5958 # -0x595A # -0x5960 # -0x5962 # -0x5965 # -0x5973 # -0x5974 # -0x5976 # -0x5978 # -0x5979 # -0x597D # -0x5981 # -0x5982 # -0x5983 # -0x5984 # -0x5986 # -0x5987 # -0x5988 # -0x598A # -0x598D # -0x5992 # -0x5993 # -0x5996 # -0x5997 # -0x5999 # -0x599E # -0x59A3 # -0x59A4 # -0x59A5 # -0x59A8 # -0x59A9 # -0x59AA # -0x59AB # -0x59AE # -0x59AF # -0x59B2 # -0x59B9 # -0x59BB # -0x59BE # -0x59C6 # -0x59CA # -0x59CB # -0x59D0 # -0x59D1 # -0x59D2 # -0x59D3 # -0x59D4 # -0x59D7 # -0x59D8 # -0x59DA # -0x59DC # -0x59DD # -0x59E3 # -0x59E5 # -0x59E8 # -0x59EC # -0x59F9 # -0x59FB # -0x59FF # -0x5A01 # -0x5A03 # -0x5A04 # -0x5A05 # -0x5A06 # -0x5A07 # -0x5A08 # -0x5A09 # -0x5A0C # -0x5A11 # -0x5A13 # -0x5A18 # -0x5A1C # -0x5A1F # -0x5A20 # -0x5A23 # -0x5A25 # -0x5A29 # -0x5A31 # -0x5A32 # -0x5A34 # -0x5A36 # -0x5A3C # -0x5A40 # -0x5A46 # -0x5A49 # -0x5A4A # -0x5A55 # -0x5A5A # -0x5A62 # -0x5A67 # -0x5A6A # -0x5A74 # -0x5A75 # -0x5A76 # -0x5A77 # -0x5A7A # -0x5A7F # -0x5A92 # -0x5A9A # -0x5A9B # -0x5AAA # -0x5AB2 # -0x5AB3 # -0x5AB5 # -0x5AB8 # -0x5ABE # -0x5AC1 # -0x5AC2 # -0x5AC9 # -0x5ACC # -0x5AD2 # -0x5AD4 # -0x5AD6 # -0x5AD8 # -0x5ADC # -0x5AE0 # -0x5AE1 # -0x5AE3 # -0x5AE6 # -0x5AE9 # -0x5AEB # -0x5AF1 # -0x5B09 # -0x5B16 # -0x5B17 # -0x5B32 # -0x5B34 # -0x5B37 # -0x5B40 # -0x5B50 # -0x5B51 # -0x5B53 # -0x5B54 # -0x5B55 # -0x5B57 # -0x5B58 # -0x5B59 # -0x5B5A # -0x5B5B # -0x5B5C # -0x5B5D # -0x5B5F # -0x5B62 # -0x5B63 # -0x5B64 # -0x5B65 # -0x5B66 # -0x5B69 # -0x5B6A # -0x5B6C # -0x5B70 # -0x5B71 # -0x5B73 # -0x5B75 # -0x5B7A # -0x5B7D # -0x5B80 # -0x5B81 # -0x5B83 # -0x5B84 # -0x5B85 # -0x5B87 # -0x5B88 # -0x5B89 # -0x5B8B # -0x5B8C # -0x5B8F # -0x5B93 # -0x5B95 # -0x5B97 # -0x5B98 # -0x5B99 # -0x5B9A # -0x5B9B # -0x5B9C # -0x5B9D # -0x5B9E # -0x5BA0 # -0x5BA1 # -0x5BA2 # -0x5BA3 # -0x5BA4 # -0x5BA5 # -0x5BA6 # -0x5BAA # -0x5BAB # -0x5BB0 # -0x5BB3 # -0x5BB4 # -0x5BB5 # -0x5BB6 # -0x5BB8 # -0x5BB9 # -0x5BBD # -0x5BBE # -0x5BBF # -0x5BC2 # -0x5BC4 # -0x5BC5 # -0x5BC6 # -0x5BC7 # -0x5BCC # -0x5BD0 # -0x5BD2 # -0x5BD3 # -0x5BDD # -0x5BDE # -0x5BDF # -0x5BE1 # -0x5BE4 # -0x5BE5 # -0x5BE8 # -0x5BEE # -0x5BF0 # -0x5BF8 # -0x5BF9 # -0x5BFA # -0x5BFB # -0x5BFC # -0x5BFF # -0x5C01 # -0x5C04 # -0x5C06 # -0x5C09 # -0x5C0A # -0x5C0F # -0x5C11 # -0x5C14 # -0x5C15 # -0x5C16 # -0x5C18 # -0x5C1A # -0x5C1C # -0x5C1D # -0x5C22 # -0x5C24 # -0x5C25 # -0x5C27 # -0x5C2C # -0x5C31 # -0x5C34 # -0x5C38 # -0x5C39 # -0x5C3A # -0x5C3B # -0x5C3C # -0x5C3D # -0x5C3E # -0x5C3F # -0x5C40 # -0x5C41 # -0x5C42 # -0x5C45 # -0x5C48 # -0x5C49 # -0x5C4A # -0x5C4B # -0x5C4E # -0x5C4F # -0x5C50 # -0x5C51 # -0x5C55 # -0x5C59 # -0x5C5E # -0x5C60 # -0x5C61 # -0x5C63 # -0x5C65 # -0x5C66 # -0x5C6E # -0x5C6F # -0x5C71 # -0x5C79 # -0x5C7A # -0x5C7F # -0x5C81 # -0x5C82 # -0x5C88 # -0x5C8C # -0x5C8D # -0x5C90 # -0x5C91 # -0x5C94 # -0x5C96 # -0x5C97 # -0x5C98 # -0x5C99 # -0x5C9A # -0x5C9B # -0x5C9C # -0x5CA2 # -0x5CA3 # -0x5CA9 # -0x5CAB # -0x5CAC # -0x5CAD # -0x5CB1 # -0x5CB3 # -0x5CB5 # -0x5CB7 # -0x5CB8 # -0x5CBD # -0x5CBF # -0x5CC1 # -0x5CC4 # -0x5CCB # -0x5CD2 # -0x5CD9 # -0x5CE1 # -0x5CE4 # -0x5CE5 # -0x5CE6 # -0x5CE8 # -0x5CEA # -0x5CED # -0x5CF0 # -0x5CFB # -0x5D02 # -0x5D03 # -0x5D06 # -0x5D07 # -0x5D0E # -0x5D14 # -0x5D16 # -0x5D1B # -0x5D1E # -0x5D24 # -0x5D26 # -0x5D27 # -0x5D29 # -0x5D2D # -0x5D2E # -0x5D34 # -0x5D3D # -0x5D3E # -0x5D47 # -0x5D4A # -0x5D4B # -0x5D4C # -0x5D58 # -0x5D5B # -0x5D5D # -0x5D69 # -0x5D6B # -0x5D6C # -0x5D6F # -0x5D74 # -0x5D82 # -0x5D99 # -0x5D9D # -0x5DB7 # -0x5DC5 # -0x5DCD # -0x5DDB # -0x5DDD # -0x5DDE # -0x5DE1 # -0x5DE2 # -0x5DE5 # -0x5DE6 # -0x5DE7 # -0x5DE8 # -0x5DE9 # -0x5DEB # -0x5DEE # -0x5DEF # -0x5DF1 # -0x5DF2 # -0x5DF3 # -0x5DF4 # -0x5DF7 # -0x5DFD # -0x5DFE # -0x5E01 # -0x5E02 # -0x5E03 # -0x5E05 # -0x5E06 # -0x5E08 # -0x5E0C # -0x5E0F # -0x5E10 # -0x5E11 # -0x5E14 # -0x5E15 # -0x5E16 # -0x5E18 # -0x5E19 # -0x5E1A # -0x5E1B # -0x5E1C # -0x5E1D # -0x5E26 # -0x5E27 # -0x5E2D # -0x5E2E # -0x5E31 # -0x5E37 # -0x5E38 # -0x5E3B # -0x5E3C # -0x5E3D # -0x5E42 # -0x5E44 # -0x5E45 # -0x5E4C # -0x5E54 # -0x5E55 # -0x5E5B # -0x5E5E # -0x5E61 # -0x5E62 # -0x5E72 # -0x5E73 # -0x5E74 # -0x5E76 # -0x5E78 # -0x5E7A # -0x5E7B # -0x5E7C # -0x5E7D # -0x5E7F # -0x5E80 # -0x5E84 # -0x5E86 # -0x5E87 # -0x5E8A # -0x5E8B # -0x5E8F # -0x5E90 # -0x5E91 # -0x5E93 # -0x5E94 # -0x5E95 # -0x5E96 # -0x5E97 # -0x5E99 # -0x5E9A # -0x5E9C # -0x5E9E # -0x5E9F # -0x5EA0 # -0x5EA5 # -0x5EA6 # -0x5EA7 # -0x5EAD # -0x5EB3 # -0x5EB5 # -0x5EB6 # -0x5EB7 # -0x5EB8 # -0x5EB9 # -0x5EBE # -0x5EC9 # -0x5ECA # -0x5ED1 # -0x5ED2 # -0x5ED3 # -0x5ED6 # -0x5EDB # -0x5EE8 # -0x5EEA # -0x5EF4 # -0x5EF6 # -0x5EF7 # -0x5EFA # -0x5EFE # -0x5EFF # -0x5F00 # -0x5F01 # -0x5F02 # -0x5F03 # -0x5F04 # -0x5F08 # -0x5F0A # -0x5F0B # -0x5F0F # -0x5F11 # -0x5F13 # -0x5F15 # -0x5F17 # -0x5F18 # -0x5F1B # -0x5F1F # -0x5F20 # -0x5F25 # -0x5F26 # -0x5F27 # -0x5F29 # -0x5F2A # -0x5F2D # -0x5F2F # -0x5F31 # -0x5F39 # -0x5F3A # -0x5F3C # -0x5F40 # -0x5F50 # -0x5F52 # -0x5F53 # -0x5F55 # -0x5F56 # -0x5F57 # -0x5F58 # -0x5F5D # -0x5F61 # -0x5F62 # -0x5F64 # -0x5F66 # -0x5F69 # -0x5F6A # -0x5F6C # -0x5F6D # -0x5F70 # -0x5F71 # -0x5F73 # -0x5F77 # -0x5F79 # -0x5F7B # -0x5F7C # -0x5F80 # -0x5F81 # -0x5F82 # -0x5F84 # -0x5F85 # -0x5F87 # -0x5F88 # -0x5F89 # -0x5F8A # -0x5F8B # -0x5F8C # -0x5F90 # -0x5F92 # -0x5F95 # -0x5F97 # -0x5F98 # -0x5F99 # -0x5F9C # -0x5FA1 # -0x5FA8 # -0x5FAA # -0x5FAD # -0x5FAE # -0x5FB5 # -0x5FB7 # -0x5FBC # -0x5FBD # -0x5FC3 # -0x5FC4 # -0x5FC5 # -0x5FC6 # -0x5FC9 # -0x5FCC # -0x5FCD # -0x5FCF # -0x5FD0 # -0x5FD1 # -0x5FD2 # -0x5FD6 # -0x5FD7 # -0x5FD8 # -0x5FD9 # -0x5FDD # -0x5FE0 # -0x5FE1 # -0x5FE4 # -0x5FE7 # -0x5FEA # -0x5FEB # -0x5FED # -0x5FEE # -0x5FF1 # -0x5FF5 # -0x5FF8 # -0x5FFB # -0x5FFD # -0x5FFE # -0x5FFF # -0x6000 # -0x6001 # -0x6002 # -0x6003 # -0x6004 # -0x6005 # -0x6006 # -0x600A # -0x600D # -0x600E # -0x600F # -0x6012 # -0x6014 # -0x6015 # -0x6016 # -0x6019 # -0x601B # -0x601C # -0x601D # -0x6020 # -0x6021 # -0x6025 # -0x6026 # -0x6027 # -0x6028 # -0x6029 # -0x602A # -0x602B # -0x602F # -0x6035 # -0x603B # -0x603C # -0x603F # -0x6041 # -0x6042 # -0x6043 # -0x604B # -0x604D # -0x6050 # -0x6052 # -0x6055 # -0x6059 # -0x605A # -0x605D # -0x6062 # -0x6063 # -0x6064 # -0x6067 # -0x6068 # -0x6069 # -0x606A # -0x606B # -0x606C # -0x606D # -0x606F # -0x6070 # -0x6073 # -0x6076 # -0x6078 # -0x6079 # -0x607A # -0x607B # -0x607C # -0x607D # -0x607F # -0x6083 # -0x6084 # -0x6089 # -0x608C # -0x608D # -0x6092 # -0x6094 # -0x6096 # -0x609A # -0x609B # -0x609D # -0x609F # -0x60A0 # -0x60A3 # -0x60A6 # -0x60A8 # -0x60AB # -0x60AC # -0x60AD # -0x60AF # -0x60B1 # -0x60B2 # -0x60B4 # -0x60B8 # -0x60BB # -0x60BC # -0x60C5 # -0x60C6 # -0x60CA # -0x60CB # -0x60D1 # -0x60D5 # -0x60D8 # -0x60DA # -0x60DC # -0x60DD # -0x60DF # -0x60E0 # -0x60E6 # -0x60E7 # -0x60E8 # -0x60E9 # -0x60EB # -0x60EC # -0x60ED # -0x60EE # -0x60EF # -0x60F0 # -0x60F3 # -0x60F4 # -0x60F6 # -0x60F9 # -0x60FA # -0x6100 # -0x6101 # -0x6106 # -0x6108 # -0x6109 # -0x610D # -0x610E # -0x610F # -0x6115 # -0x611A # -0x611F # -0x6120 # -0x6123 # -0x6124 # -0x6126 # -0x6127 # -0x612B # -0x613F # -0x6148 # -0x614A # -0x614C # -0x614E # -0x6151 # -0x6155 # -0x615D # -0x6162 # -0x6167 # -0x6168 # -0x6170 # -0x6175 # -0x6177 # -0x618B # -0x618E # -0x6194 # -0x619D # -0x61A7 # -0x61A8 # -0x61A9 # -0x61AC # -0x61B7 # -0x61BE # -0x61C2 # -0x61C8 # -0x61CA # -0x61CB # -0x61D1 # -0x61D2 # -0x61D4 # -0x61E6 # -0x61F5 # -0x61FF # -0x6206 # -0x6208 # -0x620A # -0x620B # -0x620C # -0x620D # -0x620E # -0x620F # -0x6210 # -0x6211 # -0x6212 # -0x6215 # -0x6216 # -0x6217 # -0x6218 # -0x621A # -0x621B # -0x621F # -0x6221 # -0x6222 # -0x6224 # -0x6225 # -0x622A # -0x622C # -0x622E # -0x6233 # -0x6234 # -0x6237 # -0x623D # -0x623E # -0x623F # -0x6240 # -0x6241 # -0x6243 # -0x6247 # -0x6248 # -0x6249 # -0x624B # -0x624C # -0x624D # -0x624E # -0x6251 # -0x6252 # -0x6253 # -0x6254 # -0x6258 # -0x625B # -0x6263 # -0x6266 # -0x6267 # -0x6269 # -0x626A # -0x626B # -0x626C # -0x626D # -0x626E # -0x626F # -0x6270 # -0x6273 # -0x6276 # -0x6279 # -0x627C # -0x627E # -0x627F # -0x6280 # -0x6284 # -0x6289 # -0x628A # -0x6291 # -0x6292 # -0x6293 # -0x6295 # -0x6296 # -0x6297 # -0x6298 # -0x629A # -0x629B # -0x629F # -0x62A0 # -0x62A1 # -0x62A2 # -0x62A4 # -0x62A5 # -0x62A8 # -0x62AB # -0x62AC # -0x62B1 # -0x62B5 # -0x62B9 # -0x62BB # -0x62BC # -0x62BD # -0x62BF # -0x62C2 # -0x62C4 # -0x62C5 # -0x62C6 # -0x62C7 # -0x62C8 # -0x62C9 # -0x62CA # -0x62CC # -0x62CD # -0x62CE # -0x62D0 # -0x62D2 # -0x62D3 # -0x62D4 # -0x62D6 # -0x62D7 # -0x62D8 # -0x62D9 # -0x62DA # -0x62DB # -0x62DC # -0x62DF # -0x62E2 # -0x62E3 # -0x62E5 # -0x62E6 # -0x62E7 # -0x62E8 # -0x62E9 # -0x62EC # -0x62ED # -0x62EE # -0x62EF # -0x62F1 # -0x62F3 # -0x62F4 # -0x62F6 # -0x62F7 # -0x62FC # -0x62FD # -0x62FE # -0x62FF # -0x6301 # -0x6302 # -0x6307 # -0x6308 # -0x6309 # -0x630E # -0x6311 # -0x6316 # -0x631A # -0x631B # -0x631D # -0x631E # -0x631F # -0x6320 # -0x6321 # -0x6322 # -0x6323 # -0x6324 # -0x6325 # -0x6328 # -0x632A # -0x632B # -0x632F # -0x6332 # -0x6339 # -0x633A # -0x633D # -0x6342 # -0x6343 # -0x6345 # -0x6346 # -0x6349 # -0x634B # -0x634C # -0x634D # -0x634E # -0x634F # -0x6350 # -0x6355 # -0x635E # -0x635F # -0x6361 # -0x6362 # -0x6363 # -0x6367 # -0x6369 # -0x636D # -0x636E # -0x6371 # -0x6376 # -0x6377 # -0x637A # -0x637B # -0x6380 # -0x6382 # -0x6387 # -0x6388 # -0x6389 # -0x638A # -0x638C # -0x638E # -0x638F # -0x6390 # -0x6392 # -0x6396 # -0x6398 # -0x63A0 # -0x63A2 # -0x63A3 # -0x63A5 # -0x63A7 # -0x63A8 # -0x63A9 # -0x63AA # -0x63AC # -0x63AD # -0x63AE # -0x63B0 # -0x63B3 # -0x63B4 # -0x63B7 # -0x63B8 # -0x63BA # -0x63BC # -0x63BE # -0x63C4 # -0x63C6 # -0x63C9 # -0x63CD # -0x63CE # -0x63CF # -0x63D0 # -0x63D2 # -0x63D6 # -0x63DE # -0x63E0 # -0x63E1 # -0x63E3 # -0x63E9 # -0x63EA # -0x63ED # -0x63F2 # -0x63F4 # -0x63F6 # -0x63F8 # -0x63FD # -0x63FF # -0x6400 # -0x6401 # -0x6402 # -0x6405 # -0x640B # -0x640C # -0x640F # -0x6410 # -0x6413 # -0x6414 # -0x641B # -0x641C # -0x641E # -0x6420 # -0x6421 # -0x6426 # -0x642A # -0x642C # -0x642D # -0x6434 # -0x643A # -0x643D # -0x643F # -0x6441 # -0x6444 # -0x6445 # -0x6446 # -0x6447 # -0x6448 # -0x644A # -0x6452 # -0x6454 # -0x6458 # -0x645E # -0x6467 # -0x6469 # -0x646D # -0x6478 # -0x6479 # -0x647A # -0x6482 # -0x6484 # -0x6485 # -0x6487 # -0x6491 # -0x6492 # -0x6495 # -0x6496 # -0x6499 # -0x649E # -0x64A4 # -0x64A9 # -0x64AC # -0x64AD # -0x64AE # -0x64B0 # -0x64B5 # -0x64B7 # -0x64B8 # -0x64BA # -0x64BC # -0x64C0 # -0x64C2 # -0x64C5 # -0x64CD # -0x64CE # -0x64D0 # -0x64D2 # -0x64D7 # -0x64D8 # -0x64DE # -0x64E2 # -0x64E4 # -0x64E6 # -0x6500 # -0x6509 # -0x6512 # -0x6518 # -0x6525 # -0x652B # -0x652E # -0x652F # -0x6534 # -0x6535 # -0x6536 # -0x6538 # -0x6539 # -0x653B # -0x653E # -0x653F # -0x6545 # -0x6548 # -0x6549 # -0x654C # -0x654F # -0x6551 # -0x6555 # -0x6556 # -0x6559 # -0x655B # -0x655D # -0x655E # -0x6562 # -0x6563 # -0x6566 # -0x656B # -0x656C # -0x6570 # -0x6572 # -0x6574 # -0x6577 # -0x6587 # -0x658B # -0x658C # -0x6590 # -0x6591 # -0x6593 # -0x6597 # -0x6599 # -0x659B # -0x659C # -0x659F # -0x65A1 # -0x65A4 # -0x65A5 # -0x65A7 # -0x65A9 # -0x65AB # -0x65AD # -0x65AF # -0x65B0 # -0x65B9 # -0x65BC # -0x65BD # -0x65C1 # -0x65C3 # -0x65C4 # -0x65C5 # -0x65C6 # -0x65CB # -0x65CC # -0x65CE # -0x65CF # -0x65D2 # -0x65D6 # -0x65D7 # -0x65E0 # -0x65E2 # -0x65E5 # -0x65E6 # -0x65E7 # -0x65E8 # -0x65E9 # -0x65EC # -0x65ED # -0x65EE # -0x65EF # -0x65F0 # -0x65F1 # -0x65F6 # -0x65F7 # -0x65FA # -0x6600 # -0x6602 # -0x6603 # -0x6606 # -0x660A # -0x660C # -0x660E # -0x660F # -0x6613 # -0x6614 # -0x6615 # -0x6619 # -0x661D # -0x661F # -0x6620 # -0x6625 # -0x6627 # -0x6628 # -0x662D # -0x662F # -0x6631 # -0x6634 # -0x6635 # -0x6636 # -0x663C # -0x663E # -0x6641 # -0x6643 # -0x664B # -0x664C # -0x664F # -0x6652 # -0x6653 # -0x6654 # -0x6655 # -0x6656 # -0x6657 # -0x665A # -0x665F # -0x6661 # -0x6664 # -0x6666 # -0x6668 # -0x666E # -0x666F # -0x6670 # -0x6674 # -0x6676 # -0x6677 # -0x667A # -0x667E # -0x6682 # -0x6684 # -0x6687 # -0x668C # -0x6691 # -0x6696 # -0x6697 # -0x669D # -0x66A7 # -0x66A8 # -0x66AE # -0x66B4 # -0x66B9 # -0x66BE # -0x66D9 # -0x66DB # -0x66DC # -0x66DD # -0x66E6 # -0x66E9 # -0x66F0 # -0x66F2 # -0x66F3 # -0x66F4 # -0x66F7 # -0x66F9 # -0x66FC # -0x66FE # -0x66FF # -0x6700 # -0x6708 # -0x6709 # -0x670A # -0x670B # -0x670D # -0x6710 # -0x6714 # -0x6715 # -0x6717 # -0x671B # -0x671D # -0x671F # -0x6726 # -0x6728 # -0x672A # -0x672B # -0x672C # -0x672D # -0x672F # -0x6731 # -0x6734 # -0x6735 # -0x673A # -0x673D # -0x6740 # -0x6742 # -0x6743 # -0x6746 # -0x6748 # -0x6749 # -0x674C # -0x674E # -0x674F # -0x6750 # -0x6751 # -0x6753 # -0x6756 # -0x675C # -0x675E # -0x675F # -0x6760 # -0x6761 # -0x6765 # -0x6768 # -0x6769 # -0x676A # -0x676D # -0x676F # -0x6770 # -0x6772 # -0x6773 # -0x6775 # -0x6777 # -0x677C # -0x677E # -0x677F # -0x6781 # -0x6784 # -0x6787 # -0x6789 # -0x678B # -0x6790 # -0x6795 # -0x6797 # -0x6798 # -0x679A # -0x679C # -0x679D # -0x679E # -0x67A2 # -0x67A3 # -0x67A5 # -0x67A7 # -0x67A8 # -0x67AA # -0x67AB # -0x67AD # -0x67AF # -0x67B0 # -0x67B3 # -0x67B5 # -0x67B6 # -0x67B7 # -0x67B8 # -0x67C1 # -0x67C3 # -0x67C4 # -0x67CF # -0x67D0 # -0x67D1 # -0x67D2 # -0x67D3 # -0x67D4 # -0x67D8 # -0x67D9 # -0x67DA # -0x67DC # -0x67DD # -0x67DE # -0x67E0 # -0x67E2 # -0x67E5 # -0x67E9 # -0x67EC # -0x67EF # -0x67F0 # -0x67F1 # -0x67F3 # -0x67F4 # -0x67FD # -0x67FF # -0x6800 # -0x6805 # -0x6807 # -0x6808 # -0x6809 # -0x680A # -0x680B # -0x680C # -0x680E # -0x680F # -0x6811 # -0x6813 # -0x6816 # -0x6817 # -0x681D # -0x6821 # -0x6829 # -0x682A # -0x6832 # -0x6833 # -0x6837 # -0x6838 # -0x6839 # -0x683C # -0x683D # -0x683E # -0x6840 # -0x6841 # -0x6842 # -0x6843 # -0x6844 # -0x6845 # -0x6846 # -0x6848 # -0x6849 # -0x684A # -0x684C # -0x684E # -0x6850 # -0x6851 # -0x6853 # -0x6854 # -0x6855 # -0x6860 # -0x6861 # -0x6862 # -0x6863 # -0x6864 # -0x6865 # -0x6866 # -0x6867 # -0x6868 # -0x6869 # -0x686B # -0x6874 # -0x6876 # -0x6877 # -0x6881 # -0x6883 # -0x6885 # -0x6886 # -0x688F # -0x6893 # -0x6897 # -0x68A2 # -0x68A6 # -0x68A7 # -0x68A8 # -0x68AD # -0x68AF # -0x68B0 # -0x68B3 # -0x68B5 # -0x68C0 # -0x68C2 # -0x68C9 # -0x68CB # -0x68CD # -0x68D2 # -0x68D5 # -0x68D8 # -0x68DA # -0x68E0 # -0x68E3 # -0x68EE # -0x68F0 # -0x68F1 # -0x68F5 # -0x68F9 # -0x68FA # -0x68FC # -0x6901 # -0x6905 # -0x690B # -0x690D # -0x690E # -0x6910 # -0x6912 # -0x691F # -0x6920 # -0x6924 # -0x692D # -0x6930 # -0x6934 # -0x6939 # -0x693D # -0x693F # -0x6942 # -0x6954 # -0x6957 # -0x695A # -0x695D # -0x695E # -0x6960 # -0x6963 # -0x6966 # -0x696B # -0x696E # -0x6971 # -0x6977 # -0x6978 # -0x6979 # -0x697C # -0x6980 # -0x6982 # -0x6984 # -0x6986 # -0x6987 # -0x6988 # -0x6989 # -0x698D # -0x6994 # -0x6995 # -0x6998 # -0x699B # -0x699C # -0x69A7 # -0x69A8 # -0x69AB # -0x69AD # -0x69B1 # -0x69B4 # -0x69B7 # -0x69BB # -0x69C1 # -0x69CA # -0x69CC # -0x69CE # -0x69D0 # -0x69D4 # -0x69DB # -0x69DF # -0x69E0 # -0x69ED # -0x69F2 # -0x69FD # -0x69FF # -0x6A0A # -0x6A17 # -0x6A18 # -0x6A1F # -0x6A21 # -0x6A28 # -0x6A2A # -0x6A2F # -0x6A31 # -0x6A35 # -0x6A3D # -0x6A3E # -0x6A44 # -0x6A47 # -0x6A50 # -0x6A58 # -0x6A59 # -0x6A5B # -0x6A61 # -0x6A65 # -0x6A71 # -0x6A79 # -0x6A7C # -0x6A80 # -0x6A84 # -0x6A8E # -0x6A90 # -0x6A91 # -0x6A97 # -0x6AA0 # -0x6AA9 # -0x6AAB # -0x6AAC # -0x6B20 # -0x6B21 # -0x6B22 # -0x6B23 # -0x6B24 # -0x6B27 # -0x6B32 # -0x6B37 # -0x6B39 # -0x6B3A # -0x6B3E # -0x6B43 # -0x6B46 # -0x6B47 # -0x6B49 # -0x6B4C # -0x6B59 # -0x6B62 # -0x6B63 # -0x6B64 # -0x6B65 # -0x6B66 # -0x6B67 # -0x6B6A # -0x6B79 # -0x6B7B # -0x6B7C # -0x6B81 # -0x6B82 # -0x6B83 # -0x6B84 # -0x6B86 # -0x6B87 # -0x6B89 # -0x6B8A # -0x6B8B # -0x6B8D # -0x6B92 # -0x6B93 # -0x6B96 # -0x6B9A # -0x6B9B # -0x6BA1 # -0x6BAA # -0x6BB3 # -0x6BB4 # -0x6BB5 # -0x6BB7 # -0x6BBF # -0x6BC1 # -0x6BC2 # -0x6BC5 # -0x6BCB # -0x6BCD # -0x6BCF # -0x6BD2 # -0x6BD3 # -0x6BD4 # -0x6BD5 # -0x6BD6 # -0x6BD7 # -0x6BD9 # -0x6BDB # -0x6BE1 # -0x6BEA # -0x6BEB # -0x6BEF # -0x6BF3 # -0x6BF5 # -0x6BF9 # -0x6BFD # -0x6C05 # -0x6C06 # -0x6C07 # -0x6C0D # -0x6C0F # -0x6C10 # -0x6C11 # -0x6C13 # -0x6C14 # -0x6C15 # -0x6C16 # -0x6C18 # -0x6C19 # -0x6C1A # -0x6C1B # -0x6C1F # -0x6C21 # -0x6C22 # -0x6C24 # -0x6C26 # -0x6C27 # -0x6C28 # -0x6C29 # -0x6C2A # -0x6C2E # -0x6C2F # -0x6C30 # -0x6C32 # -0x6C34 # -0x6C35 # -0x6C38 # -0x6C3D # -0x6C40 # -0x6C41 # -0x6C42 # -0x6C46 # -0x6C47 # -0x6C49 # -0x6C4A # -0x6C50 # -0x6C54 # -0x6C55 # -0x6C57 # -0x6C5B # -0x6C5C # -0x6C5D # -0x6C5E # -0x6C5F # -0x6C60 # -0x6C61 # -0x6C64 # -0x6C68 # -0x6C69 # -0x6C6A # -0x6C70 # -0x6C72 # -0x6C74 # -0x6C76 # -0x6C79 # -0x6C7D # -0x6C7E # -0x6C81 # -0x6C82 # -0x6C83 # -0x6C85 # -0x6C86 # -0x6C88 # -0x6C89 # -0x6C8C # -0x6C8F # -0x6C90 # -0x6C93 # -0x6C94 # -0x6C99 # -0x6C9B # -0x6C9F # -0x6CA1 # -0x6CA3 # -0x6CA4 # -0x6CA5 # -0x6CA6 # -0x6CA7 # -0x6CA9 # -0x6CAA # -0x6CAB # -0x6CAD # -0x6CAE # -0x6CB1 # -0x6CB2 # -0x6CB3 # -0x6CB8 # -0x6CB9 # -0x6CBB # -0x6CBC # -0x6CBD # -0x6CBE # -0x6CBF # -0x6CC4 # -0x6CC5 # -0x6CC9 # -0x6CCA # -0x6CCC # -0x6CD0 # -0x6CD3 # -0x6CD4 # -0x6CD5 # -0x6CD6 # -0x6CD7 # -0x6CDB # -0x6CDE # -0x6CE0 # -0x6CE1 # -0x6CE2 # -0x6CE3 # -0x6CE5 # -0x6CE8 # -0x6CEA # -0x6CEB # -0x6CEE # -0x6CEF # -0x6CF0 # -0x6CF1 # -0x6CF3 # -0x6CF5 # -0x6CF6 # -0x6CF7 # -0x6CF8 # -0x6CFA # -0x6CFB # -0x6CFC # -0x6CFD # -0x6CFE # -0x6D01 # -0x6D04 # -0x6D07 # -0x6D0B # -0x6D0C # -0x6D0E # -0x6D12 # -0x6D17 # -0x6D19 # -0x6D1A # -0x6D1B # -0x6D1E # -0x6D25 # -0x6D27 # -0x6D2A # -0x6D2B # -0x6D2E # -0x6D31 # -0x6D32 # -0x6D33 # -0x6D35 # -0x6D39 # -0x6D3B # -0x6D3C # -0x6D3D # -0x6D3E # -0x6D41 # -0x6D43 # -0x6D45 # -0x6D46 # -0x6D47 # -0x6D48 # -0x6D4A # -0x6D4B # -0x6D4D # -0x6D4E # -0x6D4F # -0x6D51 # -0x6D52 # -0x6D53 # -0x6D54 # -0x6D59 # -0x6D5A # -0x6D5C # -0x6D5E # -0x6D60 # -0x6D63 # -0x6D66 # -0x6D69 # -0x6D6A # -0x6D6E # -0x6D6F # -0x6D74 # -0x6D77 # -0x6D78 # -0x6D7C # -0x6D82 # -0x6D85 # -0x6D88 # -0x6D89 # -0x6D8C # -0x6D8E # -0x6D91 # -0x6D93 # -0x6D94 # -0x6D95 # -0x6D9B # -0x6D9D # -0x6D9E # -0x6D9F # -0x6DA0 # -0x6DA1 # -0x6DA3 # -0x6DA4 # -0x6DA6 # -0x6DA7 # -0x6DA8 # -0x6DA9 # -0x6DAA # -0x6DAB # -0x6DAE # -0x6DAF # -0x6DB2 # -0x6DB5 # -0x6DB8 # -0x6DBF # -0x6DC0 # -0x6DC4 # -0x6DC5 # -0x6DC6 # -0x6DC7 # -0x6DCB # -0x6DCC # -0x6DD1 # -0x6DD6 # -0x6DD8 # -0x6DD9 # -0x6DDD # -0x6DDE # -0x6DE0 # -0x6DE1 # -0x6DE4 # -0x6DE6 # -0x6DEB # -0x6DEC # -0x6DEE # -0x6DF1 # -0x6DF3 # -0x6DF7 # -0x6DF9 # -0x6DFB # -0x6DFC # -0x6E05 # -0x6E0A # -0x6E0C # -0x6E0D # -0x6E0E # -0x6E10 # -0x6E11 # -0x6E14 # -0x6E16 # -0x6E17 # -0x6E1A # -0x6E1D # -0x6E20 # -0x6E21 # -0x6E23 # -0x6E24 # -0x6E25 # -0x6E29 # -0x6E2B # -0x6E2D # -0x6E2F # -0x6E32 # -0x6E34 # -0x6E38 # -0x6E3A # -0x6E43 # -0x6E44 # -0x6E4D # -0x6E4E # -0x6E53 # -0x6E54 # -0x6E56 # -0x6E58 # -0x6E5B # -0x6E5F # -0x6E6B # -0x6E6E # -0x6E7E # -0x6E7F # -0x6E83 # -0x6E85 # -0x6E86 # -0x6E89 # -0x6E8F # -0x6E90 # -0x6E98 # -0x6E9C # -0x6E9F # -0x6EA2 # -0x6EA5 # -0x6EA7 # -0x6EAA # -0x6EAF # -0x6EB1 # -0x6EB2 # -0x6EB4 # -0x6EB6 # -0x6EB7 # -0x6EBA # -0x6EBB # -0x6EBD # -0x6EC1 # -0x6EC2 # -0x6EC7 # -0x6ECB # -0x6ECF # -0x6ED1 # -0x6ED3 # -0x6ED4 # -0x6ED5 # -0x6ED7 # -0x6EDA # -0x6EDE # -0x6EDF # -0x6EE0 # -0x6EE1 # -0x6EE2 # -0x6EE4 # -0x6EE5 # -0x6EE6 # -0x6EE8 # -0x6EE9 # -0x6EF4 # -0x6EF9 # -0x6F02 # -0x6F06 # -0x6F09 # -0x6F0F # -0x6F13 # -0x6F14 # -0x6F15 # -0x6F20 # -0x6F24 # -0x6F29 # -0x6F2A # -0x6F2B # -0x6F2D # -0x6F2F # -0x6F31 # -0x6F33 # -0x6F36 # -0x6F3E # -0x6F46 # -0x6F47 # -0x6F4B # -0x6F4D # -0x6F58 # -0x6F5C # -0x6F5E # -0x6F62 # -0x6F66 # -0x6F6D # -0x6F6E # -0x6F72 # -0x6F74 # -0x6F78 # -0x6F7A # -0x6F7C # -0x6F84 # -0x6F88 # -0x6F89 # -0x6F8C # -0x6F8D # -0x6F8E # -0x6F9C # -0x6FA1 # -0x6FA7 # -0x6FB3 # -0x6FB6 # -0x6FB9 # -0x6FC0 # -0x6FC2 # -0x6FC9 # -0x6FD1 # -0x6FD2 # -0x6FDE # -0x6FE0 # -0x6FE1 # -0x6FEE # -0x6FEF # -0x7011 # -0x701A # -0x701B # -0x7023 # -0x7035 # -0x7039 # -0x704C # -0x704F # -0x705E # -0x706B # -0x706C # -0x706D # -0x706F # -0x7070 # -0x7075 # -0x7076 # -0x7078 # -0x707C # -0x707E # -0x707F # -0x7080 # -0x7085 # -0x7089 # -0x708A # -0x708E # -0x7092 # -0x7094 # -0x7095 # -0x7096 # -0x7099 # -0x709C # -0x709D # -0x70AB # -0x70AC # -0x70AD # -0x70AE # -0x70AF # -0x70B1 # -0x70B3 # -0x70B7 # -0x70B8 # -0x70B9 # -0x70BB # -0x70BC # -0x70BD # -0x70C0 # -0x70C1 # -0x70C2 # -0x70C3 # -0x70C8 # -0x70CA # -0x70D8 # -0x70D9 # -0x70DB # -0x70DF # -0x70E4 # -0x70E6 # -0x70E7 # -0x70E8 # -0x70E9 # -0x70EB # -0x70EC # -0x70ED # -0x70EF # -0x70F7 # -0x70F9 # -0x70FD # -0x7109 # -0x710A # -0x7110 # -0x7113 # -0x7115 # -0x7116 # -0x7118 # -0x7119 # -0x711A # -0x7126 # -0x712F # -0x7130 # -0x7131 # -0x7136 # -0x7145 # -0x714A # -0x714C # -0x714E # -0x715C # -0x715E # -0x7164 # -0x7166 # -0x7167 # -0x7168 # -0x716E # -0x7172 # -0x7173 # -0x7178 # -0x717A # -0x717D # -0x7184 # -0x718A # -0x718F # -0x7194 # -0x7198 # -0x7199 # -0x719F # -0x71A0 # -0x71A8 # -0x71AC # -0x71B3 # -0x71B5 # -0x71B9 # -0x71C3 # -0x71CE # -0x71D4 # -0x71D5 # -0x71E0 # -0x71E5 # -0x71E7 # -0x71EE # -0x71F9 # -0x7206 # -0x721D # -0x7228 # -0x722A # -0x722C # -0x7230 # -0x7231 # -0x7235 # -0x7236 # -0x7237 # -0x7238 # -0x7239 # -0x723B # -0x723D # -0x723F # -0x7247 # -0x7248 # -0x724C # -0x724D # -0x7252 # -0x7256 # -0x7259 # -0x725B # -0x725D # -0x725F # -0x7261 # -0x7262 # -0x7266 # -0x7267 # -0x7269 # -0x726E # -0x726F # -0x7272 # -0x7275 # -0x7279 # -0x727A # -0x727E # -0x727F # -0x7280 # -0x7281 # -0x7284 # -0x728A # -0x728B # -0x728D # -0x728F # -0x7292 # -0x729F # -0x72AC # -0x72AD # -0x72AF # -0x72B0 # -0x72B4 # -0x72B6 # -0x72B7 # -0x72B8 # -0x72B9 # -0x72C1 # -0x72C2 # -0x72C3 # -0x72C4 # -0x72C8 # -0x72CD # -0x72CE # -0x72D0 # -0x72D2 # -0x72D7 # -0x72D9 # -0x72DE # -0x72E0 # -0x72E1 # -0x72E8 # -0x72E9 # -0x72EC # -0x72ED # -0x72EE # -0x72EF # -0x72F0 # -0x72F1 # -0x72F2 # -0x72F3 # -0x72F4 # -0x72F7 # -0x72F8 # -0x72FA # -0x72FB # -0x72FC # -0x7301 # -0x7303 # -0x730A # -0x730E # -0x7313 # -0x7315 # -0x7316 # -0x7317 # -0x731B # -0x731C # -0x731D # -0x731E # -0x7321 # -0x7322 # -0x7325 # -0x7329 # -0x732A # -0x732B # -0x732C # -0x732E # -0x7331 # -0x7334 # -0x7337 # -0x7338 # -0x7339 # -0x733E # -0x733F # -0x734D # -0x7350 # -0x7352 # -0x7357 # -0x7360 # -0x736C # -0x736D # -0x736F # -0x737E # -0x7384 # -0x7387 # -0x7389 # -0x738B # -0x738E # -0x7391 # -0x7396 # -0x739B # -0x739F # -0x73A2 # -0x73A9 # -0x73AB # -0x73AE # -0x73AF # -0x73B0 # -0x73B2 # -0x73B3 # -0x73B7 # -0x73BA # -0x73BB # -0x73C0 # -0x73C2 # -0x73C8 # -0x73C9 # -0x73CA # -0x73CD # -0x73CF # -0x73D0 # -0x73D1 # -0x73D9 # -0x73DE # -0x73E0 # -0x73E5 # -0x73E7 # -0x73E9 # -0x73ED # -0x73F2 # -0x7403 # -0x7405 # -0x7406 # -0x7409 # -0x740A # -0x740F # -0x7410 # -0x741A # -0x741B # -0x7422 # -0x7425 # -0x7426 # -0x7428 # -0x742A # -0x742C # -0x742E # -0x7430 # -0x7433 # -0x7434 # -0x7435 # -0x7436 # -0x743C # -0x7441 # -0x7455 # -0x7457 # -0x7459 # -0x745A # -0x745B # -0x745C # -0x745E # -0x745F # -0x746D # -0x7470 # -0x7476 # -0x7477 # -0x747E # -0x7480 # -0x7481 # -0x7483 # -0x7487 # -0x748B # -0x748E # -0x7490 # -0x749C # -0x749E # -0x74A7 # -0x74A8 # -0x74A9 # -0x74BA # -0x74D2 # -0x74DC # -0x74DE # -0x74E0 # -0x74E2 # -0x74E3 # -0x74E4 # -0x74E6 # -0x74EE # -0x74EF # -0x74F4 # -0x74F6 # -0x74F7 # -0x74FF # -0x7504 # -0x750D # -0x750F # -0x7511 # -0x7513 # -0x7518 # -0x7519 # -0x751A # -0x751C # -0x751F # -0x7525 # -0x7528 # -0x7529 # -0x752B # -0x752C # -0x752D # -0x752F # -0x7530 # -0x7531 # -0x7532 # -0x7533 # -0x7535 # -0x7537 # -0x7538 # -0x753A # -0x753B # -0x753E # -0x7540 # -0x7545 # -0x7548 # -0x754B # -0x754C # -0x754E # -0x754F # -0x7554 # -0x7559 # -0x755A # -0x755B # -0x755C # -0x7565 # -0x7566 # -0x756A # -0x7572 # -0x7574 # -0x7578 # -0x7579 # -0x757F # -0x7583 # -0x7586 # -0x758B # -0x758F # -0x7591 # -0x7592 # -0x7594 # -0x7596 # -0x7597 # -0x7599 # -0x759A # -0x759D # -0x759F # -0x75A0 # -0x75A1 # -0x75A3 # -0x75A4 # -0x75A5 # -0x75AB # -0x75AC # -0x75AE # -0x75AF # -0x75B0 # -0x75B1 # -0x75B2 # -0x75B3 # -0x75B4 # -0x75B5 # -0x75B8 # -0x75B9 # -0x75BC # -0x75BD # -0x75BE # -0x75C2 # -0x75C3 # -0x75C4 # -0x75C5 # -0x75C7 # -0x75C8 # -0x75C9 # -0x75CA # -0x75CD # -0x75D2 # -0x75D4 # -0x75D5 # -0x75D6 # -0x75D8 # -0x75DB # -0x75DE # -0x75E2 # -0x75E3 # -0x75E4 # -0x75E6 # -0x75E7 # -0x75E8 # -0x75EA # -0x75EB # -0x75F0 # -0x75F1 # -0x75F4 # -0x75F9 # -0x75FC # -0x75FF # -0x7600 # -0x7601 # -0x7603 # -0x7605 # -0x760A # -0x760C # -0x7610 # -0x7615 # -0x7617 # -0x7618 # -0x7619 # -0x761B # -0x761F # -0x7620 # -0x7622 # -0x7624 # -0x7625 # -0x7626 # -0x7629 # -0x762A # -0x762B # -0x762D # -0x7630 # -0x7633 # -0x7634 # -0x7635 # -0x7638 # -0x763C # -0x763E # -0x763F # -0x7640 # -0x7643 # -0x764C # -0x764D # -0x7654 # -0x7656 # -0x765C # -0x765E # -0x7663 # -0x766B # -0x766F # -0x7678 # -0x767B # -0x767D # -0x767E # -0x7682 # -0x7684 # -0x7686 # -0x7687 # -0x7688 # -0x768B # -0x768E # -0x7691 # -0x7693 # -0x7696 # -0x7699 # -0x76A4 # -0x76AE # -0x76B1 # -0x76B2 # -0x76B4 # -0x76BF # -0x76C2 # -0x76C5 # -0x76C6 # -0x76C8 # -0x76CA # -0x76CD # -0x76CE # -0x76CF # -0x76D0 # -0x76D1 # -0x76D2 # -0x76D4 # -0x76D6 # -0x76D7 # -0x76D8 # -0x76DB # -0x76DF # -0x76E5 # -0x76EE # -0x76EF # -0x76F1 # -0x76F2 # -0x76F4 # -0x76F8 # -0x76F9 # -0x76FC # -0x76FE # -0x7701 # -0x7704 # -0x7707 # -0x7708 # -0x7709 # -0x770B # -0x770D # -0x7719 # -0x771A # -0x771F # -0x7720 # -0x7722 # -0x7726 # -0x7728 # -0x7729 # -0x772D # -0x772F # -0x7735 # -0x7736 # -0x7737 # -0x7738 # -0x773A # -0x773C # -0x7740 # -0x7741 # -0x7743 # -0x7747 # -0x7750 # -0x7751 # -0x775A # -0x775B # -0x7761 # -0x7762 # -0x7763 # -0x7765 # -0x7766 # -0x7768 # -0x776B # -0x776C # -0x7779 # -0x777D # -0x777E # -0x777F # -0x7780 # -0x7784 # -0x7785 # -0x778C # -0x778D # -0x778E # -0x7791 # -0x7792 # -0x779F # -0x77A0 # -0x77A2 # -0x77A5 # -0x77A7 # -0x77A9 # -0x77AA # -0x77AC # -0x77B0 # -0x77B3 # -0x77B5 # -0x77BB # -0x77BD # -0x77BF # -0x77CD # -0x77D7 # -0x77DB # -0x77DC # -0x77E2 # -0x77E3 # -0x77E5 # -0x77E7 # -0x77E9 # -0x77EB # -0x77EC # -0x77ED # -0x77EE # -0x77F3 # -0x77F6 # -0x77F8 # -0x77FD # -0x77FE # -0x77FF # -0x7800 # -0x7801 # -0x7802 # -0x7809 # -0x780C # -0x780D # -0x7811 # -0x7812 # -0x7814 # -0x7816 # -0x7817 # -0x7818 # -0x781A # -0x781C # -0x781D # -0x781F # -0x7823 # -0x7825 # -0x7826 # -0x7827 # -0x7829 # -0x782C # -0x782D # -0x7830 # -0x7834 # -0x7837 # -0x7838 # -0x7839 # -0x783A # -0x783B # -0x783C # -0x783E # -0x7840 # -0x7845 # -0x7847 # -0x784C # -0x784E # -0x7850 # -0x7852 # -0x7855 # -0x7856 # -0x7857 # -0x785D # -0x786A # -0x786B # -0x786C # -0x786D # -0x786E # -0x7877 # -0x787C # -0x7887 # -0x7889 # -0x788C # -0x788D # -0x788E # -0x7891 # -0x7893 # -0x7897 # -0x7898 # -0x789A # -0x789B # -0x789C # -0x789F # -0x78A1 # -0x78A3 # -0x78A5 # -0x78A7 # -0x78B0 # -0x78B1 # -0x78B2 # -0x78B3 # -0x78B4 # -0x78B9 # -0x78BE # -0x78C1 # -0x78C5 # -0x78C9 # -0x78CA # -0x78CB # -0x78D0 # -0x78D4 # -0x78D5 # -0x78D9 # -0x78E8 # -0x78EC # -0x78F2 # -0x78F4 # -0x78F7 # -0x78FA # -0x7901 # -0x7905 # -0x7913 # -0x791E # -0x7924 # -0x7934 # -0x793A # -0x793B # -0x793C # -0x793E # -0x7940 # -0x7941 # -0x7946 # -0x7948 # -0x7949 # -0x7953 # -0x7956 # -0x7957 # -0x795A # -0x795B # -0x795C # -0x795D # -0x795E # -0x795F # -0x7960 # -0x7962 # -0x7965 # -0x7967 # -0x7968 # -0x796D # -0x796F # -0x7977 # -0x7978 # -0x797A # -0x7980 # -0x7981 # -0x7984 # -0x7985 # -0x798A # -0x798F # -0x799A # -0x79A7 # -0x79B3 # -0x79B9 # -0x79BA # -0x79BB # -0x79BD # -0x79BE # -0x79C0 # -0x79C1 # -0x79C3 # -0x79C6 # -0x79C9 # -0x79CB # -0x79CD # -0x79D1 # -0x79D2 # -0x79D5 # -0x79D8 # -0x79DF # -0x79E3 # -0x79E4 # -0x79E6 # -0x79E7 # -0x79E9 # -0x79EB # -0x79ED # -0x79EF # -0x79F0 # -0x79F8 # -0x79FB # -0x79FD # -0x7A00 # -0x7A02 # -0x7A03 # -0x7A06 # -0x7A0B # -0x7A0D # -0x7A0E # -0x7A14 # -0x7A17 # -0x7A1A # -0x7A1E # -0x7A20 # -0x7A23 # -0x7A33 # -0x7A37 # -0x7A39 # -0x7A3B # -0x7A3C # -0x7A3D # -0x7A3F # -0x7A46 # -0x7A51 # -0x7A57 # -0x7A70 # -0x7A74 # -0x7A76 # -0x7A77 # -0x7A78 # -0x7A79 # -0x7A7A # -0x7A7F # -0x7A80 # -0x7A81 # -0x7A83 # -0x7A84 # -0x7A86 # -0x7A88 # -0x7A8D # -0x7A91 # -0x7A92 # -0x7A95 # -0x7A96 # -0x7A97 # -0x7A98 # -0x7A9C # -0x7A9D # -0x7A9F # -0x7AA0 # -0x7AA5 # -0x7AA6 # -0x7AA8 # -0x7AAC # -0x7AAD # -0x7AB3 # -0x7ABF # -0x7ACB # -0x7AD6 # -0x7AD9 # -0x7ADE # -0x7ADF # -0x7AE0 # -0x7AE3 # -0x7AE5 # -0x7AE6 # -0x7AED # -0x7AEF # -0x7AF9 # -0x7AFA # -0x7AFD # -0x7AFF # -0x7B03 # -0x7B04 # -0x7B06 # -0x7B08 # -0x7B0A # -0x7B0B # -0x7B0F # -0x7B11 # -0x7B14 # -0x7B15 # -0x7B19 # -0x7B1B # -0x7B1E # -0x7B20 # -0x7B24 # -0x7B25 # -0x7B26 # -0x7B28 # -0x7B2A # -0x7B2B # -0x7B2C # -0x7B2E # -0x7B31 # -0x7B33 # -0x7B38 # -0x7B3A # -0x7B3C # -0x7B3E # -0x7B45 # -0x7B47 # -0x7B49 # -0x7B4B # -0x7B4C # -0x7B4F # -0x7B50 # -0x7B51 # -0x7B52 # -0x7B54 # -0x7B56 # -0x7B58 # -0x7B5A # -0x7B5B # -0x7B5D # -0x7B60 # -0x7B62 # -0x7B6E # -0x7B71 # -0x7B72 # -0x7B75 # -0x7B77 # -0x7B79 # -0x7B7B # -0x7B7E # -0x7B80 # -0x7B85 # -0x7B8D # -0x7B90 # -0x7B94 # -0x7B95 # -0x7B97 # -0x7B9C # -0x7B9D # -0x7BA1 # -0x7BA2 # -0x7BA6 # -0x7BA7 # -0x7BA8 # -0x7BA9 # -0x7BAA # -0x7BAB # -0x7BAC # -0x7BAD # -0x7BB1 # -0x7BB4 # -0x7BB8 # -0x7BC1 # -0x7BC6 # -0x7BC7 # -0x7BCC # -0x7BD1 # -0x7BD3 # -0x7BD9 # -0x7BDA # -0x7BDD # -0x7BE1 # -0x7BE5 # -0x7BE6 # -0x7BEA # -0x7BEE # -0x7BF1 # -0x7BF7 # -0x7BFC # -0x7BFE # -0x7C07 # -0x7C0B # -0x7C0C # -0x7C0F # -0x7C16 # -0x7C1F # -0x7C26 # -0x7C27 # -0x7C2A # -0x7C38 # -0x7C3F # -0x7C40 # -0x7C41 # -0x7C4D # -0x7C73 # -0x7C74 # -0x7C7B # -0x7C7C # -0x7C7D # -0x7C89 # -0x7C91 # -0x7C92 # -0x7C95 # -0x7C97 # -0x7C98 # -0x7C9C # -0x7C9D # -0x7C9E # -0x7C9F # -0x7CA2 # -0x7CA4 # -0x7CA5 # -0x7CAA # -0x7CAE # -0x7CB1 # -0x7CB2 # -0x7CB3 # -0x7CB9 # -0x7CBC # -0x7CBD # -0x7CBE # -0x7CC1 # -0x7CC5 # -0x7CC7 # -0x7CC8 # -0x7CCA # -0x7CCC # -0x7CCD # -0x7CD5 # -0x7CD6 # -0x7CD7 # -0x7CD9 # -0x7CDC # -0x7CDF # -0x7CE0 # -0x7CE8 # -0x7CEF # -0x7CF8 # -0x7CFB # -0x7D0A # -0x7D20 # -0x7D22 # -0x7D27 # -0x7D2B # -0x7D2F # -0x7D6E # -0x7D77 # -0x7DA6 # -0x7DAE # -0x7E3B # -0x7E41 # -0x7E47 # -0x7E82 # -0x7E9B # -0x7E9F # -0x7EA0 # -0x7EA1 # -0x7EA2 # -0x7EA3 # -0x7EA4 # -0x7EA5 # -0x7EA6 # -0x7EA7 # -0x7EA8 # -0x7EA9 # -0x7EAA # -0x7EAB # -0x7EAC # -0x7EAD # -0x7EAF # -0x7EB0 # -0x7EB1 # -0x7EB2 # -0x7EB3 # -0x7EB5 # -0x7EB6 # -0x7EB7 # -0x7EB8 # -0x7EB9 # -0x7EBA # -0x7EBD # -0x7EBE # -0x7EBF # -0x7EC0 # -0x7EC1 # -0x7EC2 # -0x7EC3 # -0x7EC4 # -0x7EC5 # -0x7EC6 # -0x7EC7 # -0x7EC8 # -0x7EC9 # -0x7ECA # -0x7ECB # -0x7ECC # -0x7ECD # -0x7ECE # -0x7ECF # -0x7ED0 # -0x7ED1 # -0x7ED2 # -0x7ED3 # -0x7ED4 # -0x7ED5 # -0x7ED7 # -0x7ED8 # -0x7ED9 # -0x7EDA # -0x7EDB # -0x7EDC # -0x7EDD # -0x7EDE # -0x7EDF # -0x7EE0 # -0x7EE1 # -0x7EE2 # -0x7EE3 # -0x7EE5 # -0x7EE6 # -0x7EE7 # -0x7EE8 # -0x7EE9 # -0x7EEA # -0x7EEB # -0x7EED # -0x7EEE # -0x7EEF # -0x7EF0 # -0x7EF1 # -0x7EF2 # -0x7EF3 # -0x7EF4 # -0x7EF5 # -0x7EF6 # -0x7EF7 # -0x7EF8 # -0x7EFA # -0x7EFB # -0x7EFC # -0x7EFD # -0x7EFE # -0x7EFF # -0x7F00 # -0x7F01 # -0x7F02 # -0x7F03 # -0x7F04 # -0x7F05 # -0x7F06 # -0x7F07 # -0x7F08 # -0x7F09 # -0x7F0B # -0x7F0C # -0x7F0D # -0x7F0E # -0x7F0F # -0x7F11 # -0x7F12 # -0x7F13 # -0x7F14 # -0x7F15 # -0x7F16 # -0x7F17 # -0x7F18 # -0x7F19 # -0x7F1A # -0x7F1B # -0x7F1C # -0x7F1D # -0x7F1F # -0x7F20 # -0x7F21 # -0x7F22 # -0x7F23 # -0x7F24 # -0x7F25 # -0x7F26 # -0x7F27 # -0x7F28 # -0x7F29 # -0x7F2A # -0x7F2B # -0x7F2C # -0x7F2D # -0x7F2E # -0x7F2F # -0x7F30 # -0x7F31 # -0x7F32 # -0x7F33 # -0x7F34 # -0x7F35 # -0x7F36 # -0x7F38 # -0x7F3A # -0x7F42 # -0x7F44 # -0x7F45 # -0x7F50 # -0x7F51 # -0x7F54 # -0x7F55 # -0x7F57 # -0x7F58 # -0x7F5A # -0x7F5F # -0x7F61 # -0x7F62 # -0x7F68 # -0x7F69 # -0x7F6A # -0x7F6E # -0x7F71 # -0x7F72 # -0x7F74 # -0x7F79 # -0x7F7E # -0x7F81 # -0x7F8A # -0x7F8C # -0x7F8E # -0x7F94 # -0x7F9A # -0x7F9D # -0x7F9E # -0x7F9F # -0x7FA1 # -0x7FA4 # -0x7FA7 # -0x7FAF # -0x7FB0 # -0x7FB2 # -0x7FB8 # -0x7FB9 # -0x7FBC # -0x7FBD # -0x7FBF # -0x7FC1 # -0x7FC5 # -0x7FCA # -0x7FCC # -0x7FCE # -0x7FD4 # -0x7FD5 # -0x7FD8 # -0x7FDF # -0x7FE0 # -0x7FE1 # -0x7FE5 # -0x7FE6 # -0x7FE9 # -0x7FEE # -0x7FF0 # -0x7FF1 # -0x7FF3 # -0x7FFB # -0x7FFC # -0x8000 # -0x8001 # -0x8003 # -0x8004 # -0x8005 # -0x8006 # -0x800B # -0x800C # -0x800D # -0x8010 # -0x8012 # -0x8014 # -0x8015 # -0x8016 # -0x8017 # -0x8018 # -0x8019 # -0x801C # -0x8020 # -0x8022 # -0x8025 # -0x8026 # -0x8027 # -0x8028 # -0x8029 # -0x802A # -0x8031 # -0x8033 # -0x8035 # -0x8036 # -0x8037 # -0x8038 # -0x803B # -0x803D # -0x803F # -0x8042 # -0x8043 # -0x8046 # -0x804A # -0x804B # -0x804C # -0x804D # -0x8052 # -0x8054 # -0x8058 # -0x805A # -0x8069 # -0x806A # -0x8071 # -0x807F # -0x8080 # -0x8083 # -0x8084 # -0x8086 # -0x8087 # -0x8089 # -0x808B # -0x808C # -0x8093 # -0x8096 # -0x8098 # -0x809A # -0x809B # -0x809C # -0x809D # -0x809F # -0x80A0 # -0x80A1 # -0x80A2 # -0x80A4 # -0x80A5 # -0x80A9 # -0x80AA # -0x80AB # -0x80AD # -0x80AE # -0x80AF # -0x80B1 # -0x80B2 # -0x80B4 # -0x80B7 # -0x80BA # -0x80BC # -0x80BD # -0x80BE # -0x80BF # -0x80C0 # -0x80C1 # -0x80C2 # -0x80C3 # -0x80C4 # -0x80C6 # -0x80CC # -0x80CD # -0x80CE # -0x80D6 # -0x80D7 # -0x80D9 # -0x80DA # -0x80DB # -0x80DC # -0x80DD # -0x80DE # -0x80E1 # -0x80E4 # -0x80E5 # -0x80E7 # -0x80E8 # -0x80E9 # -0x80EA # -0x80EB # -0x80EC # -0x80ED # -0x80EF # -0x80F0 # -0x80F1 # -0x80F2 # -0x80F3 # -0x80F4 # -0x80F6 # -0x80F8 # -0x80FA # -0x80FC # -0x80FD # -0x8102 # -0x8106 # -0x8109 # -0x810A # -0x810D # -0x810E # -0x810F # -0x8110 # -0x8111 # -0x8112 # -0x8113 # -0x8114 # -0x8116 # -0x8118 # -0x811A # -0x811E # -0x812C # -0x812F # -0x8131 # -0x8132 # -0x8136 # -0x8138 # -0x813E # -0x8146 # -0x8148 # -0x814A # -0x814B # -0x814C # -0x8150 # -0x8151 # -0x8153 # -0x8154 # -0x8155 # -0x8159 # -0x815A # -0x8160 # -0x8165 # -0x8167 # -0x8169 # -0x816D # -0x816E # -0x8170 # -0x8171 # -0x8174 # -0x8179 # -0x817A # -0x817B # -0x817C # -0x817D # -0x817E # -0x817F # -0x8180 # -0x8182 # -0x8188 # -0x818A # -0x818F # -0x8191 # -0x8198 # -0x819B # -0x819C # -0x819D # -0x81A3 # -0x81A6 # -0x81A8 # -0x81AA # -0x81B3 # -0x81BA # -0x81BB # -0x81C0 # -0x81C1 # -0x81C2 # -0x81C3 # -0x81C6 # -0x81CA # -0x81CC # -0x81E3 # -0x81E7 # -0x81EA # -0x81EC # -0x81ED # -0x81F3 # -0x81F4 # -0x81FB # -0x81FC # -0x81FE # -0x8200 # -0x8201 # -0x8202 # -0x8204 # -0x8205 # -0x8206 # -0x820C # -0x820D # -0x8210 # -0x8212 # -0x8214 # -0x821B # -0x821C # -0x821E # -0x821F # -0x8221 # -0x8222 # -0x8223 # -0x8228 # -0x822A # -0x822B # -0x822C # -0x822D # -0x822F # -0x8230 # -0x8231 # -0x8233 # -0x8234 # -0x8235 # -0x8236 # -0x8237 # -0x8238 # -0x8239 # -0x823B # -0x823E # -0x8244 # -0x8247 # -0x8249 # -0x824B # -0x824F # -0x8258 # -0x825A # -0x825F # -0x8268 # -0x826E # -0x826F # -0x8270 # -0x8272 # -0x8273 # -0x8274 # -0x8279 # -0x827A # -0x827D # -0x827E # -0x827F # -0x8282 # -0x8284 # -0x8288 # -0x828A # -0x828B # -0x828D # -0x828E # -0x828F # -0x8291 # -0x8292 # -0x8297 # -0x8298 # -0x8299 # -0x829C # -0x829D # -0x829F # -0x82A1 # -0x82A4 # -0x82A5 # -0x82A6 # -0x82A8 # -0x82A9 # -0x82AA # -0x82AB # -0x82AC # -0x82AD # -0x82AE # -0x82AF # -0x82B0 # -0x82B1 # -0x82B3 # -0x82B4 # -0x82B7 # -0x82B8 # -0x82B9 # -0x82BD # -0x82BE # -0x82C1 # -0x82C4 # -0x82C7 # -0x82C8 # -0x82CA # -0x82CB # -0x82CC # -0x82CD # -0x82CE # -0x82CF # -0x82D1 # -0x82D2 # -0x82D3 # -0x82D4 # -0x82D5 # -0x82D7 # -0x82D8 # -0x82DB # -0x82DC # -0x82DE # -0x82DF # -0x82E0 # -0x82E1 # -0x82E3 # -0x82E4 # -0x82E5 # -0x82E6 # -0x82EB # -0x82EF # -0x82F1 # -0x82F4 # -0x82F7 # -0x82F9 # -0x82FB # -0x8301 # -0x8302 # -0x8303 # -0x8304 # -0x8305 # -0x8306 # -0x8307 # -0x8308 # -0x8309 # -0x830C # -0x830E # -0x830F # -0x8311 # -0x8314 # -0x8315 # -0x8317 # -0x831A # -0x831B # -0x831C # -0x8327 # -0x8328 # -0x832B # -0x832C # -0x832D # -0x832F # -0x8331 # -0x8333 # -0x8334 # -0x8335 # -0x8336 # -0x8338 # -0x8339 # -0x833A # -0x833C # -0x8340 # -0x8343 # -0x8346 # -0x8347 # -0x8349 # -0x834F # -0x8350 # -0x8351 # -0x8352 # -0x8354 # -0x835A # -0x835B # -0x835C # -0x835E # -0x835F # -0x8360 # -0x8361 # -0x8363 # -0x8364 # -0x8365 # -0x8366 # -0x8367 # -0x8368 # -0x8369 # -0x836A # -0x836B # -0x836C # -0x836D # -0x836E # -0x836F # -0x8377 # -0x8378 # -0x837B # -0x837C # -0x837D # -0x8385 # -0x8386 # -0x8389 # -0x838E # -0x8392 # -0x8393 # -0x8398 # -0x839B # -0x839C # -0x839E # -0x83A0 # -0x83A8 # -0x83A9 # -0x83AA # -0x83AB # -0x83B0 # -0x83B1 # -0x83B2 # -0x83B3 # -0x83B4 # -0x83B6 # -0x83B7 # -0x83B8 # -0x83B9 # -0x83BA # -0x83BC # -0x83BD # -0x83C0 # -0x83C1 # -0x83C5 # -0x83C7 # -0x83CA # -0x83CC # -0x83CF # -0x83D4 # -0x83D6 # -0x83D8 # -0x83DC # -0x83DD # -0x83DF # -0x83E0 # -0x83E1 # -0x83E5 # -0x83E9 # -0x83EA # -0x83F0 # -0x83F1 # -0x83F2 # -0x83F8 # -0x83F9 # -0x83FD # -0x8401 # -0x8403 # -0x8404 # -0x8406 # -0x840B # -0x840C # -0x840D # -0x840E # -0x840F # -0x8411 # -0x8418 # -0x841C # -0x841D # -0x8424 # -0x8425 # -0x8426 # -0x8427 # -0x8428 # -0x8431 # -0x8438 # -0x843C # -0x843D # -0x8446 # -0x8451 # -0x8457 # -0x8459 # -0x845A # -0x845B # -0x845C # -0x8461 # -0x8463 # -0x8469 # -0x846B # -0x846C # -0x846D # -0x8471 # -0x8473 # -0x8475 # -0x8476 # -0x8478 # -0x847A # -0x8482 # -0x8487 # -0x8488 # -0x8489 # -0x848B # -0x848C # -0x848E # -0x8497 # -0x8499 # -0x849C # -0x84A1 # -0x84AF # -0x84B2 # -0x84B4 # -0x84B8 # -0x84B9 # -0x84BA # -0x84BD # -0x84BF # -0x84C1 # -0x84C4 # -0x84C9 # -0x84CA # -0x84CD # -0x84D0 # -0x84D1 # -0x84D3 # -0x84D6 # -0x84DD # -0x84DF # -0x84E0 # -0x84E3 # -0x84E5 # -0x84E6 # -0x84EC # -0x84F0 # -0x84FC # -0x84FF # -0x850C # -0x8511 # -0x8513 # -0x8517 # -0x851A # -0x851F # -0x8521 # -0x852B # -0x852C # -0x8537 # -0x8538 # -0x8539 # -0x853A # -0x853B # -0x853C # -0x853D # -0x8543 # -0x8548 # -0x8549 # -0x854A # -0x8556 # -0x8559 # -0x855E # -0x8564 # -0x8568 # -0x8572 # -0x8574 # -0x8579 # -0x857A # -0x857B # -0x857E # -0x8584 # -0x8585 # -0x8587 # -0x858F # -0x859B # -0x859C # -0x85A4 # -0x85A8 # -0x85AA # -0x85AE # -0x85AF # -0x85B0 # -0x85B7 # -0x85B9 # -0x85C1 # -0x85C9 # -0x85CF # -0x85D0 # -0x85D3 # -0x85D5 # -0x85DC # -0x85E4 # -0x85E9 # -0x85FB # -0x85FF # -0x8605 # -0x8611 # -0x8616 # -0x8627 # -0x8629 # -0x8638 # -0x863C # -0x864D # -0x864E # -0x864F # -0x8650 # -0x8651 # -0x8654 # -0x865A # -0x865E # -0x8662 # -0x866B # -0x866C # -0x866E # -0x8671 # -0x8679 # -0x867A # -0x867B # -0x867C # -0x867D # -0x867E # -0x867F # -0x8680 # -0x8681 # -0x8682 # -0x868A # -0x868B # -0x868C # -0x868D # -0x8693 # -0x8695 # -0x869C # -0x869D # -0x86A3 # -0x86A4 # -0x86A7 # -0x86A8 # -0x86A9 # -0x86AA # -0x86AC # -0x86AF # -0x86B0 # -0x86B1 # -0x86B4 # -0x86B5 # -0x86B6 # -0x86BA # -0x86C0 # -0x86C4 # -0x86C6 # -0x86C7 # -0x86C9 # -0x86CA # -0x86CB # -0x86CE # -0x86CF # -0x86D0 # -0x86D1 # -0x86D4 # -0x86D8 # -0x86D9 # -0x86DB # -0x86DE # -0x86DF # -0x86E4 # -0x86E9 # -0x86ED # -0x86EE # -0x86F0 # -0x86F1 # -0x86F2 # -0x86F3 # -0x86F4 # -0x86F8 # -0x86F9 # -0x86FE # -0x8700 # -0x8702 # -0x8703 # -0x8707 # -0x8708 # -0x8709 # -0x870A # -0x870D # -0x8712 # -0x8713 # -0x8715 # -0x8717 # -0x8718 # -0x871A # -0x871C # -0x871E # -0x8721 # -0x8722 # -0x8723 # -0x8725 # -0x8729 # -0x872E # -0x8731 # -0x8734 # -0x8737 # -0x873B # -0x873E # -0x873F # -0x8747 # -0x8748 # -0x8749 # -0x874C # -0x874E # -0x8753 # -0x8757 # -0x8759 # -0x8760 # -0x8763 # -0x8764 # -0x8765 # -0x876E # -0x8770 # -0x8774 # -0x8776 # -0x877B # -0x877C # -0x877D # -0x877E # -0x8782 # -0x8783 # -0x8785 # -0x8788 # -0x878B # -0x878D # -0x8793 # -0x8797 # -0x879F # -0x87A8 # -0x87AB # -0x87AC # -0x87AD # -0x87AF # -0x87B3 # -0x87B5 # -0x87BA # -0x87BD # -0x87C0 # -0x87C6 # -0x87CA # -0x87CB # -0x87D1 # -0x87D2 # -0x87D3 # -0x87DB # -0x87E0 # -0x87E5 # -0x87EA # -0x87EE # -0x87F9 # -0x87FE # -0x8803 # -0x880A # -0x8813 # -0x8815 # -0x8816 # -0x881B # -0x8821 # -0x8822 # -0x8832 # -0x8839 # -0x883C # -0x8840 # -0x8844 # -0x8845 # -0x884C # -0x884D # -0x8854 # -0x8857 # -0x8859 # -0x8861 # -0x8862 # -0x8863 # -0x8864 # -0x8865 # -0x8868 # -0x8869 # -0x886B # -0x886C # -0x886E # -0x8870 # -0x8872 # -0x8877 # -0x887D # -0x887E # -0x887F # -0x8881 # -0x8882 # -0x8884 # -0x8885 # -0x8888 # -0x888B # -0x888D # -0x8892 # -0x8896 # -0x889C # -0x88A2 # -0x88A4 # -0x88AB # -0x88AD # -0x88B1 # -0x88B7 # -0x88BC # -0x88C1 # -0x88C2 # -0x88C5 # -0x88C6 # -0x88C9 # -0x88CE # -0x88D2 # -0x88D4 # -0x88D5 # -0x88D8 # -0x88D9 # -0x88DF # -0x88E2 # -0x88E3 # -0x88E4 # -0x88E5 # -0x88E8 # -0x88F0 # -0x88F1 # -0x88F3 # -0x88F4 # -0x88F8 # -0x88F9 # -0x88FC # -0x88FE # -0x8902 # -0x890A # -0x8910 # -0x8912 # -0x8913 # -0x8919 # -0x891A # -0x891B # -0x8921 # -0x8925 # -0x892A # -0x892B # -0x8930 # -0x8934 # -0x8936 # -0x8941 # -0x8944 # -0x895E # -0x895F # -0x8966 # -0x897B # -0x897F # -0x8981 # -0x8983 # -0x8986 # -0x89C1 # -0x89C2 # -0x89C4 # -0x89C5 # -0x89C6 # -0x89C7 # -0x89C8 # -0x89C9 # -0x89CA # -0x89CB # -0x89CC # -0x89CE # -0x89CF # -0x89D0 # -0x89D1 # -0x89D2 # -0x89D6 # -0x89DA # -0x89DC # -0x89DE # -0x89E3 # -0x89E5 # -0x89E6 # -0x89EB # -0x89EF # -0x89F3 # -0x8A00 # -0x8A07 # -0x8A3E # -0x8A48 # -0x8A79 # -0x8A89 # -0x8A8A # -0x8A93 # -0x8B07 # -0x8B26 # -0x8B66 # -0x8B6C # -0x8BA0 # -0x8BA1 # -0x8BA2 # -0x8BA3 # -0x8BA4 # -0x8BA5 # -0x8BA6 # -0x8BA7 # -0x8BA8 # -0x8BA9 # -0x8BAA # -0x8BAB # -0x8BAD # -0x8BAE # -0x8BAF # -0x8BB0 # -0x8BB2 # -0x8BB3 # -0x8BB4 # -0x8BB5 # -0x8BB6 # -0x8BB7 # -0x8BB8 # -0x8BB9 # -0x8BBA # -0x8BBC # -0x8BBD # -0x8BBE # -0x8BBF # -0x8BC0 # -0x8BC1 # -0x8BC2 # -0x8BC3 # -0x8BC4 # -0x8BC5 # -0x8BC6 # -0x8BC8 # -0x8BC9 # -0x8BCA # -0x8BCB # -0x8BCC # -0x8BCD # -0x8BCE # -0x8BCF # -0x8BD1 # -0x8BD2 # -0x8BD3 # -0x8BD4 # -0x8BD5 # -0x8BD6 # -0x8BD7 # -0x8BD8 # -0x8BD9 # -0x8BDA # -0x8BDB # -0x8BDC # -0x8BDD # -0x8BDE # -0x8BDF # -0x8BE0 # -0x8BE1 # -0x8BE2 # -0x8BE3 # -0x8BE4 # -0x8BE5 # -0x8BE6 # -0x8BE7 # -0x8BE8 # -0x8BE9 # -0x8BEB # -0x8BEC # -0x8BED # -0x8BEE # -0x8BEF # -0x8BF0 # -0x8BF1 # -0x8BF2 # -0x8BF3 # -0x8BF4 # -0x8BF5 # -0x8BF6 # -0x8BF7 # -0x8BF8 # -0x8BF9 # -0x8BFA # -0x8BFB # -0x8BFC # -0x8BFD # -0x8BFE # -0x8BFF # -0x8C00 # -0x8C01 # -0x8C02 # -0x8C03 # -0x8C04 # -0x8C05 # -0x8C06 # -0x8C07 # -0x8C08 # -0x8C0A # -0x8C0B # -0x8C0C # -0x8C0D # -0x8C0E # -0x8C0F # -0x8C10 # -0x8C11 # -0x8C12 # -0x8C13 # -0x8C14 # -0x8C15 # -0x8C16 # -0x8C17 # -0x8C18 # -0x8C19 # -0x8C1A # -0x8C1B # -0x8C1C # -0x8C1D # -0x8C1F # -0x8C20 # -0x8C21 # -0x8C22 # -0x8C23 # -0x8C24 # -0x8C25 # -0x8C26 # -0x8C27 # -0x8C28 # -0x8C29 # -0x8C2A # -0x8C2B # -0x8C2C # -0x8C2D # -0x8C2E # -0x8C2F # -0x8C30 # -0x8C31 # -0x8C32 # -0x8C33 # -0x8C34 # -0x8C35 # -0x8C36 # -0x8C37 # -0x8C41 # -0x8C46 # -0x8C47 # -0x8C49 # -0x8C4C # -0x8C55 # -0x8C5A # -0x8C61 # -0x8C62 # -0x8C6A # -0x8C6B # -0x8C73 # -0x8C78 # -0x8C79 # -0x8C7A # -0x8C82 # -0x8C85 # -0x8C89 # -0x8C8A # -0x8C8C # -0x8C94 # -0x8C98 # -0x8D1D # -0x8D1E # -0x8D1F # -0x8D21 # -0x8D22 # -0x8D23 # -0x8D24 # -0x8D25 # -0x8D26 # -0x8D27 # -0x8D28 # -0x8D29 # -0x8D2A # -0x8D2B # -0x8D2C # -0x8D2D # -0x8D2E # -0x8D2F # -0x8D30 # -0x8D31 # -0x8D32 # -0x8D33 # -0x8D34 # -0x8D35 # -0x8D36 # -0x8D37 # -0x8D38 # -0x8D39 # -0x8D3A # -0x8D3B # -0x8D3C # -0x8D3D # -0x8D3E # -0x8D3F # -0x8D40 # -0x8D41 # -0x8D42 # -0x8D43 # -0x8D44 # -0x8D45 # -0x8D46 # -0x8D47 # -0x8D48 # -0x8D49 # -0x8D4A # -0x8D4B # -0x8D4C # -0x8D4D # -0x8D4E # -0x8D4F # -0x8D50 # -0x8D53 # -0x8D54 # -0x8D55 # -0x8D56 # -0x8D58 # -0x8D59 # -0x8D5A # -0x8D5B # -0x8D5C # -0x8D5D # -0x8D5E # -0x8D60 # -0x8D61 # -0x8D62 # -0x8D63 # -0x8D64 # -0x8D66 # -0x8D67 # -0x8D6B # -0x8D6D # -0x8D70 # -0x8D73 # -0x8D74 # -0x8D75 # -0x8D76 # -0x8D77 # -0x8D81 # -0x8D84 # -0x8D85 # -0x8D8A # -0x8D8B # -0x8D91 # -0x8D94 # -0x8D9F # -0x8DA3 # -0x8DB1 # -0x8DB3 # -0x8DB4 # -0x8DB5 # -0x8DB8 # -0x8DBA # -0x8DBC # -0x8DBE # -0x8DBF # -0x8DC3 # -0x8DC4 # -0x8DC6 # -0x8DCB # -0x8DCC # -0x8DCE # -0x8DCF # -0x8DD1 # -0x8DD6 # -0x8DD7 # -0x8DDA # -0x8DDB # -0x8DDD # -0x8DDE # -0x8DDF # -0x8DE3 # -0x8DE4 # -0x8DE8 # -0x8DEA # -0x8DEB # -0x8DEC # -0x8DEF # -0x8DF3 # -0x8DF5 # -0x8DF7 # -0x8DF8 # -0x8DF9 # -0x8DFA # -0x8DFB # -0x8DFD # -0x8E05 # -0x8E09 # -0x8E0A # -0x8E0C # -0x8E0F # -0x8E14 # -0x8E1D # -0x8E1E # -0x8E1F # -0x8E22 # -0x8E23 # -0x8E29 # -0x8E2A # -0x8E2C # -0x8E2E # -0x8E2F # -0x8E31 # -0x8E35 # -0x8E39 # -0x8E3A # -0x8E3D # -0x8E40 # -0x8E41 # -0x8E42 # -0x8E44 # -0x8E47 # -0x8E48 # -0x8E49 # -0x8E4A # -0x8E4B # -0x8E51 # -0x8E52 # -0x8E59 # -0x8E66 # -0x8E69 # -0x8E6C # -0x8E6D # -0x8E6F # -0x8E70 # -0x8E72 # -0x8E74 # -0x8E76 # -0x8E7C # -0x8E7F # -0x8E81 # -0x8E85 # -0x8E87 # -0x8E8F # -0x8E90 # -0x8E94 # -0x8E9C # -0x8E9E # -0x8EAB # -0x8EAC # -0x8EAF # -0x8EB2 # -0x8EBA # -0x8ECE # -0x8F66 # -0x8F67 # -0x8F68 # -0x8F69 # -0x8F6B # -0x8F6C # -0x8F6D # -0x8F6E # -0x8F6F # -0x8F70 # -0x8F71 # -0x8F72 # -0x8F73 # -0x8F74 # -0x8F75 # -0x8F76 # -0x8F77 # -0x8F78 # -0x8F79 # -0x8F7A # -0x8F7B # -0x8F7C # -0x8F7D # -0x8F7E # -0x8F7F # -0x8F81 # -0x8F82 # -0x8F83 # -0x8F84 # -0x8F85 # -0x8F86 # -0x8F87 # -0x8F88 # -0x8F89 # -0x8F8A # -0x8F8B # -0x8F8D # -0x8F8E # -0x8F8F # -0x8F90 # -0x8F91 # -0x8F93 # -0x8F94 # -0x8F95 # -0x8F96 # -0x8F97 # -0x8F98 # -0x8F99 # -0x8F9A # -0x8F9B # -0x8F9C # -0x8F9E # -0x8F9F # -0x8FA3 # -0x8FA8 # -0x8FA9 # -0x8FAB # -0x8FB0 # -0x8FB1 # -0x8FB6 # -0x8FB9 # -0x8FBD # -0x8FBE # -0x8FC1 # -0x8FC2 # -0x8FC4 # -0x8FC5 # -0x8FC7 # -0x8FC8 # -0x8FCE # -0x8FD0 # -0x8FD1 # -0x8FD3 # -0x8FD4 # -0x8FD5 # -0x8FD8 # -0x8FD9 # -0x8FDB # -0x8FDC # -0x8FDD # -0x8FDE # -0x8FDF # -0x8FE2 # -0x8FE4 # -0x8FE5 # -0x8FE6 # -0x8FE8 # -0x8FE9 # -0x8FEA # -0x8FEB # -0x8FED # -0x8FEE # -0x8FF0 # -0x8FF3 # -0x8FF7 # -0x8FF8 # -0x8FF9 # -0x8FFD # -0x9000 # -0x9001 # -0x9002 # -0x9003 # -0x9004 # -0x9005 # -0x9006 # -0x9009 # -0x900A # -0x900B # -0x900D # -0x900F # -0x9010 # -0x9011 # -0x9012 # -0x9014 # -0x9016 # -0x9017 # -0x901A # -0x901B # -0x901D # -0x901E # -0x901F # -0x9020 # -0x9021 # -0x9022 # -0x9026 # -0x902D # -0x902E # -0x902F # -0x9035 # -0x9036 # -0x9038 # -0x903B # -0x903C # -0x903E # -0x9041 # -0x9042 # -0x9044 # -0x9047 # -0x904D # -0x904F # -0x9050 # -0x9051 # -0x9052 # -0x9053 # -0x9057 # -0x9058 # -0x905B # -0x9062 # -0x9063 # -0x9065 # -0x9068 # -0x906D # -0x906E # -0x9074 # -0x9075 # -0x907D # -0x907F # -0x9080 # -0x9082 # -0x9083 # -0x9088 # -0x908B # -0x9091 # -0x9093 # -0x9095 # -0x9097 # -0x9099 # -0x909B # -0x909D # -0x90A1 # -0x90A2 # -0x90A3 # -0x90A6 # -0x90AA # -0x90AC # -0x90AE # -0x90AF # -0x90B0 # -0x90B1 # -0x90B3 # -0x90B4 # -0x90B5 # -0x90B6 # -0x90B8 # -0x90B9 # -0x90BA # -0x90BB # -0x90BE # -0x90C1 # -0x90C4 # -0x90C5 # -0x90C7 # -0x90CA # -0x90CE # -0x90CF # -0x90D0 # -0x90D1 # -0x90D3 # -0x90D7 # -0x90DB # -0x90DC # -0x90DD # -0x90E1 # -0x90E2 # -0x90E6 # -0x90E7 # -0x90E8 # -0x90EB # -0x90ED # -0x90EF # -0x90F4 # -0x90F8 # -0x90FD # -0x90FE # -0x9102 # -0x9104 # -0x9119 # -0x911E # -0x9122 # -0x9123 # -0x912F # -0x9131 # -0x9139 # -0x9143 # -0x9146 # -0x9149 # -0x914A # -0x914B # -0x914C # -0x914D # -0x914E # -0x914F # -0x9150 # -0x9152 # -0x9157 # -0x915A # -0x915D # -0x915E # -0x9161 # -0x9162 # -0x9163 # -0x9164 # -0x9165 # -0x9169 # -0x916A # -0x916C # -0x916E # -0x916F # -0x9170 # -0x9171 # -0x9172 # -0x9174 # -0x9175 # -0x9176 # -0x9177 # -0x9178 # -0x9179 # -0x917D # -0x917E # -0x917F # -0x9185 # -0x9187 # -0x9189 # -0x918B # -0x918C # -0x918D # -0x9190 # -0x9191 # -0x9192 # -0x919A # -0x919B # -0x91A2 # -0x91A3 # -0x91AA # -0x91AD # -0x91AE # -0x91AF # -0x91B4 # -0x91B5 # -0x91BA # -0x91C7 # -0x91C9 # -0x91CA # -0x91CC # -0x91CD # -0x91CE # -0x91CF # -0x91D1 # -0x91DC # -0x9274 # -0x928E # -0x92AE # -0x92C8 # -0x933E # -0x936A # -0x938F # -0x93CA # -0x93D6 # -0x943E # -0x946B # -0x9485 # -0x9486 # -0x9487 # -0x9488 # -0x9489 # -0x948A # -0x948B # -0x948C # -0x948D # -0x948E # -0x948F # -0x9490 # -0x9492 # -0x9493 # -0x9494 # -0x9495 # -0x9497 # -0x9499 # -0x949A # -0x949B # -0x949C # -0x949D # -0x949E # -0x949F # -0x94A0 # -0x94A1 # -0x94A2 # -0x94A3 # -0x94A4 # -0x94A5 # -0x94A6 # -0x94A7 # -0x94A8 # -0x94A9 # -0x94AA # -0x94AB # -0x94AC # -0x94AD # -0x94AE # -0x94AF # -0x94B0 # -0x94B1 # -0x94B2 # -0x94B3 # -0x94B4 # -0x94B5 # -0x94B6 # -0x94B7 # -0x94B8 # -0x94B9 # -0x94BA # -0x94BB # -0x94BC # -0x94BD # -0x94BE # -0x94BF # -0x94C0 # -0x94C1 # -0x94C2 # -0x94C3 # -0x94C4 # -0x94C5 # -0x94C6 # -0x94C8 # -0x94C9 # -0x94CA # -0x94CB # -0x94CC # -0x94CD # -0x94CE # -0x94D0 # -0x94D1 # -0x94D2 # -0x94D5 # -0x94D6 # -0x94D7 # -0x94D8 # -0x94D9 # -0x94DB # -0x94DC # -0x94DD # -0x94DE # -0x94DF # -0x94E0 # -0x94E1 # -0x94E2 # -0x94E3 # -0x94E4 # -0x94E5 # -0x94E7 # -0x94E8 # -0x94E9 # -0x94EA # -0x94EB # -0x94EC # -0x94ED # -0x94EE # -0x94EF # -0x94F0 # -0x94F1 # -0x94F2 # -0x94F3 # -0x94F4 # -0x94F5 # -0x94F6 # -0x94F7 # -0x94F8 # -0x94F9 # -0x94FA # -0x94FC # -0x94FD # -0x94FE # -0x94FF # -0x9500 # -0x9501 # -0x9502 # -0x9503 # -0x9504 # -0x9505 # -0x9506 # -0x9507 # -0x9508 # -0x9509 # -0x950A # -0x950B # -0x950C # -0x950D # -0x950E # -0x950F # -0x9510 # -0x9511 # -0x9512 # -0x9513 # -0x9514 # -0x9515 # -0x9516 # -0x9517 # -0x9518 # -0x9519 # -0x951A # -0x951B # -0x951D # -0x951E # -0x951F # -0x9521 # -0x9522 # -0x9523 # -0x9524 # -0x9525 # -0x9526 # -0x9528 # -0x9529 # -0x952A # -0x952B # -0x952C # -0x952D # -0x952E # -0x952F # -0x9530 # -0x9531 # -0x9532 # -0x9534 # -0x9535 # -0x9536 # -0x9537 # -0x9538 # -0x9539 # -0x953A # -0x953B # -0x953C # -0x953E # -0x953F # -0x9540 # -0x9541 # -0x9542 # -0x9544 # -0x9545 # -0x9546 # -0x9547 # -0x9549 # -0x954A # -0x954C # -0x954D # -0x954E # -0x954F # -0x9550 # -0x9551 # -0x9552 # -0x9553 # -0x9554 # -0x9556 # -0x9557 # -0x9558 # -0x9559 # -0x955B # -0x955C # -0x955D # -0x955E # -0x955F # -0x9561 # -0x9562 # -0x9563 # -0x9564 # -0x9565 # -0x9566 # -0x9567 # -0x9568 # -0x9569 # -0x956A # -0x956B # -0x956C # -0x956D # -0x956F # -0x9570 # -0x9571 # -0x9572 # -0x9573 # -0x9576 # -0x957F # -0x95E8 # -0x95E9 # -0x95EA # -0x95EB # -0x95ED # -0x95EE # -0x95EF # -0x95F0 # -0x95F1 # -0x95F2 # -0x95F3 # -0x95F4 # -0x95F5 # -0x95F6 # -0x95F7 # -0x95F8 # -0x95F9 # -0x95FA # -0x95FB # -0x95FC # -0x95FD # -0x95FE # -0x9600 # -0x9601 # -0x9602 # -0x9603 # -0x9604 # -0x9605 # -0x9606 # -0x9608 # -0x9609 # -0x960A # -0x960B # -0x960C # -0x960D # -0x960E # -0x960F # -0x9610 # -0x9611 # -0x9612 # -0x9614 # -0x9615 # -0x9616 # -0x9617 # -0x9619 # -0x961A # -0x961C # -0x961D # -0x961F # -0x9621 # -0x9622 # -0x962A # -0x962E # -0x9631 # -0x9632 # -0x9633 # -0x9634 # -0x9635 # -0x9636 # -0x963B # -0x963C # -0x963D # -0x963F # -0x9640 # -0x9642 # -0x9644 # -0x9645 # -0x9646 # -0x9647 # -0x9648 # -0x9649 # -0x964B # -0x964C # -0x964D # -0x9650 # -0x9654 # -0x9655 # -0x965B # -0x965F # -0x9661 # -0x9662 # -0x9664 # -0x9667 # -0x9668 # -0x9669 # -0x966A # -0x966C # -0x9672 # -0x9674 # -0x9675 # -0x9676 # -0x9677 # -0x9685 # -0x9686 # -0x9688 # -0x968B # -0x968D # -0x968F # -0x9690 # -0x9694 # -0x9697 # -0x9698 # -0x9699 # -0x969C # -0x96A7 # -0x96B0 # -0x96B3 # -0x96B6 # -0x96B9 # -0x96BC # -0x96BD # -0x96BE # -0x96C0 # -0x96C1 # -0x96C4 # -0x96C5 # -0x96C6 # -0x96C7 # -0x96C9 # -0x96CC # -0x96CD # -0x96CE # -0x96CF # -0x96D2 # -0x96D5 # -0x96E0 # -0x96E8 # -0x96E9 # -0x96EA # -0x96EF # -0x96F3 # -0x96F6 # -0x96F7 # -0x96F9 # -0x96FE # -0x9700 # -0x9701 # -0x9704 # -0x9706 # -0x9707 # -0x9708 # -0x9709 # -0x970D # -0x970E # -0x970F # -0x9713 # -0x9716 # -0x971C # -0x971E # -0x972A # -0x972D # -0x9730 # -0x9732 # -0x9738 # -0x9739 # -0x973E # -0x9752 # -0x9753 # -0x9756 # -0x9759 # -0x975B # -0x975E # -0x9760 # -0x9761 # -0x9762 # -0x9765 # -0x9769 # -0x9773 # -0x9774 # -0x9776 # -0x977C # -0x9785 # -0x978B # -0x978D # -0x9791 # -0x9792 # -0x9794 # -0x9798 # -0x97A0 # -0x97A3 # -0x97AB # -0x97AD # -0x97AF # -0x97B2 # -0x97B4 # -0x97E6 # -0x97E7 # -0x97E9 # -0x97EA # -0x97EB # -0x97EC # -0x97ED # -0x97F3 # -0x97F5 # -0x97F6 # -0x9875 # -0x9876 # -0x9877 # -0x9878 # -0x9879 # -0x987A # -0x987B # -0x987C # -0x987D # -0x987E # -0x987F # -0x9880 # -0x9881 # -0x9882 # -0x9883 # -0x9884 # -0x9885 # -0x9886 # -0x9887 # -0x9888 # -0x9889 # -0x988A # -0x988C # -0x988D # -0x988F # -0x9890 # -0x9891 # -0x9893 # -0x9894 # -0x9896 # -0x9897 # -0x9898 # -0x989A # -0x989B # -0x989C # -0x989D # -0x989E # -0x989F # -0x98A0 # -0x98A1 # -0x98A2 # -0x98A4 # -0x98A5 # -0x98A6 # -0x98A7 # -0x98CE # -0x98D1 # -0x98D2 # -0x98D3 # -0x98D5 # -0x98D8 # -0x98D9 # -0x98DA # -0x98DE # -0x98DF # -0x98E7 # -0x98E8 # -0x990D # -0x9910 # -0x992E # -0x9954 # -0x9955 # -0x9963 # -0x9965 # -0x9967 # -0x9968 # -0x9969 # -0x996A # -0x996B # -0x996C # -0x996D # -0x996E # -0x996F # -0x9970 # -0x9971 # -0x9972 # -0x9974 # -0x9975 # -0x9976 # -0x9977 # -0x997A # -0x997C # -0x997D # -0x997F # -0x9980 # -0x9981 # -0x9984 # -0x9985 # -0x9986 # -0x9987 # -0x9988 # -0x998A # -0x998B # -0x998D # -0x998F # -0x9990 # -0x9991 # -0x9992 # -0x9993 # -0x9994 # -0x9995 # -0x9996 # -0x9997 # -0x9998 # -0x9999 # -0x99A5 # -0x99A8 # -0x9A6C # -0x9A6D # -0x9A6E # -0x9A6F # -0x9A70 # -0x9A71 # -0x9A73 # -0x9A74 # -0x9A75 # -0x9A76 # -0x9A77 # -0x9A78 # -0x9A79 # -0x9A7A # -0x9A7B # -0x9A7C # -0x9A7D # -0x9A7E # -0x9A7F # -0x9A80 # -0x9A81 # -0x9A82 # -0x9A84 # -0x9A85 # -0x9A86 # -0x9A87 # -0x9A88 # -0x9A8A # -0x9A8B # -0x9A8C # -0x9A8F # -0x9A90 # -0x9A91 # -0x9A92 # -0x9A93 # -0x9A96 # -0x9A97 # -0x9A98 # -0x9A9A # -0x9A9B # -0x9A9C # -0x9A9D # -0x9A9E # -0x9A9F # -0x9AA0 # -0x9AA1 # -0x9AA2 # -0x9AA3 # -0x9AA4 # -0x9AA5 # -0x9AA7 # -0x9AA8 # -0x9AB0 # -0x9AB1 # -0x9AB6 # -0x9AB7 # -0x9AB8 # -0x9ABA # -0x9ABC # -0x9AC0 # -0x9AC1 # -0x9AC2 # -0x9AC5 # -0x9ACB # -0x9ACC # -0x9AD1 # -0x9AD3 # -0x9AD8 # -0x9ADF # -0x9AE1 # -0x9AE6 # -0x9AEB # -0x9AED # -0x9AEF # -0x9AF9 # -0x9AFB # -0x9B03 # -0x9B08 # -0x9B0F # -0x9B13 # -0x9B1F # -0x9B23 # -0x9B2F # -0x9B32 # -0x9B3B # -0x9B3C # -0x9B41 # -0x9B42 # -0x9B43 # -0x9B44 # -0x9B45 # -0x9B47 # -0x9B48 # -0x9B49 # -0x9B4D # -0x9B4F # -0x9B51 # -0x9B54 # -0x9C7C # -0x9C7F # -0x9C81 # -0x9C82 # -0x9C85 # -0x9C86 # -0x9C87 # -0x9C88 # -0x9C8B # -0x9C8D # -0x9C8E # -0x9C90 # -0x9C91 # -0x9C92 # -0x9C94 # -0x9C95 # -0x9C9A # -0x9C9B # -0x9C9C # -0x9C9E # -0x9C9F # -0x9CA0 # -0x9CA1 # -0x9CA2 # -0x9CA3 # -0x9CA4 # -0x9CA5 # -0x9CA6 # -0x9CA7 # -0x9CA8 # -0x9CA9 # -0x9CAB # -0x9CAD # -0x9CAE # -0x9CB0 # -0x9CB1 # -0x9CB2 # -0x9CB3 # -0x9CB4 # -0x9CB5 # -0x9CB6 # -0x9CB7 # -0x9CB8 # -0x9CBA # -0x9CBB # -0x9CBC # -0x9CBD # -0x9CC3 # -0x9CC4 # -0x9CC5 # -0x9CC6 # -0x9CC7 # -0x9CCA # -0x9CCB # -0x9CCC # -0x9CCD # -0x9CCE # -0x9CCF # -0x9CD0 # -0x9CD3 # -0x9CD4 # -0x9CD5 # -0x9CD6 # -0x9CD7 # -0x9CD8 # -0x9CD9 # -0x9CDC # -0x9CDD # -0x9CDE # -0x9CDF # -0x9CE2 # -0x9E1F # -0x9E20 # -0x9E21 # -0x9E22 # -0x9E23 # -0x9E25 # -0x9E26 # -0x9E28 # -0x9E29 # -0x9E2A # -0x9E2B # -0x9E2C # -0x9E2D # -0x9E2F # -0x9E31 # -0x9E32 # -0x9E33 # -0x9E35 # -0x9E36 # -0x9E37 # -0x9E38 # -0x9E39 # -0x9E3A # -0x9E3D # -0x9E3E # -0x9E3F # -0x9E41 # -0x9E42 # -0x9E43 # -0x9E44 # -0x9E45 # -0x9E46 # -0x9E47 # -0x9E48 # -0x9E49 # -0x9E4A # -0x9E4B # -0x9E4C # -0x9E4E # -0x9E4F # -0x9E51 # -0x9E55 # -0x9E57 # -0x9E58 # -0x9E5A # -0x9E5B # -0x9E5C # -0x9E5E # -0x9E63 # -0x9E64 # -0x9E66 # -0x9E67 # -0x9E68 # -0x9E69 # -0x9E6A # -0x9E6B # -0x9E6C # -0x9E6D # -0x9E70 # -0x9E71 # -0x9E73 # -0x9E7E # -0x9E7F # -0x9E82 # -0x9E87 # -0x9E88 # -0x9E8B # -0x9E92 # -0x9E93 # -0x9E9D # -0x9E9F # -0x9EA6 # -0x9EB4 # -0x9EB8 # -0x9EBB # -0x9EBD # -0x9EBE # -0x9EC4 # -0x9EC9 # -0x9ECD # -0x9ECE # -0x9ECF # -0x9ED1 # -0x9ED4 # -0x9ED8 # -0x9EDB # -0x9EDC # -0x9EDD # -0x9EDF # -0x9EE0 # -0x9EE2 # -0x9EE5 # -0x9EE7 # -0x9EE9 # -0x9EEA # -0x9EEF # -0x9EF9 # -0x9EFB # -0x9EFC # -0x9EFE # -0x9F0B # -0x9F0D # -0x9F0E # -0x9F10 # -0x9F13 # -0x9F17 # -0x9F19 # -0x9F20 # -0x9F22 # -0x9F2C # -0x9F2F # -0x9F37 # -0x9F39 # -0x9F3B # -0x9F3D # -0x9F3E # -0x9F44 # -0x9F50 # -0x9F51 # -0x9F7F # -0x9F80 # -0x9F83 # -0x9F84 # -0x9F85 # -0x9F86 # -0x9F87 # -0x9F88 # -0x9F89 # -0x9F8A # -0x9F8B # -0x9F8C # -0x9F99 # -0x9F9A # -0x9F9B # -0x9F9F # -0x9FA0 # +# +# 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 # +0x4E01 # +0x4E03 # +0x4E07 # +0x4E08 # +0x4E09 # +0x4E0A # +0x4E0B # +0x4E0C # +0x4E0D # +0x4E0E # +0x4E10 # +0x4E11 # +0x4E13 # +0x4E14 # +0x4E15 # +0x4E16 # +0x4E18 # +0x4E19 # +0x4E1A # +0x4E1B # +0x4E1C # +0x4E1D # +0x4E1E # +0x4E22 # +0x4E24 # +0x4E25 # +0x4E27 # +0x4E28 # +0x4E2A # +0x4E2B # +0x4E2C # +0x4E2D # +0x4E30 # +0x4E32 # +0x4E34 # +0x4E36 # +0x4E38 # +0x4E39 # +0x4E3A # +0x4E3B # +0x4E3D # +0x4E3E # +0x4E3F # +0x4E43 # +0x4E45 # +0x4E47 # +0x4E48 # +0x4E49 # +0x4E4B # +0x4E4C # +0x4E4D # +0x4E4E # +0x4E4F # +0x4E50 # +0x4E52 # +0x4E53 # +0x4E54 # +0x4E56 # +0x4E58 # +0x4E59 # +0x4E5C # +0x4E5D # +0x4E5E # +0x4E5F # +0x4E60 # +0x4E61 # +0x4E66 # +0x4E69 # +0x4E70 # +0x4E71 # +0x4E73 # +0x4E7E # +0x4E86 # +0x4E88 # +0x4E89 # +0x4E8B # +0x4E8C # +0x4E8D # +0x4E8E # +0x4E8F # +0x4E91 # +0x4E92 # +0x4E93 # +0x4E94 # +0x4E95 # +0x4E98 # +0x4E9A # +0x4E9B # +0x4E9F # +0x4EA0 # +0x4EA1 # +0x4EA2 # +0x4EA4 # +0x4EA5 # +0x4EA6 # +0x4EA7 # +0x4EA8 # +0x4EA9 # +0x4EAB # +0x4EAC # +0x4EAD # +0x4EAE # +0x4EB2 # +0x4EB3 # +0x4EB5 # +0x4EBA # +0x4EBB # +0x4EBF # +0x4EC0 # +0x4EC1 # +0x4EC2 # +0x4EC3 # +0x4EC4 # +0x4EC5 # +0x4EC6 # +0x4EC7 # +0x4EC9 # +0x4ECA # +0x4ECB # +0x4ECD # +0x4ECE # +0x4ED1 # +0x4ED3 # +0x4ED4 # +0x4ED5 # +0x4ED6 # +0x4ED7 # +0x4ED8 # +0x4ED9 # +0x4EDD # +0x4EDE # +0x4EDF # +0x4EE1 # +0x4EE3 # +0x4EE4 # +0x4EE5 # +0x4EE8 # +0x4EEA # +0x4EEB # +0x4EEC # +0x4EF0 # +0x4EF2 # +0x4EF3 # +0x4EF5 # +0x4EF6 # +0x4EF7 # +0x4EFB # +0x4EFD # +0x4EFF # +0x4F01 # +0x4F09 # +0x4F0A # +0x4F0D # +0x4F0E # +0x4F0F # +0x4F10 # +0x4F11 # +0x4F17 # +0x4F18 # +0x4F19 # +0x4F1A # +0x4F1B # +0x4F1E # +0x4F1F # +0x4F20 # +0x4F22 # +0x4F24 # +0x4F25 # +0x4F26 # +0x4F27 # +0x4F2A # +0x4F2B # +0x4F2F # +0x4F30 # +0x4F32 # +0x4F34 # +0x4F36 # +0x4F38 # +0x4F3A # +0x4F3C # +0x4F3D # +0x4F43 # +0x4F46 # +0x4F4D # +0x4F4E # +0x4F4F # +0x4F50 # +0x4F51 # +0x4F53 # +0x4F55 # +0x4F57 # +0x4F58 # +0x4F59 # +0x4F5A # +0x4F5B # +0x4F5C # +0x4F5D # +0x4F5E # +0x4F5F # +0x4F60 # +0x4F63 # +0x4F64 # +0x4F65 # +0x4F67 # +0x4F69 # +0x4F6C # +0x4F6F # +0x4F70 # +0x4F73 # +0x4F74 # +0x4F76 # +0x4F7B # +0x4F7C # +0x4F7E # +0x4F7F # +0x4F83 # +0x4F84 # +0x4F88 # +0x4F89 # +0x4F8B # +0x4F8D # +0x4F8F # +0x4F91 # +0x4F94 # +0x4F97 # +0x4F9B # +0x4F9D # +0x4FA0 # +0x4FA3 # +0x4FA5 # +0x4FA6 # +0x4FA7 # +0x4FA8 # +0x4FA9 # +0x4FAA # +0x4FAC # +0x4FAE # +0x4FAF # +0x4FB5 # +0x4FBF # +0x4FC3 # +0x4FC4 # +0x4FC5 # +0x4FCA # +0x4FCE # +0x4FCF # +0x4FD0 # +0x4FD1 # +0x4FD7 # +0x4FD8 # +0x4FDA # +0x4FDC # +0x4FDD # +0x4FDE # +0x4FDF # +0x4FE1 # +0x4FE3 # +0x4FE6 # +0x4FE8 # +0x4FE9 # +0x4FEA # +0x4FED # +0x4FEE # +0x4FEF # +0x4FF1 # +0x4FF3 # +0x4FF8 # +0x4FFA # +0x4FFE # +0x500C # +0x500D # +0x500F # +0x5012 # +0x5014 # +0x5018 # +0x5019 # +0x501A # +0x501C # +0x501F # +0x5021 # +0x5025 # +0x5026 # +0x5028 # +0x5029 # +0x502A # +0x502C # +0x502D # +0x502E # +0x503A # +0x503C # +0x503E # +0x5043 # +0x5047 # +0x5048 # +0x504C # +0x504E # +0x504F # +0x5055 # +0x505A # +0x505C # +0x5065 # +0x506C # +0x5076 # +0x5077 # +0x507B # +0x507E # +0x507F # +0x5080 # +0x5085 # +0x5088 # +0x508D # +0x50A3 # +0x50A5 # +0x50A7 # +0x50A8 # +0x50A9 # +0x50AC # +0x50B2 # +0x50BA # +0x50BB # +0x50CF # +0x50D6 # +0x50DA # +0x50E6 # +0x50E7 # +0x50EC # +0x50ED # +0x50EE # +0x50F3 # +0x50F5 # +0x50FB # +0x5106 # +0x5107 # +0x510B # +0x5112 # +0x5121 # +0x513F # +0x5140 # +0x5141 # +0x5143 # +0x5144 # +0x5145 # +0x5146 # +0x5148 # +0x5149 # +0x514B # +0x514D # +0x5151 # +0x5154 # +0x5155 # +0x5156 # +0x515A # +0x515C # +0x5162 # +0x5165 # +0x5168 # +0x516B # +0x516C # +0x516D # +0x516E # +0x5170 # +0x5171 # +0x5173 # +0x5174 # +0x5175 # +0x5176 # +0x5177 # +0x5178 # +0x5179 # +0x517B # +0x517C # +0x517D # +0x5180 # +0x5181 # +0x5182 # +0x5185 # +0x5188 # +0x5189 # +0x518C # +0x518D # +0x5192 # +0x5195 # +0x5196 # +0x5197 # +0x5199 # +0x519B # +0x519C # +0x51A0 # +0x51A2 # +0x51A4 # +0x51A5 # +0x51AB # +0x51AC # +0x51AF # +0x51B0 # +0x51B1 # +0x51B2 # +0x51B3 # +0x51B5 # +0x51B6 # +0x51B7 # +0x51BB # +0x51BC # +0x51BD # +0x51C0 # +0x51C4 # +0x51C6 # +0x51C7 # +0x51C9 # +0x51CB # +0x51CC # +0x51CF # +0x51D1 # +0x51DB # +0x51DD # +0x51E0 # +0x51E1 # +0x51E4 # +0x51EB # +0x51ED # +0x51EF # +0x51F0 # +0x51F3 # +0x51F5 # +0x51F6 # +0x51F8 # +0x51F9 # +0x51FA # +0x51FB # +0x51FC # +0x51FD # +0x51FF # +0x5200 # +0x5201 # +0x5202 # +0x5203 # +0x5206 # +0x5207 # +0x5208 # +0x520A # +0x520D # +0x520E # +0x5211 # +0x5212 # +0x5216 # +0x5217 # +0x5218 # +0x5219 # +0x521A # +0x521B # +0x521D # +0x5220 # +0x5224 # +0x5228 # +0x5229 # +0x522B # +0x522D # +0x522E # +0x5230 # +0x5233 # +0x5236 # +0x5237 # +0x5238 # +0x5239 # +0x523A # +0x523B # +0x523D # +0x523F # +0x5240 # +0x5241 # +0x5242 # +0x5243 # +0x524A # +0x524C # +0x524D # +0x5250 # +0x5251 # +0x5254 # +0x5256 # +0x525C # +0x525E # +0x5261 # +0x5265 # +0x5267 # +0x5269 # +0x526A # +0x526F # +0x5272 # +0x527D # +0x527F # +0x5281 # +0x5282 # +0x5288 # +0x5290 # +0x5293 # +0x529B # +0x529D # +0x529E # +0x529F # +0x52A0 # +0x52A1 # +0x52A2 # +0x52A3 # +0x52A8 # +0x52A9 # +0x52AA # +0x52AB # +0x52AC # +0x52AD # +0x52B1 # +0x52B2 # +0x52B3 # +0x52BE # +0x52BF # +0x52C3 # +0x52C7 # +0x52C9 # +0x52CB # +0x52D0 # +0x52D2 # +0x52D6 # +0x52D8 # +0x52DF # +0x52E4 # +0x52F0 # +0x52F9 # +0x52FA # +0x52FE # +0x52FF # +0x5300 # +0x5305 # +0x5306 # +0x5308 # +0x530D # +0x530F # +0x5310 # +0x5315 # +0x5316 # +0x5317 # +0x5319 # +0x531A # +0x531D # +0x5320 # +0x5321 # +0x5323 # +0x5326 # +0x532A # +0x532E # +0x5339 # +0x533A # +0x533B # +0x533E # +0x533F # +0x5341 # +0x5343 # +0x5345 # +0x5347 # +0x5348 # +0x5349 # +0x534A # +0x534E # +0x534F # +0x5351 # +0x5352 # +0x5353 # +0x5355 # +0x5356 # +0x5357 # +0x535A # +0x535C # +0x535E # +0x535F # +0x5360 # +0x5361 # +0x5362 # +0x5363 # +0x5364 # +0x5366 # +0x5367 # +0x5369 # +0x536B # +0x536E # +0x536F # +0x5370 # +0x5371 # +0x5373 # +0x5374 # +0x5375 # +0x5377 # +0x5378 # +0x537A # +0x537F # +0x5382 # +0x5384 # +0x5385 # +0x5386 # +0x5389 # +0x538B # +0x538C # +0x538D # +0x5395 # +0x5398 # +0x539A # +0x539D # +0x539F # +0x53A2 # +0x53A3 # +0x53A5 # +0x53A6 # +0x53A8 # +0x53A9 # +0x53AE # +0x53B6 # +0x53BB # +0x53BF # +0x53C1 # +0x53C2 # +0x53C8 # +0x53C9 # +0x53CA # +0x53CB # +0x53CC # +0x53CD # +0x53D1 # +0x53D4 # +0x53D6 # +0x53D7 # +0x53D8 # +0x53D9 # +0x53DB # +0x53DF # +0x53E0 # +0x53E3 # +0x53E4 # +0x53E5 # +0x53E6 # +0x53E8 # +0x53E9 # +0x53EA # +0x53EB # +0x53EC # +0x53ED # +0x53EE # +0x53EF # +0x53F0 # +0x53F1 # +0x53F2 # +0x53F3 # +0x53F5 # +0x53F6 # +0x53F7 # +0x53F8 # +0x53F9 # +0x53FB # +0x53FC # +0x53FD # +0x5401 # +0x5403 # +0x5404 # +0x5406 # +0x5408 # +0x5409 # +0x540A # +0x540C # +0x540D # +0x540E # +0x540F # +0x5410 # +0x5411 # +0x5412 # +0x5413 # +0x5415 # +0x5416 # +0x5417 # +0x541B # +0x541D # +0x541E # +0x541F # +0x5420 # +0x5421 # +0x5423 # +0x5426 # +0x5427 # +0x5428 # +0x5429 # +0x542B # +0x542C # +0x542D # +0x542E # +0x542F # +0x5431 # +0x5432 # +0x5434 # +0x5435 # +0x5438 # +0x5439 # +0x543B # +0x543C # +0x543E # +0x5440 # +0x5443 # +0x5446 # +0x5448 # +0x544A # +0x544B # +0x5450 # +0x5452 # +0x5453 # +0x5454 # +0x5455 # +0x5456 # +0x5457 # +0x5458 # +0x5459 # +0x545B # +0x545C # +0x5462 # +0x5464 # +0x5466 # +0x5468 # +0x5471 # +0x5472 # +0x5473 # +0x5475 # +0x5476 # +0x5477 # +0x5478 # +0x547B # +0x547C # +0x547D # +0x5480 # +0x5482 # +0x5484 # +0x5486 # +0x548B # +0x548C # +0x548E # +0x548F # +0x5490 # +0x5492 # +0x5494 # +0x5495 # +0x5496 # +0x5499 # +0x549A # +0x549B # +0x549D # +0x54A3 # +0x54A4 # +0x54A6 # +0x54A7 # +0x54A8 # +0x54A9 # +0x54AA # +0x54AB # +0x54AC # +0x54AD # +0x54AF # +0x54B1 # +0x54B3 # +0x54B4 # +0x54B8 # +0x54BB # +0x54BD # +0x54BF # +0x54C0 # +0x54C1 # +0x54C2 # +0x54C4 # +0x54C6 # +0x54C7 # +0x54C8 # +0x54C9 # +0x54CC # +0x54CD # +0x54CE # +0x54CF # +0x54D0 # +0x54D1 # +0x54D2 # +0x54D3 # +0x54D4 # +0x54D5 # +0x54D7 # +0x54D9 # +0x54DA # +0x54DC # +0x54DD # +0x54DE # +0x54DF # +0x54E5 # +0x54E6 # +0x54E7 # +0x54E8 # +0x54E9 # +0x54EA # +0x54ED # +0x54EE # +0x54F2 # +0x54F3 # +0x54FA # +0x54FC # +0x54FD # +0x54FF # +0x5501 # +0x5506 # +0x5507 # +0x5509 # +0x550F # +0x5510 # +0x5511 # +0x5514 # +0x551B # +0x5520 # +0x5522 # +0x5523 # +0x5524 # +0x5527 # +0x552A # +0x552C # +0x552E # +0x552F # +0x5530 # +0x5531 # +0x5533 # +0x5537 # +0x553C # +0x553E # +0x553F # +0x5541 # +0x5543 # +0x5544 # +0x5546 # +0x5549 # +0x554A # +0x5550 # +0x5555 # +0x5556 # +0x555C # +0x5561 # +0x5564 # +0x5565 # +0x5566 # +0x5567 # +0x556A # +0x556C # +0x556D # +0x556E # +0x5575 # +0x5576 # +0x5577 # +0x5578 # +0x557B # +0x557C # +0x557E # +0x5580 # +0x5581 # +0x5582 # +0x5583 # +0x5584 # +0x5587 # +0x5588 # +0x5589 # +0x558A # +0x558B # +0x558F # +0x5591 # +0x5594 # +0x5598 # +0x5599 # +0x559C # +0x559D # +0x559F # +0x55A7 # +0x55B1 # +0x55B3 # +0x55B5 # +0x55B7 # +0x55B9 # +0x55BB # +0x55BD # +0x55BE # +0x55C4 # +0x55C5 # +0x55C9 # +0x55CC # +0x55CD # +0x55D1 # +0x55D2 # +0x55D3 # +0x55D4 # +0x55D6 # +0x55DC # +0x55DD # +0x55DF # +0x55E1 # +0x55E3 # +0x55E4 # +0x55E5 # +0x55E6 # +0x55E8 # +0x55EA # +0x55EB # +0x55EC # +0x55EF # +0x55F2 # +0x55F3 # +0x55F5 # +0x55F7 # +0x55FD # +0x55FE # +0x5600 # +0x5601 # +0x5608 # +0x5609 # +0x560C # +0x560E # +0x560F # +0x5618 # +0x561B # +0x561E # +0x561F # +0x5623 # +0x5624 # +0x5627 # +0x562C # +0x562D # +0x5631 # +0x5632 # +0x5634 # +0x5636 # +0x5639 # +0x563B # +0x563F # +0x564C # +0x564D # +0x564E # +0x5654 # +0x5657 # +0x5658 # +0x5659 # +0x565C # +0x5662 # +0x5664 # +0x5668 # +0x5669 # +0x566A # +0x566B # +0x566C # +0x5671 # +0x5676 # +0x567B # +0x567C # +0x5685 # +0x5686 # +0x568E # +0x568F # +0x5693 # +0x56A3 # +0x56AF # +0x56B7 # +0x56BC # +0x56CA # +0x56D4 # +0x56D7 # +0x56DA # +0x56DB # +0x56DD # +0x56DE # +0x56DF # +0x56E0 # +0x56E1 # +0x56E2 # +0x56E4 # +0x56EB # +0x56ED # +0x56F0 # +0x56F1 # +0x56F4 # +0x56F5 # +0x56F9 # +0x56FA # +0x56FD # +0x56FE # +0x56FF # +0x5703 # +0x5704 # +0x5706 # +0x5708 # +0x5709 # +0x570A # +0x571C # +0x571F # +0x5723 # +0x5728 # +0x5729 # +0x572A # +0x572C # +0x572D # +0x572E # +0x572F # +0x5730 # +0x5733 # +0x5739 # +0x573A # +0x573B # +0x573E # +0x5740 # +0x5742 # +0x5747 # +0x574A # +0x574C # +0x574D # +0x574E # +0x574F # +0x5750 # +0x5751 # +0x5757 # +0x575A # +0x575B # +0x575C # +0x575D # +0x575E # +0x575F # +0x5760 # +0x5761 # +0x5764 # +0x5766 # +0x5768 # +0x5769 # +0x576A # +0x576B # +0x576D # +0x576F # +0x5773 # +0x5776 # +0x5777 # +0x577B # +0x577C # +0x5782 # +0x5783 # +0x5784 # +0x5785 # +0x5786 # +0x578B # +0x578C # +0x5792 # +0x5793 # +0x579B # +0x57A0 # +0x57A1 # +0x57A2 # +0x57A3 # +0x57A4 # +0x57A6 # +0x57A7 # +0x57A9 # +0x57AB # +0x57AD # +0x57AE # +0x57B2 # +0x57B4 # +0x57B8 # +0x57C2 # +0x57C3 # +0x57CB # +0x57CE # +0x57CF # +0x57D2 # +0x57D4 # +0x57D5 # +0x57D8 # +0x57D9 # +0x57DA # +0x57DD # +0x57DF # +0x57E0 # +0x57E4 # +0x57ED # +0x57EF # +0x57F4 # +0x57F8 # +0x57F9 # +0x57FA # +0x57FD # +0x5800 # +0x5802 # +0x5806 # +0x5807 # +0x580B # +0x580D # +0x5811 # +0x5815 # +0x5819 # +0x581E # +0x5820 # +0x5821 # +0x5824 # +0x582A # +0x5830 # +0x5835 # +0x5844 # +0x584C # +0x584D # +0x5851 # +0x5854 # +0x5858 # +0x585E # +0x5865 # +0x586B # +0x586C # +0x587E # +0x5880 # +0x5881 # +0x5883 # +0x5885 # +0x5889 # +0x5892 # +0x5893 # +0x5899 # +0x589A # +0x589E # +0x589F # +0x58A8 # +0x58A9 # +0x58BC # +0x58C1 # +0x58C5 # +0x58D1 # +0x58D5 # +0x58E4 # +0x58EB # +0x58EC # +0x58EE # +0x58F0 # +0x58F3 # +0x58F6 # +0x58F9 # +0x5902 # +0x5904 # +0x5907 # +0x590D # +0x590F # +0x5914 # +0x5915 # +0x5916 # +0x5919 # +0x591A # +0x591C # +0x591F # +0x5924 # +0x5925 # +0x5927 # +0x5929 # +0x592A # +0x592B # +0x592D # +0x592E # +0x592F # +0x5931 # +0x5934 # +0x5937 # +0x5938 # +0x5939 # +0x593A # +0x593C # +0x5941 # +0x5942 # +0x5944 # +0x5947 # +0x5948 # +0x5949 # +0x594B # +0x594E # +0x594F # +0x5951 # +0x5954 # +0x5955 # +0x5956 # +0x5957 # +0x5958 # +0x595A # +0x5960 # +0x5962 # +0x5965 # +0x5973 # +0x5974 # +0x5976 # +0x5978 # +0x5979 # +0x597D # +0x5981 # +0x5982 # +0x5983 # +0x5984 # +0x5986 # +0x5987 # +0x5988 # +0x598A # +0x598D # +0x5992 # +0x5993 # +0x5996 # +0x5997 # +0x5999 # +0x599E # +0x59A3 # +0x59A4 # +0x59A5 # +0x59A8 # +0x59A9 # +0x59AA # +0x59AB # +0x59AE # +0x59AF # +0x59B2 # +0x59B9 # +0x59BB # +0x59BE # +0x59C6 # +0x59CA # +0x59CB # +0x59D0 # +0x59D1 # +0x59D2 # +0x59D3 # +0x59D4 # +0x59D7 # +0x59D8 # +0x59DA # +0x59DC # +0x59DD # +0x59E3 # +0x59E5 # +0x59E8 # +0x59EC # +0x59F9 # +0x59FB # +0x59FF # +0x5A01 # +0x5A03 # +0x5A04 # +0x5A05 # +0x5A06 # +0x5A07 # +0x5A08 # +0x5A09 # +0x5A0C # +0x5A11 # +0x5A13 # +0x5A18 # +0x5A1C # +0x5A1F # +0x5A20 # +0x5A23 # +0x5A25 # +0x5A29 # +0x5A31 # +0x5A32 # +0x5A34 # +0x5A36 # +0x5A3C # +0x5A40 # +0x5A46 # +0x5A49 # +0x5A4A # +0x5A55 # +0x5A5A # +0x5A62 # +0x5A67 # +0x5A6A # +0x5A74 # +0x5A75 # +0x5A76 # +0x5A77 # +0x5A7A # +0x5A7F # +0x5A92 # +0x5A9A # +0x5A9B # +0x5AAA # +0x5AB2 # +0x5AB3 # +0x5AB5 # +0x5AB8 # +0x5ABE # +0x5AC1 # +0x5AC2 # +0x5AC9 # +0x5ACC # +0x5AD2 # +0x5AD4 # +0x5AD6 # +0x5AD8 # +0x5ADC # +0x5AE0 # +0x5AE1 # +0x5AE3 # +0x5AE6 # +0x5AE9 # +0x5AEB # +0x5AF1 # +0x5B09 # +0x5B16 # +0x5B17 # +0x5B32 # +0x5B34 # +0x5B37 # +0x5B40 # +0x5B50 # +0x5B51 # +0x5B53 # +0x5B54 # +0x5B55 # +0x5B57 # +0x5B58 # +0x5B59 # +0x5B5A # +0x5B5B # +0x5B5C # +0x5B5D # +0x5B5F # +0x5B62 # +0x5B63 # +0x5B64 # +0x5B65 # +0x5B66 # +0x5B69 # +0x5B6A # +0x5B6C # +0x5B70 # +0x5B71 # +0x5B73 # +0x5B75 # +0x5B7A # +0x5B7D # +0x5B80 # +0x5B81 # +0x5B83 # +0x5B84 # +0x5B85 # +0x5B87 # +0x5B88 # +0x5B89 # +0x5B8B # +0x5B8C # +0x5B8F # +0x5B93 # +0x5B95 # +0x5B97 # +0x5B98 # +0x5B99 # +0x5B9A # +0x5B9B # +0x5B9C # +0x5B9D # +0x5B9E # +0x5BA0 # +0x5BA1 # +0x5BA2 # +0x5BA3 # +0x5BA4 # +0x5BA5 # +0x5BA6 # +0x5BAA # +0x5BAB # +0x5BB0 # +0x5BB3 # +0x5BB4 # +0x5BB5 # +0x5BB6 # +0x5BB8 # +0x5BB9 # +0x5BBD # +0x5BBE # +0x5BBF # +0x5BC2 # +0x5BC4 # +0x5BC5 # +0x5BC6 # +0x5BC7 # +0x5BCC # +0x5BD0 # +0x5BD2 # +0x5BD3 # +0x5BDD # +0x5BDE # +0x5BDF # +0x5BE1 # +0x5BE4 # +0x5BE5 # +0x5BE8 # +0x5BEE # +0x5BF0 # +0x5BF8 # +0x5BF9 # +0x5BFA # +0x5BFB # +0x5BFC # +0x5BFF # +0x5C01 # +0x5C04 # +0x5C06 # +0x5C09 # +0x5C0A # +0x5C0F # +0x5C11 # +0x5C14 # +0x5C15 # +0x5C16 # +0x5C18 # +0x5C1A # +0x5C1C # +0x5C1D # +0x5C22 # +0x5C24 # +0x5C25 # +0x5C27 # +0x5C2C # +0x5C31 # +0x5C34 # +0x5C38 # +0x5C39 # +0x5C3A # +0x5C3B # +0x5C3C # +0x5C3D # +0x5C3E # +0x5C3F # +0x5C40 # +0x5C41 # +0x5C42 # +0x5C45 # +0x5C48 # +0x5C49 # +0x5C4A # +0x5C4B # +0x5C4E # +0x5C4F # +0x5C50 # +0x5C51 # +0x5C55 # +0x5C59 # +0x5C5E # +0x5C60 # +0x5C61 # +0x5C63 # +0x5C65 # +0x5C66 # +0x5C6E # +0x5C6F # +0x5C71 # +0x5C79 # +0x5C7A # +0x5C7F # +0x5C81 # +0x5C82 # +0x5C88 # +0x5C8C # +0x5C8D # +0x5C90 # +0x5C91 # +0x5C94 # +0x5C96 # +0x5C97 # +0x5C98 # +0x5C99 # +0x5C9A # +0x5C9B # +0x5C9C # +0x5CA2 # +0x5CA3 # +0x5CA9 # +0x5CAB # +0x5CAC # +0x5CAD # +0x5CB1 # +0x5CB3 # +0x5CB5 # +0x5CB7 # +0x5CB8 # +0x5CBD # +0x5CBF # +0x5CC1 # +0x5CC4 # +0x5CCB # +0x5CD2 # +0x5CD9 # +0x5CE1 # +0x5CE4 # +0x5CE5 # +0x5CE6 # +0x5CE8 # +0x5CEA # +0x5CED # +0x5CF0 # +0x5CFB # +0x5D02 # +0x5D03 # +0x5D06 # +0x5D07 # +0x5D0E # +0x5D14 # +0x5D16 # +0x5D1B # +0x5D1E # +0x5D24 # +0x5D26 # +0x5D27 # +0x5D29 # +0x5D2D # +0x5D2E # +0x5D34 # +0x5D3D # +0x5D3E # +0x5D47 # +0x5D4A # +0x5D4B # +0x5D4C # +0x5D58 # +0x5D5B # +0x5D5D # +0x5D69 # +0x5D6B # +0x5D6C # +0x5D6F # +0x5D74 # +0x5D82 # +0x5D99 # +0x5D9D # +0x5DB7 # +0x5DC5 # +0x5DCD # +0x5DDB # +0x5DDD # +0x5DDE # +0x5DE1 # +0x5DE2 # +0x5DE5 # +0x5DE6 # +0x5DE7 # +0x5DE8 # +0x5DE9 # +0x5DEB # +0x5DEE # +0x5DEF # +0x5DF1 # +0x5DF2 # +0x5DF3 # +0x5DF4 # +0x5DF7 # +0x5DFD # +0x5DFE # +0x5E01 # +0x5E02 # +0x5E03 # +0x5E05 # +0x5E06 # +0x5E08 # +0x5E0C # +0x5E0F # +0x5E10 # +0x5E11 # +0x5E14 # +0x5E15 # +0x5E16 # +0x5E18 # +0x5E19 # +0x5E1A # +0x5E1B # +0x5E1C # +0x5E1D # +0x5E26 # +0x5E27 # +0x5E2D # +0x5E2E # +0x5E31 # +0x5E37 # +0x5E38 # +0x5E3B # +0x5E3C # +0x5E3D # +0x5E42 # +0x5E44 # +0x5E45 # +0x5E4C # +0x5E54 # +0x5E55 # +0x5E5B # +0x5E5E # +0x5E61 # +0x5E62 # +0x5E72 # +0x5E73 # +0x5E74 # +0x5E76 # +0x5E78 # +0x5E7A # +0x5E7B # +0x5E7C # +0x5E7D # +0x5E7F # +0x5E80 # +0x5E84 # +0x5E86 # +0x5E87 # +0x5E8A # +0x5E8B # +0x5E8F # +0x5E90 # +0x5E91 # +0x5E93 # +0x5E94 # +0x5E95 # +0x5E96 # +0x5E97 # +0x5E99 # +0x5E9A # +0x5E9C # +0x5E9E # +0x5E9F # +0x5EA0 # +0x5EA5 # +0x5EA6 # +0x5EA7 # +0x5EAD # +0x5EB3 # +0x5EB5 # +0x5EB6 # +0x5EB7 # +0x5EB8 # +0x5EB9 # +0x5EBE # +0x5EC9 # +0x5ECA # +0x5ED1 # +0x5ED2 # +0x5ED3 # +0x5ED6 # +0x5EDB # +0x5EE8 # +0x5EEA # +0x5EF4 # +0x5EF6 # +0x5EF7 # +0x5EFA # +0x5EFE # +0x5EFF # +0x5F00 # +0x5F01 # +0x5F02 # +0x5F03 # +0x5F04 # +0x5F08 # +0x5F0A # +0x5F0B # +0x5F0F # +0x5F11 # +0x5F13 # +0x5F15 # +0x5F17 # +0x5F18 # +0x5F1B # +0x5F1F # +0x5F20 # +0x5F25 # +0x5F26 # +0x5F27 # +0x5F29 # +0x5F2A # +0x5F2D # +0x5F2F # +0x5F31 # +0x5F39 # +0x5F3A # +0x5F3C # +0x5F40 # +0x5F50 # +0x5F52 # +0x5F53 # +0x5F55 # +0x5F56 # +0x5F57 # +0x5F58 # +0x5F5D # +0x5F61 # +0x5F62 # +0x5F64 # +0x5F66 # +0x5F69 # +0x5F6A # +0x5F6C # +0x5F6D # +0x5F70 # +0x5F71 # +0x5F73 # +0x5F77 # +0x5F79 # +0x5F7B # +0x5F7C # +0x5F80 # +0x5F81 # +0x5F82 # +0x5F84 # +0x5F85 # +0x5F87 # +0x5F88 # +0x5F89 # +0x5F8A # +0x5F8B # +0x5F8C # +0x5F90 # +0x5F92 # +0x5F95 # +0x5F97 # +0x5F98 # +0x5F99 # +0x5F9C # +0x5FA1 # +0x5FA8 # +0x5FAA # +0x5FAD # +0x5FAE # +0x5FB5 # +0x5FB7 # +0x5FBC # +0x5FBD # +0x5FC3 # +0x5FC4 # +0x5FC5 # +0x5FC6 # +0x5FC9 # +0x5FCC # +0x5FCD # +0x5FCF # +0x5FD0 # +0x5FD1 # +0x5FD2 # +0x5FD6 # +0x5FD7 # +0x5FD8 # +0x5FD9 # +0x5FDD # +0x5FE0 # +0x5FE1 # +0x5FE4 # +0x5FE7 # +0x5FEA # +0x5FEB # +0x5FED # +0x5FEE # +0x5FF1 # +0x5FF5 # +0x5FF8 # +0x5FFB # +0x5FFD # +0x5FFE # +0x5FFF # +0x6000 # +0x6001 # +0x6002 # +0x6003 # +0x6004 # +0x6005 # +0x6006 # +0x600A # +0x600D # +0x600E # +0x600F # +0x6012 # +0x6014 # +0x6015 # +0x6016 # +0x6019 # +0x601B # +0x601C # +0x601D # +0x6020 # +0x6021 # +0x6025 # +0x6026 # +0x6027 # +0x6028 # +0x6029 # +0x602A # +0x602B # +0x602F # +0x6035 # +0x603B # +0x603C # +0x603F # +0x6041 # +0x6042 # +0x6043 # +0x604B # +0x604D # +0x6050 # +0x6052 # +0x6055 # +0x6059 # +0x605A # +0x605D # +0x6062 # +0x6063 # +0x6064 # +0x6067 # +0x6068 # +0x6069 # +0x606A # +0x606B # +0x606C # +0x606D # +0x606F # +0x6070 # +0x6073 # +0x6076 # +0x6078 # +0x6079 # +0x607A # +0x607B # +0x607C # +0x607D # +0x607F # +0x6083 # +0x6084 # +0x6089 # +0x608C # +0x608D # +0x6092 # +0x6094 # +0x6096 # +0x609A # +0x609B # +0x609D # +0x609F # +0x60A0 # +0x60A3 # +0x60A6 # +0x60A8 # +0x60AB # +0x60AC # +0x60AD # +0x60AF # +0x60B1 # +0x60B2 # +0x60B4 # +0x60B8 # +0x60BB # +0x60BC # +0x60C5 # +0x60C6 # +0x60CA # +0x60CB # +0x60D1 # +0x60D5 # +0x60D8 # +0x60DA # +0x60DC # +0x60DD # +0x60DF # +0x60E0 # +0x60E6 # +0x60E7 # +0x60E8 # +0x60E9 # +0x60EB # +0x60EC # +0x60ED # +0x60EE # +0x60EF # +0x60F0 # +0x60F3 # +0x60F4 # +0x60F6 # +0x60F9 # +0x60FA # +0x6100 # +0x6101 # +0x6106 # +0x6108 # +0x6109 # +0x610D # +0x610E # +0x610F # +0x6115 # +0x611A # +0x611F # +0x6120 # +0x6123 # +0x6124 # +0x6126 # +0x6127 # +0x612B # +0x613F # +0x6148 # +0x614A # +0x614C # +0x614E # +0x6151 # +0x6155 # +0x615D # +0x6162 # +0x6167 # +0x6168 # +0x6170 # +0x6175 # +0x6177 # +0x618B # +0x618E # +0x6194 # +0x619D # +0x61A7 # +0x61A8 # +0x61A9 # +0x61AC # +0x61B7 # +0x61BE # +0x61C2 # +0x61C8 # +0x61CA # +0x61CB # +0x61D1 # +0x61D2 # +0x61D4 # +0x61E6 # +0x61F5 # +0x61FF # +0x6206 # +0x6208 # +0x620A # +0x620B # +0x620C # +0x620D # +0x620E # +0x620F # +0x6210 # +0x6211 # +0x6212 # +0x6215 # +0x6216 # +0x6217 # +0x6218 # +0x621A # +0x621B # +0x621F # +0x6221 # +0x6222 # +0x6224 # +0x6225 # +0x622A # +0x622C # +0x622E # +0x6233 # +0x6234 # +0x6237 # +0x623D # +0x623E # +0x623F # +0x6240 # +0x6241 # +0x6243 # +0x6247 # +0x6248 # +0x6249 # +0x624B # +0x624C # +0x624D # +0x624E # +0x6251 # +0x6252 # +0x6253 # +0x6254 # +0x6258 # +0x625B # +0x6263 # +0x6266 # +0x6267 # +0x6269 # +0x626A # +0x626B # +0x626C # +0x626D # +0x626E # +0x626F # +0x6270 # +0x6273 # +0x6276 # +0x6279 # +0x627C # +0x627E # +0x627F # +0x6280 # +0x6284 # +0x6289 # +0x628A # +0x6291 # +0x6292 # +0x6293 # +0x6295 # +0x6296 # +0x6297 # +0x6298 # +0x629A # +0x629B # +0x629F # +0x62A0 # +0x62A1 # +0x62A2 # +0x62A4 # +0x62A5 # +0x62A8 # +0x62AB # +0x62AC # +0x62B1 # +0x62B5 # +0x62B9 # +0x62BB # +0x62BC # +0x62BD # +0x62BF # +0x62C2 # +0x62C4 # +0x62C5 # +0x62C6 # +0x62C7 # +0x62C8 # +0x62C9 # +0x62CA # +0x62CC # +0x62CD # +0x62CE # +0x62D0 # +0x62D2 # +0x62D3 # +0x62D4 # +0x62D6 # +0x62D7 # +0x62D8 # +0x62D9 # +0x62DA # +0x62DB # +0x62DC # +0x62DF # +0x62E2 # +0x62E3 # +0x62E5 # +0x62E6 # +0x62E7 # +0x62E8 # +0x62E9 # +0x62EC # +0x62ED # +0x62EE # +0x62EF # +0x62F1 # +0x62F3 # +0x62F4 # +0x62F6 # +0x62F7 # +0x62FC # +0x62FD # +0x62FE # +0x62FF # +0x6301 # +0x6302 # +0x6307 # +0x6308 # +0x6309 # +0x630E # +0x6311 # +0x6316 # +0x631A # +0x631B # +0x631D # +0x631E # +0x631F # +0x6320 # +0x6321 # +0x6322 # +0x6323 # +0x6324 # +0x6325 # +0x6328 # +0x632A # +0x632B # +0x632F # +0x6332 # +0x6339 # +0x633A # +0x633D # +0x6342 # +0x6343 # +0x6345 # +0x6346 # +0x6349 # +0x634B # +0x634C # +0x634D # +0x634E # +0x634F # +0x6350 # +0x6355 # +0x635E # +0x635F # +0x6361 # +0x6362 # +0x6363 # +0x6367 # +0x6369 # +0x636D # +0x636E # +0x6371 # +0x6376 # +0x6377 # +0x637A # +0x637B # +0x6380 # +0x6382 # +0x6387 # +0x6388 # +0x6389 # +0x638A # +0x638C # +0x638E # +0x638F # +0x6390 # +0x6392 # +0x6396 # +0x6398 # +0x63A0 # +0x63A2 # +0x63A3 # +0x63A5 # +0x63A7 # +0x63A8 # +0x63A9 # +0x63AA # +0x63AC # +0x63AD # +0x63AE # +0x63B0 # +0x63B3 # +0x63B4 # +0x63B7 # +0x63B8 # +0x63BA # +0x63BC # +0x63BE # +0x63C4 # +0x63C6 # +0x63C9 # +0x63CD # +0x63CE # +0x63CF # +0x63D0 # +0x63D2 # +0x63D6 # +0x63DE # +0x63E0 # +0x63E1 # +0x63E3 # +0x63E9 # +0x63EA # +0x63ED # +0x63F2 # +0x63F4 # +0x63F6 # +0x63F8 # +0x63FD # +0x63FF # +0x6400 # +0x6401 # +0x6402 # +0x6405 # +0x640B # +0x640C # +0x640F # +0x6410 # +0x6413 # +0x6414 # +0x641B # +0x641C # +0x641E # +0x6420 # +0x6421 # +0x6426 # +0x642A # +0x642C # +0x642D # +0x6434 # +0x643A # +0x643D # +0x643F # +0x6441 # +0x6444 # +0x6445 # +0x6446 # +0x6447 # +0x6448 # +0x644A # +0x6452 # +0x6454 # +0x6458 # +0x645E # +0x6467 # +0x6469 # +0x646D # +0x6478 # +0x6479 # +0x647A # +0x6482 # +0x6484 # +0x6485 # +0x6487 # +0x6491 # +0x6492 # +0x6495 # +0x6496 # +0x6499 # +0x649E # +0x64A4 # +0x64A9 # +0x64AC # +0x64AD # +0x64AE # +0x64B0 # +0x64B5 # +0x64B7 # +0x64B8 # +0x64BA # +0x64BC # +0x64C0 # +0x64C2 # +0x64C5 # +0x64CD # +0x64CE # +0x64D0 # +0x64D2 # +0x64D7 # +0x64D8 # +0x64DE # +0x64E2 # +0x64E4 # +0x64E6 # +0x6500 # +0x6509 # +0x6512 # +0x6518 # +0x6525 # +0x652B # +0x652E # +0x652F # +0x6534 # +0x6535 # +0x6536 # +0x6538 # +0x6539 # +0x653B # +0x653E # +0x653F # +0x6545 # +0x6548 # +0x6549 # +0x654C # +0x654F # +0x6551 # +0x6555 # +0x6556 # +0x6559 # +0x655B # +0x655D # +0x655E # +0x6562 # +0x6563 # +0x6566 # +0x656B # +0x656C # +0x6570 # +0x6572 # +0x6574 # +0x6577 # +0x6587 # +0x658B # +0x658C # +0x6590 # +0x6591 # +0x6593 # +0x6597 # +0x6599 # +0x659B # +0x659C # +0x659F # +0x65A1 # +0x65A4 # +0x65A5 # +0x65A7 # +0x65A9 # +0x65AB # +0x65AD # +0x65AF # +0x65B0 # +0x65B9 # +0x65BC # +0x65BD # +0x65C1 # +0x65C3 # +0x65C4 # +0x65C5 # +0x65C6 # +0x65CB # +0x65CC # +0x65CE # +0x65CF # +0x65D2 # +0x65D6 # +0x65D7 # +0x65E0 # +0x65E2 # +0x65E5 # +0x65E6 # +0x65E7 # +0x65E8 # +0x65E9 # +0x65EC # +0x65ED # +0x65EE # +0x65EF # +0x65F0 # +0x65F1 # +0x65F6 # +0x65F7 # +0x65FA # +0x6600 # +0x6602 # +0x6603 # +0x6606 # +0x660A # +0x660C # +0x660E # +0x660F # +0x6613 # +0x6614 # +0x6615 # +0x6619 # +0x661D # +0x661F # +0x6620 # +0x6625 # +0x6627 # +0x6628 # +0x662D # +0x662F # +0x6631 # +0x6634 # +0x6635 # +0x6636 # +0x663C # +0x663E # +0x6641 # +0x6643 # +0x664B # +0x664C # +0x664F # +0x6652 # +0x6653 # +0x6654 # +0x6655 # +0x6656 # +0x6657 # +0x665A # +0x665F # +0x6661 # +0x6664 # +0x6666 # +0x6668 # +0x666E # +0x666F # +0x6670 # +0x6674 # +0x6676 # +0x6677 # +0x667A # +0x667E # +0x6682 # +0x6684 # +0x6687 # +0x668C # +0x6691 # +0x6696 # +0x6697 # +0x669D # +0x66A7 # +0x66A8 # +0x66AE # +0x66B4 # +0x66B9 # +0x66BE # +0x66D9 # +0x66DB # +0x66DC # +0x66DD # +0x66E6 # +0x66E9 # +0x66F0 # +0x66F2 # +0x66F3 # +0x66F4 # +0x66F7 # +0x66F9 # +0x66FC # +0x66FE # +0x66FF # +0x6700 # +0x6708 # +0x6709 # +0x670A # +0x670B # +0x670D # +0x6710 # +0x6714 # +0x6715 # +0x6717 # +0x671B # +0x671D # +0x671F # +0x6726 # +0x6728 # +0x672A # +0x672B # +0x672C # +0x672D # +0x672F # +0x6731 # +0x6734 # +0x6735 # +0x673A # +0x673D # +0x6740 # +0x6742 # +0x6743 # +0x6746 # +0x6748 # +0x6749 # +0x674C # +0x674E # +0x674F # +0x6750 # +0x6751 # +0x6753 # +0x6756 # +0x675C # +0x675E # +0x675F # +0x6760 # +0x6761 # +0x6765 # +0x6768 # +0x6769 # +0x676A # +0x676D # +0x676F # +0x6770 # +0x6772 # +0x6773 # +0x6775 # +0x6777 # +0x677C # +0x677E # +0x677F # +0x6781 # +0x6784 # +0x6787 # +0x6789 # +0x678B # +0x6790 # +0x6795 # +0x6797 # +0x6798 # +0x679A # +0x679C # +0x679D # +0x679E # +0x67A2 # +0x67A3 # +0x67A5 # +0x67A7 # +0x67A8 # +0x67AA # +0x67AB # +0x67AD # +0x67AF # +0x67B0 # +0x67B3 # +0x67B5 # +0x67B6 # +0x67B7 # +0x67B8 # +0x67C1 # +0x67C3 # +0x67C4 # +0x67CF # +0x67D0 # +0x67D1 # +0x67D2 # +0x67D3 # +0x67D4 # +0x67D8 # +0x67D9 # +0x67DA # +0x67DC # +0x67DD # +0x67DE # +0x67E0 # +0x67E2 # +0x67E5 # +0x67E9 # +0x67EC # +0x67EF # +0x67F0 # +0x67F1 # +0x67F3 # +0x67F4 # +0x67FD # +0x67FF # +0x6800 # +0x6805 # +0x6807 # +0x6808 # +0x6809 # +0x680A # +0x680B # +0x680C # +0x680E # +0x680F # +0x6811 # +0x6813 # +0x6816 # +0x6817 # +0x681D # +0x6821 # +0x6829 # +0x682A # +0x6832 # +0x6833 # +0x6837 # +0x6838 # +0x6839 # +0x683C # +0x683D # +0x683E # +0x6840 # +0x6841 # +0x6842 # +0x6843 # +0x6844 # +0x6845 # +0x6846 # +0x6848 # +0x6849 # +0x684A # +0x684C # +0x684E # +0x6850 # +0x6851 # +0x6853 # +0x6854 # +0x6855 # +0x6860 # +0x6861 # +0x6862 # +0x6863 # +0x6864 # +0x6865 # +0x6866 # +0x6867 # +0x6868 # +0x6869 # +0x686B # +0x6874 # +0x6876 # +0x6877 # +0x6881 # +0x6883 # +0x6885 # +0x6886 # +0x688F # +0x6893 # +0x6897 # +0x68A2 # +0x68A6 # +0x68A7 # +0x68A8 # +0x68AD # +0x68AF # +0x68B0 # +0x68B3 # +0x68B5 # +0x68C0 # +0x68C2 # +0x68C9 # +0x68CB # +0x68CD # +0x68D2 # +0x68D5 # +0x68D8 # +0x68DA # +0x68E0 # +0x68E3 # +0x68EE # +0x68F0 # +0x68F1 # +0x68F5 # +0x68F9 # +0x68FA # +0x68FC # +0x6901 # +0x6905 # +0x690B # +0x690D # +0x690E # +0x6910 # +0x6912 # +0x691F # +0x6920 # +0x6924 # +0x692D # +0x6930 # +0x6934 # +0x6939 # +0x693D # +0x693F # +0x6942 # +0x6954 # +0x6957 # +0x695A # +0x695D # +0x695E # +0x6960 # +0x6963 # +0x6966 # +0x696B # +0x696E # +0x6971 # +0x6977 # +0x6978 # +0x6979 # +0x697C # +0x6980 # +0x6982 # +0x6984 # +0x6986 # +0x6987 # +0x6988 # +0x6989 # +0x698D # +0x6994 # +0x6995 # +0x6998 # +0x699B # +0x699C # +0x69A7 # +0x69A8 # +0x69AB # +0x69AD # +0x69B1 # +0x69B4 # +0x69B7 # +0x69BB # +0x69C1 # +0x69CA # +0x69CC # +0x69CE # +0x69D0 # +0x69D4 # +0x69DB # +0x69DF # +0x69E0 # +0x69ED # +0x69F2 # +0x69FD # +0x69FF # +0x6A0A # +0x6A17 # +0x6A18 # +0x6A1F # +0x6A21 # +0x6A28 # +0x6A2A # +0x6A2F # +0x6A31 # +0x6A35 # +0x6A3D # +0x6A3E # +0x6A44 # +0x6A47 # +0x6A50 # +0x6A58 # +0x6A59 # +0x6A5B # +0x6A61 # +0x6A65 # +0x6A71 # +0x6A79 # +0x6A7C # +0x6A80 # +0x6A84 # +0x6A8E # +0x6A90 # +0x6A91 # +0x6A97 # +0x6AA0 # +0x6AA9 # +0x6AAB # +0x6AAC # +0x6B20 # +0x6B21 # +0x6B22 # +0x6B23 # +0x6B24 # +0x6B27 # +0x6B32 # +0x6B37 # +0x6B39 # +0x6B3A # +0x6B3E # +0x6B43 # +0x6B46 # +0x6B47 # +0x6B49 # +0x6B4C # +0x6B59 # +0x6B62 # +0x6B63 # +0x6B64 # +0x6B65 # +0x6B66 # +0x6B67 # +0x6B6A # +0x6B79 # +0x6B7B # +0x6B7C # +0x6B81 # +0x6B82 # +0x6B83 # +0x6B84 # +0x6B86 # +0x6B87 # +0x6B89 # +0x6B8A # +0x6B8B # +0x6B8D # +0x6B92 # +0x6B93 # +0x6B96 # +0x6B9A # +0x6B9B # +0x6BA1 # +0x6BAA # +0x6BB3 # +0x6BB4 # +0x6BB5 # +0x6BB7 # +0x6BBF # +0x6BC1 # +0x6BC2 # +0x6BC5 # +0x6BCB # +0x6BCD # +0x6BCF # +0x6BD2 # +0x6BD3 # +0x6BD4 # +0x6BD5 # +0x6BD6 # +0x6BD7 # +0x6BD9 # +0x6BDB # +0x6BE1 # +0x6BEA # +0x6BEB # +0x6BEF # +0x6BF3 # +0x6BF5 # +0x6BF9 # +0x6BFD # +0x6C05 # +0x6C06 # +0x6C07 # +0x6C0D # +0x6C0F # +0x6C10 # +0x6C11 # +0x6C13 # +0x6C14 # +0x6C15 # +0x6C16 # +0x6C18 # +0x6C19 # +0x6C1A # +0x6C1B # +0x6C1F # +0x6C21 # +0x6C22 # +0x6C24 # +0x6C26 # +0x6C27 # +0x6C28 # +0x6C29 # +0x6C2A # +0x6C2E # +0x6C2F # +0x6C30 # +0x6C32 # +0x6C34 # +0x6C35 # +0x6C38 # +0x6C3D # +0x6C40 # +0x6C41 # +0x6C42 # +0x6C46 # +0x6C47 # +0x6C49 # +0x6C4A # +0x6C50 # +0x6C54 # +0x6C55 # +0x6C57 # +0x6C5B # +0x6C5C # +0x6C5D # +0x6C5E # +0x6C5F # +0x6C60 # +0x6C61 # +0x6C64 # +0x6C68 # +0x6C69 # +0x6C6A # +0x6C70 # +0x6C72 # +0x6C74 # +0x6C76 # +0x6C79 # +0x6C7D # +0x6C7E # +0x6C81 # +0x6C82 # +0x6C83 # +0x6C85 # +0x6C86 # +0x6C88 # +0x6C89 # +0x6C8C # +0x6C8F # +0x6C90 # +0x6C93 # +0x6C94 # +0x6C99 # +0x6C9B # +0x6C9F # +0x6CA1 # +0x6CA3 # +0x6CA4 # +0x6CA5 # +0x6CA6 # +0x6CA7 # +0x6CA9 # +0x6CAA # +0x6CAB # +0x6CAD # +0x6CAE # +0x6CB1 # +0x6CB2 # +0x6CB3 # +0x6CB8 # +0x6CB9 # +0x6CBB # +0x6CBC # +0x6CBD # +0x6CBE # +0x6CBF # +0x6CC4 # +0x6CC5 # +0x6CC9 # +0x6CCA # +0x6CCC # +0x6CD0 # +0x6CD3 # +0x6CD4 # +0x6CD5 # +0x6CD6 # +0x6CD7 # +0x6CDB # +0x6CDE # +0x6CE0 # +0x6CE1 # +0x6CE2 # +0x6CE3 # +0x6CE5 # +0x6CE8 # +0x6CEA # +0x6CEB # +0x6CEE # +0x6CEF # +0x6CF0 # +0x6CF1 # +0x6CF3 # +0x6CF5 # +0x6CF6 # +0x6CF7 # +0x6CF8 # +0x6CFA # +0x6CFB # +0x6CFC # +0x6CFD # +0x6CFE # +0x6D01 # +0x6D04 # +0x6D07 # +0x6D0B # +0x6D0C # +0x6D0E # +0x6D12 # +0x6D17 # +0x6D19 # +0x6D1A # +0x6D1B # +0x6D1E # +0x6D25 # +0x6D27 # +0x6D2A # +0x6D2B # +0x6D2E # +0x6D31 # +0x6D32 # +0x6D33 # +0x6D35 # +0x6D39 # +0x6D3B # +0x6D3C # +0x6D3D # +0x6D3E # +0x6D41 # +0x6D43 # +0x6D45 # +0x6D46 # +0x6D47 # +0x6D48 # +0x6D4A # +0x6D4B # +0x6D4D # +0x6D4E # +0x6D4F # +0x6D51 # +0x6D52 # +0x6D53 # +0x6D54 # +0x6D59 # +0x6D5A # +0x6D5C # +0x6D5E # +0x6D60 # +0x6D63 # +0x6D66 # +0x6D69 # +0x6D6A # +0x6D6E # +0x6D6F # +0x6D74 # +0x6D77 # +0x6D78 # +0x6D7C # +0x6D82 # +0x6D85 # +0x6D88 # +0x6D89 # +0x6D8C # +0x6D8E # +0x6D91 # +0x6D93 # +0x6D94 # +0x6D95 # +0x6D9B # +0x6D9D # +0x6D9E # +0x6D9F # +0x6DA0 # +0x6DA1 # +0x6DA3 # +0x6DA4 # +0x6DA6 # +0x6DA7 # +0x6DA8 # +0x6DA9 # +0x6DAA # +0x6DAB # +0x6DAE # +0x6DAF # +0x6DB2 # +0x6DB5 # +0x6DB8 # +0x6DBF # +0x6DC0 # +0x6DC4 # +0x6DC5 # +0x6DC6 # +0x6DC7 # +0x6DCB # +0x6DCC # +0x6DD1 # +0x6DD6 # +0x6DD8 # +0x6DD9 # +0x6DDD # +0x6DDE # +0x6DE0 # +0x6DE1 # +0x6DE4 # +0x6DE6 # +0x6DEB # +0x6DEC # +0x6DEE # +0x6DF1 # +0x6DF3 # +0x6DF7 # +0x6DF9 # +0x6DFB # +0x6DFC # +0x6E05 # +0x6E0A # +0x6E0C # +0x6E0D # +0x6E0E # +0x6E10 # +0x6E11 # +0x6E14 # +0x6E16 # +0x6E17 # +0x6E1A # +0x6E1D # +0x6E20 # +0x6E21 # +0x6E23 # +0x6E24 # +0x6E25 # +0x6E29 # +0x6E2B # +0x6E2D # +0x6E2F # +0x6E32 # +0x6E34 # +0x6E38 # +0x6E3A # +0x6E43 # +0x6E44 # +0x6E4D # +0x6E4E # +0x6E53 # +0x6E54 # +0x6E56 # +0x6E58 # +0x6E5B # +0x6E5F # +0x6E6B # +0x6E6E # +0x6E7E # +0x6E7F # +0x6E83 # +0x6E85 # +0x6E86 # +0x6E89 # +0x6E8F # +0x6E90 # +0x6E98 # +0x6E9C # +0x6E9F # +0x6EA2 # +0x6EA5 # +0x6EA7 # +0x6EAA # +0x6EAF # +0x6EB1 # +0x6EB2 # +0x6EB4 # +0x6EB6 # +0x6EB7 # +0x6EBA # +0x6EBB # +0x6EBD # +0x6EC1 # +0x6EC2 # +0x6EC7 # +0x6ECB # +0x6ECF # +0x6ED1 # +0x6ED3 # +0x6ED4 # +0x6ED5 # +0x6ED7 # +0x6EDA # +0x6EDE # +0x6EDF # +0x6EE0 # +0x6EE1 # +0x6EE2 # +0x6EE4 # +0x6EE5 # +0x6EE6 # +0x6EE8 # +0x6EE9 # +0x6EF4 # +0x6EF9 # +0x6F02 # +0x6F06 # +0x6F09 # +0x6F0F # +0x6F13 # +0x6F14 # +0x6F15 # +0x6F20 # +0x6F24 # +0x6F29 # +0x6F2A # +0x6F2B # +0x6F2D # +0x6F2F # +0x6F31 # +0x6F33 # +0x6F36 # +0x6F3E # +0x6F46 # +0x6F47 # +0x6F4B # +0x6F4D # +0x6F58 # +0x6F5C # +0x6F5E # +0x6F62 # +0x6F66 # +0x6F6D # +0x6F6E # +0x6F72 # +0x6F74 # +0x6F78 # +0x6F7A # +0x6F7C # +0x6F84 # +0x6F88 # +0x6F89 # +0x6F8C # +0x6F8D # +0x6F8E # +0x6F9C # +0x6FA1 # +0x6FA7 # +0x6FB3 # +0x6FB6 # +0x6FB9 # +0x6FC0 # +0x6FC2 # +0x6FC9 # +0x6FD1 # +0x6FD2 # +0x6FDE # +0x6FE0 # +0x6FE1 # +0x6FEE # +0x6FEF # +0x7011 # +0x701A # +0x701B # +0x7023 # +0x7035 # +0x7039 # +0x704C # +0x704F # +0x705E # +0x706B # +0x706C # +0x706D # +0x706F # +0x7070 # +0x7075 # +0x7076 # +0x7078 # +0x707C # +0x707E # +0x707F # +0x7080 # +0x7085 # +0x7089 # +0x708A # +0x708E # +0x7092 # +0x7094 # +0x7095 # +0x7096 # +0x7099 # +0x709C # +0x709D # +0x70AB # +0x70AC # +0x70AD # +0x70AE # +0x70AF # +0x70B1 # +0x70B3 # +0x70B7 # +0x70B8 # +0x70B9 # +0x70BB # +0x70BC # +0x70BD # +0x70C0 # +0x70C1 # +0x70C2 # +0x70C3 # +0x70C8 # +0x70CA # +0x70D8 # +0x70D9 # +0x70DB # +0x70DF # +0x70E4 # +0x70E6 # +0x70E7 # +0x70E8 # +0x70E9 # +0x70EB # +0x70EC # +0x70ED # +0x70EF # +0x70F7 # +0x70F9 # +0x70FD # +0x7109 # +0x710A # +0x7110 # +0x7113 # +0x7115 # +0x7116 # +0x7118 # +0x7119 # +0x711A # +0x7126 # +0x712F # +0x7130 # +0x7131 # +0x7136 # +0x7145 # +0x714A # +0x714C # +0x714E # +0x715C # +0x715E # +0x7164 # +0x7166 # +0x7167 # +0x7168 # +0x716E # +0x7172 # +0x7173 # +0x7178 # +0x717A # +0x717D # +0x7184 # +0x718A # +0x718F # +0x7194 # +0x7198 # +0x7199 # +0x719F # +0x71A0 # +0x71A8 # +0x71AC # +0x71B3 # +0x71B5 # +0x71B9 # +0x71C3 # +0x71CE # +0x71D4 # +0x71D5 # +0x71E0 # +0x71E5 # +0x71E7 # +0x71EE # +0x71F9 # +0x7206 # +0x721D # +0x7228 # +0x722A # +0x722C # +0x7230 # +0x7231 # +0x7235 # +0x7236 # +0x7237 # +0x7238 # +0x7239 # +0x723B # +0x723D # +0x723F # +0x7247 # +0x7248 # +0x724C # +0x724D # +0x7252 # +0x7256 # +0x7259 # +0x725B # +0x725D # +0x725F # +0x7261 # +0x7262 # +0x7266 # +0x7267 # +0x7269 # +0x726E # +0x726F # +0x7272 # +0x7275 # +0x7279 # +0x727A # +0x727E # +0x727F # +0x7280 # +0x7281 # +0x7284 # +0x728A # +0x728B # +0x728D # +0x728F # +0x7292 # +0x729F # +0x72AC # +0x72AD # +0x72AF # +0x72B0 # +0x72B4 # +0x72B6 # +0x72B7 # +0x72B8 # +0x72B9 # +0x72C1 # +0x72C2 # +0x72C3 # +0x72C4 # +0x72C8 # +0x72CD # +0x72CE # +0x72D0 # +0x72D2 # +0x72D7 # +0x72D9 # +0x72DE # +0x72E0 # +0x72E1 # +0x72E8 # +0x72E9 # +0x72EC # +0x72ED # +0x72EE # +0x72EF # +0x72F0 # +0x72F1 # +0x72F2 # +0x72F3 # +0x72F4 # +0x72F7 # +0x72F8 # +0x72FA # +0x72FB # +0x72FC # +0x7301 # +0x7303 # +0x730A # +0x730E # +0x7313 # +0x7315 # +0x7316 # +0x7317 # +0x731B # +0x731C # +0x731D # +0x731E # +0x7321 # +0x7322 # +0x7325 # +0x7329 # +0x732A # +0x732B # +0x732C # +0x732E # +0x7331 # +0x7334 # +0x7337 # +0x7338 # +0x7339 # +0x733E # +0x733F # +0x734D # +0x7350 # +0x7352 # +0x7357 # +0x7360 # +0x736C # +0x736D # +0x736F # +0x737E # +0x7384 # +0x7387 # +0x7389 # +0x738B # +0x738E # +0x7391 # +0x7396 # +0x739B # +0x739F # +0x73A2 # +0x73A9 # +0x73AB # +0x73AE # +0x73AF # +0x73B0 # +0x73B2 # +0x73B3 # +0x73B7 # +0x73BA # +0x73BB # +0x73C0 # +0x73C2 # +0x73C8 # +0x73C9 # +0x73CA # +0x73CD # +0x73CF # +0x73D0 # +0x73D1 # +0x73D9 # +0x73DE # +0x73E0 # +0x73E5 # +0x73E7 # +0x73E9 # +0x73ED # +0x73F2 # +0x7403 # +0x7405 # +0x7406 # +0x7409 # +0x740A # +0x740F # +0x7410 # +0x741A # +0x741B # +0x7422 # +0x7425 # +0x7426 # +0x7428 # +0x742A # +0x742C # +0x742E # +0x7430 # +0x7433 # +0x7434 # +0x7435 # +0x7436 # +0x743C # +0x7441 # +0x7455 # +0x7457 # +0x7459 # +0x745A # +0x745B # +0x745C # +0x745E # +0x745F # +0x746D # +0x7470 # +0x7476 # +0x7477 # +0x747E # +0x7480 # +0x7481 # +0x7483 # +0x7487 # +0x748B # +0x748E # +0x7490 # +0x749C # +0x749E # +0x74A7 # +0x74A8 # +0x74A9 # +0x74BA # +0x74D2 # +0x74DC # +0x74DE # +0x74E0 # +0x74E2 # +0x74E3 # +0x74E4 # +0x74E6 # +0x74EE # +0x74EF # +0x74F4 # +0x74F6 # +0x74F7 # +0x74FF # +0x7504 # +0x750D # +0x750F # +0x7511 # +0x7513 # +0x7518 # +0x7519 # +0x751A # +0x751C # +0x751F # +0x7525 # +0x7528 # +0x7529 # +0x752B # +0x752C # +0x752D # +0x752F # +0x7530 # +0x7531 # +0x7532 # +0x7533 # +0x7535 # +0x7537 # +0x7538 # +0x753A # +0x753B # +0x753E # +0x7540 # +0x7545 # +0x7548 # +0x754B # +0x754C # +0x754E # +0x754F # +0x7554 # +0x7559 # +0x755A # +0x755B # +0x755C # +0x7565 # +0x7566 # +0x756A # +0x7572 # +0x7574 # +0x7578 # +0x7579 # +0x757F # +0x7583 # +0x7586 # +0x758B # +0x758F # +0x7591 # +0x7592 # +0x7594 # +0x7596 # +0x7597 # +0x7599 # +0x759A # +0x759D # +0x759F # +0x75A0 # +0x75A1 # +0x75A3 # +0x75A4 # +0x75A5 # +0x75AB # +0x75AC # +0x75AE # +0x75AF # +0x75B0 # +0x75B1 # +0x75B2 # +0x75B3 # +0x75B4 # +0x75B5 # +0x75B8 # +0x75B9 # +0x75BC # +0x75BD # +0x75BE # +0x75C2 # +0x75C3 # +0x75C4 # +0x75C5 # +0x75C7 # +0x75C8 # +0x75C9 # +0x75CA # +0x75CD # +0x75D2 # +0x75D4 # +0x75D5 # +0x75D6 # +0x75D8 # +0x75DB # +0x75DE # +0x75E2 # +0x75E3 # +0x75E4 # +0x75E6 # +0x75E7 # +0x75E8 # +0x75EA # +0x75EB # +0x75F0 # +0x75F1 # +0x75F4 # +0x75F9 # +0x75FC # +0x75FF # +0x7600 # +0x7601 # +0x7603 # +0x7605 # +0x760A # +0x760C # +0x7610 # +0x7615 # +0x7617 # +0x7618 # +0x7619 # +0x761B # +0x761F # +0x7620 # +0x7622 # +0x7624 # +0x7625 # +0x7626 # +0x7629 # +0x762A # +0x762B # +0x762D # +0x7630 # +0x7633 # +0x7634 # +0x7635 # +0x7638 # +0x763C # +0x763E # +0x763F # +0x7640 # +0x7643 # +0x764C # +0x764D # +0x7654 # +0x7656 # +0x765C # +0x765E # +0x7663 # +0x766B # +0x766F # +0x7678 # +0x767B # +0x767D # +0x767E # +0x7682 # +0x7684 # +0x7686 # +0x7687 # +0x7688 # +0x768B # +0x768E # +0x7691 # +0x7693 # +0x7696 # +0x7699 # +0x76A4 # +0x76AE # +0x76B1 # +0x76B2 # +0x76B4 # +0x76BF # +0x76C2 # +0x76C5 # +0x76C6 # +0x76C8 # +0x76CA # +0x76CD # +0x76CE # +0x76CF # +0x76D0 # +0x76D1 # +0x76D2 # +0x76D4 # +0x76D6 # +0x76D7 # +0x76D8 # +0x76DB # +0x76DF # +0x76E5 # +0x76EE # +0x76EF # +0x76F1 # +0x76F2 # +0x76F4 # +0x76F8 # +0x76F9 # +0x76FC # +0x76FE # +0x7701 # +0x7704 # +0x7707 # +0x7708 # +0x7709 # +0x770B # +0x770D # +0x7719 # +0x771A # +0x771F # +0x7720 # +0x7722 # +0x7726 # +0x7728 # +0x7729 # +0x772D # +0x772F # +0x7735 # +0x7736 # +0x7737 # +0x7738 # +0x773A # +0x773C # +0x7740 # +0x7741 # +0x7743 # +0x7747 # +0x7750 # +0x7751 # +0x775A # +0x775B # +0x7761 # +0x7762 # +0x7763 # +0x7765 # +0x7766 # +0x7768 # +0x776B # +0x776C # +0x7779 # +0x777D # +0x777E # +0x777F # +0x7780 # +0x7784 # +0x7785 # +0x778C # +0x778D # +0x778E # +0x7791 # +0x7792 # +0x779F # +0x77A0 # +0x77A2 # +0x77A5 # +0x77A7 # +0x77A9 # +0x77AA # +0x77AC # +0x77B0 # +0x77B3 # +0x77B5 # +0x77BB # +0x77BD # +0x77BF # +0x77CD # +0x77D7 # +0x77DB # +0x77DC # +0x77E2 # +0x77E3 # +0x77E5 # +0x77E7 # +0x77E9 # +0x77EB # +0x77EC # +0x77ED # +0x77EE # +0x77F3 # +0x77F6 # +0x77F8 # +0x77FD # +0x77FE # +0x77FF # +0x7800 # +0x7801 # +0x7802 # +0x7809 # +0x780C # +0x780D # +0x7811 # +0x7812 # +0x7814 # +0x7816 # +0x7817 # +0x7818 # +0x781A # +0x781C # +0x781D # +0x781F # +0x7823 # +0x7825 # +0x7826 # +0x7827 # +0x7829 # +0x782C # +0x782D # +0x7830 # +0x7834 # +0x7837 # +0x7838 # +0x7839 # +0x783A # +0x783B # +0x783C # +0x783E # +0x7840 # +0x7845 # +0x7847 # +0x784C # +0x784E # +0x7850 # +0x7852 # +0x7855 # +0x7856 # +0x7857 # +0x785D # +0x786A # +0x786B # +0x786C # +0x786D # +0x786E # +0x7877 # +0x787C # +0x7887 # +0x7889 # +0x788C # +0x788D # +0x788E # +0x7891 # +0x7893 # +0x7897 # +0x7898 # +0x789A # +0x789B # +0x789C # +0x789F # +0x78A1 # +0x78A3 # +0x78A5 # +0x78A7 # +0x78B0 # +0x78B1 # +0x78B2 # +0x78B3 # +0x78B4 # +0x78B9 # +0x78BE # +0x78C1 # +0x78C5 # +0x78C9 # +0x78CA # +0x78CB # +0x78D0 # +0x78D4 # +0x78D5 # +0x78D9 # +0x78E8 # +0x78EC # +0x78F2 # +0x78F4 # +0x78F7 # +0x78FA # +0x7901 # +0x7905 # +0x7913 # +0x791E # +0x7924 # +0x7934 # +0x793A # +0x793B # +0x793C # +0x793E # +0x7940 # +0x7941 # +0x7946 # +0x7948 # +0x7949 # +0x7953 # +0x7956 # +0x7957 # +0x795A # +0x795B # +0x795C # +0x795D # +0x795E # +0x795F # +0x7960 # +0x7962 # +0x7965 # +0x7967 # +0x7968 # +0x796D # +0x796F # +0x7977 # +0x7978 # +0x797A # +0x7980 # +0x7981 # +0x7984 # +0x7985 # +0x798A # +0x798F # +0x799A # +0x79A7 # +0x79B3 # +0x79B9 # +0x79BA # +0x79BB # +0x79BD # +0x79BE # +0x79C0 # +0x79C1 # +0x79C3 # +0x79C6 # +0x79C9 # +0x79CB # +0x79CD # +0x79D1 # +0x79D2 # +0x79D5 # +0x79D8 # +0x79DF # +0x79E3 # +0x79E4 # +0x79E6 # +0x79E7 # +0x79E9 # +0x79EB # +0x79ED # +0x79EF # +0x79F0 # +0x79F8 # +0x79FB # +0x79FD # +0x7A00 # +0x7A02 # +0x7A03 # +0x7A06 # +0x7A0B # +0x7A0D # +0x7A0E # +0x7A14 # +0x7A17 # +0x7A1A # +0x7A1E # +0x7A20 # +0x7A23 # +0x7A33 # +0x7A37 # +0x7A39 # +0x7A3B # +0x7A3C # +0x7A3D # +0x7A3F # +0x7A46 # +0x7A51 # +0x7A57 # +0x7A70 # +0x7A74 # +0x7A76 # +0x7A77 # +0x7A78 # +0x7A79 # +0x7A7A # +0x7A7F # +0x7A80 # +0x7A81 # +0x7A83 # +0x7A84 # +0x7A86 # +0x7A88 # +0x7A8D # +0x7A91 # +0x7A92 # +0x7A95 # +0x7A96 # +0x7A97 # +0x7A98 # +0x7A9C # +0x7A9D # +0x7A9F # +0x7AA0 # +0x7AA5 # +0x7AA6 # +0x7AA8 # +0x7AAC # +0x7AAD # +0x7AB3 # +0x7ABF # +0x7ACB # +0x7AD6 # +0x7AD9 # +0x7ADE # +0x7ADF # +0x7AE0 # +0x7AE3 # +0x7AE5 # +0x7AE6 # +0x7AED # +0x7AEF # +0x7AF9 # +0x7AFA # +0x7AFD # +0x7AFF # +0x7B03 # +0x7B04 # +0x7B06 # +0x7B08 # +0x7B0A # +0x7B0B # +0x7B0F # +0x7B11 # +0x7B14 # +0x7B15 # +0x7B19 # +0x7B1B # +0x7B1E # +0x7B20 # +0x7B24 # +0x7B25 # +0x7B26 # +0x7B28 # +0x7B2A # +0x7B2B # +0x7B2C # +0x7B2E # +0x7B31 # +0x7B33 # +0x7B38 # +0x7B3A # +0x7B3C # +0x7B3E # +0x7B45 # +0x7B47 # +0x7B49 # +0x7B4B # +0x7B4C # +0x7B4F # +0x7B50 # +0x7B51 # +0x7B52 # +0x7B54 # +0x7B56 # +0x7B58 # +0x7B5A # +0x7B5B # +0x7B5D # +0x7B60 # +0x7B62 # +0x7B6E # +0x7B71 # +0x7B72 # +0x7B75 # +0x7B77 # +0x7B79 # +0x7B7B # +0x7B7E # +0x7B80 # +0x7B85 # +0x7B8D # +0x7B90 # +0x7B94 # +0x7B95 # +0x7B97 # +0x7B9C # +0x7B9D # +0x7BA1 # +0x7BA2 # +0x7BA6 # +0x7BA7 # +0x7BA8 # +0x7BA9 # +0x7BAA # +0x7BAB # +0x7BAC # +0x7BAD # +0x7BB1 # +0x7BB4 # +0x7BB8 # +0x7BC1 # +0x7BC6 # +0x7BC7 # +0x7BCC # +0x7BD1 # +0x7BD3 # +0x7BD9 # +0x7BDA # +0x7BDD # +0x7BE1 # +0x7BE5 # +0x7BE6 # +0x7BEA # +0x7BEE # +0x7BF1 # +0x7BF7 # +0x7BFC # +0x7BFE # +0x7C07 # +0x7C0B # +0x7C0C # +0x7C0F # +0x7C16 # +0x7C1F # +0x7C26 # +0x7C27 # +0x7C2A # +0x7C38 # +0x7C3F # +0x7C40 # +0x7C41 # +0x7C4D # +0x7C73 # +0x7C74 # +0x7C7B # +0x7C7C # +0x7C7D # +0x7C89 # +0x7C91 # +0x7C92 # +0x7C95 # +0x7C97 # +0x7C98 # +0x7C9C # +0x7C9D # +0x7C9E # +0x7C9F # +0x7CA2 # +0x7CA4 # +0x7CA5 # +0x7CAA # +0x7CAE # +0x7CB1 # +0x7CB2 # +0x7CB3 # +0x7CB9 # +0x7CBC # +0x7CBD # +0x7CBE # +0x7CC1 # +0x7CC5 # +0x7CC7 # +0x7CC8 # +0x7CCA # +0x7CCC # +0x7CCD # +0x7CD5 # +0x7CD6 # +0x7CD7 # +0x7CD9 # +0x7CDC # +0x7CDF # +0x7CE0 # +0x7CE8 # +0x7CEF # +0x7CF8 # +0x7CFB # +0x7D0A # +0x7D20 # +0x7D22 # +0x7D27 # +0x7D2B # +0x7D2F # +0x7D6E # +0x7D77 # +0x7DA6 # +0x7DAE # +0x7E3B # +0x7E41 # +0x7E47 # +0x7E82 # +0x7E9B # +0x7E9F # +0x7EA0 # +0x7EA1 # +0x7EA2 # +0x7EA3 # +0x7EA4 # +0x7EA5 # +0x7EA6 # +0x7EA7 # +0x7EA8 # +0x7EA9 # +0x7EAA # +0x7EAB # +0x7EAC # +0x7EAD # +0x7EAF # +0x7EB0 # +0x7EB1 # +0x7EB2 # +0x7EB3 # +0x7EB5 # +0x7EB6 # +0x7EB7 # +0x7EB8 # +0x7EB9 # +0x7EBA # +0x7EBD # +0x7EBE # +0x7EBF # +0x7EC0 # +0x7EC1 # +0x7EC2 # +0x7EC3 # +0x7EC4 # +0x7EC5 # +0x7EC6 # +0x7EC7 # +0x7EC8 # +0x7EC9 # +0x7ECA # +0x7ECB # +0x7ECC # +0x7ECD # +0x7ECE # +0x7ECF # +0x7ED0 # +0x7ED1 # +0x7ED2 # +0x7ED3 # +0x7ED4 # +0x7ED5 # +0x7ED7 # +0x7ED8 # +0x7ED9 # +0x7EDA # +0x7EDB # +0x7EDC # +0x7EDD # +0x7EDE # +0x7EDF # +0x7EE0 # +0x7EE1 # +0x7EE2 # +0x7EE3 # +0x7EE5 # +0x7EE6 # +0x7EE7 # +0x7EE8 # +0x7EE9 # +0x7EEA # +0x7EEB # +0x7EED # +0x7EEE # +0x7EEF # +0x7EF0 # +0x7EF1 # +0x7EF2 # +0x7EF3 # +0x7EF4 # +0x7EF5 # +0x7EF6 # +0x7EF7 # +0x7EF8 # +0x7EFA # +0x7EFB # +0x7EFC # +0x7EFD # +0x7EFE # +0x7EFF # +0x7F00 # +0x7F01 # +0x7F02 # +0x7F03 # +0x7F04 # +0x7F05 # +0x7F06 # +0x7F07 # +0x7F08 # +0x7F09 # +0x7F0B # +0x7F0C # +0x7F0D # +0x7F0E # +0x7F0F # +0x7F11 # +0x7F12 # +0x7F13 # +0x7F14 # +0x7F15 # +0x7F16 # +0x7F17 # +0x7F18 # +0x7F19 # +0x7F1A # +0x7F1B # +0x7F1C # +0x7F1D # +0x7F1F # +0x7F20 # +0x7F21 # +0x7F22 # +0x7F23 # +0x7F24 # +0x7F25 # +0x7F26 # +0x7F27 # +0x7F28 # +0x7F29 # +0x7F2A # +0x7F2B # +0x7F2C # +0x7F2D # +0x7F2E # +0x7F2F # +0x7F30 # +0x7F31 # +0x7F32 # +0x7F33 # +0x7F34 # +0x7F35 # +0x7F36 # +0x7F38 # +0x7F3A # +0x7F42 # +0x7F44 # +0x7F45 # +0x7F50 # +0x7F51 # +0x7F54 # +0x7F55 # +0x7F57 # +0x7F58 # +0x7F5A # +0x7F5F # +0x7F61 # +0x7F62 # +0x7F68 # +0x7F69 # +0x7F6A # +0x7F6E # +0x7F71 # +0x7F72 # +0x7F74 # +0x7F79 # +0x7F7E # +0x7F81 # +0x7F8A # +0x7F8C # +0x7F8E # +0x7F94 # +0x7F9A # +0x7F9D # +0x7F9E # +0x7F9F # +0x7FA1 # +0x7FA4 # +0x7FA7 # +0x7FAF # +0x7FB0 # +0x7FB2 # +0x7FB8 # +0x7FB9 # +0x7FBC # +0x7FBD # +0x7FBF # +0x7FC1 # +0x7FC5 # +0x7FCA # +0x7FCC # +0x7FCE # +0x7FD4 # +0x7FD5 # +0x7FD8 # +0x7FDF # +0x7FE0 # +0x7FE1 # +0x7FE5 # +0x7FE6 # +0x7FE9 # +0x7FEE # +0x7FF0 # +0x7FF1 # +0x7FF3 # +0x7FFB # +0x7FFC # +0x8000 # +0x8001 # +0x8003 # +0x8004 # +0x8005 # +0x8006 # +0x800B # +0x800C # +0x800D # +0x8010 # +0x8012 # +0x8014 # +0x8015 # +0x8016 # +0x8017 # +0x8018 # +0x8019 # +0x801C # +0x8020 # +0x8022 # +0x8025 # +0x8026 # +0x8027 # +0x8028 # +0x8029 # +0x802A # +0x8031 # +0x8033 # +0x8035 # +0x8036 # +0x8037 # +0x8038 # +0x803B # +0x803D # +0x803F # +0x8042 # +0x8043 # +0x8046 # +0x804A # +0x804B # +0x804C # +0x804D # +0x8052 # +0x8054 # +0x8058 # +0x805A # +0x8069 # +0x806A # +0x8071 # +0x807F # +0x8080 # +0x8083 # +0x8084 # +0x8086 # +0x8087 # +0x8089 # +0x808B # +0x808C # +0x8093 # +0x8096 # +0x8098 # +0x809A # +0x809B # +0x809C # +0x809D # +0x809F # +0x80A0 # +0x80A1 # +0x80A2 # +0x80A4 # +0x80A5 # +0x80A9 # +0x80AA # +0x80AB # +0x80AD # +0x80AE # +0x80AF # +0x80B1 # +0x80B2 # +0x80B4 # +0x80B7 # +0x80BA # +0x80BC # +0x80BD # +0x80BE # +0x80BF # +0x80C0 # +0x80C1 # +0x80C2 # +0x80C3 # +0x80C4 # +0x80C6 # +0x80CC # +0x80CD # +0x80CE # +0x80D6 # +0x80D7 # +0x80D9 # +0x80DA # +0x80DB # +0x80DC # +0x80DD # +0x80DE # +0x80E1 # +0x80E4 # +0x80E5 # +0x80E7 # +0x80E8 # +0x80E9 # +0x80EA # +0x80EB # +0x80EC # +0x80ED # +0x80EF # +0x80F0 # +0x80F1 # +0x80F2 # +0x80F3 # +0x80F4 # +0x80F6 # +0x80F8 # +0x80FA # +0x80FC # +0x80FD # +0x8102 # +0x8106 # +0x8109 # +0x810A # +0x810D # +0x810E # +0x810F # +0x8110 # +0x8111 # +0x8112 # +0x8113 # +0x8114 # +0x8116 # +0x8118 # +0x811A # +0x811E # +0x812C # +0x812F # +0x8131 # +0x8132 # +0x8136 # +0x8138 # +0x813E # +0x8146 # +0x8148 # +0x814A # +0x814B # +0x814C # +0x8150 # +0x8151 # +0x8153 # +0x8154 # +0x8155 # +0x8159 # +0x815A # +0x8160 # +0x8165 # +0x8167 # +0x8169 # +0x816D # +0x816E # +0x8170 # +0x8171 # +0x8174 # +0x8179 # +0x817A # +0x817B # +0x817C # +0x817D # +0x817E # +0x817F # +0x8180 # +0x8182 # +0x8188 # +0x818A # +0x818F # +0x8191 # +0x8198 # +0x819B # +0x819C # +0x819D # +0x81A3 # +0x81A6 # +0x81A8 # +0x81AA # +0x81B3 # +0x81BA # +0x81BB # +0x81C0 # +0x81C1 # +0x81C2 # +0x81C3 # +0x81C6 # +0x81CA # +0x81CC # +0x81E3 # +0x81E7 # +0x81EA # +0x81EC # +0x81ED # +0x81F3 # +0x81F4 # +0x81FB # +0x81FC # +0x81FE # +0x8200 # +0x8201 # +0x8202 # +0x8204 # +0x8205 # +0x8206 # +0x820C # +0x820D # +0x8210 # +0x8212 # +0x8214 # +0x821B # +0x821C # +0x821E # +0x821F # +0x8221 # +0x8222 # +0x8223 # +0x8228 # +0x822A # +0x822B # +0x822C # +0x822D # +0x822F # +0x8230 # +0x8231 # +0x8233 # +0x8234 # +0x8235 # +0x8236 # +0x8237 # +0x8238 # +0x8239 # +0x823B # +0x823E # +0x8244 # +0x8247 # +0x8249 # +0x824B # +0x824F # +0x8258 # +0x825A # +0x825F # +0x8268 # +0x826E # +0x826F # +0x8270 # +0x8272 # +0x8273 # +0x8274 # +0x8279 # +0x827A # +0x827D # +0x827E # +0x827F # +0x8282 # +0x8284 # +0x8288 # +0x828A # +0x828B # +0x828D # +0x828E # +0x828F # +0x8291 # +0x8292 # +0x8297 # +0x8298 # +0x8299 # +0x829C # +0x829D # +0x829F # +0x82A1 # +0x82A4 # +0x82A5 # +0x82A6 # +0x82A8 # +0x82A9 # +0x82AA # +0x82AB # +0x82AC # +0x82AD # +0x82AE # +0x82AF # +0x82B0 # +0x82B1 # +0x82B3 # +0x82B4 # +0x82B7 # +0x82B8 # +0x82B9 # +0x82BD # +0x82BE # +0x82C1 # +0x82C4 # +0x82C7 # +0x82C8 # +0x82CA # +0x82CB # +0x82CC # +0x82CD # +0x82CE # +0x82CF # +0x82D1 # +0x82D2 # +0x82D3 # +0x82D4 # +0x82D5 # +0x82D7 # +0x82D8 # +0x82DB # +0x82DC # +0x82DE # +0x82DF # +0x82E0 # +0x82E1 # +0x82E3 # +0x82E4 # +0x82E5 # +0x82E6 # +0x82EB # +0x82EF # +0x82F1 # +0x82F4 # +0x82F7 # +0x82F9 # +0x82FB # +0x8301 # +0x8302 # +0x8303 # +0x8304 # +0x8305 # +0x8306 # +0x8307 # +0x8308 # +0x8309 # +0x830C # +0x830E # +0x830F # +0x8311 # +0x8314 # +0x8315 # +0x8317 # +0x831A # +0x831B # +0x831C # +0x8327 # +0x8328 # +0x832B # +0x832C # +0x832D # +0x832F # +0x8331 # +0x8333 # +0x8334 # +0x8335 # +0x8336 # +0x8338 # +0x8339 # +0x833A # +0x833C # +0x8340 # +0x8343 # +0x8346 # +0x8347 # +0x8349 # +0x834F # +0x8350 # +0x8351 # +0x8352 # +0x8354 # +0x835A # +0x835B # +0x835C # +0x835E # +0x835F # +0x8360 # +0x8361 # +0x8363 # +0x8364 # +0x8365 # +0x8366 # +0x8367 # +0x8368 # +0x8369 # +0x836A # +0x836B # +0x836C # +0x836D # +0x836E # +0x836F # +0x8377 # +0x8378 # +0x837B # +0x837C # +0x837D # +0x8385 # +0x8386 # +0x8389 # +0x838E # +0x8392 # +0x8393 # +0x8398 # +0x839B # +0x839C # +0x839E # +0x83A0 # +0x83A8 # +0x83A9 # +0x83AA # +0x83AB # +0x83B0 # +0x83B1 # +0x83B2 # +0x83B3 # +0x83B4 # +0x83B6 # +0x83B7 # +0x83B8 # +0x83B9 # +0x83BA # +0x83BC # +0x83BD # +0x83C0 # +0x83C1 # +0x83C5 # +0x83C7 # +0x83CA # +0x83CC # +0x83CF # +0x83D4 # +0x83D6 # +0x83D8 # +0x83DC # +0x83DD # +0x83DF # +0x83E0 # +0x83E1 # +0x83E5 # +0x83E9 # +0x83EA # +0x83F0 # +0x83F1 # +0x83F2 # +0x83F8 # +0x83F9 # +0x83FD # +0x8401 # +0x8403 # +0x8404 # +0x8406 # +0x840B # +0x840C # +0x840D # +0x840E # +0x840F # +0x8411 # +0x8418 # +0x841C # +0x841D # +0x8424 # +0x8425 # +0x8426 # +0x8427 # +0x8428 # +0x8431 # +0x8438 # +0x843C # +0x843D # +0x8446 # +0x8451 # +0x8457 # +0x8459 # +0x845A # +0x845B # +0x845C # +0x8461 # +0x8463 # +0x8469 # +0x846B # +0x846C # +0x846D # +0x8471 # +0x8473 # +0x8475 # +0x8476 # +0x8478 # +0x847A # +0x8482 # +0x8487 # +0x8488 # +0x8489 # +0x848B # +0x848C # +0x848E # +0x8497 # +0x8499 # +0x849C # +0x84A1 # +0x84AF # +0x84B2 # +0x84B4 # +0x84B8 # +0x84B9 # +0x84BA # +0x84BD # +0x84BF # +0x84C1 # +0x84C4 # +0x84C9 # +0x84CA # +0x84CD # +0x84D0 # +0x84D1 # +0x84D3 # +0x84D6 # +0x84DD # +0x84DF # +0x84E0 # +0x84E3 # +0x84E5 # +0x84E6 # +0x84EC # +0x84F0 # +0x84FC # +0x84FF # +0x850C # +0x8511 # +0x8513 # +0x8517 # +0x851A # +0x851F # +0x8521 # +0x852B # +0x852C # +0x8537 # +0x8538 # +0x8539 # +0x853A # +0x853B # +0x853C # +0x853D # +0x8543 # +0x8548 # +0x8549 # +0x854A # +0x8556 # +0x8559 # +0x855E # +0x8564 # +0x8568 # +0x8572 # +0x8574 # +0x8579 # +0x857A # +0x857B # +0x857E # +0x8584 # +0x8585 # +0x8587 # +0x858F # +0x859B # +0x859C # +0x85A4 # +0x85A8 # +0x85AA # +0x85AE # +0x85AF # +0x85B0 # +0x85B7 # +0x85B9 # +0x85C1 # +0x85C9 # +0x85CF # +0x85D0 # +0x85D3 # +0x85D5 # +0x85DC # +0x85E4 # +0x85E9 # +0x85FB # +0x85FF # +0x8605 # +0x8611 # +0x8616 # +0x8627 # +0x8629 # +0x8638 # +0x863C # +0x864D # +0x864E # +0x864F # +0x8650 # +0x8651 # +0x8654 # +0x865A # +0x865E # +0x8662 # +0x866B # +0x866C # +0x866E # +0x8671 # +0x8679 # +0x867A # +0x867B # +0x867C # +0x867D # +0x867E # +0x867F # +0x8680 # +0x8681 # +0x8682 # +0x868A # +0x868B # +0x868C # +0x868D # +0x8693 # +0x8695 # +0x869C # +0x869D # +0x86A3 # +0x86A4 # +0x86A7 # +0x86A8 # +0x86A9 # +0x86AA # +0x86AC # +0x86AF # +0x86B0 # +0x86B1 # +0x86B4 # +0x86B5 # +0x86B6 # +0x86BA # +0x86C0 # +0x86C4 # +0x86C6 # +0x86C7 # +0x86C9 # +0x86CA # +0x86CB # +0x86CE # +0x86CF # +0x86D0 # +0x86D1 # +0x86D4 # +0x86D8 # +0x86D9 # +0x86DB # +0x86DE # +0x86DF # +0x86E4 # +0x86E9 # +0x86ED # +0x86EE # +0x86F0 # +0x86F1 # +0x86F2 # +0x86F3 # +0x86F4 # +0x86F8 # +0x86F9 # +0x86FE # +0x8700 # +0x8702 # +0x8703 # +0x8707 # +0x8708 # +0x8709 # +0x870A # +0x870D # +0x8712 # +0x8713 # +0x8715 # +0x8717 # +0x8718 # +0x871A # +0x871C # +0x871E # +0x8721 # +0x8722 # +0x8723 # +0x8725 # +0x8729 # +0x872E # +0x8731 # +0x8734 # +0x8737 # +0x873B # +0x873E # +0x873F # +0x8747 # +0x8748 # +0x8749 # +0x874C # +0x874E # +0x8753 # +0x8757 # +0x8759 # +0x8760 # +0x8763 # +0x8764 # +0x8765 # +0x876E # +0x8770 # +0x8774 # +0x8776 # +0x877B # +0x877C # +0x877D # +0x877E # +0x8782 # +0x8783 # +0x8785 # +0x8788 # +0x878B # +0x878D # +0x8793 # +0x8797 # +0x879F # +0x87A8 # +0x87AB # +0x87AC # +0x87AD # +0x87AF # +0x87B3 # +0x87B5 # +0x87BA # +0x87BD # +0x87C0 # +0x87C6 # +0x87CA # +0x87CB # +0x87D1 # +0x87D2 # +0x87D3 # +0x87DB # +0x87E0 # +0x87E5 # +0x87EA # +0x87EE # +0x87F9 # +0x87FE # +0x8803 # +0x880A # +0x8813 # +0x8815 # +0x8816 # +0x881B # +0x8821 # +0x8822 # +0x8832 # +0x8839 # +0x883C # +0x8840 # +0x8844 # +0x8845 # +0x884C # +0x884D # +0x8854 # +0x8857 # +0x8859 # +0x8861 # +0x8862 # +0x8863 # +0x8864 # +0x8865 # +0x8868 # +0x8869 # +0x886B # +0x886C # +0x886E # +0x8870 # +0x8872 # +0x8877 # +0x887D # +0x887E # +0x887F # +0x8881 # +0x8882 # +0x8884 # +0x8885 # +0x8888 # +0x888B # +0x888D # +0x8892 # +0x8896 # +0x889C # +0x88A2 # +0x88A4 # +0x88AB # +0x88AD # +0x88B1 # +0x88B7 # +0x88BC # +0x88C1 # +0x88C2 # +0x88C5 # +0x88C6 # +0x88C9 # +0x88CE # +0x88D2 # +0x88D4 # +0x88D5 # +0x88D8 # +0x88D9 # +0x88DF # +0x88E2 # +0x88E3 # +0x88E4 # +0x88E5 # +0x88E8 # +0x88F0 # +0x88F1 # +0x88F3 # +0x88F4 # +0x88F8 # +0x88F9 # +0x88FC # +0x88FE # +0x8902 # +0x890A # +0x8910 # +0x8912 # +0x8913 # +0x8919 # +0x891A # +0x891B # +0x8921 # +0x8925 # +0x892A # +0x892B # +0x8930 # +0x8934 # +0x8936 # +0x8941 # +0x8944 # +0x895E # +0x895F # +0x8966 # +0x897B # +0x897F # +0x8981 # +0x8983 # +0x8986 # +0x89C1 # +0x89C2 # +0x89C4 # +0x89C5 # +0x89C6 # +0x89C7 # +0x89C8 # +0x89C9 # +0x89CA # +0x89CB # +0x89CC # +0x89CE # +0x89CF # +0x89D0 # +0x89D1 # +0x89D2 # +0x89D6 # +0x89DA # +0x89DC # +0x89DE # +0x89E3 # +0x89E5 # +0x89E6 # +0x89EB # +0x89EF # +0x89F3 # +0x8A00 # +0x8A07 # +0x8A3E # +0x8A48 # +0x8A79 # +0x8A89 # +0x8A8A # +0x8A93 # +0x8B07 # +0x8B26 # +0x8B66 # +0x8B6C # +0x8BA0 # +0x8BA1 # +0x8BA2 # +0x8BA3 # +0x8BA4 # +0x8BA5 # +0x8BA6 # +0x8BA7 # +0x8BA8 # +0x8BA9 # +0x8BAA # +0x8BAB # +0x8BAD # +0x8BAE # +0x8BAF # +0x8BB0 # +0x8BB2 # +0x8BB3 # +0x8BB4 # +0x8BB5 # +0x8BB6 # +0x8BB7 # +0x8BB8 # +0x8BB9 # +0x8BBA # +0x8BBC # +0x8BBD # +0x8BBE # +0x8BBF # +0x8BC0 # +0x8BC1 # +0x8BC2 # +0x8BC3 # +0x8BC4 # +0x8BC5 # +0x8BC6 # +0x8BC8 # +0x8BC9 # +0x8BCA # +0x8BCB # +0x8BCC # +0x8BCD # +0x8BCE # +0x8BCF # +0x8BD1 # +0x8BD2 # +0x8BD3 # +0x8BD4 # +0x8BD5 # +0x8BD6 # +0x8BD7 # +0x8BD8 # +0x8BD9 # +0x8BDA # +0x8BDB # +0x8BDC # +0x8BDD # +0x8BDE # +0x8BDF # +0x8BE0 # +0x8BE1 # +0x8BE2 # +0x8BE3 # +0x8BE4 # +0x8BE5 # +0x8BE6 # +0x8BE7 # +0x8BE8 # +0x8BE9 # +0x8BEB # +0x8BEC # +0x8BED # +0x8BEE # +0x8BEF # +0x8BF0 # +0x8BF1 # +0x8BF2 # +0x8BF3 # +0x8BF4 # +0x8BF5 # +0x8BF6 # +0x8BF7 # +0x8BF8 # +0x8BF9 # +0x8BFA # +0x8BFB # +0x8BFC # +0x8BFD # +0x8BFE # +0x8BFF # +0x8C00 # +0x8C01 # +0x8C02 # +0x8C03 # +0x8C04 # +0x8C05 # +0x8C06 # +0x8C07 # +0x8C08 # +0x8C0A # +0x8C0B # +0x8C0C # +0x8C0D # +0x8C0E # +0x8C0F # +0x8C10 # +0x8C11 # +0x8C12 # +0x8C13 # +0x8C14 # +0x8C15 # +0x8C16 # +0x8C17 # +0x8C18 # +0x8C19 # +0x8C1A # +0x8C1B # +0x8C1C # +0x8C1D # +0x8C1F # +0x8C20 # +0x8C21 # +0x8C22 # +0x8C23 # +0x8C24 # +0x8C25 # +0x8C26 # +0x8C27 # +0x8C28 # +0x8C29 # +0x8C2A # +0x8C2B # +0x8C2C # +0x8C2D # +0x8C2E # +0x8C2F # +0x8C30 # +0x8C31 # +0x8C32 # +0x8C33 # +0x8C34 # +0x8C35 # +0x8C36 # +0x8C37 # +0x8C41 # +0x8C46 # +0x8C47 # +0x8C49 # +0x8C4C # +0x8C55 # +0x8C5A # +0x8C61 # +0x8C62 # +0x8C6A # +0x8C6B # +0x8C73 # +0x8C78 # +0x8C79 # +0x8C7A # +0x8C82 # +0x8C85 # +0x8C89 # +0x8C8A # +0x8C8C # +0x8C94 # +0x8C98 # +0x8D1D # +0x8D1E # +0x8D1F # +0x8D21 # +0x8D22 # +0x8D23 # +0x8D24 # +0x8D25 # +0x8D26 # +0x8D27 # +0x8D28 # +0x8D29 # +0x8D2A # +0x8D2B # +0x8D2C # +0x8D2D # +0x8D2E # +0x8D2F # +0x8D30 # +0x8D31 # +0x8D32 # +0x8D33 # +0x8D34 # +0x8D35 # +0x8D36 # +0x8D37 # +0x8D38 # +0x8D39 # +0x8D3A # +0x8D3B # +0x8D3C # +0x8D3D # +0x8D3E # +0x8D3F # +0x8D40 # +0x8D41 # +0x8D42 # +0x8D43 # +0x8D44 # +0x8D45 # +0x8D46 # +0x8D47 # +0x8D48 # +0x8D49 # +0x8D4A # +0x8D4B # +0x8D4C # +0x8D4D # +0x8D4E # +0x8D4F # +0x8D50 # +0x8D53 # +0x8D54 # +0x8D55 # +0x8D56 # +0x8D58 # +0x8D59 # +0x8D5A # +0x8D5B # +0x8D5C # +0x8D5D # +0x8D5E # +0x8D60 # +0x8D61 # +0x8D62 # +0x8D63 # +0x8D64 # +0x8D66 # +0x8D67 # +0x8D6B # +0x8D6D # +0x8D70 # +0x8D73 # +0x8D74 # +0x8D75 # +0x8D76 # +0x8D77 # +0x8D81 # +0x8D84 # +0x8D85 # +0x8D8A # +0x8D8B # +0x8D91 # +0x8D94 # +0x8D9F # +0x8DA3 # +0x8DB1 # +0x8DB3 # +0x8DB4 # +0x8DB5 # +0x8DB8 # +0x8DBA # +0x8DBC # +0x8DBE # +0x8DBF # +0x8DC3 # +0x8DC4 # +0x8DC6 # +0x8DCB # +0x8DCC # +0x8DCE # +0x8DCF # +0x8DD1 # +0x8DD6 # +0x8DD7 # +0x8DDA # +0x8DDB # +0x8DDD # +0x8DDE # +0x8DDF # +0x8DE3 # +0x8DE4 # +0x8DE8 # +0x8DEA # +0x8DEB # +0x8DEC # +0x8DEF # +0x8DF3 # +0x8DF5 # +0x8DF7 # +0x8DF8 # +0x8DF9 # +0x8DFA # +0x8DFB # +0x8DFD # +0x8E05 # +0x8E09 # +0x8E0A # +0x8E0C # +0x8E0F # +0x8E14 # +0x8E1D # +0x8E1E # +0x8E1F # +0x8E22 # +0x8E23 # +0x8E29 # +0x8E2A # +0x8E2C # +0x8E2E # +0x8E2F # +0x8E31 # +0x8E35 # +0x8E39 # +0x8E3A # +0x8E3D # +0x8E40 # +0x8E41 # +0x8E42 # +0x8E44 # +0x8E47 # +0x8E48 # +0x8E49 # +0x8E4A # +0x8E4B # +0x8E51 # +0x8E52 # +0x8E59 # +0x8E66 # +0x8E69 # +0x8E6C # +0x8E6D # +0x8E6F # +0x8E70 # +0x8E72 # +0x8E74 # +0x8E76 # +0x8E7C # +0x8E7F # +0x8E81 # +0x8E85 # +0x8E87 # +0x8E8F # +0x8E90 # +0x8E94 # +0x8E9C # +0x8E9E # +0x8EAB # +0x8EAC # +0x8EAF # +0x8EB2 # +0x8EBA # +0x8ECE # +0x8F66 # +0x8F67 # +0x8F68 # +0x8F69 # +0x8F6B # +0x8F6C # +0x8F6D # +0x8F6E # +0x8F6F # +0x8F70 # +0x8F71 # +0x8F72 # +0x8F73 # +0x8F74 # +0x8F75 # +0x8F76 # +0x8F77 # +0x8F78 # +0x8F79 # +0x8F7A # +0x8F7B # +0x8F7C # +0x8F7D # +0x8F7E # +0x8F7F # +0x8F81 # +0x8F82 # +0x8F83 # +0x8F84 # +0x8F85 # +0x8F86 # +0x8F87 # +0x8F88 # +0x8F89 # +0x8F8A # +0x8F8B # +0x8F8D # +0x8F8E # +0x8F8F # +0x8F90 # +0x8F91 # +0x8F93 # +0x8F94 # +0x8F95 # +0x8F96 # +0x8F97 # +0x8F98 # +0x8F99 # +0x8F9A # +0x8F9B # +0x8F9C # +0x8F9E # +0x8F9F # +0x8FA3 # +0x8FA8 # +0x8FA9 # +0x8FAB # +0x8FB0 # +0x8FB1 # +0x8FB6 # +0x8FB9 # +0x8FBD # +0x8FBE # +0x8FC1 # +0x8FC2 # +0x8FC4 # +0x8FC5 # +0x8FC7 # +0x8FC8 # +0x8FCE # +0x8FD0 # +0x8FD1 # +0x8FD3 # +0x8FD4 # +0x8FD5 # +0x8FD8 # +0x8FD9 # +0x8FDB # +0x8FDC # +0x8FDD # +0x8FDE # +0x8FDF # +0x8FE2 # +0x8FE4 # +0x8FE5 # +0x8FE6 # +0x8FE8 # +0x8FE9 # +0x8FEA # +0x8FEB # +0x8FED # +0x8FEE # +0x8FF0 # +0x8FF3 # +0x8FF7 # +0x8FF8 # +0x8FF9 # +0x8FFD # +0x9000 # +0x9001 # +0x9002 # +0x9003 # +0x9004 # +0x9005 # +0x9006 # +0x9009 # +0x900A # +0x900B # +0x900D # +0x900F # +0x9010 # +0x9011 # +0x9012 # +0x9014 # +0x9016 # +0x9017 # +0x901A # +0x901B # +0x901D # +0x901E # +0x901F # +0x9020 # +0x9021 # +0x9022 # +0x9026 # +0x902D # +0x902E # +0x902F # +0x9035 # +0x9036 # +0x9038 # +0x903B # +0x903C # +0x903E # +0x9041 # +0x9042 # +0x9044 # +0x9047 # +0x904D # +0x904F # +0x9050 # +0x9051 # +0x9052 # +0x9053 # +0x9057 # +0x9058 # +0x905B # +0x9062 # +0x9063 # +0x9065 # +0x9068 # +0x906D # +0x906E # +0x9074 # +0x9075 # +0x907D # +0x907F # +0x9080 # +0x9082 # +0x9083 # +0x9088 # +0x908B # +0x9091 # +0x9093 # +0x9095 # +0x9097 # +0x9099 # +0x909B # +0x909D # +0x90A1 # +0x90A2 # +0x90A3 # +0x90A6 # +0x90AA # +0x90AC # +0x90AE # +0x90AF # +0x90B0 # +0x90B1 # +0x90B3 # +0x90B4 # +0x90B5 # +0x90B6 # +0x90B8 # +0x90B9 # +0x90BA # +0x90BB # +0x90BE # +0x90C1 # +0x90C4 # +0x90C5 # +0x90C7 # +0x90CA # +0x90CE # +0x90CF # +0x90D0 # +0x90D1 # +0x90D3 # +0x90D7 # +0x90DB # +0x90DC # +0x90DD # +0x90E1 # +0x90E2 # +0x90E6 # +0x90E7 # +0x90E8 # +0x90EB # +0x90ED # +0x90EF # +0x90F4 # +0x90F8 # +0x90FD # +0x90FE # +0x9102 # +0x9104 # +0x9119 # +0x911E # +0x9122 # +0x9123 # +0x912F # +0x9131 # +0x9139 # +0x9143 # +0x9146 # +0x9149 # +0x914A # +0x914B # +0x914C # +0x914D # +0x914E # +0x914F # +0x9150 # +0x9152 # +0x9157 # +0x915A # +0x915D # +0x915E # +0x9161 # +0x9162 # +0x9163 # +0x9164 # +0x9165 # +0x9169 # +0x916A # +0x916C # +0x916E # +0x916F # +0x9170 # +0x9171 # +0x9172 # +0x9174 # +0x9175 # +0x9176 # +0x9177 # +0x9178 # +0x9179 # +0x917D # +0x917E # +0x917F # +0x9185 # +0x9187 # +0x9189 # +0x918B # +0x918C # +0x918D # +0x9190 # +0x9191 # +0x9192 # +0x919A # +0x919B # +0x91A2 # +0x91A3 # +0x91AA # +0x91AD # +0x91AE # +0x91AF # +0x91B4 # +0x91B5 # +0x91BA # +0x91C7 # +0x91C9 # +0x91CA # +0x91CC # +0x91CD # +0x91CE # +0x91CF # +0x91D1 # +0x91DC # +0x9274 # +0x928E # +0x92AE # +0x92C8 # +0x933E # +0x936A # +0x938F # +0x93CA # +0x93D6 # +0x943E # +0x946B # +0x9485 # +0x9486 # +0x9487 # +0x9488 # +0x9489 # +0x948A # +0x948B # +0x948C # +0x948D # +0x948E # +0x948F # +0x9490 # +0x9492 # +0x9493 # +0x9494 # +0x9495 # +0x9497 # +0x9499 # +0x949A # +0x949B # +0x949C # +0x949D # +0x949E # +0x949F # +0x94A0 # +0x94A1 # +0x94A2 # +0x94A3 # +0x94A4 # +0x94A5 # +0x94A6 # +0x94A7 # +0x94A8 # +0x94A9 # +0x94AA # +0x94AB # +0x94AC # +0x94AD # +0x94AE # +0x94AF # +0x94B0 # +0x94B1 # +0x94B2 # +0x94B3 # +0x94B4 # +0x94B5 # +0x94B6 # +0x94B7 # +0x94B8 # +0x94B9 # +0x94BA # +0x94BB # +0x94BC # +0x94BD # +0x94BE # +0x94BF # +0x94C0 # +0x94C1 # +0x94C2 # +0x94C3 # +0x94C4 # +0x94C5 # +0x94C6 # +0x94C8 # +0x94C9 # +0x94CA # +0x94CB # +0x94CC # +0x94CD # +0x94CE # +0x94D0 # +0x94D1 # +0x94D2 # +0x94D5 # +0x94D6 # +0x94D7 # +0x94D8 # +0x94D9 # +0x94DB # +0x94DC # +0x94DD # +0x94DE # +0x94DF # +0x94E0 # +0x94E1 # +0x94E2 # +0x94E3 # +0x94E4 # +0x94E5 # +0x94E7 # +0x94E8 # +0x94E9 # +0x94EA # +0x94EB # +0x94EC # +0x94ED # +0x94EE # +0x94EF # +0x94F0 # +0x94F1 # +0x94F2 # +0x94F3 # +0x94F4 # +0x94F5 # +0x94F6 # +0x94F7 # +0x94F8 # +0x94F9 # +0x94FA # +0x94FC # +0x94FD # +0x94FE # +0x94FF # +0x9500 # +0x9501 # +0x9502 # +0x9503 # +0x9504 # +0x9505 # +0x9506 # +0x9507 # +0x9508 # +0x9509 # +0x950A # +0x950B # +0x950C # +0x950D # +0x950E # +0x950F # +0x9510 # +0x9511 # +0x9512 # +0x9513 # +0x9514 # +0x9515 # +0x9516 # +0x9517 # +0x9518 # +0x9519 # +0x951A # +0x951B # +0x951D # +0x951E # +0x951F # +0x9521 # +0x9522 # +0x9523 # +0x9524 # +0x9525 # +0x9526 # +0x9528 # +0x9529 # +0x952A # +0x952B # +0x952C # +0x952D # +0x952E # +0x952F # +0x9530 # +0x9531 # +0x9532 # +0x9534 # +0x9535 # +0x9536 # +0x9537 # +0x9538 # +0x9539 # +0x953A # +0x953B # +0x953C # +0x953E # +0x953F # +0x9540 # +0x9541 # +0x9542 # +0x9544 # +0x9545 # +0x9546 # +0x9547 # +0x9549 # +0x954A # +0x954C # +0x954D # +0x954E # +0x954F # +0x9550 # +0x9551 # +0x9552 # +0x9553 # +0x9554 # +0x9556 # +0x9557 # +0x9558 # +0x9559 # +0x955B # +0x955C # +0x955D # +0x955E # +0x955F # +0x9561 # +0x9562 # +0x9563 # +0x9564 # +0x9565 # +0x9566 # +0x9567 # +0x9568 # +0x9569 # +0x956A # +0x956B # +0x956C # +0x956D # +0x956F # +0x9570 # +0x9571 # +0x9572 # +0x9573 # +0x9576 # +0x957F # +0x95E8 # +0x95E9 # +0x95EA # +0x95EB # +0x95ED # +0x95EE # +0x95EF # +0x95F0 # +0x95F1 # +0x95F2 # +0x95F3 # +0x95F4 # +0x95F5 # +0x95F6 # +0x95F7 # +0x95F8 # +0x95F9 # +0x95FA # +0x95FB # +0x95FC # +0x95FD # +0x95FE # +0x9600 # +0x9601 # +0x9602 # +0x9603 # +0x9604 # +0x9605 # +0x9606 # +0x9608 # +0x9609 # +0x960A # +0x960B # +0x960C # +0x960D # +0x960E # +0x960F # +0x9610 # +0x9611 # +0x9612 # +0x9614 # +0x9615 # +0x9616 # +0x9617 # +0x9619 # +0x961A # +0x961C # +0x961D # +0x961F # +0x9621 # +0x9622 # +0x962A # +0x962E # +0x9631 # +0x9632 # +0x9633 # +0x9634 # +0x9635 # +0x9636 # +0x963B # +0x963C # +0x963D # +0x963F # +0x9640 # +0x9642 # +0x9644 # +0x9645 # +0x9646 # +0x9647 # +0x9648 # +0x9649 # +0x964B # +0x964C # +0x964D # +0x9650 # +0x9654 # +0x9655 # +0x965B # +0x965F # +0x9661 # +0x9662 # +0x9664 # +0x9667 # +0x9668 # +0x9669 # +0x966A # +0x966C # +0x9672 # +0x9674 # +0x9675 # +0x9676 # +0x9677 # +0x9685 # +0x9686 # +0x9688 # +0x968B # +0x968D # +0x968F # +0x9690 # +0x9694 # +0x9697 # +0x9698 # +0x9699 # +0x969C # +0x96A7 # +0x96B0 # +0x96B3 # +0x96B6 # +0x96B9 # +0x96BC # +0x96BD # +0x96BE # +0x96C0 # +0x96C1 # +0x96C4 # +0x96C5 # +0x96C6 # +0x96C7 # +0x96C9 # +0x96CC # +0x96CD # +0x96CE # +0x96CF # +0x96D2 # +0x96D5 # +0x96E0 # +0x96E8 # +0x96E9 # +0x96EA # +0x96EF # +0x96F3 # +0x96F6 # +0x96F7 # +0x96F9 # +0x96FE # +0x9700 # +0x9701 # +0x9704 # +0x9706 # +0x9707 # +0x9708 # +0x9709 # +0x970D # +0x970E # +0x970F # +0x9713 # +0x9716 # +0x971C # +0x971E # +0x972A # +0x972D # +0x9730 # +0x9732 # +0x9738 # +0x9739 # +0x973E # +0x9752 # +0x9753 # +0x9756 # +0x9759 # +0x975B # +0x975E # +0x9760 # +0x9761 # +0x9762 # +0x9765 # +0x9769 # +0x9773 # +0x9774 # +0x9776 # +0x977C # +0x9785 # +0x978B # +0x978D # +0x9791 # +0x9792 # +0x9794 # +0x9798 # +0x97A0 # +0x97A3 # +0x97AB # +0x97AD # +0x97AF # +0x97B2 # +0x97B4 # +0x97E6 # +0x97E7 # +0x97E9 # +0x97EA # +0x97EB # +0x97EC # +0x97ED # +0x97F3 # +0x97F5 # +0x97F6 # +0x9875 # +0x9876 # +0x9877 # +0x9878 # +0x9879 # +0x987A # +0x987B # +0x987C # +0x987D # +0x987E # +0x987F # +0x9880 # +0x9881 # +0x9882 # +0x9883 # +0x9884 # +0x9885 # +0x9886 # +0x9887 # +0x9888 # +0x9889 # +0x988A # +0x988C # +0x988D # +0x988F # +0x9890 # +0x9891 # +0x9893 # +0x9894 # +0x9896 # +0x9897 # +0x9898 # +0x989A # +0x989B # +0x989C # +0x989D # +0x989E # +0x989F # +0x98A0 # +0x98A1 # +0x98A2 # +0x98A4 # +0x98A5 # +0x98A6 # +0x98A7 # +0x98CE # +0x98D1 # +0x98D2 # +0x98D3 # +0x98D5 # +0x98D8 # +0x98D9 # +0x98DA # +0x98DE # +0x98DF # +0x98E7 # +0x98E8 # +0x990D # +0x9910 # +0x992E # +0x9954 # +0x9955 # +0x9963 # +0x9965 # +0x9967 # +0x9968 # +0x9969 # +0x996A # +0x996B # +0x996C # +0x996D # +0x996E # +0x996F # +0x9970 # +0x9971 # +0x9972 # +0x9974 # +0x9975 # +0x9976 # +0x9977 # +0x997A # +0x997C # +0x997D # +0x997F # +0x9980 # +0x9981 # +0x9984 # +0x9985 # +0x9986 # +0x9987 # +0x9988 # +0x998A # +0x998B # +0x998D # +0x998F # +0x9990 # +0x9991 # +0x9992 # +0x9993 # +0x9994 # +0x9995 # +0x9996 # +0x9997 # +0x9998 # +0x9999 # +0x99A5 # +0x99A8 # +0x9A6C # +0x9A6D # +0x9A6E # +0x9A6F # +0x9A70 # +0x9A71 # +0x9A73 # +0x9A74 # +0x9A75 # +0x9A76 # +0x9A77 # +0x9A78 # +0x9A79 # +0x9A7A # +0x9A7B # +0x9A7C # +0x9A7D # +0x9A7E # +0x9A7F # +0x9A80 # +0x9A81 # +0x9A82 # +0x9A84 # +0x9A85 # +0x9A86 # +0x9A87 # +0x9A88 # +0x9A8A # +0x9A8B # +0x9A8C # +0x9A8F # +0x9A90 # +0x9A91 # +0x9A92 # +0x9A93 # +0x9A96 # +0x9A97 # +0x9A98 # +0x9A9A # +0x9A9B # +0x9A9C # +0x9A9D # +0x9A9E # +0x9A9F # +0x9AA0 # +0x9AA1 # +0x9AA2 # +0x9AA3 # +0x9AA4 # +0x9AA5 # +0x9AA7 # +0x9AA8 # +0x9AB0 # +0x9AB1 # +0x9AB6 # +0x9AB7 # +0x9AB8 # +0x9ABA # +0x9ABC # +0x9AC0 # +0x9AC1 # +0x9AC2 # +0x9AC5 # +0x9ACB # +0x9ACC # +0x9AD1 # +0x9AD3 # +0x9AD8 # +0x9ADF # +0x9AE1 # +0x9AE6 # +0x9AEB # +0x9AED # +0x9AEF # +0x9AF9 # +0x9AFB # +0x9B03 # +0x9B08 # +0x9B0F # +0x9B13 # +0x9B1F # +0x9B23 # +0x9B2F # +0x9B32 # +0x9B3B # +0x9B3C # +0x9B41 # +0x9B42 # +0x9B43 # +0x9B44 # +0x9B45 # +0x9B47 # +0x9B48 # +0x9B49 # +0x9B4D # +0x9B4F # +0x9B51 # +0x9B54 # +0x9C7C # +0x9C7F # +0x9C81 # +0x9C82 # +0x9C85 # +0x9C86 # +0x9C87 # +0x9C88 # +0x9C8B # +0x9C8D # +0x9C8E # +0x9C90 # +0x9C91 # +0x9C92 # +0x9C94 # +0x9C95 # +0x9C9A # +0x9C9B # +0x9C9C # +0x9C9E # +0x9C9F # +0x9CA0 # +0x9CA1 # +0x9CA2 # +0x9CA3 # +0x9CA4 # +0x9CA5 # +0x9CA6 # +0x9CA7 # +0x9CA8 # +0x9CA9 # +0x9CAB # +0x9CAD # +0x9CAE # +0x9CB0 # +0x9CB1 # +0x9CB2 # +0x9CB3 # +0x9CB4 # +0x9CB5 # +0x9CB6 # +0x9CB7 # +0x9CB8 # +0x9CBA # +0x9CBB # +0x9CBC # +0x9CBD # +0x9CC3 # +0x9CC4 # +0x9CC5 # +0x9CC6 # +0x9CC7 # +0x9CCA # +0x9CCB # +0x9CCC # +0x9CCD # +0x9CCE # +0x9CCF # +0x9CD0 # +0x9CD3 # +0x9CD4 # +0x9CD5 # +0x9CD6 # +0x9CD7 # +0x9CD8 # +0x9CD9 # +0x9CDC # +0x9CDD # +0x9CDE # +0x9CDF # +0x9CE2 # +0x9E1F # +0x9E20 # +0x9E21 # +0x9E22 # +0x9E23 # +0x9E25 # +0x9E26 # +0x9E28 # +0x9E29 # +0x9E2A # +0x9E2B # +0x9E2C # +0x9E2D # +0x9E2F # +0x9E31 # +0x9E32 # +0x9E33 # +0x9E35 # +0x9E36 # +0x9E37 # +0x9E38 # +0x9E39 # +0x9E3A # +0x9E3D # +0x9E3E # +0x9E3F # +0x9E41 # +0x9E42 # +0x9E43 # +0x9E44 # +0x9E45 # +0x9E46 # +0x9E47 # +0x9E48 # +0x9E49 # +0x9E4A # +0x9E4B # +0x9E4C # +0x9E4E # +0x9E4F # +0x9E51 # +0x9E55 # +0x9E57 # +0x9E58 # +0x9E5A # +0x9E5B # +0x9E5C # +0x9E5E # +0x9E63 # +0x9E64 # +0x9E66 # +0x9E67 # +0x9E68 # +0x9E69 # +0x9E6A # +0x9E6B # +0x9E6C # +0x9E6D # +0x9E70 # +0x9E71 # +0x9E73 # +0x9E7E # +0x9E7F # +0x9E82 # +0x9E87 # +0x9E88 # +0x9E8B # +0x9E92 # +0x9E93 # +0x9E9D # +0x9E9F # +0x9EA6 # +0x9EB4 # +0x9EB8 # +0x9EBB # +0x9EBD # +0x9EBE # +0x9EC4 # +0x9EC9 # +0x9ECD # +0x9ECE # +0x9ECF # +0x9ED1 # +0x9ED4 # +0x9ED8 # +0x9EDB # +0x9EDC # +0x9EDD # +0x9EDF # +0x9EE0 # +0x9EE2 # +0x9EE5 # +0x9EE7 # +0x9EE9 # +0x9EEA # +0x9EEF # +0x9EF9 # +0x9EFB # +0x9EFC # +0x9EFE # +0x9F0B # +0x9F0D # +0x9F0E # +0x9F10 # +0x9F13 # +0x9F17 # +0x9F19 # +0x9F20 # +0x9F22 # +0x9F2C # +0x9F2F # +0x9F37 # +0x9F39 # +0x9F3B # +0x9F3D # +0x9F3E # +0x9F44 # +0x9F50 # +0x9F51 # +0x9F7F # +0x9F80 # +0x9F83 # +0x9F84 # +0x9F85 # +0x9F86 # +0x9F87 # +0x9F88 # +0x9F89 # +0x9F8A # +0x9F8B # +0x9F8C # +0x9F99 # +0x9F9A # +0x9F9B # +0x9F9F # +0x9FA0 # diff --git a/fontconfig/fc-lang/zh_hk.orth b/fontconfig/fc-lang/zh_hk.orth index b4a67ebb4..5d5ef0526 100644 --- a/fontconfig/fc-lang/zh_hk.orth +++ b/fontconfig/fc-lang/zh_hk.orth @@ -1,2240 +1,2240 @@ -# -# fontconfig/fc-lang/zh_hk.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Chinese Hong Kong Supplementary Character Set (ZH-HK) -# -# Taken from the HKSCS-2001, including only the non-PUA BMP glyphs -# as encoded in ISO/IEC 10646-1:2000 -4E04 -4E1A -4E1C -4E21 -4E24 -4E28 -4E2A -4E2C -4E2F -4E36 -4E37 -4E3D -4E3F -4E49 -4E5A -4E5B -4E6A -4E78 -4E80 -4E81 -4E85 -4E87 -4E89 -4E98 -4E9A -4EA0 -4EA3 -4EB7 -4EBB -4EBC -4EBF -4ECE -4EEA -4EEB -4EEE -4EF8 -4F03 -4F17 -4F1A -4F28 -4F29 -4F32 -4F37 -4F39 -4F42 -4F45 -4F4B -4F72 -4F8A -4FA2 -4FA8 -4FAB -4FB0 -4FBD -4FC8 -4FCC -4FE4 -4FE5 -4FF0 -4FF2 -4FF9 -4FFD -5003 -5008 -502E -5034 -503B -5056 -5058 -5066 -506C -5081 -5088 -5090 -50A6 -50BC -50CD -50D0 -50D9 -50DF -50E1 -50F4 -50FC -5101 -510D -510E -512B -5156 -5160 -516A -5174 -5179 -5182 -5186 -5188 -5196 -519A -519C -51A7 -51A8 -51AB -51AE -51B2 -51B3 -51B4 -51B5 -51B8 -51C3 -51C7 -51C9 -51CF -51D1 -51D2 -51D3 -51DB -51DF -51E2 -51E4 -51ED -51F4 -51FC -51FE -5202 -5205 -520B -521F -5220 -5226 -5227 -5234 -523C -5257 -5259 -5260 -5268 -5273 -5279 -528F -5290 -5294 -529A -52A1 -52A4 -52A8 -52B5 -52B9 -52C5 -52CC -52D0 -52D1 -52E0 -52E1 -52F9 -5301 -5324 -5327 -532C -5332 -5333 -5338 -533B -5342 -534E -535D -535F -5364 -5367 -5369 -536D -5374 -537D -537E -5393 -53A0 -53A2 -53A6 -53A8 -53A9 -53AA -53AB -53AE -53B0 -53B6 -53C1 -53C2 -53C5 -53CC -53D0 -53D1 -53D2 -53D8 -53D9 -53DA -53E0 -53F6 -53F7 -53FE -5413 -5414 -5416 -541A -5421 -5423 -542F -5432 -5434 -544B -544D -5469 -546A -546D -5485 -548F -5493 -5494 -5497 -549C -549E -54A3 -54A4 -54B2 -54B4 -54B9 -54CB -54CC -54CD -54D0 -54DA -54E3 -54EF -5502 -550D -5513 -5518 -551E -5523 -5525 -5528 -552B -553F -5547 -5549 -5553 -555D -5569 -556B -5571 -5572 -5573 -5579 -5586 -5590 -55A9 -55B0 -55B4 -55B9 -55BA -55BC -55C1 -55D7 -55D8 -55DE -55EA -55EC -55F0 -55F1 -55F5 -55FB -5605 -5611 -561E -5620 -5621 -5622 -5623 -5625 -562D -5637 -5643 -564D -564F -5650 -5652 -5654 -565D -5661 -567A -567B -567C -5689 -568A -568B -5692 -569E -569F -56A1 -56A4 -56AF -56B1 -56B9 -56BF -56D6 -56E2 -56ED -56EF -56F1 -56FD -5700 -5715 -571D -5732 -573D -573F -5742 -5743 -5746 -5754 -5757 -575B -575F -5767 -577A -577E -577F -5788 -578A -578D -5790 -579C -57A1 -57A7 -57AA -57B4 -57BB -57BE -57C4 -57C8 -57D7 -57DD -57DE -57E6 -57EF -57FE -5803 -5812 -5822 -5826 -583A -5840 -5844 -5847 -585C -585F -5869 -586C -5872 -5873 -5892 -5899 -589A -58A7 -58AA -58B0 -58B5 -58B6 -58BB -58CB -58D0 -58DC -58E0 -58F0 -58F2 -58F3 -58FB -5902 -5904 -5905 -5907 -590A -5911 -591F -5932 -5934 -5965 -5975 -5989 -5994 -599A -599F -59AC -59B0 -59B7 -59B8 -59C4 -59C9 -59D9 -59EB -59EF -59F0 -59F8 -59F9 -5A02 -5A0B -5A0D -5A12 -5A1A -5A21 -5A24 -5A27 -5A2A -5A2B -5A2C -5A3D -5A45 -5A54 -5A59 -5A61 -5A63 -5A68 -5A6B -5A6E -5A71 -5A79 -5A7E -5A81 -5A82 -5A86 -5A88 -5A91 -5A96 -5A99 -5AA0 -5AA1 -5AAB -5AC3 -5ACE -5ACF -5AD3 -5AE4 -5AF0 -5AF2 -5AFA -5AFE -5B0D -5B11 -5B15 -5B1F -5B2B -5B41 -5B44 -5B46 -5B4A -5B4F -5B66 -5B68 -5B6D -5B74 -5B76 -5B7C -5B80 -5B82 -5B90 -5B96 -5B9D -5B9E -5B9F -5BAA -5BC3 -5BD5 -5BD7 -5BF3 -5BFF -5C05 -5C13 -5C14 -5C1C -5C1E -5C20 -5C23 -5C49 -5C4A -5C53 -5C5E -5C85 -5C99 -5C9A -5C9C -5C9E -5CBA -5CC1 -5CC2 -5CD1 -5CE5 -5CE9 -5CEF -5CF5 -5D10 -5D15 -5D18 -5D2C -5D2F -5D3E -5D46 -5D48 -5D56 -5D57 -5D5B -5D70 -5D74 -5D7B -5D85 -5D8B -5D8E -5DA4 -5DAB -5DB6 -5DB9 -5DC1 -5DD7 -5DDB -5DF5 -5E09 -5E0B -5E12 -5E2E -5E42 -5E48 -5E5E -5E7A -5E7F -5E83 -5E86 -5E92 -5E99 -5EBD -5ECD -5ED0 -5EF4 -5EF8 -5EF9 -5EFB -5EFC -5F0C -5F0D -5F0E -5F25 -5F3A -5F4D -5F50 -5F51 -5F5C -5F61 -5F63 -5F72 -5F7B -5F83 -5FA4 -5FA7 -5FB1 -5FBA -5FC2 -5FC4 -5FDB -5FDF -6023 -6031 -603B -604A -6052 -6075 -6077 -607E -609E -60A4 -60A7 -60B3 -60D7 -60DE -60E3 -60E7 -60E8 -60E9 -60FD -6107 -610C -6119 -6122 -6130 -613D -6142 -6150 -6159 -615C -6160 -6164 -616F -617D -6181 -6187 -6195 -6198 -6199 -619C -61B7 -61B9 -61C0 -61CF -61D0 -61D3 -61DA -61E2 -622C -6237 -6239 -624C -6268 -6282 -6285 -6290 -629D -62A4 -62A6 -62C3 -62C5 -62D5 -62DF -62E5 -6318 -632E -6331 -6335 -6337 -6364 -636C -6379 -637F -638B -63B9 -63C1 -63D1 -63DE -63E2 -63E6 -63F8 -63FB -63FC -63FE -6407 -6432 -6438 -643A -643B -645A -6471 -647C -648D -6491 -64AF -64B4 -64B6 -64C0 -64D3 -64DD -64E1 -64E5 -64E7 -64EA -650A -6511 -651E -651F -6530 -6534 -6535 -654D -655F -656B -656D -6585 -6586 -6588 -6589 -658B -65B5 -65BE -65D1 -65D4 -65E0 -65E3 -65FF -6618 -661E -6623 -6630 -6644 -6648 -664B -6653 -6657 -6663 -6667 -666B -6673 -667D -6685 -668E -6692 -669A -66A4 -66AD -66B3 -66B6 -66BF -66CD -66CE -66F1 -6702 -670C -670E -6716 -6719 -671E -6725 -6736 -6744 -6761 -6762 -6767 -676B -678F -67A0 -67A4 -67AC -67B1 -67BF -67D6 -67D7 -67F9 -67FE -6800 -6801 -6802 -6803 -6804 -680D -6810 -681B -681E -6822 -6836 -6837 -683E -6847 -684A -6855 -6856 -685D -6865 -6884 -6888 -6898 -68A6 -68B6 -68B9 -68BD -68C3 -68C5 -68CA -6900 -6901 -6902 -6903 -6909 -6918 -6919 -691A -691B -692C -6936 -693E -6943 -6946 -6955 -6961 -6964 -6967 -6972 -6973 -6980 -6985 -698A -6998 -699F -69A2 -69B2 -69C0 -69D1 -69D5 -69D6 -69E1 -69E9 -69F9 -69FA -6A03 -6A0B -6A0C -6A1A -6A1C -6A2B -6A2C -6A2D -6A33 -6A43 -6A45 -6A4C -6A52 -6A53 -6A57 -6A63 -6A65 -6A71 -6A74 -6A7A -6A82 -6A8A -6A8F -6A99 -6A9D -6AA7 -6AAB -6AB1 -6AB2 -6AB5 -6ABE -6AC8 -6AC9 -6ACA -6AD4 -6AD8 -6AF6 -6B05 -6B1D -6B35 -6B52 -6B57 -6B6F -6B74 -6B7A -6B81 -6BC1 -6BDC -6BE1 -6BEA -6BFA -6C1C -6C31 -6C35 -6C37 -6C39 -6C3A -6C3D -6C49 -6C58 -6C5A -6C6E -6C75 -6C79 -6C7F -6C9F -6CA2 -6CAA -6CAF -6CB2 -6CCB -6CCE -6CDF -6CEA -6CFF -6D02 -6D05 -6D06 -6D24 -6D26 -6D4E -6D57 -6D5B -6D5C -6D71 -6D72 -6D81 -6D8F -6D96 -6DA4 -6DA5 -6DB1 -6DB9 -6DFE -6E02 -6E04 -6E0A -6E0F -6E15 -6E18 -6E29 -6E2A -6E4F -6E50 -6E59 -6E76 -6E7C -6E86 -6E8B -6E9A -6EB5 -6EB8 -6EBB -6ED9 -6EDA -6EDB -6EDD -6EE2 -6EE8 -6EE9 -6EFA -6F04 -6F0B -6F0C -6F16 -6F17 -6F24 -6F34 -6F3D -6F44 -6F56 -6F5C -6F74 -6F79 -6F81 -6F8A -6F9D -6F9F -6FB5 -6FBB -6FBE -6FD3 -6FD9 -6FDA -6FF6 -6FF8 -7003 -701E -702C -704B -704D -7050 -7054 -705C -7067 -706C -706F -7075 -7077 -7079 -707E -707F -7081 -7089 -708B -708F -70A0 -70A3 -70A5 -70A6 -70A7 -70B9 -70BB -70BC -70BD -70C0 -70C4 -70CC -70D0 -70D5 -70D6 -70DF -70F1 -70F5 -70FE -7105 -711D -7129 -712B -712C -7133 -7134 -7135 -713B -713E -7140 -7145 -714A -714F -7151 -716B -7171 -7173 -7175 -7176 -7177 -717A -717C -717E -7188 -718C -718E -7191 -7196 -7198 -71A2 -71A3 -71AD -71B4 -71B7 -71BA -71D1 -71DD -71EB -71F5 -71F6 -7200 -7209 -720E -720F -7215 -7216 -7217 -7224 -722B -722E -7240 -7250 -7255 -7257 -725C -7266 -7282 -7287 -728F -7294 -729F -72AD -72B2 -72CD -72E2 -7302 -7304 -7310 -7328 -732A -732B -732C -732E -7338 -7339 -7341 -7348 -734F -7371 -7374 -738C -738F -7398 -739C -739E -73A7 -73AA -73BA -73C9 -73CE -73CF -73D0 -73D5 -73E1 -73E2 -73E4 -73E6 -73EF -73F3 -73F7 -73F9 -73FB -7402 -7411 -7412 -7414 -7415 -7417 -7419 -741C -741E -741F -7437 -7438 -7439 -743C -7443 -7445 -7447 -7448 -7449 -7453 -7456 -745D -7460 -7465 -7468 -746B -746C -7474 -7476 -747A -7482 -748C -748D -7499 -749B -74A4 -74B4 -74B9 -74C8 -74CC -74D0 -74D3 -74E7 -74F0 -74F1 -74F2 -74F8 -7505 -750E -7519 -751E -7534 -7535 -753B -7542 -7546 -754A -754D -7551 -7553 -7555 -7560 -7567 -756D -756E -7572 -757A -7583 -758D -758E -7592 -759E -75B1 -75B4 -75C3 -75C8 -75DC -7602 -7607 -762C -763B -7640 -764D -764E -764F -7651 -7654 -7666 -7667 -766F -7673 -7674 -7676 -767A -7690 -76A1 -76A5 -76B7 -76CC -76D6 -76D9 -770C -770E -770F -771E -7724 -7726 -772B -7740 -7743 -7758 -7772 -7777 -7778 -777A -777B -7793 -7798 -77AF -77B9 -77BE -77C3 -77C5 -77CB -77DD -77E6 -77F4 -77FE -7808 -7818 -781C -781E -7839 -783C -783D -7842 -7844 -7847 -784B -7851 -7853 -7854 -7866 -787A -7881 -7888 -788D -78AF -78B1 -78B6 -78B8 -78B9 -78C7 -78D2 -78D3 -78D7 -78D8 -78E4 -78EE -78F0 -78F1 -78F5 -7906 -792E -7932 -7933 -7934 -7936 -793B -793C -7958 -7959 -7962 -7971 -797E -7980 -7983 -7986 -7987 -7991 -7999 -799D -799F -79A5 -79A9 -79C4 -79C6 -79CC -79D4 -79E2 -79F1 -79F4 -7A06 -7A2A -7A2D -7A3A -7A3E -7A43 -7A45 -7A49 -7A65 -7A7D -7A83 -7A91 -7A93 -7AB0 -7ABB -7ABC -7AC2 -7AC3 -7AC8 -7AC9 -7ACF -7AD3 -7ADA -7ADB -7ADC -7ADD -7AE2 -7AE7 -7AE9 -7AEA -7AFE -7B0B -7B0C -7B14 -7B1F -7B27 -7B29 -7B39 -7B42 -7B43 -7B55 -7B62 -7B6C -7B6F -7B7B -7B92 -7BA2 -7BA3 -7BB2 -7BCF -7BD0 -7BEC -7BFA -7BFC -7C12 -7C15 -7C1B -7C35 -7C42 -7C44 -7C51 -7C56 -7C5D -7C6D -7C70 -7C74 -7C7B -7C7C -7C7E -7C83 -7C86 -7C8E -7C9C -7CA6 -7CA7 -7CAC -7CAE -7CB8 -7CC2 -7CC3 -7CC7 -7CC9 -7CCD -7CD3 -7CDA -7CE6 -7CED -7CF3 -7CF5 -7CF9 -7CFC -7D25 -7D4D -7D5A -7D5D -7D89 -7D8B -7D97 -7DA4 -7DA8 -7DAB -7DB3 -7DCD -7DCF -7DD0 -7DD3 -7DD4 -7DDC -7DE4 -7DE5 -7DF5 -7DFD -7DFE -7E07 -7E27 -7E5B -7E65 -7E67 -7E6C -7E6E -7E7F -7E8E -7E92 -7E9F -7EA4 -7EAC -7EBA -7EC7 -7ECF -7EDF -7F06 -7F37 -7F40 -7F41 -7F47 -7F49 -7F4E -7F52 -7F53 -7F71 -7F78 -7F8F -7F93 -7F97 -7FA3 -7FAE -7FB4 -7FDD -7FE7 -7FFA -8002 -8008 -801D -8020 -8025 -802E -802F -8031 -803B -803C -8054 -805B -8061 -8062 -8063 -8066 -8080 -809F -80A7 -80B6 -80B7 -80BC -80BD -80C6 -80E9 -80EC -80F6 -8103 -8107 -8109 -810C -810E -8112 -8114 -8117 -811A -812A -8132 -8134 -8137 -8142 -8148 -8156 -8159 -815A -816D -817C -8184 -8193 -81A5 -81AA -81B6 -81C1 -81C8 -81E4 -81EF -81F6 -8218 -821A -8226 -8229 -822D -823E -8254 -8262 -8265 -8276 -8279 -827A -827B -8287 -82A6 -82AA -82BF -82C4 -82CA -82CF -82D0 -82D8 -82E2 -82EE -82F7 -82F8 -82FC -82FD -82FF -830B -8318 -831A -831D -833D -8357 -8362 -8363 -8366 -836F -8385 -8391 -839C -83AC -83B9 -83BE -83CD -83D3 -83ED -8405 -8414 -8416 -8418 -841C -8420 -8421 -8424 -8426 -842E -843E -8448 -844A -8453 -8455 -8458 -845C -8462 -8464 -8471 -8472 -847F -8480 -8488 -8492 -8493 -8496 -84A3 -84AD -84BD -84BE -84DA -84DE -84E1 -84E2 -84E4 -84E5 -84F8 -8503 -8505 -8510 -8533 -8534 -8538 -8542 -854B -854C -8552 -855A -855F -856F -8570 -8573 -8597 -85C1 -85D6 -85E0 -85EE -85FC -8602 -860D -860F -8610 -8614 -8616 -8628 -862F -8642 -8645 -866C -8672 -867E -8692 -86A0 -86AD -86B2 -86EF -8770 -8771 -877D -8786 -878B -878C -87A5 -87A9 -87B1 -87C1 -87CE -87D6 -87DA -87EE -87F5 -8804 -880F -8818 -8827 -882D -8842 -8845 -8846 -884F -885E -8860 -8864 -8865 -886E -8884 -8887 -888F -8890 -889C -88A0 -88AE -88B4 -88B5 -88BF -88C5 -88C7 -88CF -88E6 -88F5 -88FF -8900 -8924 -8943 -8947 -894D -8954 -8965 -8977 -8980 -8987 -8989 -898A -8991 -8994 -89A5 -89A7 -89A9 -89BC -89C1 -89C6 -89E7 -8A1C -8A29 -8A2B -8A38 -8A3D -8A49 -8A67 -8A7E -8A90 -8A94 -8A9C -8AA9 -8AAF -8AB4 -8ADA -8AEA -8B0C -8B1F -8B2D -8B3F -8B43 -8B4C -8B4D -8B5E -8B62 -8B69 -8B81 -8B83 -8B90 -8B9B -8BA0 -8BBE -8BE2 -8C51 -8C9B -8C9F -8CAD -8CCD -8CD4 -8CD6 -8CDB -8CE9 -8CEB -8CF2 -8CF7 -8D03 -8D0B -8D0C -8D11 -8D12 -8D18 -8D1C -8D1D -8D7A -8D82 -8DA6 -8DA9 -8DC0 -8DC3 -8DD4 -8E01 -8E0E -8E28 -8E2A -8E2D -8E3A -8E46 -8E4F -8E68 -8E71 -8E75 -8E77 -8E7E -8E80 -8EA7 -8EAD -8EB0 -8EB6 -8EB9 -8EBC -8EC3 -8ECE -8EDA -8EE2 -8EE4 -8EED -8EF2 -8F19 -8F2D -8F30 -8F41 -8F4A -8F5C -8F66 -8F67 -8F6E -8F93 -8FA0 -8FA5 -8FA7 -8FB3 -8FB5 -8FB6 -8FB7 -8FB8 -8FB9 -8FBA -8FBB -8FBC -8FBE -8FC1 -8FCA -8FCC -8FCF -8FD0 -8FDA -8FF9 -9008 -9012 -9033 -9037 -904C -9056 -9061 -9064 -906C -90A8 -90AE -90BB -90C4 -9151 -9159 -915C -915E -9167 -9170 -9176 -917C -918C -918E -91A9 -91B6 -91BB -91C4 -91D6 -91DF -91E5 -91F6 -91FA -91FE -9208 -920E -9213 -9221 -9228 -922A -922B -9235 -923C -9241 -9244 -9255 -9258 -925D -925F -9262 -926B -926E -9277 -9281 -9284 -9289 -928F -92AE -92B1 -92B9 -92BA -92BE -92BF -92D4 -92DB -92E3 -92E5 -92EB -92EC -92F2 -92F3 -92F4 -92F6 -92FD -9303 -9307 -932C -9330 -9331 -9340 -9341 -9342 -9343 -9344 -9345 -9348 -935F -9362 -9366 -9368 -9369 -936B -936E -9373 -9374 -9378 -937D -9381 -9384 -9385 -9386 -9387 -9390 -939C -93A0 -93AD -93B8 -93BB -93BD -93BF -93C6 -93CB -93D3 -93DB -93E0 -93F0 -93F1 -93F3 -93F4 -9401 -9404 -9408 -9417 -941B -941D -9424 -9425 -9426 -9427 -942D -943E -9442 -9443 -944D -9454 -9458 -945B -9465 -9467 -946C -9479 -947B -9485 -949F -94A2 -94C1 -94C3 -94DC -94F6 -952D -9547 -9578 -957F -9585 -9596 -9597 -9599 -95A0 -95A2 -95A6 -95A7 -95AA -95E8 -95F4 -961D -9633 -9638 -9641 -9645 -9656 -9669 -967B -9681 -968F -9696 -96A3 -96A5 -96B6 -96BD -96F4 -9703 -971B -9721 -9731 -9736 -9740 -9741 -9751 -9755 -9757 -975D -975F -976D -9771 -9787 -9789 -979B -979F -97B1 -97B2 -97B4 -97B8 -97BA -97BD -97BE -97C0 -97C2 -97C8 -97D2 -97E0 -97E6 -97EE -97F2 -97F5 -9814 -9815 -981F -9823 -982E -9833 -9834 -9847 -984B -9866 -9868 -986C -9875 -98B4 -98B7 -98B9 -98C3 -98C7 -98C8 -98CA -98CE -98DC -98DE -98E0 -98E1 -98E6 -98EC -98F1 -98F5 -990E -9919 -991C -9937 -9938 -9939 -993B -9940 -9942 -994A -994D -995D -9962 -9963 -999B -99A4 -99AA -99B8 -99BC -99C4 -99C5 -99DA -99E0 -99E1 -99E6 -99F5 -9A0C -9A10 -9A1F -9A21 -9A26 -9A2F -9A3B -9A3C -9A58 -9A5C -9A63 -9A6C -9A8F -9AB2 -9AB6 -9ABA -9ABD -9AD7 -9AE0 -9AE2 -9AF4 -9AFF -9B02 -9B09 -9B0F -9B14 -9B2A -9B2D -9B34 -9B39 -9B40 -9B50 -9B69 -9B7F -9B81 -9B83 -9B8B -9B8D -9B8E -9B8F -9B97 -9B9D -9B9F -9BB0 -9BCF -9BDD -9BE9 -9BED -9BF1 -9BF4 -9BFF -9C02 -9C0A -9C0C -9C10 -9C15 -9C1B -9C1F -9C20 -9C26 -9C2F -9C35 -9C3A -9C45 -9C4F -9C53 -9C5D -9C72 -9C7B -9C7C -9D02 -9D0C -9D16 -9D21 -9D34 -9D39 -9D44 -9D49 -9D4E -9D50 -9D5E -9D6D -9D6E -9D7C -9D7E -9D83 -9D93 -9DA5 -9DAB -9DBD -9DC0 -9DC4 -9DC9 -9DD4 -9DFC -9E0A -9E0C -9E0E -9E18 -9E1C -9E1F -9E7B -9E81 -9E84 -9E85 -9E90 -9E95 -9E96 -9E98 -9E9E -9EA2 -9EA6 -9EA8 -9EAA -9EAB -9EAC -9EAF -9EB1 -9EBD -9EBF -9EC1 -9EC4 -9EC6 -9EC7 -9EE2 -9EF1 -9EF8 -9EFE -9F02 -9F08 -9F17 -9F26 -9F27 -9F39 -9F44 -9F45 -9F50 -9F53 -9F5A -9F62 -9F69 -9F7F -9F8E -9F99 -9F9F -9FA5 -20547 +# +# fontconfig/fc-lang/zh_hk.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese Hong Kong Supplementary Character Set (ZH-HK) +# +# Taken from the HKSCS-2001, including only the non-PUA BMP glyphs +# as encoded in ISO/IEC 10646-1:2000 +4E04 +4E1A +4E1C +4E21 +4E24 +4E28 +4E2A +4E2C +4E2F +4E36 +4E37 +4E3D +4E3F +4E49 +4E5A +4E5B +4E6A +4E78 +4E80 +4E81 +4E85 +4E87 +4E89 +4E98 +4E9A +4EA0 +4EA3 +4EB7 +4EBB +4EBC +4EBF +4ECE +4EEA +4EEB +4EEE +4EF8 +4F03 +4F17 +4F1A +4F28 +4F29 +4F32 +4F37 +4F39 +4F42 +4F45 +4F4B +4F72 +4F8A +4FA2 +4FA8 +4FAB +4FB0 +4FBD +4FC8 +4FCC +4FE4 +4FE5 +4FF0 +4FF2 +4FF9 +4FFD +5003 +5008 +502E +5034 +503B +5056 +5058 +5066 +506C +5081 +5088 +5090 +50A6 +50BC +50CD +50D0 +50D9 +50DF +50E1 +50F4 +50FC +5101 +510D +510E +512B +5156 +5160 +516A +5174 +5179 +5182 +5186 +5188 +5196 +519A +519C +51A7 +51A8 +51AB +51AE +51B2 +51B3 +51B4 +51B5 +51B8 +51C3 +51C7 +51C9 +51CF +51D1 +51D2 +51D3 +51DB +51DF +51E2 +51E4 +51ED +51F4 +51FC +51FE +5202 +5205 +520B +521F +5220 +5226 +5227 +5234 +523C +5257 +5259 +5260 +5268 +5273 +5279 +528F +5290 +5294 +529A +52A1 +52A4 +52A8 +52B5 +52B9 +52C5 +52CC +52D0 +52D1 +52E0 +52E1 +52F9 +5301 +5324 +5327 +532C +5332 +5333 +5338 +533B +5342 +534E +535D +535F +5364 +5367 +5369 +536D +5374 +537D +537E +5393 +53A0 +53A2 +53A6 +53A8 +53A9 +53AA +53AB +53AE +53B0 +53B6 +53C1 +53C2 +53C5 +53CC +53D0 +53D1 +53D2 +53D8 +53D9 +53DA +53E0 +53F6 +53F7 +53FE +5413 +5414 +5416 +541A +5421 +5423 +542F +5432 +5434 +544B +544D +5469 +546A +546D +5485 +548F +5493 +5494 +5497 +549C +549E +54A3 +54A4 +54B2 +54B4 +54B9 +54CB +54CC +54CD +54D0 +54DA +54E3 +54EF +5502 +550D +5513 +5518 +551E +5523 +5525 +5528 +552B +553F +5547 +5549 +5553 +555D +5569 +556B +5571 +5572 +5573 +5579 +5586 +5590 +55A9 +55B0 +55B4 +55B9 +55BA +55BC +55C1 +55D7 +55D8 +55DE +55EA +55EC +55F0 +55F1 +55F5 +55FB +5605 +5611 +561E +5620 +5621 +5622 +5623 +5625 +562D +5637 +5643 +564D +564F +5650 +5652 +5654 +565D +5661 +567A +567B +567C +5689 +568A +568B +5692 +569E +569F +56A1 +56A4 +56AF +56B1 +56B9 +56BF +56D6 +56E2 +56ED +56EF +56F1 +56FD +5700 +5715 +571D +5732 +573D +573F +5742 +5743 +5746 +5754 +5757 +575B +575F +5767 +577A +577E +577F +5788 +578A +578D +5790 +579C +57A1 +57A7 +57AA +57B4 +57BB +57BE +57C4 +57C8 +57D7 +57DD +57DE +57E6 +57EF +57FE +5803 +5812 +5822 +5826 +583A +5840 +5844 +5847 +585C +585F +5869 +586C +5872 +5873 +5892 +5899 +589A +58A7 +58AA +58B0 +58B5 +58B6 +58BB +58CB +58D0 +58DC +58E0 +58F0 +58F2 +58F3 +58FB +5902 +5904 +5905 +5907 +590A +5911 +591F +5932 +5934 +5965 +5975 +5989 +5994 +599A +599F +59AC +59B0 +59B7 +59B8 +59C4 +59C9 +59D9 +59EB +59EF +59F0 +59F8 +59F9 +5A02 +5A0B +5A0D +5A12 +5A1A +5A21 +5A24 +5A27 +5A2A +5A2B +5A2C +5A3D +5A45 +5A54 +5A59 +5A61 +5A63 +5A68 +5A6B +5A6E +5A71 +5A79 +5A7E +5A81 +5A82 +5A86 +5A88 +5A91 +5A96 +5A99 +5AA0 +5AA1 +5AAB +5AC3 +5ACE +5ACF +5AD3 +5AE4 +5AF0 +5AF2 +5AFA +5AFE +5B0D +5B11 +5B15 +5B1F +5B2B +5B41 +5B44 +5B46 +5B4A +5B4F +5B66 +5B68 +5B6D +5B74 +5B76 +5B7C +5B80 +5B82 +5B90 +5B96 +5B9D +5B9E +5B9F +5BAA +5BC3 +5BD5 +5BD7 +5BF3 +5BFF +5C05 +5C13 +5C14 +5C1C +5C1E +5C20 +5C23 +5C49 +5C4A +5C53 +5C5E +5C85 +5C99 +5C9A +5C9C +5C9E +5CBA +5CC1 +5CC2 +5CD1 +5CE5 +5CE9 +5CEF +5CF5 +5D10 +5D15 +5D18 +5D2C +5D2F +5D3E +5D46 +5D48 +5D56 +5D57 +5D5B +5D70 +5D74 +5D7B +5D85 +5D8B +5D8E +5DA4 +5DAB +5DB6 +5DB9 +5DC1 +5DD7 +5DDB +5DF5 +5E09 +5E0B +5E12 +5E2E +5E42 +5E48 +5E5E +5E7A +5E7F +5E83 +5E86 +5E92 +5E99 +5EBD +5ECD +5ED0 +5EF4 +5EF8 +5EF9 +5EFB +5EFC +5F0C +5F0D +5F0E +5F25 +5F3A +5F4D +5F50 +5F51 +5F5C +5F61 +5F63 +5F72 +5F7B +5F83 +5FA4 +5FA7 +5FB1 +5FBA +5FC2 +5FC4 +5FDB +5FDF +6023 +6031 +603B +604A +6052 +6075 +6077 +607E +609E +60A4 +60A7 +60B3 +60D7 +60DE +60E3 +60E7 +60E8 +60E9 +60FD +6107 +610C +6119 +6122 +6130 +613D +6142 +6150 +6159 +615C +6160 +6164 +616F +617D +6181 +6187 +6195 +6198 +6199 +619C +61B7 +61B9 +61C0 +61CF +61D0 +61D3 +61DA +61E2 +622C +6237 +6239 +624C +6268 +6282 +6285 +6290 +629D +62A4 +62A6 +62C3 +62C5 +62D5 +62DF +62E5 +6318 +632E +6331 +6335 +6337 +6364 +636C +6379 +637F +638B +63B9 +63C1 +63D1 +63DE +63E2 +63E6 +63F8 +63FB +63FC +63FE +6407 +6432 +6438 +643A +643B +645A +6471 +647C +648D +6491 +64AF +64B4 +64B6 +64C0 +64D3 +64DD +64E1 +64E5 +64E7 +64EA +650A +6511 +651E +651F +6530 +6534 +6535 +654D +655F +656B +656D +6585 +6586 +6588 +6589 +658B +65B5 +65BE +65D1 +65D4 +65E0 +65E3 +65FF +6618 +661E +6623 +6630 +6644 +6648 +664B +6653 +6657 +6663 +6667 +666B +6673 +667D +6685 +668E +6692 +669A +66A4 +66AD +66B3 +66B6 +66BF +66CD +66CE +66F1 +6702 +670C +670E +6716 +6719 +671E +6725 +6736 +6744 +6761 +6762 +6767 +676B +678F +67A0 +67A4 +67AC +67B1 +67BF +67D6 +67D7 +67F9 +67FE +6800 +6801 +6802 +6803 +6804 +680D +6810 +681B +681E +6822 +6836 +6837 +683E +6847 +684A +6855 +6856 +685D +6865 +6884 +6888 +6898 +68A6 +68B6 +68B9 +68BD +68C3 +68C5 +68CA +6900 +6901 +6902 +6903 +6909 +6918 +6919 +691A +691B +692C +6936 +693E +6943 +6946 +6955 +6961 +6964 +6967 +6972 +6973 +6980 +6985 +698A +6998 +699F +69A2 +69B2 +69C0 +69D1 +69D5 +69D6 +69E1 +69E9 +69F9 +69FA +6A03 +6A0B +6A0C +6A1A +6A1C +6A2B +6A2C +6A2D +6A33 +6A43 +6A45 +6A4C +6A52 +6A53 +6A57 +6A63 +6A65 +6A71 +6A74 +6A7A +6A82 +6A8A +6A8F +6A99 +6A9D +6AA7 +6AAB +6AB1 +6AB2 +6AB5 +6ABE +6AC8 +6AC9 +6ACA +6AD4 +6AD8 +6AF6 +6B05 +6B1D +6B35 +6B52 +6B57 +6B6F +6B74 +6B7A +6B81 +6BC1 +6BDC +6BE1 +6BEA +6BFA +6C1C +6C31 +6C35 +6C37 +6C39 +6C3A +6C3D +6C49 +6C58 +6C5A +6C6E +6C75 +6C79 +6C7F +6C9F +6CA2 +6CAA +6CAF +6CB2 +6CCB +6CCE +6CDF +6CEA +6CFF +6D02 +6D05 +6D06 +6D24 +6D26 +6D4E +6D57 +6D5B +6D5C +6D71 +6D72 +6D81 +6D8F +6D96 +6DA4 +6DA5 +6DB1 +6DB9 +6DFE +6E02 +6E04 +6E0A +6E0F +6E15 +6E18 +6E29 +6E2A +6E4F +6E50 +6E59 +6E76 +6E7C +6E86 +6E8B +6E9A +6EB5 +6EB8 +6EBB +6ED9 +6EDA +6EDB +6EDD +6EE2 +6EE8 +6EE9 +6EFA +6F04 +6F0B +6F0C +6F16 +6F17 +6F24 +6F34 +6F3D +6F44 +6F56 +6F5C +6F74 +6F79 +6F81 +6F8A +6F9D +6F9F +6FB5 +6FBB +6FBE +6FD3 +6FD9 +6FDA +6FF6 +6FF8 +7003 +701E +702C +704B +704D +7050 +7054 +705C +7067 +706C +706F +7075 +7077 +7079 +707E +707F +7081 +7089 +708B +708F +70A0 +70A3 +70A5 +70A6 +70A7 +70B9 +70BB +70BC +70BD +70C0 +70C4 +70CC +70D0 +70D5 +70D6 +70DF +70F1 +70F5 +70FE +7105 +711D +7129 +712B +712C +7133 +7134 +7135 +713B +713E +7140 +7145 +714A +714F +7151 +716B +7171 +7173 +7175 +7176 +7177 +717A +717C +717E +7188 +718C +718E +7191 +7196 +7198 +71A2 +71A3 +71AD +71B4 +71B7 +71BA +71D1 +71DD +71EB +71F5 +71F6 +7200 +7209 +720E +720F +7215 +7216 +7217 +7224 +722B +722E +7240 +7250 +7255 +7257 +725C +7266 +7282 +7287 +728F +7294 +729F +72AD +72B2 +72CD +72E2 +7302 +7304 +7310 +7328 +732A +732B +732C +732E +7338 +7339 +7341 +7348 +734F +7371 +7374 +738C +738F +7398 +739C +739E +73A7 +73AA +73BA +73C9 +73CE +73CF +73D0 +73D5 +73E1 +73E2 +73E4 +73E6 +73EF +73F3 +73F7 +73F9 +73FB +7402 +7411 +7412 +7414 +7415 +7417 +7419 +741C +741E +741F +7437 +7438 +7439 +743C +7443 +7445 +7447 +7448 +7449 +7453 +7456 +745D +7460 +7465 +7468 +746B +746C +7474 +7476 +747A +7482 +748C +748D +7499 +749B +74A4 +74B4 +74B9 +74C8 +74CC +74D0 +74D3 +74E7 +74F0 +74F1 +74F2 +74F8 +7505 +750E +7519 +751E +7534 +7535 +753B +7542 +7546 +754A +754D +7551 +7553 +7555 +7560 +7567 +756D +756E +7572 +757A +7583 +758D +758E +7592 +759E +75B1 +75B4 +75C3 +75C8 +75DC +7602 +7607 +762C +763B +7640 +764D +764E +764F +7651 +7654 +7666 +7667 +766F +7673 +7674 +7676 +767A +7690 +76A1 +76A5 +76B7 +76CC +76D6 +76D9 +770C +770E +770F +771E +7724 +7726 +772B +7740 +7743 +7758 +7772 +7777 +7778 +777A +777B +7793 +7798 +77AF +77B9 +77BE +77C3 +77C5 +77CB +77DD +77E6 +77F4 +77FE +7808 +7818 +781C +781E +7839 +783C +783D +7842 +7844 +7847 +784B +7851 +7853 +7854 +7866 +787A +7881 +7888 +788D +78AF +78B1 +78B6 +78B8 +78B9 +78C7 +78D2 +78D3 +78D7 +78D8 +78E4 +78EE +78F0 +78F1 +78F5 +7906 +792E +7932 +7933 +7934 +7936 +793B +793C +7958 +7959 +7962 +7971 +797E +7980 +7983 +7986 +7987 +7991 +7999 +799D +799F +79A5 +79A9 +79C4 +79C6 +79CC +79D4 +79E2 +79F1 +79F4 +7A06 +7A2A +7A2D +7A3A +7A3E +7A43 +7A45 +7A49 +7A65 +7A7D +7A83 +7A91 +7A93 +7AB0 +7ABB +7ABC +7AC2 +7AC3 +7AC8 +7AC9 +7ACF +7AD3 +7ADA +7ADB +7ADC +7ADD +7AE2 +7AE7 +7AE9 +7AEA +7AFE +7B0B +7B0C +7B14 +7B1F +7B27 +7B29 +7B39 +7B42 +7B43 +7B55 +7B62 +7B6C +7B6F +7B7B +7B92 +7BA2 +7BA3 +7BB2 +7BCF +7BD0 +7BEC +7BFA +7BFC +7C12 +7C15 +7C1B +7C35 +7C42 +7C44 +7C51 +7C56 +7C5D +7C6D +7C70 +7C74 +7C7B +7C7C +7C7E +7C83 +7C86 +7C8E +7C9C +7CA6 +7CA7 +7CAC +7CAE +7CB8 +7CC2 +7CC3 +7CC7 +7CC9 +7CCD +7CD3 +7CDA +7CE6 +7CED +7CF3 +7CF5 +7CF9 +7CFC +7D25 +7D4D +7D5A +7D5D +7D89 +7D8B +7D97 +7DA4 +7DA8 +7DAB +7DB3 +7DCD +7DCF +7DD0 +7DD3 +7DD4 +7DDC +7DE4 +7DE5 +7DF5 +7DFD +7DFE +7E07 +7E27 +7E5B +7E65 +7E67 +7E6C +7E6E +7E7F +7E8E +7E92 +7E9F +7EA4 +7EAC +7EBA +7EC7 +7ECF +7EDF +7F06 +7F37 +7F40 +7F41 +7F47 +7F49 +7F4E +7F52 +7F53 +7F71 +7F78 +7F8F +7F93 +7F97 +7FA3 +7FAE +7FB4 +7FDD +7FE7 +7FFA +8002 +8008 +801D +8020 +8025 +802E +802F +8031 +803B +803C +8054 +805B +8061 +8062 +8063 +8066 +8080 +809F +80A7 +80B6 +80B7 +80BC +80BD +80C6 +80E9 +80EC +80F6 +8103 +8107 +8109 +810C +810E +8112 +8114 +8117 +811A +812A +8132 +8134 +8137 +8142 +8148 +8156 +8159 +815A +816D +817C +8184 +8193 +81A5 +81AA +81B6 +81C1 +81C8 +81E4 +81EF +81F6 +8218 +821A +8226 +8229 +822D +823E +8254 +8262 +8265 +8276 +8279 +827A +827B +8287 +82A6 +82AA +82BF +82C4 +82CA +82CF +82D0 +82D8 +82E2 +82EE +82F7 +82F8 +82FC +82FD +82FF +830B +8318 +831A +831D +833D +8357 +8362 +8363 +8366 +836F +8385 +8391 +839C +83AC +83B9 +83BE +83CD +83D3 +83ED +8405 +8414 +8416 +8418 +841C +8420 +8421 +8424 +8426 +842E +843E +8448 +844A +8453 +8455 +8458 +845C +8462 +8464 +8471 +8472 +847F +8480 +8488 +8492 +8493 +8496 +84A3 +84AD +84BD +84BE +84DA +84DE +84E1 +84E2 +84E4 +84E5 +84F8 +8503 +8505 +8510 +8533 +8534 +8538 +8542 +854B +854C +8552 +855A +855F +856F +8570 +8573 +8597 +85C1 +85D6 +85E0 +85EE +85FC +8602 +860D +860F +8610 +8614 +8616 +8628 +862F +8642 +8645 +866C +8672 +867E +8692 +86A0 +86AD +86B2 +86EF +8770 +8771 +877D +8786 +878B +878C +87A5 +87A9 +87B1 +87C1 +87CE +87D6 +87DA +87EE +87F5 +8804 +880F +8818 +8827 +882D +8842 +8845 +8846 +884F +885E +8860 +8864 +8865 +886E +8884 +8887 +888F +8890 +889C +88A0 +88AE +88B4 +88B5 +88BF +88C5 +88C7 +88CF +88E6 +88F5 +88FF +8900 +8924 +8943 +8947 +894D +8954 +8965 +8977 +8980 +8987 +8989 +898A +8991 +8994 +89A5 +89A7 +89A9 +89BC +89C1 +89C6 +89E7 +8A1C +8A29 +8A2B +8A38 +8A3D +8A49 +8A67 +8A7E +8A90 +8A94 +8A9C +8AA9 +8AAF +8AB4 +8ADA +8AEA +8B0C +8B1F +8B2D +8B3F +8B43 +8B4C +8B4D +8B5E +8B62 +8B69 +8B81 +8B83 +8B90 +8B9B +8BA0 +8BBE +8BE2 +8C51 +8C9B +8C9F +8CAD +8CCD +8CD4 +8CD6 +8CDB +8CE9 +8CEB +8CF2 +8CF7 +8D03 +8D0B +8D0C +8D11 +8D12 +8D18 +8D1C +8D1D +8D7A +8D82 +8DA6 +8DA9 +8DC0 +8DC3 +8DD4 +8E01 +8E0E +8E28 +8E2A +8E2D +8E3A +8E46 +8E4F +8E68 +8E71 +8E75 +8E77 +8E7E +8E80 +8EA7 +8EAD +8EB0 +8EB6 +8EB9 +8EBC +8EC3 +8ECE +8EDA +8EE2 +8EE4 +8EED +8EF2 +8F19 +8F2D +8F30 +8F41 +8F4A +8F5C +8F66 +8F67 +8F6E +8F93 +8FA0 +8FA5 +8FA7 +8FB3 +8FB5 +8FB6 +8FB7 +8FB8 +8FB9 +8FBA +8FBB +8FBC +8FBE +8FC1 +8FCA +8FCC +8FCF +8FD0 +8FDA +8FF9 +9008 +9012 +9033 +9037 +904C +9056 +9061 +9064 +906C +90A8 +90AE +90BB +90C4 +9151 +9159 +915C +915E +9167 +9170 +9176 +917C +918C +918E +91A9 +91B6 +91BB +91C4 +91D6 +91DF +91E5 +91F6 +91FA +91FE +9208 +920E +9213 +9221 +9228 +922A +922B +9235 +923C +9241 +9244 +9255 +9258 +925D +925F +9262 +926B +926E +9277 +9281 +9284 +9289 +928F +92AE +92B1 +92B9 +92BA +92BE +92BF +92D4 +92DB +92E3 +92E5 +92EB +92EC +92F2 +92F3 +92F4 +92F6 +92FD +9303 +9307 +932C +9330 +9331 +9340 +9341 +9342 +9343 +9344 +9345 +9348 +935F +9362 +9366 +9368 +9369 +936B +936E +9373 +9374 +9378 +937D +9381 +9384 +9385 +9386 +9387 +9390 +939C +93A0 +93AD +93B8 +93BB +93BD +93BF +93C6 +93CB +93D3 +93DB +93E0 +93F0 +93F1 +93F3 +93F4 +9401 +9404 +9408 +9417 +941B +941D +9424 +9425 +9426 +9427 +942D +943E +9442 +9443 +944D +9454 +9458 +945B +9465 +9467 +946C +9479 +947B +9485 +949F +94A2 +94C1 +94C3 +94DC +94F6 +952D +9547 +9578 +957F +9585 +9596 +9597 +9599 +95A0 +95A2 +95A6 +95A7 +95AA +95E8 +95F4 +961D +9633 +9638 +9641 +9645 +9656 +9669 +967B +9681 +968F +9696 +96A3 +96A5 +96B6 +96BD +96F4 +9703 +971B +9721 +9731 +9736 +9740 +9741 +9751 +9755 +9757 +975D +975F +976D +9771 +9787 +9789 +979B +979F +97B1 +97B2 +97B4 +97B8 +97BA +97BD +97BE +97C0 +97C2 +97C8 +97D2 +97E0 +97E6 +97EE +97F2 +97F5 +9814 +9815 +981F +9823 +982E +9833 +9834 +9847 +984B +9866 +9868 +986C +9875 +98B4 +98B7 +98B9 +98C3 +98C7 +98C8 +98CA +98CE +98DC +98DE +98E0 +98E1 +98E6 +98EC +98F1 +98F5 +990E +9919 +991C +9937 +9938 +9939 +993B +9940 +9942 +994A +994D +995D +9962 +9963 +999B +99A4 +99AA +99B8 +99BC +99C4 +99C5 +99DA +99E0 +99E1 +99E6 +99F5 +9A0C +9A10 +9A1F +9A21 +9A26 +9A2F +9A3B +9A3C +9A58 +9A5C +9A63 +9A6C +9A8F +9AB2 +9AB6 +9ABA +9ABD +9AD7 +9AE0 +9AE2 +9AF4 +9AFF +9B02 +9B09 +9B0F +9B14 +9B2A +9B2D +9B34 +9B39 +9B40 +9B50 +9B69 +9B7F +9B81 +9B83 +9B8B +9B8D +9B8E +9B8F +9B97 +9B9D +9B9F +9BB0 +9BCF +9BDD +9BE9 +9BED +9BF1 +9BF4 +9BFF +9C02 +9C0A +9C0C +9C10 +9C15 +9C1B +9C1F +9C20 +9C26 +9C2F +9C35 +9C3A +9C45 +9C4F +9C53 +9C5D +9C72 +9C7B +9C7C +9D02 +9D0C +9D16 +9D21 +9D34 +9D39 +9D44 +9D49 +9D4E +9D50 +9D5E +9D6D +9D6E +9D7C +9D7E +9D83 +9D93 +9DA5 +9DAB +9DBD +9DC0 +9DC4 +9DC9 +9DD4 +9DFC +9E0A +9E0C +9E0E +9E18 +9E1C +9E1F +9E7B +9E81 +9E84 +9E85 +9E90 +9E95 +9E96 +9E98 +9E9E +9EA2 +9EA6 +9EA8 +9EAA +9EAB +9EAC +9EAF +9EB1 +9EBD +9EBF +9EC1 +9EC4 +9EC6 +9EC7 +9EE2 +9EF1 +9EF8 +9EFE +9F02 +9F08 +9F17 +9F26 +9F27 +9F39 +9F44 +9F45 +9F50 +9F53 +9F5A +9F62 +9F69 +9F7F +9F8E +9F99 +9F9F +9FA5 +20547 diff --git a/fontconfig/fc-lang/zh_mo.orth b/fontconfig/fc-lang/zh_mo.orth index 1b68dc0e8..ae086f9d8 100644 --- a/fontconfig/fc-lang/zh_mo.orth +++ b/fontconfig/fc-lang/zh_mo.orth @@ -1,32 +1,32 @@ -# -# fontconfig/fc-lang/zh_mo.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Chinese in Macau (ZH-MO) -# -# from Abel Cheung: -# -# a majority of Macau people speak Cantonese too, and also uses additional -# traditional Chinese chars from Hong Kong (there are already some place names -# that can't be represented in just chars used in Taiwan). -# -include zh_hk.orth +# +# fontconfig/fc-lang/zh_mo.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese in Macau (ZH-MO) +# +# from Abel Cheung: +# +# a majority of Macau people speak Cantonese too, and also uses additional +# traditional Chinese chars from Hong Kong (there are already some place names +# that can't be represented in just chars used in Taiwan). +# +include zh_hk.orth diff --git a/fontconfig/fc-lang/zh_sg.orth b/fontconfig/fc-lang/zh_sg.orth index e69c38023..354e2a4b8 100644 --- a/fontconfig/fc-lang/zh_sg.orth +++ b/fontconfig/fc-lang/zh_sg.orth @@ -1,27 +1,27 @@ -# -# fontconfig/fc-lang/zh_sg.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Chinese in Singapore (ZH-SG) -# -# Just use GB2312 as for ZH-CN -include zh_cn.orth +# +# fontconfig/fc-lang/zh_sg.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese in Singapore (ZH-SG) +# +# Just use GB2312 as for ZH-CN +include zh_cn.orth diff --git a/fontconfig/fc-lang/zh_tw.orth b/fontconfig/fc-lang/zh_tw.orth index 8b88b03ce..844745342 100644 --- a/fontconfig/fc-lang/zh_tw.orth +++ b/fontconfig/fc-lang/zh_tw.orth @@ -1,13105 +1,13105 @@ -# -# fontconfig/fc-lang/zh_tw.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Chinese (traditional) ZH-TW -# -# Made by trimming the Big5 -> unicode mapping down to just Chinese glyphs -# -#0x3000 # ideographic space -#0x3001 # ideographic comma -#0x3002 # ideographic full stop -#0x3003 # ditto mark -#0x3005 # ideographic iteration mark -#0x3021 # Suzhou numeral 1 -#0x3022 # Suzhou numeral 2 -#0x3023 # Suzhou numeral 3 -#0x3024 # Suzhou numeral 4 -#0x3025 # Suzhou numeral 5 -#0x3026 # Suzhou numeral 6 -#0x3027 # Suzhou numeral 7 -#0x3028 # Suzhou numeral 8 -#0x3029 # Suzhou numeral 9 -# Han -0x4E00 -0x4E01 -0x4E03 -0x4E07 -0x4E08 -0x4E09 -0x4E0A -0x4E0B -0x4E0C -0x4E0D -0x4E0E -0x4E0F -0x4E10 -0x4E11 -0x4E14 -0x4E15 -0x4E16 -0x4E18 -0x4E19 -0x4E1E -0x4E1F -0x4E26 -0x4E2B -0x4E2D -0x4E2E -0x4E30 -0x4E31 -0x4E32 -0x4E33 -0x4E38 -0x4E39 -0x4E3B -0x4E3C -0x4E42 -0x4E43 -0x4E45 -0x4E47 -0x4E48 -0x4E4B -0x4E4D -0x4E4E -0x4E4F -0x4E52 -0x4E53 -0x4E56 -0x4E58 -0x4E59 -0x4E5C -0x4E5D -0x4E5E -0x4E5F -0x4E69 -0x4E73 -0x4E7E -0x4E7F -0x4E82 -0x4E83 -0x4E84 -0x4E86 -0x4E88 -0x4E8B -0x4E8C -0x4E8D -0x4E8E -0x4E91 -0x4E92 -0x4E93 -0x4E94 -0x4E95 -0x4E99 -0x4E9B -0x4E9E -0x4E9F -0x4EA1 -0x4EA2 -0x4EA4 -0x4EA5 -0x4EA6 -0x4EA8 -0x4EAB -0x4EAC -0x4EAD -0x4EAE -0x4EB3 -0x4EB6 -0x4EB9 -0x4EBA -0x4EC0 -0x4EC1 -0x4EC2 -0x4EC3 -0x4EC4 -0x4EC6 -0x4EC7 -0x4EC8 -0x4EC9 -0x4ECA -0x4ECB -0x4ECD -0x4ED4 -0x4ED5 -0x4ED6 -0x4ED7 -0x4ED8 -0x4ED9 -0x4EDA -0x4EDC -0x4EDD -0x4EDE -0x4EDF -0x4EE1 -0x4EE3 -0x4EE4 -0x4EE5 -0x4EE8 -0x4EE9 -0x4EF0 -0x4EF1 -0x4EF2 -0x4EF3 -0x4EF4 -0x4EF5 -0x4EF6 -0x4EF7 -0x4EFB -0x4EFD -0x4EFF -0x4F00 -0x4F01 -0x4F02 -0x4F04 -0x4F05 -0x4F08 -0x4F09 -0x4F0A -0x4F0B -0x4F0D -0x4F0E -0x4F0F -0x4F10 -0x4F11 -0x4F12 -0x4F13 -0x4F14 -0x4F15 -0x4F18 -0x4F19 -0x4F1D -0x4F22 -0x4F2C -0x4F2D -0x4F2F -0x4F30 -0x4F33 -0x4F34 -0x4F36 -0x4F38 -0x4F3A -0x4F3B -0x4F3C -0x4F3D -0x4F3E -0x4F3F -0x4F41 -0x4F43 -0x4F46 -0x4F47 -0x4F48 -0x4F49 -0x4F4C -0x4F4D -0x4F4E -0x4F4F -0x4F50 -0x4F51 -0x4F52 -0x4F53 -0x4F54 -0x4F55 -0x4F56 -0x4F57 -0x4F58 -0x4F59 -0x4F5A -0x4F5B -0x4F5C -0x4F5D -0x4F5E -0x4F5F -0x4F60 -0x4F61 -0x4F62 -0x4F63 -0x4F64 -0x4F67 -0x4F69 -0x4F6A -0x4F6B -0x4F6C -0x4F6E -0x4F6F -0x4F70 -0x4F73 -0x4F74 -0x4F75 -0x4F76 -0x4F77 -0x4F78 -0x4F79 -0x4F7A -0x4F7B -0x4F7C -0x4F7D -0x4F7E -0x4F7F -0x4F80 -0x4F81 -0x4F82 -0x4F83 -0x4F84 -0x4F85 -0x4F86 -0x4F87 -0x4F88 -0x4F89 -0x4F8B -0x4F8D -0x4F8F -0x4F90 -0x4F91 -0x4F92 -0x4F94 -0x4F95 -0x4F96 -0x4F97 -0x4F98 -0x4F9A -0x4F9B -0x4F9C -0x4F9D -0x4F9E -0x4FAE -0x4FAF -0x4FB2 -0x4FB3 -0x4FB5 -0x4FB6 -0x4FB7 -0x4FB9 -0x4FBA -0x4FBB -0x4FBF -0x4FC0 -0x4FC1 -0x4FC2 -0x4FC3 -0x4FC4 -0x4FC5 -0x4FC7 -0x4FC9 -0x4FCA -0x4FCB -0x4FCD -0x4FCE -0x4FCF -0x4FD0 -0x4FD1 -0x4FD3 -0x4FD4 -0x4FD6 -0x4FD7 -0x4FD8 -0x4FD9 -0x4FDA -0x4FDB -0x4FDC -0x4FDD -0x4FDE -0x4FDF -0x4FE0 -0x4FE1 -0x4FEC -0x4FEE -0x4FEF -0x4FF1 -0x4FF3 -0x4FF4 -0x4FF5 -0x4FF6 -0x4FF7 -0x4FF8 -0x4FFA -0x4FFE -0x5000 -0x5005 -0x5006 -0x5007 -0x5009 -0x500B -0x500C -0x500D -0x500E -0x500F -0x5011 -0x5012 -0x5013 -0x5014 -0x5015 -0x5016 -0x5017 -0x5018 -0x5019 -0x501A -0x501B -0x501C -0x501E -0x501F -0x5020 -0x5021 -0x5022 -0x5023 -0x5025 -0x5026 -0x5027 -0x5028 -0x5029 -0x502A -0x502B -0x502C -0x502D -0x502F -0x5030 -0x5031 -0x5033 -0x5035 -0x5037 -0x503C -0x5040 -0x5041 -0x5043 -0x5045 -0x5046 -0x5047 -0x5048 -0x5049 -0x504A -0x504B -0x504C -0x504D -0x504E -0x504F -0x5051 -0x5053 -0x5055 -0x5057 -0x505A -0x505B -0x505C -0x505D -0x505E -0x505F -0x5060 -0x5061 -0x5062 -0x5063 -0x5064 -0x5065 -0x5068 -0x5069 -0x506A -0x506B -0x506D -0x506E -0x506F -0x5070 -0x5072 -0x5073 -0x5074 -0x5075 -0x5076 -0x5077 -0x507A -0x507D -0x5080 -0x5082 -0x5083 -0x5085 -0x5087 -0x508B -0x508C -0x508D -0x508E -0x5091 -0x5092 -0x5094 -0x5095 -0x5096 -0x5098 -0x5099 -0x509A -0x509B -0x509C -0x509D -0x509E -0x50A2 -0x50A3 -0x50AC -0x50AD -0x50AE -0x50AF -0x50B0 -0x50B1 -0x50B2 -0x50B3 -0x50B4 -0x50B5 -0x50B6 -0x50B7 -0x50B8 -0x50BA -0x50BB -0x50BD -0x50BE -0x50BF -0x50C1 -0x50C2 -0x50C4 -0x50C5 -0x50C6 -0x50C7 -0x50C8 -0x50C9 -0x50CA -0x50CB -0x50CE -0x50CF -0x50D1 -0x50D3 -0x50D4 -0x50D5 -0x50D6 -0x50D7 -0x50DA -0x50DB -0x50DD -0x50E0 -0x50E3 -0x50E4 -0x50E5 -0x50E6 -0x50E7 -0x50E8 -0x50E9 -0x50EA -0x50EC -0x50ED -0x50EE -0x50EF -0x50F0 -0x50F1 -0x50F3 -0x50F5 -0x50F6 -0x50F8 -0x50F9 -0x50FB -0x50FD -0x50FE -0x50FF -0x5100 -0x5102 -0x5103 -0x5104 -0x5105 -0x5106 -0x5107 -0x5108 -0x5109 -0x510A -0x510B -0x510C -0x5110 -0x5111 -0x5112 -0x5113 -0x5114 -0x5115 -0x5117 -0x5118 -0x511A -0x511C -0x511F -0x5120 -0x5121 -0x5122 -0x5124 -0x5125 -0x5126 -0x5129 -0x512A -0x512D -0x512E -0x5130 -0x5131 -0x5132 -0x5133 -0x5134 -0x5135 -0x5137 -0x5138 -0x5139 -0x513A -0x513B -0x513C -0x513D -0x513F -0x5140 -0x5141 -0x5143 -0x5144 -0x5145 -0x5146 -0x5147 -0x5148 -0x5149 -0x514B -0x514C -0x514D -0x5152 -0x5154 -0x5155 -0x5157 -0x5159 -0x515A -0x515B -0x515C -0x515D -0x515E -0x515F -0x5161 -0x5162 -0x5163 -0x5165 -0x5167 -0x5168 -0x5169 -0x516B -0x516C -0x516D -0x516E -0x5171 -0x5175 -0x5176 -0x5177 -0x5178 -0x517C -0x5180 -0x5187 -0x5189 -0x518A -0x518D -0x518F -0x5191 -0x5192 -0x5193 -0x5194 -0x5195 -0x5197 -0x5198 -0x519E -0x51A0 -0x51A2 -0x51A4 -0x51A5 -0x51AA -0x51AC -0x51B0 -0x51B1 -0x51B6 -0x51B7 -0x51B9 -0x51BC -0x51BD -0x51BE -0x51C4 -0x51C5 -0x51C6 -0x51C8 -0x51CA -0x51CB -0x51CC -0x51CD -0x51CE -0x51D0 -0x51D4 -0x51D7 -0x51D8 -0x51DC -0x51DD -0x51DE -0x51E0 -0x51E1 -0x51F0 -0x51F1 -0x51F3 -0x51F5 -0x51F6 -0x51F8 -0x51F9 -0x51FA -0x51FD -0x5200 -0x5201 -0x5203 -0x5206 -0x5207 -0x5208 -0x5209 -0x520A -0x520C -0x520E -0x5210 -0x5211 -0x5212 -0x5213 -0x5216 -0x5217 -0x521C -0x521D -0x521E -0x5221 -0x5224 -0x5225 -0x5228 -0x5229 -0x522A -0x522E -0x5230 -0x5231 -0x5232 -0x5233 -0x5235 -0x5236 -0x5237 -0x5238 -0x523A -0x523B -0x5241 -0x5243 -0x5244 -0x5246 -0x5247 -0x5249 -0x524A -0x524B -0x524C -0x524D -0x524E -0x5252 -0x5254 -0x5255 -0x5256 -0x525A -0x525B -0x525C -0x525D -0x525E -0x525F -0x5261 -0x5262 -0x5269 -0x526A -0x526B -0x526C -0x526D -0x526E -0x526F -0x5272 -0x5274 -0x5275 -0x5277 -0x5278 -0x527A -0x527B -0x527C -0x527D -0x527F -0x5280 -0x5281 -0x5282 -0x5283 -0x5284 -0x5287 -0x5288 -0x5289 -0x528A -0x528B -0x528C -0x528D -0x5291 -0x5293 -0x5296 -0x5297 -0x5298 -0x5299 -0x529B -0x529F -0x52A0 -0x52A3 -0x52A6 -0x52A9 -0x52AA -0x52AB -0x52AC -0x52AD -0x52AE -0x52BB -0x52BC -0x52BE -0x52C0 -0x52C1 -0x52C2 -0x52C3 -0x52C7 -0x52C9 -0x52CD -0x52D2 -0x52D3 -0x52D5 -0x52D6 -0x52D7 -0x52D8 -0x52D9 -0x52DB -0x52DD -0x52DE -0x52DF -0x52E2 -0x52E3 -0x52E4 -0x52E6 -0x52E9 -0x52EB -0x52EF -0x52F0 -0x52F1 -0x52F3 -0x52F4 -0x52F5 -0x52F7 -0x52F8 -0x52FA -0x52FB -0x52FC -0x52FE -0x52FF -0x5305 -0x5306 -0x5308 -0x5309 -0x530A -0x530B -0x530D -0x530E -0x530F -0x5310 -0x5311 -0x5312 -0x5315 -0x5316 -0x5317 -0x5319 -0x531A -0x531C -0x531D -0x531F -0x5320 -0x5321 -0x5322 -0x5323 -0x532A -0x532D -0x532F -0x5330 -0x5331 -0x5334 -0x5337 -0x5339 -0x533C -0x533D -0x533E -0x533F -0x5340 -0x5341 -0x5343 -0x5344 -0x5345 -0x5347 -0x5348 -0x5349 -0x534A -0x534C -0x534D -0x5351 -0x5352 -0x5353 -0x5354 -0x5357 -0x535A -0x535C -0x535E -0x5360 -0x5361 -0x5363 -0x5366 -0x536C -0x536E -0x536F -0x5370 -0x5371 -0x5372 -0x5373 -0x5375 -0x5377 -0x5378 -0x5379 -0x537B -0x537C -0x537F -0x5382 -0x5384 -0x538A -0x538E -0x538F -0x5392 -0x5394 -0x5396 -0x5397 -0x5398 -0x5399 -0x539A -0x539C -0x539D -0x539E -0x539F -0x53A4 -0x53A5 -0x53A7 -0x53AC -0x53AD -0x53B2 -0x53B4 -0x53B9 -0x53BB -0x53C3 -0x53C8 -0x53C9 -0x53CA -0x53CB -0x53CD -0x53D4 -0x53D6 -0x53D7 -0x53DB -0x53DF -0x53E1 -0x53E2 -0x53E3 -0x53E4 -0x53E5 -0x53E6 -0x53E8 -0x53E9 -0x53EA -0x53EB -0x53EC -0x53ED -0x53EE -0x53EF -0x53F0 -0x53F1 -0x53F2 -0x53F3 -0x53F5 -0x53F8 -0x53FB -0x53FC -0x5401 -0x5403 -0x5404 -0x5406 -0x5407 -0x5408 -0x5409 -0x540A -0x540B -0x540C -0x540D -0x540E -0x540F -0x5410 -0x5411 -0x5412 -0x5418 -0x5419 -0x541B -0x541C -0x541D -0x541E -0x541F -0x5420 -0x5424 -0x5425 -0x5426 -0x5427 -0x5428 -0x5429 -0x542A -0x542B -0x542C -0x542D -0x542E -0x5430 -0x5431 -0x5433 -0x5435 -0x5436 -0x5437 -0x5438 -0x5439 -0x543B -0x543C -0x543D -0x543E -0x5440 -0x5441 -0x5442 -0x5443 -0x5445 -0x5446 -0x5447 -0x5448 -0x544A -0x544E -0x544F -0x5454 -0x5460 -0x5461 -0x5462 -0x5463 -0x5464 -0x5465 -0x5466 -0x5467 -0x5468 -0x546B -0x546C -0x546F -0x5470 -0x5471 -0x5472 -0x5473 -0x5474 -0x5475 -0x5476 -0x5477 -0x5478 -0x547A -0x547B -0x547C -0x547D -0x547E -0x547F -0x5480 -0x5481 -0x5482 -0x5484 -0x5486 -0x5487 -0x5488 -0x548B -0x548C -0x548D -0x548E -0x5490 -0x5491 -0x5492 -0x5495 -0x5496 -0x5498 -0x549A -0x54A0 -0x54A1 -0x54A2 -0x54A5 -0x54A6 -0x54A7 -0x54A8 -0x54A9 -0x54AA -0x54AB -0x54AC -0x54AD -0x54AE -0x54AF -0x54B0 -0x54B1 -0x54B3 -0x54B6 -0x54B7 -0x54B8 -0x54BA -0x54BB -0x54BC -0x54BD -0x54BE -0x54BF -0x54C0 -0x54C1 -0x54C2 -0x54C3 -0x54C4 -0x54C5 -0x54C6 -0x54C7 -0x54C8 -0x54C9 -0x54CE -0x54CF -0x54D6 -0x54DE -0x54E0 -0x54E1 -0x54E2 -0x54E4 -0x54E5 -0x54E6 -0x54E7 -0x54E8 -0x54E9 -0x54EA -0x54EB -0x54ED -0x54EE -0x54F1 -0x54F2 -0x54F3 -0x54F7 -0x54F8 -0x54FA -0x54FB -0x54FC -0x54FD -0x54FF -0x5501 -0x5503 -0x5504 -0x5505 -0x5506 -0x5507 -0x5508 -0x5509 -0x550A -0x550B -0x550C -0x550E -0x550F -0x5510 -0x5511 -0x5512 -0x5514 -0x5517 -0x551A -0x5526 -0x5527 -0x552A -0x552C -0x552D -0x552E -0x552F -0x5530 -0x5531 -0x5532 -0x5533 -0x5534 -0x5535 -0x5536 -0x5537 -0x5538 -0x5539 -0x553B -0x553C -0x553E -0x5540 -0x5541 -0x5543 -0x5544 -0x5545 -0x5546 -0x5548 -0x554A -0x554B -0x554D -0x554E -0x554F -0x5550 -0x5551 -0x5552 -0x5555 -0x5556 -0x5557 -0x555C -0x555E -0x555F -0x5561 -0x5562 -0x5563 -0x5564 -0x5565 -0x5566 -0x556A -0x5575 -0x5576 -0x5577 -0x557B -0x557C -0x557D -0x557E -0x557F -0x5580 -0x5581 -0x5582 -0x5583 -0x5584 -0x5587 -0x5588 -0x5589 -0x558A -0x558B -0x558C -0x558D -0x558E -0x558F -0x5591 -0x5592 -0x5593 -0x5594 -0x5595 -0x5598 -0x5599 -0x559A -0x559C -0x559D -0x559F -0x55A1 -0x55A2 -0x55A3 -0x55A4 -0x55A5 -0x55A6 -0x55A7 -0x55A8 -0x55AA -0x55AB -0x55AC -0x55AD -0x55AE -0x55B1 -0x55B2 -0x55B3 -0x55B5 -0x55BB -0x55BF -0x55C0 -0x55C2 -0x55C3 -0x55C4 -0x55C5 -0x55C6 -0x55C7 -0x55C8 -0x55C9 -0x55CA -0x55CB -0x55CC -0x55CD -0x55CE -0x55CF -0x55D0 -0x55D1 -0x55D2 -0x55D3 -0x55D4 -0x55D5 -0x55D6 -0x55D9 -0x55DA -0x55DB -0x55DC -0x55DD -0x55DF -0x55E1 -0x55E2 -0x55E3 -0x55E4 -0x55E5 -0x55E6 -0x55E7 -0x55E8 -0x55E9 -0x55EF -0x55F2 -0x55F6 -0x55F7 -0x55F9 -0x55FA -0x55FC -0x55FD -0x55FE -0x55FF -0x5600 -0x5601 -0x5602 -0x5604 -0x5606 -0x5608 -0x5609 -0x560C -0x560D -0x560E -0x560F -0x5610 -0x5612 -0x5613 -0x5614 -0x5615 -0x5616 -0x5617 -0x561B -0x561C -0x561D -0x561F -0x5627 -0x5629 -0x562A -0x562C -0x562E -0x562F -0x5630 -0x5632 -0x5633 -0x5634 -0x5635 -0x5636 -0x5638 -0x5639 -0x563A -0x563B -0x563D -0x563E -0x563F -0x5640 -0x5641 -0x5642 -0x5645 -0x5646 -0x5648 -0x5649 -0x564A -0x564C -0x564E -0x5653 -0x5657 -0x5658 -0x5659 -0x565A -0x565E -0x5660 -0x5662 -0x5663 -0x5664 -0x5665 -0x5666 -0x5668 -0x5669 -0x566A -0x566B -0x566C -0x566D -0x566E -0x566F -0x5670 -0x5671 -0x5672 -0x5673 -0x5674 -0x5676 -0x5677 -0x5678 -0x5679 -0x567E -0x567F -0x5680 -0x5681 -0x5682 -0x5683 -0x5684 -0x5685 -0x5686 -0x5687 -0x568C -0x568D -0x568E -0x568F -0x5690 -0x5693 -0x5695 -0x5697 -0x5698 -0x5699 -0x569A -0x569C -0x569D -0x56A5 -0x56A6 -0x56A7 -0x56A8 -0x56AA -0x56AB -0x56AC -0x56AD -0x56AE -0x56B2 -0x56B3 -0x56B4 -0x56B5 -0x56B6 -0x56B7 -0x56BC -0x56BD -0x56BE -0x56C0 -0x56C1 -0x56C2 -0x56C3 -0x56C5 -0x56C6 -0x56C8 -0x56C9 -0x56CA -0x56CB -0x56CC -0x56CD -0x56D1 -0x56D3 -0x56D4 -0x56D7 -0x56DA -0x56DB -0x56DD -0x56DE -0x56DF -0x56E0 -0x56E1 -0x56E4 -0x56E5 -0x56E7 -0x56EA -0x56EB -0x56EE -0x56F0 -0x56F7 -0x56F9 -0x56FA -0x56FF -0x5701 -0x5702 -0x5703 -0x5704 -0x5707 -0x5708 -0x5709 -0x570A -0x570B -0x570C -0x570D -0x5712 -0x5713 -0x5714 -0x5716 -0x5718 -0x571A -0x571B -0x571C -0x571E -0x571F -0x5720 -0x5722 -0x5723 -0x5728 -0x5729 -0x572A -0x572C -0x572D -0x572E -0x572F -0x5730 -0x5733 -0x5734 -0x573B -0x573E -0x5740 -0x5741 -0x5745 -0x5747 -0x5749 -0x574A -0x574B -0x574C -0x574D -0x574E -0x574F -0x5750 -0x5751 -0x5752 -0x5761 -0x5762 -0x5764 -0x5766 -0x5768 -0x5769 -0x576A -0x576B -0x576D -0x576F -0x5770 -0x5771 -0x5772 -0x5773 -0x5774 -0x5775 -0x5776 -0x5777 -0x577B -0x577C -0x577D -0x5780 -0x5782 -0x5783 -0x578B -0x578C -0x578F -0x5793 -0x5794 -0x5795 -0x5797 -0x5798 -0x5799 -0x579A -0x579B -0x579D -0x579E -0x579F -0x57A0 -0x57A2 -0x57A3 -0x57A4 -0x57A5 -0x57AE -0x57B5 -0x57B6 -0x57B8 -0x57B9 -0x57BA -0x57BC -0x57BD -0x57BF -0x57C1 -0x57C2 -0x57C3 -0x57C6 -0x57C7 -0x57CB -0x57CC -0x57CE -0x57CF -0x57D0 -0x57D2 -0x57D4 -0x57D5 -0x57DC -0x57DF -0x57E0 -0x57E1 -0x57E2 -0x57E3 -0x57E4 -0x57E5 -0x57E7 -0x57E9 -0x57EC -0x57ED -0x57EE -0x57F0 -0x57F1 -0x57F2 -0x57F3 -0x57F4 -0x57F5 -0x57F6 -0x57F7 -0x57F8 -0x57F9 -0x57FA -0x57FB -0x57FC -0x57FD -0x5800 -0x5801 -0x5802 -0x5804 -0x5805 -0x5806 -0x5807 -0x5808 -0x5809 -0x580A -0x580B -0x580C -0x580D -0x580E -0x5810 -0x5814 -0x5819 -0x581B -0x581C -0x581D -0x581E -0x5820 -0x5821 -0x5823 -0x5824 -0x5825 -0x5827 -0x5828 -0x5829 -0x582A -0x582C -0x582D -0x582E -0x582F -0x5830 -0x5831 -0x5832 -0x5833 -0x5834 -0x5835 -0x5836 -0x5837 -0x5838 -0x5839 -0x583B -0x583D -0x583F -0x5848 -0x5849 -0x584A -0x584B -0x584C -0x584D -0x584E -0x584F -0x5851 -0x5852 -0x5853 -0x5854 -0x5855 -0x5857 -0x5858 -0x5859 -0x585A -0x585B -0x585D -0x585E -0x5862 -0x5863 -0x5864 -0x5865 -0x5868 -0x586B -0x586D -0x586F -0x5871 -0x5874 -0x5875 -0x5876 -0x5879 -0x587A -0x587B -0x587C -0x587D -0x587E -0x587F -0x5880 -0x5881 -0x5882 -0x5883 -0x5885 -0x5886 -0x5887 -0x5888 -0x5889 -0x588A -0x588B -0x588E -0x588F -0x5890 -0x5891 -0x5893 -0x5894 -0x5898 -0x589C -0x589D -0x589E -0x589F -0x58A0 -0x58A1 -0x58A3 -0x58A5 -0x58A6 -0x58A8 -0x58A9 -0x58AB -0x58AC -0x58AE -0x58AF -0x58B1 -0x58B3 -0x58BA -0x58BC -0x58BD -0x58BE -0x58BF -0x58C1 -0x58C2 -0x58C5 -0x58C6 -0x58C7 -0x58C8 -0x58C9 -0x58CE -0x58CF -0x58D1 -0x58D2 -0x58D3 -0x58D4 -0x58D5 -0x58D6 -0x58D8 -0x58D9 -0x58DA -0x58DB -0x58DD -0x58DE -0x58DF -0x58E2 -0x58E3 -0x58E4 -0x58E7 -0x58E8 -0x58E9 -0x58EB -0x58EC -0x58EF -0x58F4 -0x58F9 -0x58FA -0x58FC -0x58FD -0x58FE -0x58FF -0x5903 -0x5906 -0x590C -0x590D -0x590E -0x590F -0x5912 -0x5914 -0x5915 -0x5916 -0x5917 -0x5919 -0x591A -0x591C -0x5920 -0x5922 -0x5924 -0x5925 -0x5927 -0x5929 -0x592A -0x592B -0x592C -0x592D -0x592E -0x592F -0x5931 -0x5937 -0x5938 -0x593C -0x593E -0x5940 -0x5944 -0x5945 -0x5947 -0x5948 -0x5949 -0x594A -0x594E -0x594F -0x5950 -0x5951 -0x5953 -0x5954 -0x5955 -0x5957 -0x5958 -0x595A -0x595C -0x5960 -0x5961 -0x5962 -0x5967 -0x5969 -0x596A -0x596B -0x596D -0x596E -0x5970 -0x5971 -0x5972 -0x5973 -0x5974 -0x5976 -0x5977 -0x5978 -0x5979 -0x597B -0x597C -0x597D -0x597E -0x597F -0x5980 -0x5981 -0x5982 -0x5983 -0x5984 -0x5985 -0x598A -0x598D -0x598E -0x598F -0x5990 -0x5992 -0x5993 -0x5996 -0x5997 -0x5998 -0x5999 -0x599D -0x599E -0x59A0 -0x59A1 -0x59A2 -0x59A3 -0x59A4 -0x59A5 -0x59A6 -0x59A7 -0x59A8 -0x59AE -0x59AF -0x59B1 -0x59B2 -0x59B3 -0x59B4 -0x59B5 -0x59B6 -0x59B9 -0x59BA -0x59BB -0x59BC -0x59BD -0x59BE -0x59C0 -0x59C1 -0x59C3 -0x59C5 -0x59C6 -0x59C7 -0x59C8 -0x59CA -0x59CB -0x59CC -0x59CD -0x59CE -0x59CF -0x59D0 -0x59D1 -0x59D2 -0x59D3 -0x59D4 -0x59D6 -0x59D8 -0x59DA -0x59DB -0x59DC -0x59DD -0x59DE -0x59E0 -0x59E1 -0x59E3 -0x59E4 -0x59E5 -0x59E6 -0x59E8 -0x59E9 -0x59EA -0x59EC -0x59ED -0x59EE -0x59F1 -0x59F2 -0x59F3 -0x59F4 -0x59F5 -0x59F6 -0x59F7 -0x59FA -0x59FB -0x59FC -0x59FD -0x59FE -0x59FF -0x5A00 -0x5A01 -0x5A03 -0x5A09 -0x5A0A -0x5A0C -0x5A0F -0x5A11 -0x5A13 -0x5A15 -0x5A16 -0x5A17 -0x5A18 -0x5A19 -0x5A1B -0x5A1C -0x5A1E -0x5A1F -0x5A20 -0x5A23 -0x5A25 -0x5A29 -0x5A2D -0x5A2E -0x5A33 -0x5A35 -0x5A36 -0x5A37 -0x5A38 -0x5A39 -0x5A3C -0x5A3E -0x5A40 -0x5A41 -0x5A42 -0x5A43 -0x5A44 -0x5A46 -0x5A47 -0x5A48 -0x5A49 -0x5A4A -0x5A4C -0x5A4D -0x5A50 -0x5A51 -0x5A52 -0x5A53 -0x5A55 -0x5A56 -0x5A57 -0x5A58 -0x5A5A -0x5A5B -0x5A5C -0x5A5D -0x5A5E -0x5A5F -0x5A60 -0x5A62 -0x5A64 -0x5A65 -0x5A66 -0x5A67 -0x5A69 -0x5A6A -0x5A6C -0x5A6D -0x5A70 -0x5A77 -0x5A78 -0x5A7A -0x5A7B -0x5A7C -0x5A7D -0x5A7F -0x5A83 -0x5A84 -0x5A8A -0x5A8B -0x5A8C -0x5A8E -0x5A8F -0x5A90 -0x5A92 -0x5A93 -0x5A94 -0x5A95 -0x5A97 -0x5A9A -0x5A9B -0x5A9C -0x5A9D -0x5A9E -0x5A9F -0x5AA2 -0x5AA5 -0x5AA6 -0x5AA7 -0x5AA9 -0x5AAC -0x5AAE -0x5AAF -0x5AB0 -0x5AB1 -0x5AB2 -0x5AB3 -0x5AB4 -0x5AB5 -0x5AB6 -0x5AB7 -0x5AB8 -0x5AB9 -0x5ABA -0x5ABB -0x5ABC -0x5ABD -0x5ABE -0x5ABF -0x5AC0 -0x5AC1 -0x5AC2 -0x5AC4 -0x5AC6 -0x5AC7 -0x5AC8 -0x5AC9 -0x5ACA -0x5ACB -0x5ACC -0x5ACD -0x5AD5 -0x5AD6 -0x5AD7 -0x5AD8 -0x5AD9 -0x5ADA -0x5ADB -0x5ADC -0x5ADD -0x5ADE -0x5ADF -0x5AE0 -0x5AE1 -0x5AE2 -0x5AE3 -0x5AE5 -0x5AE6 -0x5AE8 -0x5AE9 -0x5AEA -0x5AEB -0x5AEC -0x5AED -0x5AEE -0x5AF3 -0x5AF4 -0x5AF5 -0x5AF6 -0x5AF7 -0x5AF8 -0x5AF9 -0x5AFB -0x5AFD -0x5AFF -0x5B01 -0x5B02 -0x5B03 -0x5B05 -0x5B07 -0x5B08 -0x5B09 -0x5B0B -0x5B0C -0x5B0F -0x5B10 -0x5B13 -0x5B14 -0x5B16 -0x5B17 -0x5B19 -0x5B1A -0x5B1B -0x5B1D -0x5B1E -0x5B20 -0x5B21 -0x5B23 -0x5B24 -0x5B25 -0x5B26 -0x5B27 -0x5B28 -0x5B2A -0x5B2C -0x5B2D -0x5B2E -0x5B2F -0x5B30 -0x5B32 -0x5B34 -0x5B38 -0x5B3C -0x5B3D -0x5B3E -0x5B3F -0x5B40 -0x5B43 -0x5B45 -0x5B47 -0x5B48 -0x5B4B -0x5B4C -0x5B4D -0x5B4E -0x5B50 -0x5B51 -0x5B53 -0x5B54 -0x5B55 -0x5B56 -0x5B57 -0x5B58 -0x5B5A -0x5B5B -0x5B5C -0x5B5D -0x5B5F -0x5B62 -0x5B63 -0x5B64 -0x5B65 -0x5B69 -0x5B6B -0x5B6C -0x5B6E -0x5B70 -0x5B71 -0x5B72 -0x5B73 -0x5B75 -0x5B77 -0x5B78 -0x5B7A -0x5B7B -0x5B7D -0x5B7F -0x5B81 -0x5B83 -0x5B84 -0x5B85 -0x5B87 -0x5B88 -0x5B89 -0x5B8B -0x5B8C -0x5B8E -0x5B8F -0x5B92 -0x5B93 -0x5B95 -0x5B97 -0x5B98 -0x5B99 -0x5B9A -0x5B9B -0x5B9C -0x5BA2 -0x5BA3 -0x5BA4 -0x5BA5 -0x5BA6 -0x5BA7 -0x5BA8 -0x5BAC -0x5BAD -0x5BAE -0x5BB0 -0x5BB3 -0x5BB4 -0x5BB5 -0x5BB6 -0x5BB8 -0x5BB9 -0x5BBF -0x5BC0 -0x5BC1 -0x5BC2 -0x5BC4 -0x5BC5 -0x5BC6 -0x5BC7 -0x5BCA -0x5BCB -0x5BCC -0x5BCD -0x5BCE -0x5BD0 -0x5BD1 -0x5BD2 -0x5BD3 -0x5BD4 -0x5BD6 -0x5BD8 -0x5BD9 -0x5BDE -0x5BDF -0x5BE0 -0x5BE1 -0x5BE2 -0x5BE3 -0x5BE4 -0x5BE5 -0x5BE6 -0x5BE7 -0x5BE8 -0x5BE9 -0x5BEA -0x5BEB -0x5BEC -0x5BEE -0x5BEF -0x5BF0 -0x5BF1 -0x5BF2 -0x5BF5 -0x5BF6 -0x5BF8 -0x5BFA -0x5C01 -0x5C03 -0x5C04 -0x5C07 -0x5C08 -0x5C09 -0x5C0A -0x5C0B -0x5C0C -0x5C0D -0x5C0E -0x5C0F -0x5C10 -0x5C11 -0x5C12 -0x5C15 -0x5C16 -0x5C1A -0x5C1F -0x5C22 -0x5C24 -0x5C25 -0x5C28 -0x5C2A -0x5C2C -0x5C30 -0x5C31 -0x5C33 -0x5C37 -0x5C38 -0x5C39 -0x5C3A -0x5C3B -0x5C3C -0x5C3E -0x5C3F -0x5C40 -0x5C41 -0x5C44 -0x5C45 -0x5C46 -0x5C47 -0x5C48 -0x5C4B -0x5C4C -0x5C4D -0x5C4E -0x5C4F -0x5C50 -0x5C51 -0x5C54 -0x5C55 -0x5C56 -0x5C58 -0x5C59 -0x5C5C -0x5C5D -0x5C60 -0x5C62 -0x5C63 -0x5C64 -0x5C65 -0x5C67 -0x5C68 -0x5C69 -0x5C6A -0x5C6C -0x5C6D -0x5C6E -0x5C6F -0x5C71 -0x5C73 -0x5C74 -0x5C79 -0x5C7A -0x5C7B -0x5C7C -0x5C7E -0x5C86 -0x5C88 -0x5C89 -0x5C8A -0x5C8B -0x5C8C -0x5C8D -0x5C8F -0x5C90 -0x5C91 -0x5C92 -0x5C93 -0x5C94 -0x5C95 -0x5C9D -0x5C9F -0x5CA0 -0x5CA1 -0x5CA2 -0x5CA3 -0x5CA4 -0x5CA5 -0x5CA6 -0x5CA7 -0x5CA8 -0x5CA9 -0x5CAA -0x5CAB -0x5CAC -0x5CAD -0x5CAE -0x5CAF -0x5CB0 -0x5CB1 -0x5CB3 -0x5CB5 -0x5CB6 -0x5CB7 -0x5CB8 -0x5CC6 -0x5CC7 -0x5CC8 -0x5CC9 -0x5CCA -0x5CCB -0x5CCC -0x5CCE -0x5CCF -0x5CD0 -0x5CD2 -0x5CD3 -0x5CD4 -0x5CD6 -0x5CD7 -0x5CD8 -0x5CD9 -0x5CDA -0x5CDB -0x5CDE -0x5CDF -0x5CE8 -0x5CEA -0x5CEC -0x5CED -0x5CEE -0x5CF0 -0x5CF1 -0x5CF4 -0x5CF6 -0x5CF7 -0x5CF8 -0x5CF9 -0x5CFB -0x5CFD -0x5CFF -0x5D00 -0x5D01 -0x5D06 -0x5D07 -0x5D0B -0x5D0C -0x5D0D -0x5D0E -0x5D0F -0x5D11 -0x5D12 -0x5D14 -0x5D16 -0x5D17 -0x5D19 -0x5D1A -0x5D1B -0x5D1D -0x5D1E -0x5D1F -0x5D20 -0x5D22 -0x5D23 -0x5D24 -0x5D25 -0x5D26 -0x5D27 -0x5D28 -0x5D29 -0x5D2E -0x5D30 -0x5D31 -0x5D32 -0x5D33 -0x5D34 -0x5D35 -0x5D36 -0x5D37 -0x5D38 -0x5D39 -0x5D3A -0x5D3C -0x5D3D -0x5D3F -0x5D40 -0x5D41 -0x5D42 -0x5D43 -0x5D45 -0x5D47 -0x5D49 -0x5D4A -0x5D4B -0x5D4C -0x5D4E -0x5D50 -0x5D51 -0x5D52 -0x5D55 -0x5D59 -0x5D5E -0x5D62 -0x5D63 -0x5D65 -0x5D67 -0x5D68 -0x5D69 -0x5D6B -0x5D6C -0x5D6F -0x5D71 -0x5D72 -0x5D77 -0x5D79 -0x5D7A -0x5D7C -0x5D7D -0x5D7E -0x5D7F -0x5D80 -0x5D81 -0x5D82 -0x5D84 -0x5D86 -0x5D87 -0x5D88 -0x5D89 -0x5D8A -0x5D8D -0x5D92 -0x5D93 -0x5D94 -0x5D95 -0x5D97 -0x5D99 -0x5D9A -0x5D9C -0x5D9D -0x5D9E -0x5D9F -0x5DA0 -0x5DA1 -0x5DA2 -0x5DA7 -0x5DA8 -0x5DA9 -0x5DAA -0x5DAC -0x5DAD -0x5DAE -0x5DAF -0x5DB0 -0x5DB1 -0x5DB2 -0x5DB4 -0x5DB5 -0x5DB7 -0x5DB8 -0x5DBA -0x5DBC -0x5DBD -0x5DC0 -0x5DC2 -0x5DC3 -0x5DC6 -0x5DC7 -0x5DC9 -0x5DCB -0x5DCD -0x5DCF -0x5DD1 -0x5DD2 -0x5DD4 -0x5DD5 -0x5DD6 -0x5DD8 -0x5DDD -0x5DDE -0x5DDF -0x5DE0 -0x5DE1 -0x5DE2 -0x5DE5 -0x5DE6 -0x5DE7 -0x5DE8 -0x5DEB -0x5DEE -0x5DF0 -0x5DF1 -0x5DF2 -0x5DF3 -0x5DF4 -0x5DF7 -0x5DF9 -0x5DFD -0x5DFE -0x5DFF -0x5E02 -0x5E03 -0x5E04 -0x5E06 -0x5E0A -0x5E0C -0x5E0E -0x5E11 -0x5E14 -0x5E15 -0x5E16 -0x5E17 -0x5E18 -0x5E19 -0x5E1A -0x5E1B -0x5E1D -0x5E1F -0x5E20 -0x5E21 -0x5E22 -0x5E23 -0x5E24 -0x5E25 -0x5E28 -0x5E29 -0x5E2B -0x5E2D -0x5E33 -0x5E34 -0x5E36 -0x5E37 -0x5E38 -0x5E3D -0x5E3E -0x5E40 -0x5E41 -0x5E43 -0x5E44 -0x5E45 -0x5E4A -0x5E4B -0x5E4C -0x5E4D -0x5E4E -0x5E4F -0x5E53 -0x5E54 -0x5E55 -0x5E57 -0x5E58 -0x5E59 -0x5E5B -0x5E5C -0x5E5D -0x5E5F -0x5E60 -0x5E61 -0x5E62 -0x5E63 -0x5E66 -0x5E67 -0x5E68 -0x5E69 -0x5E6A -0x5E6B -0x5E6C -0x5E6D -0x5E6E -0x5E6F -0x5E70 -0x5E72 -0x5E73 -0x5E74 -0x5E75 -0x5E76 -0x5E78 -0x5E79 -0x5E7B -0x5E7C -0x5E7D -0x5E7E -0x5E80 -0x5E82 -0x5E84 -0x5E87 -0x5E88 -0x5E89 -0x5E8A -0x5E8B -0x5E8C -0x5E8D -0x5E8F -0x5E95 -0x5E96 -0x5E97 -0x5E9A -0x5E9B -0x5E9C -0x5EA0 -0x5EA2 -0x5EA3 -0x5EA4 -0x5EA5 -0x5EA6 -0x5EA7 -0x5EA8 -0x5EAA -0x5EAB -0x5EAC -0x5EAD -0x5EAE -0x5EB0 -0x5EB1 -0x5EB2 -0x5EB3 -0x5EB4 -0x5EB5 -0x5EB6 -0x5EB7 -0x5EB8 -0x5EB9 -0x5EBE -0x5EC1 -0x5EC2 -0x5EC4 -0x5EC5 -0x5EC6 -0x5EC7 -0x5EC8 -0x5EC9 -0x5ECA -0x5ECB -0x5ECC -0x5ECE -0x5ED1 -0x5ED2 -0x5ED3 -0x5ED4 -0x5ED5 -0x5ED6 -0x5ED7 -0x5ED8 -0x5ED9 -0x5EDA -0x5EDB -0x5EDC -0x5EDD -0x5EDE -0x5EDF -0x5EE0 -0x5EE1 -0x5EE2 -0x5EE3 -0x5EE5 -0x5EE6 -0x5EE7 -0x5EE8 -0x5EE9 -0x5EEC -0x5EEE -0x5EEF -0x5EF1 -0x5EF2 -0x5EF3 -0x5EF6 -0x5EF7 -0x5EFA -0x5EFE -0x5EFF -0x5F01 -0x5F02 -0x5F04 -0x5F05 -0x5F07 -0x5F08 -0x5F0A -0x5F0B -0x5F0F -0x5F12 -0x5F13 -0x5F14 -0x5F15 -0x5F17 -0x5F18 -0x5F1A -0x5F1B -0x5F1D -0x5F1F -0x5F22 -0x5F23 -0x5F24 -0x5F26 -0x5F27 -0x5F28 -0x5F29 -0x5F2D -0x5F2E -0x5F30 -0x5F31 -0x5F33 -0x5F35 -0x5F36 -0x5F37 -0x5F38 -0x5F3C -0x5F40 -0x5F43 -0x5F44 -0x5F46 -0x5F48 -0x5F49 -0x5F4A -0x5F4B -0x5F4C -0x5F4E -0x5F4F -0x5F54 -0x5F56 -0x5F57 -0x5F58 -0x5F59 -0x5F5D -0x5F62 -0x5F64 -0x5F65 -0x5F67 -0x5F69 -0x5F6A -0x5F6B -0x5F6C -0x5F6D -0x5F6F -0x5F70 -0x5F71 -0x5F73 -0x5F74 -0x5F76 -0x5F77 -0x5F78 -0x5F79 -0x5F7C -0x5F7D -0x5F7E -0x5F7F -0x5F80 -0x5F81 -0x5F82 -0x5F85 -0x5F86 -0x5F87 -0x5F88 -0x5F89 -0x5F8A -0x5F8B -0x5F8C -0x5F90 -0x5F91 -0x5F92 -0x5F96 -0x5F97 -0x5F98 -0x5F99 -0x5F9B -0x5F9C -0x5F9E -0x5F9F -0x5FA0 -0x5FA1 -0x5FA5 -0x5FA6 -0x5FA8 -0x5FA9 -0x5FAA -0x5FAB -0x5FAC -0x5FAD -0x5FAE -0x5FAF -0x5FB2 -0x5FB5 -0x5FB6 -0x5FB7 -0x5FB9 -0x5FBB -0x5FBC -0x5FBD -0x5FBE -0x5FBF -0x5FC0 -0x5FC1 -0x5FC3 -0x5FC5 -0x5FC9 -0x5FCC -0x5FCD -0x5FCF -0x5FD0 -0x5FD1 -0x5FD2 -0x5FD4 -0x5FD5 -0x5FD6 -0x5FD7 -0x5FD8 -0x5FD9 -0x5FDD -0x5FDE -0x5FE0 -0x5FE1 -0x5FE3 -0x5FE4 -0x5FE5 -0x5FE8 -0x5FEA -0x5FEB -0x5FED -0x5FEE -0x5FEF -0x5FF1 -0x5FF3 -0x5FF4 -0x5FF5 -0x5FF7 -0x5FF8 -0x5FFA -0x5FFB -0x5FFD -0x5FFF -0x6000 -0x6009 -0x600A -0x600B -0x600C -0x600D -0x600E -0x600F -0x6010 -0x6011 -0x6012 -0x6013 -0x6014 -0x6015 -0x6016 -0x6017 -0x6019 -0x601A -0x601B -0x601C -0x601D -0x601E -0x6020 -0x6021 -0x6022 -0x6024 -0x6025 -0x6026 -0x6027 -0x6028 -0x6029 -0x602A -0x602B -0x602C -0x602D -0x602E -0x602F -0x6032 -0x6033 -0x6034 -0x6035 -0x6037 -0x6039 -0x6040 -0x6041 -0x6042 -0x6043 -0x6044 -0x6045 -0x6046 -0x6047 -0x6049 -0x604C -0x604D -0x6050 -0x6053 -0x6054 -0x6055 -0x6058 -0x6059 -0x605A -0x605B -0x605D -0x605E -0x605F -0x6062 -0x6063 -0x6064 -0x6065 -0x6066 -0x6067 -0x6068 -0x6069 -0x606A -0x606B -0x606C -0x606D -0x606E -0x606F -0x6070 -0x6072 -0x607F -0x6080 -0x6081 -0x6083 -0x6084 -0x6085 -0x6086 -0x6087 -0x6088 -0x6089 -0x608A -0x608C -0x608D -0x608E -0x6090 -0x6092 -0x6094 -0x6095 -0x6096 -0x6097 -0x609A -0x609B -0x609C -0x609D -0x609F -0x60A0 -0x60A2 -0x60A3 -0x60A8 -0x60B0 -0x60B1 -0x60B2 -0x60B4 -0x60B5 -0x60B6 -0x60B7 -0x60B8 -0x60B9 -0x60BA -0x60BB -0x60BC -0x60BD -0x60BE -0x60BF -0x60C0 -0x60C1 -0x60C3 -0x60C4 -0x60C5 -0x60C6 -0x60C7 -0x60C8 -0x60C9 -0x60CA -0x60CB -0x60CC -0x60CD -0x60CE -0x60CF -0x60D1 -0x60D3 -0x60D4 -0x60D5 -0x60D8 -0x60D9 -0x60DA -0x60DB -0x60DC -0x60DD -0x60DF -0x60E0 -0x60E1 -0x60E2 -0x60E4 -0x60E6 -0x60F0 -0x60F1 -0x60F2 -0x60F3 -0x60F4 -0x60F5 -0x60F6 -0x60F7 -0x60F8 -0x60F9 -0x60FA -0x60FB -0x60FC -0x60FE -0x60FF -0x6100 -0x6101 -0x6103 -0x6104 -0x6105 -0x6106 -0x6108 -0x6109 -0x610A -0x610B -0x610D -0x610E -0x610F -0x6110 -0x6112 -0x6113 -0x6114 -0x6115 -0x6116 -0x6118 -0x611A -0x611B -0x611C -0x611D -0x611F -0x6123 -0x6127 -0x6128 -0x6129 -0x612B -0x612C -0x612E -0x612F -0x6132 -0x6134 -0x6136 -0x6137 -0x613B -0x613E -0x613F -0x6140 -0x6141 -0x6144 -0x6145 -0x6146 -0x6147 -0x6148 -0x6149 -0x614A -0x614B -0x614C -0x614D -0x614E -0x614F -0x6152 -0x6153 -0x6154 -0x6155 -0x6156 -0x6158 -0x615A -0x615B -0x615D -0x615E -0x615F -0x6161 -0x6162 -0x6163 -0x6165 -0x6166 -0x6167 -0x6168 -0x616A -0x616B -0x616C -0x616E -0x6170 -0x6171 -0x6172 -0x6173 -0x6174 -0x6175 -0x6176 -0x6177 -0x6179 -0x617A -0x617C -0x617E -0x6180 -0x6182 -0x6183 -0x6189 -0x618A -0x618B -0x618C -0x618D -0x618E -0x6190 -0x6191 -0x6192 -0x6193 -0x6194 -0x6196 -0x619A -0x619B -0x619D -0x619F -0x61A1 -0x61A2 -0x61A4 -0x61A7 -0x61A8 -0x61A9 -0x61AA -0x61AB -0x61AC -0x61AD -0x61AE -0x61AF -0x61B0 -0x61B1 -0x61B2 -0x61B3 -0x61B4 -0x61B5 -0x61B6 -0x61B8 -0x61BA -0x61BC -0x61BE -0x61BF -0x61C1 -0x61C2 -0x61C3 -0x61C5 -0x61C6 -0x61C7 -0x61C8 -0x61C9 -0x61CA -0x61CB -0x61CC -0x61CD -0x61D6 -0x61D8 -0x61DE -0x61DF -0x61E0 -0x61E3 -0x61E4 -0x61E5 -0x61E6 -0x61E7 -0x61E8 -0x61E9 -0x61EA -0x61EB -0x61ED -0x61EE -0x61F0 -0x61F1 -0x61F2 -0x61F5 -0x61F6 -0x61F7 -0x61F8 -0x61F9 -0x61FA -0x61FB -0x61FC -0x61FD -0x61FE -0x61FF -0x6200 -0x6201 -0x6203 -0x6204 -0x6207 -0x6208 -0x6209 -0x620A -0x620C -0x620D -0x620E -0x6210 -0x6211 -0x6212 -0x6214 -0x6215 -0x6216 -0x6219 -0x621A -0x621B -0x621F -0x6220 -0x6221 -0x6222 -0x6223 -0x6224 -0x6225 -0x6227 -0x6229 -0x622A -0x622B -0x622D -0x622E -0x6230 -0x6232 -0x6233 -0x6234 -0x6236 -0x623A -0x623D -0x623E -0x623F -0x6240 -0x6241 -0x6242 -0x6243 -0x6246 -0x6247 -0x6248 -0x6249 -0x624A -0x624B -0x624D -0x624E -0x6250 -0x6251 -0x6252 -0x6253 -0x6254 -0x6258 -0x6259 -0x625A -0x625B -0x625C -0x625E -0x6260 -0x6261 -0x6262 -0x6263 -0x6264 -0x6265 -0x6266 -0x626D -0x626E -0x626F -0x6270 -0x6271 -0x6272 -0x6273 -0x6274 -0x6276 -0x6277 -0x6279 -0x627A -0x627B -0x627C -0x627D -0x627E -0x627F -0x6280 -0x6281 -0x6283 -0x6284 -0x6286 -0x6287 -0x6288 -0x6289 -0x628A -0x628C -0x628E -0x628F -0x6291 -0x6292 -0x6293 -0x6294 -0x6295 -0x6296 -0x6297 -0x6298 -0x62A8 -0x62A9 -0x62AA -0x62AB -0x62AC -0x62AD -0x62AE -0x62AF -0x62B0 -0x62B1 -0x62B3 -0x62B4 -0x62B5 -0x62B6 -0x62B8 -0x62B9 -0x62BB -0x62BC -0x62BD -0x62BE -0x62BF -0x62C2 -0x62C4 -0x62C6 -0x62C7 -0x62C8 -0x62C9 -0x62CA -0x62CB -0x62CC -0x62CD -0x62CE -0x62CF -0x62D0 -0x62D1 -0x62D2 -0x62D3 -0x62D4 -0x62D6 -0x62D7 -0x62D8 -0x62D9 -0x62DA -0x62DB -0x62DC -0x62EB -0x62EC -0x62ED -0x62EE -0x62EF -0x62F0 -0x62F1 -0x62F2 -0x62F3 -0x62F4 -0x62F5 -0x62F6 -0x62F7 -0x62F8 -0x62F9 -0x62FA -0x62FB -0x62FC -0x62FD -0x62FE -0x62FF -0x6300 -0x6301 -0x6302 -0x6303 -0x6307 -0x6308 -0x6309 -0x630B -0x630C -0x630D -0x630E -0x630F -0x6310 -0x6311 -0x6313 -0x6314 -0x6315 -0x6316 -0x6328 -0x6329 -0x632A -0x632B -0x632C -0x632D -0x632F -0x6332 -0x6333 -0x6334 -0x6336 -0x6338 -0x6339 -0x633A -0x633B -0x633C -0x633D -0x633E -0x6340 -0x6341 -0x6342 -0x6343 -0x6344 -0x6345 -0x6346 -0x6347 -0x6348 -0x6349 -0x634A -0x634B -0x634C -0x634D -0x634E -0x634F -0x6350 -0x6351 -0x6354 -0x6355 -0x6356 -0x6357 -0x6358 -0x6359 -0x635A -0x6365 -0x6367 -0x6368 -0x6369 -0x636B -0x636D -0x636E -0x636F -0x6370 -0x6371 -0x6372 -0x6375 -0x6376 -0x6377 -0x6378 -0x637A -0x637B -0x637C -0x637D -0x6380 -0x6381 -0x6382 -0x6383 -0x6384 -0x6385 -0x6387 -0x6388 -0x6389 -0x638A -0x638C -0x638D -0x638E -0x638F -0x6390 -0x6391 -0x6392 -0x6394 -0x6396 -0x6397 -0x6398 -0x6399 -0x639B -0x639C -0x639D -0x639E -0x639F -0x63A0 -0x63A1 -0x63A2 -0x63A3 -0x63A4 -0x63A5 -0x63A7 -0x63A8 -0x63A9 -0x63AA -0x63AB -0x63AC -0x63AD -0x63AE -0x63AF -0x63B0 -0x63B1 -0x63BD -0x63BE -0x63C0 -0x63C2 -0x63C3 -0x63C4 -0x63C5 -0x63C6 -0x63C7 -0x63C8 -0x63C9 -0x63CA -0x63CB -0x63CC -0x63CD -0x63CE -0x63CF -0x63D0 -0x63D2 -0x63D3 -0x63D5 -0x63D6 -0x63D7 -0x63D8 -0x63D9 -0x63DA -0x63DB -0x63DC -0x63DD -0x63DF -0x63E0 -0x63E1 -0x63E3 -0x63E4 -0x63E5 -0x63E7 -0x63E8 -0x63E9 -0x63EA -0x63EB -0x63ED -0x63EE -0x63EF -0x63F0 -0x63F1 -0x63F2 -0x63F3 -0x63F4 -0x63F5 -0x63F6 -0x63F9 -0x6406 -0x6409 -0x640A -0x640B -0x640C -0x640D -0x640E -0x640F -0x6410 -0x6412 -0x6413 -0x6414 -0x6415 -0x6416 -0x6417 -0x6418 -0x641A -0x641B -0x641C -0x641E -0x641F -0x6420 -0x6421 -0x6422 -0x6423 -0x6424 -0x6425 -0x6426 -0x6427 -0x6428 -0x642A -0x642B -0x642C -0x642D -0x642E -0x642F -0x6430 -0x6433 -0x6434 -0x6435 -0x6436 -0x6437 -0x6439 -0x643D -0x643E -0x643F -0x6440 -0x6441 -0x6443 -0x644B -0x644D -0x644E -0x6450 -0x6451 -0x6452 -0x6453 -0x6454 -0x6458 -0x6459 -0x645B -0x645C -0x645D -0x645E -0x645F -0x6460 -0x6461 -0x6465 -0x6466 -0x6467 -0x6468 -0x6469 -0x646B -0x646C -0x646D -0x646E -0x646F -0x6470 -0x6472 -0x6473 -0x6474 -0x6475 -0x6476 -0x6477 -0x6478 -0x6479 -0x647A -0x647B -0x647D -0x647F -0x6482 -0x6485 -0x6487 -0x6488 -0x6489 -0x648A -0x648B -0x648C -0x648F -0x6490 -0x6492 -0x6493 -0x6495 -0x6496 -0x6497 -0x6498 -0x6499 -0x649A -0x649C -0x649D -0x649E -0x649F -0x64A0 -0x64A2 -0x64A3 -0x64A4 -0x64A5 -0x64A6 -0x64A9 -0x64AB -0x64AC -0x64AD -0x64AE -0x64B0 -0x64B1 -0x64B2 -0x64B3 -0x64BB -0x64BC -0x64BD -0x64BE -0x64BF -0x64C1 -0x64C2 -0x64C3 -0x64C4 -0x64C5 -0x64C7 -0x64C9 -0x64CA -0x64CB -0x64CD -0x64CE -0x64CF -0x64D0 -0x64D2 -0x64D4 -0x64D6 -0x64D7 -0x64D8 -0x64D9 -0x64DA -0x64DB -0x64E0 -0x64E2 -0x64E3 -0x64E4 -0x64E6 -0x64E8 -0x64E9 -0x64EB -0x64EC -0x64ED -0x64EF -0x64F0 -0x64F1 -0x64F2 -0x64F3 -0x64F4 -0x64F7 -0x64F8 -0x64FA -0x64FB -0x64FC -0x64FD -0x64FE -0x64FF -0x6500 -0x6501 -0x6503 -0x6504 -0x6506 -0x6507 -0x6509 -0x650C -0x650D -0x650E -0x650F -0x6510 -0x6513 -0x6514 -0x6515 -0x6516 -0x6517 -0x6518 -0x6519 -0x651B -0x651C -0x651D -0x6520 -0x6521 -0x6522 -0x6523 -0x6524 -0x6525 -0x6526 -0x6529 -0x652A -0x652B -0x652C -0x652D -0x652E -0x652F -0x6532 -0x6533 -0x6536 -0x6537 -0x6538 -0x6539 -0x653B -0x653D -0x653E -0x653F -0x6541 -0x6543 -0x6545 -0x6546 -0x6548 -0x6549 -0x654A -0x654F -0x6551 -0x6553 -0x6554 -0x6555 -0x6556 -0x6557 -0x6558 -0x6559 -0x655C -0x655D -0x655E -0x6562 -0x6563 -0x6564 -0x6565 -0x6566 -0x6567 -0x6568 -0x656A -0x656C -0x656F -0x6572 -0x6573 -0x6574 -0x6575 -0x6576 -0x6577 -0x6578 -0x6579 -0x657A -0x657B -0x657C -0x657F -0x6580 -0x6581 -0x6582 -0x6583 -0x6584 -0x6587 -0x658C -0x6590 -0x6591 -0x6592 -0x6594 -0x6595 -0x6596 -0x6597 -0x6599 -0x659B -0x659C -0x659D -0x659E -0x659F -0x65A0 -0x65A1 -0x65A2 -0x65A4 -0x65A5 -0x65A7 -0x65A8 -0x65AA -0x65AB -0x65AC -0x65AE -0x65AF -0x65B0 -0x65B2 -0x65B3 -0x65B6 -0x65B7 -0x65B8 -0x65B9 -0x65BB -0x65BC -0x65BD -0x65BF -0x65C1 -0x65C2 -0x65C3 -0x65C4 -0x65C5 -0x65C6 -0x65CB -0x65CC -0x65CD -0x65CE -0x65CF -0x65D0 -0x65D2 -0x65D3 -0x65D6 -0x65D7 -0x65DA -0x65DB -0x65DD -0x65DE -0x65DF -0x65E1 -0x65E2 -0x65E5 -0x65E6 -0x65E8 -0x65E9 -0x65EC -0x65ED -0x65EE -0x65EF -0x65F0 -0x65F1 -0x65F2 -0x65F3 -0x65F4 -0x65F5 -0x65FA -0x65FB -0x65FC -0x65FD -0x6600 -0x6602 -0x6603 -0x6604 -0x6605 -0x6606 -0x6607 -0x6608 -0x6609 -0x660A -0x660B -0x660C -0x660D -0x660E -0x660F -0x6610 -0x6611 -0x6612 -0x6613 -0x6614 -0x6615 -0x661C -0x661D -0x661F -0x6620 -0x6621 -0x6622 -0x6624 -0x6625 -0x6626 -0x6627 -0x6628 -0x662B -0x662D -0x662E -0x662F -0x6631 -0x6632 -0x6633 -0x6634 -0x6635 -0x6636 -0x6639 -0x663A -0x6641 -0x6642 -0x6643 -0x6645 -0x6647 -0x6649 -0x664A -0x664C -0x664F -0x6651 -0x6652 -0x6659 -0x665A -0x665B -0x665C -0x665D -0x665E -0x665F -0x6661 -0x6662 -0x6664 -0x6665 -0x6666 -0x6668 -0x666A -0x666C -0x666E -0x666F -0x6670 -0x6671 -0x6672 -0x6674 -0x6676 -0x6677 -0x6678 -0x6679 -0x667A -0x667B -0x667C -0x667E -0x6680 -0x6684 -0x6686 -0x6687 -0x6688 -0x6689 -0x668A -0x668B -0x668C -0x668D -0x6690 -0x6691 -0x6694 -0x6695 -0x6696 -0x6697 -0x6698 -0x6699 -0x669D -0x669F -0x66A0 -0x66A1 -0x66A2 -0x66A8 -0x66A9 -0x66AA -0x66AB -0x66AE -0x66AF -0x66B0 -0x66B1 -0x66B2 -0x66B4 -0x66B5 -0x66B7 -0x66B8 -0x66B9 -0x66BA -0x66BB -0x66BD -0x66BE -0x66C0 -0x66C4 -0x66C6 -0x66C7 -0x66C8 -0x66C9 -0x66CA -0x66CB -0x66CC -0x66CF -0x66D2 -0x66D6 -0x66D8 -0x66D9 -0x66DA -0x66DB -0x66DC -0x66DD -0x66DE -0x66E0 -0x66E3 -0x66E4 -0x66E6 -0x66E8 -0x66E9 -0x66EB -0x66EC -0x66ED -0x66EE -0x66F0 -0x66F2 -0x66F3 -0x66F4 -0x66F6 -0x66F7 -0x66F8 -0x66F9 -0x66FC -0x66FE -0x66FF -0x6700 -0x6701 -0x6703 -0x6704 -0x6705 -0x6708 -0x6709 -0x670A -0x670B -0x670D -0x670F -0x6710 -0x6712 -0x6713 -0x6714 -0x6715 -0x6717 -0x6718 -0x671B -0x671D -0x671F -0x6720 -0x6721 -0x6722 -0x6723 -0x6726 -0x6727 -0x6728 -0x672A -0x672B -0x672C -0x672D -0x672E -0x6731 -0x6733 -0x6734 -0x6735 -0x6738 -0x6739 -0x673A -0x673B -0x673C -0x673D -0x673E -0x673F -0x6745 -0x6746 -0x6747 -0x6748 -0x6749 -0x674B -0x674C -0x674D -0x674E -0x674F -0x6750 -0x6751 -0x6753 -0x6755 -0x6756 -0x6757 -0x6759 -0x675A -0x675C -0x675D -0x675E -0x675F -0x6760 -0x676A -0x676C -0x676D -0x676F -0x6770 -0x6771 -0x6772 -0x6773 -0x6774 -0x6775 -0x6776 -0x6777 -0x6778 -0x6779 -0x677A -0x677B -0x677C -0x677D -0x677E -0x677F -0x6781 -0x6783 -0x6784 -0x6785 -0x6786 -0x6787 -0x6789 -0x678B -0x678C -0x678D -0x678E -0x6790 -0x6791 -0x6792 -0x6793 -0x6794 -0x6795 -0x6797 -0x6798 -0x6799 -0x679A -0x679C -0x679D -0x679F -0x67AE -0x67AF -0x67B0 -0x67B2 -0x67B3 -0x67B4 -0x67B5 -0x67B6 -0x67B7 -0x67B8 -0x67B9 -0x67BA -0x67BB -0x67C0 -0x67C1 -0x67C2 -0x67C3 -0x67C4 -0x67C5 -0x67C6 -0x67C8 -0x67C9 -0x67CA -0x67CB -0x67CC -0x67CD -0x67CE -0x67CF -0x67D0 -0x67D1 -0x67D2 -0x67D3 -0x67D4 -0x67D8 -0x67D9 -0x67DA -0x67DB -0x67DC -0x67DD -0x67DE -0x67DF -0x67E2 -0x67E3 -0x67E4 -0x67E5 -0x67E6 -0x67E7 -0x67E9 -0x67EA -0x67EB -0x67EC -0x67ED -0x67EE -0x67EF -0x67F0 -0x67F1 -0x67F2 -0x67F3 -0x67F4 -0x67F5 -0x67F6 -0x67F7 -0x67F8 -0x67FA -0x67FC -0x67FF -0x6812 -0x6813 -0x6814 -0x6816 -0x6817 -0x6818 -0x681A -0x681C -0x681D -0x681F -0x6820 -0x6821 -0x6825 -0x6826 -0x6828 -0x6829 -0x682A -0x682B -0x682D -0x682E -0x682F -0x6831 -0x6832 -0x6833 -0x6834 -0x6835 -0x6838 -0x6839 -0x683A -0x683B -0x683C -0x683D -0x6840 -0x6841 -0x6842 -0x6843 -0x6844 -0x6845 -0x6846 -0x6848 -0x6849 -0x684B -0x684C -0x684D -0x684E -0x684F -0x6850 -0x6851 -0x6853 -0x6854 -0x686B -0x686D -0x686E -0x686F -0x6871 -0x6872 -0x6874 -0x6875 -0x6876 -0x6877 -0x6878 -0x6879 -0x687B -0x687C -0x687D -0x687E -0x687F -0x6880 -0x6881 -0x6882 -0x6883 -0x6885 -0x6886 -0x6887 -0x6889 -0x688A -0x688B -0x688C -0x688F -0x6890 -0x6891 -0x6892 -0x6893 -0x6894 -0x6896 -0x6897 -0x689B -0x689C -0x689D -0x689F -0x68A0 -0x68A1 -0x68A2 -0x68A3 -0x68A4 -0x68A7 -0x68A8 -0x68A9 -0x68AA -0x68AB -0x68AC -0x68AD -0x68AE -0x68AF -0x68B0 -0x68B1 -0x68B2 -0x68B3 -0x68B4 -0x68B5 -0x68C4 -0x68C6 -0x68C7 -0x68C8 -0x68C9 -0x68CB -0x68CC -0x68CD -0x68CE -0x68D0 -0x68D1 -0x68D2 -0x68D3 -0x68D4 -0x68D5 -0x68D6 -0x68D7 -0x68D8 -0x68DA -0x68DC -0x68DD -0x68DE -0x68DF -0x68E0 -0x68E1 -0x68E3 -0x68E4 -0x68E6 -0x68E7 -0x68E8 -0x68E9 -0x68EA -0x68EB -0x68EC -0x68EE -0x68EF -0x68F0 -0x68F1 -0x68F2 -0x68F3 -0x68F4 -0x68F5 -0x68F6 -0x68F7 -0x68F8 -0x68F9 -0x68FA -0x68FB -0x68FC -0x68FD -0x6904 -0x6905 -0x6906 -0x6907 -0x6908 -0x690A -0x690B -0x690C -0x690D -0x690E -0x690F -0x6910 -0x6911 -0x6912 -0x6913 -0x6914 -0x6915 -0x6917 -0x6925 -0x692A -0x692F -0x6930 -0x6932 -0x6933 -0x6934 -0x6935 -0x6937 -0x6938 -0x6939 -0x693B -0x693C -0x693D -0x693F -0x6940 -0x6941 -0x6942 -0x6944 -0x6945 -0x6948 -0x6949 -0x694A -0x694B -0x694C -0x694E -0x694F -0x6951 -0x6952 -0x6953 -0x6954 -0x6956 -0x6957 -0x6958 -0x6959 -0x695A -0x695B -0x695C -0x695D -0x695E -0x695F -0x6960 -0x6962 -0x6963 -0x6965 -0x6966 -0x6968 -0x6969 -0x696A -0x696B -0x696C -0x696D -0x696E -0x696F -0x6970 -0x6971 -0x6974 -0x6975 -0x6976 -0x6977 -0x6978 -0x6979 -0x697A -0x697B -0x6982 -0x6983 -0x6986 -0x698D -0x698E -0x6990 -0x6991 -0x6993 -0x6994 -0x6995 -0x6996 -0x6997 -0x6999 -0x699A -0x699B -0x699C -0x699E -0x69A0 -0x69A1 -0x69A3 -0x69A4 -0x69A5 -0x69A6 -0x69A7 -0x69A8 -0x69A9 -0x69AA -0x69AB -0x69AC -0x69AD -0x69AE -0x69AF -0x69B0 -0x69B1 -0x69B3 -0x69B4 -0x69B5 -0x69B6 -0x69B7 -0x69B9 -0x69BB -0x69BC -0x69BD -0x69BE -0x69BF -0x69C1 -0x69C2 -0x69C3 -0x69C4 -0x69C6 -0x69C9 -0x69CA -0x69CB -0x69CC -0x69CD -0x69CE -0x69CF -0x69D0 -0x69D3 -0x69D4 -0x69D9 -0x69E2 -0x69E4 -0x69E5 -0x69E6 -0x69E7 -0x69E8 -0x69EB -0x69EC -0x69ED -0x69EE -0x69F1 -0x69F2 -0x69F3 -0x69F4 -0x69F6 -0x69F7 -0x69F8 -0x69FB -0x69FC -0x69FD -0x69FE -0x69FF -0x6A00 -0x6A01 -0x6A02 -0x6A04 -0x6A05 -0x6A06 -0x6A07 -0x6A08 -0x6A09 -0x6A0A -0x6A0D -0x6A0F -0x6A11 -0x6A13 -0x6A14 -0x6A15 -0x6A16 -0x6A17 -0x6A18 -0x6A19 -0x6A1B -0x6A1D -0x6A1E -0x6A1F -0x6A20 -0x6A21 -0x6A23 -0x6A25 -0x6A26 -0x6A27 -0x6A28 -0x6A32 -0x6A34 -0x6A35 -0x6A38 -0x6A39 -0x6A3A -0x6A3B -0x6A3C -0x6A3D -0x6A3E -0x6A3F -0x6A40 -0x6A41 -0x6A44 -0x6A46 -0x6A47 -0x6A48 -0x6A49 -0x6A4B -0x6A4D -0x6A4E -0x6A4F -0x6A50 -0x6A51 -0x6A54 -0x6A55 -0x6A56 -0x6A58 -0x6A59 -0x6A5A -0x6A5B -0x6A5D -0x6A5E -0x6A5F -0x6A60 -0x6A61 -0x6A62 -0x6A64 -0x6A66 -0x6A67 -0x6A68 -0x6A69 -0x6A6A -0x6A6B -0x6A6D -0x6A6F -0x6A76 -0x6A7E -0x6A7F -0x6A80 -0x6A81 -0x6A83 -0x6A84 -0x6A85 -0x6A87 -0x6A89 -0x6A8C -0x6A8D -0x6A8E -0x6A90 -0x6A91 -0x6A92 -0x6A93 -0x6A94 -0x6A95 -0x6A96 -0x6A97 -0x6A9A -0x6A9B -0x6A9C -0x6A9E -0x6A9F -0x6AA0 -0x6AA1 -0x6AA2 -0x6AA3 -0x6AA4 -0x6AA5 -0x6AA6 -0x6AA8 -0x6AAC -0x6AAD -0x6AAE -0x6AAF -0x6AB3 -0x6AB4 -0x6AB6 -0x6AB7 -0x6AB8 -0x6AB9 -0x6ABA -0x6ABB -0x6ABD -0x6AC2 -0x6AC3 -0x6AC5 -0x6AC6 -0x6AC7 -0x6ACB -0x6ACC -0x6ACD -0x6ACF -0x6AD0 -0x6AD1 -0x6AD3 -0x6AD9 -0x6ADA -0x6ADB -0x6ADC -0x6ADD -0x6ADE -0x6ADF -0x6AE0 -0x6AE1 -0x6AE5 -0x6AE7 -0x6AE8 -0x6AEA -0x6AEB -0x6AEC -0x6AEE -0x6AEF -0x6AF0 -0x6AF1 -0x6AF3 -0x6AF8 -0x6AF9 -0x6AFA -0x6AFB -0x6AFC -0x6B00 -0x6B02 -0x6B03 -0x6B04 -0x6B08 -0x6B09 -0x6B0A -0x6B0B -0x6B0F -0x6B10 -0x6B11 -0x6B12 -0x6B13 -0x6B16 -0x6B17 -0x6B18 -0x6B19 -0x6B1A -0x6B1E -0x6B20 -0x6B21 -0x6B23 -0x6B25 -0x6B28 -0x6B2C -0x6B2D -0x6B2F -0x6B31 -0x6B32 -0x6B33 -0x6B34 -0x6B36 -0x6B37 -0x6B38 -0x6B39 -0x6B3A -0x6B3B -0x6B3C -0x6B3D -0x6B3E -0x6B3F -0x6B41 -0x6B42 -0x6B43 -0x6B45 -0x6B46 -0x6B47 -0x6B48 -0x6B49 -0x6B4A -0x6B4B -0x6B4C -0x6B4D -0x6B4E -0x6B50 -0x6B51 -0x6B54 -0x6B55 -0x6B56 -0x6B59 -0x6B5B -0x6B5C -0x6B5E -0x6B5F -0x6B60 -0x6B61 -0x6B62 -0x6B63 -0x6B64 -0x6B65 -0x6B66 -0x6B67 -0x6B6A -0x6B6D -0x6B72 -0x6B76 -0x6B77 -0x6B78 -0x6B79 -0x6B7B -0x6B7E -0x6B7F -0x6B80 -0x6B82 -0x6B83 -0x6B84 -0x6B86 -0x6B88 -0x6B89 -0x6B8A -0x6B8C -0x6B8D -0x6B8E -0x6B8F -0x6B91 -0x6B94 -0x6B95 -0x6B96 -0x6B97 -0x6B98 -0x6B99 -0x6B9B -0x6B9E -0x6B9F -0x6BA0 -0x6BA2 -0x6BA3 -0x6BA4 -0x6BA5 -0x6BA6 -0x6BA7 -0x6BAA -0x6BAB -0x6BAD -0x6BAE -0x6BAF -0x6BB0 -0x6BB2 -0x6BB3 -0x6BB5 -0x6BB6 -0x6BB7 -0x6BBA -0x6BBC -0x6BBD -0x6BBF -0x6BC0 -0x6BC3 -0x6BC4 -0x6BC5 -0x6BC6 -0x6BC7 -0x6BC8 -0x6BC9 -0x6BCA -0x6BCB -0x6BCC -0x6BCD -0x6BCF -0x6BD0 -0x6BD2 -0x6BD3 -0x6BD4 -0x6BD6 -0x6BD7 -0x6BD8 -0x6BDA -0x6BDB -0x6BDE -0x6BE0 -0x6BE2 -0x6BE3 -0x6BE4 -0x6BE6 -0x6BE7 -0x6BE8 -0x6BEB -0x6BEC -0x6BEF -0x6BF0 -0x6BF2 -0x6BF3 -0x6BF7 -0x6BF8 -0x6BF9 -0x6BFB -0x6BFC -0x6BFD -0x6BFE -0x6BFF -0x6C00 -0x6C01 -0x6C02 -0x6C03 -0x6C04 -0x6C05 -0x6C06 -0x6C08 -0x6C09 -0x6C0B -0x6C0C -0x6C0D -0x6C0F -0x6C10 -0x6C11 -0x6C13 -0x6C14 -0x6C15 -0x6C16 -0x6C18 -0x6C19 -0x6C1A -0x6C1B -0x6C1D -0x6C1F -0x6C20 -0x6C21 -0x6C23 -0x6C24 -0x6C25 -0x6C26 -0x6C27 -0x6C28 -0x6C2A -0x6C2B -0x6C2C -0x6C2E -0x6C2F -0x6C30 -0x6C33 -0x6C34 -0x6C36 -0x6C38 -0x6C3B -0x6C3E -0x6C3F -0x6C40 -0x6C41 -0x6C42 -0x6C43 -0x6C46 -0x6C4A -0x6C4B -0x6C4C -0x6C4D -0x6C4E -0x6C4F -0x6C50 -0x6C52 -0x6C54 -0x6C55 -0x6C57 -0x6C59 -0x6C5B -0x6C5C -0x6C5D -0x6C5E -0x6C5F -0x6C60 -0x6C61 -0x6C65 -0x6C66 -0x6C67 -0x6C68 -0x6C69 -0x6C6A -0x6C6B -0x6C6D -0x6C6F -0x6C70 -0x6C71 -0x6C72 -0x6C73 -0x6C74 -0x6C76 -0x6C78 -0x6C7A -0x6C7B -0x6C7D -0x6C7E -0x6C80 -0x6C81 -0x6C82 -0x6C83 -0x6C84 -0x6C85 -0x6C86 -0x6C87 -0x6C88 -0x6C89 -0x6C8A -0x6C8B -0x6C8C -0x6C8D -0x6C8E -0x6C8F -0x6C90 -0x6C92 -0x6C93 -0x6C94 -0x6C95 -0x6C96 -0x6C98 -0x6C99 -0x6C9A -0x6C9B -0x6C9C -0x6C9D -0x6CAB -0x6CAC -0x6CAD -0x6CAE -0x6CB0 -0x6CB1 -0x6CB3 -0x6CB4 -0x6CB6 -0x6CB7 -0x6CB8 -0x6CB9 -0x6CBA -0x6CBB -0x6CBC -0x6CBD -0x6CBE -0x6CBF -0x6CC0 -0x6CC1 -0x6CC2 -0x6CC3 -0x6CC4 -0x6CC5 -0x6CC6 -0x6CC7 -0x6CC9 -0x6CCA -0x6CCC -0x6CCD -0x6CCF -0x6CD0 -0x6CD1 -0x6CD2 -0x6CD3 -0x6CD4 -0x6CD5 -0x6CD6 -0x6CD7 -0x6CD9 -0x6CDA -0x6CDB -0x6CDC -0x6CDD -0x6CDE -0x6CE0 -0x6CE1 -0x6CE2 -0x6CE3 -0x6CE5 -0x6CE7 -0x6CE8 -0x6CE9 -0x6CEB -0x6CEC -0x6CED -0x6CEE -0x6CEF -0x6CF0 -0x6CF1 -0x6CF2 -0x6CF3 -0x6CF5 -0x6CF9 -0x6D00 -0x6D01 -0x6D03 -0x6D04 -0x6D07 -0x6D08 -0x6D09 -0x6D0A -0x6D0B -0x6D0C -0x6D0D -0x6D0E -0x6D0F -0x6D10 -0x6D11 -0x6D12 -0x6D16 -0x6D17 -0x6D18 -0x6D19 -0x6D1A -0x6D1B -0x6D1D -0x6D1E -0x6D1F -0x6D20 -0x6D22 -0x6D25 -0x6D27 -0x6D28 -0x6D29 -0x6D2A -0x6D2B -0x6D2C -0x6D2D -0x6D2E -0x6D2F -0x6D30 -0x6D31 -0x6D32 -0x6D33 -0x6D34 -0x6D35 -0x6D36 -0x6D37 -0x6D38 -0x6D39 -0x6D3A -0x6D3B -0x6D3C -0x6D3D -0x6D3E -0x6D3F -0x6D40 -0x6D41 -0x6D42 -0x6D58 -0x6D59 -0x6D5A -0x6D5E -0x6D5F -0x6D60 -0x6D61 -0x6D62 -0x6D63 -0x6D64 -0x6D65 -0x6D66 -0x6D67 -0x6D68 -0x6D69 -0x6D6A -0x6D6C -0x6D6D -0x6D6E -0x6D6F -0x6D70 -0x6D74 -0x6D75 -0x6D76 -0x6D77 -0x6D78 -0x6D79 -0x6D7A -0x6D7B -0x6D7C -0x6D7D -0x6D7E -0x6D7F -0x6D80 -0x6D82 -0x6D83 -0x6D84 -0x6D85 -0x6D86 -0x6D87 -0x6D88 -0x6D89 -0x6D8A -0x6D8B -0x6D8C -0x6D8D -0x6D8E -0x6D90 -0x6D91 -0x6D92 -0x6D93 -0x6D94 -0x6D95 -0x6D97 -0x6D98 -0x6DAA -0x6DAB -0x6DAC -0x6DAE -0x6DAF -0x6DB2 -0x6DB3 -0x6DB4 -0x6DB5 -0x6DB7 -0x6DB8 -0x6DBA -0x6DBB -0x6DBC -0x6DBD -0x6DBE -0x6DBF -0x6DC0 -0x6DC2 -0x6DC4 -0x6DC5 -0x6DC6 -0x6DC7 -0x6DC8 -0x6DC9 -0x6DCA -0x6DCB -0x6DCC -0x6DCD -0x6DCF -0x6DD0 -0x6DD1 -0x6DD2 -0x6DD3 -0x6DD4 -0x6DD5 -0x6DD6 -0x6DD7 -0x6DD8 -0x6DD9 -0x6DDA -0x6DDB -0x6DDC -0x6DDD -0x6DDE -0x6DDF -0x6DE0 -0x6DE1 -0x6DE2 -0x6DE3 -0x6DE4 -0x6DE5 -0x6DE6 -0x6DE8 -0x6DE9 -0x6DEA -0x6DEB -0x6DEC -0x6DED -0x6DEE -0x6DEF -0x6DF0 -0x6DF1 -0x6DF2 -0x6DF3 -0x6DF4 -0x6DF5 -0x6DF6 -0x6DF7 -0x6DF9 -0x6DFA -0x6DFB -0x6DFC -0x6DFD -0x6E00 -0x6E03 -0x6E05 -0x6E19 -0x6E1A -0x6E1B -0x6E1C -0x6E1D -0x6E1F -0x6E20 -0x6E21 -0x6E22 -0x6E23 -0x6E24 -0x6E25 -0x6E26 -0x6E27 -0x6E28 -0x6E2B -0x6E2C -0x6E2D -0x6E2E -0x6E2F -0x6E30 -0x6E31 -0x6E32 -0x6E33 -0x6E34 -0x6E35 -0x6E36 -0x6E38 -0x6E39 -0x6E3A -0x6E3B -0x6E3C -0x6E3D -0x6E3E -0x6E3F -0x6E40 -0x6E41 -0x6E43 -0x6E44 -0x6E45 -0x6E46 -0x6E47 -0x6E49 -0x6E4A -0x6E4B -0x6E4D -0x6E4E -0x6E51 -0x6E52 -0x6E53 -0x6E54 -0x6E55 -0x6E56 -0x6E58 -0x6E5A -0x6E5B -0x6E5C -0x6E5D -0x6E5E -0x6E5F -0x6E60 -0x6E61 -0x6E62 -0x6E63 -0x6E64 -0x6E65 -0x6E66 -0x6E67 -0x6E68 -0x6E69 -0x6E6B -0x6E6E -0x6E6F -0x6E71 -0x6E72 -0x6E73 -0x6E74 -0x6E77 -0x6E78 -0x6E79 -0x6E88 -0x6E89 -0x6E8D -0x6E8E -0x6E8F -0x6E90 -0x6E92 -0x6E93 -0x6E94 -0x6E96 -0x6E97 -0x6E98 -0x6E99 -0x6E9B -0x6E9C -0x6E9D -0x6E9E -0x6E9F -0x6EA0 -0x6EA1 -0x6EA2 -0x6EA3 -0x6EA4 -0x6EA5 -0x6EA6 -0x6EA7 -0x6EAA -0x6EAB -0x6EAE -0x6EAF -0x6EB0 -0x6EB1 -0x6EB2 -0x6EB3 -0x6EB4 -0x6EB6 -0x6EB7 -0x6EB9 -0x6EBA -0x6EBC -0x6EBD -0x6EBE -0x6EBF -0x6EC0 -0x6EC1 -0x6EC2 -0x6EC3 -0x6EC4 -0x6EC5 -0x6EC6 -0x6EC7 -0x6EC8 -0x6EC9 -0x6ECA -0x6ECB -0x6ECC -0x6ECD -0x6ECE -0x6ECF -0x6ED0 -0x6ED1 -0x6ED2 -0x6ED3 -0x6ED4 -0x6ED5 -0x6ED6 -0x6ED8 -0x6EDC -0x6EEB -0x6EEC -0x6EED -0x6EEE -0x6EEF -0x6EF1 -0x6EF2 -0x6EF4 -0x6EF5 -0x6EF6 -0x6EF7 -0x6EF8 -0x6EF9 -0x6EFB -0x6EFC -0x6EFD -0x6EFE -0x6EFF -0x6F00 -0x6F01 -0x6F02 -0x6F03 -0x6F05 -0x6F06 -0x6F07 -0x6F08 -0x6F09 -0x6F0A -0x6F0D -0x6F0E -0x6F0F -0x6F12 -0x6F13 -0x6F14 -0x6F15 -0x6F18 -0x6F19 -0x6F1A -0x6F1C -0x6F1E -0x6F1F -0x6F20 -0x6F21 -0x6F22 -0x6F23 -0x6F25 -0x6F26 -0x6F27 -0x6F29 -0x6F2A -0x6F2B -0x6F2C -0x6F2D -0x6F2E -0x6F2F -0x6F30 -0x6F31 -0x6F32 -0x6F33 -0x6F35 -0x6F36 -0x6F37 -0x6F38 -0x6F39 -0x6F3A -0x6F3B -0x6F3C -0x6F3E -0x6F3F -0x6F40 -0x6F41 -0x6F43 -0x6F4E -0x6F4F -0x6F50 -0x6F51 -0x6F52 -0x6F53 -0x6F54 -0x6F55 -0x6F57 -0x6F58 -0x6F5A -0x6F5B -0x6F5D -0x6F5E -0x6F5F -0x6F60 -0x6F61 -0x6F62 -0x6F63 -0x6F64 -0x6F66 -0x6F67 -0x6F69 -0x6F6A -0x6F6B -0x6F6C -0x6F6D -0x6F6E -0x6F6F -0x6F70 -0x6F72 -0x6F73 -0x6F76 -0x6F77 -0x6F78 -0x6F7A -0x6F7B -0x6F7C -0x6F7D -0x6F7E -0x6F7F -0x6F80 -0x6F82 -0x6F84 -0x6F85 -0x6F86 -0x6F87 -0x6F88 -0x6F89 -0x6F8B -0x6F8C -0x6F8D -0x6F8E -0x6F90 -0x6F92 -0x6F93 -0x6F94 -0x6F95 -0x6F96 -0x6F97 -0x6F9E -0x6FA0 -0x6FA1 -0x6FA2 -0x6FA3 -0x6FA4 -0x6FA5 -0x6FA6 -0x6FA7 -0x6FA8 -0x6FA9 -0x6FAA -0x6FAB -0x6FAC -0x6FAD -0x6FAE -0x6FAF -0x6FB0 -0x6FB1 -0x6FB2 -0x6FB3 -0x6FB4 -0x6FB6 -0x6FB8 -0x6FB9 -0x6FBA -0x6FBC -0x6FBD -0x6FBF -0x6FC0 -0x6FC1 -0x6FC2 -0x6FC3 -0x6FC4 -0x6FC6 -0x6FC7 -0x6FC8 -0x6FC9 -0x6FCA -0x6FCB -0x6FCC -0x6FCD -0x6FCE -0x6FCF -0x6FD4 -0x6FD5 -0x6FD8 -0x6FDB -0x6FDC -0x6FDD -0x6FDE -0x6FDF -0x6FE0 -0x6FE1 -0x6FE2 -0x6FE3 -0x6FE4 -0x6FE6 -0x6FE7 -0x6FE8 -0x6FE9 -0x6FEB -0x6FEC -0x6FED -0x6FEE -0x6FEF -0x6FF0 -0x6FF1 -0x6FF2 -0x6FF4 -0x6FF7 -0x6FFA -0x6FFB -0x6FFC -0x6FFE -0x6FFF -0x7000 -0x7001 -0x7004 -0x7005 -0x7006 -0x7007 -0x7009 -0x700A -0x700B -0x700C -0x700D -0x700E -0x700F -0x7011 -0x7014 -0x7015 -0x7016 -0x7017 -0x7018 -0x7019 -0x701A -0x701B -0x701C -0x701D -0x701F -0x7020 -0x7021 -0x7022 -0x7023 -0x7024 -0x7026 -0x7027 -0x7028 -0x7029 -0x702A -0x702B -0x702F -0x7030 -0x7031 -0x7032 -0x7033 -0x7034 -0x7035 -0x7037 -0x7038 -0x7039 -0x703A -0x703B -0x703C -0x703E -0x703F -0x7040 -0x7041 -0x7042 -0x7043 -0x7044 -0x7045 -0x7046 -0x7048 -0x7049 -0x704A -0x704C -0x7051 -0x7052 -0x7055 -0x7056 -0x7057 -0x7058 -0x705A -0x705B -0x705D -0x705E -0x705F -0x7060 -0x7061 -0x7062 -0x7063 -0x7064 -0x7065 -0x7066 -0x7068 -0x7069 -0x706A -0x706B -0x7070 -0x7071 -0x7074 -0x7076 -0x7078 -0x707A -0x707C -0x707D -0x7082 -0x7083 -0x7084 -0x7085 -0x7086 -0x708A -0x708E -0x7091 -0x7092 -0x7093 -0x7094 -0x7095 -0x7096 -0x7098 -0x7099 -0x709A -0x709F -0x70A1 -0x70A4 -0x70A9 -0x70AB -0x70AC -0x70AD -0x70AE -0x70AF -0x70B0 -0x70B1 -0x70B3 -0x70B4 -0x70B5 -0x70B7 -0x70B8 -0x70BA -0x70BE -0x70C5 -0x70C6 -0x70C7 -0x70C8 -0x70CA -0x70CB -0x70CD -0x70CE -0x70CF -0x70D1 -0x70D2 -0x70D3 -0x70D4 -0x70D7 -0x70D8 -0x70D9 -0x70DA -0x70DC -0x70DD -0x70DE -0x70E0 -0x70E1 -0x70E2 -0x70E4 -0x70EF -0x70F0 -0x70F3 -0x70F4 -0x70F6 -0x70F7 -0x70F8 -0x70F9 -0x70FA -0x70FB -0x70FC -0x70FD -0x70FF -0x7100 -0x7102 -0x7104 -0x7106 -0x7109 -0x710A -0x710B -0x710C -0x710D -0x710E -0x7110 -0x7113 -0x7117 -0x7119 -0x711A -0x711B -0x711C -0x711E -0x711F -0x7120 -0x7121 -0x7122 -0x7123 -0x7125 -0x7126 -0x7128 -0x712E -0x712F -0x7130 -0x7131 -0x7132 -0x7136 -0x713A -0x7141 -0x7142 -0x7143 -0x7144 -0x7146 -0x7147 -0x7149 -0x714B -0x714C -0x714D -0x714E -0x7150 -0x7152 -0x7153 -0x7154 -0x7156 -0x7158 -0x7159 -0x715A -0x715C -0x715D -0x715E -0x715F -0x7160 -0x7161 -0x7162 -0x7163 -0x7164 -0x7165 -0x7166 -0x7167 -0x7168 -0x7169 -0x716A -0x716C -0x716E -0x7170 -0x7172 -0x7178 -0x717B -0x717D -0x7180 -0x7181 -0x7182 -0x7184 -0x7185 -0x7186 -0x7187 -0x7189 -0x718A -0x718F -0x7190 -0x7192 -0x7194 -0x7197 -0x7199 -0x719A -0x719B -0x719C -0x719D -0x719E -0x719F -0x71A0 -0x71A1 -0x71A4 -0x71A5 -0x71A7 -0x71A8 -0x71A9 -0x71AA -0x71AC -0x71AF -0x71B0 -0x71B1 -0x71B2 -0x71B3 -0x71B5 -0x71B8 -0x71B9 -0x71BC -0x71BD -0x71BE -0x71BF -0x71C0 -0x71C1 -0x71C2 -0x71C3 -0x71C4 -0x71C5 -0x71C6 -0x71C7 -0x71C8 -0x71C9 -0x71CA -0x71CB -0x71CE -0x71CF -0x71D0 -0x71D2 -0x71D4 -0x71D5 -0x71D6 -0x71D8 -0x71D9 -0x71DA -0x71DB -0x71DC -0x71DF -0x71E0 -0x71E1 -0x71E2 -0x71E4 -0x71E5 -0x71E6 -0x71E7 -0x71E8 -0x71EC -0x71ED -0x71EE -0x71F0 -0x71F1 -0x71F2 -0x71F4 -0x71F8 -0x71F9 -0x71FB -0x71FC -0x71FD -0x71FE -0x71FF -0x7201 -0x7202 -0x7203 -0x7205 -0x7206 -0x7207 -0x720A -0x720C -0x720D -0x7210 -0x7213 -0x7214 -0x7219 -0x721A -0x721B -0x721D -0x721E -0x721F -0x7222 -0x7223 -0x7226 -0x7227 -0x7228 -0x7229 -0x722A -0x722C -0x722D -0x7230 -0x7235 -0x7236 -0x7238 -0x7239 -0x723A -0x723B -0x723D -0x723E -0x723F -0x7241 -0x7242 -0x7244 -0x7246 -0x7247 -0x7248 -0x7249 -0x724A -0x724B -0x724C -0x724F -0x7252 -0x7253 -0x7256 -0x7258 -0x7259 -0x725A -0x725B -0x725D -0x725E -0x725F -0x7260 -0x7261 -0x7262 -0x7263 -0x7267 -0x7269 -0x726A -0x726C -0x726E -0x726F -0x7270 -0x7272 -0x7273 -0x7274 -0x7276 -0x7277 -0x7278 -0x7279 -0x727B -0x727C -0x727D -0x727E -0x727F -0x7280 -0x7281 -0x7284 -0x7285 -0x7286 -0x7288 -0x7289 -0x728B -0x728C -0x728D -0x728E -0x7290 -0x7291 -0x7292 -0x7293 -0x7295 -0x7296 -0x7297 -0x7298 -0x729A -0x729B -0x729D -0x729E -0x72A1 -0x72A2 -0x72A3 -0x72A4 -0x72A5 -0x72A6 -0x72A7 -0x72A8 -0x72A9 -0x72AA -0x72AC -0x72AE -0x72AF -0x72B0 -0x72B4 -0x72B5 -0x72BA -0x72BD -0x72BF -0x72C0 -0x72C1 -0x72C2 -0x72C3 -0x72C4 -0x72C5 -0x72C6 -0x72C9 -0x72CA -0x72CB -0x72CC -0x72CE -0x72D0 -0x72D1 -0x72D2 -0x72D4 -0x72D6 -0x72D7 -0x72D8 -0x72D9 -0x72DA -0x72DC -0x72DF -0x72E0 -0x72E1 -0x72E3 -0x72E4 -0x72E6 -0x72E8 -0x72E9 -0x72EA -0x72EB -0x72F3 -0x72F4 -0x72F6 -0x72F7 -0x72F8 -0x72F9 -0x72FA -0x72FB -0x72FC -0x72FD -0x72FE -0x72FF -0x7300 -0x7301 -0x7307 -0x7308 -0x730A -0x730B -0x730C -0x730F -0x7311 -0x7312 -0x7313 -0x7316 -0x7317 -0x7318 -0x7319 -0x731B -0x731C -0x731D -0x731E -0x7322 -0x7323 -0x7325 -0x7326 -0x7327 -0x7329 -0x732D -0x7330 -0x7331 -0x7332 -0x7333 -0x7334 -0x7335 -0x7336 -0x7337 -0x733A -0x733B -0x733C -0x733E -0x733F -0x7340 -0x7342 -0x7343 -0x7344 -0x7345 -0x7349 -0x734A -0x734C -0x734D -0x734E -0x7350 -0x7351 -0x7352 -0x7357 -0x7358 -0x7359 -0x735A -0x735B -0x735D -0x735E -0x735F -0x7360 -0x7361 -0x7362 -0x7365 -0x7366 -0x7367 -0x7368 -0x7369 -0x736A -0x736B -0x736C -0x736E -0x736F -0x7370 -0x7372 -0x7373 -0x7375 -0x7376 -0x7377 -0x7378 -0x737A -0x737B -0x737C -0x737D -0x737E -0x737F -0x7380 -0x7381 -0x7382 -0x7383 -0x7384 -0x7385 -0x7386 -0x7387 -0x7388 -0x7389 -0x738A -0x738B -0x738E -0x7392 -0x7393 -0x7394 -0x7395 -0x7396 -0x7397 -0x739D -0x739F -0x73A0 -0x73A1 -0x73A2 -0x73A4 -0x73A5 -0x73A6 -0x73A8 -0x73A9 -0x73AB -0x73AC -0x73AD -0x73B2 -0x73B3 -0x73B4 -0x73B5 -0x73B6 -0x73B7 -0x73B8 -0x73B9 -0x73BB -0x73BC -0x73BE -0x73BF -0x73C0 -0x73C2 -0x73C3 -0x73C5 -0x73C6 -0x73C7 -0x73C8 -0x73CA -0x73CB -0x73CC -0x73CD -0x73D2 -0x73D3 -0x73D4 -0x73D6 -0x73D7 -0x73D8 -0x73D9 -0x73DA -0x73DB -0x73DC -0x73DD -0x73DE -0x73E0 -0x73E3 -0x73E5 -0x73E7 -0x73E8 -0x73E9 -0x73EA -0x73EB -0x73ED -0x73EE -0x73F4 -0x73F5 -0x73F6 -0x73F8 -0x73FA -0x73FC -0x73FD -0x73FE -0x73FF -0x7400 -0x7401 -0x7403 -0x7404 -0x7405 -0x7406 -0x7407 -0x7408 -0x7409 -0x740A -0x740B -0x740C -0x740D -0x7416 -0x741A -0x741B -0x741D -0x7420 -0x7421 -0x7422 -0x7423 -0x7424 -0x7425 -0x7426 -0x7428 -0x7429 -0x742A -0x742B -0x742C -0x742D -0x742E -0x742F -0x7430 -0x7431 -0x7432 -0x7433 -0x7434 -0x7435 -0x7436 -0x743A -0x743F -0x7440 -0x7441 -0x7442 -0x7444 -0x7446 -0x744A -0x744B -0x744D -0x744E -0x744F -0x7450 -0x7451 -0x7452 -0x7454 -0x7455 -0x7457 -0x7459 -0x745A -0x745B -0x745C -0x745E -0x745F -0x7462 -0x7463 -0x7464 -0x7467 -0x7469 -0x746A -0x746D -0x746E -0x746F -0x7470 -0x7471 -0x7472 -0x7473 -0x7475 -0x7479 -0x747C -0x747D -0x747E -0x747F -0x7480 -0x7481 -0x7483 -0x7485 -0x7486 -0x7487 -0x7488 -0x7489 -0x748A -0x748B -0x7490 -0x7492 -0x7494 -0x7495 -0x7497 -0x7498 -0x749A -0x749C -0x749E -0x749F -0x74A0 -0x74A1 -0x74A3 -0x74A5 -0x74A6 -0x74A7 -0x74A8 -0x74A9 -0x74AA -0x74AB -0x74AD -0x74AF -0x74B0 -0x74B1 -0x74B2 -0x74B5 -0x74B6 -0x74B7 -0x74B8 -0x74BA -0x74BB -0x74BD -0x74BE -0x74BF -0x74C0 -0x74C1 -0x74C2 -0x74C3 -0x74C5 -0x74CA -0x74CB -0x74CF -0x74D4 -0x74D5 -0x74D6 -0x74D7 -0x74D8 -0x74D9 -0x74DA -0x74DB -0x74DC -0x74DD -0x74DE -0x74DF -0x74E0 -0x74E1 -0x74E2 -0x74E3 -0x74E4 -0x74E5 -0x74E6 -0x74E8 -0x74E9 -0x74EC -0x74EE -0x74F4 -0x74F5 -0x74F6 -0x74F7 -0x74FB -0x74FD -0x74FE -0x74FF -0x7500 -0x7502 -0x7503 -0x7504 -0x7507 -0x7508 -0x750B -0x750C -0x750D -0x750F -0x7510 -0x7511 -0x7512 -0x7513 -0x7514 -0x7515 -0x7516 -0x7517 -0x7518 -0x751A -0x751C -0x751D -0x751F -0x7521 -0x7522 -0x7525 -0x7526 -0x7528 -0x7529 -0x752A -0x752B -0x752C -0x752D -0x752E -0x752F -0x7530 -0x7531 -0x7532 -0x7533 -0x7537 -0x7538 -0x7539 -0x753A -0x753D -0x753E -0x753F -0x7540 -0x7547 -0x7548 -0x754B -0x754C -0x754E -0x754F -0x7554 -0x7559 -0x755A -0x755B -0x755C -0x755D -0x755F -0x7562 -0x7563 -0x7564 -0x7565 -0x7566 -0x756A -0x756B -0x756C -0x756F -0x7570 -0x7576 -0x7577 -0x7578 -0x7579 -0x757D -0x757E -0x757F -0x7580 -0x7584 -0x7586 -0x7587 -0x758A -0x758B -0x758C -0x758F -0x7590 -0x7591 -0x7594 -0x7595 -0x7598 -0x7599 -0x759A -0x759D -0x75A2 -0x75A3 -0x75A4 -0x75A5 -0x75A7 -0x75AA -0x75AB -0x75B0 -0x75B2 -0x75B3 -0x75B5 -0x75B6 -0x75B8 -0x75B9 -0x75BA -0x75BB -0x75BC -0x75BD -0x75BE -0x75BF -0x75C0 -0x75C1 -0x75C2 -0x75C4 -0x75C5 -0x75C7 -0x75CA -0x75CB -0x75CC -0x75CD -0x75CE -0x75CF -0x75D0 -0x75D1 -0x75D2 -0x75D4 -0x75D5 -0x75D7 -0x75D8 -0x75D9 -0x75DA -0x75DB -0x75DD -0x75DE -0x75DF -0x75E0 -0x75E1 -0x75E2 -0x75E3 -0x75E4 -0x75E6 -0x75E7 -0x75ED -0x75EF -0x75F0 -0x75F1 -0x75F2 -0x75F3 -0x75F4 -0x75F5 -0x75F6 -0x75F7 -0x75F8 -0x75F9 -0x75FA -0x75FB -0x75FC -0x75FD -0x75FE -0x75FF -0x7600 -0x7601 -0x7603 -0x7608 -0x7609 -0x760A -0x760B -0x760C -0x760D -0x760F -0x7610 -0x7611 -0x7613 -0x7614 -0x7615 -0x7616 -0x7619 -0x761A -0x761B -0x761C -0x761D -0x761E -0x761F -0x7620 -0x7621 -0x7622 -0x7623 -0x7624 -0x7625 -0x7626 -0x7627 -0x7628 -0x7629 -0x762D -0x762F -0x7630 -0x7631 -0x7632 -0x7633 -0x7634 -0x7635 -0x7638 -0x763A -0x763C -0x763D -0x7642 -0x7643 -0x7646 -0x7647 -0x7648 -0x7649 -0x764C -0x7650 -0x7652 -0x7653 -0x7656 -0x7657 -0x7658 -0x7659 -0x765A -0x765C -0x765F -0x7660 -0x7661 -0x7662 -0x7664 -0x7665 -0x7669 -0x766A -0x766C -0x766D -0x766E -0x7670 -0x7671 -0x7672 -0x7675 -0x7678 -0x7679 -0x767B -0x767C -0x767D -0x767E -0x767F -0x7681 -0x7682 -0x7684 -0x7686 -0x7687 -0x7688 -0x7689 -0x768A -0x768B -0x768E -0x768F -0x7692 -0x7693 -0x7695 -0x7696 -0x7699 -0x769A -0x769B -0x769C -0x769D -0x769E -0x76A4 -0x76A6 -0x76AA -0x76AB -0x76AD -0x76AE -0x76AF -0x76B0 -0x76B4 -0x76B5 -0x76B8 -0x76BA -0x76BB -0x76BD -0x76BE -0x76BF -0x76C2 -0x76C3 -0x76C4 -0x76C5 -0x76C6 -0x76C8 -0x76C9 -0x76CA -0x76CD -0x76CE -0x76D2 -0x76D3 -0x76D4 -0x76DA -0x76DB -0x76DC -0x76DD -0x76DE -0x76DF -0x76E1 -0x76E3 -0x76E4 -0x76E5 -0x76E6 -0x76E7 -0x76E9 -0x76EA -0x76EC -0x76ED -0x76EE -0x76EF -0x76F0 -0x76F1 -0x76F2 -0x76F3 -0x76F4 -0x76F5 -0x76F7 -0x76F8 -0x76F9 -0x76FA -0x76FB -0x76FC -0x76FE -0x7701 -0x7703 -0x7704 -0x7705 -0x7707 -0x7708 -0x7709 -0x770A -0x770B -0x7710 -0x7711 -0x7712 -0x7713 -0x7715 -0x7719 -0x771A -0x771B -0x771D -0x771F -0x7720 -0x7722 -0x7723 -0x7725 -0x7727 -0x7728 -0x7729 -0x772D -0x772F -0x7731 -0x7732 -0x7733 -0x7734 -0x7735 -0x7736 -0x7737 -0x7738 -0x7739 -0x773A -0x773B -0x773C -0x773D -0x773E -0x7744 -0x7745 -0x7746 -0x7747 -0x774A -0x774B -0x774C -0x774D -0x774E -0x774F -0x7752 -0x7754 -0x7755 -0x7756 -0x7759 -0x775A -0x775B -0x775C -0x775E -0x775F -0x7760 -0x7761 -0x7762 -0x7763 -0x7765 -0x7766 -0x7767 -0x7768 -0x7769 -0x776A -0x776B -0x776C -0x776D -0x776E -0x776F -0x7779 -0x777C -0x777D -0x777E -0x777F -0x7780 -0x7781 -0x7782 -0x7783 -0x7784 -0x7785 -0x7787 -0x7788 -0x7789 -0x778B -0x778C -0x778D -0x778E -0x778F -0x7791 -0x7795 -0x7797 -0x7799 -0x779A -0x779B -0x779C -0x779D -0x779E -0x779F -0x77A0 -0x77A1 -0x77A2 -0x77A3 -0x77A5 -0x77A7 -0x77A8 -0x77AA -0x77AB -0x77AC -0x77AD -0x77B0 -0x77B1 -0x77B2 -0x77B3 -0x77B4 -0x77B5 -0x77B6 -0x77B7 -0x77BA -0x77BB -0x77BC -0x77BD -0x77BF -0x77C2 -0x77C4 -0x77C7 -0x77C9 -0x77CA -0x77CC -0x77CD -0x77CE -0x77CF -0x77D0 -0x77D3 -0x77D4 -0x77D5 -0x77D7 -0x77D8 -0x77D9 -0x77DA -0x77DB -0x77DC -0x77DE -0x77E0 -0x77E2 -0x77E3 -0x77E5 -0x77E7 -0x77E8 -0x77E9 -0x77EC -0x77ED -0x77EE -0x77EF -0x77F0 -0x77F1 -0x77F2 -0x77F3 -0x77F7 -0x77F8 -0x77F9 -0x77FA -0x77FB -0x77FC -0x77FD -0x7802 -0x7803 -0x7805 -0x7806 -0x7809 -0x780C -0x780D -0x780E -0x780F -0x7810 -0x7811 -0x7812 -0x7813 -0x7814 -0x781D -0x781F -0x7820 -0x7821 -0x7822 -0x7823 -0x7825 -0x7826 -0x7827 -0x7828 -0x7829 -0x782A -0x782B -0x782C -0x782D -0x782E -0x782F -0x7830 -0x7831 -0x7832 -0x7833 -0x7834 -0x7835 -0x7837 -0x7838 -0x7843 -0x7845 -0x7848 -0x7849 -0x784A -0x784C -0x784D -0x784E -0x7850 -0x7852 -0x785C -0x785D -0x785E -0x7860 -0x7862 -0x7864 -0x7865 -0x7868 -0x7869 -0x786A -0x786B -0x786C -0x786D -0x786E -0x786F -0x7870 -0x7871 -0x7879 -0x787B -0x787C -0x787E -0x787F -0x7880 -0x7883 -0x7884 -0x7885 -0x7886 -0x7887 -0x7889 -0x788C -0x788E -0x788F -0x7891 -0x7893 -0x7894 -0x7895 -0x7896 -0x7897 -0x7898 -0x7899 -0x789A -0x789E -0x789F -0x78A0 -0x78A1 -0x78A2 -0x78A3 -0x78A4 -0x78A5 -0x78A7 -0x78A8 -0x78A9 -0x78AA -0x78AB -0x78AC -0x78AD -0x78B0 -0x78B2 -0x78B3 -0x78B4 -0x78BA -0x78BB -0x78BC -0x78BE -0x78C1 -0x78C3 -0x78C4 -0x78C5 -0x78C8 -0x78C9 -0x78CA -0x78CB -0x78CC -0x78CD -0x78CE -0x78CF -0x78D0 -0x78D1 -0x78D4 -0x78D5 -0x78DA -0x78DB -0x78DD -0x78DE -0x78DF -0x78E0 -0x78E1 -0x78E2 -0x78E3 -0x78E5 -0x78E7 -0x78E8 -0x78E9 -0x78EA -0x78EC -0x78ED -0x78EF -0x78F2 -0x78F3 -0x78F4 -0x78F7 -0x78F9 -0x78FA -0x78FB -0x78FC -0x78FD -0x78FE -0x78FF -0x7901 -0x7902 -0x7904 -0x7905 -0x7909 -0x790C -0x790E -0x7910 -0x7911 -0x7912 -0x7913 -0x7914 -0x7917 -0x7919 -0x791B -0x791C -0x791D -0x791E -0x7921 -0x7923 -0x7924 -0x7925 -0x7926 -0x7927 -0x7928 -0x7929 -0x792A -0x792B -0x792C -0x792D -0x792F -0x7931 -0x7935 -0x7938 -0x7939 -0x793A -0x793D -0x793E -0x793F -0x7940 -0x7941 -0x7942 -0x7944 -0x7945 -0x7946 -0x7947 -0x7948 -0x7949 -0x794A -0x794B -0x794C -0x794F -0x7950 -0x7951 -0x7952 -0x7953 -0x7954 -0x7955 -0x7956 -0x7957 -0x795A -0x795B -0x795C -0x795D -0x795E -0x795F -0x7960 -0x7961 -0x7963 -0x7964 -0x7965 -0x7967 -0x7968 -0x7969 -0x796A -0x796B -0x796D -0x7970 -0x7972 -0x7973 -0x7974 -0x7979 -0x797A -0x797C -0x797D -0x797F -0x7981 -0x7982 -0x7988 -0x798A -0x798B -0x798D -0x798E -0x798F -0x7990 -0x7992 -0x7993 -0x7994 -0x7995 -0x7996 -0x7997 -0x7998 -0x799A -0x799B -0x799C -0x79A0 -0x79A1 -0x79A2 -0x79A4 -0x79A6 -0x79A7 -0x79A8 -0x79AA -0x79AB -0x79AC -0x79AD -0x79AE -0x79B0 -0x79B1 -0x79B2 -0x79B3 -0x79B4 -0x79B6 -0x79B7 -0x79B8 -0x79B9 -0x79BA -0x79BB -0x79BD -0x79BE -0x79BF -0x79C0 -0x79C1 -0x79C5 -0x79C8 -0x79C9 -0x79CB -0x79CD -0x79CE -0x79CF -0x79D1 -0x79D2 -0x79D5 -0x79D6 -0x79D8 -0x79DC -0x79DD -0x79DE -0x79DF -0x79E0 -0x79E3 -0x79E4 -0x79E6 -0x79E7 -0x79E9 -0x79EA -0x79EB -0x79EC -0x79ED -0x79EE -0x79F6 -0x79F7 -0x79F8 -0x79FA -0x79FB -0x7A00 -0x7A02 -0x7A03 -0x7A04 -0x7A05 -0x7A08 -0x7A0A -0x7A0B -0x7A0C -0x7A0D -0x7A10 -0x7A11 -0x7A12 -0x7A13 -0x7A14 -0x7A15 -0x7A17 -0x7A18 -0x7A19 -0x7A1A -0x7A1B -0x7A1C -0x7A1E -0x7A1F -0x7A20 -0x7A22 -0x7A26 -0x7A28 -0x7A2B -0x7A2E -0x7A2F -0x7A30 -0x7A31 -0x7A37 -0x7A39 -0x7A3B -0x7A3C -0x7A3D -0x7A3F -0x7A40 -0x7A44 -0x7A46 -0x7A47 -0x7A48 -0x7A4A -0x7A4B -0x7A4C -0x7A4D -0x7A4E -0x7A54 -0x7A56 -0x7A57 -0x7A58 -0x7A5A -0x7A5B -0x7A5C -0x7A5F -0x7A60 -0x7A61 -0x7A62 -0x7A67 -0x7A68 -0x7A69 -0x7A6B -0x7A6C -0x7A6D -0x7A6E -0x7A70 -0x7A71 -0x7A74 -0x7A75 -0x7A76 -0x7A78 -0x7A79 -0x7A7A -0x7A7B -0x7A7E -0x7A7F -0x7A80 -0x7A81 -0x7A84 -0x7A85 -0x7A86 -0x7A87 -0x7A88 -0x7A89 -0x7A8A -0x7A8B -0x7A8C -0x7A8F -0x7A90 -0x7A92 -0x7A94 -0x7A95 -0x7A96 -0x7A97 -0x7A98 -0x7A99 -0x7A9E -0x7A9F -0x7AA0 -0x7AA2 -0x7AA3 -0x7AA8 -0x7AA9 -0x7AAA -0x7AAB -0x7AAC -0x7AAE -0x7AAF -0x7AB1 -0x7AB2 -0x7AB3 -0x7AB4 -0x7AB5 -0x7AB6 -0x7AB7 -0x7AB8 -0x7ABA -0x7ABE -0x7ABF -0x7AC0 -0x7AC1 -0x7AC4 -0x7AC5 -0x7AC7 -0x7ACA -0x7ACB -0x7AD1 -0x7AD8 -0x7AD9 -0x7ADF -0x7AE0 -0x7AE3 -0x7AE4 -0x7AE5 -0x7AE6 -0x7AEB -0x7AED -0x7AEE -0x7AEF -0x7AF6 -0x7AF7 -0x7AF9 -0x7AFA -0x7AFB -0x7AFD -0x7AFF -0x7B00 -0x7B01 -0x7B04 -0x7B05 -0x7B06 -0x7B08 -0x7B09 -0x7B0A -0x7B0E -0x7B0F -0x7B10 -0x7B11 -0x7B12 -0x7B13 -0x7B18 -0x7B19 -0x7B1A -0x7B1B -0x7B1D -0x7B1E -0x7B20 -0x7B22 -0x7B23 -0x7B24 -0x7B25 -0x7B26 -0x7B28 -0x7B2A -0x7B2B -0x7B2C -0x7B2D -0x7B2E -0x7B2F -0x7B30 -0x7B31 -0x7B32 -0x7B33 -0x7B34 -0x7B35 -0x7B38 -0x7B3B -0x7B40 -0x7B44 -0x7B45 -0x7B46 -0x7B47 -0x7B48 -0x7B49 -0x7B4A -0x7B4B -0x7B4C -0x7B4D -0x7B4E -0x7B4F -0x7B50 -0x7B51 -0x7B52 -0x7B54 -0x7B56 -0x7B58 -0x7B60 -0x7B61 -0x7B63 -0x7B64 -0x7B65 -0x7B66 -0x7B67 -0x7B69 -0x7B6D -0x7B6E -0x7B70 -0x7B71 -0x7B72 -0x7B73 -0x7B74 -0x7B75 -0x7B76 -0x7B77 -0x7B78 -0x7B82 -0x7B84 -0x7B85 -0x7B87 -0x7B88 -0x7B8A -0x7B8B -0x7B8C -0x7B8D -0x7B8E -0x7B8F -0x7B90 -0x7B91 -0x7B94 -0x7B95 -0x7B96 -0x7B97 -0x7B98 -0x7B99 -0x7B9B -0x7B9C -0x7B9D -0x7BA0 -0x7BA1 -0x7BA4 -0x7BAC -0x7BAD -0x7BAF -0x7BB1 -0x7BB4 -0x7BB5 -0x7BB7 -0x7BB8 -0x7BB9 -0x7BBE -0x7BC0 -0x7BC1 -0x7BC4 -0x7BC6 -0x7BC7 -0x7BC9 -0x7BCA -0x7BCB -0x7BCC -0x7BCE -0x7BD4 -0x7BD5 -0x7BD8 -0x7BD9 -0x7BDA -0x7BDB -0x7BDC -0x7BDD -0x7BDE -0x7BDF -0x7BE0 -0x7BE1 -0x7BE2 -0x7BE3 -0x7BE4 -0x7BE5 -0x7BE6 -0x7BE7 -0x7BE8 -0x7BE9 -0x7BEA -0x7BEB -0x7BF0 -0x7BF1 -0x7BF2 -0x7BF3 -0x7BF4 -0x7BF7 -0x7BF8 -0x7BF9 -0x7BFB -0x7BFD -0x7BFE -0x7BFF -0x7C00 -0x7C01 -0x7C02 -0x7C03 -0x7C05 -0x7C06 -0x7C07 -0x7C09 -0x7C0A -0x7C0B -0x7C0C -0x7C0D -0x7C0E -0x7C0F -0x7C10 -0x7C11 -0x7C19 -0x7C1C -0x7C1D -0x7C1E -0x7C1F -0x7C20 -0x7C21 -0x7C22 -0x7C23 -0x7C25 -0x7C26 -0x7C27 -0x7C28 -0x7C29 -0x7C2A -0x7C2B -0x7C2C -0x7C2D -0x7C30 -0x7C33 -0x7C37 -0x7C38 -0x7C39 -0x7C3B -0x7C3C -0x7C3D -0x7C3E -0x7C3F -0x7C40 -0x7C43 -0x7C45 -0x7C47 -0x7C48 -0x7C49 -0x7C4A -0x7C4C -0x7C4D -0x7C50 -0x7C53 -0x7C54 -0x7C57 -0x7C59 -0x7C5A -0x7C5B -0x7C5C -0x7C5F -0x7C60 -0x7C63 -0x7C64 -0x7C65 -0x7C66 -0x7C67 -0x7C69 -0x7C6A -0x7C6B -0x7C6C -0x7C6E -0x7C6F -0x7C72 -0x7C73 -0x7C75 -0x7C78 -0x7C79 -0x7C7A -0x7C7D -0x7C7F -0x7C80 -0x7C81 -0x7C84 -0x7C85 -0x7C88 -0x7C89 -0x7C8A -0x7C8C -0x7C8D -0x7C91 -0x7C92 -0x7C94 -0x7C95 -0x7C96 -0x7C97 -0x7C98 -0x7C9E -0x7C9F -0x7CA1 -0x7CA2 -0x7CA3 -0x7CA5 -0x7CA8 -0x7CAF -0x7CB1 -0x7CB2 -0x7CB3 -0x7CB4 -0x7CB5 -0x7CB9 -0x7CBA -0x7CBB -0x7CBC -0x7CBD -0x7CBE -0x7CBF -0x7CC5 -0x7CC8 -0x7CCA -0x7CCB -0x7CCC -0x7CCE -0x7CD0 -0x7CD1 -0x7CD2 -0x7CD4 -0x7CD5 -0x7CD6 -0x7CD7 -0x7CD9 -0x7CDC -0x7CDD -0x7CDE -0x7CDF -0x7CE0 -0x7CE2 -0x7CE7 -0x7CE8 -0x7CEA -0x7CEC -0x7CEE -0x7CEF -0x7CF0 -0x7CF1 -0x7CF2 -0x7CF4 -0x7CF6 -0x7CF7 -0x7CF8 -0x7CFB -0x7CFD -0x7CFE -0x7D00 -0x7D01 -0x7D02 -0x7D03 -0x7D04 -0x7D05 -0x7D06 -0x7D07 -0x7D08 -0x7D09 -0x7D0A -0x7D0B -0x7D0C -0x7D0D -0x7D0E -0x7D0F -0x7D10 -0x7D11 -0x7D12 -0x7D13 -0x7D14 -0x7D15 -0x7D16 -0x7D17 -0x7D18 -0x7D19 -0x7D1A -0x7D1B -0x7D1C -0x7D1D -0x7D1E -0x7D1F -0x7D20 -0x7D21 -0x7D22 -0x7D28 -0x7D29 -0x7D2B -0x7D2C -0x7D2E -0x7D2F -0x7D30 -0x7D31 -0x7D32 -0x7D33 -0x7D35 -0x7D36 -0x7D38 -0x7D39 -0x7D3A -0x7D3B -0x7D3C -0x7D3D -0x7D3E -0x7D3F -0x7D40 -0x7D41 -0x7D42 -0x7D43 -0x7D44 -0x7D45 -0x7D46 -0x7D47 -0x7D4A -0x7D4E -0x7D4F -0x7D50 -0x7D51 -0x7D52 -0x7D53 -0x7D54 -0x7D55 -0x7D56 -0x7D58 -0x7D5B -0x7D5C -0x7D5E -0x7D5F -0x7D61 -0x7D62 -0x7D63 -0x7D66 -0x7D67 -0x7D68 -0x7D69 -0x7D6A -0x7D6B -0x7D6D -0x7D6E -0x7D6F -0x7D70 -0x7D71 -0x7D72 -0x7D73 -0x7D79 -0x7D7A -0x7D7B -0x7D7C -0x7D7D -0x7D7F -0x7D80 -0x7D81 -0x7D83 -0x7D84 -0x7D85 -0x7D86 -0x7D88 -0x7D8C -0x7D8D -0x7D8E -0x7D8F -0x7D91 -0x7D92 -0x7D93 -0x7D94 -0x7D96 -0x7D9C -0x7D9D -0x7D9E -0x7D9F -0x7DA0 -0x7DA1 -0x7DA2 -0x7DA3 -0x7DA6 -0x7DA7 -0x7DA9 -0x7DAA -0x7DAC -0x7DAD -0x7DAE -0x7DAF -0x7DB0 -0x7DB1 -0x7DB2 -0x7DB4 -0x7DB5 -0x7DB7 -0x7DB8 -0x7DB9 -0x7DBA -0x7DBB -0x7DBC -0x7DBD -0x7DBE -0x7DBF -0x7DC0 -0x7DC1 -0x7DC2 -0x7DC4 -0x7DC5 -0x7DC6 -0x7DC7 -0x7DC9 -0x7DCA -0x7DCB -0x7DCC -0x7DCE -0x7DD2 -0x7DD7 -0x7DD8 -0x7DD9 -0x7DDA -0x7DDB -0x7DDD -0x7DDE -0x7DDF -0x7DE0 -0x7DE1 -0x7DE3 -0x7DE6 -0x7DE7 -0x7DE8 -0x7DE9 -0x7DEA -0x7DEC -0x7DEE -0x7DEF -0x7DF0 -0x7DF1 -0x7DF2 -0x7DF3 -0x7DF4 -0x7DF6 -0x7DF7 -0x7DF9 -0x7DFA -0x7DFB -0x7E03 -0x7E08 -0x7E09 -0x7E0A -0x7E0B -0x7E0C -0x7E0D -0x7E0E -0x7E0F -0x7E10 -0x7E11 -0x7E12 -0x7E13 -0x7E14 -0x7E15 -0x7E16 -0x7E17 -0x7E1A -0x7E1B -0x7E1C -0x7E1D -0x7E1E -0x7E1F -0x7E20 -0x7E21 -0x7E22 -0x7E23 -0x7E24 -0x7E25 -0x7E29 -0x7E2A -0x7E2B -0x7E2D -0x7E2E -0x7E2F -0x7E30 -0x7E31 -0x7E32 -0x7E33 -0x7E34 -0x7E35 -0x7E36 -0x7E37 -0x7E38 -0x7E39 -0x7E3A -0x7E3B -0x7E3C -0x7E3D -0x7E3E -0x7E3F -0x7E40 -0x7E41 -0x7E42 -0x7E43 -0x7E44 -0x7E45 -0x7E46 -0x7E47 -0x7E48 -0x7E49 -0x7E4C -0x7E50 -0x7E51 -0x7E52 -0x7E53 -0x7E54 -0x7E55 -0x7E56 -0x7E57 -0x7E58 -0x7E59 -0x7E5A -0x7E5C -0x7E5E -0x7E5F -0x7E60 -0x7E61 -0x7E62 -0x7E63 -0x7E68 -0x7E69 -0x7E6A -0x7E6B -0x7E6D -0x7E6F -0x7E70 -0x7E72 -0x7E73 -0x7E74 -0x7E75 -0x7E76 -0x7E77 -0x7E78 -0x7E79 -0x7E7A -0x7E7B -0x7E7C -0x7E7D -0x7E7E -0x7E80 -0x7E81 -0x7E82 -0x7E86 -0x7E87 -0x7E88 -0x7E8A -0x7E8B -0x7E8C -0x7E8D -0x7E8F -0x7E91 -0x7E93 -0x7E94 -0x7E95 -0x7E96 -0x7E97 -0x7E98 -0x7E99 -0x7E9A -0x7E9B -0x7E9C -0x7F36 -0x7F38 -0x7F39 -0x7F3A -0x7F3D -0x7F3E -0x7F3F -0x7F43 -0x7F44 -0x7F45 -0x7F48 -0x7F4A -0x7F4B -0x7F4C -0x7F4D -0x7F4F -0x7F50 -0x7F51 -0x7F54 -0x7F55 -0x7F58 -0x7F5B -0x7F5C -0x7F5D -0x7F5E -0x7F5F -0x7F60 -0x7F61 -0x7F63 -0x7F65 -0x7F66 -0x7F67 -0x7F68 -0x7F69 -0x7F6A -0x7F6B -0x7F6C -0x7F6D -0x7F6E -0x7F70 -0x7F72 -0x7F73 -0x7F75 -0x7F76 -0x7F77 -0x7F79 -0x7F7A -0x7F7B -0x7F7C -0x7F7D -0x7F7E -0x7F7F -0x7F83 -0x7F85 -0x7F86 -0x7F87 -0x7F88 -0x7F89 -0x7F8A -0x7F8B -0x7F8C -0x7F8D -0x7F8E -0x7F91 -0x7F92 -0x7F94 -0x7F95 -0x7F96 -0x7F9A -0x7F9B -0x7F9C -0x7F9D -0x7F9E -0x7FA0 -0x7FA1 -0x7FA2 -0x7FA4 -0x7FA5 -0x7FA6 -0x7FA7 -0x7FA8 -0x7FA9 -0x7FAC -0x7FAD -0x7FAF -0x7FB0 -0x7FB1 -0x7FB2 -0x7FB3 -0x7FB5 -0x7FB6 -0x7FB7 -0x7FB8 -0x7FB9 -0x7FBA -0x7FBB -0x7FBC -0x7FBD -0x7FBE -0x7FBF -0x7FC0 -0x7FC1 -0x7FC2 -0x7FC3 -0x7FC5 -0x7FC7 -0x7FC9 -0x7FCA -0x7FCB -0x7FCC -0x7FCD -0x7FCE -0x7FCF -0x7FD0 -0x7FD1 -0x7FD2 -0x7FD4 -0x7FD5 -0x7FD7 -0x7FDB -0x7FDC -0x7FDE -0x7FDF -0x7FE0 -0x7FE1 -0x7FE2 -0x7FE3 -0x7FE5 -0x7FE6 -0x7FE8 -0x7FE9 -0x7FEA -0x7FEB -0x7FEC -0x7FED -0x7FEE -0x7FEF -0x7FF0 -0x7FF1 -0x7FF2 -0x7FF3 -0x7FF4 -0x7FF5 -0x7FF7 -0x7FF8 -0x7FF9 -0x7FFB -0x7FFC -0x7FFD -0x7FFE -0x7FFF -0x8000 -0x8001 -0x8003 -0x8004 -0x8005 -0x8006 -0x8007 -0x800B -0x800C -0x800D -0x800E -0x800F -0x8010 -0x8011 -0x8012 -0x8014 -0x8015 -0x8016 -0x8017 -0x8018 -0x8019 -0x801B -0x801C -0x801E -0x801F -0x8021 -0x8024 -0x8026 -0x8028 -0x8029 -0x802A -0x802C -0x8030 -0x8033 -0x8034 -0x8035 -0x8036 -0x8037 -0x8039 -0x803D -0x803E -0x803F -0x8043 -0x8046 -0x8047 -0x8048 -0x804A -0x804F -0x8050 -0x8051 -0x8052 -0x8056 -0x8058 -0x805A -0x805C -0x805D -0x805E -0x8064 -0x8067 -0x806C -0x806F -0x8070 -0x8071 -0x8072 -0x8073 -0x8075 -0x8076 -0x8077 -0x8078 -0x8079 -0x807D -0x807E -0x807F -0x8082 -0x8084 -0x8085 -0x8086 -0x8087 -0x8089 -0x808A -0x808B -0x808C -0x808F -0x8090 -0x8092 -0x8093 -0x8095 -0x8096 -0x8098 -0x8099 -0x809A -0x809B -0x809C -0x809D -0x80A1 -0x80A2 -0x80A3 -0x80A5 -0x80A9 -0x80AA -0x80AB -0x80AD -0x80AE -0x80AF -0x80B1 -0x80B2 -0x80B4 -0x80B5 -0x80B8 -0x80BA -0x80C2 -0x80C3 -0x80C4 -0x80C5 -0x80C7 -0x80C8 -0x80C9 -0x80CA -0x80CC -0x80CD -0x80CE -0x80CF -0x80D0 -0x80D1 -0x80D4 -0x80D5 -0x80D6 -0x80D7 -0x80D8 -0x80D9 -0x80DA -0x80DB -0x80DC -0x80DD -0x80DE -0x80E0 -0x80E1 -0x80E3 -0x80E4 -0x80E5 -0x80E6 -0x80ED -0x80EF -0x80F0 -0x80F1 -0x80F2 -0x80F3 -0x80F4 -0x80F5 -0x80F8 -0x80F9 -0x80FA -0x80FB -0x80FC -0x80FD -0x80FE -0x8100 -0x8101 -0x8102 -0x8105 -0x8106 -0x8108 -0x810A -0x8115 -0x8116 -0x8118 -0x8119 -0x811B -0x811D -0x811E -0x811F -0x8121 -0x8122 -0x8123 -0x8124 -0x8125 -0x8127 -0x8129 -0x812B -0x812C -0x812D -0x812F -0x8130 -0x8139 -0x813A -0x813D -0x813E -0x8143 -0x8144 -0x8146 -0x8147 -0x814A -0x814B -0x814C -0x814D -0x814E -0x814F -0x8150 -0x8151 -0x8152 -0x8153 -0x8154 -0x8155 -0x815B -0x815C -0x815E -0x8160 -0x8161 -0x8162 -0x8164 -0x8165 -0x8166 -0x8167 -0x8169 -0x816B -0x816E -0x816F -0x8170 -0x8171 -0x8172 -0x8173 -0x8174 -0x8176 -0x8177 -0x8178 -0x8179 -0x817A -0x817F -0x8180 -0x8182 -0x8183 -0x8186 -0x8187 -0x8188 -0x8189 -0x818A -0x818B -0x818C -0x818D -0x818F -0x8195 -0x8197 -0x8198 -0x8199 -0x819A -0x819B -0x819C -0x819D -0x819E -0x819F -0x81A0 -0x81A2 -0x81A3 -0x81A6 -0x81A7 -0x81A8 -0x81A9 -0x81AB -0x81AC -0x81AE -0x81B0 -0x81B1 -0x81B2 -0x81B3 -0x81B4 -0x81B5 -0x81B7 -0x81B9 -0x81BA -0x81BB -0x81BC -0x81BD -0x81BE -0x81BF -0x81C0 -0x81C2 -0x81C3 -0x81C4 -0x81C5 -0x81C6 -0x81C7 -0x81C9 -0x81CA -0x81CC -0x81CD -0x81CF -0x81D0 -0x81D1 -0x81D2 -0x81D5 -0x81D7 -0x81D8 -0x81D9 -0x81DA -0x81DB -0x81DD -0x81DE -0x81DF -0x81E0 -0x81E1 -0x81E2 -0x81E3 -0x81E5 -0x81E6 -0x81E7 -0x81E8 -0x81E9 -0x81EA -0x81EC -0x81ED -0x81EE -0x81F2 -0x81F3 -0x81F4 -0x81F7 -0x81F8 -0x81F9 -0x81FA -0x81FB -0x81FC -0x81FE -0x81FF -0x8200 -0x8201 -0x8202 -0x8204 -0x8205 -0x8207 -0x8208 -0x8209 -0x820A -0x820B -0x820C -0x820D -0x8210 -0x8211 -0x8212 -0x8214 -0x8215 -0x8216 -0x821B -0x821C -0x821D -0x821E -0x821F -0x8220 -0x8221 -0x8222 -0x8225 -0x8228 -0x822A -0x822B -0x822C -0x822F -0x8232 -0x8233 -0x8234 -0x8235 -0x8236 -0x8237 -0x8238 -0x8239 -0x823A -0x823C -0x823D -0x823F -0x8240 -0x8242 -0x8244 -0x8245 -0x8247 -0x8249 -0x824B -0x824E -0x824F -0x8250 -0x8251 -0x8252 -0x8253 -0x8255 -0x8256 -0x8257 -0x8258 -0x8259 -0x825A -0x825B -0x825C -0x825E -0x825F -0x8261 -0x8263 -0x8264 -0x8266 -0x8268 -0x8269 -0x826B -0x826C -0x826D -0x826E -0x826F -0x8271 -0x8272 -0x8274 -0x8275 -0x8277 -0x8278 -0x827C -0x827D -0x827E -0x827F -0x8280 -0x8283 -0x8284 -0x8285 -0x828A -0x828B -0x828D -0x828E -0x828F -0x8290 -0x8291 -0x8292 -0x8293 -0x8294 -0x8298 -0x8299 -0x829A -0x829B -0x829D -0x829E -0x829F -0x82A0 -0x82A1 -0x82A2 -0x82A3 -0x82A4 -0x82A5 -0x82A7 -0x82A8 -0x82A9 -0x82AB -0x82AC -0x82AD -0x82AE -0x82AF -0x82B0 -0x82B1 -0x82B3 -0x82B4 -0x82B5 -0x82B6 -0x82B7 -0x82B8 -0x82B9 -0x82BA -0x82BB -0x82BC -0x82BD -0x82BE -0x82C0 -0x82C2 -0x82C3 -0x82D1 -0x82D2 -0x82D3 -0x82D4 -0x82D5 -0x82D6 -0x82D7 -0x82D9 -0x82DB -0x82DC -0x82DE -0x82DF -0x82E0 -0x82E1 -0x82E3 -0x82E4 -0x82E5 -0x82E6 -0x82E7 -0x82E8 -0x82EA -0x82EB -0x82EC -0x82ED -0x82EF -0x82F0 -0x82F1 -0x82F2 -0x82F3 -0x82F4 -0x82F5 -0x82F6 -0x82F9 -0x82FA -0x82FB -0x82FE -0x8300 -0x8301 -0x8302 -0x8303 -0x8304 -0x8305 -0x8306 -0x8307 -0x8308 -0x8309 -0x830C -0x830D -0x8316 -0x8317 -0x8319 -0x831B -0x831C -0x831E -0x8320 -0x8322 -0x8324 -0x8325 -0x8326 -0x8327 -0x8328 -0x8329 -0x832A -0x832B -0x832C -0x832D -0x832F -0x8331 -0x8332 -0x8333 -0x8334 -0x8335 -0x8336 -0x8337 -0x8338 -0x8339 -0x833A -0x833B -0x833C -0x833F -0x8340 -0x8341 -0x8342 -0x8343 -0x8344 -0x8345 -0x8347 -0x8348 -0x8349 -0x834A -0x834B -0x834C -0x834D -0x834E -0x834F -0x8350 -0x8351 -0x8352 -0x8353 -0x8354 -0x8356 -0x8373 -0x8374 -0x8375 -0x8376 -0x8377 -0x8378 -0x837A -0x837B -0x837C -0x837D -0x837E -0x837F -0x8381 -0x8383 -0x8386 -0x8387 -0x8388 -0x8389 -0x838A -0x838B -0x838C -0x838D -0x838E -0x838F -0x8390 -0x8392 -0x8393 -0x8394 -0x8395 -0x8396 -0x8397 -0x8398 -0x8399 -0x839A -0x839B -0x839D -0x839E -0x83A0 -0x83A2 -0x83A3 -0x83A4 -0x83A5 -0x83A6 -0x83A7 -0x83A8 -0x83A9 -0x83AA -0x83AB -0x83AE -0x83AF -0x83B0 -0x83BD -0x83BF -0x83C0 -0x83C1 -0x83C2 -0x83C3 -0x83C4 -0x83C5 -0x83C6 -0x83C7 -0x83C8 -0x83C9 -0x83CA -0x83CB -0x83CC -0x83CE -0x83CF -0x83D1 -0x83D4 -0x83D5 -0x83D6 -0x83D7 -0x83D8 -0x83D9 -0x83DB -0x83DC -0x83DD -0x83DE -0x83DF -0x83E0 -0x83E1 -0x83E2 -0x83E3 -0x83E4 -0x83E5 -0x83E7 -0x83E8 -0x83E9 -0x83EA -0x83EB -0x83EC -0x83EE -0x83EF -0x83F0 -0x83F1 -0x83F2 -0x83F3 -0x83F4 -0x83F5 -0x83F6 -0x83F8 -0x83F9 -0x83FA -0x83FB -0x83FC -0x83FD -0x83FE -0x83FF -0x8401 -0x8403 -0x8404 -0x8406 -0x8407 -0x8409 -0x840A -0x840B -0x840C -0x840D -0x840E -0x840F -0x8410 -0x8411 -0x8412 -0x8413 -0x841B -0x8423 -0x8429 -0x842B -0x842C -0x842D -0x842F -0x8430 -0x8431 -0x8432 -0x8433 -0x8434 -0x8435 -0x8436 -0x8437 -0x8438 -0x8439 -0x843A -0x843B -0x843C -0x843D -0x843F -0x8440 -0x8442 -0x8443 -0x8444 -0x8445 -0x8446 -0x8447 -0x8449 -0x844B -0x844C -0x844D -0x844E -0x8450 -0x8451 -0x8452 -0x8454 -0x8456 -0x8457 -0x8459 -0x845A -0x845B -0x845D -0x845E -0x845F -0x8460 -0x8461 -0x8463 -0x8465 -0x8466 -0x8467 -0x8468 -0x8469 -0x846B -0x846C -0x846D -0x846E -0x846F -0x8470 -0x8473 -0x8474 -0x8475 -0x8476 -0x8477 -0x8478 -0x8479 -0x847A -0x847D -0x847E -0x8482 -0x8486 -0x848D -0x848E -0x848F -0x8490 -0x8491 -0x8494 -0x8497 -0x8498 -0x8499 -0x849A -0x849B -0x849C -0x849D -0x849E -0x849F -0x84A0 -0x84A1 -0x84A2 -0x84A4 -0x84A7 -0x84A8 -0x84A9 -0x84AA -0x84AB -0x84AC -0x84AE -0x84AF -0x84B0 -0x84B1 -0x84B2 -0x84B4 -0x84B6 -0x84B8 -0x84B9 -0x84BA -0x84BB -0x84BC -0x84BF -0x84C0 -0x84C1 -0x84C2 -0x84C4 -0x84C5 -0x84C6 -0x84C7 -0x84C9 -0x84CA -0x84CB -0x84CC -0x84CD -0x84CE -0x84CF -0x84D0 -0x84D1 -0x84D2 -0x84D3 -0x84D4 -0x84D6 -0x84D7 -0x84DB -0x84E7 -0x84E8 -0x84E9 -0x84EA -0x84EB -0x84EC -0x84EE -0x84EF -0x84F0 -0x84F1 -0x84F2 -0x84F3 -0x84F4 -0x84F6 -0x84F7 -0x84F9 -0x84FA -0x84FB -0x84FC -0x84FD -0x84FE -0x84FF -0x8500 -0x8502 -0x8506 -0x8507 -0x8508 -0x8509 -0x850A -0x850B -0x850C -0x850D -0x850E -0x850F -0x8511 -0x8512 -0x8513 -0x8514 -0x8515 -0x8516 -0x8517 -0x8518 -0x8519 -0x851A -0x851C -0x851D -0x851E -0x851F -0x8520 -0x8521 -0x8523 -0x8524 -0x8525 -0x8526 -0x8527 -0x8528 -0x8529 -0x852A -0x852B -0x852C -0x852D -0x852E -0x852F -0x8530 -0x8531 -0x853B -0x853D -0x853E -0x8540 -0x8541 -0x8543 -0x8544 -0x8545 -0x8546 -0x8547 -0x8548 -0x8549 -0x854A -0x854D -0x854E -0x8551 -0x8553 -0x8554 -0x8555 -0x8556 -0x8557 -0x8558 -0x8559 -0x855B -0x855D -0x855E -0x8560 -0x8561 -0x8562 -0x8563 -0x8564 -0x8565 -0x8566 -0x8567 -0x8568 -0x8569 -0x856A -0x856B -0x856C -0x856D -0x856E -0x8571 -0x8575 -0x8576 -0x8577 -0x8578 -0x8579 -0x857A -0x857B -0x857C -0x857E -0x8580 -0x8581 -0x8582 -0x8583 -0x8584 -0x8585 -0x8586 -0x8587 -0x8588 -0x8589 -0x858A -0x858B -0x858C -0x858D -0x858E -0x858F -0x8590 -0x8591 -0x8594 -0x8595 -0x8596 -0x8598 -0x8599 -0x859A -0x859B -0x859C -0x859D -0x859E -0x859F -0x85A0 -0x85A1 -0x85A2 -0x85A3 -0x85A4 -0x85A6 -0x85A7 -0x85A8 -0x85A9 -0x85AA -0x85AF -0x85B0 -0x85B1 -0x85B3 -0x85B4 -0x85B5 -0x85B6 -0x85B7 -0x85B8 -0x85B9 -0x85BA -0x85BD -0x85BE -0x85BF -0x85C0 -0x85C2 -0x85C3 -0x85C4 -0x85C5 -0x85C6 -0x85C7 -0x85C8 -0x85C9 -0x85CB -0x85CD -0x85CE -0x85CF -0x85D0 -0x85D1 -0x85D2 -0x85D5 -0x85D7 -0x85D8 -0x85D9 -0x85DA -0x85DC -0x85DD -0x85DE -0x85DF -0x85E1 -0x85E2 -0x85E3 -0x85E4 -0x85E5 -0x85E6 -0x85E8 -0x85E9 -0x85EA -0x85EB -0x85EC -0x85ED -0x85EF -0x85F0 -0x85F1 -0x85F2 -0x85F6 -0x85F7 -0x85F8 -0x85F9 -0x85FA -0x85FB -0x85FD -0x85FE -0x85FF -0x8600 -0x8601 -0x8604 -0x8605 -0x8606 -0x8607 -0x8609 -0x860A -0x860B -0x860C -0x8611 -0x8617 -0x8618 -0x8619 -0x861A -0x861B -0x861C -0x861E -0x861F -0x8620 -0x8621 -0x8622 -0x8623 -0x8624 -0x8625 -0x8626 -0x8627 -0x8629 -0x862A -0x862C -0x862D -0x862E -0x8631 -0x8632 -0x8633 -0x8634 -0x8635 -0x8636 -0x8638 -0x8639 -0x863A -0x863B -0x863C -0x863E -0x863F -0x8640 -0x8643 -0x8646 -0x8647 -0x8648 -0x864B -0x864C -0x864D -0x864E -0x8650 -0x8652 -0x8653 -0x8654 -0x8655 -0x8656 -0x8659 -0x865B -0x865C -0x865E -0x865F -0x8661 -0x8662 -0x8663 -0x8664 -0x8665 -0x8667 -0x8668 -0x8669 -0x866A -0x866B -0x866D -0x866E -0x866F -0x8670 -0x8671 -0x8673 -0x8674 -0x8677 -0x8679 -0x867A -0x867B -0x867C -0x8685 -0x8686 -0x8687 -0x868A -0x868B -0x868C -0x868D -0x868E -0x8690 -0x8691 -0x8693 -0x8694 -0x8695 -0x8696 -0x8697 -0x8698 -0x8699 -0x869A -0x869C -0x869D -0x869E -0x86A1 -0x86A2 -0x86A3 -0x86A4 -0x86A5 -0x86A7 -0x86A8 -0x86A9 -0x86AA -0x86AF -0x86B0 -0x86B1 -0x86B3 -0x86B4 -0x86B5 -0x86B6 -0x86B7 -0x86B8 -0x86B9 -0x86BA -0x86BB -0x86BC -0x86BD -0x86BE -0x86BF -0x86C0 -0x86C1 -0x86C2 -0x86C3 -0x86C4 -0x86C5 -0x86C6 -0x86C7 -0x86C8 -0x86C9 -0x86CB -0x86CC -0x86D0 -0x86D1 -0x86D3 -0x86D4 -0x86D6 -0x86D7 -0x86D8 -0x86D9 -0x86DA -0x86DB -0x86DC -0x86DD -0x86DE -0x86DF -0x86E2 -0x86E3 -0x86E4 -0x86E6 -0x86E8 -0x86E9 -0x86EA -0x86EB -0x86EC -0x86ED -0x86F5 -0x86F6 -0x86F7 -0x86F8 -0x86F9 -0x86FA -0x86FB -0x86FE -0x8700 -0x8701 -0x8702 -0x8703 -0x8704 -0x8705 -0x8706 -0x8707 -0x8708 -0x8709 -0x870A -0x870B -0x870C -0x870D -0x870E -0x8711 -0x8712 -0x8713 -0x8718 -0x8719 -0x871A -0x871B -0x871C -0x871E -0x8720 -0x8721 -0x8722 -0x8723 -0x8724 -0x8725 -0x8726 -0x8727 -0x8728 -0x8729 -0x872A -0x872C -0x872D -0x872E -0x8730 -0x8731 -0x8732 -0x8733 -0x8734 -0x8735 -0x8737 -0x8738 -0x873A -0x873B -0x873C -0x873E -0x873F -0x8740 -0x8741 -0x8742 -0x8743 -0x8746 -0x874C -0x874D -0x874E -0x874F -0x8750 -0x8751 -0x8752 -0x8753 -0x8754 -0x8755 -0x8756 -0x8757 -0x8758 -0x8759 -0x875A -0x875B -0x875C -0x875D -0x875E -0x875F -0x8760 -0x8761 -0x8762 -0x8763 -0x8764 -0x8765 -0x8766 -0x8767 -0x8768 -0x8769 -0x876A -0x876B -0x876C -0x876D -0x876E -0x876F -0x8773 -0x8774 -0x8775 -0x8776 -0x8777 -0x8778 -0x8779 -0x877A -0x877B -0x8781 -0x8782 -0x8783 -0x8784 -0x8785 -0x8787 -0x8788 -0x8789 -0x878D -0x878F -0x8790 -0x8791 -0x8792 -0x8793 -0x8794 -0x8796 -0x8797 -0x8798 -0x879A -0x879B -0x879C -0x879D -0x879E -0x879F -0x87A2 -0x87A3 -0x87A4 -0x87AA -0x87AB -0x87AC -0x87AD -0x87AE -0x87AF -0x87B0 -0x87B2 -0x87B3 -0x87B4 -0x87B5 -0x87B6 -0x87B7 -0x87B8 -0x87B9 -0x87BA -0x87BB -0x87BC -0x87BD -0x87BE -0x87BF -0x87C0 -0x87C2 -0x87C3 -0x87C4 -0x87C5 -0x87C6 -0x87C8 -0x87C9 -0x87CA -0x87CB -0x87CC -0x87D1 -0x87D2 -0x87D3 -0x87D4 -0x87D7 -0x87D8 -0x87D9 -0x87DB -0x87DC -0x87DD -0x87DE -0x87DF -0x87E0 -0x87E1 -0x87E2 -0x87E3 -0x87E4 -0x87E5 -0x87E6 -0x87E7 -0x87E8 -0x87EA -0x87EB -0x87EC -0x87ED -0x87EF -0x87F2 -0x87F3 -0x87F4 -0x87F6 -0x87F7 -0x87F9 -0x87FA -0x87FB -0x87FC -0x87FE -0x87FF -0x8800 -0x8801 -0x8802 -0x8803 -0x8805 -0x8806 -0x8808 -0x8809 -0x880A -0x880B -0x880C -0x880D -0x8810 -0x8811 -0x8813 -0x8814 -0x8815 -0x8816 -0x8817 -0x8819 -0x881B -0x881C -0x881D -0x881F -0x8820 -0x8821 -0x8822 -0x8823 -0x8824 -0x8825 -0x8826 -0x8828 -0x8829 -0x882A -0x882B -0x882C -0x882E -0x882F -0x8830 -0x8831 -0x8832 -0x8833 -0x8835 -0x8836 -0x8837 -0x8838 -0x8839 -0x883B -0x883C -0x883D -0x883E -0x883F -0x8840 -0x8841 -0x8843 -0x8844 -0x8848 -0x884A -0x884B -0x884C -0x884D -0x884E -0x8852 -0x8853 -0x8855 -0x8856 -0x8857 -0x8859 -0x885A -0x885B -0x885D -0x8861 -0x8862 -0x8863 -0x8867 -0x8868 -0x8869 -0x886A -0x886B -0x886D -0x886F -0x8870 -0x8871 -0x8872 -0x8874 -0x8875 -0x8876 -0x8877 -0x8879 -0x887C -0x887D -0x887E -0x887F -0x8880 -0x8881 -0x8882 -0x8883 -0x8888 -0x8889 -0x888B -0x888C -0x888D -0x888E -0x8891 -0x8892 -0x8893 -0x8895 -0x8896 -0x8897 -0x8898 -0x8899 -0x889A -0x889B -0x889E -0x889F -0x88A1 -0x88A2 -0x88A4 -0x88A7 -0x88A8 -0x88AA -0x88AB -0x88AC -0x88B1 -0x88B2 -0x88B6 -0x88B7 -0x88B8 -0x88B9 -0x88BA -0x88BC -0x88BD -0x88BE -0x88C0 -0x88C1 -0x88C2 -0x88C9 -0x88CA -0x88CB -0x88CC -0x88CD -0x88CE -0x88D0 -0x88D2 -0x88D4 -0x88D5 -0x88D6 -0x88D7 -0x88D8 -0x88D9 -0x88DA -0x88DB -0x88DC -0x88DD -0x88DE -0x88DF -0x88E1 -0x88E7 -0x88E8 -0x88EB -0x88EC -0x88EE -0x88EF -0x88F0 -0x88F1 -0x88F2 -0x88F3 -0x88F4 -0x88F6 -0x88F7 -0x88F8 -0x88F9 -0x88FA -0x88FB -0x88FC -0x88FD -0x88FE -0x8901 -0x8902 -0x8905 -0x8906 -0x8907 -0x8909 -0x890A -0x890B -0x890C -0x890E -0x8910 -0x8911 -0x8912 -0x8913 -0x8914 -0x8915 -0x8916 -0x8917 -0x8918 -0x8919 -0x891A -0x891E -0x891F -0x8921 -0x8922 -0x8923 -0x8925 -0x8926 -0x8927 -0x8929 -0x892A -0x892B -0x892C -0x892D -0x892E -0x892F -0x8930 -0x8931 -0x8932 -0x8933 -0x8935 -0x8936 -0x8937 -0x8938 -0x893B -0x893C -0x893D -0x893E -0x8941 -0x8942 -0x8944 -0x8946 -0x8949 -0x894B -0x894C -0x894F -0x8950 -0x8951 -0x8952 -0x8953 -0x8956 -0x8957 -0x8958 -0x8959 -0x895A -0x895B -0x895C -0x895D -0x895E -0x895F -0x8960 -0x8961 -0x8962 -0x8963 -0x8964 -0x8966 -0x8969 -0x896A -0x896B -0x896C -0x896D -0x896E -0x896F -0x8971 -0x8972 -0x8973 -0x8974 -0x8976 -0x8979 -0x897A -0x897B -0x897C -0x897E -0x897F -0x8981 -0x8982 -0x8983 -0x8985 -0x8986 -0x8988 -0x898B -0x898F -0x8993 -0x8995 -0x8996 -0x8997 -0x8998 -0x899B -0x899C -0x899D -0x899E -0x899F -0x89A1 -0x89A2 -0x89A3 -0x89A4 -0x89A6 -0x89AA -0x89AC -0x89AD -0x89AE -0x89AF -0x89B2 -0x89B6 -0x89B7 -0x89B9 -0x89BA -0x89BD -0x89BE -0x89BF -0x89C0 -0x89D2 -0x89D3 -0x89D4 -0x89D5 -0x89D6 -0x89D9 -0x89DA -0x89DB -0x89DC -0x89DD -0x89DF -0x89E0 -0x89E1 -0x89E2 -0x89E3 -0x89E4 -0x89E5 -0x89E6 -0x89E8 -0x89E9 -0x89EB -0x89EC -0x89ED -0x89F0 -0x89F1 -0x89F2 -0x89F3 -0x89F4 -0x89F6 -0x89F7 -0x89F8 -0x89FA -0x89FB -0x89FC -0x89FE -0x89FF -0x8A00 -0x8A02 -0x8A03 -0x8A04 -0x8A07 -0x8A08 -0x8A0A -0x8A0C -0x8A0E -0x8A0F -0x8A10 -0x8A11 -0x8A12 -0x8A13 -0x8A15 -0x8A16 -0x8A17 -0x8A18 -0x8A1B -0x8A1D -0x8A1E -0x8A1F -0x8A22 -0x8A23 -0x8A25 -0x8A27 -0x8A2A -0x8A2C -0x8A2D -0x8A30 -0x8A31 -0x8A34 -0x8A36 -0x8A39 -0x8A3A -0x8A3B -0x8A3C -0x8A3E -0x8A3F -0x8A40 -0x8A41 -0x8A44 -0x8A45 -0x8A46 -0x8A48 -0x8A4A -0x8A4C -0x8A4D -0x8A4E -0x8A4F -0x8A50 -0x8A51 -0x8A52 -0x8A54 -0x8A55 -0x8A56 -0x8A57 -0x8A58 -0x8A59 -0x8A5B -0x8A5E -0x8A60 -0x8A61 -0x8A62 -0x8A63 -0x8A66 -0x8A68 -0x8A69 -0x8A6B -0x8A6C -0x8A6D -0x8A6E -0x8A70 -0x8A71 -0x8A72 -0x8A73 -0x8A74 -0x8A75 -0x8A76 -0x8A77 -0x8A79 -0x8A7A -0x8A7B -0x8A7C -0x8A7F -0x8A81 -0x8A82 -0x8A83 -0x8A84 -0x8A85 -0x8A86 -0x8A87 -0x8A8B -0x8A8C -0x8A8D -0x8A8F -0x8A91 -0x8A92 -0x8A93 -0x8A95 -0x8A96 -0x8A98 -0x8A99 -0x8A9A -0x8A9E -0x8AA0 -0x8AA1 -0x8AA3 -0x8AA4 -0x8AA5 -0x8AA6 -0x8AA7 -0x8AA8 -0x8AAA -0x8AAB -0x8AB0 -0x8AB2 -0x8AB6 -0x8AB8 -0x8AB9 -0x8ABA -0x8ABB -0x8ABC -0x8ABD -0x8ABE -0x8ABF -0x8AC0 -0x8AC2 -0x8AC3 -0x8AC4 -0x8AC5 -0x8AC6 -0x8AC7 -0x8AC8 -0x8AC9 -0x8ACB -0x8ACD -0x8ACF -0x8AD1 -0x8AD2 -0x8AD3 -0x8AD4 -0x8AD5 -0x8AD6 -0x8AD7 -0x8AD8 -0x8AD9 -0x8ADB -0x8ADC -0x8ADD -0x8ADE -0x8ADF -0x8AE0 -0x8AE1 -0x8AE2 -0x8AE4 -0x8AE6 -0x8AE7 -0x8AE8 -0x8AEB -0x8AED -0x8AEE -0x8AEF -0x8AF0 -0x8AF1 -0x8AF2 -0x8AF3 -0x8AF4 -0x8AF5 -0x8AF6 -0x8AF7 -0x8AF8 -0x8AFA -0x8AFB -0x8AFC -0x8AFE -0x8AFF -0x8B00 -0x8B01 -0x8B02 -0x8B04 -0x8B05 -0x8B06 -0x8B07 -0x8B08 -0x8B0A -0x8B0B -0x8B0D -0x8B0E -0x8B0F -0x8B10 -0x8B11 -0x8B12 -0x8B13 -0x8B14 -0x8B15 -0x8B16 -0x8B17 -0x8B18 -0x8B19 -0x8B1A -0x8B1B -0x8B1C -0x8B1D -0x8B1E -0x8B20 -0x8B22 -0x8B23 -0x8B24 -0x8B25 -0x8B26 -0x8B27 -0x8B28 -0x8B2A -0x8B2B -0x8B2C -0x8B2E -0x8B2F -0x8B30 -0x8B31 -0x8B33 -0x8B35 -0x8B36 -0x8B37 -0x8B39 -0x8B3A -0x8B3B -0x8B3C -0x8B3D -0x8B3E -0x8B40 -0x8B41 -0x8B42 -0x8B45 -0x8B46 -0x8B47 -0x8B48 -0x8B49 -0x8B4A -0x8B4B -0x8B4E -0x8B4F -0x8B50 -0x8B51 -0x8B52 -0x8B53 -0x8B54 -0x8B55 -0x8B56 -0x8B57 -0x8B58 -0x8B59 -0x8B5A -0x8B5C -0x8B5D -0x8B5F -0x8B60 -0x8B63 -0x8B65 -0x8B66 -0x8B67 -0x8B68 -0x8B6A -0x8B6B -0x8B6C -0x8B6D -0x8B6F -0x8B70 -0x8B74 -0x8B77 -0x8B78 -0x8B79 -0x8B7A -0x8B7B -0x8B7D -0x8B7E -0x8B7F -0x8B80 -0x8B82 -0x8B84 -0x8B85 -0x8B86 -0x8B88 -0x8B8A -0x8B8B -0x8B8C -0x8B8E -0x8B92 -0x8B93 -0x8B94 -0x8B95 -0x8B96 -0x8B98 -0x8B99 -0x8B9A -0x8B9C -0x8B9E -0x8B9F -0x8C37 -0x8C39 -0x8C3B -0x8C3C -0x8C3D -0x8C3E -0x8C3F -0x8C41 -0x8C42 -0x8C43 -0x8C45 -0x8C46 -0x8C47 -0x8C48 -0x8C49 -0x8C4A -0x8C4B -0x8C4C -0x8C4D -0x8C4E -0x8C4F -0x8C50 -0x8C54 -0x8C55 -0x8C56 -0x8C57 -0x8C5A -0x8C5C -0x8C5D -0x8C5F -0x8C61 -0x8C62 -0x8C64 -0x8C65 -0x8C66 -0x8C68 -0x8C69 -0x8C6A -0x8C6B -0x8C6C -0x8C6D -0x8C6F -0x8C70 -0x8C71 -0x8C72 -0x8C73 -0x8C75 -0x8C76 -0x8C77 -0x8C78 -0x8C79 -0x8C7A -0x8C7B -0x8C7D -0x8C80 -0x8C81 -0x8C82 -0x8C84 -0x8C85 -0x8C86 -0x8C89 -0x8C8A -0x8C8C -0x8C8D -0x8C8F -0x8C90 -0x8C91 -0x8C92 -0x8C93 -0x8C94 -0x8C95 -0x8C97 -0x8C98 -0x8C99 -0x8C9A -0x8C9C -0x8C9D -0x8C9E -0x8CA0 -0x8CA1 -0x8CA2 -0x8CA3 -0x8CA4 -0x8CA5 -0x8CA7 -0x8CA8 -0x8CA9 -0x8CAA -0x8CAB -0x8CAC -0x8CAF -0x8CB0 -0x8CB2 -0x8CB3 -0x8CB4 -0x8CB5 -0x8CB6 -0x8CB7 -0x8CB8 -0x8CB9 -0x8CBA -0x8CBB -0x8CBC -0x8CBD -0x8CBE -0x8CBF -0x8CC0 -0x8CC1 -0x8CC2 -0x8CC3 -0x8CC4 -0x8CC5 -0x8CC7 -0x8CC8 -0x8CCA -0x8CCC -0x8CCF -0x8CD1 -0x8CD2 -0x8CD3 -0x8CD5 -0x8CD7 -0x8CD9 -0x8CDA -0x8CDC -0x8CDD -0x8CDE -0x8CDF -0x8CE0 -0x8CE1 -0x8CE2 -0x8CE3 -0x8CE4 -0x8CE5 -0x8CE6 -0x8CE7 -0x8CE8 -0x8CEA -0x8CEC -0x8CED -0x8CEE -0x8CF0 -0x8CF1 -0x8CF3 -0x8CF4 -0x8CF5 -0x8CF8 -0x8CF9 -0x8CFA -0x8CFB -0x8CFC -0x8CFD -0x8CFE -0x8D00 -0x8D02 -0x8D04 -0x8D05 -0x8D06 -0x8D07 -0x8D08 -0x8D09 -0x8D0A -0x8D0D -0x8D0F -0x8D10 -0x8D13 -0x8D14 -0x8D15 -0x8D16 -0x8D17 -0x8D19 -0x8D1B -0x8D64 -0x8D66 -0x8D67 -0x8D68 -0x8D69 -0x8D6B -0x8D6C -0x8D6D -0x8D6E -0x8D6F -0x8D70 -0x8D72 -0x8D73 -0x8D74 -0x8D76 -0x8D77 -0x8D78 -0x8D79 -0x8D7B -0x8D7D -0x8D80 -0x8D81 -0x8D84 -0x8D85 -0x8D89 -0x8D8A -0x8D8C -0x8D8D -0x8D8E -0x8D8F -0x8D90 -0x8D91 -0x8D92 -0x8D93 -0x8D94 -0x8D95 -0x8D96 -0x8D99 -0x8D9B -0x8D9C -0x8D9F -0x8DA0 -0x8DA1 -0x8DA3 -0x8DA5 -0x8DA7 -0x8DA8 -0x8DAA -0x8DAB -0x8DAC -0x8DAD -0x8DAE -0x8DAF -0x8DB2 -0x8DB3 -0x8DB4 -0x8DB5 -0x8DB6 -0x8DB7 -0x8DB9 -0x8DBA -0x8DBC -0x8DBE -0x8DBF -0x8DC1 -0x8DC2 -0x8DC5 -0x8DC6 -0x8DC7 -0x8DC8 -0x8DCB -0x8DCC -0x8DCD -0x8DCE -0x8DCF -0x8DD0 -0x8DD1 -0x8DD3 -0x8DD5 -0x8DD6 -0x8DD7 -0x8DD8 -0x8DD9 -0x8DDA -0x8DDB -0x8DDC -0x8DDD -0x8DDF -0x8DE0 -0x8DE1 -0x8DE2 -0x8DE3 -0x8DE4 -0x8DE6 -0x8DE7 -0x8DE8 -0x8DE9 -0x8DEA -0x8DEB -0x8DEC -0x8DEE -0x8DEF -0x8DF0 -0x8DF1 -0x8DF2 -0x8DF3 -0x8DF4 -0x8DFA -0x8DFC -0x8DFD -0x8DFE -0x8DFF -0x8E00 -0x8E02 -0x8E03 -0x8E04 -0x8E05 -0x8E06 -0x8E07 -0x8E09 -0x8E0A -0x8E0D -0x8E0F -0x8E10 -0x8E11 -0x8E12 -0x8E13 -0x8E14 -0x8E15 -0x8E16 -0x8E17 -0x8E18 -0x8E19 -0x8E1A -0x8E1B -0x8E1C -0x8E1D -0x8E1E -0x8E1F -0x8E20 -0x8E21 -0x8E22 -0x8E23 -0x8E24 -0x8E25 -0x8E26 -0x8E27 -0x8E29 -0x8E2B -0x8E2E -0x8E30 -0x8E31 -0x8E33 -0x8E34 -0x8E35 -0x8E36 -0x8E38 -0x8E39 -0x8E3C -0x8E3D -0x8E3E -0x8E3F -0x8E40 -0x8E41 -0x8E42 -0x8E44 -0x8E45 -0x8E47 -0x8E48 -0x8E49 -0x8E4A -0x8E4B -0x8E4C -0x8E4D -0x8E4E -0x8E50 -0x8E53 -0x8E54 -0x8E55 -0x8E56 -0x8E57 -0x8E59 -0x8E5A -0x8E5B -0x8E5C -0x8E5D -0x8E5E -0x8E5F -0x8E60 -0x8E61 -0x8E62 -0x8E63 -0x8E64 -0x8E65 -0x8E66 -0x8E67 -0x8E69 -0x8E6A -0x8E6C -0x8E6D -0x8E6F -0x8E72 -0x8E73 -0x8E74 -0x8E76 -0x8E78 -0x8E7A -0x8E7B -0x8E7C -0x8E81 -0x8E82 -0x8E84 -0x8E85 -0x8E86 -0x8E87 -0x8E88 -0x8E89 -0x8E8A -0x8E8B -0x8E8C -0x8E8D -0x8E8E -0x8E90 -0x8E91 -0x8E92 -0x8E93 -0x8E94 -0x8E95 -0x8E96 -0x8E97 -0x8E98 -0x8E9A -0x8E9D -0x8E9E -0x8E9F -0x8EA0 -0x8EA1 -0x8EA3 -0x8EA4 -0x8EA5 -0x8EA6 -0x8EA8 -0x8EA9 -0x8EAA -0x8EAB -0x8EAC -0x8EB2 -0x8EBA -0x8EBD -0x8EC0 -0x8EC2 -0x8EC9 -0x8ECA -0x8ECB -0x8ECC -0x8ECD -0x8ECF -0x8ED1 -0x8ED2 -0x8ED3 -0x8ED4 -0x8ED7 -0x8ED8 -0x8EDB -0x8EDC -0x8EDD -0x8EDE -0x8EDF -0x8EE0 -0x8EE1 -0x8EE5 -0x8EE6 -0x8EE7 -0x8EE8 -0x8EE9 -0x8EEB -0x8EEC -0x8EEE -0x8EEF -0x8EF1 -0x8EF4 -0x8EF5 -0x8EF6 -0x8EF7 -0x8EF8 -0x8EF9 -0x8EFA -0x8EFB -0x8EFC -0x8EFE -0x8EFF -0x8F00 -0x8F01 -0x8F02 -0x8F03 -0x8F05 -0x8F06 -0x8F07 -0x8F08 -0x8F09 -0x8F0A -0x8F0B -0x8F0D -0x8F0E -0x8F10 -0x8F11 -0x8F12 -0x8F13 -0x8F14 -0x8F15 -0x8F16 -0x8F17 -0x8F18 -0x8F1A -0x8F1B -0x8F1C -0x8F1D -0x8F1E -0x8F1F -0x8F20 -0x8F23 -0x8F24 -0x8F25 -0x8F26 -0x8F29 -0x8F2A -0x8F2C -0x8F2E -0x8F2F -0x8F32 -0x8F33 -0x8F34 -0x8F35 -0x8F36 -0x8F37 -0x8F38 -0x8F39 -0x8F3B -0x8F3E -0x8F3F -0x8F40 -0x8F42 -0x8F43 -0x8F44 -0x8F45 -0x8F46 -0x8F47 -0x8F48 -0x8F49 -0x8F4B -0x8F4D -0x8F4E -0x8F4F -0x8F50 -0x8F51 -0x8F52 -0x8F53 -0x8F54 -0x8F55 -0x8F56 -0x8F57 -0x8F58 -0x8F59 -0x8F5A -0x8F5B -0x8F5D -0x8F5E -0x8F5F -0x8F60 -0x8F61 -0x8F62 -0x8F63 -0x8F64 -0x8F9B -0x8F9C -0x8F9F -0x8FA3 -0x8FA6 -0x8FA8 -0x8FAD -0x8FAE -0x8FAF -0x8FB0 -0x8FB1 -0x8FB2 -0x8FB4 -0x8FBF -0x8FC2 -0x8FC4 -0x8FC5 -0x8FC6 -0x8FC9 -0x8FCB -0x8FCD -0x8FCE -0x8FD1 -0x8FD2 -0x8FD3 -0x8FD4 -0x8FD5 -0x8FD6 -0x8FD7 -0x8FE0 -0x8FE1 -0x8FE2 -0x8FE3 -0x8FE4 -0x8FE5 -0x8FE6 -0x8FE8 -0x8FEA -0x8FEB -0x8FED -0x8FEE -0x8FF0 -0x8FF4 -0x8FF5 -0x8FF6 -0x8FF7 -0x8FF8 -0x8FFA -0x8FFB -0x8FFC -0x8FFD -0x8FFE -0x8FFF -0x9000 -0x9001 -0x9002 -0x9003 -0x9004 -0x9005 -0x9006 -0x900B -0x900C -0x900D -0x900F -0x9010 -0x9011 -0x9014 -0x9015 -0x9016 -0x9017 -0x9019 -0x901A -0x901B -0x901C -0x901D -0x901E -0x901F -0x9020 -0x9021 -0x9022 -0x9023 -0x9024 -0x902D -0x902E -0x902F -0x9031 -0x9032 -0x9034 -0x9035 -0x9036 -0x9038 -0x903C -0x903D -0x903E -0x903F -0x9041 -0x9042 -0x9044 -0x9047 -0x9049 -0x904A -0x904B -0x904D -0x904E -0x904F -0x9050 -0x9051 -0x9052 -0x9053 -0x9054 -0x9055 -0x9058 -0x9059 -0x905B -0x905C -0x905D -0x905E -0x9060 -0x9062 -0x9063 -0x9067 -0x9068 -0x9069 -0x906B -0x906D -0x906E -0x906F -0x9070 -0x9072 -0x9073 -0x9074 -0x9075 -0x9076 -0x9077 -0x9078 -0x9079 -0x907A -0x907B -0x907C -0x907D -0x907E -0x907F -0x9080 -0x9081 -0x9082 -0x9083 -0x9084 -0x9085 -0x9086 -0x9087 -0x9088 -0x908A -0x908B -0x908D -0x908F -0x9090 -0x9091 -0x9094 -0x9095 -0x9097 -0x9098 -0x9099 -0x909B -0x909E -0x909F -0x90A0 -0x90A1 -0x90A2 -0x90A3 -0x90A5 -0x90A6 -0x90A7 -0x90AA -0x90AF -0x90B0 -0x90B1 -0x90B2 -0x90B3 -0x90B4 -0x90B5 -0x90B6 -0x90B8 -0x90BD -0x90BE -0x90BF -0x90C1 -0x90C3 -0x90C5 -0x90C7 -0x90C8 -0x90CA -0x90CB -0x90CE -0x90D4 -0x90D5 -0x90D6 -0x90D7 -0x90D8 -0x90D9 -0x90DA -0x90DB -0x90DC -0x90DD -0x90DF -0x90E0 -0x90E1 -0x90E2 -0x90E3 -0x90E4 -0x90E5 -0x90E8 -0x90E9 -0x90EA -0x90EB -0x90EC -0x90ED -0x90EF -0x90F0 -0x90F1 -0x90F2 -0x90F3 -0x90F4 -0x90F5 -0x90F9 -0x90FA -0x90FB -0x90FC -0x90FD -0x90FE -0x90FF -0x9100 -0x9101 -0x9102 -0x9103 -0x9104 -0x9105 -0x9106 -0x9107 -0x9108 -0x9109 -0x910B -0x910D -0x910E -0x910F -0x9110 -0x9111 -0x9112 -0x9114 -0x9116 -0x9117 -0x9118 -0x9119 -0x911A -0x911B -0x911C -0x911D -0x911E -0x911F -0x9120 -0x9121 -0x9122 -0x9123 -0x9124 -0x9126 -0x9127 -0x9128 -0x9129 -0x912A -0x912B -0x912C -0x912D -0x912E -0x912F -0x9130 -0x9131 -0x9132 -0x9133 -0x9134 -0x9135 -0x9136 -0x9138 -0x9139 -0x913A -0x913B -0x913E -0x913F -0x9140 -0x9141 -0x9143 -0x9144 -0x9145 -0x9146 -0x9147 -0x9148 -0x9149 -0x914A -0x914B -0x914C -0x914D -0x914E -0x914F -0x9150 -0x9152 -0x9153 -0x9155 -0x9156 -0x9157 -0x9158 -0x915A -0x915F -0x9160 -0x9161 -0x9162 -0x9163 -0x9164 -0x9165 -0x9168 -0x9169 -0x916A -0x916C -0x916E -0x916F -0x9172 -0x9173 -0x9174 -0x9175 -0x9177 -0x9178 -0x9179 -0x917A -0x9180 -0x9181 -0x9182 -0x9183 -0x9184 -0x9185 -0x9186 -0x9187 -0x9189 -0x918A -0x918B -0x918D -0x918F -0x9190 -0x9191 -0x9192 -0x9193 -0x9199 -0x919A -0x919B -0x919C -0x919D -0x919E -0x919F -0x91A0 -0x91A1 -0x91A2 -0x91A3 -0x91A5 -0x91A7 -0x91A8 -0x91AA -0x91AB -0x91AC -0x91AD -0x91AE -0x91AF -0x91B0 -0x91B1 -0x91B2 -0x91B3 -0x91B4 -0x91B5 -0x91B7 -0x91B9 -0x91BA -0x91BC -0x91BD -0x91BE -0x91C0 -0x91C1 -0x91C2 -0x91C3 -0x91C5 -0x91C6 -0x91C7 -0x91C9 -0x91CB -0x91CC -0x91CD -0x91CE -0x91CF -0x91D0 -0x91D1 -0x91D3 -0x91D4 -0x91D5 -0x91D7 -0x91D8 -0x91D9 -0x91DA -0x91DC -0x91DD -0x91E2 -0x91E3 -0x91E4 -0x91E6 -0x91E7 -0x91E8 -0x91E9 -0x91EA -0x91EB -0x91EC -0x91ED -0x91EE -0x91F1 -0x91F3 -0x91F4 -0x91F5 -0x91F7 -0x91F8 -0x91F9 -0x91FD -0x91FF -0x9200 -0x9201 -0x9202 -0x9203 -0x9204 -0x9205 -0x9206 -0x9207 -0x9209 -0x920A -0x920C -0x920D -0x920F -0x9210 -0x9211 -0x9212 -0x9214 -0x9215 -0x9216 -0x9217 -0x9219 -0x921A -0x921C -0x921E -0x9223 -0x9224 -0x9225 -0x9226 -0x9227 -0x922D -0x922E -0x9230 -0x9231 -0x9232 -0x9233 -0x9234 -0x9236 -0x9237 -0x9238 -0x9239 -0x923A -0x923D -0x923E -0x923F -0x9240 -0x9245 -0x9246 -0x9248 -0x9249 -0x924A -0x924B -0x924C -0x924D -0x924E -0x924F -0x9250 -0x9251 -0x9252 -0x9253 -0x9254 -0x9256 -0x9257 -0x925A -0x925B -0x925E -0x9260 -0x9261 -0x9263 -0x9264 -0x9265 -0x9266 -0x9267 -0x926C -0x926D -0x926F -0x9270 -0x9272 -0x9276 -0x9278 -0x9279 -0x927A -0x927B -0x927C -0x927D -0x927E -0x927F -0x9280 -0x9282 -0x9283 -0x9285 -0x9286 -0x9287 -0x9288 -0x928A -0x928B -0x928C -0x928D -0x928E -0x9291 -0x9293 -0x9294 -0x9295 -0x9296 -0x9297 -0x9298 -0x9299 -0x929A -0x929B -0x929C -0x929D -0x92A0 -0x92A1 -0x92A2 -0x92A3 -0x92A4 -0x92A5 -0x92A6 -0x92A7 -0x92A8 -0x92A9 -0x92AA -0x92AB -0x92AC -0x92B2 -0x92B3 -0x92B4 -0x92B5 -0x92B6 -0x92B7 -0x92BB -0x92BC -0x92C0 -0x92C1 -0x92C2 -0x92C3 -0x92C4 -0x92C5 -0x92C6 -0x92C7 -0x92C8 -0x92C9 -0x92CA -0x92CB -0x92CC -0x92CD -0x92CE -0x92CF -0x92D0 -0x92D1 -0x92D2 -0x92D3 -0x92D5 -0x92D7 -0x92D8 -0x92D9 -0x92DD -0x92DE -0x92DF -0x92E0 -0x92E1 -0x92E4 -0x92E6 -0x92E7 -0x92E8 -0x92E9 -0x92EA -0x92EE -0x92EF -0x92F0 -0x92F1 -0x92F7 -0x92F8 -0x92F9 -0x92FA -0x92FB -0x92FC -0x92FE -0x92FF -0x9300 -0x9301 -0x9302 -0x9304 -0x9306 -0x9308 -0x9309 -0x930B -0x930C -0x930D -0x930E -0x930F -0x9310 -0x9312 -0x9313 -0x9314 -0x9315 -0x9316 -0x9318 -0x9319 -0x931A -0x931B -0x931D -0x931E -0x931F -0x9320 -0x9321 -0x9322 -0x9323 -0x9324 -0x9325 -0x9326 -0x9327 -0x9328 -0x9329 -0x932A -0x932B -0x932D -0x932E -0x932F -0x9333 -0x9334 -0x9335 -0x9336 -0x9338 -0x9339 -0x933C -0x9346 -0x9347 -0x9349 -0x934A -0x934B -0x934C -0x934D -0x934E -0x934F -0x9350 -0x9351 -0x9352 -0x9354 -0x9355 -0x9356 -0x9357 -0x9358 -0x9359 -0x935A -0x935B -0x935C -0x935E -0x9360 -0x9361 -0x9363 -0x9364 -0x9365 -0x9367 -0x936A -0x936C -0x936D -0x9370 -0x9371 -0x9375 -0x9376 -0x9377 -0x9379 -0x937A -0x937B -0x937C -0x937E -0x9380 -0x9382 -0x9383 -0x9388 -0x9389 -0x938A -0x938C -0x938D -0x938E -0x938F -0x9391 -0x9392 -0x9394 -0x9395 -0x9396 -0x9397 -0x9398 -0x9399 -0x939A -0x939B -0x939D -0x939E -0x939F -0x93A1 -0x93A2 -0x93A3 -0x93A4 -0x93A5 -0x93A6 -0x93A7 -0x93A8 -0x93A9 -0x93AA -0x93AC -0x93AE -0x93AF -0x93B0 -0x93B1 -0x93B2 -0x93B3 -0x93B4 -0x93B5 -0x93B7 -0x93C0 -0x93C2 -0x93C3 -0x93C4 -0x93C7 -0x93C8 -0x93CA -0x93CC -0x93CD -0x93CE -0x93CF -0x93D0 -0x93D1 -0x93D2 -0x93D4 -0x93D5 -0x93D6 -0x93D7 -0x93D8 -0x93D9 -0x93DA -0x93DC -0x93DD -0x93DE -0x93DF -0x93E1 -0x93E2 -0x93E3 -0x93E4 -0x93E6 -0x93E7 -0x93E8 -0x93EC -0x93EE -0x93F5 -0x93F6 -0x93F7 -0x93F8 -0x93F9 -0x93FA -0x93FB -0x93FC -0x93FD -0x93FE -0x93FF -0x9400 -0x9403 -0x9406 -0x9407 -0x9409 -0x940A -0x940B -0x940C -0x940D -0x940E -0x940F -0x9410 -0x9411 -0x9412 -0x9413 -0x9414 -0x9415 -0x9416 -0x9418 -0x9419 -0x9420 -0x9428 -0x9429 -0x942A -0x942B -0x942C -0x942E -0x9430 -0x9431 -0x9432 -0x9433 -0x9435 -0x9436 -0x9437 -0x9438 -0x9439 -0x943A -0x943B -0x943C -0x943D -0x943F -0x9440 -0x9444 -0x9445 -0x9446 -0x9447 -0x9448 -0x9449 -0x944A -0x944B -0x944C -0x944F -0x9450 -0x9451 -0x9452 -0x9455 -0x9457 -0x945D -0x945E -0x9460 -0x9462 -0x9463 -0x9464 -0x9468 -0x9469 -0x946A -0x946B -0x946D -0x946E -0x946F -0x9470 -0x9471 -0x9472 -0x9473 -0x9474 -0x9475 -0x9476 -0x9477 -0x9478 -0x947C -0x947D -0x947E -0x947F -0x9480 -0x9481 -0x9482 -0x9483 -0x9577 -0x957A -0x957B -0x957C -0x957D -0x9580 -0x9582 -0x9583 -0x9586 -0x9588 -0x9589 -0x958B -0x958C -0x958D -0x958E -0x958F -0x9590 -0x9591 -0x9592 -0x9593 -0x9594 -0x9598 -0x959B -0x959C -0x959E -0x959F -0x95A1 -0x95A3 -0x95A4 -0x95A5 -0x95A8 -0x95A9 -0x95AB -0x95AC -0x95AD -0x95AE -0x95B0 -0x95B1 -0x95B5 -0x95B6 -0x95B7 -0x95B9 -0x95BA -0x95BB -0x95BC -0x95BD -0x95BE -0x95BF -0x95C0 -0x95C3 -0x95C5 -0x95C6 -0x95C7 -0x95C8 -0x95C9 -0x95CA -0x95CB -0x95CC -0x95CD -0x95D0 -0x95D1 -0x95D2 -0x95D3 -0x95D4 -0x95D5 -0x95D6 -0x95DA -0x95DB -0x95DC -0x95DE -0x95DF -0x95E0 -0x95E1 -0x95E2 -0x95E3 -0x95E4 -0x95E5 -0x961C -0x961E -0x9620 -0x9621 -0x9622 -0x9623 -0x9624 -0x9628 -0x962A -0x962C -0x962D -0x962E -0x962F -0x9630 -0x9631 -0x9632 -0x9639 -0x963A -0x963B -0x963C -0x963D -0x963F -0x9640 -0x9642 -0x9643 -0x9644 -0x964A -0x964B -0x964C -0x964D -0x964E -0x964F -0x9650 -0x9651 -0x9653 -0x9654 -0x9658 -0x965B -0x965C -0x965D -0x965E -0x965F -0x9661 -0x9662 -0x9663 -0x9664 -0x966A -0x966B -0x966C -0x966D -0x966F -0x9670 -0x9671 -0x9672 -0x9673 -0x9674 -0x9675 -0x9676 -0x9677 -0x9678 -0x967C -0x967D -0x967E -0x9680 -0x9683 -0x9684 -0x9685 -0x9686 -0x9687 -0x9688 -0x9689 -0x968A -0x968B -0x968D -0x968E -0x9691 -0x9692 -0x9693 -0x9694 -0x9695 -0x9697 -0x9698 -0x9699 -0x969B -0x969C -0x969E -0x96A1 -0x96A2 -0x96A4 -0x96A7 -0x96A8 -0x96A9 -0x96AA -0x96AC -0x96AE -0x96B0 -0x96B1 -0x96B3 -0x96B4 -0x96B8 -0x96B9 -0x96BB -0x96BC -0x96BF -0x96C0 -0x96C1 -0x96C2 -0x96C3 -0x96C4 -0x96C5 -0x96C6 -0x96C7 -0x96C8 -0x96C9 -0x96CA -0x96CB -0x96CC -0x96CD -0x96CE -0x96D2 -0x96D3 -0x96D4 -0x96D5 -0x96D6 -0x96D7 -0x96D8 -0x96D9 -0x96DA -0x96DB -0x96DC -0x96DD -0x96DE -0x96DF -0x96E1 -0x96E2 -0x96E3 -0x96E5 -0x96E8 -0x96E9 -0x96EA -0x96EF -0x96F0 -0x96F1 -0x96F2 -0x96F5 -0x96F6 -0x96F7 -0x96F8 -0x96F9 -0x96FA -0x96FB -0x96FD -0x96FF -0x9700 -0x9702 -0x9704 -0x9705 -0x9706 -0x9707 -0x9708 -0x9709 -0x970B -0x970D -0x970E -0x970F -0x9710 -0x9711 -0x9712 -0x9713 -0x9716 -0x9718 -0x9719 -0x971C -0x971D -0x971E -0x971F -0x9720 -0x9722 -0x9723 -0x9724 -0x9725 -0x9726 -0x9727 -0x9728 -0x9729 -0x972A -0x972B -0x972C -0x972E -0x972F -0x9730 -0x9732 -0x9735 -0x9738 -0x9739 -0x973A -0x973D -0x973E -0x973F -0x9742 -0x9743 -0x9744 -0x9746 -0x9747 -0x9748 -0x9749 -0x974B -0x9752 -0x9756 -0x9758 -0x975A -0x975B -0x975C -0x975E -0x9760 -0x9761 -0x9762 -0x9766 -0x9768 -0x9769 -0x976A -0x976C -0x976E -0x9770 -0x9772 -0x9773 -0x9774 -0x9776 -0x9777 -0x9778 -0x977A -0x977B -0x977C -0x977D -0x977E -0x977F -0x9780 -0x9781 -0x9782 -0x9783 -0x9784 -0x9785 -0x9788 -0x978A -0x978B -0x978D -0x978E -0x978F -0x9794 -0x9797 -0x9798 -0x9799 -0x979A -0x979C -0x979D -0x979E -0x97A0 -0x97A1 -0x97A2 -0x97A3 -0x97A4 -0x97A5 -0x97A6 -0x97A8 -0x97AA -0x97AB -0x97AC -0x97AD -0x97AE -0x97B3 -0x97B6 -0x97B7 -0x97B9 -0x97BB -0x97BF -0x97C1 -0x97C3 -0x97C4 -0x97C5 -0x97C6 -0x97C7 -0x97C9 -0x97CB -0x97CC -0x97CD -0x97CE -0x97CF -0x97D0 -0x97D3 -0x97D4 -0x97D5 -0x97D6 -0x97D7 -0x97D8 -0x97D9 -0x97DC -0x97DD -0x97DE -0x97DF -0x97E1 -0x97E3 -0x97E5 -0x97ED -0x97F0 -0x97F1 -0x97F3 -0x97F6 -0x97F8 -0x97F9 -0x97FA -0x97FB -0x97FD -0x97FE -0x97FF -0x9800 -0x9801 -0x9802 -0x9803 -0x9804 -0x9805 -0x9806 -0x9807 -0x9808 -0x980A -0x980C -0x980D -0x980E -0x980F -0x9810 -0x9811 -0x9812 -0x9813 -0x9816 -0x9817 -0x9818 -0x981B -0x981C -0x981D -0x981E -0x9820 -0x9821 -0x9824 -0x9826 -0x9827 -0x9828 -0x9829 -0x982B -0x982D -0x982F -0x9830 -0x9832 -0x9835 -0x9837 -0x9838 -0x9839 -0x983B -0x9841 -0x9843 -0x9844 -0x9845 -0x9846 -0x9848 -0x9849 -0x984A -0x984C -0x984D -0x984E -0x984F -0x9850 -0x9851 -0x9852 -0x9853 -0x9857 -0x9858 -0x9859 -0x985B -0x985C -0x985D -0x985E -0x985F -0x9860 -0x9862 -0x9863 -0x9864 -0x9865 -0x9867 -0x9869 -0x986A -0x986B -0x986F -0x9870 -0x9871 -0x9872 -0x9873 -0x9874 -0x98A8 -0x98A9 -0x98AC -0x98AD -0x98AE -0x98AF -0x98B1 -0x98B2 -0x98B3 -0x98B6 -0x98B8 -0x98BA -0x98BB -0x98BC -0x98BD -0x98BE -0x98BF -0x98C0 -0x98C1 -0x98C2 -0x98C4 -0x98C6 -0x98C9 -0x98CB -0x98CC -0x98DB -0x98DF -0x98E2 -0x98E3 -0x98E5 -0x98E7 -0x98E9 -0x98EA -0x98EB -0x98ED -0x98EF -0x98F2 -0x98F4 -0x98F6 -0x98F9 -0x98FA -0x98FC -0x98FD -0x98FE -0x9900 -0x9902 -0x9903 -0x9905 -0x9907 -0x9908 -0x9909 -0x990A -0x990C -0x9910 -0x9911 -0x9912 -0x9913 -0x9914 -0x9915 -0x9916 -0x9917 -0x9918 -0x991A -0x991B -0x991E -0x991F -0x9921 -0x9924 -0x9925 -0x9927 -0x9928 -0x9929 -0x992A -0x992B -0x992C -0x992D -0x992E -0x992F -0x9930 -0x9931 -0x9932 -0x9933 -0x9935 -0x993A -0x993C -0x993D -0x993E -0x993F -0x9941 -0x9943 -0x9945 -0x9947 -0x9948 -0x9949 -0x994B -0x994C -0x994E -0x9950 -0x9951 -0x9952 -0x9953 -0x9954 -0x9955 -0x9956 -0x9957 -0x9958 -0x9959 -0x995B -0x995C -0x995E -0x995F -0x9961 -0x9996 -0x9997 -0x9998 -0x9999 -0x999C -0x999D -0x999E -0x99A1 -0x99A3 -0x99A5 -0x99A6 -0x99A7 -0x99A8 -0x99AB -0x99AC -0x99AD -0x99AE -0x99AF -0x99B0 -0x99B1 -0x99B2 -0x99B3 -0x99B4 -0x99B5 -0x99B9 -0x99BA -0x99BB -0x99BD -0x99C1 -0x99C2 -0x99C3 -0x99C7 -0x99C9 -0x99CB -0x99CC -0x99CD -0x99CE -0x99CF -0x99D0 -0x99D1 -0x99D2 -0x99D3 -0x99D4 -0x99D5 -0x99D6 -0x99D7 -0x99D8 -0x99D9 -0x99DB -0x99DC -0x99DD -0x99DF -0x99E2 -0x99E3 -0x99E4 -0x99E5 -0x99E7 -0x99E9 -0x99EA -0x99EC -0x99ED -0x99EE -0x99F0 -0x99F1 -0x99F4 -0x99F6 -0x99F7 -0x99F8 -0x99F9 -0x99FA -0x99FB -0x99FC -0x99FD -0x99FE -0x99FF -0x9A01 -0x9A02 -0x9A03 -0x9A04 -0x9A05 -0x9A06 -0x9A07 -0x9A09 -0x9A0A -0x9A0B -0x9A0D -0x9A0E -0x9A0F -0x9A11 -0x9A14 -0x9A15 -0x9A16 -0x9A19 -0x9A1A -0x9A1B -0x9A1C -0x9A1D -0x9A1E -0x9A20 -0x9A22 -0x9A23 -0x9A24 -0x9A25 -0x9A27 -0x9A29 -0x9A2A -0x9A2B -0x9A2C -0x9A2D -0x9A2E -0x9A30 -0x9A31 -0x9A32 -0x9A34 -0x9A35 -0x9A36 -0x9A37 -0x9A38 -0x9A39 -0x9A3A -0x9A3D -0x9A3E -0x9A3F -0x9A40 -0x9A41 -0x9A42 -0x9A43 -0x9A44 -0x9A45 -0x9A46 -0x9A48 -0x9A49 -0x9A4A -0x9A4C -0x9A4D -0x9A4E -0x9A4F -0x9A50 -0x9A52 -0x9A53 -0x9A54 -0x9A55 -0x9A56 -0x9A57 -0x9A59 -0x9A5A -0x9A5B -0x9A5E -0x9A5F -0x9A60 -0x9A62 -0x9A64 -0x9A65 -0x9A66 -0x9A67 -0x9A68 -0x9A69 -0x9A6A -0x9A6B -0x9AA8 -0x9AAB -0x9AAD -0x9AAF -0x9AB0 -0x9AB1 -0x9AB3 -0x9AB4 -0x9AB7 -0x9AB8 -0x9AB9 -0x9ABB -0x9ABC -0x9ABE -0x9ABF -0x9AC0 -0x9AC1 -0x9AC2 -0x9AC6 -0x9AC7 -0x9ACA -0x9ACD -0x9ACF -0x9AD0 -0x9AD1 -0x9AD2 -0x9AD3 -0x9AD4 -0x9AD5 -0x9AD6 -0x9AD8 -0x9ADC -0x9ADF -0x9AE1 -0x9AE3 -0x9AE6 -0x9AE7 -0x9AEB -0x9AEC -0x9AED -0x9AEE -0x9AEF -0x9AF1 -0x9AF2 -0x9AF3 -0x9AF6 -0x9AF7 -0x9AF9 -0x9AFA -0x9AFB -0x9AFC -0x9AFD -0x9AFE -0x9B01 -0x9B03 -0x9B04 -0x9B05 -0x9B06 -0x9B08 -0x9B0A -0x9B0B -0x9B0C -0x9B0D -0x9B0E -0x9B10 -0x9B11 -0x9B12 -0x9B15 -0x9B16 -0x9B17 -0x9B18 -0x9B19 -0x9B1A -0x9B1E -0x9B1F -0x9B20 -0x9B22 -0x9B23 -0x9B24 -0x9B25 -0x9B27 -0x9B28 -0x9B29 -0x9B2B -0x9B2E -0x9B2F -0x9B31 -0x9B32 -0x9B33 -0x9B35 -0x9B37 -0x9B3A -0x9B3B -0x9B3C -0x9B3E -0x9B3F -0x9B41 -0x9B42 -0x9B43 -0x9B44 -0x9B45 -0x9B46 -0x9B48 -0x9B4A -0x9B4B -0x9B4C -0x9B4D -0x9B4E -0x9B4F -0x9B51 -0x9B52 -0x9B54 -0x9B55 -0x9B56 -0x9B58 -0x9B59 -0x9B5A -0x9B5B -0x9B5F -0x9B60 -0x9B61 -0x9B64 -0x9B66 -0x9B67 -0x9B68 -0x9B6C -0x9B6F -0x9B70 -0x9B71 -0x9B74 -0x9B75 -0x9B76 -0x9B77 -0x9B7A -0x9B7B -0x9B7C -0x9B7D -0x9B7E -0x9B80 -0x9B82 -0x9B85 -0x9B86 -0x9B87 -0x9B88 -0x9B90 -0x9B91 -0x9B92 -0x9B93 -0x9B95 -0x9B9A -0x9B9B -0x9B9E -0x9BA0 -0x9BA1 -0x9BA2 -0x9BA4 -0x9BA5 -0x9BA6 -0x9BA8 -0x9BAA -0x9BAB -0x9BAD -0x9BAE -0x9BAF -0x9BB5 -0x9BB6 -0x9BB8 -0x9BB9 -0x9BBD -0x9BBF -0x9BC0 -0x9BC1 -0x9BC3 -0x9BC4 -0x9BC6 -0x9BC7 -0x9BC8 -0x9BC9 -0x9BCA -0x9BD3 -0x9BD4 -0x9BD5 -0x9BD6 -0x9BD7 -0x9BD9 -0x9BDA -0x9BDB -0x9BDC -0x9BDE -0x9BE0 -0x9BE1 -0x9BE2 -0x9BE4 -0x9BE5 -0x9BE6 -0x9BE7 -0x9BE8 -0x9BEA -0x9BEB -0x9BEC -0x9BF0 -0x9BF7 -0x9BF8 -0x9BFD -0x9C05 -0x9C06 -0x9C07 -0x9C08 -0x9C09 -0x9C0B -0x9C0D -0x9C0E -0x9C12 -0x9C13 -0x9C14 -0x9C17 -0x9C1C -0x9C1D -0x9C21 -0x9C23 -0x9C24 -0x9C25 -0x9C28 -0x9C29 -0x9C2B -0x9C2C -0x9C2D -0x9C31 -0x9C32 -0x9C33 -0x9C34 -0x9C36 -0x9C37 -0x9C39 -0x9C3B -0x9C3C -0x9C3D -0x9C3E -0x9C3F -0x9C40 -0x9C41 -0x9C44 -0x9C46 -0x9C48 -0x9C49 -0x9C4A -0x9C4B -0x9C4C -0x9C4D -0x9C4E -0x9C50 -0x9C52 -0x9C54 -0x9C55 -0x9C56 -0x9C57 -0x9C58 -0x9C59 -0x9C5E -0x9C5F -0x9C60 -0x9C62 -0x9C63 -0x9C66 -0x9C67 -0x9C68 -0x9C6D -0x9C6E -0x9C71 -0x9C73 -0x9C74 -0x9C75 -0x9C77 -0x9C78 -0x9C79 -0x9C7A -0x9CE5 -0x9CE6 -0x9CE7 -0x9CE9 -0x9CEA -0x9CED -0x9CF1 -0x9CF2 -0x9CF3 -0x9CF4 -0x9CF5 -0x9CF6 -0x9CF7 -0x9CF9 -0x9CFA -0x9CFB -0x9CFC -0x9CFD -0x9CFF -0x9D00 -0x9D03 -0x9D04 -0x9D05 -0x9D06 -0x9D07 -0x9D08 -0x9D09 -0x9D10 -0x9D12 -0x9D14 -0x9D15 -0x9D17 -0x9D18 -0x9D19 -0x9D1B -0x9D1D -0x9D1E -0x9D1F -0x9D20 -0x9D22 -0x9D23 -0x9D25 -0x9D26 -0x9D28 -0x9D29 -0x9D2D -0x9D2E -0x9D2F -0x9D30 -0x9D31 -0x9D33 -0x9D36 -0x9D37 -0x9D38 -0x9D3B -0x9D3D -0x9D3E -0x9D3F -0x9D40 -0x9D41 -0x9D42 -0x9D43 -0x9D45 -0x9D4A -0x9D4B -0x9D4C -0x9D4F -0x9D51 -0x9D52 -0x9D53 -0x9D54 -0x9D56 -0x9D57 -0x9D58 -0x9D59 -0x9D5A -0x9D5B -0x9D5C -0x9D5D -0x9D5F -0x9D60 -0x9D61 -0x9D67 -0x9D68 -0x9D69 -0x9D6A -0x9D6B -0x9D6C -0x9D6F -0x9D70 -0x9D71 -0x9D72 -0x9D73 -0x9D74 -0x9D75 -0x9D77 -0x9D78 -0x9D79 -0x9D7B -0x9D7D -0x9D7F -0x9D80 -0x9D81 -0x9D82 -0x9D84 -0x9D85 -0x9D86 -0x9D87 -0x9D88 -0x9D89 -0x9D8A -0x9D8B -0x9D8C -0x9D90 -0x9D92 -0x9D94 -0x9D96 -0x9D97 -0x9D98 -0x9D99 -0x9D9A -0x9D9B -0x9D9C -0x9D9D -0x9D9E -0x9D9F -0x9DA0 -0x9DA1 -0x9DA2 -0x9DA3 -0x9DA4 -0x9DA6 -0x9DA7 -0x9DA8 -0x9DA9 -0x9DAA -0x9DAC -0x9DAD -0x9DAF -0x9DB1 -0x9DB2 -0x9DB3 -0x9DB4 -0x9DB5 -0x9DB6 -0x9DB7 -0x9DB8 -0x9DB9 -0x9DBA -0x9DBB -0x9DBC -0x9DBE -0x9DBF -0x9DC1 -0x9DC2 -0x9DC3 -0x9DC5 -0x9DC7 -0x9DC8 -0x9DCA -0x9DCB -0x9DCC -0x9DCD -0x9DCE -0x9DCF -0x9DD0 -0x9DD1 -0x9DD2 -0x9DD3 -0x9DD5 -0x9DD6 -0x9DD7 -0x9DD8 -0x9DD9 -0x9DDA -0x9DDB -0x9DDC -0x9DDD -0x9DDE -0x9DDF -0x9DE1 -0x9DE2 -0x9DE3 -0x9DE4 -0x9DE5 -0x9DE6 -0x9DE8 -0x9DE9 -0x9DEB -0x9DEC -0x9DED -0x9DEE -0x9DEF -0x9DF0 -0x9DF2 -0x9DF3 -0x9DF4 -0x9DF5 -0x9DF6 -0x9DF7 -0x9DF8 -0x9DF9 -0x9DFA -0x9DFB -0x9DFD -0x9DFE -0x9DFF -0x9E00 -0x9E01 -0x9E02 -0x9E03 -0x9E04 -0x9E05 -0x9E06 -0x9E07 -0x9E09 -0x9E0B -0x9E0D -0x9E0F -0x9E10 -0x9E11 -0x9E12 -0x9E13 -0x9E14 -0x9E15 -0x9E17 -0x9E19 -0x9E1A -0x9E1B -0x9E1D -0x9E1E -0x9E75 -0x9E79 -0x9E7A -0x9E7C -0x9E7D -0x9E7F -0x9E80 -0x9E82 -0x9E83 -0x9E86 -0x9E87 -0x9E88 -0x9E89 -0x9E8A -0x9E8B -0x9E8C -0x9E8D -0x9E8E -0x9E91 -0x9E92 -0x9E93 -0x9E94 -0x9E97 -0x9E99 -0x9E9A -0x9E9B -0x9E9C -0x9E9D -0x9E9F -0x9EA0 -0x9EA1 -0x9EA4 -0x9EA5 -0x9EA7 -0x9EA9 -0x9EAD -0x9EAE -0x9EB0 -0x9EB4 -0x9EB5 -0x9EB6 -0x9EB7 -0x9EBB -0x9EBC -0x9EBE -0x9EC0 -0x9EC2 -0x9EC3 -0x9EC8 -0x9ECC -0x9ECD -0x9ECE -0x9ECF -0x9ED0 -0x9ED1 -0x9ED3 -0x9ED4 -0x9ED5 -0x9ED6 -0x9ED8 -0x9EDA -0x9EDB -0x9EDC -0x9EDD -0x9EDE -0x9EDF -0x9EE0 -0x9EE4 -0x9EE5 -0x9EE6 -0x9EE7 -0x9EE8 -0x9EEB -0x9EED -0x9EEE -0x9EEF -0x9EF0 -0x9EF2 -0x9EF3 -0x9EF4 -0x9EF5 -0x9EF6 -0x9EF7 -0x9EF9 -0x9EFA -0x9EFB -0x9EFC -0x9EFD -0x9EFF -0x9F00 -0x9F01 -0x9F06 -0x9F07 -0x9F09 -0x9F0A -0x9F0E -0x9F0F -0x9F10 -0x9F12 -0x9F13 -0x9F15 -0x9F16 -0x9F18 -0x9F19 -0x9F1A -0x9F1B -0x9F1C -0x9F1E -0x9F20 -0x9F22 -0x9F23 -0x9F24 -0x9F25 -0x9F28 -0x9F29 -0x9F2A -0x9F2B -0x9F2C -0x9F2D -0x9F2E -0x9F2F -0x9F30 -0x9F31 -0x9F32 -0x9F33 -0x9F34 -0x9F35 -0x9F36 -0x9F37 -0x9F38 -0x9F3B -0x9F3D -0x9F3E -0x9F40 -0x9F41 -0x9F42 -0x9F43 -0x9F46 -0x9F47 -0x9F48 -0x9F49 -0x9F4A -0x9F4B -0x9F4C -0x9F4D -0x9F4E -0x9F4F -0x9F52 -0x9F54 -0x9F55 -0x9F56 -0x9F57 -0x9F58 -0x9F59 -0x9F5B -0x9F5C -0x9F5D -0x9F5E -0x9F5F -0x9F60 -0x9F61 -0x9F63 -0x9F64 -0x9F65 -0x9F66 -0x9F67 -0x9F6A -0x9F6B -0x9F6C -0x9F6E -0x9F6F -0x9F70 -0x9F71 -0x9F72 -0x9F74 -0x9F75 -0x9F76 -0x9F77 -0x9F78 -0x9F79 -0x9F7A -0x9F7B -0x9F7E -0x9F8D -0x9F90 -0x9F91 -0x9F92 -0x9F94 -0x9F95 -0x9F98 -0x9F9C -0x9FA0 -0x9FA2 -0x9FA4 -0xFA0C -0xFA0D +# +# fontconfig/fc-lang/zh_tw.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Chinese (traditional) ZH-TW +# +# Made by trimming the Big5 -> unicode mapping down to just Chinese glyphs +# +#0x3000 # ideographic space +#0x3001 # ideographic comma +#0x3002 # ideographic full stop +#0x3003 # ditto mark +#0x3005 # ideographic iteration mark +#0x3021 # Suzhou numeral 1 +#0x3022 # Suzhou numeral 2 +#0x3023 # Suzhou numeral 3 +#0x3024 # Suzhou numeral 4 +#0x3025 # Suzhou numeral 5 +#0x3026 # Suzhou numeral 6 +#0x3027 # Suzhou numeral 7 +#0x3028 # Suzhou numeral 8 +#0x3029 # Suzhou numeral 9 +# Han +0x4E00 +0x4E01 +0x4E03 +0x4E07 +0x4E08 +0x4E09 +0x4E0A +0x4E0B +0x4E0C +0x4E0D +0x4E0E +0x4E0F +0x4E10 +0x4E11 +0x4E14 +0x4E15 +0x4E16 +0x4E18 +0x4E19 +0x4E1E +0x4E1F +0x4E26 +0x4E2B +0x4E2D +0x4E2E +0x4E30 +0x4E31 +0x4E32 +0x4E33 +0x4E38 +0x4E39 +0x4E3B +0x4E3C +0x4E42 +0x4E43 +0x4E45 +0x4E47 +0x4E48 +0x4E4B +0x4E4D +0x4E4E +0x4E4F +0x4E52 +0x4E53 +0x4E56 +0x4E58 +0x4E59 +0x4E5C +0x4E5D +0x4E5E +0x4E5F +0x4E69 +0x4E73 +0x4E7E +0x4E7F +0x4E82 +0x4E83 +0x4E84 +0x4E86 +0x4E88 +0x4E8B +0x4E8C +0x4E8D +0x4E8E +0x4E91 +0x4E92 +0x4E93 +0x4E94 +0x4E95 +0x4E99 +0x4E9B +0x4E9E +0x4E9F +0x4EA1 +0x4EA2 +0x4EA4 +0x4EA5 +0x4EA6 +0x4EA8 +0x4EAB +0x4EAC +0x4EAD +0x4EAE +0x4EB3 +0x4EB6 +0x4EB9 +0x4EBA +0x4EC0 +0x4EC1 +0x4EC2 +0x4EC3 +0x4EC4 +0x4EC6 +0x4EC7 +0x4EC8 +0x4EC9 +0x4ECA +0x4ECB +0x4ECD +0x4ED4 +0x4ED5 +0x4ED6 +0x4ED7 +0x4ED8 +0x4ED9 +0x4EDA +0x4EDC +0x4EDD +0x4EDE +0x4EDF +0x4EE1 +0x4EE3 +0x4EE4 +0x4EE5 +0x4EE8 +0x4EE9 +0x4EF0 +0x4EF1 +0x4EF2 +0x4EF3 +0x4EF4 +0x4EF5 +0x4EF6 +0x4EF7 +0x4EFB +0x4EFD +0x4EFF +0x4F00 +0x4F01 +0x4F02 +0x4F04 +0x4F05 +0x4F08 +0x4F09 +0x4F0A +0x4F0B +0x4F0D +0x4F0E +0x4F0F +0x4F10 +0x4F11 +0x4F12 +0x4F13 +0x4F14 +0x4F15 +0x4F18 +0x4F19 +0x4F1D +0x4F22 +0x4F2C +0x4F2D +0x4F2F +0x4F30 +0x4F33 +0x4F34 +0x4F36 +0x4F38 +0x4F3A +0x4F3B +0x4F3C +0x4F3D +0x4F3E +0x4F3F +0x4F41 +0x4F43 +0x4F46 +0x4F47 +0x4F48 +0x4F49 +0x4F4C +0x4F4D +0x4F4E +0x4F4F +0x4F50 +0x4F51 +0x4F52 +0x4F53 +0x4F54 +0x4F55 +0x4F56 +0x4F57 +0x4F58 +0x4F59 +0x4F5A +0x4F5B +0x4F5C +0x4F5D +0x4F5E +0x4F5F +0x4F60 +0x4F61 +0x4F62 +0x4F63 +0x4F64 +0x4F67 +0x4F69 +0x4F6A +0x4F6B +0x4F6C +0x4F6E +0x4F6F +0x4F70 +0x4F73 +0x4F74 +0x4F75 +0x4F76 +0x4F77 +0x4F78 +0x4F79 +0x4F7A +0x4F7B +0x4F7C +0x4F7D +0x4F7E +0x4F7F +0x4F80 +0x4F81 +0x4F82 +0x4F83 +0x4F84 +0x4F85 +0x4F86 +0x4F87 +0x4F88 +0x4F89 +0x4F8B +0x4F8D +0x4F8F +0x4F90 +0x4F91 +0x4F92 +0x4F94 +0x4F95 +0x4F96 +0x4F97 +0x4F98 +0x4F9A +0x4F9B +0x4F9C +0x4F9D +0x4F9E +0x4FAE +0x4FAF +0x4FB2 +0x4FB3 +0x4FB5 +0x4FB6 +0x4FB7 +0x4FB9 +0x4FBA +0x4FBB +0x4FBF +0x4FC0 +0x4FC1 +0x4FC2 +0x4FC3 +0x4FC4 +0x4FC5 +0x4FC7 +0x4FC9 +0x4FCA +0x4FCB +0x4FCD +0x4FCE +0x4FCF +0x4FD0 +0x4FD1 +0x4FD3 +0x4FD4 +0x4FD6 +0x4FD7 +0x4FD8 +0x4FD9 +0x4FDA +0x4FDB +0x4FDC +0x4FDD +0x4FDE +0x4FDF +0x4FE0 +0x4FE1 +0x4FEC +0x4FEE +0x4FEF +0x4FF1 +0x4FF3 +0x4FF4 +0x4FF5 +0x4FF6 +0x4FF7 +0x4FF8 +0x4FFA +0x4FFE +0x5000 +0x5005 +0x5006 +0x5007 +0x5009 +0x500B +0x500C +0x500D +0x500E +0x500F +0x5011 +0x5012 +0x5013 +0x5014 +0x5015 +0x5016 +0x5017 +0x5018 +0x5019 +0x501A +0x501B +0x501C +0x501E +0x501F +0x5020 +0x5021 +0x5022 +0x5023 +0x5025 +0x5026 +0x5027 +0x5028 +0x5029 +0x502A +0x502B +0x502C +0x502D +0x502F +0x5030 +0x5031 +0x5033 +0x5035 +0x5037 +0x503C +0x5040 +0x5041 +0x5043 +0x5045 +0x5046 +0x5047 +0x5048 +0x5049 +0x504A +0x504B +0x504C +0x504D +0x504E +0x504F +0x5051 +0x5053 +0x5055 +0x5057 +0x505A +0x505B +0x505C +0x505D +0x505E +0x505F +0x5060 +0x5061 +0x5062 +0x5063 +0x5064 +0x5065 +0x5068 +0x5069 +0x506A +0x506B +0x506D +0x506E +0x506F +0x5070 +0x5072 +0x5073 +0x5074 +0x5075 +0x5076 +0x5077 +0x507A +0x507D +0x5080 +0x5082 +0x5083 +0x5085 +0x5087 +0x508B +0x508C +0x508D +0x508E +0x5091 +0x5092 +0x5094 +0x5095 +0x5096 +0x5098 +0x5099 +0x509A +0x509B +0x509C +0x509D +0x509E +0x50A2 +0x50A3 +0x50AC +0x50AD +0x50AE +0x50AF +0x50B0 +0x50B1 +0x50B2 +0x50B3 +0x50B4 +0x50B5 +0x50B6 +0x50B7 +0x50B8 +0x50BA +0x50BB +0x50BD +0x50BE +0x50BF +0x50C1 +0x50C2 +0x50C4 +0x50C5 +0x50C6 +0x50C7 +0x50C8 +0x50C9 +0x50CA +0x50CB +0x50CE +0x50CF +0x50D1 +0x50D3 +0x50D4 +0x50D5 +0x50D6 +0x50D7 +0x50DA +0x50DB +0x50DD +0x50E0 +0x50E3 +0x50E4 +0x50E5 +0x50E6 +0x50E7 +0x50E8 +0x50E9 +0x50EA +0x50EC +0x50ED +0x50EE +0x50EF +0x50F0 +0x50F1 +0x50F3 +0x50F5 +0x50F6 +0x50F8 +0x50F9 +0x50FB +0x50FD +0x50FE +0x50FF +0x5100 +0x5102 +0x5103 +0x5104 +0x5105 +0x5106 +0x5107 +0x5108 +0x5109 +0x510A +0x510B +0x510C +0x5110 +0x5111 +0x5112 +0x5113 +0x5114 +0x5115 +0x5117 +0x5118 +0x511A +0x511C +0x511F +0x5120 +0x5121 +0x5122 +0x5124 +0x5125 +0x5126 +0x5129 +0x512A +0x512D +0x512E +0x5130 +0x5131 +0x5132 +0x5133 +0x5134 +0x5135 +0x5137 +0x5138 +0x5139 +0x513A +0x513B +0x513C +0x513D +0x513F +0x5140 +0x5141 +0x5143 +0x5144 +0x5145 +0x5146 +0x5147 +0x5148 +0x5149 +0x514B +0x514C +0x514D +0x5152 +0x5154 +0x5155 +0x5157 +0x5159 +0x515A +0x515B +0x515C +0x515D +0x515E +0x515F +0x5161 +0x5162 +0x5163 +0x5165 +0x5167 +0x5168 +0x5169 +0x516B +0x516C +0x516D +0x516E +0x5171 +0x5175 +0x5176 +0x5177 +0x5178 +0x517C +0x5180 +0x5187 +0x5189 +0x518A +0x518D +0x518F +0x5191 +0x5192 +0x5193 +0x5194 +0x5195 +0x5197 +0x5198 +0x519E +0x51A0 +0x51A2 +0x51A4 +0x51A5 +0x51AA +0x51AC +0x51B0 +0x51B1 +0x51B6 +0x51B7 +0x51B9 +0x51BC +0x51BD +0x51BE +0x51C4 +0x51C5 +0x51C6 +0x51C8 +0x51CA +0x51CB +0x51CC +0x51CD +0x51CE +0x51D0 +0x51D4 +0x51D7 +0x51D8 +0x51DC +0x51DD +0x51DE +0x51E0 +0x51E1 +0x51F0 +0x51F1 +0x51F3 +0x51F5 +0x51F6 +0x51F8 +0x51F9 +0x51FA +0x51FD +0x5200 +0x5201 +0x5203 +0x5206 +0x5207 +0x5208 +0x5209 +0x520A +0x520C +0x520E +0x5210 +0x5211 +0x5212 +0x5213 +0x5216 +0x5217 +0x521C +0x521D +0x521E +0x5221 +0x5224 +0x5225 +0x5228 +0x5229 +0x522A +0x522E +0x5230 +0x5231 +0x5232 +0x5233 +0x5235 +0x5236 +0x5237 +0x5238 +0x523A +0x523B +0x5241 +0x5243 +0x5244 +0x5246 +0x5247 +0x5249 +0x524A +0x524B +0x524C +0x524D +0x524E +0x5252 +0x5254 +0x5255 +0x5256 +0x525A +0x525B +0x525C +0x525D +0x525E +0x525F +0x5261 +0x5262 +0x5269 +0x526A +0x526B +0x526C +0x526D +0x526E +0x526F +0x5272 +0x5274 +0x5275 +0x5277 +0x5278 +0x527A +0x527B +0x527C +0x527D +0x527F +0x5280 +0x5281 +0x5282 +0x5283 +0x5284 +0x5287 +0x5288 +0x5289 +0x528A +0x528B +0x528C +0x528D +0x5291 +0x5293 +0x5296 +0x5297 +0x5298 +0x5299 +0x529B +0x529F +0x52A0 +0x52A3 +0x52A6 +0x52A9 +0x52AA +0x52AB +0x52AC +0x52AD +0x52AE +0x52BB +0x52BC +0x52BE +0x52C0 +0x52C1 +0x52C2 +0x52C3 +0x52C7 +0x52C9 +0x52CD +0x52D2 +0x52D3 +0x52D5 +0x52D6 +0x52D7 +0x52D8 +0x52D9 +0x52DB +0x52DD +0x52DE +0x52DF +0x52E2 +0x52E3 +0x52E4 +0x52E6 +0x52E9 +0x52EB +0x52EF +0x52F0 +0x52F1 +0x52F3 +0x52F4 +0x52F5 +0x52F7 +0x52F8 +0x52FA +0x52FB +0x52FC +0x52FE +0x52FF +0x5305 +0x5306 +0x5308 +0x5309 +0x530A +0x530B +0x530D +0x530E +0x530F +0x5310 +0x5311 +0x5312 +0x5315 +0x5316 +0x5317 +0x5319 +0x531A +0x531C +0x531D +0x531F +0x5320 +0x5321 +0x5322 +0x5323 +0x532A +0x532D +0x532F +0x5330 +0x5331 +0x5334 +0x5337 +0x5339 +0x533C +0x533D +0x533E +0x533F +0x5340 +0x5341 +0x5343 +0x5344 +0x5345 +0x5347 +0x5348 +0x5349 +0x534A +0x534C +0x534D +0x5351 +0x5352 +0x5353 +0x5354 +0x5357 +0x535A +0x535C +0x535E +0x5360 +0x5361 +0x5363 +0x5366 +0x536C +0x536E +0x536F +0x5370 +0x5371 +0x5372 +0x5373 +0x5375 +0x5377 +0x5378 +0x5379 +0x537B +0x537C +0x537F +0x5382 +0x5384 +0x538A +0x538E +0x538F +0x5392 +0x5394 +0x5396 +0x5397 +0x5398 +0x5399 +0x539A +0x539C +0x539D +0x539E +0x539F +0x53A4 +0x53A5 +0x53A7 +0x53AC +0x53AD +0x53B2 +0x53B4 +0x53B9 +0x53BB +0x53C3 +0x53C8 +0x53C9 +0x53CA +0x53CB +0x53CD +0x53D4 +0x53D6 +0x53D7 +0x53DB +0x53DF +0x53E1 +0x53E2 +0x53E3 +0x53E4 +0x53E5 +0x53E6 +0x53E8 +0x53E9 +0x53EA +0x53EB +0x53EC +0x53ED +0x53EE +0x53EF +0x53F0 +0x53F1 +0x53F2 +0x53F3 +0x53F5 +0x53F8 +0x53FB +0x53FC +0x5401 +0x5403 +0x5404 +0x5406 +0x5407 +0x5408 +0x5409 +0x540A +0x540B +0x540C +0x540D +0x540E +0x540F +0x5410 +0x5411 +0x5412 +0x5418 +0x5419 +0x541B +0x541C +0x541D +0x541E +0x541F +0x5420 +0x5424 +0x5425 +0x5426 +0x5427 +0x5428 +0x5429 +0x542A +0x542B +0x542C +0x542D +0x542E +0x5430 +0x5431 +0x5433 +0x5435 +0x5436 +0x5437 +0x5438 +0x5439 +0x543B +0x543C +0x543D +0x543E +0x5440 +0x5441 +0x5442 +0x5443 +0x5445 +0x5446 +0x5447 +0x5448 +0x544A +0x544E +0x544F +0x5454 +0x5460 +0x5461 +0x5462 +0x5463 +0x5464 +0x5465 +0x5466 +0x5467 +0x5468 +0x546B +0x546C +0x546F +0x5470 +0x5471 +0x5472 +0x5473 +0x5474 +0x5475 +0x5476 +0x5477 +0x5478 +0x547A +0x547B +0x547C +0x547D +0x547E +0x547F +0x5480 +0x5481 +0x5482 +0x5484 +0x5486 +0x5487 +0x5488 +0x548B +0x548C +0x548D +0x548E +0x5490 +0x5491 +0x5492 +0x5495 +0x5496 +0x5498 +0x549A +0x54A0 +0x54A1 +0x54A2 +0x54A5 +0x54A6 +0x54A7 +0x54A8 +0x54A9 +0x54AA +0x54AB +0x54AC +0x54AD +0x54AE +0x54AF +0x54B0 +0x54B1 +0x54B3 +0x54B6 +0x54B7 +0x54B8 +0x54BA +0x54BB +0x54BC +0x54BD +0x54BE +0x54BF +0x54C0 +0x54C1 +0x54C2 +0x54C3 +0x54C4 +0x54C5 +0x54C6 +0x54C7 +0x54C8 +0x54C9 +0x54CE +0x54CF +0x54D6 +0x54DE +0x54E0 +0x54E1 +0x54E2 +0x54E4 +0x54E5 +0x54E6 +0x54E7 +0x54E8 +0x54E9 +0x54EA +0x54EB +0x54ED +0x54EE +0x54F1 +0x54F2 +0x54F3 +0x54F7 +0x54F8 +0x54FA +0x54FB +0x54FC +0x54FD +0x54FF +0x5501 +0x5503 +0x5504 +0x5505 +0x5506 +0x5507 +0x5508 +0x5509 +0x550A +0x550B +0x550C +0x550E +0x550F +0x5510 +0x5511 +0x5512 +0x5514 +0x5517 +0x551A +0x5526 +0x5527 +0x552A +0x552C +0x552D +0x552E +0x552F +0x5530 +0x5531 +0x5532 +0x5533 +0x5534 +0x5535 +0x5536 +0x5537 +0x5538 +0x5539 +0x553B +0x553C +0x553E +0x5540 +0x5541 +0x5543 +0x5544 +0x5545 +0x5546 +0x5548 +0x554A +0x554B +0x554D +0x554E +0x554F +0x5550 +0x5551 +0x5552 +0x5555 +0x5556 +0x5557 +0x555C +0x555E +0x555F +0x5561 +0x5562 +0x5563 +0x5564 +0x5565 +0x5566 +0x556A +0x5575 +0x5576 +0x5577 +0x557B +0x557C +0x557D +0x557E +0x557F +0x5580 +0x5581 +0x5582 +0x5583 +0x5584 +0x5587 +0x5588 +0x5589 +0x558A +0x558B +0x558C +0x558D +0x558E +0x558F +0x5591 +0x5592 +0x5593 +0x5594 +0x5595 +0x5598 +0x5599 +0x559A +0x559C +0x559D +0x559F +0x55A1 +0x55A2 +0x55A3 +0x55A4 +0x55A5 +0x55A6 +0x55A7 +0x55A8 +0x55AA +0x55AB +0x55AC +0x55AD +0x55AE +0x55B1 +0x55B2 +0x55B3 +0x55B5 +0x55BB +0x55BF +0x55C0 +0x55C2 +0x55C3 +0x55C4 +0x55C5 +0x55C6 +0x55C7 +0x55C8 +0x55C9 +0x55CA +0x55CB +0x55CC +0x55CD +0x55CE +0x55CF +0x55D0 +0x55D1 +0x55D2 +0x55D3 +0x55D4 +0x55D5 +0x55D6 +0x55D9 +0x55DA +0x55DB +0x55DC +0x55DD +0x55DF +0x55E1 +0x55E2 +0x55E3 +0x55E4 +0x55E5 +0x55E6 +0x55E7 +0x55E8 +0x55E9 +0x55EF +0x55F2 +0x55F6 +0x55F7 +0x55F9 +0x55FA +0x55FC +0x55FD +0x55FE +0x55FF +0x5600 +0x5601 +0x5602 +0x5604 +0x5606 +0x5608 +0x5609 +0x560C +0x560D +0x560E +0x560F +0x5610 +0x5612 +0x5613 +0x5614 +0x5615 +0x5616 +0x5617 +0x561B +0x561C +0x561D +0x561F +0x5627 +0x5629 +0x562A +0x562C +0x562E +0x562F +0x5630 +0x5632 +0x5633 +0x5634 +0x5635 +0x5636 +0x5638 +0x5639 +0x563A +0x563B +0x563D +0x563E +0x563F +0x5640 +0x5641 +0x5642 +0x5645 +0x5646 +0x5648 +0x5649 +0x564A +0x564C +0x564E +0x5653 +0x5657 +0x5658 +0x5659 +0x565A +0x565E +0x5660 +0x5662 +0x5663 +0x5664 +0x5665 +0x5666 +0x5668 +0x5669 +0x566A +0x566B +0x566C +0x566D +0x566E +0x566F +0x5670 +0x5671 +0x5672 +0x5673 +0x5674 +0x5676 +0x5677 +0x5678 +0x5679 +0x567E +0x567F +0x5680 +0x5681 +0x5682 +0x5683 +0x5684 +0x5685 +0x5686 +0x5687 +0x568C +0x568D +0x568E +0x568F +0x5690 +0x5693 +0x5695 +0x5697 +0x5698 +0x5699 +0x569A +0x569C +0x569D +0x56A5 +0x56A6 +0x56A7 +0x56A8 +0x56AA +0x56AB +0x56AC +0x56AD +0x56AE +0x56B2 +0x56B3 +0x56B4 +0x56B5 +0x56B6 +0x56B7 +0x56BC +0x56BD +0x56BE +0x56C0 +0x56C1 +0x56C2 +0x56C3 +0x56C5 +0x56C6 +0x56C8 +0x56C9 +0x56CA +0x56CB +0x56CC +0x56CD +0x56D1 +0x56D3 +0x56D4 +0x56D7 +0x56DA +0x56DB +0x56DD +0x56DE +0x56DF +0x56E0 +0x56E1 +0x56E4 +0x56E5 +0x56E7 +0x56EA +0x56EB +0x56EE +0x56F0 +0x56F7 +0x56F9 +0x56FA +0x56FF +0x5701 +0x5702 +0x5703 +0x5704 +0x5707 +0x5708 +0x5709 +0x570A +0x570B +0x570C +0x570D +0x5712 +0x5713 +0x5714 +0x5716 +0x5718 +0x571A +0x571B +0x571C +0x571E +0x571F +0x5720 +0x5722 +0x5723 +0x5728 +0x5729 +0x572A +0x572C +0x572D +0x572E +0x572F +0x5730 +0x5733 +0x5734 +0x573B +0x573E +0x5740 +0x5741 +0x5745 +0x5747 +0x5749 +0x574A +0x574B +0x574C +0x574D +0x574E +0x574F +0x5750 +0x5751 +0x5752 +0x5761 +0x5762 +0x5764 +0x5766 +0x5768 +0x5769 +0x576A +0x576B +0x576D +0x576F +0x5770 +0x5771 +0x5772 +0x5773 +0x5774 +0x5775 +0x5776 +0x5777 +0x577B +0x577C +0x577D +0x5780 +0x5782 +0x5783 +0x578B +0x578C +0x578F +0x5793 +0x5794 +0x5795 +0x5797 +0x5798 +0x5799 +0x579A +0x579B +0x579D +0x579E +0x579F +0x57A0 +0x57A2 +0x57A3 +0x57A4 +0x57A5 +0x57AE +0x57B5 +0x57B6 +0x57B8 +0x57B9 +0x57BA +0x57BC +0x57BD +0x57BF +0x57C1 +0x57C2 +0x57C3 +0x57C6 +0x57C7 +0x57CB +0x57CC +0x57CE +0x57CF +0x57D0 +0x57D2 +0x57D4 +0x57D5 +0x57DC +0x57DF +0x57E0 +0x57E1 +0x57E2 +0x57E3 +0x57E4 +0x57E5 +0x57E7 +0x57E9 +0x57EC +0x57ED +0x57EE +0x57F0 +0x57F1 +0x57F2 +0x57F3 +0x57F4 +0x57F5 +0x57F6 +0x57F7 +0x57F8 +0x57F9 +0x57FA +0x57FB +0x57FC +0x57FD +0x5800 +0x5801 +0x5802 +0x5804 +0x5805 +0x5806 +0x5807 +0x5808 +0x5809 +0x580A +0x580B +0x580C +0x580D +0x580E +0x5810 +0x5814 +0x5819 +0x581B +0x581C +0x581D +0x581E +0x5820 +0x5821 +0x5823 +0x5824 +0x5825 +0x5827 +0x5828 +0x5829 +0x582A +0x582C +0x582D +0x582E +0x582F +0x5830 +0x5831 +0x5832 +0x5833 +0x5834 +0x5835 +0x5836 +0x5837 +0x5838 +0x5839 +0x583B +0x583D +0x583F +0x5848 +0x5849 +0x584A +0x584B +0x584C +0x584D +0x584E +0x584F +0x5851 +0x5852 +0x5853 +0x5854 +0x5855 +0x5857 +0x5858 +0x5859 +0x585A +0x585B +0x585D +0x585E +0x5862 +0x5863 +0x5864 +0x5865 +0x5868 +0x586B +0x586D +0x586F +0x5871 +0x5874 +0x5875 +0x5876 +0x5879 +0x587A +0x587B +0x587C +0x587D +0x587E +0x587F +0x5880 +0x5881 +0x5882 +0x5883 +0x5885 +0x5886 +0x5887 +0x5888 +0x5889 +0x588A +0x588B +0x588E +0x588F +0x5890 +0x5891 +0x5893 +0x5894 +0x5898 +0x589C +0x589D +0x589E +0x589F +0x58A0 +0x58A1 +0x58A3 +0x58A5 +0x58A6 +0x58A8 +0x58A9 +0x58AB +0x58AC +0x58AE +0x58AF +0x58B1 +0x58B3 +0x58BA +0x58BC +0x58BD +0x58BE +0x58BF +0x58C1 +0x58C2 +0x58C5 +0x58C6 +0x58C7 +0x58C8 +0x58C9 +0x58CE +0x58CF +0x58D1 +0x58D2 +0x58D3 +0x58D4 +0x58D5 +0x58D6 +0x58D8 +0x58D9 +0x58DA +0x58DB +0x58DD +0x58DE +0x58DF +0x58E2 +0x58E3 +0x58E4 +0x58E7 +0x58E8 +0x58E9 +0x58EB +0x58EC +0x58EF +0x58F4 +0x58F9 +0x58FA +0x58FC +0x58FD +0x58FE +0x58FF +0x5903 +0x5906 +0x590C +0x590D +0x590E +0x590F +0x5912 +0x5914 +0x5915 +0x5916 +0x5917 +0x5919 +0x591A +0x591C +0x5920 +0x5922 +0x5924 +0x5925 +0x5927 +0x5929 +0x592A +0x592B +0x592C +0x592D +0x592E +0x592F +0x5931 +0x5937 +0x5938 +0x593C +0x593E +0x5940 +0x5944 +0x5945 +0x5947 +0x5948 +0x5949 +0x594A +0x594E +0x594F +0x5950 +0x5951 +0x5953 +0x5954 +0x5955 +0x5957 +0x5958 +0x595A +0x595C +0x5960 +0x5961 +0x5962 +0x5967 +0x5969 +0x596A +0x596B +0x596D +0x596E +0x5970 +0x5971 +0x5972 +0x5973 +0x5974 +0x5976 +0x5977 +0x5978 +0x5979 +0x597B +0x597C +0x597D +0x597E +0x597F +0x5980 +0x5981 +0x5982 +0x5983 +0x5984 +0x5985 +0x598A +0x598D +0x598E +0x598F +0x5990 +0x5992 +0x5993 +0x5996 +0x5997 +0x5998 +0x5999 +0x599D +0x599E +0x59A0 +0x59A1 +0x59A2 +0x59A3 +0x59A4 +0x59A5 +0x59A6 +0x59A7 +0x59A8 +0x59AE +0x59AF +0x59B1 +0x59B2 +0x59B3 +0x59B4 +0x59B5 +0x59B6 +0x59B9 +0x59BA +0x59BB +0x59BC +0x59BD +0x59BE +0x59C0 +0x59C1 +0x59C3 +0x59C5 +0x59C6 +0x59C7 +0x59C8 +0x59CA +0x59CB +0x59CC +0x59CD +0x59CE +0x59CF +0x59D0 +0x59D1 +0x59D2 +0x59D3 +0x59D4 +0x59D6 +0x59D8 +0x59DA +0x59DB +0x59DC +0x59DD +0x59DE +0x59E0 +0x59E1 +0x59E3 +0x59E4 +0x59E5 +0x59E6 +0x59E8 +0x59E9 +0x59EA +0x59EC +0x59ED +0x59EE +0x59F1 +0x59F2 +0x59F3 +0x59F4 +0x59F5 +0x59F6 +0x59F7 +0x59FA +0x59FB +0x59FC +0x59FD +0x59FE +0x59FF +0x5A00 +0x5A01 +0x5A03 +0x5A09 +0x5A0A +0x5A0C +0x5A0F +0x5A11 +0x5A13 +0x5A15 +0x5A16 +0x5A17 +0x5A18 +0x5A19 +0x5A1B +0x5A1C +0x5A1E +0x5A1F +0x5A20 +0x5A23 +0x5A25 +0x5A29 +0x5A2D +0x5A2E +0x5A33 +0x5A35 +0x5A36 +0x5A37 +0x5A38 +0x5A39 +0x5A3C +0x5A3E +0x5A40 +0x5A41 +0x5A42 +0x5A43 +0x5A44 +0x5A46 +0x5A47 +0x5A48 +0x5A49 +0x5A4A +0x5A4C +0x5A4D +0x5A50 +0x5A51 +0x5A52 +0x5A53 +0x5A55 +0x5A56 +0x5A57 +0x5A58 +0x5A5A +0x5A5B +0x5A5C +0x5A5D +0x5A5E +0x5A5F +0x5A60 +0x5A62 +0x5A64 +0x5A65 +0x5A66 +0x5A67 +0x5A69 +0x5A6A +0x5A6C +0x5A6D +0x5A70 +0x5A77 +0x5A78 +0x5A7A +0x5A7B +0x5A7C +0x5A7D +0x5A7F +0x5A83 +0x5A84 +0x5A8A +0x5A8B +0x5A8C +0x5A8E +0x5A8F +0x5A90 +0x5A92 +0x5A93 +0x5A94 +0x5A95 +0x5A97 +0x5A9A +0x5A9B +0x5A9C +0x5A9D +0x5A9E +0x5A9F +0x5AA2 +0x5AA5 +0x5AA6 +0x5AA7 +0x5AA9 +0x5AAC +0x5AAE +0x5AAF +0x5AB0 +0x5AB1 +0x5AB2 +0x5AB3 +0x5AB4 +0x5AB5 +0x5AB6 +0x5AB7 +0x5AB8 +0x5AB9 +0x5ABA +0x5ABB +0x5ABC +0x5ABD +0x5ABE +0x5ABF +0x5AC0 +0x5AC1 +0x5AC2 +0x5AC4 +0x5AC6 +0x5AC7 +0x5AC8 +0x5AC9 +0x5ACA +0x5ACB +0x5ACC +0x5ACD +0x5AD5 +0x5AD6 +0x5AD7 +0x5AD8 +0x5AD9 +0x5ADA +0x5ADB +0x5ADC +0x5ADD +0x5ADE +0x5ADF +0x5AE0 +0x5AE1 +0x5AE2 +0x5AE3 +0x5AE5 +0x5AE6 +0x5AE8 +0x5AE9 +0x5AEA +0x5AEB +0x5AEC +0x5AED +0x5AEE +0x5AF3 +0x5AF4 +0x5AF5 +0x5AF6 +0x5AF7 +0x5AF8 +0x5AF9 +0x5AFB +0x5AFD +0x5AFF +0x5B01 +0x5B02 +0x5B03 +0x5B05 +0x5B07 +0x5B08 +0x5B09 +0x5B0B +0x5B0C +0x5B0F +0x5B10 +0x5B13 +0x5B14 +0x5B16 +0x5B17 +0x5B19 +0x5B1A +0x5B1B +0x5B1D +0x5B1E +0x5B20 +0x5B21 +0x5B23 +0x5B24 +0x5B25 +0x5B26 +0x5B27 +0x5B28 +0x5B2A +0x5B2C +0x5B2D +0x5B2E +0x5B2F +0x5B30 +0x5B32 +0x5B34 +0x5B38 +0x5B3C +0x5B3D +0x5B3E +0x5B3F +0x5B40 +0x5B43 +0x5B45 +0x5B47 +0x5B48 +0x5B4B +0x5B4C +0x5B4D +0x5B4E +0x5B50 +0x5B51 +0x5B53 +0x5B54 +0x5B55 +0x5B56 +0x5B57 +0x5B58 +0x5B5A +0x5B5B +0x5B5C +0x5B5D +0x5B5F +0x5B62 +0x5B63 +0x5B64 +0x5B65 +0x5B69 +0x5B6B +0x5B6C +0x5B6E +0x5B70 +0x5B71 +0x5B72 +0x5B73 +0x5B75 +0x5B77 +0x5B78 +0x5B7A +0x5B7B +0x5B7D +0x5B7F +0x5B81 +0x5B83 +0x5B84 +0x5B85 +0x5B87 +0x5B88 +0x5B89 +0x5B8B +0x5B8C +0x5B8E +0x5B8F +0x5B92 +0x5B93 +0x5B95 +0x5B97 +0x5B98 +0x5B99 +0x5B9A +0x5B9B +0x5B9C +0x5BA2 +0x5BA3 +0x5BA4 +0x5BA5 +0x5BA6 +0x5BA7 +0x5BA8 +0x5BAC +0x5BAD +0x5BAE +0x5BB0 +0x5BB3 +0x5BB4 +0x5BB5 +0x5BB6 +0x5BB8 +0x5BB9 +0x5BBF +0x5BC0 +0x5BC1 +0x5BC2 +0x5BC4 +0x5BC5 +0x5BC6 +0x5BC7 +0x5BCA +0x5BCB +0x5BCC +0x5BCD +0x5BCE +0x5BD0 +0x5BD1 +0x5BD2 +0x5BD3 +0x5BD4 +0x5BD6 +0x5BD8 +0x5BD9 +0x5BDE +0x5BDF +0x5BE0 +0x5BE1 +0x5BE2 +0x5BE3 +0x5BE4 +0x5BE5 +0x5BE6 +0x5BE7 +0x5BE8 +0x5BE9 +0x5BEA +0x5BEB +0x5BEC +0x5BEE +0x5BEF +0x5BF0 +0x5BF1 +0x5BF2 +0x5BF5 +0x5BF6 +0x5BF8 +0x5BFA +0x5C01 +0x5C03 +0x5C04 +0x5C07 +0x5C08 +0x5C09 +0x5C0A +0x5C0B +0x5C0C +0x5C0D +0x5C0E +0x5C0F +0x5C10 +0x5C11 +0x5C12 +0x5C15 +0x5C16 +0x5C1A +0x5C1F +0x5C22 +0x5C24 +0x5C25 +0x5C28 +0x5C2A +0x5C2C +0x5C30 +0x5C31 +0x5C33 +0x5C37 +0x5C38 +0x5C39 +0x5C3A +0x5C3B +0x5C3C +0x5C3E +0x5C3F +0x5C40 +0x5C41 +0x5C44 +0x5C45 +0x5C46 +0x5C47 +0x5C48 +0x5C4B +0x5C4C +0x5C4D +0x5C4E +0x5C4F +0x5C50 +0x5C51 +0x5C54 +0x5C55 +0x5C56 +0x5C58 +0x5C59 +0x5C5C +0x5C5D +0x5C60 +0x5C62 +0x5C63 +0x5C64 +0x5C65 +0x5C67 +0x5C68 +0x5C69 +0x5C6A +0x5C6C +0x5C6D +0x5C6E +0x5C6F +0x5C71 +0x5C73 +0x5C74 +0x5C79 +0x5C7A +0x5C7B +0x5C7C +0x5C7E +0x5C86 +0x5C88 +0x5C89 +0x5C8A +0x5C8B +0x5C8C +0x5C8D +0x5C8F +0x5C90 +0x5C91 +0x5C92 +0x5C93 +0x5C94 +0x5C95 +0x5C9D +0x5C9F +0x5CA0 +0x5CA1 +0x5CA2 +0x5CA3 +0x5CA4 +0x5CA5 +0x5CA6 +0x5CA7 +0x5CA8 +0x5CA9 +0x5CAA +0x5CAB +0x5CAC +0x5CAD +0x5CAE +0x5CAF +0x5CB0 +0x5CB1 +0x5CB3 +0x5CB5 +0x5CB6 +0x5CB7 +0x5CB8 +0x5CC6 +0x5CC7 +0x5CC8 +0x5CC9 +0x5CCA +0x5CCB +0x5CCC +0x5CCE +0x5CCF +0x5CD0 +0x5CD2 +0x5CD3 +0x5CD4 +0x5CD6 +0x5CD7 +0x5CD8 +0x5CD9 +0x5CDA +0x5CDB +0x5CDE +0x5CDF +0x5CE8 +0x5CEA +0x5CEC +0x5CED +0x5CEE +0x5CF0 +0x5CF1 +0x5CF4 +0x5CF6 +0x5CF7 +0x5CF8 +0x5CF9 +0x5CFB +0x5CFD +0x5CFF +0x5D00 +0x5D01 +0x5D06 +0x5D07 +0x5D0B +0x5D0C +0x5D0D +0x5D0E +0x5D0F +0x5D11 +0x5D12 +0x5D14 +0x5D16 +0x5D17 +0x5D19 +0x5D1A +0x5D1B +0x5D1D +0x5D1E +0x5D1F +0x5D20 +0x5D22 +0x5D23 +0x5D24 +0x5D25 +0x5D26 +0x5D27 +0x5D28 +0x5D29 +0x5D2E +0x5D30 +0x5D31 +0x5D32 +0x5D33 +0x5D34 +0x5D35 +0x5D36 +0x5D37 +0x5D38 +0x5D39 +0x5D3A +0x5D3C +0x5D3D +0x5D3F +0x5D40 +0x5D41 +0x5D42 +0x5D43 +0x5D45 +0x5D47 +0x5D49 +0x5D4A +0x5D4B +0x5D4C +0x5D4E +0x5D50 +0x5D51 +0x5D52 +0x5D55 +0x5D59 +0x5D5E +0x5D62 +0x5D63 +0x5D65 +0x5D67 +0x5D68 +0x5D69 +0x5D6B +0x5D6C +0x5D6F +0x5D71 +0x5D72 +0x5D77 +0x5D79 +0x5D7A +0x5D7C +0x5D7D +0x5D7E +0x5D7F +0x5D80 +0x5D81 +0x5D82 +0x5D84 +0x5D86 +0x5D87 +0x5D88 +0x5D89 +0x5D8A +0x5D8D +0x5D92 +0x5D93 +0x5D94 +0x5D95 +0x5D97 +0x5D99 +0x5D9A +0x5D9C +0x5D9D +0x5D9E +0x5D9F +0x5DA0 +0x5DA1 +0x5DA2 +0x5DA7 +0x5DA8 +0x5DA9 +0x5DAA +0x5DAC +0x5DAD +0x5DAE +0x5DAF +0x5DB0 +0x5DB1 +0x5DB2 +0x5DB4 +0x5DB5 +0x5DB7 +0x5DB8 +0x5DBA +0x5DBC +0x5DBD +0x5DC0 +0x5DC2 +0x5DC3 +0x5DC6 +0x5DC7 +0x5DC9 +0x5DCB +0x5DCD +0x5DCF +0x5DD1 +0x5DD2 +0x5DD4 +0x5DD5 +0x5DD6 +0x5DD8 +0x5DDD +0x5DDE +0x5DDF +0x5DE0 +0x5DE1 +0x5DE2 +0x5DE5 +0x5DE6 +0x5DE7 +0x5DE8 +0x5DEB +0x5DEE +0x5DF0 +0x5DF1 +0x5DF2 +0x5DF3 +0x5DF4 +0x5DF7 +0x5DF9 +0x5DFD +0x5DFE +0x5DFF +0x5E02 +0x5E03 +0x5E04 +0x5E06 +0x5E0A +0x5E0C +0x5E0E +0x5E11 +0x5E14 +0x5E15 +0x5E16 +0x5E17 +0x5E18 +0x5E19 +0x5E1A +0x5E1B +0x5E1D +0x5E1F +0x5E20 +0x5E21 +0x5E22 +0x5E23 +0x5E24 +0x5E25 +0x5E28 +0x5E29 +0x5E2B +0x5E2D +0x5E33 +0x5E34 +0x5E36 +0x5E37 +0x5E38 +0x5E3D +0x5E3E +0x5E40 +0x5E41 +0x5E43 +0x5E44 +0x5E45 +0x5E4A +0x5E4B +0x5E4C +0x5E4D +0x5E4E +0x5E4F +0x5E53 +0x5E54 +0x5E55 +0x5E57 +0x5E58 +0x5E59 +0x5E5B +0x5E5C +0x5E5D +0x5E5F +0x5E60 +0x5E61 +0x5E62 +0x5E63 +0x5E66 +0x5E67 +0x5E68 +0x5E69 +0x5E6A +0x5E6B +0x5E6C +0x5E6D +0x5E6E +0x5E6F +0x5E70 +0x5E72 +0x5E73 +0x5E74 +0x5E75 +0x5E76 +0x5E78 +0x5E79 +0x5E7B +0x5E7C +0x5E7D +0x5E7E +0x5E80 +0x5E82 +0x5E84 +0x5E87 +0x5E88 +0x5E89 +0x5E8A +0x5E8B +0x5E8C +0x5E8D +0x5E8F +0x5E95 +0x5E96 +0x5E97 +0x5E9A +0x5E9B +0x5E9C +0x5EA0 +0x5EA2 +0x5EA3 +0x5EA4 +0x5EA5 +0x5EA6 +0x5EA7 +0x5EA8 +0x5EAA +0x5EAB +0x5EAC +0x5EAD +0x5EAE +0x5EB0 +0x5EB1 +0x5EB2 +0x5EB3 +0x5EB4 +0x5EB5 +0x5EB6 +0x5EB7 +0x5EB8 +0x5EB9 +0x5EBE +0x5EC1 +0x5EC2 +0x5EC4 +0x5EC5 +0x5EC6 +0x5EC7 +0x5EC8 +0x5EC9 +0x5ECA +0x5ECB +0x5ECC +0x5ECE +0x5ED1 +0x5ED2 +0x5ED3 +0x5ED4 +0x5ED5 +0x5ED6 +0x5ED7 +0x5ED8 +0x5ED9 +0x5EDA +0x5EDB +0x5EDC +0x5EDD +0x5EDE +0x5EDF +0x5EE0 +0x5EE1 +0x5EE2 +0x5EE3 +0x5EE5 +0x5EE6 +0x5EE7 +0x5EE8 +0x5EE9 +0x5EEC +0x5EEE +0x5EEF +0x5EF1 +0x5EF2 +0x5EF3 +0x5EF6 +0x5EF7 +0x5EFA +0x5EFE +0x5EFF +0x5F01 +0x5F02 +0x5F04 +0x5F05 +0x5F07 +0x5F08 +0x5F0A +0x5F0B +0x5F0F +0x5F12 +0x5F13 +0x5F14 +0x5F15 +0x5F17 +0x5F18 +0x5F1A +0x5F1B +0x5F1D +0x5F1F +0x5F22 +0x5F23 +0x5F24 +0x5F26 +0x5F27 +0x5F28 +0x5F29 +0x5F2D +0x5F2E +0x5F30 +0x5F31 +0x5F33 +0x5F35 +0x5F36 +0x5F37 +0x5F38 +0x5F3C +0x5F40 +0x5F43 +0x5F44 +0x5F46 +0x5F48 +0x5F49 +0x5F4A +0x5F4B +0x5F4C +0x5F4E +0x5F4F +0x5F54 +0x5F56 +0x5F57 +0x5F58 +0x5F59 +0x5F5D +0x5F62 +0x5F64 +0x5F65 +0x5F67 +0x5F69 +0x5F6A +0x5F6B +0x5F6C +0x5F6D +0x5F6F +0x5F70 +0x5F71 +0x5F73 +0x5F74 +0x5F76 +0x5F77 +0x5F78 +0x5F79 +0x5F7C +0x5F7D +0x5F7E +0x5F7F +0x5F80 +0x5F81 +0x5F82 +0x5F85 +0x5F86 +0x5F87 +0x5F88 +0x5F89 +0x5F8A +0x5F8B +0x5F8C +0x5F90 +0x5F91 +0x5F92 +0x5F96 +0x5F97 +0x5F98 +0x5F99 +0x5F9B +0x5F9C +0x5F9E +0x5F9F +0x5FA0 +0x5FA1 +0x5FA5 +0x5FA6 +0x5FA8 +0x5FA9 +0x5FAA +0x5FAB +0x5FAC +0x5FAD +0x5FAE +0x5FAF +0x5FB2 +0x5FB5 +0x5FB6 +0x5FB7 +0x5FB9 +0x5FBB +0x5FBC +0x5FBD +0x5FBE +0x5FBF +0x5FC0 +0x5FC1 +0x5FC3 +0x5FC5 +0x5FC9 +0x5FCC +0x5FCD +0x5FCF +0x5FD0 +0x5FD1 +0x5FD2 +0x5FD4 +0x5FD5 +0x5FD6 +0x5FD7 +0x5FD8 +0x5FD9 +0x5FDD +0x5FDE +0x5FE0 +0x5FE1 +0x5FE3 +0x5FE4 +0x5FE5 +0x5FE8 +0x5FEA +0x5FEB +0x5FED +0x5FEE +0x5FEF +0x5FF1 +0x5FF3 +0x5FF4 +0x5FF5 +0x5FF7 +0x5FF8 +0x5FFA +0x5FFB +0x5FFD +0x5FFF +0x6000 +0x6009 +0x600A +0x600B +0x600C +0x600D +0x600E +0x600F +0x6010 +0x6011 +0x6012 +0x6013 +0x6014 +0x6015 +0x6016 +0x6017 +0x6019 +0x601A +0x601B +0x601C +0x601D +0x601E +0x6020 +0x6021 +0x6022 +0x6024 +0x6025 +0x6026 +0x6027 +0x6028 +0x6029 +0x602A +0x602B +0x602C +0x602D +0x602E +0x602F +0x6032 +0x6033 +0x6034 +0x6035 +0x6037 +0x6039 +0x6040 +0x6041 +0x6042 +0x6043 +0x6044 +0x6045 +0x6046 +0x6047 +0x6049 +0x604C +0x604D +0x6050 +0x6053 +0x6054 +0x6055 +0x6058 +0x6059 +0x605A +0x605B +0x605D +0x605E +0x605F +0x6062 +0x6063 +0x6064 +0x6065 +0x6066 +0x6067 +0x6068 +0x6069 +0x606A +0x606B +0x606C +0x606D +0x606E +0x606F +0x6070 +0x6072 +0x607F +0x6080 +0x6081 +0x6083 +0x6084 +0x6085 +0x6086 +0x6087 +0x6088 +0x6089 +0x608A +0x608C +0x608D +0x608E +0x6090 +0x6092 +0x6094 +0x6095 +0x6096 +0x6097 +0x609A +0x609B +0x609C +0x609D +0x609F +0x60A0 +0x60A2 +0x60A3 +0x60A8 +0x60B0 +0x60B1 +0x60B2 +0x60B4 +0x60B5 +0x60B6 +0x60B7 +0x60B8 +0x60B9 +0x60BA +0x60BB +0x60BC +0x60BD +0x60BE +0x60BF +0x60C0 +0x60C1 +0x60C3 +0x60C4 +0x60C5 +0x60C6 +0x60C7 +0x60C8 +0x60C9 +0x60CA +0x60CB +0x60CC +0x60CD +0x60CE +0x60CF +0x60D1 +0x60D3 +0x60D4 +0x60D5 +0x60D8 +0x60D9 +0x60DA +0x60DB +0x60DC +0x60DD +0x60DF +0x60E0 +0x60E1 +0x60E2 +0x60E4 +0x60E6 +0x60F0 +0x60F1 +0x60F2 +0x60F3 +0x60F4 +0x60F5 +0x60F6 +0x60F7 +0x60F8 +0x60F9 +0x60FA +0x60FB +0x60FC +0x60FE +0x60FF +0x6100 +0x6101 +0x6103 +0x6104 +0x6105 +0x6106 +0x6108 +0x6109 +0x610A +0x610B +0x610D +0x610E +0x610F +0x6110 +0x6112 +0x6113 +0x6114 +0x6115 +0x6116 +0x6118 +0x611A +0x611B +0x611C +0x611D +0x611F +0x6123 +0x6127 +0x6128 +0x6129 +0x612B +0x612C +0x612E +0x612F +0x6132 +0x6134 +0x6136 +0x6137 +0x613B +0x613E +0x613F +0x6140 +0x6141 +0x6144 +0x6145 +0x6146 +0x6147 +0x6148 +0x6149 +0x614A +0x614B +0x614C +0x614D +0x614E +0x614F +0x6152 +0x6153 +0x6154 +0x6155 +0x6156 +0x6158 +0x615A +0x615B +0x615D +0x615E +0x615F +0x6161 +0x6162 +0x6163 +0x6165 +0x6166 +0x6167 +0x6168 +0x616A +0x616B +0x616C +0x616E +0x6170 +0x6171 +0x6172 +0x6173 +0x6174 +0x6175 +0x6176 +0x6177 +0x6179 +0x617A +0x617C +0x617E +0x6180 +0x6182 +0x6183 +0x6189 +0x618A +0x618B +0x618C +0x618D +0x618E +0x6190 +0x6191 +0x6192 +0x6193 +0x6194 +0x6196 +0x619A +0x619B +0x619D +0x619F +0x61A1 +0x61A2 +0x61A4 +0x61A7 +0x61A8 +0x61A9 +0x61AA +0x61AB +0x61AC +0x61AD +0x61AE +0x61AF +0x61B0 +0x61B1 +0x61B2 +0x61B3 +0x61B4 +0x61B5 +0x61B6 +0x61B8 +0x61BA +0x61BC +0x61BE +0x61BF +0x61C1 +0x61C2 +0x61C3 +0x61C5 +0x61C6 +0x61C7 +0x61C8 +0x61C9 +0x61CA +0x61CB +0x61CC +0x61CD +0x61D6 +0x61D8 +0x61DE +0x61DF +0x61E0 +0x61E3 +0x61E4 +0x61E5 +0x61E6 +0x61E7 +0x61E8 +0x61E9 +0x61EA +0x61EB +0x61ED +0x61EE +0x61F0 +0x61F1 +0x61F2 +0x61F5 +0x61F6 +0x61F7 +0x61F8 +0x61F9 +0x61FA +0x61FB +0x61FC +0x61FD +0x61FE +0x61FF +0x6200 +0x6201 +0x6203 +0x6204 +0x6207 +0x6208 +0x6209 +0x620A +0x620C +0x620D +0x620E +0x6210 +0x6211 +0x6212 +0x6214 +0x6215 +0x6216 +0x6219 +0x621A +0x621B +0x621F +0x6220 +0x6221 +0x6222 +0x6223 +0x6224 +0x6225 +0x6227 +0x6229 +0x622A +0x622B +0x622D +0x622E +0x6230 +0x6232 +0x6233 +0x6234 +0x6236 +0x623A +0x623D +0x623E +0x623F +0x6240 +0x6241 +0x6242 +0x6243 +0x6246 +0x6247 +0x6248 +0x6249 +0x624A +0x624B +0x624D +0x624E +0x6250 +0x6251 +0x6252 +0x6253 +0x6254 +0x6258 +0x6259 +0x625A +0x625B +0x625C +0x625E +0x6260 +0x6261 +0x6262 +0x6263 +0x6264 +0x6265 +0x6266 +0x626D +0x626E +0x626F +0x6270 +0x6271 +0x6272 +0x6273 +0x6274 +0x6276 +0x6277 +0x6279 +0x627A +0x627B +0x627C +0x627D +0x627E +0x627F +0x6280 +0x6281 +0x6283 +0x6284 +0x6286 +0x6287 +0x6288 +0x6289 +0x628A +0x628C +0x628E +0x628F +0x6291 +0x6292 +0x6293 +0x6294 +0x6295 +0x6296 +0x6297 +0x6298 +0x62A8 +0x62A9 +0x62AA +0x62AB +0x62AC +0x62AD +0x62AE +0x62AF +0x62B0 +0x62B1 +0x62B3 +0x62B4 +0x62B5 +0x62B6 +0x62B8 +0x62B9 +0x62BB +0x62BC +0x62BD +0x62BE +0x62BF +0x62C2 +0x62C4 +0x62C6 +0x62C7 +0x62C8 +0x62C9 +0x62CA +0x62CB +0x62CC +0x62CD +0x62CE +0x62CF +0x62D0 +0x62D1 +0x62D2 +0x62D3 +0x62D4 +0x62D6 +0x62D7 +0x62D8 +0x62D9 +0x62DA +0x62DB +0x62DC +0x62EB +0x62EC +0x62ED +0x62EE +0x62EF +0x62F0 +0x62F1 +0x62F2 +0x62F3 +0x62F4 +0x62F5 +0x62F6 +0x62F7 +0x62F8 +0x62F9 +0x62FA +0x62FB +0x62FC +0x62FD +0x62FE +0x62FF +0x6300 +0x6301 +0x6302 +0x6303 +0x6307 +0x6308 +0x6309 +0x630B +0x630C +0x630D +0x630E +0x630F +0x6310 +0x6311 +0x6313 +0x6314 +0x6315 +0x6316 +0x6328 +0x6329 +0x632A +0x632B +0x632C +0x632D +0x632F +0x6332 +0x6333 +0x6334 +0x6336 +0x6338 +0x6339 +0x633A +0x633B +0x633C +0x633D +0x633E +0x6340 +0x6341 +0x6342 +0x6343 +0x6344 +0x6345 +0x6346 +0x6347 +0x6348 +0x6349 +0x634A +0x634B +0x634C +0x634D +0x634E +0x634F +0x6350 +0x6351 +0x6354 +0x6355 +0x6356 +0x6357 +0x6358 +0x6359 +0x635A +0x6365 +0x6367 +0x6368 +0x6369 +0x636B +0x636D +0x636E +0x636F +0x6370 +0x6371 +0x6372 +0x6375 +0x6376 +0x6377 +0x6378 +0x637A +0x637B +0x637C +0x637D +0x6380 +0x6381 +0x6382 +0x6383 +0x6384 +0x6385 +0x6387 +0x6388 +0x6389 +0x638A +0x638C +0x638D +0x638E +0x638F +0x6390 +0x6391 +0x6392 +0x6394 +0x6396 +0x6397 +0x6398 +0x6399 +0x639B +0x639C +0x639D +0x639E +0x639F +0x63A0 +0x63A1 +0x63A2 +0x63A3 +0x63A4 +0x63A5 +0x63A7 +0x63A8 +0x63A9 +0x63AA +0x63AB +0x63AC +0x63AD +0x63AE +0x63AF +0x63B0 +0x63B1 +0x63BD +0x63BE +0x63C0 +0x63C2 +0x63C3 +0x63C4 +0x63C5 +0x63C6 +0x63C7 +0x63C8 +0x63C9 +0x63CA +0x63CB +0x63CC +0x63CD +0x63CE +0x63CF +0x63D0 +0x63D2 +0x63D3 +0x63D5 +0x63D6 +0x63D7 +0x63D8 +0x63D9 +0x63DA +0x63DB +0x63DC +0x63DD +0x63DF +0x63E0 +0x63E1 +0x63E3 +0x63E4 +0x63E5 +0x63E7 +0x63E8 +0x63E9 +0x63EA +0x63EB +0x63ED +0x63EE +0x63EF +0x63F0 +0x63F1 +0x63F2 +0x63F3 +0x63F4 +0x63F5 +0x63F6 +0x63F9 +0x6406 +0x6409 +0x640A +0x640B +0x640C +0x640D +0x640E +0x640F +0x6410 +0x6412 +0x6413 +0x6414 +0x6415 +0x6416 +0x6417 +0x6418 +0x641A +0x641B +0x641C +0x641E +0x641F +0x6420 +0x6421 +0x6422 +0x6423 +0x6424 +0x6425 +0x6426 +0x6427 +0x6428 +0x642A +0x642B +0x642C +0x642D +0x642E +0x642F +0x6430 +0x6433 +0x6434 +0x6435 +0x6436 +0x6437 +0x6439 +0x643D +0x643E +0x643F +0x6440 +0x6441 +0x6443 +0x644B +0x644D +0x644E +0x6450 +0x6451 +0x6452 +0x6453 +0x6454 +0x6458 +0x6459 +0x645B +0x645C +0x645D +0x645E +0x645F +0x6460 +0x6461 +0x6465 +0x6466 +0x6467 +0x6468 +0x6469 +0x646B +0x646C +0x646D +0x646E +0x646F +0x6470 +0x6472 +0x6473 +0x6474 +0x6475 +0x6476 +0x6477 +0x6478 +0x6479 +0x647A +0x647B +0x647D +0x647F +0x6482 +0x6485 +0x6487 +0x6488 +0x6489 +0x648A +0x648B +0x648C +0x648F +0x6490 +0x6492 +0x6493 +0x6495 +0x6496 +0x6497 +0x6498 +0x6499 +0x649A +0x649C +0x649D +0x649E +0x649F +0x64A0 +0x64A2 +0x64A3 +0x64A4 +0x64A5 +0x64A6 +0x64A9 +0x64AB +0x64AC +0x64AD +0x64AE +0x64B0 +0x64B1 +0x64B2 +0x64B3 +0x64BB +0x64BC +0x64BD +0x64BE +0x64BF +0x64C1 +0x64C2 +0x64C3 +0x64C4 +0x64C5 +0x64C7 +0x64C9 +0x64CA +0x64CB +0x64CD +0x64CE +0x64CF +0x64D0 +0x64D2 +0x64D4 +0x64D6 +0x64D7 +0x64D8 +0x64D9 +0x64DA +0x64DB +0x64E0 +0x64E2 +0x64E3 +0x64E4 +0x64E6 +0x64E8 +0x64E9 +0x64EB +0x64EC +0x64ED +0x64EF +0x64F0 +0x64F1 +0x64F2 +0x64F3 +0x64F4 +0x64F7 +0x64F8 +0x64FA +0x64FB +0x64FC +0x64FD +0x64FE +0x64FF +0x6500 +0x6501 +0x6503 +0x6504 +0x6506 +0x6507 +0x6509 +0x650C +0x650D +0x650E +0x650F +0x6510 +0x6513 +0x6514 +0x6515 +0x6516 +0x6517 +0x6518 +0x6519 +0x651B +0x651C +0x651D +0x6520 +0x6521 +0x6522 +0x6523 +0x6524 +0x6525 +0x6526 +0x6529 +0x652A +0x652B +0x652C +0x652D +0x652E +0x652F +0x6532 +0x6533 +0x6536 +0x6537 +0x6538 +0x6539 +0x653B +0x653D +0x653E +0x653F +0x6541 +0x6543 +0x6545 +0x6546 +0x6548 +0x6549 +0x654A +0x654F +0x6551 +0x6553 +0x6554 +0x6555 +0x6556 +0x6557 +0x6558 +0x6559 +0x655C +0x655D +0x655E +0x6562 +0x6563 +0x6564 +0x6565 +0x6566 +0x6567 +0x6568 +0x656A +0x656C +0x656F +0x6572 +0x6573 +0x6574 +0x6575 +0x6576 +0x6577 +0x6578 +0x6579 +0x657A +0x657B +0x657C +0x657F +0x6580 +0x6581 +0x6582 +0x6583 +0x6584 +0x6587 +0x658C +0x6590 +0x6591 +0x6592 +0x6594 +0x6595 +0x6596 +0x6597 +0x6599 +0x659B +0x659C +0x659D +0x659E +0x659F +0x65A0 +0x65A1 +0x65A2 +0x65A4 +0x65A5 +0x65A7 +0x65A8 +0x65AA +0x65AB +0x65AC +0x65AE +0x65AF +0x65B0 +0x65B2 +0x65B3 +0x65B6 +0x65B7 +0x65B8 +0x65B9 +0x65BB +0x65BC +0x65BD +0x65BF +0x65C1 +0x65C2 +0x65C3 +0x65C4 +0x65C5 +0x65C6 +0x65CB +0x65CC +0x65CD +0x65CE +0x65CF +0x65D0 +0x65D2 +0x65D3 +0x65D6 +0x65D7 +0x65DA +0x65DB +0x65DD +0x65DE +0x65DF +0x65E1 +0x65E2 +0x65E5 +0x65E6 +0x65E8 +0x65E9 +0x65EC +0x65ED +0x65EE +0x65EF +0x65F0 +0x65F1 +0x65F2 +0x65F3 +0x65F4 +0x65F5 +0x65FA +0x65FB +0x65FC +0x65FD +0x6600 +0x6602 +0x6603 +0x6604 +0x6605 +0x6606 +0x6607 +0x6608 +0x6609 +0x660A +0x660B +0x660C +0x660D +0x660E +0x660F +0x6610 +0x6611 +0x6612 +0x6613 +0x6614 +0x6615 +0x661C +0x661D +0x661F +0x6620 +0x6621 +0x6622 +0x6624 +0x6625 +0x6626 +0x6627 +0x6628 +0x662B +0x662D +0x662E +0x662F +0x6631 +0x6632 +0x6633 +0x6634 +0x6635 +0x6636 +0x6639 +0x663A +0x6641 +0x6642 +0x6643 +0x6645 +0x6647 +0x6649 +0x664A +0x664C +0x664F +0x6651 +0x6652 +0x6659 +0x665A +0x665B +0x665C +0x665D +0x665E +0x665F +0x6661 +0x6662 +0x6664 +0x6665 +0x6666 +0x6668 +0x666A +0x666C +0x666E +0x666F +0x6670 +0x6671 +0x6672 +0x6674 +0x6676 +0x6677 +0x6678 +0x6679 +0x667A +0x667B +0x667C +0x667E +0x6680 +0x6684 +0x6686 +0x6687 +0x6688 +0x6689 +0x668A +0x668B +0x668C +0x668D +0x6690 +0x6691 +0x6694 +0x6695 +0x6696 +0x6697 +0x6698 +0x6699 +0x669D +0x669F +0x66A0 +0x66A1 +0x66A2 +0x66A8 +0x66A9 +0x66AA +0x66AB +0x66AE +0x66AF +0x66B0 +0x66B1 +0x66B2 +0x66B4 +0x66B5 +0x66B7 +0x66B8 +0x66B9 +0x66BA +0x66BB +0x66BD +0x66BE +0x66C0 +0x66C4 +0x66C6 +0x66C7 +0x66C8 +0x66C9 +0x66CA +0x66CB +0x66CC +0x66CF +0x66D2 +0x66D6 +0x66D8 +0x66D9 +0x66DA +0x66DB +0x66DC +0x66DD +0x66DE +0x66E0 +0x66E3 +0x66E4 +0x66E6 +0x66E8 +0x66E9 +0x66EB +0x66EC +0x66ED +0x66EE +0x66F0 +0x66F2 +0x66F3 +0x66F4 +0x66F6 +0x66F7 +0x66F8 +0x66F9 +0x66FC +0x66FE +0x66FF +0x6700 +0x6701 +0x6703 +0x6704 +0x6705 +0x6708 +0x6709 +0x670A +0x670B +0x670D +0x670F +0x6710 +0x6712 +0x6713 +0x6714 +0x6715 +0x6717 +0x6718 +0x671B +0x671D +0x671F +0x6720 +0x6721 +0x6722 +0x6723 +0x6726 +0x6727 +0x6728 +0x672A +0x672B +0x672C +0x672D +0x672E +0x6731 +0x6733 +0x6734 +0x6735 +0x6738 +0x6739 +0x673A +0x673B +0x673C +0x673D +0x673E +0x673F +0x6745 +0x6746 +0x6747 +0x6748 +0x6749 +0x674B +0x674C +0x674D +0x674E +0x674F +0x6750 +0x6751 +0x6753 +0x6755 +0x6756 +0x6757 +0x6759 +0x675A +0x675C +0x675D +0x675E +0x675F +0x6760 +0x676A +0x676C +0x676D +0x676F +0x6770 +0x6771 +0x6772 +0x6773 +0x6774 +0x6775 +0x6776 +0x6777 +0x6778 +0x6779 +0x677A +0x677B +0x677C +0x677D +0x677E +0x677F +0x6781 +0x6783 +0x6784 +0x6785 +0x6786 +0x6787 +0x6789 +0x678B +0x678C +0x678D +0x678E +0x6790 +0x6791 +0x6792 +0x6793 +0x6794 +0x6795 +0x6797 +0x6798 +0x6799 +0x679A +0x679C +0x679D +0x679F +0x67AE +0x67AF +0x67B0 +0x67B2 +0x67B3 +0x67B4 +0x67B5 +0x67B6 +0x67B7 +0x67B8 +0x67B9 +0x67BA +0x67BB +0x67C0 +0x67C1 +0x67C2 +0x67C3 +0x67C4 +0x67C5 +0x67C6 +0x67C8 +0x67C9 +0x67CA +0x67CB +0x67CC +0x67CD +0x67CE +0x67CF +0x67D0 +0x67D1 +0x67D2 +0x67D3 +0x67D4 +0x67D8 +0x67D9 +0x67DA +0x67DB +0x67DC +0x67DD +0x67DE +0x67DF +0x67E2 +0x67E3 +0x67E4 +0x67E5 +0x67E6 +0x67E7 +0x67E9 +0x67EA +0x67EB +0x67EC +0x67ED +0x67EE +0x67EF +0x67F0 +0x67F1 +0x67F2 +0x67F3 +0x67F4 +0x67F5 +0x67F6 +0x67F7 +0x67F8 +0x67FA +0x67FC +0x67FF +0x6812 +0x6813 +0x6814 +0x6816 +0x6817 +0x6818 +0x681A +0x681C +0x681D +0x681F +0x6820 +0x6821 +0x6825 +0x6826 +0x6828 +0x6829 +0x682A +0x682B +0x682D +0x682E +0x682F +0x6831 +0x6832 +0x6833 +0x6834 +0x6835 +0x6838 +0x6839 +0x683A +0x683B +0x683C +0x683D +0x6840 +0x6841 +0x6842 +0x6843 +0x6844 +0x6845 +0x6846 +0x6848 +0x6849 +0x684B +0x684C +0x684D +0x684E +0x684F +0x6850 +0x6851 +0x6853 +0x6854 +0x686B +0x686D +0x686E +0x686F +0x6871 +0x6872 +0x6874 +0x6875 +0x6876 +0x6877 +0x6878 +0x6879 +0x687B +0x687C +0x687D +0x687E +0x687F +0x6880 +0x6881 +0x6882 +0x6883 +0x6885 +0x6886 +0x6887 +0x6889 +0x688A +0x688B +0x688C +0x688F +0x6890 +0x6891 +0x6892 +0x6893 +0x6894 +0x6896 +0x6897 +0x689B +0x689C +0x689D +0x689F +0x68A0 +0x68A1 +0x68A2 +0x68A3 +0x68A4 +0x68A7 +0x68A8 +0x68A9 +0x68AA +0x68AB +0x68AC +0x68AD +0x68AE +0x68AF +0x68B0 +0x68B1 +0x68B2 +0x68B3 +0x68B4 +0x68B5 +0x68C4 +0x68C6 +0x68C7 +0x68C8 +0x68C9 +0x68CB +0x68CC +0x68CD +0x68CE +0x68D0 +0x68D1 +0x68D2 +0x68D3 +0x68D4 +0x68D5 +0x68D6 +0x68D7 +0x68D8 +0x68DA +0x68DC +0x68DD +0x68DE +0x68DF +0x68E0 +0x68E1 +0x68E3 +0x68E4 +0x68E6 +0x68E7 +0x68E8 +0x68E9 +0x68EA +0x68EB +0x68EC +0x68EE +0x68EF +0x68F0 +0x68F1 +0x68F2 +0x68F3 +0x68F4 +0x68F5 +0x68F6 +0x68F7 +0x68F8 +0x68F9 +0x68FA +0x68FB +0x68FC +0x68FD +0x6904 +0x6905 +0x6906 +0x6907 +0x6908 +0x690A +0x690B +0x690C +0x690D +0x690E +0x690F +0x6910 +0x6911 +0x6912 +0x6913 +0x6914 +0x6915 +0x6917 +0x6925 +0x692A +0x692F +0x6930 +0x6932 +0x6933 +0x6934 +0x6935 +0x6937 +0x6938 +0x6939 +0x693B +0x693C +0x693D +0x693F +0x6940 +0x6941 +0x6942 +0x6944 +0x6945 +0x6948 +0x6949 +0x694A +0x694B +0x694C +0x694E +0x694F +0x6951 +0x6952 +0x6953 +0x6954 +0x6956 +0x6957 +0x6958 +0x6959 +0x695A +0x695B +0x695C +0x695D +0x695E +0x695F +0x6960 +0x6962 +0x6963 +0x6965 +0x6966 +0x6968 +0x6969 +0x696A +0x696B +0x696C +0x696D +0x696E +0x696F +0x6970 +0x6971 +0x6974 +0x6975 +0x6976 +0x6977 +0x6978 +0x6979 +0x697A +0x697B +0x6982 +0x6983 +0x6986 +0x698D +0x698E +0x6990 +0x6991 +0x6993 +0x6994 +0x6995 +0x6996 +0x6997 +0x6999 +0x699A +0x699B +0x699C +0x699E +0x69A0 +0x69A1 +0x69A3 +0x69A4 +0x69A5 +0x69A6 +0x69A7 +0x69A8 +0x69A9 +0x69AA +0x69AB +0x69AC +0x69AD +0x69AE +0x69AF +0x69B0 +0x69B1 +0x69B3 +0x69B4 +0x69B5 +0x69B6 +0x69B7 +0x69B9 +0x69BB +0x69BC +0x69BD +0x69BE +0x69BF +0x69C1 +0x69C2 +0x69C3 +0x69C4 +0x69C6 +0x69C9 +0x69CA +0x69CB +0x69CC +0x69CD +0x69CE +0x69CF +0x69D0 +0x69D3 +0x69D4 +0x69D9 +0x69E2 +0x69E4 +0x69E5 +0x69E6 +0x69E7 +0x69E8 +0x69EB +0x69EC +0x69ED +0x69EE +0x69F1 +0x69F2 +0x69F3 +0x69F4 +0x69F6 +0x69F7 +0x69F8 +0x69FB +0x69FC +0x69FD +0x69FE +0x69FF +0x6A00 +0x6A01 +0x6A02 +0x6A04 +0x6A05 +0x6A06 +0x6A07 +0x6A08 +0x6A09 +0x6A0A +0x6A0D +0x6A0F +0x6A11 +0x6A13 +0x6A14 +0x6A15 +0x6A16 +0x6A17 +0x6A18 +0x6A19 +0x6A1B +0x6A1D +0x6A1E +0x6A1F +0x6A20 +0x6A21 +0x6A23 +0x6A25 +0x6A26 +0x6A27 +0x6A28 +0x6A32 +0x6A34 +0x6A35 +0x6A38 +0x6A39 +0x6A3A +0x6A3B +0x6A3C +0x6A3D +0x6A3E +0x6A3F +0x6A40 +0x6A41 +0x6A44 +0x6A46 +0x6A47 +0x6A48 +0x6A49 +0x6A4B +0x6A4D +0x6A4E +0x6A4F +0x6A50 +0x6A51 +0x6A54 +0x6A55 +0x6A56 +0x6A58 +0x6A59 +0x6A5A +0x6A5B +0x6A5D +0x6A5E +0x6A5F +0x6A60 +0x6A61 +0x6A62 +0x6A64 +0x6A66 +0x6A67 +0x6A68 +0x6A69 +0x6A6A +0x6A6B +0x6A6D +0x6A6F +0x6A76 +0x6A7E +0x6A7F +0x6A80 +0x6A81 +0x6A83 +0x6A84 +0x6A85 +0x6A87 +0x6A89 +0x6A8C +0x6A8D +0x6A8E +0x6A90 +0x6A91 +0x6A92 +0x6A93 +0x6A94 +0x6A95 +0x6A96 +0x6A97 +0x6A9A +0x6A9B +0x6A9C +0x6A9E +0x6A9F +0x6AA0 +0x6AA1 +0x6AA2 +0x6AA3 +0x6AA4 +0x6AA5 +0x6AA6 +0x6AA8 +0x6AAC +0x6AAD +0x6AAE +0x6AAF +0x6AB3 +0x6AB4 +0x6AB6 +0x6AB7 +0x6AB8 +0x6AB9 +0x6ABA +0x6ABB +0x6ABD +0x6AC2 +0x6AC3 +0x6AC5 +0x6AC6 +0x6AC7 +0x6ACB +0x6ACC +0x6ACD +0x6ACF +0x6AD0 +0x6AD1 +0x6AD3 +0x6AD9 +0x6ADA +0x6ADB +0x6ADC +0x6ADD +0x6ADE +0x6ADF +0x6AE0 +0x6AE1 +0x6AE5 +0x6AE7 +0x6AE8 +0x6AEA +0x6AEB +0x6AEC +0x6AEE +0x6AEF +0x6AF0 +0x6AF1 +0x6AF3 +0x6AF8 +0x6AF9 +0x6AFA +0x6AFB +0x6AFC +0x6B00 +0x6B02 +0x6B03 +0x6B04 +0x6B08 +0x6B09 +0x6B0A +0x6B0B +0x6B0F +0x6B10 +0x6B11 +0x6B12 +0x6B13 +0x6B16 +0x6B17 +0x6B18 +0x6B19 +0x6B1A +0x6B1E +0x6B20 +0x6B21 +0x6B23 +0x6B25 +0x6B28 +0x6B2C +0x6B2D +0x6B2F +0x6B31 +0x6B32 +0x6B33 +0x6B34 +0x6B36 +0x6B37 +0x6B38 +0x6B39 +0x6B3A +0x6B3B +0x6B3C +0x6B3D +0x6B3E +0x6B3F +0x6B41 +0x6B42 +0x6B43 +0x6B45 +0x6B46 +0x6B47 +0x6B48 +0x6B49 +0x6B4A +0x6B4B +0x6B4C +0x6B4D +0x6B4E +0x6B50 +0x6B51 +0x6B54 +0x6B55 +0x6B56 +0x6B59 +0x6B5B +0x6B5C +0x6B5E +0x6B5F +0x6B60 +0x6B61 +0x6B62 +0x6B63 +0x6B64 +0x6B65 +0x6B66 +0x6B67 +0x6B6A +0x6B6D +0x6B72 +0x6B76 +0x6B77 +0x6B78 +0x6B79 +0x6B7B +0x6B7E +0x6B7F +0x6B80 +0x6B82 +0x6B83 +0x6B84 +0x6B86 +0x6B88 +0x6B89 +0x6B8A +0x6B8C +0x6B8D +0x6B8E +0x6B8F +0x6B91 +0x6B94 +0x6B95 +0x6B96 +0x6B97 +0x6B98 +0x6B99 +0x6B9B +0x6B9E +0x6B9F +0x6BA0 +0x6BA2 +0x6BA3 +0x6BA4 +0x6BA5 +0x6BA6 +0x6BA7 +0x6BAA +0x6BAB +0x6BAD +0x6BAE +0x6BAF +0x6BB0 +0x6BB2 +0x6BB3 +0x6BB5 +0x6BB6 +0x6BB7 +0x6BBA +0x6BBC +0x6BBD +0x6BBF +0x6BC0 +0x6BC3 +0x6BC4 +0x6BC5 +0x6BC6 +0x6BC7 +0x6BC8 +0x6BC9 +0x6BCA +0x6BCB +0x6BCC +0x6BCD +0x6BCF +0x6BD0 +0x6BD2 +0x6BD3 +0x6BD4 +0x6BD6 +0x6BD7 +0x6BD8 +0x6BDA +0x6BDB +0x6BDE +0x6BE0 +0x6BE2 +0x6BE3 +0x6BE4 +0x6BE6 +0x6BE7 +0x6BE8 +0x6BEB +0x6BEC +0x6BEF +0x6BF0 +0x6BF2 +0x6BF3 +0x6BF7 +0x6BF8 +0x6BF9 +0x6BFB +0x6BFC +0x6BFD +0x6BFE +0x6BFF +0x6C00 +0x6C01 +0x6C02 +0x6C03 +0x6C04 +0x6C05 +0x6C06 +0x6C08 +0x6C09 +0x6C0B +0x6C0C +0x6C0D +0x6C0F +0x6C10 +0x6C11 +0x6C13 +0x6C14 +0x6C15 +0x6C16 +0x6C18 +0x6C19 +0x6C1A +0x6C1B +0x6C1D +0x6C1F +0x6C20 +0x6C21 +0x6C23 +0x6C24 +0x6C25 +0x6C26 +0x6C27 +0x6C28 +0x6C2A +0x6C2B +0x6C2C +0x6C2E +0x6C2F +0x6C30 +0x6C33 +0x6C34 +0x6C36 +0x6C38 +0x6C3B +0x6C3E +0x6C3F +0x6C40 +0x6C41 +0x6C42 +0x6C43 +0x6C46 +0x6C4A +0x6C4B +0x6C4C +0x6C4D +0x6C4E +0x6C4F +0x6C50 +0x6C52 +0x6C54 +0x6C55 +0x6C57 +0x6C59 +0x6C5B +0x6C5C +0x6C5D +0x6C5E +0x6C5F +0x6C60 +0x6C61 +0x6C65 +0x6C66 +0x6C67 +0x6C68 +0x6C69 +0x6C6A +0x6C6B +0x6C6D +0x6C6F +0x6C70 +0x6C71 +0x6C72 +0x6C73 +0x6C74 +0x6C76 +0x6C78 +0x6C7A +0x6C7B +0x6C7D +0x6C7E +0x6C80 +0x6C81 +0x6C82 +0x6C83 +0x6C84 +0x6C85 +0x6C86 +0x6C87 +0x6C88 +0x6C89 +0x6C8A +0x6C8B +0x6C8C +0x6C8D +0x6C8E +0x6C8F +0x6C90 +0x6C92 +0x6C93 +0x6C94 +0x6C95 +0x6C96 +0x6C98 +0x6C99 +0x6C9A +0x6C9B +0x6C9C +0x6C9D +0x6CAB +0x6CAC +0x6CAD +0x6CAE +0x6CB0 +0x6CB1 +0x6CB3 +0x6CB4 +0x6CB6 +0x6CB7 +0x6CB8 +0x6CB9 +0x6CBA +0x6CBB +0x6CBC +0x6CBD +0x6CBE +0x6CBF +0x6CC0 +0x6CC1 +0x6CC2 +0x6CC3 +0x6CC4 +0x6CC5 +0x6CC6 +0x6CC7 +0x6CC9 +0x6CCA +0x6CCC +0x6CCD +0x6CCF +0x6CD0 +0x6CD1 +0x6CD2 +0x6CD3 +0x6CD4 +0x6CD5 +0x6CD6 +0x6CD7 +0x6CD9 +0x6CDA +0x6CDB +0x6CDC +0x6CDD +0x6CDE +0x6CE0 +0x6CE1 +0x6CE2 +0x6CE3 +0x6CE5 +0x6CE7 +0x6CE8 +0x6CE9 +0x6CEB +0x6CEC +0x6CED +0x6CEE +0x6CEF +0x6CF0 +0x6CF1 +0x6CF2 +0x6CF3 +0x6CF5 +0x6CF9 +0x6D00 +0x6D01 +0x6D03 +0x6D04 +0x6D07 +0x6D08 +0x6D09 +0x6D0A +0x6D0B +0x6D0C +0x6D0D +0x6D0E +0x6D0F +0x6D10 +0x6D11 +0x6D12 +0x6D16 +0x6D17 +0x6D18 +0x6D19 +0x6D1A +0x6D1B +0x6D1D +0x6D1E +0x6D1F +0x6D20 +0x6D22 +0x6D25 +0x6D27 +0x6D28 +0x6D29 +0x6D2A +0x6D2B +0x6D2C +0x6D2D +0x6D2E +0x6D2F +0x6D30 +0x6D31 +0x6D32 +0x6D33 +0x6D34 +0x6D35 +0x6D36 +0x6D37 +0x6D38 +0x6D39 +0x6D3A +0x6D3B +0x6D3C +0x6D3D +0x6D3E +0x6D3F +0x6D40 +0x6D41 +0x6D42 +0x6D58 +0x6D59 +0x6D5A +0x6D5E +0x6D5F +0x6D60 +0x6D61 +0x6D62 +0x6D63 +0x6D64 +0x6D65 +0x6D66 +0x6D67 +0x6D68 +0x6D69 +0x6D6A +0x6D6C +0x6D6D +0x6D6E +0x6D6F +0x6D70 +0x6D74 +0x6D75 +0x6D76 +0x6D77 +0x6D78 +0x6D79 +0x6D7A +0x6D7B +0x6D7C +0x6D7D +0x6D7E +0x6D7F +0x6D80 +0x6D82 +0x6D83 +0x6D84 +0x6D85 +0x6D86 +0x6D87 +0x6D88 +0x6D89 +0x6D8A +0x6D8B +0x6D8C +0x6D8D +0x6D8E +0x6D90 +0x6D91 +0x6D92 +0x6D93 +0x6D94 +0x6D95 +0x6D97 +0x6D98 +0x6DAA +0x6DAB +0x6DAC +0x6DAE +0x6DAF +0x6DB2 +0x6DB3 +0x6DB4 +0x6DB5 +0x6DB7 +0x6DB8 +0x6DBA +0x6DBB +0x6DBC +0x6DBD +0x6DBE +0x6DBF +0x6DC0 +0x6DC2 +0x6DC4 +0x6DC5 +0x6DC6 +0x6DC7 +0x6DC8 +0x6DC9 +0x6DCA +0x6DCB +0x6DCC +0x6DCD +0x6DCF +0x6DD0 +0x6DD1 +0x6DD2 +0x6DD3 +0x6DD4 +0x6DD5 +0x6DD6 +0x6DD7 +0x6DD8 +0x6DD9 +0x6DDA +0x6DDB +0x6DDC +0x6DDD +0x6DDE +0x6DDF +0x6DE0 +0x6DE1 +0x6DE2 +0x6DE3 +0x6DE4 +0x6DE5 +0x6DE6 +0x6DE8 +0x6DE9 +0x6DEA +0x6DEB +0x6DEC +0x6DED +0x6DEE +0x6DEF +0x6DF0 +0x6DF1 +0x6DF2 +0x6DF3 +0x6DF4 +0x6DF5 +0x6DF6 +0x6DF7 +0x6DF9 +0x6DFA +0x6DFB +0x6DFC +0x6DFD +0x6E00 +0x6E03 +0x6E05 +0x6E19 +0x6E1A +0x6E1B +0x6E1C +0x6E1D +0x6E1F +0x6E20 +0x6E21 +0x6E22 +0x6E23 +0x6E24 +0x6E25 +0x6E26 +0x6E27 +0x6E28 +0x6E2B +0x6E2C +0x6E2D +0x6E2E +0x6E2F +0x6E30 +0x6E31 +0x6E32 +0x6E33 +0x6E34 +0x6E35 +0x6E36 +0x6E38 +0x6E39 +0x6E3A +0x6E3B +0x6E3C +0x6E3D +0x6E3E +0x6E3F +0x6E40 +0x6E41 +0x6E43 +0x6E44 +0x6E45 +0x6E46 +0x6E47 +0x6E49 +0x6E4A +0x6E4B +0x6E4D +0x6E4E +0x6E51 +0x6E52 +0x6E53 +0x6E54 +0x6E55 +0x6E56 +0x6E58 +0x6E5A +0x6E5B +0x6E5C +0x6E5D +0x6E5E +0x6E5F +0x6E60 +0x6E61 +0x6E62 +0x6E63 +0x6E64 +0x6E65 +0x6E66 +0x6E67 +0x6E68 +0x6E69 +0x6E6B +0x6E6E +0x6E6F +0x6E71 +0x6E72 +0x6E73 +0x6E74 +0x6E77 +0x6E78 +0x6E79 +0x6E88 +0x6E89 +0x6E8D +0x6E8E +0x6E8F +0x6E90 +0x6E92 +0x6E93 +0x6E94 +0x6E96 +0x6E97 +0x6E98 +0x6E99 +0x6E9B +0x6E9C +0x6E9D +0x6E9E +0x6E9F +0x6EA0 +0x6EA1 +0x6EA2 +0x6EA3 +0x6EA4 +0x6EA5 +0x6EA6 +0x6EA7 +0x6EAA +0x6EAB +0x6EAE +0x6EAF +0x6EB0 +0x6EB1 +0x6EB2 +0x6EB3 +0x6EB4 +0x6EB6 +0x6EB7 +0x6EB9 +0x6EBA +0x6EBC +0x6EBD +0x6EBE +0x6EBF +0x6EC0 +0x6EC1 +0x6EC2 +0x6EC3 +0x6EC4 +0x6EC5 +0x6EC6 +0x6EC7 +0x6EC8 +0x6EC9 +0x6ECA +0x6ECB +0x6ECC +0x6ECD +0x6ECE +0x6ECF +0x6ED0 +0x6ED1 +0x6ED2 +0x6ED3 +0x6ED4 +0x6ED5 +0x6ED6 +0x6ED8 +0x6EDC +0x6EEB +0x6EEC +0x6EED +0x6EEE +0x6EEF +0x6EF1 +0x6EF2 +0x6EF4 +0x6EF5 +0x6EF6 +0x6EF7 +0x6EF8 +0x6EF9 +0x6EFB +0x6EFC +0x6EFD +0x6EFE +0x6EFF +0x6F00 +0x6F01 +0x6F02 +0x6F03 +0x6F05 +0x6F06 +0x6F07 +0x6F08 +0x6F09 +0x6F0A +0x6F0D +0x6F0E +0x6F0F +0x6F12 +0x6F13 +0x6F14 +0x6F15 +0x6F18 +0x6F19 +0x6F1A +0x6F1C +0x6F1E +0x6F1F +0x6F20 +0x6F21 +0x6F22 +0x6F23 +0x6F25 +0x6F26 +0x6F27 +0x6F29 +0x6F2A +0x6F2B +0x6F2C +0x6F2D +0x6F2E +0x6F2F +0x6F30 +0x6F31 +0x6F32 +0x6F33 +0x6F35 +0x6F36 +0x6F37 +0x6F38 +0x6F39 +0x6F3A +0x6F3B +0x6F3C +0x6F3E +0x6F3F +0x6F40 +0x6F41 +0x6F43 +0x6F4E +0x6F4F +0x6F50 +0x6F51 +0x6F52 +0x6F53 +0x6F54 +0x6F55 +0x6F57 +0x6F58 +0x6F5A +0x6F5B +0x6F5D +0x6F5E +0x6F5F +0x6F60 +0x6F61 +0x6F62 +0x6F63 +0x6F64 +0x6F66 +0x6F67 +0x6F69 +0x6F6A +0x6F6B +0x6F6C +0x6F6D +0x6F6E +0x6F6F +0x6F70 +0x6F72 +0x6F73 +0x6F76 +0x6F77 +0x6F78 +0x6F7A +0x6F7B +0x6F7C +0x6F7D +0x6F7E +0x6F7F +0x6F80 +0x6F82 +0x6F84 +0x6F85 +0x6F86 +0x6F87 +0x6F88 +0x6F89 +0x6F8B +0x6F8C +0x6F8D +0x6F8E +0x6F90 +0x6F92 +0x6F93 +0x6F94 +0x6F95 +0x6F96 +0x6F97 +0x6F9E +0x6FA0 +0x6FA1 +0x6FA2 +0x6FA3 +0x6FA4 +0x6FA5 +0x6FA6 +0x6FA7 +0x6FA8 +0x6FA9 +0x6FAA +0x6FAB +0x6FAC +0x6FAD +0x6FAE +0x6FAF +0x6FB0 +0x6FB1 +0x6FB2 +0x6FB3 +0x6FB4 +0x6FB6 +0x6FB8 +0x6FB9 +0x6FBA +0x6FBC +0x6FBD +0x6FBF +0x6FC0 +0x6FC1 +0x6FC2 +0x6FC3 +0x6FC4 +0x6FC6 +0x6FC7 +0x6FC8 +0x6FC9 +0x6FCA +0x6FCB +0x6FCC +0x6FCD +0x6FCE +0x6FCF +0x6FD4 +0x6FD5 +0x6FD8 +0x6FDB +0x6FDC +0x6FDD +0x6FDE +0x6FDF +0x6FE0 +0x6FE1 +0x6FE2 +0x6FE3 +0x6FE4 +0x6FE6 +0x6FE7 +0x6FE8 +0x6FE9 +0x6FEB +0x6FEC +0x6FED +0x6FEE +0x6FEF +0x6FF0 +0x6FF1 +0x6FF2 +0x6FF4 +0x6FF7 +0x6FFA +0x6FFB +0x6FFC +0x6FFE +0x6FFF +0x7000 +0x7001 +0x7004 +0x7005 +0x7006 +0x7007 +0x7009 +0x700A +0x700B +0x700C +0x700D +0x700E +0x700F +0x7011 +0x7014 +0x7015 +0x7016 +0x7017 +0x7018 +0x7019 +0x701A +0x701B +0x701C +0x701D +0x701F +0x7020 +0x7021 +0x7022 +0x7023 +0x7024 +0x7026 +0x7027 +0x7028 +0x7029 +0x702A +0x702B +0x702F +0x7030 +0x7031 +0x7032 +0x7033 +0x7034 +0x7035 +0x7037 +0x7038 +0x7039 +0x703A +0x703B +0x703C +0x703E +0x703F +0x7040 +0x7041 +0x7042 +0x7043 +0x7044 +0x7045 +0x7046 +0x7048 +0x7049 +0x704A +0x704C +0x7051 +0x7052 +0x7055 +0x7056 +0x7057 +0x7058 +0x705A +0x705B +0x705D +0x705E +0x705F +0x7060 +0x7061 +0x7062 +0x7063 +0x7064 +0x7065 +0x7066 +0x7068 +0x7069 +0x706A +0x706B +0x7070 +0x7071 +0x7074 +0x7076 +0x7078 +0x707A +0x707C +0x707D +0x7082 +0x7083 +0x7084 +0x7085 +0x7086 +0x708A +0x708E +0x7091 +0x7092 +0x7093 +0x7094 +0x7095 +0x7096 +0x7098 +0x7099 +0x709A +0x709F +0x70A1 +0x70A4 +0x70A9 +0x70AB +0x70AC +0x70AD +0x70AE +0x70AF +0x70B0 +0x70B1 +0x70B3 +0x70B4 +0x70B5 +0x70B7 +0x70B8 +0x70BA +0x70BE +0x70C5 +0x70C6 +0x70C7 +0x70C8 +0x70CA +0x70CB +0x70CD +0x70CE +0x70CF +0x70D1 +0x70D2 +0x70D3 +0x70D4 +0x70D7 +0x70D8 +0x70D9 +0x70DA +0x70DC +0x70DD +0x70DE +0x70E0 +0x70E1 +0x70E2 +0x70E4 +0x70EF +0x70F0 +0x70F3 +0x70F4 +0x70F6 +0x70F7 +0x70F8 +0x70F9 +0x70FA +0x70FB +0x70FC +0x70FD +0x70FF +0x7100 +0x7102 +0x7104 +0x7106 +0x7109 +0x710A +0x710B +0x710C +0x710D +0x710E +0x7110 +0x7113 +0x7117 +0x7119 +0x711A +0x711B +0x711C +0x711E +0x711F +0x7120 +0x7121 +0x7122 +0x7123 +0x7125 +0x7126 +0x7128 +0x712E +0x712F +0x7130 +0x7131 +0x7132 +0x7136 +0x713A +0x7141 +0x7142 +0x7143 +0x7144 +0x7146 +0x7147 +0x7149 +0x714B +0x714C +0x714D +0x714E +0x7150 +0x7152 +0x7153 +0x7154 +0x7156 +0x7158 +0x7159 +0x715A +0x715C +0x715D +0x715E +0x715F +0x7160 +0x7161 +0x7162 +0x7163 +0x7164 +0x7165 +0x7166 +0x7167 +0x7168 +0x7169 +0x716A +0x716C +0x716E +0x7170 +0x7172 +0x7178 +0x717B +0x717D +0x7180 +0x7181 +0x7182 +0x7184 +0x7185 +0x7186 +0x7187 +0x7189 +0x718A +0x718F +0x7190 +0x7192 +0x7194 +0x7197 +0x7199 +0x719A +0x719B +0x719C +0x719D +0x719E +0x719F +0x71A0 +0x71A1 +0x71A4 +0x71A5 +0x71A7 +0x71A8 +0x71A9 +0x71AA +0x71AC +0x71AF +0x71B0 +0x71B1 +0x71B2 +0x71B3 +0x71B5 +0x71B8 +0x71B9 +0x71BC +0x71BD +0x71BE +0x71BF +0x71C0 +0x71C1 +0x71C2 +0x71C3 +0x71C4 +0x71C5 +0x71C6 +0x71C7 +0x71C8 +0x71C9 +0x71CA +0x71CB +0x71CE +0x71CF +0x71D0 +0x71D2 +0x71D4 +0x71D5 +0x71D6 +0x71D8 +0x71D9 +0x71DA +0x71DB +0x71DC +0x71DF +0x71E0 +0x71E1 +0x71E2 +0x71E4 +0x71E5 +0x71E6 +0x71E7 +0x71E8 +0x71EC +0x71ED +0x71EE +0x71F0 +0x71F1 +0x71F2 +0x71F4 +0x71F8 +0x71F9 +0x71FB +0x71FC +0x71FD +0x71FE +0x71FF +0x7201 +0x7202 +0x7203 +0x7205 +0x7206 +0x7207 +0x720A +0x720C +0x720D +0x7210 +0x7213 +0x7214 +0x7219 +0x721A +0x721B +0x721D +0x721E +0x721F +0x7222 +0x7223 +0x7226 +0x7227 +0x7228 +0x7229 +0x722A +0x722C +0x722D +0x7230 +0x7235 +0x7236 +0x7238 +0x7239 +0x723A +0x723B +0x723D +0x723E +0x723F +0x7241 +0x7242 +0x7244 +0x7246 +0x7247 +0x7248 +0x7249 +0x724A +0x724B +0x724C +0x724F +0x7252 +0x7253 +0x7256 +0x7258 +0x7259 +0x725A +0x725B +0x725D +0x725E +0x725F +0x7260 +0x7261 +0x7262 +0x7263 +0x7267 +0x7269 +0x726A +0x726C +0x726E +0x726F +0x7270 +0x7272 +0x7273 +0x7274 +0x7276 +0x7277 +0x7278 +0x7279 +0x727B +0x727C +0x727D +0x727E +0x727F +0x7280 +0x7281 +0x7284 +0x7285 +0x7286 +0x7288 +0x7289 +0x728B +0x728C +0x728D +0x728E +0x7290 +0x7291 +0x7292 +0x7293 +0x7295 +0x7296 +0x7297 +0x7298 +0x729A +0x729B +0x729D +0x729E +0x72A1 +0x72A2 +0x72A3 +0x72A4 +0x72A5 +0x72A6 +0x72A7 +0x72A8 +0x72A9 +0x72AA +0x72AC +0x72AE +0x72AF +0x72B0 +0x72B4 +0x72B5 +0x72BA +0x72BD +0x72BF +0x72C0 +0x72C1 +0x72C2 +0x72C3 +0x72C4 +0x72C5 +0x72C6 +0x72C9 +0x72CA +0x72CB +0x72CC +0x72CE +0x72D0 +0x72D1 +0x72D2 +0x72D4 +0x72D6 +0x72D7 +0x72D8 +0x72D9 +0x72DA +0x72DC +0x72DF +0x72E0 +0x72E1 +0x72E3 +0x72E4 +0x72E6 +0x72E8 +0x72E9 +0x72EA +0x72EB +0x72F3 +0x72F4 +0x72F6 +0x72F7 +0x72F8 +0x72F9 +0x72FA +0x72FB +0x72FC +0x72FD +0x72FE +0x72FF +0x7300 +0x7301 +0x7307 +0x7308 +0x730A +0x730B +0x730C +0x730F +0x7311 +0x7312 +0x7313 +0x7316 +0x7317 +0x7318 +0x7319 +0x731B +0x731C +0x731D +0x731E +0x7322 +0x7323 +0x7325 +0x7326 +0x7327 +0x7329 +0x732D +0x7330 +0x7331 +0x7332 +0x7333 +0x7334 +0x7335 +0x7336 +0x7337 +0x733A +0x733B +0x733C +0x733E +0x733F +0x7340 +0x7342 +0x7343 +0x7344 +0x7345 +0x7349 +0x734A +0x734C +0x734D +0x734E +0x7350 +0x7351 +0x7352 +0x7357 +0x7358 +0x7359 +0x735A +0x735B +0x735D +0x735E +0x735F +0x7360 +0x7361 +0x7362 +0x7365 +0x7366 +0x7367 +0x7368 +0x7369 +0x736A +0x736B +0x736C +0x736E +0x736F +0x7370 +0x7372 +0x7373 +0x7375 +0x7376 +0x7377 +0x7378 +0x737A +0x737B +0x737C +0x737D +0x737E +0x737F +0x7380 +0x7381 +0x7382 +0x7383 +0x7384 +0x7385 +0x7386 +0x7387 +0x7388 +0x7389 +0x738A +0x738B +0x738E +0x7392 +0x7393 +0x7394 +0x7395 +0x7396 +0x7397 +0x739D +0x739F +0x73A0 +0x73A1 +0x73A2 +0x73A4 +0x73A5 +0x73A6 +0x73A8 +0x73A9 +0x73AB +0x73AC +0x73AD +0x73B2 +0x73B3 +0x73B4 +0x73B5 +0x73B6 +0x73B7 +0x73B8 +0x73B9 +0x73BB +0x73BC +0x73BE +0x73BF +0x73C0 +0x73C2 +0x73C3 +0x73C5 +0x73C6 +0x73C7 +0x73C8 +0x73CA +0x73CB +0x73CC +0x73CD +0x73D2 +0x73D3 +0x73D4 +0x73D6 +0x73D7 +0x73D8 +0x73D9 +0x73DA +0x73DB +0x73DC +0x73DD +0x73DE +0x73E0 +0x73E3 +0x73E5 +0x73E7 +0x73E8 +0x73E9 +0x73EA +0x73EB +0x73ED +0x73EE +0x73F4 +0x73F5 +0x73F6 +0x73F8 +0x73FA +0x73FC +0x73FD +0x73FE +0x73FF +0x7400 +0x7401 +0x7403 +0x7404 +0x7405 +0x7406 +0x7407 +0x7408 +0x7409 +0x740A +0x740B +0x740C +0x740D +0x7416 +0x741A +0x741B +0x741D +0x7420 +0x7421 +0x7422 +0x7423 +0x7424 +0x7425 +0x7426 +0x7428 +0x7429 +0x742A +0x742B +0x742C +0x742D +0x742E +0x742F +0x7430 +0x7431 +0x7432 +0x7433 +0x7434 +0x7435 +0x7436 +0x743A +0x743F +0x7440 +0x7441 +0x7442 +0x7444 +0x7446 +0x744A +0x744B +0x744D +0x744E +0x744F +0x7450 +0x7451 +0x7452 +0x7454 +0x7455 +0x7457 +0x7459 +0x745A +0x745B +0x745C +0x745E +0x745F +0x7462 +0x7463 +0x7464 +0x7467 +0x7469 +0x746A +0x746D +0x746E +0x746F +0x7470 +0x7471 +0x7472 +0x7473 +0x7475 +0x7479 +0x747C +0x747D +0x747E +0x747F +0x7480 +0x7481 +0x7483 +0x7485 +0x7486 +0x7487 +0x7488 +0x7489 +0x748A +0x748B +0x7490 +0x7492 +0x7494 +0x7495 +0x7497 +0x7498 +0x749A +0x749C +0x749E +0x749F +0x74A0 +0x74A1 +0x74A3 +0x74A5 +0x74A6 +0x74A7 +0x74A8 +0x74A9 +0x74AA +0x74AB +0x74AD +0x74AF +0x74B0 +0x74B1 +0x74B2 +0x74B5 +0x74B6 +0x74B7 +0x74B8 +0x74BA +0x74BB +0x74BD +0x74BE +0x74BF +0x74C0 +0x74C1 +0x74C2 +0x74C3 +0x74C5 +0x74CA +0x74CB +0x74CF +0x74D4 +0x74D5 +0x74D6 +0x74D7 +0x74D8 +0x74D9 +0x74DA +0x74DB +0x74DC +0x74DD +0x74DE +0x74DF +0x74E0 +0x74E1 +0x74E2 +0x74E3 +0x74E4 +0x74E5 +0x74E6 +0x74E8 +0x74E9 +0x74EC +0x74EE +0x74F4 +0x74F5 +0x74F6 +0x74F7 +0x74FB +0x74FD +0x74FE +0x74FF +0x7500 +0x7502 +0x7503 +0x7504 +0x7507 +0x7508 +0x750B +0x750C +0x750D +0x750F +0x7510 +0x7511 +0x7512 +0x7513 +0x7514 +0x7515 +0x7516 +0x7517 +0x7518 +0x751A +0x751C +0x751D +0x751F +0x7521 +0x7522 +0x7525 +0x7526 +0x7528 +0x7529 +0x752A +0x752B +0x752C +0x752D +0x752E +0x752F +0x7530 +0x7531 +0x7532 +0x7533 +0x7537 +0x7538 +0x7539 +0x753A +0x753D +0x753E +0x753F +0x7540 +0x7547 +0x7548 +0x754B +0x754C +0x754E +0x754F +0x7554 +0x7559 +0x755A +0x755B +0x755C +0x755D +0x755F +0x7562 +0x7563 +0x7564 +0x7565 +0x7566 +0x756A +0x756B +0x756C +0x756F +0x7570 +0x7576 +0x7577 +0x7578 +0x7579 +0x757D +0x757E +0x757F +0x7580 +0x7584 +0x7586 +0x7587 +0x758A +0x758B +0x758C +0x758F +0x7590 +0x7591 +0x7594 +0x7595 +0x7598 +0x7599 +0x759A +0x759D +0x75A2 +0x75A3 +0x75A4 +0x75A5 +0x75A7 +0x75AA +0x75AB +0x75B0 +0x75B2 +0x75B3 +0x75B5 +0x75B6 +0x75B8 +0x75B9 +0x75BA +0x75BB +0x75BC +0x75BD +0x75BE +0x75BF +0x75C0 +0x75C1 +0x75C2 +0x75C4 +0x75C5 +0x75C7 +0x75CA +0x75CB +0x75CC +0x75CD +0x75CE +0x75CF +0x75D0 +0x75D1 +0x75D2 +0x75D4 +0x75D5 +0x75D7 +0x75D8 +0x75D9 +0x75DA +0x75DB +0x75DD +0x75DE +0x75DF +0x75E0 +0x75E1 +0x75E2 +0x75E3 +0x75E4 +0x75E6 +0x75E7 +0x75ED +0x75EF +0x75F0 +0x75F1 +0x75F2 +0x75F3 +0x75F4 +0x75F5 +0x75F6 +0x75F7 +0x75F8 +0x75F9 +0x75FA +0x75FB +0x75FC +0x75FD +0x75FE +0x75FF +0x7600 +0x7601 +0x7603 +0x7608 +0x7609 +0x760A +0x760B +0x760C +0x760D +0x760F +0x7610 +0x7611 +0x7613 +0x7614 +0x7615 +0x7616 +0x7619 +0x761A +0x761B +0x761C +0x761D +0x761E +0x761F +0x7620 +0x7621 +0x7622 +0x7623 +0x7624 +0x7625 +0x7626 +0x7627 +0x7628 +0x7629 +0x762D +0x762F +0x7630 +0x7631 +0x7632 +0x7633 +0x7634 +0x7635 +0x7638 +0x763A +0x763C +0x763D +0x7642 +0x7643 +0x7646 +0x7647 +0x7648 +0x7649 +0x764C +0x7650 +0x7652 +0x7653 +0x7656 +0x7657 +0x7658 +0x7659 +0x765A +0x765C +0x765F +0x7660 +0x7661 +0x7662 +0x7664 +0x7665 +0x7669 +0x766A +0x766C +0x766D +0x766E +0x7670 +0x7671 +0x7672 +0x7675 +0x7678 +0x7679 +0x767B +0x767C +0x767D +0x767E +0x767F +0x7681 +0x7682 +0x7684 +0x7686 +0x7687 +0x7688 +0x7689 +0x768A +0x768B +0x768E +0x768F +0x7692 +0x7693 +0x7695 +0x7696 +0x7699 +0x769A +0x769B +0x769C +0x769D +0x769E +0x76A4 +0x76A6 +0x76AA +0x76AB +0x76AD +0x76AE +0x76AF +0x76B0 +0x76B4 +0x76B5 +0x76B8 +0x76BA +0x76BB +0x76BD +0x76BE +0x76BF +0x76C2 +0x76C3 +0x76C4 +0x76C5 +0x76C6 +0x76C8 +0x76C9 +0x76CA +0x76CD +0x76CE +0x76D2 +0x76D3 +0x76D4 +0x76DA +0x76DB +0x76DC +0x76DD +0x76DE +0x76DF +0x76E1 +0x76E3 +0x76E4 +0x76E5 +0x76E6 +0x76E7 +0x76E9 +0x76EA +0x76EC +0x76ED +0x76EE +0x76EF +0x76F0 +0x76F1 +0x76F2 +0x76F3 +0x76F4 +0x76F5 +0x76F7 +0x76F8 +0x76F9 +0x76FA +0x76FB +0x76FC +0x76FE +0x7701 +0x7703 +0x7704 +0x7705 +0x7707 +0x7708 +0x7709 +0x770A +0x770B +0x7710 +0x7711 +0x7712 +0x7713 +0x7715 +0x7719 +0x771A +0x771B +0x771D +0x771F +0x7720 +0x7722 +0x7723 +0x7725 +0x7727 +0x7728 +0x7729 +0x772D +0x772F +0x7731 +0x7732 +0x7733 +0x7734 +0x7735 +0x7736 +0x7737 +0x7738 +0x7739 +0x773A +0x773B +0x773C +0x773D +0x773E +0x7744 +0x7745 +0x7746 +0x7747 +0x774A +0x774B +0x774C +0x774D +0x774E +0x774F +0x7752 +0x7754 +0x7755 +0x7756 +0x7759 +0x775A +0x775B +0x775C +0x775E +0x775F +0x7760 +0x7761 +0x7762 +0x7763 +0x7765 +0x7766 +0x7767 +0x7768 +0x7769 +0x776A +0x776B +0x776C +0x776D +0x776E +0x776F +0x7779 +0x777C +0x777D +0x777E +0x777F +0x7780 +0x7781 +0x7782 +0x7783 +0x7784 +0x7785 +0x7787 +0x7788 +0x7789 +0x778B +0x778C +0x778D +0x778E +0x778F +0x7791 +0x7795 +0x7797 +0x7799 +0x779A +0x779B +0x779C +0x779D +0x779E +0x779F +0x77A0 +0x77A1 +0x77A2 +0x77A3 +0x77A5 +0x77A7 +0x77A8 +0x77AA +0x77AB +0x77AC +0x77AD +0x77B0 +0x77B1 +0x77B2 +0x77B3 +0x77B4 +0x77B5 +0x77B6 +0x77B7 +0x77BA +0x77BB +0x77BC +0x77BD +0x77BF +0x77C2 +0x77C4 +0x77C7 +0x77C9 +0x77CA +0x77CC +0x77CD +0x77CE +0x77CF +0x77D0 +0x77D3 +0x77D4 +0x77D5 +0x77D7 +0x77D8 +0x77D9 +0x77DA +0x77DB +0x77DC +0x77DE +0x77E0 +0x77E2 +0x77E3 +0x77E5 +0x77E7 +0x77E8 +0x77E9 +0x77EC +0x77ED +0x77EE +0x77EF +0x77F0 +0x77F1 +0x77F2 +0x77F3 +0x77F7 +0x77F8 +0x77F9 +0x77FA +0x77FB +0x77FC +0x77FD +0x7802 +0x7803 +0x7805 +0x7806 +0x7809 +0x780C +0x780D +0x780E +0x780F +0x7810 +0x7811 +0x7812 +0x7813 +0x7814 +0x781D +0x781F +0x7820 +0x7821 +0x7822 +0x7823 +0x7825 +0x7826 +0x7827 +0x7828 +0x7829 +0x782A +0x782B +0x782C +0x782D +0x782E +0x782F +0x7830 +0x7831 +0x7832 +0x7833 +0x7834 +0x7835 +0x7837 +0x7838 +0x7843 +0x7845 +0x7848 +0x7849 +0x784A +0x784C +0x784D +0x784E +0x7850 +0x7852 +0x785C +0x785D +0x785E +0x7860 +0x7862 +0x7864 +0x7865 +0x7868 +0x7869 +0x786A +0x786B +0x786C +0x786D +0x786E +0x786F +0x7870 +0x7871 +0x7879 +0x787B +0x787C +0x787E +0x787F +0x7880 +0x7883 +0x7884 +0x7885 +0x7886 +0x7887 +0x7889 +0x788C +0x788E +0x788F +0x7891 +0x7893 +0x7894 +0x7895 +0x7896 +0x7897 +0x7898 +0x7899 +0x789A +0x789E +0x789F +0x78A0 +0x78A1 +0x78A2 +0x78A3 +0x78A4 +0x78A5 +0x78A7 +0x78A8 +0x78A9 +0x78AA +0x78AB +0x78AC +0x78AD +0x78B0 +0x78B2 +0x78B3 +0x78B4 +0x78BA +0x78BB +0x78BC +0x78BE +0x78C1 +0x78C3 +0x78C4 +0x78C5 +0x78C8 +0x78C9 +0x78CA +0x78CB +0x78CC +0x78CD +0x78CE +0x78CF +0x78D0 +0x78D1 +0x78D4 +0x78D5 +0x78DA +0x78DB +0x78DD +0x78DE +0x78DF +0x78E0 +0x78E1 +0x78E2 +0x78E3 +0x78E5 +0x78E7 +0x78E8 +0x78E9 +0x78EA +0x78EC +0x78ED +0x78EF +0x78F2 +0x78F3 +0x78F4 +0x78F7 +0x78F9 +0x78FA +0x78FB +0x78FC +0x78FD +0x78FE +0x78FF +0x7901 +0x7902 +0x7904 +0x7905 +0x7909 +0x790C +0x790E +0x7910 +0x7911 +0x7912 +0x7913 +0x7914 +0x7917 +0x7919 +0x791B +0x791C +0x791D +0x791E +0x7921 +0x7923 +0x7924 +0x7925 +0x7926 +0x7927 +0x7928 +0x7929 +0x792A +0x792B +0x792C +0x792D +0x792F +0x7931 +0x7935 +0x7938 +0x7939 +0x793A +0x793D +0x793E +0x793F +0x7940 +0x7941 +0x7942 +0x7944 +0x7945 +0x7946 +0x7947 +0x7948 +0x7949 +0x794A +0x794B +0x794C +0x794F +0x7950 +0x7951 +0x7952 +0x7953 +0x7954 +0x7955 +0x7956 +0x7957 +0x795A +0x795B +0x795C +0x795D +0x795E +0x795F +0x7960 +0x7961 +0x7963 +0x7964 +0x7965 +0x7967 +0x7968 +0x7969 +0x796A +0x796B +0x796D +0x7970 +0x7972 +0x7973 +0x7974 +0x7979 +0x797A +0x797C +0x797D +0x797F +0x7981 +0x7982 +0x7988 +0x798A +0x798B +0x798D +0x798E +0x798F +0x7990 +0x7992 +0x7993 +0x7994 +0x7995 +0x7996 +0x7997 +0x7998 +0x799A +0x799B +0x799C +0x79A0 +0x79A1 +0x79A2 +0x79A4 +0x79A6 +0x79A7 +0x79A8 +0x79AA +0x79AB +0x79AC +0x79AD +0x79AE +0x79B0 +0x79B1 +0x79B2 +0x79B3 +0x79B4 +0x79B6 +0x79B7 +0x79B8 +0x79B9 +0x79BA +0x79BB +0x79BD +0x79BE +0x79BF +0x79C0 +0x79C1 +0x79C5 +0x79C8 +0x79C9 +0x79CB +0x79CD +0x79CE +0x79CF +0x79D1 +0x79D2 +0x79D5 +0x79D6 +0x79D8 +0x79DC +0x79DD +0x79DE +0x79DF +0x79E0 +0x79E3 +0x79E4 +0x79E6 +0x79E7 +0x79E9 +0x79EA +0x79EB +0x79EC +0x79ED +0x79EE +0x79F6 +0x79F7 +0x79F8 +0x79FA +0x79FB +0x7A00 +0x7A02 +0x7A03 +0x7A04 +0x7A05 +0x7A08 +0x7A0A +0x7A0B +0x7A0C +0x7A0D +0x7A10 +0x7A11 +0x7A12 +0x7A13 +0x7A14 +0x7A15 +0x7A17 +0x7A18 +0x7A19 +0x7A1A +0x7A1B +0x7A1C +0x7A1E +0x7A1F +0x7A20 +0x7A22 +0x7A26 +0x7A28 +0x7A2B +0x7A2E +0x7A2F +0x7A30 +0x7A31 +0x7A37 +0x7A39 +0x7A3B +0x7A3C +0x7A3D +0x7A3F +0x7A40 +0x7A44 +0x7A46 +0x7A47 +0x7A48 +0x7A4A +0x7A4B +0x7A4C +0x7A4D +0x7A4E +0x7A54 +0x7A56 +0x7A57 +0x7A58 +0x7A5A +0x7A5B +0x7A5C +0x7A5F +0x7A60 +0x7A61 +0x7A62 +0x7A67 +0x7A68 +0x7A69 +0x7A6B +0x7A6C +0x7A6D +0x7A6E +0x7A70 +0x7A71 +0x7A74 +0x7A75 +0x7A76 +0x7A78 +0x7A79 +0x7A7A +0x7A7B +0x7A7E +0x7A7F +0x7A80 +0x7A81 +0x7A84 +0x7A85 +0x7A86 +0x7A87 +0x7A88 +0x7A89 +0x7A8A +0x7A8B +0x7A8C +0x7A8F +0x7A90 +0x7A92 +0x7A94 +0x7A95 +0x7A96 +0x7A97 +0x7A98 +0x7A99 +0x7A9E +0x7A9F +0x7AA0 +0x7AA2 +0x7AA3 +0x7AA8 +0x7AA9 +0x7AAA +0x7AAB +0x7AAC +0x7AAE +0x7AAF +0x7AB1 +0x7AB2 +0x7AB3 +0x7AB4 +0x7AB5 +0x7AB6 +0x7AB7 +0x7AB8 +0x7ABA +0x7ABE +0x7ABF +0x7AC0 +0x7AC1 +0x7AC4 +0x7AC5 +0x7AC7 +0x7ACA +0x7ACB +0x7AD1 +0x7AD8 +0x7AD9 +0x7ADF +0x7AE0 +0x7AE3 +0x7AE4 +0x7AE5 +0x7AE6 +0x7AEB +0x7AED +0x7AEE +0x7AEF +0x7AF6 +0x7AF7 +0x7AF9 +0x7AFA +0x7AFB +0x7AFD +0x7AFF +0x7B00 +0x7B01 +0x7B04 +0x7B05 +0x7B06 +0x7B08 +0x7B09 +0x7B0A +0x7B0E +0x7B0F +0x7B10 +0x7B11 +0x7B12 +0x7B13 +0x7B18 +0x7B19 +0x7B1A +0x7B1B +0x7B1D +0x7B1E +0x7B20 +0x7B22 +0x7B23 +0x7B24 +0x7B25 +0x7B26 +0x7B28 +0x7B2A +0x7B2B +0x7B2C +0x7B2D +0x7B2E +0x7B2F +0x7B30 +0x7B31 +0x7B32 +0x7B33 +0x7B34 +0x7B35 +0x7B38 +0x7B3B +0x7B40 +0x7B44 +0x7B45 +0x7B46 +0x7B47 +0x7B48 +0x7B49 +0x7B4A +0x7B4B +0x7B4C +0x7B4D +0x7B4E +0x7B4F +0x7B50 +0x7B51 +0x7B52 +0x7B54 +0x7B56 +0x7B58 +0x7B60 +0x7B61 +0x7B63 +0x7B64 +0x7B65 +0x7B66 +0x7B67 +0x7B69 +0x7B6D +0x7B6E +0x7B70 +0x7B71 +0x7B72 +0x7B73 +0x7B74 +0x7B75 +0x7B76 +0x7B77 +0x7B78 +0x7B82 +0x7B84 +0x7B85 +0x7B87 +0x7B88 +0x7B8A +0x7B8B +0x7B8C +0x7B8D +0x7B8E +0x7B8F +0x7B90 +0x7B91 +0x7B94 +0x7B95 +0x7B96 +0x7B97 +0x7B98 +0x7B99 +0x7B9B +0x7B9C +0x7B9D +0x7BA0 +0x7BA1 +0x7BA4 +0x7BAC +0x7BAD +0x7BAF +0x7BB1 +0x7BB4 +0x7BB5 +0x7BB7 +0x7BB8 +0x7BB9 +0x7BBE +0x7BC0 +0x7BC1 +0x7BC4 +0x7BC6 +0x7BC7 +0x7BC9 +0x7BCA +0x7BCB +0x7BCC +0x7BCE +0x7BD4 +0x7BD5 +0x7BD8 +0x7BD9 +0x7BDA +0x7BDB +0x7BDC +0x7BDD +0x7BDE +0x7BDF +0x7BE0 +0x7BE1 +0x7BE2 +0x7BE3 +0x7BE4 +0x7BE5 +0x7BE6 +0x7BE7 +0x7BE8 +0x7BE9 +0x7BEA +0x7BEB +0x7BF0 +0x7BF1 +0x7BF2 +0x7BF3 +0x7BF4 +0x7BF7 +0x7BF8 +0x7BF9 +0x7BFB +0x7BFD +0x7BFE +0x7BFF +0x7C00 +0x7C01 +0x7C02 +0x7C03 +0x7C05 +0x7C06 +0x7C07 +0x7C09 +0x7C0A +0x7C0B +0x7C0C +0x7C0D +0x7C0E +0x7C0F +0x7C10 +0x7C11 +0x7C19 +0x7C1C +0x7C1D +0x7C1E +0x7C1F +0x7C20 +0x7C21 +0x7C22 +0x7C23 +0x7C25 +0x7C26 +0x7C27 +0x7C28 +0x7C29 +0x7C2A +0x7C2B +0x7C2C +0x7C2D +0x7C30 +0x7C33 +0x7C37 +0x7C38 +0x7C39 +0x7C3B +0x7C3C +0x7C3D +0x7C3E +0x7C3F +0x7C40 +0x7C43 +0x7C45 +0x7C47 +0x7C48 +0x7C49 +0x7C4A +0x7C4C +0x7C4D +0x7C50 +0x7C53 +0x7C54 +0x7C57 +0x7C59 +0x7C5A +0x7C5B +0x7C5C +0x7C5F +0x7C60 +0x7C63 +0x7C64 +0x7C65 +0x7C66 +0x7C67 +0x7C69 +0x7C6A +0x7C6B +0x7C6C +0x7C6E +0x7C6F +0x7C72 +0x7C73 +0x7C75 +0x7C78 +0x7C79 +0x7C7A +0x7C7D +0x7C7F +0x7C80 +0x7C81 +0x7C84 +0x7C85 +0x7C88 +0x7C89 +0x7C8A +0x7C8C +0x7C8D +0x7C91 +0x7C92 +0x7C94 +0x7C95 +0x7C96 +0x7C97 +0x7C98 +0x7C9E +0x7C9F +0x7CA1 +0x7CA2 +0x7CA3 +0x7CA5 +0x7CA8 +0x7CAF +0x7CB1 +0x7CB2 +0x7CB3 +0x7CB4 +0x7CB5 +0x7CB9 +0x7CBA +0x7CBB +0x7CBC +0x7CBD +0x7CBE +0x7CBF +0x7CC5 +0x7CC8 +0x7CCA +0x7CCB +0x7CCC +0x7CCE +0x7CD0 +0x7CD1 +0x7CD2 +0x7CD4 +0x7CD5 +0x7CD6 +0x7CD7 +0x7CD9 +0x7CDC +0x7CDD +0x7CDE +0x7CDF +0x7CE0 +0x7CE2 +0x7CE7 +0x7CE8 +0x7CEA +0x7CEC +0x7CEE +0x7CEF +0x7CF0 +0x7CF1 +0x7CF2 +0x7CF4 +0x7CF6 +0x7CF7 +0x7CF8 +0x7CFB +0x7CFD +0x7CFE +0x7D00 +0x7D01 +0x7D02 +0x7D03 +0x7D04 +0x7D05 +0x7D06 +0x7D07 +0x7D08 +0x7D09 +0x7D0A +0x7D0B +0x7D0C +0x7D0D +0x7D0E +0x7D0F +0x7D10 +0x7D11 +0x7D12 +0x7D13 +0x7D14 +0x7D15 +0x7D16 +0x7D17 +0x7D18 +0x7D19 +0x7D1A +0x7D1B +0x7D1C +0x7D1D +0x7D1E +0x7D1F +0x7D20 +0x7D21 +0x7D22 +0x7D28 +0x7D29 +0x7D2B +0x7D2C +0x7D2E +0x7D2F +0x7D30 +0x7D31 +0x7D32 +0x7D33 +0x7D35 +0x7D36 +0x7D38 +0x7D39 +0x7D3A +0x7D3B +0x7D3C +0x7D3D +0x7D3E +0x7D3F +0x7D40 +0x7D41 +0x7D42 +0x7D43 +0x7D44 +0x7D45 +0x7D46 +0x7D47 +0x7D4A +0x7D4E +0x7D4F +0x7D50 +0x7D51 +0x7D52 +0x7D53 +0x7D54 +0x7D55 +0x7D56 +0x7D58 +0x7D5B +0x7D5C +0x7D5E +0x7D5F +0x7D61 +0x7D62 +0x7D63 +0x7D66 +0x7D67 +0x7D68 +0x7D69 +0x7D6A +0x7D6B +0x7D6D +0x7D6E +0x7D6F +0x7D70 +0x7D71 +0x7D72 +0x7D73 +0x7D79 +0x7D7A +0x7D7B +0x7D7C +0x7D7D +0x7D7F +0x7D80 +0x7D81 +0x7D83 +0x7D84 +0x7D85 +0x7D86 +0x7D88 +0x7D8C +0x7D8D +0x7D8E +0x7D8F +0x7D91 +0x7D92 +0x7D93 +0x7D94 +0x7D96 +0x7D9C +0x7D9D +0x7D9E +0x7D9F +0x7DA0 +0x7DA1 +0x7DA2 +0x7DA3 +0x7DA6 +0x7DA7 +0x7DA9 +0x7DAA +0x7DAC +0x7DAD +0x7DAE +0x7DAF +0x7DB0 +0x7DB1 +0x7DB2 +0x7DB4 +0x7DB5 +0x7DB7 +0x7DB8 +0x7DB9 +0x7DBA +0x7DBB +0x7DBC +0x7DBD +0x7DBE +0x7DBF +0x7DC0 +0x7DC1 +0x7DC2 +0x7DC4 +0x7DC5 +0x7DC6 +0x7DC7 +0x7DC9 +0x7DCA +0x7DCB +0x7DCC +0x7DCE +0x7DD2 +0x7DD7 +0x7DD8 +0x7DD9 +0x7DDA +0x7DDB +0x7DDD +0x7DDE +0x7DDF +0x7DE0 +0x7DE1 +0x7DE3 +0x7DE6 +0x7DE7 +0x7DE8 +0x7DE9 +0x7DEA +0x7DEC +0x7DEE +0x7DEF +0x7DF0 +0x7DF1 +0x7DF2 +0x7DF3 +0x7DF4 +0x7DF6 +0x7DF7 +0x7DF9 +0x7DFA +0x7DFB +0x7E03 +0x7E08 +0x7E09 +0x7E0A +0x7E0B +0x7E0C +0x7E0D +0x7E0E +0x7E0F +0x7E10 +0x7E11 +0x7E12 +0x7E13 +0x7E14 +0x7E15 +0x7E16 +0x7E17 +0x7E1A +0x7E1B +0x7E1C +0x7E1D +0x7E1E +0x7E1F +0x7E20 +0x7E21 +0x7E22 +0x7E23 +0x7E24 +0x7E25 +0x7E29 +0x7E2A +0x7E2B +0x7E2D +0x7E2E +0x7E2F +0x7E30 +0x7E31 +0x7E32 +0x7E33 +0x7E34 +0x7E35 +0x7E36 +0x7E37 +0x7E38 +0x7E39 +0x7E3A +0x7E3B +0x7E3C +0x7E3D +0x7E3E +0x7E3F +0x7E40 +0x7E41 +0x7E42 +0x7E43 +0x7E44 +0x7E45 +0x7E46 +0x7E47 +0x7E48 +0x7E49 +0x7E4C +0x7E50 +0x7E51 +0x7E52 +0x7E53 +0x7E54 +0x7E55 +0x7E56 +0x7E57 +0x7E58 +0x7E59 +0x7E5A +0x7E5C +0x7E5E +0x7E5F +0x7E60 +0x7E61 +0x7E62 +0x7E63 +0x7E68 +0x7E69 +0x7E6A +0x7E6B +0x7E6D +0x7E6F +0x7E70 +0x7E72 +0x7E73 +0x7E74 +0x7E75 +0x7E76 +0x7E77 +0x7E78 +0x7E79 +0x7E7A +0x7E7B +0x7E7C +0x7E7D +0x7E7E +0x7E80 +0x7E81 +0x7E82 +0x7E86 +0x7E87 +0x7E88 +0x7E8A +0x7E8B +0x7E8C +0x7E8D +0x7E8F +0x7E91 +0x7E93 +0x7E94 +0x7E95 +0x7E96 +0x7E97 +0x7E98 +0x7E99 +0x7E9A +0x7E9B +0x7E9C +0x7F36 +0x7F38 +0x7F39 +0x7F3A +0x7F3D +0x7F3E +0x7F3F +0x7F43 +0x7F44 +0x7F45 +0x7F48 +0x7F4A +0x7F4B +0x7F4C +0x7F4D +0x7F4F +0x7F50 +0x7F51 +0x7F54 +0x7F55 +0x7F58 +0x7F5B +0x7F5C +0x7F5D +0x7F5E +0x7F5F +0x7F60 +0x7F61 +0x7F63 +0x7F65 +0x7F66 +0x7F67 +0x7F68 +0x7F69 +0x7F6A +0x7F6B +0x7F6C +0x7F6D +0x7F6E +0x7F70 +0x7F72 +0x7F73 +0x7F75 +0x7F76 +0x7F77 +0x7F79 +0x7F7A +0x7F7B +0x7F7C +0x7F7D +0x7F7E +0x7F7F +0x7F83 +0x7F85 +0x7F86 +0x7F87 +0x7F88 +0x7F89 +0x7F8A +0x7F8B +0x7F8C +0x7F8D +0x7F8E +0x7F91 +0x7F92 +0x7F94 +0x7F95 +0x7F96 +0x7F9A +0x7F9B +0x7F9C +0x7F9D +0x7F9E +0x7FA0 +0x7FA1 +0x7FA2 +0x7FA4 +0x7FA5 +0x7FA6 +0x7FA7 +0x7FA8 +0x7FA9 +0x7FAC +0x7FAD +0x7FAF +0x7FB0 +0x7FB1 +0x7FB2 +0x7FB3 +0x7FB5 +0x7FB6 +0x7FB7 +0x7FB8 +0x7FB9 +0x7FBA +0x7FBB +0x7FBC +0x7FBD +0x7FBE +0x7FBF +0x7FC0 +0x7FC1 +0x7FC2 +0x7FC3 +0x7FC5 +0x7FC7 +0x7FC9 +0x7FCA +0x7FCB +0x7FCC +0x7FCD +0x7FCE +0x7FCF +0x7FD0 +0x7FD1 +0x7FD2 +0x7FD4 +0x7FD5 +0x7FD7 +0x7FDB +0x7FDC +0x7FDE +0x7FDF +0x7FE0 +0x7FE1 +0x7FE2 +0x7FE3 +0x7FE5 +0x7FE6 +0x7FE8 +0x7FE9 +0x7FEA +0x7FEB +0x7FEC +0x7FED +0x7FEE +0x7FEF +0x7FF0 +0x7FF1 +0x7FF2 +0x7FF3 +0x7FF4 +0x7FF5 +0x7FF7 +0x7FF8 +0x7FF9 +0x7FFB +0x7FFC +0x7FFD +0x7FFE +0x7FFF +0x8000 +0x8001 +0x8003 +0x8004 +0x8005 +0x8006 +0x8007 +0x800B +0x800C +0x800D +0x800E +0x800F +0x8010 +0x8011 +0x8012 +0x8014 +0x8015 +0x8016 +0x8017 +0x8018 +0x8019 +0x801B +0x801C +0x801E +0x801F +0x8021 +0x8024 +0x8026 +0x8028 +0x8029 +0x802A +0x802C +0x8030 +0x8033 +0x8034 +0x8035 +0x8036 +0x8037 +0x8039 +0x803D +0x803E +0x803F +0x8043 +0x8046 +0x8047 +0x8048 +0x804A +0x804F +0x8050 +0x8051 +0x8052 +0x8056 +0x8058 +0x805A +0x805C +0x805D +0x805E +0x8064 +0x8067 +0x806C +0x806F +0x8070 +0x8071 +0x8072 +0x8073 +0x8075 +0x8076 +0x8077 +0x8078 +0x8079 +0x807D +0x807E +0x807F +0x8082 +0x8084 +0x8085 +0x8086 +0x8087 +0x8089 +0x808A +0x808B +0x808C +0x808F +0x8090 +0x8092 +0x8093 +0x8095 +0x8096 +0x8098 +0x8099 +0x809A +0x809B +0x809C +0x809D +0x80A1 +0x80A2 +0x80A3 +0x80A5 +0x80A9 +0x80AA +0x80AB +0x80AD +0x80AE +0x80AF +0x80B1 +0x80B2 +0x80B4 +0x80B5 +0x80B8 +0x80BA +0x80C2 +0x80C3 +0x80C4 +0x80C5 +0x80C7 +0x80C8 +0x80C9 +0x80CA +0x80CC +0x80CD +0x80CE +0x80CF +0x80D0 +0x80D1 +0x80D4 +0x80D5 +0x80D6 +0x80D7 +0x80D8 +0x80D9 +0x80DA +0x80DB +0x80DC +0x80DD +0x80DE +0x80E0 +0x80E1 +0x80E3 +0x80E4 +0x80E5 +0x80E6 +0x80ED +0x80EF +0x80F0 +0x80F1 +0x80F2 +0x80F3 +0x80F4 +0x80F5 +0x80F8 +0x80F9 +0x80FA +0x80FB +0x80FC +0x80FD +0x80FE +0x8100 +0x8101 +0x8102 +0x8105 +0x8106 +0x8108 +0x810A +0x8115 +0x8116 +0x8118 +0x8119 +0x811B +0x811D +0x811E +0x811F +0x8121 +0x8122 +0x8123 +0x8124 +0x8125 +0x8127 +0x8129 +0x812B +0x812C +0x812D +0x812F +0x8130 +0x8139 +0x813A +0x813D +0x813E +0x8143 +0x8144 +0x8146 +0x8147 +0x814A +0x814B +0x814C +0x814D +0x814E +0x814F +0x8150 +0x8151 +0x8152 +0x8153 +0x8154 +0x8155 +0x815B +0x815C +0x815E +0x8160 +0x8161 +0x8162 +0x8164 +0x8165 +0x8166 +0x8167 +0x8169 +0x816B +0x816E +0x816F +0x8170 +0x8171 +0x8172 +0x8173 +0x8174 +0x8176 +0x8177 +0x8178 +0x8179 +0x817A +0x817F +0x8180 +0x8182 +0x8183 +0x8186 +0x8187 +0x8188 +0x8189 +0x818A +0x818B +0x818C +0x818D +0x818F +0x8195 +0x8197 +0x8198 +0x8199 +0x819A +0x819B +0x819C +0x819D +0x819E +0x819F +0x81A0 +0x81A2 +0x81A3 +0x81A6 +0x81A7 +0x81A8 +0x81A9 +0x81AB +0x81AC +0x81AE +0x81B0 +0x81B1 +0x81B2 +0x81B3 +0x81B4 +0x81B5 +0x81B7 +0x81B9 +0x81BA +0x81BB +0x81BC +0x81BD +0x81BE +0x81BF +0x81C0 +0x81C2 +0x81C3 +0x81C4 +0x81C5 +0x81C6 +0x81C7 +0x81C9 +0x81CA +0x81CC +0x81CD +0x81CF +0x81D0 +0x81D1 +0x81D2 +0x81D5 +0x81D7 +0x81D8 +0x81D9 +0x81DA +0x81DB +0x81DD +0x81DE +0x81DF +0x81E0 +0x81E1 +0x81E2 +0x81E3 +0x81E5 +0x81E6 +0x81E7 +0x81E8 +0x81E9 +0x81EA +0x81EC +0x81ED +0x81EE +0x81F2 +0x81F3 +0x81F4 +0x81F7 +0x81F8 +0x81F9 +0x81FA +0x81FB +0x81FC +0x81FE +0x81FF +0x8200 +0x8201 +0x8202 +0x8204 +0x8205 +0x8207 +0x8208 +0x8209 +0x820A +0x820B +0x820C +0x820D +0x8210 +0x8211 +0x8212 +0x8214 +0x8215 +0x8216 +0x821B +0x821C +0x821D +0x821E +0x821F +0x8220 +0x8221 +0x8222 +0x8225 +0x8228 +0x822A +0x822B +0x822C +0x822F +0x8232 +0x8233 +0x8234 +0x8235 +0x8236 +0x8237 +0x8238 +0x8239 +0x823A +0x823C +0x823D +0x823F +0x8240 +0x8242 +0x8244 +0x8245 +0x8247 +0x8249 +0x824B +0x824E +0x824F +0x8250 +0x8251 +0x8252 +0x8253 +0x8255 +0x8256 +0x8257 +0x8258 +0x8259 +0x825A +0x825B +0x825C +0x825E +0x825F +0x8261 +0x8263 +0x8264 +0x8266 +0x8268 +0x8269 +0x826B +0x826C +0x826D +0x826E +0x826F +0x8271 +0x8272 +0x8274 +0x8275 +0x8277 +0x8278 +0x827C +0x827D +0x827E +0x827F +0x8280 +0x8283 +0x8284 +0x8285 +0x828A +0x828B +0x828D +0x828E +0x828F +0x8290 +0x8291 +0x8292 +0x8293 +0x8294 +0x8298 +0x8299 +0x829A +0x829B +0x829D +0x829E +0x829F +0x82A0 +0x82A1 +0x82A2 +0x82A3 +0x82A4 +0x82A5 +0x82A7 +0x82A8 +0x82A9 +0x82AB +0x82AC +0x82AD +0x82AE +0x82AF +0x82B0 +0x82B1 +0x82B3 +0x82B4 +0x82B5 +0x82B6 +0x82B7 +0x82B8 +0x82B9 +0x82BA +0x82BB +0x82BC +0x82BD +0x82BE +0x82C0 +0x82C2 +0x82C3 +0x82D1 +0x82D2 +0x82D3 +0x82D4 +0x82D5 +0x82D6 +0x82D7 +0x82D9 +0x82DB +0x82DC +0x82DE +0x82DF +0x82E0 +0x82E1 +0x82E3 +0x82E4 +0x82E5 +0x82E6 +0x82E7 +0x82E8 +0x82EA +0x82EB +0x82EC +0x82ED +0x82EF +0x82F0 +0x82F1 +0x82F2 +0x82F3 +0x82F4 +0x82F5 +0x82F6 +0x82F9 +0x82FA +0x82FB +0x82FE +0x8300 +0x8301 +0x8302 +0x8303 +0x8304 +0x8305 +0x8306 +0x8307 +0x8308 +0x8309 +0x830C +0x830D +0x8316 +0x8317 +0x8319 +0x831B +0x831C +0x831E +0x8320 +0x8322 +0x8324 +0x8325 +0x8326 +0x8327 +0x8328 +0x8329 +0x832A +0x832B +0x832C +0x832D +0x832F +0x8331 +0x8332 +0x8333 +0x8334 +0x8335 +0x8336 +0x8337 +0x8338 +0x8339 +0x833A +0x833B +0x833C +0x833F +0x8340 +0x8341 +0x8342 +0x8343 +0x8344 +0x8345 +0x8347 +0x8348 +0x8349 +0x834A +0x834B +0x834C +0x834D +0x834E +0x834F +0x8350 +0x8351 +0x8352 +0x8353 +0x8354 +0x8356 +0x8373 +0x8374 +0x8375 +0x8376 +0x8377 +0x8378 +0x837A +0x837B +0x837C +0x837D +0x837E +0x837F +0x8381 +0x8383 +0x8386 +0x8387 +0x8388 +0x8389 +0x838A +0x838B +0x838C +0x838D +0x838E +0x838F +0x8390 +0x8392 +0x8393 +0x8394 +0x8395 +0x8396 +0x8397 +0x8398 +0x8399 +0x839A +0x839B +0x839D +0x839E +0x83A0 +0x83A2 +0x83A3 +0x83A4 +0x83A5 +0x83A6 +0x83A7 +0x83A8 +0x83A9 +0x83AA +0x83AB +0x83AE +0x83AF +0x83B0 +0x83BD +0x83BF +0x83C0 +0x83C1 +0x83C2 +0x83C3 +0x83C4 +0x83C5 +0x83C6 +0x83C7 +0x83C8 +0x83C9 +0x83CA +0x83CB +0x83CC +0x83CE +0x83CF +0x83D1 +0x83D4 +0x83D5 +0x83D6 +0x83D7 +0x83D8 +0x83D9 +0x83DB +0x83DC +0x83DD +0x83DE +0x83DF +0x83E0 +0x83E1 +0x83E2 +0x83E3 +0x83E4 +0x83E5 +0x83E7 +0x83E8 +0x83E9 +0x83EA +0x83EB +0x83EC +0x83EE +0x83EF +0x83F0 +0x83F1 +0x83F2 +0x83F3 +0x83F4 +0x83F5 +0x83F6 +0x83F8 +0x83F9 +0x83FA +0x83FB +0x83FC +0x83FD +0x83FE +0x83FF +0x8401 +0x8403 +0x8404 +0x8406 +0x8407 +0x8409 +0x840A +0x840B +0x840C +0x840D +0x840E +0x840F +0x8410 +0x8411 +0x8412 +0x8413 +0x841B +0x8423 +0x8429 +0x842B +0x842C +0x842D +0x842F +0x8430 +0x8431 +0x8432 +0x8433 +0x8434 +0x8435 +0x8436 +0x8437 +0x8438 +0x8439 +0x843A +0x843B +0x843C +0x843D +0x843F +0x8440 +0x8442 +0x8443 +0x8444 +0x8445 +0x8446 +0x8447 +0x8449 +0x844B +0x844C +0x844D +0x844E +0x8450 +0x8451 +0x8452 +0x8454 +0x8456 +0x8457 +0x8459 +0x845A +0x845B +0x845D +0x845E +0x845F +0x8460 +0x8461 +0x8463 +0x8465 +0x8466 +0x8467 +0x8468 +0x8469 +0x846B +0x846C +0x846D +0x846E +0x846F +0x8470 +0x8473 +0x8474 +0x8475 +0x8476 +0x8477 +0x8478 +0x8479 +0x847A +0x847D +0x847E +0x8482 +0x8486 +0x848D +0x848E +0x848F +0x8490 +0x8491 +0x8494 +0x8497 +0x8498 +0x8499 +0x849A +0x849B +0x849C +0x849D +0x849E +0x849F +0x84A0 +0x84A1 +0x84A2 +0x84A4 +0x84A7 +0x84A8 +0x84A9 +0x84AA +0x84AB +0x84AC +0x84AE +0x84AF +0x84B0 +0x84B1 +0x84B2 +0x84B4 +0x84B6 +0x84B8 +0x84B9 +0x84BA +0x84BB +0x84BC +0x84BF +0x84C0 +0x84C1 +0x84C2 +0x84C4 +0x84C5 +0x84C6 +0x84C7 +0x84C9 +0x84CA +0x84CB +0x84CC +0x84CD +0x84CE +0x84CF +0x84D0 +0x84D1 +0x84D2 +0x84D3 +0x84D4 +0x84D6 +0x84D7 +0x84DB +0x84E7 +0x84E8 +0x84E9 +0x84EA +0x84EB +0x84EC +0x84EE +0x84EF +0x84F0 +0x84F1 +0x84F2 +0x84F3 +0x84F4 +0x84F6 +0x84F7 +0x84F9 +0x84FA +0x84FB +0x84FC +0x84FD +0x84FE +0x84FF +0x8500 +0x8502 +0x8506 +0x8507 +0x8508 +0x8509 +0x850A +0x850B +0x850C +0x850D +0x850E +0x850F +0x8511 +0x8512 +0x8513 +0x8514 +0x8515 +0x8516 +0x8517 +0x8518 +0x8519 +0x851A +0x851C +0x851D +0x851E +0x851F +0x8520 +0x8521 +0x8523 +0x8524 +0x8525 +0x8526 +0x8527 +0x8528 +0x8529 +0x852A +0x852B +0x852C +0x852D +0x852E +0x852F +0x8530 +0x8531 +0x853B +0x853D +0x853E +0x8540 +0x8541 +0x8543 +0x8544 +0x8545 +0x8546 +0x8547 +0x8548 +0x8549 +0x854A +0x854D +0x854E +0x8551 +0x8553 +0x8554 +0x8555 +0x8556 +0x8557 +0x8558 +0x8559 +0x855B +0x855D +0x855E +0x8560 +0x8561 +0x8562 +0x8563 +0x8564 +0x8565 +0x8566 +0x8567 +0x8568 +0x8569 +0x856A +0x856B +0x856C +0x856D +0x856E +0x8571 +0x8575 +0x8576 +0x8577 +0x8578 +0x8579 +0x857A +0x857B +0x857C +0x857E +0x8580 +0x8581 +0x8582 +0x8583 +0x8584 +0x8585 +0x8586 +0x8587 +0x8588 +0x8589 +0x858A +0x858B +0x858C +0x858D +0x858E +0x858F +0x8590 +0x8591 +0x8594 +0x8595 +0x8596 +0x8598 +0x8599 +0x859A +0x859B +0x859C +0x859D +0x859E +0x859F +0x85A0 +0x85A1 +0x85A2 +0x85A3 +0x85A4 +0x85A6 +0x85A7 +0x85A8 +0x85A9 +0x85AA +0x85AF +0x85B0 +0x85B1 +0x85B3 +0x85B4 +0x85B5 +0x85B6 +0x85B7 +0x85B8 +0x85B9 +0x85BA +0x85BD +0x85BE +0x85BF +0x85C0 +0x85C2 +0x85C3 +0x85C4 +0x85C5 +0x85C6 +0x85C7 +0x85C8 +0x85C9 +0x85CB +0x85CD +0x85CE +0x85CF +0x85D0 +0x85D1 +0x85D2 +0x85D5 +0x85D7 +0x85D8 +0x85D9 +0x85DA +0x85DC +0x85DD +0x85DE +0x85DF +0x85E1 +0x85E2 +0x85E3 +0x85E4 +0x85E5 +0x85E6 +0x85E8 +0x85E9 +0x85EA +0x85EB +0x85EC +0x85ED +0x85EF +0x85F0 +0x85F1 +0x85F2 +0x85F6 +0x85F7 +0x85F8 +0x85F9 +0x85FA +0x85FB +0x85FD +0x85FE +0x85FF +0x8600 +0x8601 +0x8604 +0x8605 +0x8606 +0x8607 +0x8609 +0x860A +0x860B +0x860C +0x8611 +0x8617 +0x8618 +0x8619 +0x861A +0x861B +0x861C +0x861E +0x861F +0x8620 +0x8621 +0x8622 +0x8623 +0x8624 +0x8625 +0x8626 +0x8627 +0x8629 +0x862A +0x862C +0x862D +0x862E +0x8631 +0x8632 +0x8633 +0x8634 +0x8635 +0x8636 +0x8638 +0x8639 +0x863A +0x863B +0x863C +0x863E +0x863F +0x8640 +0x8643 +0x8646 +0x8647 +0x8648 +0x864B +0x864C +0x864D +0x864E +0x8650 +0x8652 +0x8653 +0x8654 +0x8655 +0x8656 +0x8659 +0x865B +0x865C +0x865E +0x865F +0x8661 +0x8662 +0x8663 +0x8664 +0x8665 +0x8667 +0x8668 +0x8669 +0x866A +0x866B +0x866D +0x866E +0x866F +0x8670 +0x8671 +0x8673 +0x8674 +0x8677 +0x8679 +0x867A +0x867B +0x867C +0x8685 +0x8686 +0x8687 +0x868A +0x868B +0x868C +0x868D +0x868E +0x8690 +0x8691 +0x8693 +0x8694 +0x8695 +0x8696 +0x8697 +0x8698 +0x8699 +0x869A +0x869C +0x869D +0x869E +0x86A1 +0x86A2 +0x86A3 +0x86A4 +0x86A5 +0x86A7 +0x86A8 +0x86A9 +0x86AA +0x86AF +0x86B0 +0x86B1 +0x86B3 +0x86B4 +0x86B5 +0x86B6 +0x86B7 +0x86B8 +0x86B9 +0x86BA +0x86BB +0x86BC +0x86BD +0x86BE +0x86BF +0x86C0 +0x86C1 +0x86C2 +0x86C3 +0x86C4 +0x86C5 +0x86C6 +0x86C7 +0x86C8 +0x86C9 +0x86CB +0x86CC +0x86D0 +0x86D1 +0x86D3 +0x86D4 +0x86D6 +0x86D7 +0x86D8 +0x86D9 +0x86DA +0x86DB +0x86DC +0x86DD +0x86DE +0x86DF +0x86E2 +0x86E3 +0x86E4 +0x86E6 +0x86E8 +0x86E9 +0x86EA +0x86EB +0x86EC +0x86ED +0x86F5 +0x86F6 +0x86F7 +0x86F8 +0x86F9 +0x86FA +0x86FB +0x86FE +0x8700 +0x8701 +0x8702 +0x8703 +0x8704 +0x8705 +0x8706 +0x8707 +0x8708 +0x8709 +0x870A +0x870B +0x870C +0x870D +0x870E +0x8711 +0x8712 +0x8713 +0x8718 +0x8719 +0x871A +0x871B +0x871C +0x871E +0x8720 +0x8721 +0x8722 +0x8723 +0x8724 +0x8725 +0x8726 +0x8727 +0x8728 +0x8729 +0x872A +0x872C +0x872D +0x872E +0x8730 +0x8731 +0x8732 +0x8733 +0x8734 +0x8735 +0x8737 +0x8738 +0x873A +0x873B +0x873C +0x873E +0x873F +0x8740 +0x8741 +0x8742 +0x8743 +0x8746 +0x874C +0x874D +0x874E +0x874F +0x8750 +0x8751 +0x8752 +0x8753 +0x8754 +0x8755 +0x8756 +0x8757 +0x8758 +0x8759 +0x875A +0x875B +0x875C +0x875D +0x875E +0x875F +0x8760 +0x8761 +0x8762 +0x8763 +0x8764 +0x8765 +0x8766 +0x8767 +0x8768 +0x8769 +0x876A +0x876B +0x876C +0x876D +0x876E +0x876F +0x8773 +0x8774 +0x8775 +0x8776 +0x8777 +0x8778 +0x8779 +0x877A +0x877B +0x8781 +0x8782 +0x8783 +0x8784 +0x8785 +0x8787 +0x8788 +0x8789 +0x878D +0x878F +0x8790 +0x8791 +0x8792 +0x8793 +0x8794 +0x8796 +0x8797 +0x8798 +0x879A +0x879B +0x879C +0x879D +0x879E +0x879F +0x87A2 +0x87A3 +0x87A4 +0x87AA +0x87AB +0x87AC +0x87AD +0x87AE +0x87AF +0x87B0 +0x87B2 +0x87B3 +0x87B4 +0x87B5 +0x87B6 +0x87B7 +0x87B8 +0x87B9 +0x87BA +0x87BB +0x87BC +0x87BD +0x87BE +0x87BF +0x87C0 +0x87C2 +0x87C3 +0x87C4 +0x87C5 +0x87C6 +0x87C8 +0x87C9 +0x87CA +0x87CB +0x87CC +0x87D1 +0x87D2 +0x87D3 +0x87D4 +0x87D7 +0x87D8 +0x87D9 +0x87DB +0x87DC +0x87DD +0x87DE +0x87DF +0x87E0 +0x87E1 +0x87E2 +0x87E3 +0x87E4 +0x87E5 +0x87E6 +0x87E7 +0x87E8 +0x87EA +0x87EB +0x87EC +0x87ED +0x87EF +0x87F2 +0x87F3 +0x87F4 +0x87F6 +0x87F7 +0x87F9 +0x87FA +0x87FB +0x87FC +0x87FE +0x87FF +0x8800 +0x8801 +0x8802 +0x8803 +0x8805 +0x8806 +0x8808 +0x8809 +0x880A +0x880B +0x880C +0x880D +0x8810 +0x8811 +0x8813 +0x8814 +0x8815 +0x8816 +0x8817 +0x8819 +0x881B +0x881C +0x881D +0x881F +0x8820 +0x8821 +0x8822 +0x8823 +0x8824 +0x8825 +0x8826 +0x8828 +0x8829 +0x882A +0x882B +0x882C +0x882E +0x882F +0x8830 +0x8831 +0x8832 +0x8833 +0x8835 +0x8836 +0x8837 +0x8838 +0x8839 +0x883B +0x883C +0x883D +0x883E +0x883F +0x8840 +0x8841 +0x8843 +0x8844 +0x8848 +0x884A +0x884B +0x884C +0x884D +0x884E +0x8852 +0x8853 +0x8855 +0x8856 +0x8857 +0x8859 +0x885A +0x885B +0x885D +0x8861 +0x8862 +0x8863 +0x8867 +0x8868 +0x8869 +0x886A +0x886B +0x886D +0x886F +0x8870 +0x8871 +0x8872 +0x8874 +0x8875 +0x8876 +0x8877 +0x8879 +0x887C +0x887D +0x887E +0x887F +0x8880 +0x8881 +0x8882 +0x8883 +0x8888 +0x8889 +0x888B +0x888C +0x888D +0x888E +0x8891 +0x8892 +0x8893 +0x8895 +0x8896 +0x8897 +0x8898 +0x8899 +0x889A +0x889B +0x889E +0x889F +0x88A1 +0x88A2 +0x88A4 +0x88A7 +0x88A8 +0x88AA +0x88AB +0x88AC +0x88B1 +0x88B2 +0x88B6 +0x88B7 +0x88B8 +0x88B9 +0x88BA +0x88BC +0x88BD +0x88BE +0x88C0 +0x88C1 +0x88C2 +0x88C9 +0x88CA +0x88CB +0x88CC +0x88CD +0x88CE +0x88D0 +0x88D2 +0x88D4 +0x88D5 +0x88D6 +0x88D7 +0x88D8 +0x88D9 +0x88DA +0x88DB +0x88DC +0x88DD +0x88DE +0x88DF +0x88E1 +0x88E7 +0x88E8 +0x88EB +0x88EC +0x88EE +0x88EF +0x88F0 +0x88F1 +0x88F2 +0x88F3 +0x88F4 +0x88F6 +0x88F7 +0x88F8 +0x88F9 +0x88FA +0x88FB +0x88FC +0x88FD +0x88FE +0x8901 +0x8902 +0x8905 +0x8906 +0x8907 +0x8909 +0x890A +0x890B +0x890C +0x890E +0x8910 +0x8911 +0x8912 +0x8913 +0x8914 +0x8915 +0x8916 +0x8917 +0x8918 +0x8919 +0x891A +0x891E +0x891F +0x8921 +0x8922 +0x8923 +0x8925 +0x8926 +0x8927 +0x8929 +0x892A +0x892B +0x892C +0x892D +0x892E +0x892F +0x8930 +0x8931 +0x8932 +0x8933 +0x8935 +0x8936 +0x8937 +0x8938 +0x893B +0x893C +0x893D +0x893E +0x8941 +0x8942 +0x8944 +0x8946 +0x8949 +0x894B +0x894C +0x894F +0x8950 +0x8951 +0x8952 +0x8953 +0x8956 +0x8957 +0x8958 +0x8959 +0x895A +0x895B +0x895C +0x895D +0x895E +0x895F +0x8960 +0x8961 +0x8962 +0x8963 +0x8964 +0x8966 +0x8969 +0x896A +0x896B +0x896C +0x896D +0x896E +0x896F +0x8971 +0x8972 +0x8973 +0x8974 +0x8976 +0x8979 +0x897A +0x897B +0x897C +0x897E +0x897F +0x8981 +0x8982 +0x8983 +0x8985 +0x8986 +0x8988 +0x898B +0x898F +0x8993 +0x8995 +0x8996 +0x8997 +0x8998 +0x899B +0x899C +0x899D +0x899E +0x899F +0x89A1 +0x89A2 +0x89A3 +0x89A4 +0x89A6 +0x89AA +0x89AC +0x89AD +0x89AE +0x89AF +0x89B2 +0x89B6 +0x89B7 +0x89B9 +0x89BA +0x89BD +0x89BE +0x89BF +0x89C0 +0x89D2 +0x89D3 +0x89D4 +0x89D5 +0x89D6 +0x89D9 +0x89DA +0x89DB +0x89DC +0x89DD +0x89DF +0x89E0 +0x89E1 +0x89E2 +0x89E3 +0x89E4 +0x89E5 +0x89E6 +0x89E8 +0x89E9 +0x89EB +0x89EC +0x89ED +0x89F0 +0x89F1 +0x89F2 +0x89F3 +0x89F4 +0x89F6 +0x89F7 +0x89F8 +0x89FA +0x89FB +0x89FC +0x89FE +0x89FF +0x8A00 +0x8A02 +0x8A03 +0x8A04 +0x8A07 +0x8A08 +0x8A0A +0x8A0C +0x8A0E +0x8A0F +0x8A10 +0x8A11 +0x8A12 +0x8A13 +0x8A15 +0x8A16 +0x8A17 +0x8A18 +0x8A1B +0x8A1D +0x8A1E +0x8A1F +0x8A22 +0x8A23 +0x8A25 +0x8A27 +0x8A2A +0x8A2C +0x8A2D +0x8A30 +0x8A31 +0x8A34 +0x8A36 +0x8A39 +0x8A3A +0x8A3B +0x8A3C +0x8A3E +0x8A3F +0x8A40 +0x8A41 +0x8A44 +0x8A45 +0x8A46 +0x8A48 +0x8A4A +0x8A4C +0x8A4D +0x8A4E +0x8A4F +0x8A50 +0x8A51 +0x8A52 +0x8A54 +0x8A55 +0x8A56 +0x8A57 +0x8A58 +0x8A59 +0x8A5B +0x8A5E +0x8A60 +0x8A61 +0x8A62 +0x8A63 +0x8A66 +0x8A68 +0x8A69 +0x8A6B +0x8A6C +0x8A6D +0x8A6E +0x8A70 +0x8A71 +0x8A72 +0x8A73 +0x8A74 +0x8A75 +0x8A76 +0x8A77 +0x8A79 +0x8A7A +0x8A7B +0x8A7C +0x8A7F +0x8A81 +0x8A82 +0x8A83 +0x8A84 +0x8A85 +0x8A86 +0x8A87 +0x8A8B +0x8A8C +0x8A8D +0x8A8F +0x8A91 +0x8A92 +0x8A93 +0x8A95 +0x8A96 +0x8A98 +0x8A99 +0x8A9A +0x8A9E +0x8AA0 +0x8AA1 +0x8AA3 +0x8AA4 +0x8AA5 +0x8AA6 +0x8AA7 +0x8AA8 +0x8AAA +0x8AAB +0x8AB0 +0x8AB2 +0x8AB6 +0x8AB8 +0x8AB9 +0x8ABA +0x8ABB +0x8ABC +0x8ABD +0x8ABE +0x8ABF +0x8AC0 +0x8AC2 +0x8AC3 +0x8AC4 +0x8AC5 +0x8AC6 +0x8AC7 +0x8AC8 +0x8AC9 +0x8ACB +0x8ACD +0x8ACF +0x8AD1 +0x8AD2 +0x8AD3 +0x8AD4 +0x8AD5 +0x8AD6 +0x8AD7 +0x8AD8 +0x8AD9 +0x8ADB +0x8ADC +0x8ADD +0x8ADE +0x8ADF +0x8AE0 +0x8AE1 +0x8AE2 +0x8AE4 +0x8AE6 +0x8AE7 +0x8AE8 +0x8AEB +0x8AED +0x8AEE +0x8AEF +0x8AF0 +0x8AF1 +0x8AF2 +0x8AF3 +0x8AF4 +0x8AF5 +0x8AF6 +0x8AF7 +0x8AF8 +0x8AFA +0x8AFB +0x8AFC +0x8AFE +0x8AFF +0x8B00 +0x8B01 +0x8B02 +0x8B04 +0x8B05 +0x8B06 +0x8B07 +0x8B08 +0x8B0A +0x8B0B +0x8B0D +0x8B0E +0x8B0F +0x8B10 +0x8B11 +0x8B12 +0x8B13 +0x8B14 +0x8B15 +0x8B16 +0x8B17 +0x8B18 +0x8B19 +0x8B1A +0x8B1B +0x8B1C +0x8B1D +0x8B1E +0x8B20 +0x8B22 +0x8B23 +0x8B24 +0x8B25 +0x8B26 +0x8B27 +0x8B28 +0x8B2A +0x8B2B +0x8B2C +0x8B2E +0x8B2F +0x8B30 +0x8B31 +0x8B33 +0x8B35 +0x8B36 +0x8B37 +0x8B39 +0x8B3A +0x8B3B +0x8B3C +0x8B3D +0x8B3E +0x8B40 +0x8B41 +0x8B42 +0x8B45 +0x8B46 +0x8B47 +0x8B48 +0x8B49 +0x8B4A +0x8B4B +0x8B4E +0x8B4F +0x8B50 +0x8B51 +0x8B52 +0x8B53 +0x8B54 +0x8B55 +0x8B56 +0x8B57 +0x8B58 +0x8B59 +0x8B5A +0x8B5C +0x8B5D +0x8B5F +0x8B60 +0x8B63 +0x8B65 +0x8B66 +0x8B67 +0x8B68 +0x8B6A +0x8B6B +0x8B6C +0x8B6D +0x8B6F +0x8B70 +0x8B74 +0x8B77 +0x8B78 +0x8B79 +0x8B7A +0x8B7B +0x8B7D +0x8B7E +0x8B7F +0x8B80 +0x8B82 +0x8B84 +0x8B85 +0x8B86 +0x8B88 +0x8B8A +0x8B8B +0x8B8C +0x8B8E +0x8B92 +0x8B93 +0x8B94 +0x8B95 +0x8B96 +0x8B98 +0x8B99 +0x8B9A +0x8B9C +0x8B9E +0x8B9F +0x8C37 +0x8C39 +0x8C3B +0x8C3C +0x8C3D +0x8C3E +0x8C3F +0x8C41 +0x8C42 +0x8C43 +0x8C45 +0x8C46 +0x8C47 +0x8C48 +0x8C49 +0x8C4A +0x8C4B +0x8C4C +0x8C4D +0x8C4E +0x8C4F +0x8C50 +0x8C54 +0x8C55 +0x8C56 +0x8C57 +0x8C5A +0x8C5C +0x8C5D +0x8C5F +0x8C61 +0x8C62 +0x8C64 +0x8C65 +0x8C66 +0x8C68 +0x8C69 +0x8C6A +0x8C6B +0x8C6C +0x8C6D +0x8C6F +0x8C70 +0x8C71 +0x8C72 +0x8C73 +0x8C75 +0x8C76 +0x8C77 +0x8C78 +0x8C79 +0x8C7A +0x8C7B +0x8C7D +0x8C80 +0x8C81 +0x8C82 +0x8C84 +0x8C85 +0x8C86 +0x8C89 +0x8C8A +0x8C8C +0x8C8D +0x8C8F +0x8C90 +0x8C91 +0x8C92 +0x8C93 +0x8C94 +0x8C95 +0x8C97 +0x8C98 +0x8C99 +0x8C9A +0x8C9C +0x8C9D +0x8C9E +0x8CA0 +0x8CA1 +0x8CA2 +0x8CA3 +0x8CA4 +0x8CA5 +0x8CA7 +0x8CA8 +0x8CA9 +0x8CAA +0x8CAB +0x8CAC +0x8CAF +0x8CB0 +0x8CB2 +0x8CB3 +0x8CB4 +0x8CB5 +0x8CB6 +0x8CB7 +0x8CB8 +0x8CB9 +0x8CBA +0x8CBB +0x8CBC +0x8CBD +0x8CBE +0x8CBF +0x8CC0 +0x8CC1 +0x8CC2 +0x8CC3 +0x8CC4 +0x8CC5 +0x8CC7 +0x8CC8 +0x8CCA +0x8CCC +0x8CCF +0x8CD1 +0x8CD2 +0x8CD3 +0x8CD5 +0x8CD7 +0x8CD9 +0x8CDA +0x8CDC +0x8CDD +0x8CDE +0x8CDF +0x8CE0 +0x8CE1 +0x8CE2 +0x8CE3 +0x8CE4 +0x8CE5 +0x8CE6 +0x8CE7 +0x8CE8 +0x8CEA +0x8CEC +0x8CED +0x8CEE +0x8CF0 +0x8CF1 +0x8CF3 +0x8CF4 +0x8CF5 +0x8CF8 +0x8CF9 +0x8CFA +0x8CFB +0x8CFC +0x8CFD +0x8CFE +0x8D00 +0x8D02 +0x8D04 +0x8D05 +0x8D06 +0x8D07 +0x8D08 +0x8D09 +0x8D0A +0x8D0D +0x8D0F +0x8D10 +0x8D13 +0x8D14 +0x8D15 +0x8D16 +0x8D17 +0x8D19 +0x8D1B +0x8D64 +0x8D66 +0x8D67 +0x8D68 +0x8D69 +0x8D6B +0x8D6C +0x8D6D +0x8D6E +0x8D6F +0x8D70 +0x8D72 +0x8D73 +0x8D74 +0x8D76 +0x8D77 +0x8D78 +0x8D79 +0x8D7B +0x8D7D +0x8D80 +0x8D81 +0x8D84 +0x8D85 +0x8D89 +0x8D8A +0x8D8C +0x8D8D +0x8D8E +0x8D8F +0x8D90 +0x8D91 +0x8D92 +0x8D93 +0x8D94 +0x8D95 +0x8D96 +0x8D99 +0x8D9B +0x8D9C +0x8D9F +0x8DA0 +0x8DA1 +0x8DA3 +0x8DA5 +0x8DA7 +0x8DA8 +0x8DAA +0x8DAB +0x8DAC +0x8DAD +0x8DAE +0x8DAF +0x8DB2 +0x8DB3 +0x8DB4 +0x8DB5 +0x8DB6 +0x8DB7 +0x8DB9 +0x8DBA +0x8DBC +0x8DBE +0x8DBF +0x8DC1 +0x8DC2 +0x8DC5 +0x8DC6 +0x8DC7 +0x8DC8 +0x8DCB +0x8DCC +0x8DCD +0x8DCE +0x8DCF +0x8DD0 +0x8DD1 +0x8DD3 +0x8DD5 +0x8DD6 +0x8DD7 +0x8DD8 +0x8DD9 +0x8DDA +0x8DDB +0x8DDC +0x8DDD +0x8DDF +0x8DE0 +0x8DE1 +0x8DE2 +0x8DE3 +0x8DE4 +0x8DE6 +0x8DE7 +0x8DE8 +0x8DE9 +0x8DEA +0x8DEB +0x8DEC +0x8DEE +0x8DEF +0x8DF0 +0x8DF1 +0x8DF2 +0x8DF3 +0x8DF4 +0x8DFA +0x8DFC +0x8DFD +0x8DFE +0x8DFF +0x8E00 +0x8E02 +0x8E03 +0x8E04 +0x8E05 +0x8E06 +0x8E07 +0x8E09 +0x8E0A +0x8E0D +0x8E0F +0x8E10 +0x8E11 +0x8E12 +0x8E13 +0x8E14 +0x8E15 +0x8E16 +0x8E17 +0x8E18 +0x8E19 +0x8E1A +0x8E1B +0x8E1C +0x8E1D +0x8E1E +0x8E1F +0x8E20 +0x8E21 +0x8E22 +0x8E23 +0x8E24 +0x8E25 +0x8E26 +0x8E27 +0x8E29 +0x8E2B +0x8E2E +0x8E30 +0x8E31 +0x8E33 +0x8E34 +0x8E35 +0x8E36 +0x8E38 +0x8E39 +0x8E3C +0x8E3D +0x8E3E +0x8E3F +0x8E40 +0x8E41 +0x8E42 +0x8E44 +0x8E45 +0x8E47 +0x8E48 +0x8E49 +0x8E4A +0x8E4B +0x8E4C +0x8E4D +0x8E4E +0x8E50 +0x8E53 +0x8E54 +0x8E55 +0x8E56 +0x8E57 +0x8E59 +0x8E5A +0x8E5B +0x8E5C +0x8E5D +0x8E5E +0x8E5F +0x8E60 +0x8E61 +0x8E62 +0x8E63 +0x8E64 +0x8E65 +0x8E66 +0x8E67 +0x8E69 +0x8E6A +0x8E6C +0x8E6D +0x8E6F +0x8E72 +0x8E73 +0x8E74 +0x8E76 +0x8E78 +0x8E7A +0x8E7B +0x8E7C +0x8E81 +0x8E82 +0x8E84 +0x8E85 +0x8E86 +0x8E87 +0x8E88 +0x8E89 +0x8E8A +0x8E8B +0x8E8C +0x8E8D +0x8E8E +0x8E90 +0x8E91 +0x8E92 +0x8E93 +0x8E94 +0x8E95 +0x8E96 +0x8E97 +0x8E98 +0x8E9A +0x8E9D +0x8E9E +0x8E9F +0x8EA0 +0x8EA1 +0x8EA3 +0x8EA4 +0x8EA5 +0x8EA6 +0x8EA8 +0x8EA9 +0x8EAA +0x8EAB +0x8EAC +0x8EB2 +0x8EBA +0x8EBD +0x8EC0 +0x8EC2 +0x8EC9 +0x8ECA +0x8ECB +0x8ECC +0x8ECD +0x8ECF +0x8ED1 +0x8ED2 +0x8ED3 +0x8ED4 +0x8ED7 +0x8ED8 +0x8EDB +0x8EDC +0x8EDD +0x8EDE +0x8EDF +0x8EE0 +0x8EE1 +0x8EE5 +0x8EE6 +0x8EE7 +0x8EE8 +0x8EE9 +0x8EEB +0x8EEC +0x8EEE +0x8EEF +0x8EF1 +0x8EF4 +0x8EF5 +0x8EF6 +0x8EF7 +0x8EF8 +0x8EF9 +0x8EFA +0x8EFB +0x8EFC +0x8EFE +0x8EFF +0x8F00 +0x8F01 +0x8F02 +0x8F03 +0x8F05 +0x8F06 +0x8F07 +0x8F08 +0x8F09 +0x8F0A +0x8F0B +0x8F0D +0x8F0E +0x8F10 +0x8F11 +0x8F12 +0x8F13 +0x8F14 +0x8F15 +0x8F16 +0x8F17 +0x8F18 +0x8F1A +0x8F1B +0x8F1C +0x8F1D +0x8F1E +0x8F1F +0x8F20 +0x8F23 +0x8F24 +0x8F25 +0x8F26 +0x8F29 +0x8F2A +0x8F2C +0x8F2E +0x8F2F +0x8F32 +0x8F33 +0x8F34 +0x8F35 +0x8F36 +0x8F37 +0x8F38 +0x8F39 +0x8F3B +0x8F3E +0x8F3F +0x8F40 +0x8F42 +0x8F43 +0x8F44 +0x8F45 +0x8F46 +0x8F47 +0x8F48 +0x8F49 +0x8F4B +0x8F4D +0x8F4E +0x8F4F +0x8F50 +0x8F51 +0x8F52 +0x8F53 +0x8F54 +0x8F55 +0x8F56 +0x8F57 +0x8F58 +0x8F59 +0x8F5A +0x8F5B +0x8F5D +0x8F5E +0x8F5F +0x8F60 +0x8F61 +0x8F62 +0x8F63 +0x8F64 +0x8F9B +0x8F9C +0x8F9F +0x8FA3 +0x8FA6 +0x8FA8 +0x8FAD +0x8FAE +0x8FAF +0x8FB0 +0x8FB1 +0x8FB2 +0x8FB4 +0x8FBF +0x8FC2 +0x8FC4 +0x8FC5 +0x8FC6 +0x8FC9 +0x8FCB +0x8FCD +0x8FCE +0x8FD1 +0x8FD2 +0x8FD3 +0x8FD4 +0x8FD5 +0x8FD6 +0x8FD7 +0x8FE0 +0x8FE1 +0x8FE2 +0x8FE3 +0x8FE4 +0x8FE5 +0x8FE6 +0x8FE8 +0x8FEA +0x8FEB +0x8FED +0x8FEE +0x8FF0 +0x8FF4 +0x8FF5 +0x8FF6 +0x8FF7 +0x8FF8 +0x8FFA +0x8FFB +0x8FFC +0x8FFD +0x8FFE +0x8FFF +0x9000 +0x9001 +0x9002 +0x9003 +0x9004 +0x9005 +0x9006 +0x900B +0x900C +0x900D +0x900F +0x9010 +0x9011 +0x9014 +0x9015 +0x9016 +0x9017 +0x9019 +0x901A +0x901B +0x901C +0x901D +0x901E +0x901F +0x9020 +0x9021 +0x9022 +0x9023 +0x9024 +0x902D +0x902E +0x902F +0x9031 +0x9032 +0x9034 +0x9035 +0x9036 +0x9038 +0x903C +0x903D +0x903E +0x903F +0x9041 +0x9042 +0x9044 +0x9047 +0x9049 +0x904A +0x904B +0x904D +0x904E +0x904F +0x9050 +0x9051 +0x9052 +0x9053 +0x9054 +0x9055 +0x9058 +0x9059 +0x905B +0x905C +0x905D +0x905E +0x9060 +0x9062 +0x9063 +0x9067 +0x9068 +0x9069 +0x906B +0x906D +0x906E +0x906F +0x9070 +0x9072 +0x9073 +0x9074 +0x9075 +0x9076 +0x9077 +0x9078 +0x9079 +0x907A +0x907B +0x907C +0x907D +0x907E +0x907F +0x9080 +0x9081 +0x9082 +0x9083 +0x9084 +0x9085 +0x9086 +0x9087 +0x9088 +0x908A +0x908B +0x908D +0x908F +0x9090 +0x9091 +0x9094 +0x9095 +0x9097 +0x9098 +0x9099 +0x909B +0x909E +0x909F +0x90A0 +0x90A1 +0x90A2 +0x90A3 +0x90A5 +0x90A6 +0x90A7 +0x90AA +0x90AF +0x90B0 +0x90B1 +0x90B2 +0x90B3 +0x90B4 +0x90B5 +0x90B6 +0x90B8 +0x90BD +0x90BE +0x90BF +0x90C1 +0x90C3 +0x90C5 +0x90C7 +0x90C8 +0x90CA +0x90CB +0x90CE +0x90D4 +0x90D5 +0x90D6 +0x90D7 +0x90D8 +0x90D9 +0x90DA +0x90DB +0x90DC +0x90DD +0x90DF +0x90E0 +0x90E1 +0x90E2 +0x90E3 +0x90E4 +0x90E5 +0x90E8 +0x90E9 +0x90EA +0x90EB +0x90EC +0x90ED +0x90EF +0x90F0 +0x90F1 +0x90F2 +0x90F3 +0x90F4 +0x90F5 +0x90F9 +0x90FA +0x90FB +0x90FC +0x90FD +0x90FE +0x90FF +0x9100 +0x9101 +0x9102 +0x9103 +0x9104 +0x9105 +0x9106 +0x9107 +0x9108 +0x9109 +0x910B +0x910D +0x910E +0x910F +0x9110 +0x9111 +0x9112 +0x9114 +0x9116 +0x9117 +0x9118 +0x9119 +0x911A +0x911B +0x911C +0x911D +0x911E +0x911F +0x9120 +0x9121 +0x9122 +0x9123 +0x9124 +0x9126 +0x9127 +0x9128 +0x9129 +0x912A +0x912B +0x912C +0x912D +0x912E +0x912F +0x9130 +0x9131 +0x9132 +0x9133 +0x9134 +0x9135 +0x9136 +0x9138 +0x9139 +0x913A +0x913B +0x913E +0x913F +0x9140 +0x9141 +0x9143 +0x9144 +0x9145 +0x9146 +0x9147 +0x9148 +0x9149 +0x914A +0x914B +0x914C +0x914D +0x914E +0x914F +0x9150 +0x9152 +0x9153 +0x9155 +0x9156 +0x9157 +0x9158 +0x915A +0x915F +0x9160 +0x9161 +0x9162 +0x9163 +0x9164 +0x9165 +0x9168 +0x9169 +0x916A +0x916C +0x916E +0x916F +0x9172 +0x9173 +0x9174 +0x9175 +0x9177 +0x9178 +0x9179 +0x917A +0x9180 +0x9181 +0x9182 +0x9183 +0x9184 +0x9185 +0x9186 +0x9187 +0x9189 +0x918A +0x918B +0x918D +0x918F +0x9190 +0x9191 +0x9192 +0x9193 +0x9199 +0x919A +0x919B +0x919C +0x919D +0x919E +0x919F +0x91A0 +0x91A1 +0x91A2 +0x91A3 +0x91A5 +0x91A7 +0x91A8 +0x91AA +0x91AB +0x91AC +0x91AD +0x91AE +0x91AF +0x91B0 +0x91B1 +0x91B2 +0x91B3 +0x91B4 +0x91B5 +0x91B7 +0x91B9 +0x91BA +0x91BC +0x91BD +0x91BE +0x91C0 +0x91C1 +0x91C2 +0x91C3 +0x91C5 +0x91C6 +0x91C7 +0x91C9 +0x91CB +0x91CC +0x91CD +0x91CE +0x91CF +0x91D0 +0x91D1 +0x91D3 +0x91D4 +0x91D5 +0x91D7 +0x91D8 +0x91D9 +0x91DA +0x91DC +0x91DD +0x91E2 +0x91E3 +0x91E4 +0x91E6 +0x91E7 +0x91E8 +0x91E9 +0x91EA +0x91EB +0x91EC +0x91ED +0x91EE +0x91F1 +0x91F3 +0x91F4 +0x91F5 +0x91F7 +0x91F8 +0x91F9 +0x91FD +0x91FF +0x9200 +0x9201 +0x9202 +0x9203 +0x9204 +0x9205 +0x9206 +0x9207 +0x9209 +0x920A +0x920C +0x920D +0x920F +0x9210 +0x9211 +0x9212 +0x9214 +0x9215 +0x9216 +0x9217 +0x9219 +0x921A +0x921C +0x921E +0x9223 +0x9224 +0x9225 +0x9226 +0x9227 +0x922D +0x922E +0x9230 +0x9231 +0x9232 +0x9233 +0x9234 +0x9236 +0x9237 +0x9238 +0x9239 +0x923A +0x923D +0x923E +0x923F +0x9240 +0x9245 +0x9246 +0x9248 +0x9249 +0x924A +0x924B +0x924C +0x924D +0x924E +0x924F +0x9250 +0x9251 +0x9252 +0x9253 +0x9254 +0x9256 +0x9257 +0x925A +0x925B +0x925E +0x9260 +0x9261 +0x9263 +0x9264 +0x9265 +0x9266 +0x9267 +0x926C +0x926D +0x926F +0x9270 +0x9272 +0x9276 +0x9278 +0x9279 +0x927A +0x927B +0x927C +0x927D +0x927E +0x927F +0x9280 +0x9282 +0x9283 +0x9285 +0x9286 +0x9287 +0x9288 +0x928A +0x928B +0x928C +0x928D +0x928E +0x9291 +0x9293 +0x9294 +0x9295 +0x9296 +0x9297 +0x9298 +0x9299 +0x929A +0x929B +0x929C +0x929D +0x92A0 +0x92A1 +0x92A2 +0x92A3 +0x92A4 +0x92A5 +0x92A6 +0x92A7 +0x92A8 +0x92A9 +0x92AA +0x92AB +0x92AC +0x92B2 +0x92B3 +0x92B4 +0x92B5 +0x92B6 +0x92B7 +0x92BB +0x92BC +0x92C0 +0x92C1 +0x92C2 +0x92C3 +0x92C4 +0x92C5 +0x92C6 +0x92C7 +0x92C8 +0x92C9 +0x92CA +0x92CB +0x92CC +0x92CD +0x92CE +0x92CF +0x92D0 +0x92D1 +0x92D2 +0x92D3 +0x92D5 +0x92D7 +0x92D8 +0x92D9 +0x92DD +0x92DE +0x92DF +0x92E0 +0x92E1 +0x92E4 +0x92E6 +0x92E7 +0x92E8 +0x92E9 +0x92EA +0x92EE +0x92EF +0x92F0 +0x92F1 +0x92F7 +0x92F8 +0x92F9 +0x92FA +0x92FB +0x92FC +0x92FE +0x92FF +0x9300 +0x9301 +0x9302 +0x9304 +0x9306 +0x9308 +0x9309 +0x930B +0x930C +0x930D +0x930E +0x930F +0x9310 +0x9312 +0x9313 +0x9314 +0x9315 +0x9316 +0x9318 +0x9319 +0x931A +0x931B +0x931D +0x931E +0x931F +0x9320 +0x9321 +0x9322 +0x9323 +0x9324 +0x9325 +0x9326 +0x9327 +0x9328 +0x9329 +0x932A +0x932B +0x932D +0x932E +0x932F +0x9333 +0x9334 +0x9335 +0x9336 +0x9338 +0x9339 +0x933C +0x9346 +0x9347 +0x9349 +0x934A +0x934B +0x934C +0x934D +0x934E +0x934F +0x9350 +0x9351 +0x9352 +0x9354 +0x9355 +0x9356 +0x9357 +0x9358 +0x9359 +0x935A +0x935B +0x935C +0x935E +0x9360 +0x9361 +0x9363 +0x9364 +0x9365 +0x9367 +0x936A +0x936C +0x936D +0x9370 +0x9371 +0x9375 +0x9376 +0x9377 +0x9379 +0x937A +0x937B +0x937C +0x937E +0x9380 +0x9382 +0x9383 +0x9388 +0x9389 +0x938A +0x938C +0x938D +0x938E +0x938F +0x9391 +0x9392 +0x9394 +0x9395 +0x9396 +0x9397 +0x9398 +0x9399 +0x939A +0x939B +0x939D +0x939E +0x939F +0x93A1 +0x93A2 +0x93A3 +0x93A4 +0x93A5 +0x93A6 +0x93A7 +0x93A8 +0x93A9 +0x93AA +0x93AC +0x93AE +0x93AF +0x93B0 +0x93B1 +0x93B2 +0x93B3 +0x93B4 +0x93B5 +0x93B7 +0x93C0 +0x93C2 +0x93C3 +0x93C4 +0x93C7 +0x93C8 +0x93CA +0x93CC +0x93CD +0x93CE +0x93CF +0x93D0 +0x93D1 +0x93D2 +0x93D4 +0x93D5 +0x93D6 +0x93D7 +0x93D8 +0x93D9 +0x93DA +0x93DC +0x93DD +0x93DE +0x93DF +0x93E1 +0x93E2 +0x93E3 +0x93E4 +0x93E6 +0x93E7 +0x93E8 +0x93EC +0x93EE +0x93F5 +0x93F6 +0x93F7 +0x93F8 +0x93F9 +0x93FA +0x93FB +0x93FC +0x93FD +0x93FE +0x93FF +0x9400 +0x9403 +0x9406 +0x9407 +0x9409 +0x940A +0x940B +0x940C +0x940D +0x940E +0x940F +0x9410 +0x9411 +0x9412 +0x9413 +0x9414 +0x9415 +0x9416 +0x9418 +0x9419 +0x9420 +0x9428 +0x9429 +0x942A +0x942B +0x942C +0x942E +0x9430 +0x9431 +0x9432 +0x9433 +0x9435 +0x9436 +0x9437 +0x9438 +0x9439 +0x943A +0x943B +0x943C +0x943D +0x943F +0x9440 +0x9444 +0x9445 +0x9446 +0x9447 +0x9448 +0x9449 +0x944A +0x944B +0x944C +0x944F +0x9450 +0x9451 +0x9452 +0x9455 +0x9457 +0x945D +0x945E +0x9460 +0x9462 +0x9463 +0x9464 +0x9468 +0x9469 +0x946A +0x946B +0x946D +0x946E +0x946F +0x9470 +0x9471 +0x9472 +0x9473 +0x9474 +0x9475 +0x9476 +0x9477 +0x9478 +0x947C +0x947D +0x947E +0x947F +0x9480 +0x9481 +0x9482 +0x9483 +0x9577 +0x957A +0x957B +0x957C +0x957D +0x9580 +0x9582 +0x9583 +0x9586 +0x9588 +0x9589 +0x958B +0x958C +0x958D +0x958E +0x958F +0x9590 +0x9591 +0x9592 +0x9593 +0x9594 +0x9598 +0x959B +0x959C +0x959E +0x959F +0x95A1 +0x95A3 +0x95A4 +0x95A5 +0x95A8 +0x95A9 +0x95AB +0x95AC +0x95AD +0x95AE +0x95B0 +0x95B1 +0x95B5 +0x95B6 +0x95B7 +0x95B9 +0x95BA +0x95BB +0x95BC +0x95BD +0x95BE +0x95BF +0x95C0 +0x95C3 +0x95C5 +0x95C6 +0x95C7 +0x95C8 +0x95C9 +0x95CA +0x95CB +0x95CC +0x95CD +0x95D0 +0x95D1 +0x95D2 +0x95D3 +0x95D4 +0x95D5 +0x95D6 +0x95DA +0x95DB +0x95DC +0x95DE +0x95DF +0x95E0 +0x95E1 +0x95E2 +0x95E3 +0x95E4 +0x95E5 +0x961C +0x961E +0x9620 +0x9621 +0x9622 +0x9623 +0x9624 +0x9628 +0x962A +0x962C +0x962D +0x962E +0x962F +0x9630 +0x9631 +0x9632 +0x9639 +0x963A +0x963B +0x963C +0x963D +0x963F +0x9640 +0x9642 +0x9643 +0x9644 +0x964A +0x964B +0x964C +0x964D +0x964E +0x964F +0x9650 +0x9651 +0x9653 +0x9654 +0x9658 +0x965B +0x965C +0x965D +0x965E +0x965F +0x9661 +0x9662 +0x9663 +0x9664 +0x966A +0x966B +0x966C +0x966D +0x966F +0x9670 +0x9671 +0x9672 +0x9673 +0x9674 +0x9675 +0x9676 +0x9677 +0x9678 +0x967C +0x967D +0x967E +0x9680 +0x9683 +0x9684 +0x9685 +0x9686 +0x9687 +0x9688 +0x9689 +0x968A +0x968B +0x968D +0x968E +0x9691 +0x9692 +0x9693 +0x9694 +0x9695 +0x9697 +0x9698 +0x9699 +0x969B +0x969C +0x969E +0x96A1 +0x96A2 +0x96A4 +0x96A7 +0x96A8 +0x96A9 +0x96AA +0x96AC +0x96AE +0x96B0 +0x96B1 +0x96B3 +0x96B4 +0x96B8 +0x96B9 +0x96BB +0x96BC +0x96BF +0x96C0 +0x96C1 +0x96C2 +0x96C3 +0x96C4 +0x96C5 +0x96C6 +0x96C7 +0x96C8 +0x96C9 +0x96CA +0x96CB +0x96CC +0x96CD +0x96CE +0x96D2 +0x96D3 +0x96D4 +0x96D5 +0x96D6 +0x96D7 +0x96D8 +0x96D9 +0x96DA +0x96DB +0x96DC +0x96DD +0x96DE +0x96DF +0x96E1 +0x96E2 +0x96E3 +0x96E5 +0x96E8 +0x96E9 +0x96EA +0x96EF +0x96F0 +0x96F1 +0x96F2 +0x96F5 +0x96F6 +0x96F7 +0x96F8 +0x96F9 +0x96FA +0x96FB +0x96FD +0x96FF +0x9700 +0x9702 +0x9704 +0x9705 +0x9706 +0x9707 +0x9708 +0x9709 +0x970B +0x970D +0x970E +0x970F +0x9710 +0x9711 +0x9712 +0x9713 +0x9716 +0x9718 +0x9719 +0x971C +0x971D +0x971E +0x971F +0x9720 +0x9722 +0x9723 +0x9724 +0x9725 +0x9726 +0x9727 +0x9728 +0x9729 +0x972A +0x972B +0x972C +0x972E +0x972F +0x9730 +0x9732 +0x9735 +0x9738 +0x9739 +0x973A +0x973D +0x973E +0x973F +0x9742 +0x9743 +0x9744 +0x9746 +0x9747 +0x9748 +0x9749 +0x974B +0x9752 +0x9756 +0x9758 +0x975A +0x975B +0x975C +0x975E +0x9760 +0x9761 +0x9762 +0x9766 +0x9768 +0x9769 +0x976A +0x976C +0x976E +0x9770 +0x9772 +0x9773 +0x9774 +0x9776 +0x9777 +0x9778 +0x977A +0x977B +0x977C +0x977D +0x977E +0x977F +0x9780 +0x9781 +0x9782 +0x9783 +0x9784 +0x9785 +0x9788 +0x978A +0x978B +0x978D +0x978E +0x978F +0x9794 +0x9797 +0x9798 +0x9799 +0x979A +0x979C +0x979D +0x979E +0x97A0 +0x97A1 +0x97A2 +0x97A3 +0x97A4 +0x97A5 +0x97A6 +0x97A8 +0x97AA +0x97AB +0x97AC +0x97AD +0x97AE +0x97B3 +0x97B6 +0x97B7 +0x97B9 +0x97BB +0x97BF +0x97C1 +0x97C3 +0x97C4 +0x97C5 +0x97C6 +0x97C7 +0x97C9 +0x97CB +0x97CC +0x97CD +0x97CE +0x97CF +0x97D0 +0x97D3 +0x97D4 +0x97D5 +0x97D6 +0x97D7 +0x97D8 +0x97D9 +0x97DC +0x97DD +0x97DE +0x97DF +0x97E1 +0x97E3 +0x97E5 +0x97ED +0x97F0 +0x97F1 +0x97F3 +0x97F6 +0x97F8 +0x97F9 +0x97FA +0x97FB +0x97FD +0x97FE +0x97FF +0x9800 +0x9801 +0x9802 +0x9803 +0x9804 +0x9805 +0x9806 +0x9807 +0x9808 +0x980A +0x980C +0x980D +0x980E +0x980F +0x9810 +0x9811 +0x9812 +0x9813 +0x9816 +0x9817 +0x9818 +0x981B +0x981C +0x981D +0x981E +0x9820 +0x9821 +0x9824 +0x9826 +0x9827 +0x9828 +0x9829 +0x982B +0x982D +0x982F +0x9830 +0x9832 +0x9835 +0x9837 +0x9838 +0x9839 +0x983B +0x9841 +0x9843 +0x9844 +0x9845 +0x9846 +0x9848 +0x9849 +0x984A +0x984C +0x984D +0x984E +0x984F +0x9850 +0x9851 +0x9852 +0x9853 +0x9857 +0x9858 +0x9859 +0x985B +0x985C +0x985D +0x985E +0x985F +0x9860 +0x9862 +0x9863 +0x9864 +0x9865 +0x9867 +0x9869 +0x986A +0x986B +0x986F +0x9870 +0x9871 +0x9872 +0x9873 +0x9874 +0x98A8 +0x98A9 +0x98AC +0x98AD +0x98AE +0x98AF +0x98B1 +0x98B2 +0x98B3 +0x98B6 +0x98B8 +0x98BA +0x98BB +0x98BC +0x98BD +0x98BE +0x98BF +0x98C0 +0x98C1 +0x98C2 +0x98C4 +0x98C6 +0x98C9 +0x98CB +0x98CC +0x98DB +0x98DF +0x98E2 +0x98E3 +0x98E5 +0x98E7 +0x98E9 +0x98EA +0x98EB +0x98ED +0x98EF +0x98F2 +0x98F4 +0x98F6 +0x98F9 +0x98FA +0x98FC +0x98FD +0x98FE +0x9900 +0x9902 +0x9903 +0x9905 +0x9907 +0x9908 +0x9909 +0x990A +0x990C +0x9910 +0x9911 +0x9912 +0x9913 +0x9914 +0x9915 +0x9916 +0x9917 +0x9918 +0x991A +0x991B +0x991E +0x991F +0x9921 +0x9924 +0x9925 +0x9927 +0x9928 +0x9929 +0x992A +0x992B +0x992C +0x992D +0x992E +0x992F +0x9930 +0x9931 +0x9932 +0x9933 +0x9935 +0x993A +0x993C +0x993D +0x993E +0x993F +0x9941 +0x9943 +0x9945 +0x9947 +0x9948 +0x9949 +0x994B +0x994C +0x994E +0x9950 +0x9951 +0x9952 +0x9953 +0x9954 +0x9955 +0x9956 +0x9957 +0x9958 +0x9959 +0x995B +0x995C +0x995E +0x995F +0x9961 +0x9996 +0x9997 +0x9998 +0x9999 +0x999C +0x999D +0x999E +0x99A1 +0x99A3 +0x99A5 +0x99A6 +0x99A7 +0x99A8 +0x99AB +0x99AC +0x99AD +0x99AE +0x99AF +0x99B0 +0x99B1 +0x99B2 +0x99B3 +0x99B4 +0x99B5 +0x99B9 +0x99BA +0x99BB +0x99BD +0x99C1 +0x99C2 +0x99C3 +0x99C7 +0x99C9 +0x99CB +0x99CC +0x99CD +0x99CE +0x99CF +0x99D0 +0x99D1 +0x99D2 +0x99D3 +0x99D4 +0x99D5 +0x99D6 +0x99D7 +0x99D8 +0x99D9 +0x99DB +0x99DC +0x99DD +0x99DF +0x99E2 +0x99E3 +0x99E4 +0x99E5 +0x99E7 +0x99E9 +0x99EA +0x99EC +0x99ED +0x99EE +0x99F0 +0x99F1 +0x99F4 +0x99F6 +0x99F7 +0x99F8 +0x99F9 +0x99FA +0x99FB +0x99FC +0x99FD +0x99FE +0x99FF +0x9A01 +0x9A02 +0x9A03 +0x9A04 +0x9A05 +0x9A06 +0x9A07 +0x9A09 +0x9A0A +0x9A0B +0x9A0D +0x9A0E +0x9A0F +0x9A11 +0x9A14 +0x9A15 +0x9A16 +0x9A19 +0x9A1A +0x9A1B +0x9A1C +0x9A1D +0x9A1E +0x9A20 +0x9A22 +0x9A23 +0x9A24 +0x9A25 +0x9A27 +0x9A29 +0x9A2A +0x9A2B +0x9A2C +0x9A2D +0x9A2E +0x9A30 +0x9A31 +0x9A32 +0x9A34 +0x9A35 +0x9A36 +0x9A37 +0x9A38 +0x9A39 +0x9A3A +0x9A3D +0x9A3E +0x9A3F +0x9A40 +0x9A41 +0x9A42 +0x9A43 +0x9A44 +0x9A45 +0x9A46 +0x9A48 +0x9A49 +0x9A4A +0x9A4C +0x9A4D +0x9A4E +0x9A4F +0x9A50 +0x9A52 +0x9A53 +0x9A54 +0x9A55 +0x9A56 +0x9A57 +0x9A59 +0x9A5A +0x9A5B +0x9A5E +0x9A5F +0x9A60 +0x9A62 +0x9A64 +0x9A65 +0x9A66 +0x9A67 +0x9A68 +0x9A69 +0x9A6A +0x9A6B +0x9AA8 +0x9AAB +0x9AAD +0x9AAF +0x9AB0 +0x9AB1 +0x9AB3 +0x9AB4 +0x9AB7 +0x9AB8 +0x9AB9 +0x9ABB +0x9ABC +0x9ABE +0x9ABF +0x9AC0 +0x9AC1 +0x9AC2 +0x9AC6 +0x9AC7 +0x9ACA +0x9ACD +0x9ACF +0x9AD0 +0x9AD1 +0x9AD2 +0x9AD3 +0x9AD4 +0x9AD5 +0x9AD6 +0x9AD8 +0x9ADC +0x9ADF +0x9AE1 +0x9AE3 +0x9AE6 +0x9AE7 +0x9AEB +0x9AEC +0x9AED +0x9AEE +0x9AEF +0x9AF1 +0x9AF2 +0x9AF3 +0x9AF6 +0x9AF7 +0x9AF9 +0x9AFA +0x9AFB +0x9AFC +0x9AFD +0x9AFE +0x9B01 +0x9B03 +0x9B04 +0x9B05 +0x9B06 +0x9B08 +0x9B0A +0x9B0B +0x9B0C +0x9B0D +0x9B0E +0x9B10 +0x9B11 +0x9B12 +0x9B15 +0x9B16 +0x9B17 +0x9B18 +0x9B19 +0x9B1A +0x9B1E +0x9B1F +0x9B20 +0x9B22 +0x9B23 +0x9B24 +0x9B25 +0x9B27 +0x9B28 +0x9B29 +0x9B2B +0x9B2E +0x9B2F +0x9B31 +0x9B32 +0x9B33 +0x9B35 +0x9B37 +0x9B3A +0x9B3B +0x9B3C +0x9B3E +0x9B3F +0x9B41 +0x9B42 +0x9B43 +0x9B44 +0x9B45 +0x9B46 +0x9B48 +0x9B4A +0x9B4B +0x9B4C +0x9B4D +0x9B4E +0x9B4F +0x9B51 +0x9B52 +0x9B54 +0x9B55 +0x9B56 +0x9B58 +0x9B59 +0x9B5A +0x9B5B +0x9B5F +0x9B60 +0x9B61 +0x9B64 +0x9B66 +0x9B67 +0x9B68 +0x9B6C +0x9B6F +0x9B70 +0x9B71 +0x9B74 +0x9B75 +0x9B76 +0x9B77 +0x9B7A +0x9B7B +0x9B7C +0x9B7D +0x9B7E +0x9B80 +0x9B82 +0x9B85 +0x9B86 +0x9B87 +0x9B88 +0x9B90 +0x9B91 +0x9B92 +0x9B93 +0x9B95 +0x9B9A +0x9B9B +0x9B9E +0x9BA0 +0x9BA1 +0x9BA2 +0x9BA4 +0x9BA5 +0x9BA6 +0x9BA8 +0x9BAA +0x9BAB +0x9BAD +0x9BAE +0x9BAF +0x9BB5 +0x9BB6 +0x9BB8 +0x9BB9 +0x9BBD +0x9BBF +0x9BC0 +0x9BC1 +0x9BC3 +0x9BC4 +0x9BC6 +0x9BC7 +0x9BC8 +0x9BC9 +0x9BCA +0x9BD3 +0x9BD4 +0x9BD5 +0x9BD6 +0x9BD7 +0x9BD9 +0x9BDA +0x9BDB +0x9BDC +0x9BDE +0x9BE0 +0x9BE1 +0x9BE2 +0x9BE4 +0x9BE5 +0x9BE6 +0x9BE7 +0x9BE8 +0x9BEA +0x9BEB +0x9BEC +0x9BF0 +0x9BF7 +0x9BF8 +0x9BFD +0x9C05 +0x9C06 +0x9C07 +0x9C08 +0x9C09 +0x9C0B +0x9C0D +0x9C0E +0x9C12 +0x9C13 +0x9C14 +0x9C17 +0x9C1C +0x9C1D +0x9C21 +0x9C23 +0x9C24 +0x9C25 +0x9C28 +0x9C29 +0x9C2B +0x9C2C +0x9C2D +0x9C31 +0x9C32 +0x9C33 +0x9C34 +0x9C36 +0x9C37 +0x9C39 +0x9C3B +0x9C3C +0x9C3D +0x9C3E +0x9C3F +0x9C40 +0x9C41 +0x9C44 +0x9C46 +0x9C48 +0x9C49 +0x9C4A +0x9C4B +0x9C4C +0x9C4D +0x9C4E +0x9C50 +0x9C52 +0x9C54 +0x9C55 +0x9C56 +0x9C57 +0x9C58 +0x9C59 +0x9C5E +0x9C5F +0x9C60 +0x9C62 +0x9C63 +0x9C66 +0x9C67 +0x9C68 +0x9C6D +0x9C6E +0x9C71 +0x9C73 +0x9C74 +0x9C75 +0x9C77 +0x9C78 +0x9C79 +0x9C7A +0x9CE5 +0x9CE6 +0x9CE7 +0x9CE9 +0x9CEA +0x9CED +0x9CF1 +0x9CF2 +0x9CF3 +0x9CF4 +0x9CF5 +0x9CF6 +0x9CF7 +0x9CF9 +0x9CFA +0x9CFB +0x9CFC +0x9CFD +0x9CFF +0x9D00 +0x9D03 +0x9D04 +0x9D05 +0x9D06 +0x9D07 +0x9D08 +0x9D09 +0x9D10 +0x9D12 +0x9D14 +0x9D15 +0x9D17 +0x9D18 +0x9D19 +0x9D1B +0x9D1D +0x9D1E +0x9D1F +0x9D20 +0x9D22 +0x9D23 +0x9D25 +0x9D26 +0x9D28 +0x9D29 +0x9D2D +0x9D2E +0x9D2F +0x9D30 +0x9D31 +0x9D33 +0x9D36 +0x9D37 +0x9D38 +0x9D3B +0x9D3D +0x9D3E +0x9D3F +0x9D40 +0x9D41 +0x9D42 +0x9D43 +0x9D45 +0x9D4A +0x9D4B +0x9D4C +0x9D4F +0x9D51 +0x9D52 +0x9D53 +0x9D54 +0x9D56 +0x9D57 +0x9D58 +0x9D59 +0x9D5A +0x9D5B +0x9D5C +0x9D5D +0x9D5F +0x9D60 +0x9D61 +0x9D67 +0x9D68 +0x9D69 +0x9D6A +0x9D6B +0x9D6C +0x9D6F +0x9D70 +0x9D71 +0x9D72 +0x9D73 +0x9D74 +0x9D75 +0x9D77 +0x9D78 +0x9D79 +0x9D7B +0x9D7D +0x9D7F +0x9D80 +0x9D81 +0x9D82 +0x9D84 +0x9D85 +0x9D86 +0x9D87 +0x9D88 +0x9D89 +0x9D8A +0x9D8B +0x9D8C +0x9D90 +0x9D92 +0x9D94 +0x9D96 +0x9D97 +0x9D98 +0x9D99 +0x9D9A +0x9D9B +0x9D9C +0x9D9D +0x9D9E +0x9D9F +0x9DA0 +0x9DA1 +0x9DA2 +0x9DA3 +0x9DA4 +0x9DA6 +0x9DA7 +0x9DA8 +0x9DA9 +0x9DAA +0x9DAC +0x9DAD +0x9DAF +0x9DB1 +0x9DB2 +0x9DB3 +0x9DB4 +0x9DB5 +0x9DB6 +0x9DB7 +0x9DB8 +0x9DB9 +0x9DBA +0x9DBB +0x9DBC +0x9DBE +0x9DBF +0x9DC1 +0x9DC2 +0x9DC3 +0x9DC5 +0x9DC7 +0x9DC8 +0x9DCA +0x9DCB +0x9DCC +0x9DCD +0x9DCE +0x9DCF +0x9DD0 +0x9DD1 +0x9DD2 +0x9DD3 +0x9DD5 +0x9DD6 +0x9DD7 +0x9DD8 +0x9DD9 +0x9DDA +0x9DDB +0x9DDC +0x9DDD +0x9DDE +0x9DDF +0x9DE1 +0x9DE2 +0x9DE3 +0x9DE4 +0x9DE5 +0x9DE6 +0x9DE8 +0x9DE9 +0x9DEB +0x9DEC +0x9DED +0x9DEE +0x9DEF +0x9DF0 +0x9DF2 +0x9DF3 +0x9DF4 +0x9DF5 +0x9DF6 +0x9DF7 +0x9DF8 +0x9DF9 +0x9DFA +0x9DFB +0x9DFD +0x9DFE +0x9DFF +0x9E00 +0x9E01 +0x9E02 +0x9E03 +0x9E04 +0x9E05 +0x9E06 +0x9E07 +0x9E09 +0x9E0B +0x9E0D +0x9E0F +0x9E10 +0x9E11 +0x9E12 +0x9E13 +0x9E14 +0x9E15 +0x9E17 +0x9E19 +0x9E1A +0x9E1B +0x9E1D +0x9E1E +0x9E75 +0x9E79 +0x9E7A +0x9E7C +0x9E7D +0x9E7F +0x9E80 +0x9E82 +0x9E83 +0x9E86 +0x9E87 +0x9E88 +0x9E89 +0x9E8A +0x9E8B +0x9E8C +0x9E8D +0x9E8E +0x9E91 +0x9E92 +0x9E93 +0x9E94 +0x9E97 +0x9E99 +0x9E9A +0x9E9B +0x9E9C +0x9E9D +0x9E9F +0x9EA0 +0x9EA1 +0x9EA4 +0x9EA5 +0x9EA7 +0x9EA9 +0x9EAD +0x9EAE +0x9EB0 +0x9EB4 +0x9EB5 +0x9EB6 +0x9EB7 +0x9EBB +0x9EBC +0x9EBE +0x9EC0 +0x9EC2 +0x9EC3 +0x9EC8 +0x9ECC +0x9ECD +0x9ECE +0x9ECF +0x9ED0 +0x9ED1 +0x9ED3 +0x9ED4 +0x9ED5 +0x9ED6 +0x9ED8 +0x9EDA +0x9EDB +0x9EDC +0x9EDD +0x9EDE +0x9EDF +0x9EE0 +0x9EE4 +0x9EE5 +0x9EE6 +0x9EE7 +0x9EE8 +0x9EEB +0x9EED +0x9EEE +0x9EEF +0x9EF0 +0x9EF2 +0x9EF3 +0x9EF4 +0x9EF5 +0x9EF6 +0x9EF7 +0x9EF9 +0x9EFA +0x9EFB +0x9EFC +0x9EFD +0x9EFF +0x9F00 +0x9F01 +0x9F06 +0x9F07 +0x9F09 +0x9F0A +0x9F0E +0x9F0F +0x9F10 +0x9F12 +0x9F13 +0x9F15 +0x9F16 +0x9F18 +0x9F19 +0x9F1A +0x9F1B +0x9F1C +0x9F1E +0x9F20 +0x9F22 +0x9F23 +0x9F24 +0x9F25 +0x9F28 +0x9F29 +0x9F2A +0x9F2B +0x9F2C +0x9F2D +0x9F2E +0x9F2F +0x9F30 +0x9F31 +0x9F32 +0x9F33 +0x9F34 +0x9F35 +0x9F36 +0x9F37 +0x9F38 +0x9F3B +0x9F3D +0x9F3E +0x9F40 +0x9F41 +0x9F42 +0x9F43 +0x9F46 +0x9F47 +0x9F48 +0x9F49 +0x9F4A +0x9F4B +0x9F4C +0x9F4D +0x9F4E +0x9F4F +0x9F52 +0x9F54 +0x9F55 +0x9F56 +0x9F57 +0x9F58 +0x9F59 +0x9F5B +0x9F5C +0x9F5D +0x9F5E +0x9F5F +0x9F60 +0x9F61 +0x9F63 +0x9F64 +0x9F65 +0x9F66 +0x9F67 +0x9F6A +0x9F6B +0x9F6C +0x9F6E +0x9F6F +0x9F70 +0x9F71 +0x9F72 +0x9F74 +0x9F75 +0x9F76 +0x9F77 +0x9F78 +0x9F79 +0x9F7A +0x9F7B +0x9F7E +0x9F8D +0x9F90 +0x9F91 +0x9F92 +0x9F94 +0x9F95 +0x9F98 +0x9F9C +0x9FA0 +0x9FA2 +0x9FA4 +0xFA0C +0xFA0D diff --git a/fontconfig/fc-lang/zu.orth b/fontconfig/fc-lang/zu.orth index 8be8ea482..4aff79440 100644 --- a/fontconfig/fc-lang/zu.orth +++ b/fontconfig/fc-lang/zu.orth @@ -1,29 +1,29 @@ -# -# fontconfig/fc-lang/zu.orth -# -# Copyright © 2002 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. -# -# Zulu (zu) -# -# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf -# -0041-005a -0061-007a +# +# fontconfig/fc-lang/zu.orth +# +# Copyright © 2002 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. +# +# Zulu (zu) +# +# Orthography taken from http://www.ideography.co.uk/library/pdf/charsets.pdf +# +0041-005a +0061-007a diff --git a/fontconfig/fc-list/Makefile.am b/fontconfig/fc-list/Makefile.am index 9edb35e3a..d40700a4e 100644 --- a/fontconfig/fc-list/Makefile.am +++ b/fontconfig/fc-list/Makefile.am @@ -1,59 +1,59 @@ -# -# fontconfig/fc-list/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -DOC2MAN = docbook2man - -FC_LIST_SRC=${top_srcdir}/fc-list - -SGML = ${FC_LIST_SRC}/fc-list.sgml - -bin_PROGRAMS=fc-list - -INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) - -BUILT_MANS=fc-list.1 - -if ENABLE_DOCS -man_MANS=${BUILT_MANS} -endif - -EXTRA_DIST=fc-list.sgml $(BUILT_MANS) - -fc_list_LDADD = ${top_builddir}/src/libfontconfig.la - -if USEDOCBOOK - -${man_MANS}: ${SGML} - $(RM) $@ - $(DOC2MAN) ${SGML} - $(RM) manpage.* - -all-local: $(man_MANS) - -clean-local: - $(RM) $(man_MANS) - -else -all-local: -clean-local: -endif +# +# fontconfig/fc-list/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +DOC2MAN = docbook2man + +FC_LIST_SRC=${top_srcdir}/fc-list + +SGML = ${FC_LIST_SRC}/fc-list.sgml + +bin_PROGRAMS=fc-list + +INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) + +BUILT_MANS=fc-list.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-list.sgml $(BUILT_MANS) + +fc_list_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-list/fc-list.c b/fontconfig/fc-list/fc-list.c index 97ed8225b..ad383328e 100644 --- a/fontconfig/fc-list/fc-list.c +++ b/fontconfig/fc-list/fc-list.c @@ -1,200 +1,200 @@ -/* - * fontconfig/fc-list/fc-list.c - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include -#include -#include -#include -#include -#ifdef HAVE_CONFIG_H -#include -#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 -const struct option longopts[] = { - {"verbose", 0, 0, 'v'}, - {"format", 1, 0, 'f'}, - {"quiet", 0, 0, 'q'}, - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {NULL,0,0,0}, -}; -#else -#if HAVE_GETOPT -extern char *optarg; -extern int optind, opterr, optopt; -#endif -#endif - -static void -usage (char *program, int error) -{ - FILE *file = error ? stderr : stdout; -#if HAVE_GETOPT_LONG - fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [--verbose] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n", - program); -#else - fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [pattern] {element ...} \n", - program); -#endif - fprintf (file, "List fonts matching [pattern]\n"); - fprintf (file, "\n"); -#if HAVE_GETOPT_LONG - fprintf (file, " -v, --verbose display entire font pattern verbosely\n"); - fprintf (file, " -f, --format=FORMAT use the given output format\n"); - fprintf (file, " -q, --quiet suppress all normal output, exit 1 if no fonts matched\n"); - fprintf (file, " -V, --version display font config version and exit\n"); - fprintf (file, " -h, --help display this help and exit\n"); -#else - fprintf (file, " -v (verbose) display entire font pattern verbosely\n"); - fprintf (file, " -f FORMAT (format) use the given output format\n"); - fprintf (file, " -q, (quiet) suppress all normal output, exit 1 if no fonts matched\n"); - fprintf (file, " -V (version) display font config version and exit\n"); - fprintf (file, " -h (help) display this help and exit\n"); -#endif - exit (error); -} - -int -main (int argc, char **argv) -{ - int verbose = 0; - int quiet = 0; - FcChar8 *format = NULL; - int nfont = 0; - int i; - FcObjectSet *os = 0; - FcFontSet *fs; - FcPattern *pat; -#if HAVE_GETOPT_LONG || HAVE_GETOPT - int c; - -#if HAVE_GETOPT_LONG - while ((c = getopt_long (argc, argv, "vf:qVh", longopts, NULL)) != -1) -#else - while ((c = getopt (argc, argv, "vf:qVh")) != -1) -#endif - { - switch (c) { - case 'v': - verbose = 1; - break; - case 'f': - format = (FcChar8 *) strdup (optarg); - break; - case 'q': - quiet = 1; - break; - case 'V': - fprintf (stderr, "fontconfig version %d.%d.%d\n", - FC_MAJOR, FC_MINOR, FC_REVISION); - exit (0); - case 'h': - usage (argv[0], 0); - default: - usage (argv[0], 1); - } - } - i = optind; -#else - i = 1; -#endif - - if (!FcInit ()) - { - fprintf (stderr, "Can't init font config library\n"); - return 1; - } - if (argv[i]) - { - pat = FcNameParse ((FcChar8 *) argv[i]); - while (argv[++i]) - { - if (!os) - os = FcObjectSetCreate (); - FcObjectSetAdd (os, argv[i]); - } - } - else - pat = FcPatternCreate (); - if (quiet && !os) - os = FcObjectSetCreate (); - if (!verbose && !format && !os) - os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, (char *) 0); - if (!format) - format = "%{=fclist}\n"; - fs = FcFontList (0, pat, os); - if (os) - FcObjectSetDestroy (os); - if (pat) - FcPatternDestroy (pat); - - if (!quiet && fs) - { - int j; - - for (j = 0; j < fs->nfont; j++) - { - if (verbose) - { - FcPatternPrint (fs->fonts[j]); - } - else - { - FcChar8 *s; - - s = FcPatternFormat (fs->fonts[j], format); - if (s) - { - printf ("%s", s); - free (s); - } - } - } - } - - if (fs) { - nfont = fs->nfont; - FcFontSetDestroy (fs); - } - - FcFini (); - - return quiet ? (nfont == 0 ? 1 : 0) : 0; -} +/* + * fontconfig/fc-list/fc-list.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include +#include +#include +#include +#include +#ifdef HAVE_CONFIG_H +#include +#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 +const struct option longopts[] = { + {"verbose", 0, 0, 'v'}, + {"format", 1, 0, 'f'}, + {"quiet", 0, 0, 'q'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [--verbose] [--format=FORMAT] [--quiet] [--version] [--help] [pattern] {element ...} \n", + program); +#else + fprintf (file, "usage: %s [-vqVh] [-f FORMAT] [pattern] {element ...} \n", + program); +#endif + fprintf (file, "List fonts matching [pattern]\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -v, --verbose display entire font pattern verbosely\n"); + fprintf (file, " -f, --format=FORMAT use the given output format\n"); + fprintf (file, " -q, --quiet suppress all normal output, exit 1 if no fonts matched\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -v (verbose) display entire font pattern verbosely\n"); + fprintf (file, " -f FORMAT (format) use the given output format\n"); + fprintf (file, " -q, (quiet) suppress all normal output, exit 1 if no fonts matched\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +int +main (int argc, char **argv) +{ + int verbose = 0; + int quiet = 0; + FcChar8 *format = NULL; + int nfont = 0; + int i; + FcObjectSet *os = 0; + FcFontSet *fs; + FcPattern *pat; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "vf:qVh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "vf:qVh")) != -1) +#endif + { + switch (c) { + case 'v': + verbose = 1; + break; + case 'f': + format = (FcChar8 *) strdup (optarg); + break; + case 'q': + quiet = 1; + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (!FcInit ()) + { + fprintf (stderr, "Can't init font config library\n"); + return 1; + } + if (argv[i]) + { + pat = FcNameParse ((FcChar8 *) argv[i]); + while (argv[++i]) + { + if (!os) + os = FcObjectSetCreate (); + FcObjectSetAdd (os, argv[i]); + } + } + else + pat = FcPatternCreate (); + if (quiet && !os) + os = FcObjectSetCreate (); + if (!verbose && !format && !os) + os = FcObjectSetBuild (FC_FAMILY, FC_STYLE, FC_FILE, (char *) 0); + if (!format) + format = "%{=fclist}\n"; + fs = FcFontList (0, pat, os); + if (os) + FcObjectSetDestroy (os); + if (pat) + FcPatternDestroy (pat); + + if (!quiet && fs) + { + int j; + + for (j = 0; j < fs->nfont; j++) + { + if (verbose) + { + FcPatternPrint (fs->fonts[j]); + } + else + { + FcChar8 *s; + + s = FcPatternFormat (fs->fonts[j], format); + if (s) + { + printf ("%s", s); + free (s); + } + } + } + } + + if (fs) { + nfont = fs->nfont; + FcFontSetDestroy (fs); + } + + FcFini (); + + return quiet ? (nfont == 0 ? 1 : 0) : 0; +} diff --git a/fontconfig/fc-list/fc-list.sgml b/fontconfig/fc-list/fc-list.sgml index 7f0c23023..c4a82cd6f 100644 --- a/fontconfig/fc-list/fc-list.sgml +++ b/fontconfig/fc-list/fc-list.sgml @@ -1,215 +1,215 @@ - 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. - - --> - - - Josselin"> - Mouette"> - - Aug 13, 2008"> - - 1"> - joss@debian.org"> - - fc-list"> - - - Debian"> - GNU"> - GPL"> -]> - - - -
- &dhemail; -
- - &dhfirstname; - &dhsurname; - - - 2003 - &dhusername; - - &dhdate; -
- - &dhucpackage; - - &dhsection; - - - &dhpackage; - - list available fonts - - - - &dhpackage; - - - - - - - - - - - - - - - - DESCRIPTION - - &dhpackage; 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. - - - OPTIONS - - This program follows the usual &gnu; command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. - - - - - - - - Print verbose output of the whole font pattern for each match, - or elements if any is - provided. - - - - - - - - - Format output according to the format specifier - format. - - - - - - - - Show version of the program and exit. - - - - - - - - Show summary of options. - - - - - - - If this argument is set, only fonts matching - pattern are displayed. - - - - - - - If set, the element property - is displayed for matching fonts. - - - - - - - EXAMPLES - - - - fc-list - Lists all font faces. - - - fc-list :lang=hi - Lists font faces that cover Hindi. - - - fc-list : family style file spacing - Lists the filename and spacing value for each font - face. : is an empty pattern that matches all - fonts. - - - - - - - SEE ALSO - - - fc-match(1) - FcFontList(3) - FcPatternFormat(3) - fc-cat(1) - fc-cache(1) - fc-pattern(1) - fc-query(1) - fc-scan(1) - - - The fontconfig user's guide, in HTML format: - /usr/share/doc/fontconfig/fontconfig-user.html. - - - - AUTHOR - - This manual page was written by Keith Packard - keithp@keithp.com and &dhusername; &dhemail;. - - -
- - + 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. + + --> + + + Josselin"> + Mouette"> + + Aug 13, 2008"> + + 1"> + joss@debian.org"> + + fc-list"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + list available fonts + + + + &dhpackage; + + + + + + + + + + + + + + + + DESCRIPTION + + &dhpackage; 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. + + + OPTIONS + + This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. + + + + + + + + Print verbose output of the whole font pattern for each match, + or elements if any is + provided. + + + + + + + + + Format output according to the format specifier + format. + + + + + + + + Show version of the program and exit. + + + + + + + + Show summary of options. + + + + + + + If this argument is set, only fonts matching + pattern are displayed. + + + + + + + If set, the element property + is displayed for matching fonts. + + + + + + + EXAMPLES + + + + fc-list + Lists all font faces. + + + fc-list :lang=hi + Lists font faces that cover Hindi. + + + fc-list : family style file spacing + Lists the filename and spacing value for each font + face. : is an empty pattern that matches all + fonts. + + + + + + + SEE ALSO + + + fc-match(1) + FcFontList(3) + FcPatternFormat(3) + fc-cat(1) + fc-cache(1) + fc-pattern(1) + fc-query(1) + fc-scan(1) + + + The fontconfig user's guide, in HTML format: + /usr/share/doc/fontconfig/fontconfig-user.html. + + + + AUTHOR + + This manual page was written by Keith Packard + keithp@keithp.com and &dhusername; &dhemail;. + + +
+ + diff --git a/fontconfig/fc-match/Makefile.am b/fontconfig/fc-match/Makefile.am index f4244b6a5..94fc7d906 100644 --- a/fontconfig/fc-match/Makefile.am +++ b/fontconfig/fc-match/Makefile.am @@ -1,59 +1,59 @@ -# -# fontconfig/fc-match/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -bin_PROGRAMS=fc-match - -DOC2MAN = docbook2man - -FC_MATCH_SRC=${top_srcdir}/fc-match - -SGML = ${FC_MATCH_SRC}/fc-match.sgml - -INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) - -BUILT_MANS=fc-match.1 - -if ENABLE_DOCS -man_MANS=${BUILT_MANS} -endif - -EXTRA_DIST=fc-match.sgml $(BUILT_MANS) - -fc_match_LDADD = ${top_builddir}/src/libfontconfig.la - -if USEDOCBOOK - -${man_MANS}: ${SGML} - $(RM) $@ - $(DOC2MAN) ${SGML} - $(RM) manpage.* - -all-local: $(man_MANS) - -clean-local: - $(RM) $(man_MANS) - -else -all-local: -clean-local: -endif +# +# fontconfig/fc-match/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +bin_PROGRAMS=fc-match + +DOC2MAN = docbook2man + +FC_MATCH_SRC=${top_srcdir}/fc-match + +SGML = ${FC_MATCH_SRC}/fc-match.sgml + +INCLUDES=-I${top_srcdir} $(WARN_CFLAGS) + +BUILT_MANS=fc-match.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-match.sgml $(BUILT_MANS) + +fc_match_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-match/fc-match.c b/fontconfig/fc-match/fc-match.c index 929eda59b..e64b4bcdd 100644 --- a/fontconfig/fc-match/fc-match.c +++ b/fontconfig/fc-match/fc-match.c @@ -1,243 +1,243 @@ -/* - * fontconfig/fc-match/fc-match.c - * - * Copyright © 2003 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include -#else -#ifdef linux -#define HAVE_GETOPT_LONG 1 -#endif -#define HAVE_GETOPT 1 -#endif - -#include -#include -#include -#include -#include - -#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 -static const struct option longopts[] = { - {"sort", 0, 0, 's'}, - {"all", 0, 0, 'a'}, - {"verbose", 0, 0, 'v'}, - {"format", 1, 0, 'f'}, - {"version", 0, 0, 'V'}, - {"help", 0, 0, 'h'}, - {NULL,0,0,0}, -}; -#else -#if HAVE_GETOPT -extern char *optarg; -extern int optind, opterr, optopt; -#endif -#endif - -static void -usage (char *program, int error) -{ - FILE *file = error ? stderr : stdout; -#if HAVE_GETOPT_LONG - fprintf (file, "usage: %s [-savVh] [-f FORMAT] [--sort] [--all] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n", - program); -#else - fprintf (file, "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n", - program); -#endif - fprintf (file, "List best font matching [pattern]\n"); - fprintf (file, "\n"); -#if HAVE_GETOPT_LONG - fprintf (file, " -s, --sort display sorted list of matches\n"); - fprintf (file, " -a, --all display unpruned sorted list of matches\n"); - fprintf (file, " -v, --verbose display entire font pattern verbosely\n"); - fprintf (file, " -f, --format=FORMAT use the given output format\n"); - fprintf (file, " -V, --version display font config version and exit\n"); - fprintf (file, " -h, --help display this help and exit\n"); -#else - fprintf (file, " -s, (sort) display sorted list of matches\n"); - fprintf (file, " -a (all) display unpruned sorted list of matches\n"); - fprintf (file, " -v (verbose) display entire font pattern verbosely\n"); - fprintf (file, " -f FORMAT (format) use the given output format\n"); - fprintf (file, " -V (version) display font config version and exit\n"); - fprintf (file, " -h (help) display this help and exit\n"); -#endif - exit (error); -} - -int -main (int argc, char **argv) -{ - int verbose = 0; - int sort = 0, all = 0; - FcChar8 *format = NULL; - int i; - FcObjectSet *os = 0; - FcFontSet *fs; - FcPattern *pat; - FcResult result; -#if HAVE_GETOPT_LONG || HAVE_GETOPT - int c; - -#if HAVE_GETOPT_LONG - while ((c = getopt_long (argc, argv, "asvf:Vh", longopts, NULL)) != -1) -#else - while ((c = getopt (argc, argv, "asvf:Vh")) != -1) -#endif - { - switch (c) { - case 'a': - all = 1; - break; - case 's': - sort = 1; - break; - case 'v': - verbose = 1; - break; - case 'f': - format = (FcChar8 *) strdup (optarg); - break; - case 'V': - fprintf (stderr, "fontconfig version %d.%d.%d\n", - FC_MAJOR, FC_MINOR, FC_REVISION); - exit (0); - case 'h': - usage (argv[0], 0); - default: - usage (argv[0], 1); - } - } - i = optind; -#else - i = 1; -#endif - - if (!FcInit ()) - { - fprintf (stderr, "Can't init font config library\n"); - return 1; - } - if (argv[i]) - { - pat = FcNameParse ((FcChar8 *) argv[i]); - while (argv[++i]) - { - if (!os) - os = FcObjectSetCreate (); - FcObjectSetAdd (os, argv[i]); - } - } - else - pat = FcPatternCreate (); - - if (!pat) - return 1; - - FcConfigSubstitute (0, pat, FcMatchPattern); - FcDefaultSubstitute (pat); - - fs = FcFontSetCreate (); - - if (sort || all) - { - FcFontSet *font_patterns; - int j; - font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result); - - for (j = 0; j < font_patterns->nfont; j++) - { - FcPattern *font_pattern; - - font_pattern = FcFontRenderPrepare (NULL, pat, font_patterns->fonts[j]); - if (font_pattern) - FcFontSetAdd (fs, font_pattern); - } - - FcFontSetSortDestroy (font_patterns); - } - else - { - FcPattern *match; - match = FcFontMatch (0, pat, &result); - if (match) - FcFontSetAdd (fs, match); - } - FcPatternDestroy (pat); - - if (!format) - { - if (os) - format = "%{=unparse}\n"; - else - format = "%{=fcmatch}\n"; - } - - if (fs) - { - int j; - - for (j = 0; j < fs->nfont; j++) - { - FcPattern *font; - - font = FcPatternFilter (fs->fonts[j], os); - - if (verbose) - { - FcPatternPrint (font); - } - else - { - FcChar8 *s; - - s = FcPatternFormat (font, format); - if (s) - { - printf ("%s", s); - free (s); - } - } - - FcPatternDestroy (font); - } - FcFontSetDestroy (fs); - } - - if (os) - FcObjectSetDestroy (os); - - FcFini (); - - return 0; -} +/* + * fontconfig/fc-match/fc-match.c + * + * Copyright © 2003 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifdef HAVE_CONFIG_H +#include +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include +#include +#include +#include +#include + +#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 +static const struct option longopts[] = { + {"sort", 0, 0, 's'}, + {"all", 0, 0, 'a'}, + {"verbose", 0, 0, 'v'}, + {"format", 1, 0, 'f'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-savVh] [-f FORMAT] [--sort] [--all] [--verbose] [--format=FORMAT] [--version] [--help] [pattern] {element...}\n", + program); +#else + fprintf (file, "usage: %s [-savVh] [-f FORMAT] [pattern] {element...}\n", + program); +#endif + fprintf (file, "List best font matching [pattern]\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -s, --sort display sorted list of matches\n"); + fprintf (file, " -a, --all display unpruned sorted list of matches\n"); + fprintf (file, " -v, --verbose display entire font pattern verbosely\n"); + fprintf (file, " -f, --format=FORMAT use the given output format\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -s, (sort) display sorted list of matches\n"); + fprintf (file, " -a (all) display unpruned sorted list of matches\n"); + fprintf (file, " -v (verbose) display entire font pattern verbosely\n"); + fprintf (file, " -f FORMAT (format) use the given output format\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +int +main (int argc, char **argv) +{ + int verbose = 0; + int sort = 0, all = 0; + FcChar8 *format = NULL; + int i; + FcObjectSet *os = 0; + FcFontSet *fs; + FcPattern *pat; + FcResult result; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "asvf:Vh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "asvf:Vh")) != -1) +#endif + { + switch (c) { + case 'a': + all = 1; + break; + case 's': + sort = 1; + break; + case 'v': + verbose = 1; + break; + case 'f': + format = (FcChar8 *) strdup (optarg); + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (!FcInit ()) + { + fprintf (stderr, "Can't init font config library\n"); + return 1; + } + if (argv[i]) + { + pat = FcNameParse ((FcChar8 *) argv[i]); + while (argv[++i]) + { + if (!os) + os = FcObjectSetCreate (); + FcObjectSetAdd (os, argv[i]); + } + } + else + pat = FcPatternCreate (); + + if (!pat) + return 1; + + FcConfigSubstitute (0, pat, FcMatchPattern); + FcDefaultSubstitute (pat); + + fs = FcFontSetCreate (); + + if (sort || all) + { + FcFontSet *font_patterns; + int j; + font_patterns = FcFontSort (0, pat, all ? FcFalse : FcTrue, 0, &result); + + for (j = 0; j < font_patterns->nfont; j++) + { + FcPattern *font_pattern; + + font_pattern = FcFontRenderPrepare (NULL, pat, font_patterns->fonts[j]); + if (font_pattern) + FcFontSetAdd (fs, font_pattern); + } + + FcFontSetSortDestroy (font_patterns); + } + else + { + FcPattern *match; + match = FcFontMatch (0, pat, &result); + if (match) + FcFontSetAdd (fs, match); + } + FcPatternDestroy (pat); + + if (!format) + { + if (os) + format = "%{=unparse}\n"; + else + format = "%{=fcmatch}\n"; + } + + if (fs) + { + int j; + + for (j = 0; j < fs->nfont; j++) + { + FcPattern *font; + + font = FcPatternFilter (fs->fonts[j], os); + + if (verbose) + { + FcPatternPrint (font); + } + else + { + FcChar8 *s; + + s = FcPatternFormat (font, format); + if (s) + { + printf ("%s", s); + free (s); + } + } + + FcPatternDestroy (font); + } + FcFontSetDestroy (fs); + } + + if (os) + FcObjectSetDestroy (os); + + FcFini (); + + return 0; +} diff --git a/fontconfig/fc-match/fc-match.sgml b/fontconfig/fc-match/fc-match.sgml index 5cc879037..f66a021c0 100644 --- a/fontconfig/fc-match/fc-match.sgml +++ b/fontconfig/fc-match/fc-match.sgml @@ -1,217 +1,217 @@ - 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. - - --> - - - Patrick"> - Lam"> - - Aug 13, 2008"> - - 1"> - plam@csail.mit.edu"> - - fc-match"> - - - Debian"> - GNU"> - GPL"> -]> - - - -
- &dhemail; -
- - &dhfirstname; - &dhsurname; - - - 2003 - &dhusername; - - &dhdate; -
- - &dhucpackage; - - &dhsection; - - - &dhpackage; - - match available fonts - - - - &dhpackage; - - - - - - - - - - - - - - - - - - DESCRIPTION - - &dhpackage; matches - pattern (empty -pattern by default) using the normal fontconfig matching rules to find -the best font available. If is given, the sorted list of best -matching fonts is displayed. -The option works like - except that no pruning is done on the list of fonts. -If any elements are specified, only those are printed. -Otherwise short file name, family, and style are printed, unless verbose -output is requested. - - - OPTIONS - - This program follows the usual &gnu; command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. - - - - - - - - Displays sorted list of best matching fonts, but do not do any - pruning on the list. - - - - - - - - Displays sorted list of best matching fonts. - - - - - - - - Print verbose output of the whole font pattern for each match, - or elements if any is - provided. - - - - - - - - - Format output according to the format specifier - format. - - - - - - - - Show version of the program and exit. - - - - - - - - Show summary of options. - - - - - - - Displays fonts matching - pattern (uses empty pattern by default). - - - - - - - If set, the element property - is displayed for matching fonts. - - - - - - - SEE ALSO - - - fc-list(1) - FcFontMatch(3) - FcFontSort(3) - FcPatternFormat(3) - fc-cat(1) - fc-cache(1) - fc-pattern(1) - fc-query(1) - fc-scan(1) - - - The fontconfig user's guide, in HTML format: - /usr/share/doc/fontconfig/fontconfig-user.html. - - - - AUTHOR - - This manual page was updated by &dhusername; &dhemail;. - - -
- - + 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. + + --> + + + Patrick"> + Lam"> + + Aug 13, 2008"> + + 1"> + plam@csail.mit.edu"> + + fc-match"> + + + Debian"> + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2003 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + match available fonts + + + + &dhpackage; + + + + + + + + + + + + + + + + + + DESCRIPTION + + &dhpackage; matches + pattern (empty +pattern by default) using the normal fontconfig matching rules to find +the best font available. If is given, the sorted list of best +matching fonts is displayed. +The option works like + except that no pruning is done on the list of fonts. +If any elements are specified, only those are printed. +Otherwise short file name, family, and style are printed, unless verbose +output is requested. + + + OPTIONS + + This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. + + + + + + + + Displays sorted list of best matching fonts, but do not do any + pruning on the list. + + + + + + + + Displays sorted list of best matching fonts. + + + + + + + + Print verbose output of the whole font pattern for each match, + or elements if any is + provided. + + + + + + + + + Format output according to the format specifier + format. + + + + + + + + Show version of the program and exit. + + + + + + + + Show summary of options. + + + + + + + Displays fonts matching + pattern (uses empty pattern by default). + + + + + + + If set, the element property + is displayed for matching fonts. + + + + + + + SEE ALSO + + + fc-list(1) + FcFontMatch(3) + FcFontSort(3) + FcPatternFormat(3) + fc-cat(1) + fc-cache(1) + fc-pattern(1) + fc-query(1) + fc-scan(1) + + + The fontconfig user's guide, in HTML format: + /usr/share/doc/fontconfig/fontconfig-user.html. + + + + AUTHOR + + This manual page was updated by &dhusername; &dhemail;. + + +
+ + diff --git a/fontconfig/fc-query/Makefile.am b/fontconfig/fc-query/Makefile.am index a7300a3bc..132dd401c 100644 --- a/fontconfig/fc-query/Makefile.am +++ b/fontconfig/fc-query/Makefile.am @@ -1,59 +1,59 @@ -# -# fontconfig/fc-query/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -bin_PROGRAMS=fc-query - -DOC2MAN = docbook2man - -FC_QUERY_SRC=${top_srcdir}/fc-query - -SGML = ${FC_QUERY_SRC}/fc-query.sgml - -INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) - -BUILT_MANS=fc-query.1 - -if ENABLE_DOCS -man_MANS=${BUILT_MANS} -endif - -EXTRA_DIST=fc-query.sgml $(BUILT_MANS) - -fc_query_LDADD = ${top_builddir}/src/libfontconfig.la - -if USEDOCBOOK - -${man_MANS}: ${SGML} - $(RM) $@ - $(DOC2MAN) ${SGML} - $(RM) manpage.* - -all-local: $(man_MANS) - -clean-local: - $(RM) $(man_MANS) - -else -all-local: -clean-local: -endif +# +# fontconfig/fc-query/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +bin_PROGRAMS=fc-query + +DOC2MAN = docbook2man + +FC_QUERY_SRC=${top_srcdir}/fc-query + +SGML = ${FC_QUERY_SRC}/fc-query.sgml + +INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) + +BUILT_MANS=fc-query.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-query.sgml $(BUILT_MANS) + +fc_query_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-query/fc-query.c b/fontconfig/fc-query/fc-query.c index efb1aa0e4..0680b92cf 100644 --- a/fontconfig/fc-query/fc-query.c +++ b/fontconfig/fc-query/fc-query.c @@ -1,191 +1,191 @@ -/* - * fontconfig/fc-query/fc-query.c - * - * Copyright © 2003 Keith Packard - * Copyright © 2008 Red Hat, Inc. - * Red Hat Author(s): Behdad Esfahbod - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include -#else -#ifdef linux -#define HAVE_GETOPT_LONG 1 -#endif -#define HAVE_GETOPT 1 -#endif - -#include -#include -#include -#include -#include -#include - -#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 -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 +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include +#include +#include +#include +#include +#include + +#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 +static const struct option longopts[] = { + {"index", 1, 0, 'i'}, + {"format", 1, 0, 'f'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] [--index index] [--format FORMAT] [--version] [--help] font-file...\n", + program); +#else + fprintf (file, "usage: %s [-Vh] [-i index] [-f FORMAT] font-file...\n", + program); +#endif + fprintf (file, "Query font files and print resulting pattern(s)\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -i, --index INDEX display the INDEX face of each font file only\n"); + fprintf (file, " -f, --format=FORMAT use the given output format\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -i INDEX (index) display the INDEX face of each font file only\n"); + fprintf (file, " -f FORMAT (format) use the given output format\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +int +main (int argc, char **argv) +{ + int index_set = 0; + int set_index = 0; + FcChar8 *format = NULL; + int err = 0; + int i; + FcBlanks *blanks; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "i:f:Vh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "i:f:Vh")) != -1) +#endif + { + switch (c) { + case 'i': + index_set = 1; + set_index = atoi (optarg); + break; + case 'f': + format = (FcChar8 *) strdup (optarg); + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (i == argc) + usage (argv[0], 1); + + if (!FcInit ()) + { + fprintf (stderr, "Can't init font config library\n"); + return 1; + } + + blanks = FcConfigGetBlanks (NULL); + + for (; i < argc; i++) + { + int index; + int count = 0; + + index = set_index; + + do { + FcPattern *pat; + + pat = FcFreeTypeQuery ((FcChar8 *) argv[i], index, blanks, &count); + if (pat) + { + if (format) + { + FcChar8 *s; + + s = FcPatternFormat (pat, format); + if (s) + { + printf ("%s", s); + free (s); + } + } + else + { + FcPatternPrint (pat); + } + + FcPatternDestroy (pat); + } + else + { + fprintf (stderr, "Can't query face %d of font file %s\n", + index, argv[i]); + err = 1; + } + + index++; + } while (!index_set && index < count); + } + + FcFini (); + return err; +} diff --git a/fontconfig/fc-query/fc-query.sgml b/fontconfig/fc-query/fc-query.sgml index e81e7bf14..5351d1e4d 100644 --- a/fontconfig/fc-query/fc-query.sgml +++ b/fontconfig/fc-query/fc-query.sgml @@ -1,192 +1,192 @@ - 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. - - --> - - - Behdad"> - Esfahbod"> - - Aug 13, 2008"> - - 1"> - behdad@behdad.org"> - - fc-query"> - - - GNU"> - GPL"> -]> - - - -
- &dhemail; -
- - &dhfirstname; - &dhsurname; - - - 2008 - &dhusername; - - &dhdate; -
- - &dhucpackage; - - &dhsection; - - - &dhpackage; - - query font files - - - - &dhpackage; - - - - - - - - - - - - - - - - - - - DESCRIPTION - - &dhpackage; queries - font-file(s) using the normal fontconfig - rules and prints out font pattern for each face found. - If is given, only one face of each file is - queried, otherwise all faces are queried. - - - - OPTIONS - - This program follows the usual &gnu; command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. - - - - - - - - - Only query face indexed index of - each file. - - - - - - - - - Format output according to the format specifier - format. - - - - - - - - Show version of the program and exit. - - - - - - - - Show summary of options. - - - - - - - Query font-file for font faces. - - - - - - - RETURN CODES - fc-query returns error code 0 for successful parsing, - or 1 if any errors occured or if at least one font face could not be opened. - - - - SEE ALSO - - - fc-scan(1) - FcFreeTypeQuery(3) - FcPatternFormat(3) - fc-cat(1) - fc-cache(1) - fc-list(1) - fc-match(1) - fc-pattern(1) - - - The fontconfig user's guide, in HTML format: - /usr/share/doc/fontconfig/fontconfig-user.html. - - - - AUTHOR - - This manual page was updated by &dhusername; &dhemail;. - - -
- - + 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. + + --> + + + Behdad"> + Esfahbod"> + + Aug 13, 2008"> + + 1"> + behdad@behdad.org"> + + fc-query"> + + + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2008 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + query font files + + + + &dhpackage; + + + + + + + + + + + + + + + + + + + DESCRIPTION + + &dhpackage; queries + font-file(s) using the normal fontconfig + rules and prints out font pattern for each face found. + If is given, only one face of each file is + queried, otherwise all faces are queried. + + + + OPTIONS + + This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. + + + + + + + + + Only query face indexed index of + each file. + + + + + + + + + Format output according to the format specifier + format. + + + + + + + + Show version of the program and exit. + + + + + + + + Show summary of options. + + + + + + + Query font-file for font faces. + + + + + + + RETURN CODES + fc-query returns error code 0 for successful parsing, + or 1 if any errors occured or if at least one font face could not be opened. + + + + SEE ALSO + + + fc-scan(1) + FcFreeTypeQuery(3) + FcPatternFormat(3) + fc-cat(1) + fc-cache(1) + fc-list(1) + fc-match(1) + fc-pattern(1) + + + The fontconfig user's guide, in HTML format: + /usr/share/doc/fontconfig/fontconfig-user.html. + + + + AUTHOR + + This manual page was updated by &dhusername; &dhemail;. + + +
+ + diff --git a/fontconfig/fc-scan/Makefile.am b/fontconfig/fc-scan/Makefile.am index c786a79e9..c9d8904ae 100644 --- a/fontconfig/fc-scan/Makefile.am +++ b/fontconfig/fc-scan/Makefile.am @@ -1,59 +1,59 @@ -# -# fontconfig/fc-scan/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -bin_PROGRAMS=fc-scan - -DOC2MAN = docbook2man - -FC_SCAN_SRC=${top_srcdir}/fc-scan - -SGML = ${FC_SCAN_SRC}/fc-scan.sgml - -INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) - -BUILT_MANS=fc-scan.1 - -if ENABLE_DOCS -man_MANS=${BUILT_MANS} -endif - -EXTRA_DIST=fc-scan.sgml $(BUILT_MANS) - -fc_scan_LDADD = ${top_builddir}/src/libfontconfig.la - -if USEDOCBOOK - -${man_MANS}: ${SGML} - $(RM) $@ - $(DOC2MAN) ${SGML} - $(RM) manpage.* - -all-local: $(man_MANS) - -clean-local: - $(RM) $(man_MANS) - -else -all-local: -clean-local: -endif +# +# fontconfig/fc-scan/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +bin_PROGRAMS=fc-scan + +DOC2MAN = docbook2man + +FC_SCAN_SRC=${top_srcdir}/fc-scan + +SGML = ${FC_SCAN_SRC}/fc-scan.sgml + +INCLUDES=-I${top_srcdir} $(FREETYPE_CFLAGS) $(WARN_CFLAGS) + +BUILT_MANS=fc-scan.1 + +if ENABLE_DOCS +man_MANS=${BUILT_MANS} +endif + +EXTRA_DIST=fc-scan.sgml $(BUILT_MANS) + +fc_scan_LDADD = ${top_builddir}/src/libfontconfig.la + +if USEDOCBOOK + +${man_MANS}: ${SGML} + $(RM) $@ + $(DOC2MAN) ${SGML} + $(RM) manpage.* + +all-local: $(man_MANS) + +clean-local: + $(RM) $(man_MANS) + +else +all-local: +clean-local: +endif diff --git a/fontconfig/fc-scan/fc-scan.c b/fontconfig/fc-scan/fc-scan.c index 1843da202..ebf56064e 100644 --- a/fontconfig/fc-scan/fc-scan.c +++ b/fontconfig/fc-scan/fc-scan.c @@ -1,184 +1,184 @@ -/* - * fontconfig/fc-scan/fc-scan.c - * - * Copyright © 2003 Keith Packard - * Copyright © 2008 Red Hat, Inc. - * Red Hat Author(s): Behdad Esfahbod - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifdef HAVE_CONFIG_H -#include -#else -#ifdef linux -#define HAVE_GETOPT_LONG 1 -#endif -#define HAVE_GETOPT 1 -#endif - -#include -#include -#include -#include -#include -#include - -#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 -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 +#else +#ifdef linux +#define HAVE_GETOPT_LONG 1 +#endif +#define HAVE_GETOPT 1 +#endif + +#include +#include +#include +#include +#include +#include + +#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 +static const struct option longopts[] = { + {"format", 1, 0, 'f'}, + {"version", 0, 0, 'V'}, + {"help", 0, 0, 'h'}, + {NULL,0,0,0}, +}; +#else +#if HAVE_GETOPT +extern char *optarg; +extern int optind, opterr, optopt; +#endif +#endif + +static void +usage (char *program, int error) +{ + FILE *file = error ? stderr : stdout; +#if HAVE_GETOPT_LONG + fprintf (file, "usage: %s [-Vh] [-f FORMAT] [--format FORMAT] [--version] [--help] font-file...\n", + program); +#else + fprintf (file, "usage: %s [-Vh] [-f FORMAT] font-file...\n", + program); +#endif + fprintf (file, "Scan font files and directories, and print resulting pattern(s)\n"); + fprintf (file, "\n"); +#if HAVE_GETOPT_LONG + fprintf (file, " -f, --format=FORMAT use the given output format\n"); + fprintf (file, " -V, --version display font config version and exit\n"); + fprintf (file, " -h, --help display this help and exit\n"); +#else + fprintf (file, " -f FORMAT (format) use the given output format\n"); + fprintf (file, " -V (version) display font config version and exit\n"); + fprintf (file, " -h (help) display this help and exit\n"); +#endif + exit (error); +} + +int +main (int argc, char **argv) +{ + FcChar8 *format = NULL; + int i; + FcFontSet *fs; +#if HAVE_GETOPT_LONG || HAVE_GETOPT + int c; + +#if HAVE_GETOPT_LONG + while ((c = getopt_long (argc, argv, "f:Vh", longopts, NULL)) != -1) +#else + while ((c = getopt (argc, argv, "f:Vh")) != -1) +#endif + { + switch (c) { + case 'f': + format = (FcChar8 *) strdup (optarg); + break; + case 'V': + fprintf (stderr, "fontconfig version %d.%d.%d\n", + FC_MAJOR, FC_MINOR, FC_REVISION); + exit (0); + case 'h': + usage (argv[0], 0); + default: + usage (argv[0], 1); + } + } + i = optind; +#else + i = 1; +#endif + + if (i == argc) + usage (argv[0], 1); + + if (!FcInit ()) + { + fprintf (stderr, "Can't init font config library\n"); + return 1; + } + + fs = FcFontSetCreate (); + + for (; i < argc; i++) + { + const FcChar8 *file = (FcChar8*) argv[i]; + + if (!FcFileIsDir (file)) + FcFileScan (fs, NULL, NULL, NULL, file, FcTrue); + else + { + FcStrSet *dirs = FcStrSetCreate (); + FcStrList *strlist = FcStrListCreate (dirs); + do + { + FcDirScan (fs, dirs, NULL, NULL, file, FcTrue); + } + while ((file = FcStrListNext (strlist))); + FcStrListDone (strlist); + FcStrSetDestroy (dirs); + } + } + + for (i = 0; i < fs->nfont; i++) + { + FcPattern *pat; + + pat = fs->fonts[i]; + + if (format) + { + FcChar8 *s; + + s = FcPatternFormat (pat, format); + if (s) + { + printf ("%s", s); + free (s); + } + } + else + { + FcPatternPrint (pat); + } + } + + FcFontSetDestroy (fs); + + FcFini (); + return i > 0 ? 0 : 1; +} diff --git a/fontconfig/fc-scan/fc-scan.sgml b/fontconfig/fc-scan/fc-scan.sgml index 4c8a88d44..9af403c1f 100644 --- a/fontconfig/fc-scan/fc-scan.sgml +++ b/fontconfig/fc-scan/fc-scan.sgml @@ -1,177 +1,177 @@ - 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. - - --> - - - Behdad"> - Esfahbod"> - - Jan 15, 2009"> - - 1"> - behdad@behdad.org"> - - fc-scan"> - - - GNU"> - GPL"> -]> - - - -
- &dhemail; -
- - &dhfirstname; - &dhsurname; - - - 2008 - &dhusername; - - &dhdate; -
- - &dhucpackage; - - &dhsection; - - - &dhpackage; - - scan font files or directories - - - - &dhpackage; - - - - - - - - - - - - - - - DESCRIPTION - - &dhpackage; scans - file(s) recursively - and prints out font pattern for each face found. - - - - OPTIONS - - This program follows the usual &gnu; command line syntax, - with long options starting with two dashes (`-'). A summary of - options is included below. - - - - - - - - - Format output according to the format specifier - format. - - - - - - - - Show version of the program and exit. - - - - - - - - Show summary of options. - - - - - - - Scan file recursively for font faces. - - - - - - - RETURN CODES - fc-scan returns error code 0 if at least one font - was found or 1 otherwise. - - - - SEE ALSO - - - fc-query(1) - FcFileScan(3) - FcDirScan(3) - FcPatternFormat(3) - fc-cat(1) - fc-cache(1) - fc-list(1) - fc-match(1) - fc-pattern(1) - - - The fontconfig user's guide, in HTML format: - /usr/share/doc/fontconfig/fontconfig-user.html. - - - - AUTHOR - - This manual page was updated by &dhusername; &dhemail;. - - -
- - + 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. + + --> + + + Behdad"> + Esfahbod"> + + Jan 15, 2009"> + + 1"> + behdad@behdad.org"> + + fc-scan"> + + + GNU"> + GPL"> +]> + + + +
+ &dhemail; +
+ + &dhfirstname; + &dhsurname; + + + 2008 + &dhusername; + + &dhdate; +
+ + &dhucpackage; + + &dhsection; + + + &dhpackage; + + scan font files or directories + + + + &dhpackage; + + + + + + + + + + + + + + + DESCRIPTION + + &dhpackage; scans + file(s) recursively + and prints out font pattern for each face found. + + + + OPTIONS + + This program follows the usual &gnu; command line syntax, + with long options starting with two dashes (`-'). A summary of + options is included below. + + + + + + + + + Format output according to the format specifier + format. + + + + + + + + Show version of the program and exit. + + + + + + + + Show summary of options. + + + + + + + Scan file recursively for font faces. + + + + + + + RETURN CODES + fc-scan returns error code 0 if at least one font + was found or 1 otherwise. + + + + SEE ALSO + + + fc-query(1) + FcFileScan(3) + FcDirScan(3) + FcPatternFormat(3) + fc-cat(1) + fc-cache(1) + fc-list(1) + fc-match(1) + fc-pattern(1) + + + The fontconfig user's guide, in HTML format: + /usr/share/doc/fontconfig/fontconfig-user.html. + + + + AUTHOR + + This manual page was updated by &dhusername; &dhemail;. + + +
+ + diff --git a/fontconfig/fontconfig.pc.in b/fontconfig/fontconfig.pc.in index 811419764..7d846a533 100644 --- a/fontconfig/fontconfig.pc.in +++ b/fontconfig/fontconfig.pc.in @@ -1,16 +1,16 @@ -prefix=@prefix@ -exec_prefix=@exec_prefix@ -libdir=@libdir@ -includedir=@includedir@ -sysconfdir=@sysconfdir@ -localstatedir=@localstatedir@ -PACKAGE=@PACKAGE@ -confdir=@confdir@ -cachedir=@fc_cachedir@ - -Name: Fontconfig -Description: Font configuration and customization library -Version: @VERSION@ -Libs: -L${libdir} -lfontconfig -Libs.private: @LIBXML2_LIBS@ @EXPAT_LIBS@ @FREETYPE_LIBS@ @ICONV_LIBS@ -Cflags: -I${includedir} +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ +sysconfdir=@sysconfdir@ +localstatedir=@localstatedir@ +PACKAGE=@PACKAGE@ +confdir=@confdir@ +cachedir=@fc_cachedir@ + +Name: Fontconfig +Description: Font configuration and customization library +Version: @VERSION@ +Libs: -L${libdir} -lfontconfig +Libs.private: @LIBXML2_LIBS@ @EXPAT_LIBS@ @FREETYPE_LIBS@ @ICONV_LIBS@ +Cflags: -I${includedir} diff --git a/fontconfig/fontconfig/fcfreetype.h b/fontconfig/fontconfig/fcfreetype.h index 09799dc9d..753fdf9da 100644 --- a/fontconfig/fontconfig/fcfreetype.h +++ b/fontconfig/fontconfig/fcfreetype.h @@ -1,59 +1,59 @@ -/* - * fontconfig/fontconfig/fcfreetype.h - * - * Copyright © 2001 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef _FCFREETYPE_H_ -#define _FCFREETYPE_H_ -#include -#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 +#include FT_FREETYPE_H + +#ifndef FcPublic +#define FcPublic +#endif + +_FCFUNCPROTOBEGIN + +FcPublic FT_UInt +FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4); + +FcPublic FcCharSet * +FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing); + +FcPublic FcCharSet * +FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks); + +FcPublic FcResult +FcPatternGetFTFace (const FcPattern *p, const char *object, int n, FT_Face *f); + +FcPublic FcBool +FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f); + +FcPublic FcPattern * +FcFreeTypeQueryFace (const FT_Face face, + const FcChar8 *file, + int id, + FcBlanks *blanks); + +_FCFUNCPROTOEND + +#endif diff --git a/fontconfig/fontconfig/fcprivate.h b/fontconfig/fontconfig/fcprivate.h index e65ff9cc5..18b8c08ca 100644 --- a/fontconfig/fontconfig/fcprivate.h +++ b/fontconfig/fontconfig/fcprivate.h @@ -1,123 +1,123 @@ -/* - * fontconfig/fontconfig/fcprivate.h - * - * Copyright © 2001 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef _FCPRIVATE_H_ -#define _FCPRIVATE_H_ - -/* - * I tried this with functions that took va_list* arguments - * but portability concerns made me change these functions - * into macros (sigh). - */ - -#define FcPatternVapBuild(result, orig, va) \ -{ \ - FcPattern *__p__ = (orig); \ - const char *__o__; \ - FcValue __v__; \ - \ - if (!__p__) \ - { \ - __p__ = FcPatternCreate (); \ - if (!__p__) \ - goto _FcPatternVapBuild_bail0; \ - } \ - for (;;) \ - { \ - __o__ = va_arg (va, const char *); \ - if (!__o__) \ - break; \ - __v__.type = va_arg (va, FcType); \ - switch (__v__.type) { \ - case FcTypeVoid: \ - goto _FcPatternVapBuild_bail1; \ - case FcTypeInteger: \ - __v__.u.i = va_arg (va, int); \ - break; \ - case FcTypeDouble: \ - __v__.u.d = va_arg (va, double); \ - break; \ - case FcTypeString: \ - __v__.u.s = va_arg (va, const FcChar8 *); \ - break; \ - case FcTypeBool: \ - __v__.u.b = va_arg (va, FcBool); \ - break; \ - case FcTypeMatrix: \ - __v__.u.m = va_arg (va, const FcMatrix *); \ - break; \ - case FcTypeCharSet: \ - __v__.u.c = va_arg (va, const FcCharSet *); \ - break; \ - case FcTypeFTFace: \ - __v__.u.f = va_arg (va, FT_Face); \ - break; \ - case FcTypeLangSet: \ - __v__.u.l = va_arg (va, const FcLangSet *); \ - break; \ - } \ - if (!FcPatternAdd (__p__, __o__, __v__, FcTrue)) \ - goto _FcPatternVapBuild_bail1; \ - } \ - result = __p__; \ - goto _FcPatternVapBuild_return; \ - \ -_FcPatternVapBuild_bail1: \ - if (!orig) \ - FcPatternDestroy (__p__); \ -_FcPatternVapBuild_bail0: \ - result = (void*)0; \ - \ -_FcPatternVapBuild_return: \ - ; \ -} - - -#define FcObjectSetVapBuild(__ret__, __first__, __va__) \ -{ \ - FcObjectSet *__os__; \ - const char *__ob__; \ - \ - __ret__ = 0; \ - __os__ = FcObjectSetCreate (); \ - if (!__os__) \ - goto _FcObjectSetVapBuild_bail0; \ - __ob__ = __first__; \ - while (__ob__) \ - { \ - if (!FcObjectSetAdd (__os__, __ob__)) \ - goto _FcObjectSetVapBuild_bail1; \ - __ob__ = va_arg (__va__, const char *); \ - } \ - __ret__ = __os__; \ - \ -_FcObjectSetVapBuild_bail1: \ - if (!__ret__ && __os__) \ - FcObjectSetDestroy (__os__); \ -_FcObjectSetVapBuild_bail0: \ - ; \ -} - -#endif /* _FCPRIVATE_H_ */ - +/* + * fontconfig/fontconfig/fcprivate.h + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _FCPRIVATE_H_ +#define _FCPRIVATE_H_ + +/* + * I tried this with functions that took va_list* arguments + * but portability concerns made me change these functions + * into macros (sigh). + */ + +#define FcPatternVapBuild(result, orig, va) \ +{ \ + FcPattern *__p__ = (orig); \ + const char *__o__; \ + FcValue __v__; \ + \ + if (!__p__) \ + { \ + __p__ = FcPatternCreate (); \ + if (!__p__) \ + goto _FcPatternVapBuild_bail0; \ + } \ + for (;;) \ + { \ + __o__ = va_arg (va, const char *); \ + if (!__o__) \ + break; \ + __v__.type = va_arg (va, FcType); \ + switch (__v__.type) { \ + case FcTypeVoid: \ + goto _FcPatternVapBuild_bail1; \ + case FcTypeInteger: \ + __v__.u.i = va_arg (va, int); \ + break; \ + case FcTypeDouble: \ + __v__.u.d = va_arg (va, double); \ + break; \ + case FcTypeString: \ + __v__.u.s = va_arg (va, const FcChar8 *); \ + break; \ + case FcTypeBool: \ + __v__.u.b = va_arg (va, FcBool); \ + break; \ + case FcTypeMatrix: \ + __v__.u.m = va_arg (va, const FcMatrix *); \ + break; \ + case FcTypeCharSet: \ + __v__.u.c = va_arg (va, const FcCharSet *); \ + break; \ + case FcTypeFTFace: \ + __v__.u.f = va_arg (va, FT_Face); \ + break; \ + case FcTypeLangSet: \ + __v__.u.l = va_arg (va, const FcLangSet *); \ + break; \ + } \ + if (!FcPatternAdd (__p__, __o__, __v__, FcTrue)) \ + goto _FcPatternVapBuild_bail1; \ + } \ + result = __p__; \ + goto _FcPatternVapBuild_return; \ + \ +_FcPatternVapBuild_bail1: \ + if (!orig) \ + FcPatternDestroy (__p__); \ +_FcPatternVapBuild_bail0: \ + result = (void*)0; \ + \ +_FcPatternVapBuild_return: \ + ; \ +} + + +#define FcObjectSetVapBuild(__ret__, __first__, __va__) \ +{ \ + FcObjectSet *__os__; \ + const char *__ob__; \ + \ + __ret__ = 0; \ + __os__ = FcObjectSetCreate (); \ + if (!__os__) \ + goto _FcObjectSetVapBuild_bail0; \ + __ob__ = __first__; \ + while (__ob__) \ + { \ + if (!FcObjectSetAdd (__os__, __ob__)) \ + goto _FcObjectSetVapBuild_bail1; \ + __ob__ = va_arg (__va__, const char *); \ + } \ + __ret__ = __os__; \ + \ +_FcObjectSetVapBuild_bail1: \ + if (!__ret__ && __os__) \ + FcObjectSetDestroy (__os__); \ +_FcObjectSetVapBuild_bail0: \ + ; \ +} + +#endif /* _FCPRIVATE_H_ */ + diff --git a/fontconfig/fontconfig/fontconfig.h b/fontconfig/fontconfig/fontconfig.h index 45b23dd23..29a6ed460 100644 --- a/fontconfig/fontconfig/fontconfig.h +++ b/fontconfig/fontconfig/fontconfig.h @@ -1,974 +1,974 @@ -/* - * fontconfig/fontconfig/fontconfig.h - * - * Copyright © 2001 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef _FONTCONFIG_H_ -#define _FONTCONFIG_H_ - -#include -#include -#include - -#if defined(__GNUC__) && (__GNUC__ >= 4) -#define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0))) -#else -#define FC_ATTRIBUTE_SENTINEL(x) -#endif - -#ifndef FcPublic -#define FcPublic -#endif - -typedef unsigned char FcChar8; -typedef unsigned short FcChar16; -typedef unsigned int FcChar32; -typedef int FcBool; - -/* - * Current Fontconfig version number. This same number - * must appear in the fontconfig configure.in file. Yes, - * it'a a pain to synchronize version numbers like this. - */ - -#define FC_MAJOR 2 -#define FC_MINOR 8 -#define FC_REVISION 0 - -#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION)) - -/* - * Current font cache file format version - * This is appended to the cache files so that multiple - * versions of the library will peacefully coexist - * - * Change this value whenever the disk format for the cache file - * changes in any non-compatible way. Try to avoid such changes as - * it means multiple copies of the font information. - */ - -#define FC_CACHE_VERSION "3" - -#define FcTrue 1 -#define FcFalse 0 - -#define FC_FAMILY "family" /* String */ -#define FC_STYLE "style" /* String */ -#define FC_SLANT "slant" /* Int */ -#define FC_WEIGHT "weight" /* Int */ -#define FC_SIZE "size" /* Double */ -#define FC_ASPECT "aspect" /* Double */ -#define FC_PIXEL_SIZE "pixelsize" /* Double */ -#define FC_SPACING "spacing" /* Int */ -#define FC_FOUNDRY "foundry" /* String */ -#define FC_ANTIALIAS "antialias" /* Bool (depends) */ -#define FC_HINTING "hinting" /* Bool (true) */ -#define FC_HINT_STYLE "hintstyle" /* Int */ -#define FC_VERTICAL_LAYOUT "verticallayout" /* Bool (false) */ -#define FC_AUTOHINT "autohint" /* Bool (false) */ -#define FC_GLOBAL_ADVANCE "globaladvance" /* Bool (true) */ -#define FC_WIDTH "width" /* Int */ -#define FC_FILE "file" /* String */ -#define FC_INDEX "index" /* Int */ -#define FC_FT_FACE "ftface" /* FT_Face */ -#define FC_RASTERIZER "rasterizer" /* String */ -#define FC_OUTLINE "outline" /* Bool */ -#define FC_SCALABLE "scalable" /* Bool */ -#define FC_SCALE "scale" /* double */ -#define FC_DPI "dpi" /* double */ -#define FC_RGBA "rgba" /* Int */ -#define FC_MINSPACE "minspace" /* Bool use minimum line spacing */ -#define FC_SOURCE "source" /* String (deprecated) */ -#define FC_CHARSET "charset" /* CharSet */ -#define FC_LANG "lang" /* String RFC 3066 langs */ -#define FC_FONTVERSION "fontversion" /* Int from 'head' table */ -#define FC_FULLNAME "fullname" /* String */ -#define FC_FAMILYLANG "familylang" /* String RFC 3066 langs */ -#define FC_STYLELANG "stylelang" /* String RFC 3066 langs */ -#define FC_FULLNAMELANG "fullnamelang" /* String RFC 3066 langs */ -#define FC_CAPABILITY "capability" /* String */ -#define FC_FONTFORMAT "fontformat" /* String */ -#define FC_EMBOLDEN "embolden" /* Bool - true if emboldening needed*/ -#define FC_EMBEDDED_BITMAP "embeddedbitmap" /* Bool - true to enable embedded bitmaps */ -#define FC_DECORATIVE "decorative" /* Bool - true if style is a decorative variant */ -#define FC_LCD_FILTER "lcdfilter" /* Int */ - -#define FC_CACHE_SUFFIX ".cache-"FC_CACHE_VERSION -#define FC_DIR_CACHE_FILE "fonts.cache-"FC_CACHE_VERSION -#define FC_USER_CACHE_FILE ".fonts.cache-"FC_CACHE_VERSION - -/* Adjust outline rasterizer */ -#define FC_CHAR_WIDTH "charwidth" /* Int */ -#define FC_CHAR_HEIGHT "charheight"/* Int */ -#define FC_MATRIX "matrix" /* FcMatrix */ - -#define FC_WEIGHT_THIN 0 -#define FC_WEIGHT_EXTRALIGHT 40 -#define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT -#define FC_WEIGHT_LIGHT 50 -#define FC_WEIGHT_BOOK 75 -#define FC_WEIGHT_REGULAR 80 -#define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR -#define FC_WEIGHT_MEDIUM 100 -#define FC_WEIGHT_DEMIBOLD 180 -#define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD -#define FC_WEIGHT_BOLD 200 -#define FC_WEIGHT_EXTRABOLD 205 -#define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD -#define FC_WEIGHT_BLACK 210 -#define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK -#define FC_WEIGHT_EXTRABLACK 215 -#define FC_WEIGHT_ULTRABLACK FC_WEIGHT_EXTRABLACK - -#define FC_SLANT_ROMAN 0 -#define FC_SLANT_ITALIC 100 -#define FC_SLANT_OBLIQUE 110 - -#define FC_WIDTH_ULTRACONDENSED 50 -#define FC_WIDTH_EXTRACONDENSED 63 -#define FC_WIDTH_CONDENSED 75 -#define FC_WIDTH_SEMICONDENSED 87 -#define FC_WIDTH_NORMAL 100 -#define FC_WIDTH_SEMIEXPANDED 113 -#define FC_WIDTH_EXPANDED 125 -#define FC_WIDTH_EXTRAEXPANDED 150 -#define FC_WIDTH_ULTRAEXPANDED 200 - -#define FC_PROPORTIONAL 0 -#define FC_DUAL 90 -#define FC_MONO 100 -#define FC_CHARCELL 110 - -/* sub-pixel order */ -#define FC_RGBA_UNKNOWN 0 -#define FC_RGBA_RGB 1 -#define FC_RGBA_BGR 2 -#define FC_RGBA_VRGB 3 -#define FC_RGBA_VBGR 4 -#define FC_RGBA_NONE 5 - -/* hinting style */ -#define FC_HINT_NONE 0 -#define FC_HINT_SLIGHT 1 -#define FC_HINT_MEDIUM 2 -#define FC_HINT_FULL 3 - -/* LCD filter */ -#define FC_LCD_NONE 0 -#define FC_LCD_DEFAULT 1 -#define FC_LCD_LIGHT 2 -#define FC_LCD_LEGACY 3 - -typedef enum _FcType { - FcTypeVoid, - FcTypeInteger, - FcTypeDouble, - FcTypeString, - FcTypeBool, - FcTypeMatrix, - FcTypeCharSet, - FcTypeFTFace, - FcTypeLangSet -} FcType; - -typedef struct _FcMatrix { - double xx, xy, yx, yy; -} FcMatrix; - -#define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \ - (m)->xy = (m)->yx = 0) - -/* - * A data structure to represent the available glyphs in a font. - * This is represented as a sparse boolean btree. - */ - -typedef struct _FcCharSet FcCharSet; - -typedef struct _FcObjectType { - const char *object; - FcType type; -} FcObjectType; - -typedef struct _FcConstant { - const FcChar8 *name; - const char *object; - int value; -} FcConstant; - -typedef enum _FcResult { - FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId, - FcResultOutOfMemory -} FcResult; - -typedef struct _FcPattern FcPattern; - -typedef struct _FcLangSet FcLangSet; - -typedef struct _FcValue { - FcType type; - union { - const FcChar8 *s; - int i; - FcBool b; - double d; - const FcMatrix *m; - const FcCharSet *c; - void *f; - const FcLangSet *l; - } u; -} FcValue; - -typedef struct _FcFontSet { - int nfont; - int sfont; - FcPattern **fonts; -} FcFontSet; - -typedef struct _FcObjectSet { - int nobject; - int sobject; - const char **objects; -} FcObjectSet; - -typedef enum _FcMatchKind { - FcMatchPattern, FcMatchFont, FcMatchScan -} FcMatchKind; - -typedef enum _FcLangResult { - FcLangEqual = 0, - FcLangDifferentCountry = 1, - FcLangDifferentTerritory = 1, - FcLangDifferentLang = 2 -} FcLangResult; - -typedef enum _FcSetName { - FcSetSystem = 0, - FcSetApplication = 1 -} FcSetName; - -typedef struct _FcAtomic FcAtomic; - -#if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */ -#define _FCFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */ -#define _FCFUNCPROTOEND } -#else -#define _FCFUNCPROTOBEGIN -#define _FCFUNCPROTOEND -#endif - -typedef enum { FcEndianBig, FcEndianLittle } FcEndian; - -typedef struct _FcConfig FcConfig; - -typedef struct _FcGlobalCache FcFileCache; - -typedef struct _FcBlanks FcBlanks; - -typedef struct _FcStrList FcStrList; - -typedef struct _FcStrSet FcStrSet; - -typedef struct _FcCache FcCache; - -_FCFUNCPROTOBEGIN - -/* fcblanks.c */ -FcPublic FcBlanks * -FcBlanksCreate (void); - -FcPublic void -FcBlanksDestroy (FcBlanks *b); - -FcPublic FcBool -FcBlanksAdd (FcBlanks *b, FcChar32 ucs4); - -FcPublic FcBool -FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4); - -/* fccache.c */ - -FcPublic const FcChar8 * -FcCacheDir(const FcCache *c); - -FcPublic FcFontSet * -FcCacheCopySet(const FcCache *c); - -FcPublic const FcChar8 * -FcCacheSubdir (const FcCache *c, int i); - -FcPublic int -FcCacheNumSubdir (const FcCache *c); - -FcPublic int -FcCacheNumFont (const FcCache *c); - -FcPublic FcBool -FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config); - -FcPublic FcBool -FcDirCacheValid (const FcChar8 *cache_file); - -/* fccfg.c */ -FcPublic FcChar8 * -FcConfigHome (void); - -FcPublic FcBool -FcConfigEnableHome (FcBool enable); - -FcPublic FcChar8 * -FcConfigFilename (const FcChar8 *url); - -FcPublic FcConfig * -FcConfigCreate (void); - -FcPublic FcConfig * -FcConfigReference (FcConfig *config); - -FcPublic void -FcConfigDestroy (FcConfig *config); - -FcPublic FcBool -FcConfigSetCurrent (FcConfig *config); - -FcPublic FcConfig * -FcConfigGetCurrent (void); - -FcPublic FcBool -FcConfigUptoDate (FcConfig *config); - -FcPublic FcBool -FcConfigBuildFonts (FcConfig *config); - -FcPublic FcStrList * -FcConfigGetFontDirs (FcConfig *config); - -FcPublic FcStrList * -FcConfigGetConfigDirs (FcConfig *config); - -FcPublic FcStrList * -FcConfigGetConfigFiles (FcConfig *config); - -FcPublic FcChar8 * -FcConfigGetCache (FcConfig *config); - -FcPublic FcBlanks * -FcConfigGetBlanks (FcConfig *config); - -FcPublic FcStrList * -FcConfigGetCacheDirs (FcConfig *config); - -FcPublic int -FcConfigGetRescanInterval (FcConfig *config); - -FcPublic FcBool -FcConfigSetRescanInterval (FcConfig *config, int rescanInterval); - -FcPublic FcFontSet * -FcConfigGetFonts (FcConfig *config, - FcSetName set); - -FcPublic FcBool -FcConfigAppFontAddFile (FcConfig *config, - const FcChar8 *file); - -FcPublic FcBool -FcConfigAppFontAddDir (FcConfig *config, - const FcChar8 *dir); - -FcPublic void -FcConfigAppFontClear (FcConfig *config); - -FcPublic FcBool -FcConfigSubstituteWithPat (FcConfig *config, - FcPattern *p, - FcPattern *p_pat, - FcMatchKind kind); - -FcPublic FcBool -FcConfigSubstitute (FcConfig *config, - FcPattern *p, - FcMatchKind kind); - -/* fccharset.c */ -FcPublic FcCharSet* -FcCharSetCreate (void); - -/* deprecated alias for FcCharSetCreate */ -FcPublic FcCharSet * -FcCharSetNew (void); - -FcPublic void -FcCharSetDestroy (FcCharSet *fcs); - -FcPublic FcBool -FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4); - -FcPublic FcBool -FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4); - -FcPublic FcCharSet* -FcCharSetCopy (FcCharSet *src); - -FcPublic FcBool -FcCharSetEqual (const FcCharSet *a, const FcCharSet *b); - -FcPublic FcCharSet* -FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b); - -FcPublic FcCharSet* -FcCharSetUnion (const FcCharSet *a, const FcCharSet *b); - -FcPublic FcCharSet* -FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b); - -FcPublic FcBool -FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed); - -FcPublic FcBool -FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4); - -FcPublic FcChar32 -FcCharSetCount (const FcCharSet *a); - -FcPublic FcChar32 -FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b); - -FcPublic FcChar32 -FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b); - -FcPublic FcBool -FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b); - -#define FC_CHARSET_MAP_SIZE (256/32) -#define FC_CHARSET_DONE ((FcChar32) -1) - -FcPublic FcChar32 -FcCharSetFirstPage (const FcCharSet *a, - FcChar32 map[FC_CHARSET_MAP_SIZE], - FcChar32 *next); - -FcPublic FcChar32 -FcCharSetNextPage (const FcCharSet *a, - FcChar32 map[FC_CHARSET_MAP_SIZE], - FcChar32 *next); - -/* - * old coverage API, rather hard to use correctly - */ - -FcPublic FcChar32 -FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result); - -/* fcdbg.c */ -FcPublic void -FcValuePrint (const FcValue v); - -FcPublic void -FcPatternPrint (const FcPattern *p); - -FcPublic void -FcFontSetPrint (const FcFontSet *s); - -/* fcdefault.c */ -FcPublic void -FcDefaultSubstitute (FcPattern *pattern); - -/* fcdir.c */ -FcPublic FcBool -FcFileIsDir (const FcChar8 *file); - -FcPublic FcBool -FcFileScan (FcFontSet *set, - FcStrSet *dirs, - FcFileCache *cache, - FcBlanks *blanks, - const FcChar8 *file, - FcBool force); - -FcPublic FcBool -FcDirScan (FcFontSet *set, - FcStrSet *dirs, - FcFileCache *cache, - FcBlanks *blanks, - const FcChar8 *dir, - FcBool force); - -FcPublic FcBool -FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir); - -FcPublic FcCache * -FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file); - -FcPublic FcCache * -FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config); - -FcPublic FcCache * -FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat); - -FcPublic void -FcDirCacheUnload (FcCache *cache); - -/* fcfreetype.c */ -FcPublic FcPattern * -FcFreeTypeQuery (const FcChar8 *file, int id, FcBlanks *blanks, int *count); - -/* fcfs.c */ - -FcPublic FcFontSet * -FcFontSetCreate (void); - -FcPublic void -FcFontSetDestroy (FcFontSet *s); - -FcPublic FcBool -FcFontSetAdd (FcFontSet *s, FcPattern *font); - -/* fcinit.c */ -FcPublic FcConfig * -FcInitLoadConfig (void); - -FcPublic FcConfig * -FcInitLoadConfigAndFonts (void); - -FcPublic FcBool -FcInit (void); - -FcPublic void -FcFini (void); - -FcPublic int -FcGetVersion (void); - -FcPublic FcBool -FcInitReinitialize (void); - -FcPublic FcBool -FcInitBringUptoDate (void); - -/* fclang.c */ -FcPublic FcStrSet * -FcGetLangs (void); - -FcPublic const FcCharSet * -FcLangGetCharSet (const FcChar8 *lang); - -FcPublic FcLangSet* -FcLangSetCreate (void); - -FcPublic void -FcLangSetDestroy (FcLangSet *ls); - -FcPublic FcLangSet* -FcLangSetCopy (const FcLangSet *ls); - -FcPublic FcBool -FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang); - -FcPublic FcBool -FcLangSetDel (FcLangSet *ls, const FcChar8 *lang); - -FcPublic FcLangResult -FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang); - -FcPublic FcLangResult -FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb); - -FcPublic FcBool -FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb); - -FcPublic FcBool -FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb); - -FcPublic FcChar32 -FcLangSetHash (const FcLangSet *ls); - -FcPublic FcStrSet * -FcLangSetGetLangs (const FcLangSet *ls); - -FcLangSet * -FcLangSetUnion (const FcLangSet *a, const FcLangSet *b); - -FcLangSet * -FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b); - -/* fclist.c */ -FcPublic FcObjectSet * -FcObjectSetCreate (void); - -FcPublic FcBool -FcObjectSetAdd (FcObjectSet *os, const char *object); - -FcPublic void -FcObjectSetDestroy (FcObjectSet *os); - -FcPublic FcObjectSet * -FcObjectSetVaBuild (const char *first, va_list va); - -FcPublic FcObjectSet * -FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL(0); - -FcPublic FcFontSet * -FcFontSetList (FcConfig *config, - FcFontSet **sets, - int nsets, - FcPattern *p, - FcObjectSet *os); - -FcPublic FcFontSet * -FcFontList (FcConfig *config, - FcPattern *p, - FcObjectSet *os); - -/* fcatomic.c */ - -FcPublic FcAtomic * -FcAtomicCreate (const FcChar8 *file); - -FcPublic FcBool -FcAtomicLock (FcAtomic *atomic); - -FcPublic FcChar8 * -FcAtomicNewFile (FcAtomic *atomic); - -FcPublic FcChar8 * -FcAtomicOrigFile (FcAtomic *atomic); - -FcPublic FcBool -FcAtomicReplaceOrig (FcAtomic *atomic); - -FcPublic void -FcAtomicDeleteNew (FcAtomic *atomic); - -FcPublic void -FcAtomicUnlock (FcAtomic *atomic); - -FcPublic void -FcAtomicDestroy (FcAtomic *atomic); - -/* fcmatch.c */ -FcPublic FcPattern * -FcFontSetMatch (FcConfig *config, - FcFontSet **sets, - int nsets, - FcPattern *p, - FcResult *result); - -FcPublic FcPattern * -FcFontMatch (FcConfig *config, - FcPattern *p, - FcResult *result); - -FcPublic FcPattern * -FcFontRenderPrepare (FcConfig *config, - FcPattern *pat, - FcPattern *font); - -FcPublic FcFontSet * -FcFontSetSort (FcConfig *config, - FcFontSet **sets, - int nsets, - FcPattern *p, - FcBool trim, - FcCharSet **csp, - FcResult *result); - -FcPublic FcFontSet * -FcFontSort (FcConfig *config, - FcPattern *p, - FcBool trim, - FcCharSet **csp, - FcResult *result); - -FcPublic void -FcFontSetSortDestroy (FcFontSet *fs); - -/* fcmatrix.c */ -FcPublic FcMatrix * -FcMatrixCopy (const FcMatrix *mat); - -FcPublic FcBool -FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2); - -FcPublic void -FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b); - -FcPublic void -FcMatrixRotate (FcMatrix *m, double c, double s); - -FcPublic void -FcMatrixScale (FcMatrix *m, double sx, double sy); - -FcPublic void -FcMatrixShear (FcMatrix *m, double sh, double sv); - -/* fcname.c */ - -FcPublic FcBool -FcNameRegisterObjectTypes (const FcObjectType *types, int ntype); - -FcPublic FcBool -FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype); - -FcPublic const FcObjectType * -FcNameGetObjectType (const char *object); - -FcPublic FcBool -FcNameRegisterConstants (const FcConstant *consts, int nconsts); - -FcPublic FcBool -FcNameUnregisterConstants (const FcConstant *consts, int nconsts); - -FcPublic const FcConstant * -FcNameGetConstant (FcChar8 *string); - -FcPublic FcBool -FcNameConstant (FcChar8 *string, int *result); - -FcPublic FcPattern * -FcNameParse (const FcChar8 *name); - -FcPublic FcChar8 * -FcNameUnparse (FcPattern *pat); - -/* fcpat.c */ -FcPublic FcPattern * -FcPatternCreate (void); - -FcPublic FcPattern * -FcPatternDuplicate (const FcPattern *p); - -FcPublic void -FcPatternReference (FcPattern *p); - -FcPublic FcPattern * -FcPatternFilter (FcPattern *p, const FcObjectSet *os); - -FcPublic void -FcValueDestroy (FcValue v); - -FcPublic FcBool -FcValueEqual (FcValue va, FcValue vb); - -FcPublic FcValue -FcValueSave (FcValue v); - -FcPublic void -FcPatternDestroy (FcPattern *p); - -FcPublic FcBool -FcPatternEqual (const FcPattern *pa, const FcPattern *pb); - -FcPublic FcBool -FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os); - -FcPublic FcChar32 -FcPatternHash (const FcPattern *p); - -FcPublic FcBool -FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append); - -FcPublic FcBool -FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append); - -FcPublic FcResult -FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v); - -FcPublic FcBool -FcPatternDel (FcPattern *p, const char *object); - -FcPublic FcBool -FcPatternRemove (FcPattern *p, const char *object, int id); - -FcPublic FcBool -FcPatternAddInteger (FcPattern *p, const char *object, int i); - -FcPublic FcBool -FcPatternAddDouble (FcPattern *p, const char *object, double d); - -FcPublic FcBool -FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s); - -FcPublic FcBool -FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s); - -FcPublic FcBool -FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c); - -FcPublic FcBool -FcPatternAddBool (FcPattern *p, const char *object, FcBool b); - -FcPublic FcBool -FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls); - -FcPublic FcResult -FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i); - -FcPublic FcResult -FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d); - -FcPublic FcResult -FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 ** s); - -FcPublic FcResult -FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s); - -FcPublic FcResult -FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c); - -FcPublic FcResult -FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b); - -FcPublic FcResult -FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls); - -FcPublic FcPattern * -FcPatternVaBuild (FcPattern *p, va_list va); - -FcPublic FcPattern * -FcPatternBuild (FcPattern *p, ...) FC_ATTRIBUTE_SENTINEL(0); - -FcPublic FcChar8 * -FcPatternFormat (FcPattern *pat, const FcChar8 *format); - -/* fcstr.c */ - -FcPublic FcChar8 * -FcStrCopy (const FcChar8 *s); - -FcPublic FcChar8 * -FcStrCopyFilename (const FcChar8 *s); - -FcPublic FcChar8 * -FcStrPlus (const FcChar8 *s1, const FcChar8 *s2); - -FcPublic void -FcStrFree (FcChar8 *s); - -/* These are ASCII only, suitable only for pattern element names */ -#define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132)) -#define FcIsLower(c) ((0141 <= (c) && (c) <= 0172)) -#define FcToLower(c) (FcIsUpper(c) ? (c) - 0101 + 0141 : (c)) - -FcPublic FcChar8 * -FcStrDowncase (const FcChar8 *s); - -FcPublic int -FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); - -FcPublic int -FcStrCmp (const FcChar8 *s1, const FcChar8 *s2); - -FcPublic const FcChar8 * -FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); - -FcPublic const FcChar8 * -FcStrStr (const FcChar8 *s1, const FcChar8 *s2); - -FcPublic int -FcUtf8ToUcs4 (const FcChar8 *src_orig, - FcChar32 *dst, - int len); - -FcPublic FcBool -FcUtf8Len (const FcChar8 *string, - int len, - int *nchar, - int *wchar); - -#define FC_UTF8_MAX_LEN 6 - -FcPublic int -FcUcs4ToUtf8 (FcChar32 ucs4, - FcChar8 dest[FC_UTF8_MAX_LEN]); - -FcPublic int -FcUtf16ToUcs4 (const FcChar8 *src_orig, - FcEndian endian, - FcChar32 *dst, - int len); /* in bytes */ - -FcPublic FcBool -FcUtf16Len (const FcChar8 *string, - FcEndian endian, - int len, /* in bytes */ - int *nchar, - int *wchar); - -FcPublic FcChar8 * -FcStrDirname (const FcChar8 *file); - -FcPublic FcChar8 * -FcStrBasename (const FcChar8 *file); - -FcPublic FcStrSet * -FcStrSetCreate (void); - -FcPublic FcBool -FcStrSetMember (FcStrSet *set, const FcChar8 *s); - -FcPublic FcBool -FcStrSetEqual (FcStrSet *sa, FcStrSet *sb); - -FcPublic FcBool -FcStrSetAdd (FcStrSet *set, const FcChar8 *s); - -FcPublic FcBool -FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s); - -FcPublic FcBool -FcStrSetDel (FcStrSet *set, const FcChar8 *s); - -FcPublic void -FcStrSetDestroy (FcStrSet *set); - -FcPublic FcStrList * -FcStrListCreate (FcStrSet *set); - -FcPublic FcChar8 * -FcStrListNext (FcStrList *list); - -FcPublic void -FcStrListDone (FcStrList *list); - -/* fcxml.c */ -FcPublic FcBool -FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain); - -_FCFUNCPROTOEND - -#undef FC_ATTRIBUTE_SENTINEL - - -#ifndef _FCINT_H_ - -/* - * Deprecated functions are placed here to help users fix their code without - * digging through documentation - */ - -#define FcConfigGetRescanInverval FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval -#define FcConfigSetRescanInverval FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval - -#endif - -#endif /* _FONTCONFIG_H_ */ +/* + * fontconfig/fontconfig/fontconfig.h + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _FONTCONFIG_H_ +#define _FONTCONFIG_H_ + +#include +#include +#include + +#if defined(__GNUC__) && (__GNUC__ >= 4) +#define FC_ATTRIBUTE_SENTINEL(x) __attribute__((__sentinel__(0))) +#else +#define FC_ATTRIBUTE_SENTINEL(x) +#endif + +#ifndef FcPublic +#define FcPublic +#endif + +typedef unsigned char FcChar8; +typedef unsigned short FcChar16; +typedef unsigned int FcChar32; +typedef int FcBool; + +/* + * Current Fontconfig version number. This same number + * must appear in the fontconfig configure.in file. Yes, + * it'a a pain to synchronize version numbers like this. + */ + +#define FC_MAJOR 2 +#define FC_MINOR 8 +#define FC_REVISION 0 + +#define FC_VERSION ((FC_MAJOR * 10000) + (FC_MINOR * 100) + (FC_REVISION)) + +/* + * Current font cache file format version + * This is appended to the cache files so that multiple + * versions of the library will peacefully coexist + * + * Change this value whenever the disk format for the cache file + * changes in any non-compatible way. Try to avoid such changes as + * it means multiple copies of the font information. + */ + +#define FC_CACHE_VERSION "3" + +#define FcTrue 1 +#define FcFalse 0 + +#define FC_FAMILY "family" /* String */ +#define FC_STYLE "style" /* String */ +#define FC_SLANT "slant" /* Int */ +#define FC_WEIGHT "weight" /* Int */ +#define FC_SIZE "size" /* Double */ +#define FC_ASPECT "aspect" /* Double */ +#define FC_PIXEL_SIZE "pixelsize" /* Double */ +#define FC_SPACING "spacing" /* Int */ +#define FC_FOUNDRY "foundry" /* String */ +#define FC_ANTIALIAS "antialias" /* Bool (depends) */ +#define FC_HINTING "hinting" /* Bool (true) */ +#define FC_HINT_STYLE "hintstyle" /* Int */ +#define FC_VERTICAL_LAYOUT "verticallayout" /* Bool (false) */ +#define FC_AUTOHINT "autohint" /* Bool (false) */ +#define FC_GLOBAL_ADVANCE "globaladvance" /* Bool (true) */ +#define FC_WIDTH "width" /* Int */ +#define FC_FILE "file" /* String */ +#define FC_INDEX "index" /* Int */ +#define FC_FT_FACE "ftface" /* FT_Face */ +#define FC_RASTERIZER "rasterizer" /* String */ +#define FC_OUTLINE "outline" /* Bool */ +#define FC_SCALABLE "scalable" /* Bool */ +#define FC_SCALE "scale" /* double */ +#define FC_DPI "dpi" /* double */ +#define FC_RGBA "rgba" /* Int */ +#define FC_MINSPACE "minspace" /* Bool use minimum line spacing */ +#define FC_SOURCE "source" /* String (deprecated) */ +#define FC_CHARSET "charset" /* CharSet */ +#define FC_LANG "lang" /* String RFC 3066 langs */ +#define FC_FONTVERSION "fontversion" /* Int from 'head' table */ +#define FC_FULLNAME "fullname" /* String */ +#define FC_FAMILYLANG "familylang" /* String RFC 3066 langs */ +#define FC_STYLELANG "stylelang" /* String RFC 3066 langs */ +#define FC_FULLNAMELANG "fullnamelang" /* String RFC 3066 langs */ +#define FC_CAPABILITY "capability" /* String */ +#define FC_FONTFORMAT "fontformat" /* String */ +#define FC_EMBOLDEN "embolden" /* Bool - true if emboldening needed*/ +#define FC_EMBEDDED_BITMAP "embeddedbitmap" /* Bool - true to enable embedded bitmaps */ +#define FC_DECORATIVE "decorative" /* Bool - true if style is a decorative variant */ +#define FC_LCD_FILTER "lcdfilter" /* Int */ + +#define FC_CACHE_SUFFIX ".cache-"FC_CACHE_VERSION +#define FC_DIR_CACHE_FILE "fonts.cache-"FC_CACHE_VERSION +#define FC_USER_CACHE_FILE ".fonts.cache-"FC_CACHE_VERSION + +/* Adjust outline rasterizer */ +#define FC_CHAR_WIDTH "charwidth" /* Int */ +#define FC_CHAR_HEIGHT "charheight"/* Int */ +#define FC_MATRIX "matrix" /* FcMatrix */ + +#define FC_WEIGHT_THIN 0 +#define FC_WEIGHT_EXTRALIGHT 40 +#define FC_WEIGHT_ULTRALIGHT FC_WEIGHT_EXTRALIGHT +#define FC_WEIGHT_LIGHT 50 +#define FC_WEIGHT_BOOK 75 +#define FC_WEIGHT_REGULAR 80 +#define FC_WEIGHT_NORMAL FC_WEIGHT_REGULAR +#define FC_WEIGHT_MEDIUM 100 +#define FC_WEIGHT_DEMIBOLD 180 +#define FC_WEIGHT_SEMIBOLD FC_WEIGHT_DEMIBOLD +#define FC_WEIGHT_BOLD 200 +#define FC_WEIGHT_EXTRABOLD 205 +#define FC_WEIGHT_ULTRABOLD FC_WEIGHT_EXTRABOLD +#define FC_WEIGHT_BLACK 210 +#define FC_WEIGHT_HEAVY FC_WEIGHT_BLACK +#define FC_WEIGHT_EXTRABLACK 215 +#define FC_WEIGHT_ULTRABLACK FC_WEIGHT_EXTRABLACK + +#define FC_SLANT_ROMAN 0 +#define FC_SLANT_ITALIC 100 +#define FC_SLANT_OBLIQUE 110 + +#define FC_WIDTH_ULTRACONDENSED 50 +#define FC_WIDTH_EXTRACONDENSED 63 +#define FC_WIDTH_CONDENSED 75 +#define FC_WIDTH_SEMICONDENSED 87 +#define FC_WIDTH_NORMAL 100 +#define FC_WIDTH_SEMIEXPANDED 113 +#define FC_WIDTH_EXPANDED 125 +#define FC_WIDTH_EXTRAEXPANDED 150 +#define FC_WIDTH_ULTRAEXPANDED 200 + +#define FC_PROPORTIONAL 0 +#define FC_DUAL 90 +#define FC_MONO 100 +#define FC_CHARCELL 110 + +/* sub-pixel order */ +#define FC_RGBA_UNKNOWN 0 +#define FC_RGBA_RGB 1 +#define FC_RGBA_BGR 2 +#define FC_RGBA_VRGB 3 +#define FC_RGBA_VBGR 4 +#define FC_RGBA_NONE 5 + +/* hinting style */ +#define FC_HINT_NONE 0 +#define FC_HINT_SLIGHT 1 +#define FC_HINT_MEDIUM 2 +#define FC_HINT_FULL 3 + +/* LCD filter */ +#define FC_LCD_NONE 0 +#define FC_LCD_DEFAULT 1 +#define FC_LCD_LIGHT 2 +#define FC_LCD_LEGACY 3 + +typedef enum _FcType { + FcTypeVoid, + FcTypeInteger, + FcTypeDouble, + FcTypeString, + FcTypeBool, + FcTypeMatrix, + FcTypeCharSet, + FcTypeFTFace, + FcTypeLangSet +} FcType; + +typedef struct _FcMatrix { + double xx, xy, yx, yy; +} FcMatrix; + +#define FcMatrixInit(m) ((m)->xx = (m)->yy = 1, \ + (m)->xy = (m)->yx = 0) + +/* + * A data structure to represent the available glyphs in a font. + * This is represented as a sparse boolean btree. + */ + +typedef struct _FcCharSet FcCharSet; + +typedef struct _FcObjectType { + const char *object; + FcType type; +} FcObjectType; + +typedef struct _FcConstant { + const FcChar8 *name; + const char *object; + int value; +} FcConstant; + +typedef enum _FcResult { + FcResultMatch, FcResultNoMatch, FcResultTypeMismatch, FcResultNoId, + FcResultOutOfMemory +} FcResult; + +typedef struct _FcPattern FcPattern; + +typedef struct _FcLangSet FcLangSet; + +typedef struct _FcValue { + FcType type; + union { + const FcChar8 *s; + int i; + FcBool b; + double d; + const FcMatrix *m; + const FcCharSet *c; + void *f; + const FcLangSet *l; + } u; +} FcValue; + +typedef struct _FcFontSet { + int nfont; + int sfont; + FcPattern **fonts; +} FcFontSet; + +typedef struct _FcObjectSet { + int nobject; + int sobject; + const char **objects; +} FcObjectSet; + +typedef enum _FcMatchKind { + FcMatchPattern, FcMatchFont, FcMatchScan +} FcMatchKind; + +typedef enum _FcLangResult { + FcLangEqual = 0, + FcLangDifferentCountry = 1, + FcLangDifferentTerritory = 1, + FcLangDifferentLang = 2 +} FcLangResult; + +typedef enum _FcSetName { + FcSetSystem = 0, + FcSetApplication = 1 +} FcSetName; + +typedef struct _FcAtomic FcAtomic; + +#if defined(__cplusplus) || defined(c_plusplus) /* for C++ V2.0 */ +#define _FCFUNCPROTOBEGIN extern "C" { /* do not leave open across includes */ +#define _FCFUNCPROTOEND } +#else +#define _FCFUNCPROTOBEGIN +#define _FCFUNCPROTOEND +#endif + +typedef enum { FcEndianBig, FcEndianLittle } FcEndian; + +typedef struct _FcConfig FcConfig; + +typedef struct _FcGlobalCache FcFileCache; + +typedef struct _FcBlanks FcBlanks; + +typedef struct _FcStrList FcStrList; + +typedef struct _FcStrSet FcStrSet; + +typedef struct _FcCache FcCache; + +_FCFUNCPROTOBEGIN + +/* fcblanks.c */ +FcPublic FcBlanks * +FcBlanksCreate (void); + +FcPublic void +FcBlanksDestroy (FcBlanks *b); + +FcPublic FcBool +FcBlanksAdd (FcBlanks *b, FcChar32 ucs4); + +FcPublic FcBool +FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4); + +/* fccache.c */ + +FcPublic const FcChar8 * +FcCacheDir(const FcCache *c); + +FcPublic FcFontSet * +FcCacheCopySet(const FcCache *c); + +FcPublic const FcChar8 * +FcCacheSubdir (const FcCache *c, int i); + +FcPublic int +FcCacheNumSubdir (const FcCache *c); + +FcPublic int +FcCacheNumFont (const FcCache *c); + +FcPublic FcBool +FcDirCacheUnlink (const FcChar8 *dir, FcConfig *config); + +FcPublic FcBool +FcDirCacheValid (const FcChar8 *cache_file); + +/* fccfg.c */ +FcPublic FcChar8 * +FcConfigHome (void); + +FcPublic FcBool +FcConfigEnableHome (FcBool enable); + +FcPublic FcChar8 * +FcConfigFilename (const FcChar8 *url); + +FcPublic FcConfig * +FcConfigCreate (void); + +FcPublic FcConfig * +FcConfigReference (FcConfig *config); + +FcPublic void +FcConfigDestroy (FcConfig *config); + +FcPublic FcBool +FcConfigSetCurrent (FcConfig *config); + +FcPublic FcConfig * +FcConfigGetCurrent (void); + +FcPublic FcBool +FcConfigUptoDate (FcConfig *config); + +FcPublic FcBool +FcConfigBuildFonts (FcConfig *config); + +FcPublic FcStrList * +FcConfigGetFontDirs (FcConfig *config); + +FcPublic FcStrList * +FcConfigGetConfigDirs (FcConfig *config); + +FcPublic FcStrList * +FcConfigGetConfigFiles (FcConfig *config); + +FcPublic FcChar8 * +FcConfigGetCache (FcConfig *config); + +FcPublic FcBlanks * +FcConfigGetBlanks (FcConfig *config); + +FcPublic FcStrList * +FcConfigGetCacheDirs (FcConfig *config); + +FcPublic int +FcConfigGetRescanInterval (FcConfig *config); + +FcPublic FcBool +FcConfigSetRescanInterval (FcConfig *config, int rescanInterval); + +FcPublic FcFontSet * +FcConfigGetFonts (FcConfig *config, + FcSetName set); + +FcPublic FcBool +FcConfigAppFontAddFile (FcConfig *config, + const FcChar8 *file); + +FcPublic FcBool +FcConfigAppFontAddDir (FcConfig *config, + const FcChar8 *dir); + +FcPublic void +FcConfigAppFontClear (FcConfig *config); + +FcPublic FcBool +FcConfigSubstituteWithPat (FcConfig *config, + FcPattern *p, + FcPattern *p_pat, + FcMatchKind kind); + +FcPublic FcBool +FcConfigSubstitute (FcConfig *config, + FcPattern *p, + FcMatchKind kind); + +/* fccharset.c */ +FcPublic FcCharSet* +FcCharSetCreate (void); + +/* deprecated alias for FcCharSetCreate */ +FcPublic FcCharSet * +FcCharSetNew (void); + +FcPublic void +FcCharSetDestroy (FcCharSet *fcs); + +FcPublic FcBool +FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4); + +FcPublic FcBool +FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4); + +FcPublic FcCharSet* +FcCharSetCopy (FcCharSet *src); + +FcPublic FcBool +FcCharSetEqual (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcCharSet* +FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcCharSet* +FcCharSetUnion (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcCharSet* +FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcBool +FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed); + +FcPublic FcBool +FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4); + +FcPublic FcChar32 +FcCharSetCount (const FcCharSet *a); + +FcPublic FcChar32 +FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcChar32 +FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b); + +FcPublic FcBool +FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b); + +#define FC_CHARSET_MAP_SIZE (256/32) +#define FC_CHARSET_DONE ((FcChar32) -1) + +FcPublic FcChar32 +FcCharSetFirstPage (const FcCharSet *a, + FcChar32 map[FC_CHARSET_MAP_SIZE], + FcChar32 *next); + +FcPublic FcChar32 +FcCharSetNextPage (const FcCharSet *a, + FcChar32 map[FC_CHARSET_MAP_SIZE], + FcChar32 *next); + +/* + * old coverage API, rather hard to use correctly + */ + +FcPublic FcChar32 +FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result); + +/* fcdbg.c */ +FcPublic void +FcValuePrint (const FcValue v); + +FcPublic void +FcPatternPrint (const FcPattern *p); + +FcPublic void +FcFontSetPrint (const FcFontSet *s); + +/* fcdefault.c */ +FcPublic void +FcDefaultSubstitute (FcPattern *pattern); + +/* fcdir.c */ +FcPublic FcBool +FcFileIsDir (const FcChar8 *file); + +FcPublic FcBool +FcFileScan (FcFontSet *set, + FcStrSet *dirs, + FcFileCache *cache, + FcBlanks *blanks, + const FcChar8 *file, + FcBool force); + +FcPublic FcBool +FcDirScan (FcFontSet *set, + FcStrSet *dirs, + FcFileCache *cache, + FcBlanks *blanks, + const FcChar8 *dir, + FcBool force); + +FcPublic FcBool +FcDirSave (FcFontSet *set, FcStrSet *dirs, const FcChar8 *dir); + +FcPublic FcCache * +FcDirCacheLoad (const FcChar8 *dir, FcConfig *config, FcChar8 **cache_file); + +FcPublic FcCache * +FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config); + +FcPublic FcCache * +FcDirCacheLoadFile (const FcChar8 *cache_file, struct stat *file_stat); + +FcPublic void +FcDirCacheUnload (FcCache *cache); + +/* fcfreetype.c */ +FcPublic FcPattern * +FcFreeTypeQuery (const FcChar8 *file, int id, FcBlanks *blanks, int *count); + +/* fcfs.c */ + +FcPublic FcFontSet * +FcFontSetCreate (void); + +FcPublic void +FcFontSetDestroy (FcFontSet *s); + +FcPublic FcBool +FcFontSetAdd (FcFontSet *s, FcPattern *font); + +/* fcinit.c */ +FcPublic FcConfig * +FcInitLoadConfig (void); + +FcPublic FcConfig * +FcInitLoadConfigAndFonts (void); + +FcPublic FcBool +FcInit (void); + +FcPublic void +FcFini (void); + +FcPublic int +FcGetVersion (void); + +FcPublic FcBool +FcInitReinitialize (void); + +FcPublic FcBool +FcInitBringUptoDate (void); + +/* fclang.c */ +FcPublic FcStrSet * +FcGetLangs (void); + +FcPublic const FcCharSet * +FcLangGetCharSet (const FcChar8 *lang); + +FcPublic FcLangSet* +FcLangSetCreate (void); + +FcPublic void +FcLangSetDestroy (FcLangSet *ls); + +FcPublic FcLangSet* +FcLangSetCopy (const FcLangSet *ls); + +FcPublic FcBool +FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang); + +FcPublic FcBool +FcLangSetDel (FcLangSet *ls, const FcChar8 *lang); + +FcPublic FcLangResult +FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang); + +FcPublic FcLangResult +FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb); + +FcPublic FcBool +FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb); + +FcPublic FcBool +FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb); + +FcPublic FcChar32 +FcLangSetHash (const FcLangSet *ls); + +FcPublic FcStrSet * +FcLangSetGetLangs (const FcLangSet *ls); + +FcLangSet * +FcLangSetUnion (const FcLangSet *a, const FcLangSet *b); + +FcLangSet * +FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b); + +/* fclist.c */ +FcPublic FcObjectSet * +FcObjectSetCreate (void); + +FcPublic FcBool +FcObjectSetAdd (FcObjectSet *os, const char *object); + +FcPublic void +FcObjectSetDestroy (FcObjectSet *os); + +FcPublic FcObjectSet * +FcObjectSetVaBuild (const char *first, va_list va); + +FcPublic FcObjectSet * +FcObjectSetBuild (const char *first, ...) FC_ATTRIBUTE_SENTINEL(0); + +FcPublic FcFontSet * +FcFontSetList (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcObjectSet *os); + +FcPublic FcFontSet * +FcFontList (FcConfig *config, + FcPattern *p, + FcObjectSet *os); + +/* fcatomic.c */ + +FcPublic FcAtomic * +FcAtomicCreate (const FcChar8 *file); + +FcPublic FcBool +FcAtomicLock (FcAtomic *atomic); + +FcPublic FcChar8 * +FcAtomicNewFile (FcAtomic *atomic); + +FcPublic FcChar8 * +FcAtomicOrigFile (FcAtomic *atomic); + +FcPublic FcBool +FcAtomicReplaceOrig (FcAtomic *atomic); + +FcPublic void +FcAtomicDeleteNew (FcAtomic *atomic); + +FcPublic void +FcAtomicUnlock (FcAtomic *atomic); + +FcPublic void +FcAtomicDestroy (FcAtomic *atomic); + +/* fcmatch.c */ +FcPublic FcPattern * +FcFontSetMatch (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcResult *result); + +FcPublic FcPattern * +FcFontMatch (FcConfig *config, + FcPattern *p, + FcResult *result); + +FcPublic FcPattern * +FcFontRenderPrepare (FcConfig *config, + FcPattern *pat, + FcPattern *font); + +FcPublic FcFontSet * +FcFontSetSort (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcBool trim, + FcCharSet **csp, + FcResult *result); + +FcPublic FcFontSet * +FcFontSort (FcConfig *config, + FcPattern *p, + FcBool trim, + FcCharSet **csp, + FcResult *result); + +FcPublic void +FcFontSetSortDestroy (FcFontSet *fs); + +/* fcmatrix.c */ +FcPublic FcMatrix * +FcMatrixCopy (const FcMatrix *mat); + +FcPublic FcBool +FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2); + +FcPublic void +FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b); + +FcPublic void +FcMatrixRotate (FcMatrix *m, double c, double s); + +FcPublic void +FcMatrixScale (FcMatrix *m, double sx, double sy); + +FcPublic void +FcMatrixShear (FcMatrix *m, double sh, double sv); + +/* fcname.c */ + +FcPublic FcBool +FcNameRegisterObjectTypes (const FcObjectType *types, int ntype); + +FcPublic FcBool +FcNameUnregisterObjectTypes (const FcObjectType *types, int ntype); + +FcPublic const FcObjectType * +FcNameGetObjectType (const char *object); + +FcPublic FcBool +FcNameRegisterConstants (const FcConstant *consts, int nconsts); + +FcPublic FcBool +FcNameUnregisterConstants (const FcConstant *consts, int nconsts); + +FcPublic const FcConstant * +FcNameGetConstant (FcChar8 *string); + +FcPublic FcBool +FcNameConstant (FcChar8 *string, int *result); + +FcPublic FcPattern * +FcNameParse (const FcChar8 *name); + +FcPublic FcChar8 * +FcNameUnparse (FcPattern *pat); + +/* fcpat.c */ +FcPublic FcPattern * +FcPatternCreate (void); + +FcPublic FcPattern * +FcPatternDuplicate (const FcPattern *p); + +FcPublic void +FcPatternReference (FcPattern *p); + +FcPublic FcPattern * +FcPatternFilter (FcPattern *p, const FcObjectSet *os); + +FcPublic void +FcValueDestroy (FcValue v); + +FcPublic FcBool +FcValueEqual (FcValue va, FcValue vb); + +FcPublic FcValue +FcValueSave (FcValue v); + +FcPublic void +FcPatternDestroy (FcPattern *p); + +FcPublic FcBool +FcPatternEqual (const FcPattern *pa, const FcPattern *pb); + +FcPublic FcBool +FcPatternEqualSubset (const FcPattern *pa, const FcPattern *pb, const FcObjectSet *os); + +FcPublic FcChar32 +FcPatternHash (const FcPattern *p); + +FcPublic FcBool +FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append); + +FcPublic FcBool +FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append); + +FcPublic FcResult +FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v); + +FcPublic FcBool +FcPatternDel (FcPattern *p, const char *object); + +FcPublic FcBool +FcPatternRemove (FcPattern *p, const char *object, int id); + +FcPublic FcBool +FcPatternAddInteger (FcPattern *p, const char *object, int i); + +FcPublic FcBool +FcPatternAddDouble (FcPattern *p, const char *object, double d); + +FcPublic FcBool +FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s); + +FcPublic FcBool +FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s); + +FcPublic FcBool +FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c); + +FcPublic FcBool +FcPatternAddBool (FcPattern *p, const char *object, FcBool b); + +FcPublic FcBool +FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls); + +FcPublic FcResult +FcPatternGetInteger (const FcPattern *p, const char *object, int n, int *i); + +FcPublic FcResult +FcPatternGetDouble (const FcPattern *p, const char *object, int n, double *d); + +FcPublic FcResult +FcPatternGetString (const FcPattern *p, const char *object, int n, FcChar8 ** s); + +FcPublic FcResult +FcPatternGetMatrix (const FcPattern *p, const char *object, int n, FcMatrix **s); + +FcPublic FcResult +FcPatternGetCharSet (const FcPattern *p, const char *object, int n, FcCharSet **c); + +FcPublic FcResult +FcPatternGetBool (const FcPattern *p, const char *object, int n, FcBool *b); + +FcPublic FcResult +FcPatternGetLangSet (const FcPattern *p, const char *object, int n, FcLangSet **ls); + +FcPublic FcPattern * +FcPatternVaBuild (FcPattern *p, va_list va); + +FcPublic FcPattern * +FcPatternBuild (FcPattern *p, ...) FC_ATTRIBUTE_SENTINEL(0); + +FcPublic FcChar8 * +FcPatternFormat (FcPattern *pat, const FcChar8 *format); + +/* fcstr.c */ + +FcPublic FcChar8 * +FcStrCopy (const FcChar8 *s); + +FcPublic FcChar8 * +FcStrCopyFilename (const FcChar8 *s); + +FcPublic FcChar8 * +FcStrPlus (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic void +FcStrFree (FcChar8 *s); + +/* These are ASCII only, suitable only for pattern element names */ +#define FcIsUpper(c) ((0101 <= (c) && (c) <= 0132)) +#define FcIsLower(c) ((0141 <= (c) && (c) <= 0172)) +#define FcToLower(c) (FcIsUpper(c) ? (c) - 0101 + 0141 : (c)) + +FcPublic FcChar8 * +FcStrDowncase (const FcChar8 *s); + +FcPublic int +FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic int +FcStrCmp (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic const FcChar8 * +FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic const FcChar8 * +FcStrStr (const FcChar8 *s1, const FcChar8 *s2); + +FcPublic int +FcUtf8ToUcs4 (const FcChar8 *src_orig, + FcChar32 *dst, + int len); + +FcPublic FcBool +FcUtf8Len (const FcChar8 *string, + int len, + int *nchar, + int *wchar); + +#define FC_UTF8_MAX_LEN 6 + +FcPublic int +FcUcs4ToUtf8 (FcChar32 ucs4, + FcChar8 dest[FC_UTF8_MAX_LEN]); + +FcPublic int +FcUtf16ToUcs4 (const FcChar8 *src_orig, + FcEndian endian, + FcChar32 *dst, + int len); /* in bytes */ + +FcPublic FcBool +FcUtf16Len (const FcChar8 *string, + FcEndian endian, + int len, /* in bytes */ + int *nchar, + int *wchar); + +FcPublic FcChar8 * +FcStrDirname (const FcChar8 *file); + +FcPublic FcChar8 * +FcStrBasename (const FcChar8 *file); + +FcPublic FcStrSet * +FcStrSetCreate (void); + +FcPublic FcBool +FcStrSetMember (FcStrSet *set, const FcChar8 *s); + +FcPublic FcBool +FcStrSetEqual (FcStrSet *sa, FcStrSet *sb); + +FcPublic FcBool +FcStrSetAdd (FcStrSet *set, const FcChar8 *s); + +FcPublic FcBool +FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s); + +FcPublic FcBool +FcStrSetDel (FcStrSet *set, const FcChar8 *s); + +FcPublic void +FcStrSetDestroy (FcStrSet *set); + +FcPublic FcStrList * +FcStrListCreate (FcStrSet *set); + +FcPublic FcChar8 * +FcStrListNext (FcStrList *list); + +FcPublic void +FcStrListDone (FcStrList *list); + +/* fcxml.c */ +FcPublic FcBool +FcConfigParseAndLoad (FcConfig *config, const FcChar8 *file, FcBool complain); + +_FCFUNCPROTOEND + +#undef FC_ATTRIBUTE_SENTINEL + + +#ifndef _FCINT_H_ + +/* + * Deprecated functions are placed here to help users fix their code without + * digging through documentation + */ + +#define FcConfigGetRescanInverval FcConfigGetRescanInverval_REPLACE_BY_FcConfigGetRescanInterval +#define FcConfigSetRescanInverval FcConfigSetRescanInverval_REPLACE_BY_FcConfigSetRescanInterval + +#endif + +#endif /* _FONTCONFIG_H_ */ diff --git a/fontconfig/fonts.dtd b/fontconfig/fonts.dtd index 3e315b840..5f072ee44 100644 --- a/fontconfig/fonts.dtd +++ b/fontconfig/fonts.dtd @@ -1,225 +1,225 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fontconfig/src/Makefile.am b/fontconfig/src/Makefile.am index 7ecbc1b62..090f9b1ab 100644 --- a/fontconfig/src/Makefile.am +++ b/fontconfig/src/Makefile.am @@ -1,167 +1,167 @@ -# -# fontconfig/src/Makefile.am -# -# Copyright © 2003 Keith Packard -# -# Permission to use, copy, modify, distribute, and sell this software and its -# documentation for any purpose is hereby granted without fee, provided that -# the above copyright notice appear in all copies and that both that -# copyright notice and this permission notice appear in supporting -# documentation, and that the name of the author(s) not be used in -# advertising or publicity pertaining to distribution of the software without -# specific, written prior permission. The authors make no -# representations about the suitability of this software for any purpose. It -# is provided "as is" without express or implied warranty. -# -# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, -# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO -# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR -# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, -# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER -# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -# PERFORMANCE OF THIS SOFTWARE. - -if OS_WIN32 - -export_symbols = -export-symbols fontconfig.def - -fontconfig_def_dependency = fontconfig.def - -# gcc import library install/uninstall - -install-libtool-import-lib: - $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir) - $(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def - -uninstall-libtool-import-lib: - -rm $(DESTDIR)$(libdir)/libfontconfig.dll.a $(DESTDIR)$(libdir)/fontconfig.def - -else - -install-libtool-import-lib: -uninstall-libtool-import-lib: - -fontconfig_def_dependency = - -endif - -if MS_LIB_AVAILABLE - -# Microsoft import library install/uninstall - -noinst_DATA = fontconfig.lib - -fontconfig.lib : libfontconfig.la - lib -name:libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll -def:fontconfig.def -out:$@ - -install-ms-import-lib: - $(INSTALL) fontconfig.lib $(DESTDIR)$(libdir) - -uninstall-ms-import-lib: - -rm $(DESTDIR)$(libdir)/fontconfig.lib - -else - -install-ms-import-lib: -uninstall-ms-import-lib: - -endif - -INCLUDES = \ - -I$(top_srcdir) \ - -I$(top_srcdir)/src \ - $(FREETYPE_CFLAGS) \ - $(LIBXML2_CFLAGS) \ - $(EXPAT_CFLAGS) \ - $(WARN_CFLAGS) \ - -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \ - -DFONTCONFIG_PATH='"$(CONFDIR)"' - -EXTRA_DIST = makealias - -noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h - -ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h - -BUILT_SOURCES = $(ALIAS_FILES) \ - ../fc-case/fccase.h \ - ../fc-glyphname/fcglyphname.h \ - ../fc-lang/fclang.h - -noinst_PROGRAMS = fcarch - -../fc-case/fccase.h: - cd ../fc-case && $(MAKE) $(AM_MAKEFLAGS) fccase.h -../fc-glyphname/fcglyphname.h: - cd ../fc-glyphname && $(MAKE) $(AM_MAKEFLAGS) fcglyphname.h -../fc-lang/fclang.h: - cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) fclang.h - -libfontconfig_la_SOURCES = \ - fcarch.h \ - fcatomic.c \ - fcblanks.c \ - fccache.c \ - fccfg.c \ - fccharset.c \ - fcdbg.c \ - fcdefault.c \ - fcdir.c \ - fcformat.c \ - fcfreetype.c \ - fcfs.c \ - fcinit.c \ - fclang.c \ - fclist.c \ - fcmatch.c \ - fcmatrix.c \ - fcname.c \ - fcpat.c \ - fcserialize.c \ - fcstr.c \ - fcxml.c \ - ftglue.h \ - ftglue.c - -lib_LTLIBRARIES = libfontconfig.la - -libfontconfig_la_LDFLAGS = \ - -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols) - -libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) - -libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency) - -install-data-local: install-ms-import-lib install-libtool-import-lib - -uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib - -PUBLIC_FILES = \ - $(top_srcdir)/fontconfig/fontconfig.h \ - $(top_srcdir)/src/fcdeprecate.h \ - $(top_srcdir)/fontconfig/fcprivate.h - -PUBLIC_FT_FILES = \ - $(top_srcdir)/fontconfig/fcfreetype.h - -fcaliastail.h: fcalias.h - -fcalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FILES) - sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcalias.h fcaliastail.h $(PUBLIC_FILES) - -fcftaliastail.h: fcftalias.h - -fcftalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FT_FILES) - sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcftalias.h fcftaliastail.h $(PUBLIC_FT_FILES) - -CLEANFILES = $(ALIAS_FILES) - -fontconfig.def: $(PUBLIC_FILES) $(PUBLIC_FT_FILES) - echo Generating $@ - (echo EXPORTS; \ - (cat $(PUBLIC_FILES) $(PUBLIC_FT_FILES) || echo 'FcERROR ()' ) | \ - grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$$//' -e 's/^/ /' | \ - sort; \ - echo LIBRARY libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll; \ - echo VERSION @LIBT_CURRENT@.@LIBT_REVISION@) >$@ - @ ! grep -q FcERROR $@ || ($(RM) $@; false) +# +# fontconfig/src/Makefile.am +# +# Copyright © 2003 Keith Packard +# +# Permission to use, copy, modify, distribute, and sell this software and its +# documentation for any purpose is hereby granted without fee, provided that +# the above copyright notice appear in all copies and that both that +# copyright notice and this permission notice appear in supporting +# documentation, and that the name of the author(s) not be used in +# advertising or publicity pertaining to distribution of the software without +# specific, written prior permission. The authors make no +# representations about the suitability of this software for any purpose. It +# is provided "as is" without express or implied warranty. +# +# THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, +# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO +# EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR +# CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, +# DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER +# TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +if OS_WIN32 + +export_symbols = -export-symbols fontconfig.def + +fontconfig_def_dependency = fontconfig.def + +# gcc import library install/uninstall + +install-libtool-import-lib: + $(INSTALL) .libs/libfontconfig.dll.a $(DESTDIR)$(libdir) + $(INSTALL) fontconfig.def $(DESTDIR)$(libdir)/fontconfig.def + +uninstall-libtool-import-lib: + -rm $(DESTDIR)$(libdir)/libfontconfig.dll.a $(DESTDIR)$(libdir)/fontconfig.def + +else + +install-libtool-import-lib: +uninstall-libtool-import-lib: + +fontconfig_def_dependency = + +endif + +if MS_LIB_AVAILABLE + +# Microsoft import library install/uninstall + +noinst_DATA = fontconfig.lib + +fontconfig.lib : libfontconfig.la + lib -name:libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll -def:fontconfig.def -out:$@ + +install-ms-import-lib: + $(INSTALL) fontconfig.lib $(DESTDIR)$(libdir) + +uninstall-ms-import-lib: + -rm $(DESTDIR)$(libdir)/fontconfig.lib + +else + +install-ms-import-lib: +uninstall-ms-import-lib: + +endif + +INCLUDES = \ + -I$(top_srcdir) \ + -I$(top_srcdir)/src \ + $(FREETYPE_CFLAGS) \ + $(LIBXML2_CFLAGS) \ + $(EXPAT_CFLAGS) \ + $(WARN_CFLAGS) \ + -DFC_CACHEDIR='"$(FC_CACHEDIR)"' \ + -DFONTCONFIG_PATH='"$(CONFDIR)"' + +EXTRA_DIST = makealias + +noinst_HEADERS=fcint.h fcftint.h fcdeprecate.h + +ALIAS_FILES = fcalias.h fcaliastail.h fcftalias.h fcftaliastail.h + +BUILT_SOURCES = $(ALIAS_FILES) \ + ../fc-case/fccase.h \ + ../fc-glyphname/fcglyphname.h \ + ../fc-lang/fclang.h + +noinst_PROGRAMS = fcarch + +../fc-case/fccase.h: + cd ../fc-case && $(MAKE) $(AM_MAKEFLAGS) fccase.h +../fc-glyphname/fcglyphname.h: + cd ../fc-glyphname && $(MAKE) $(AM_MAKEFLAGS) fcglyphname.h +../fc-lang/fclang.h: + cd ../fc-lang && $(MAKE) $(AM_MAKEFLAGS) fclang.h + +libfontconfig_la_SOURCES = \ + fcarch.h \ + fcatomic.c \ + fcblanks.c \ + fccache.c \ + fccfg.c \ + fccharset.c \ + fcdbg.c \ + fcdefault.c \ + fcdir.c \ + fcformat.c \ + fcfreetype.c \ + fcfs.c \ + fcinit.c \ + fclang.c \ + fclist.c \ + fcmatch.c \ + fcmatrix.c \ + fcname.c \ + fcpat.c \ + fcserialize.c \ + fcstr.c \ + fcxml.c \ + ftglue.h \ + ftglue.c + +lib_LTLIBRARIES = libfontconfig.la + +libfontconfig_la_LDFLAGS = \ + -version-info @LIBT_VERSION_INFO@ -no-undefined $(export_symbols) + +libfontconfig_la_LIBADD = $(ICONV_LIBS) $(FREETYPE_LIBS) $(LIBXML2_LIBS) $(EXPAT_LIBS) + +libfontconfig_la_DEPENDENCIES = $(fontconfig_def_dependency) + +install-data-local: install-ms-import-lib install-libtool-import-lib + +uninstall-local: uninstall-ms-import-lib uninstall-libtool-import-lib + +PUBLIC_FILES = \ + $(top_srcdir)/fontconfig/fontconfig.h \ + $(top_srcdir)/src/fcdeprecate.h \ + $(top_srcdir)/fontconfig/fcprivate.h + +PUBLIC_FT_FILES = \ + $(top_srcdir)/fontconfig/fcfreetype.h + +fcaliastail.h: fcalias.h + +fcalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FILES) + sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcalias.h fcaliastail.h $(PUBLIC_FILES) + +fcftaliastail.h: fcftalias.h + +fcftalias.h: $(top_srcdir)/src/makealias $(PUBLIC_FT_FILES) + sh $(top_srcdir)/src/makealias "$(top_srcdir)/src" fcftalias.h fcftaliastail.h $(PUBLIC_FT_FILES) + +CLEANFILES = $(ALIAS_FILES) + +fontconfig.def: $(PUBLIC_FILES) $(PUBLIC_FT_FILES) + echo Generating $@ + (echo EXPORTS; \ + (cat $(PUBLIC_FILES) $(PUBLIC_FT_FILES) || echo 'FcERROR ()' ) | \ + grep '^Fc[^ ]* *(' | sed -e 's/ *(.*$$//' -e 's/^/ /' | \ + sort; \ + echo LIBRARY libfontconfig-@LIBT_CURRENT_MINUS_AGE@.dll; \ + echo VERSION @LIBT_CURRENT@.@LIBT_REVISION@) >$@ + @ ! grep -q FcERROR $@ || ($(RM) $@; false) diff --git a/fontconfig/src/fcatomic.c b/fontconfig/src/fcatomic.c index cc16a9c96..b5f3d5aaa 100644 --- a/fontconfig/src/fcatomic.c +++ b/fontconfig/src/fcatomic.c @@ -1,217 +1,217 @@ -/* - * fontconfig/src/fcatomic.c - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - * fcatomic.c - * - * Lock cache and configuration files for atomic update - * - * Uses only regular filesystem calls so it should - * work even in the absense of functioning file locking - * - * On Unix, four files are used: - * file - the data file accessed by other apps. - * new - a new version of the data file while it's being written - * lck - the lock file - * tmp - a temporary file made unique with mkstemp - * - * Here's how it works: - * Create 'tmp' and store our PID in it - * Attempt to link it to 'lck' - * Unlink 'tmp' - * If the link succeeded, the lock is held - * - * On Windows, where there are no links, no tmp file is used, and lck - * is a directory that's mkdir'ed. If the mkdir succeeds, the lock is - * held. - */ - -#include "fcint.h" -#include -#include -#include -#include -#include -#include - -#ifdef _WIN32 -#undef mkdir -#define mkdir(path,mode) _mkdir(path) -#endif - -#define NEW_NAME ".NEW" -#define LCK_NAME ".LCK" -#define TMP_NAME ".TMP-XXXXXX" - -FcAtomic * -FcAtomicCreate (const FcChar8 *file) -{ - int file_len = strlen ((char *) file); - int new_len = file_len + sizeof (NEW_NAME); - int lck_len = file_len + sizeof (LCK_NAME); - int tmp_len = file_len + sizeof (TMP_NAME); - int total_len = (sizeof (FcAtomic) + - file_len + 1 + - new_len + 1 + - lck_len + 1 + - tmp_len + 1); - FcAtomic *atomic = malloc (total_len); - if (!atomic) - return 0; - FcMemAlloc (FC_MEM_ATOMIC, total_len); - - atomic->file = (FcChar8 *) (atomic + 1); - strcpy ((char *) atomic->file, (char *) file); - - atomic->new = atomic->file + file_len + 1; - strcpy ((char *) atomic->new, (char *) file); - strcat ((char *) atomic->new, NEW_NAME); - - atomic->lck = atomic->new + new_len + 1; - strcpy ((char *) atomic->lck, (char *) file); - strcat ((char *) atomic->lck, LCK_NAME); - - atomic->tmp = atomic->lck + lck_len + 1; - - return atomic; -} - -FcBool -FcAtomicLock (FcAtomic *atomic) -{ - int fd = -1; - FILE *f = 0; - int ret; - struct stat lck_stat; - -#ifdef HAVE_LINK - strcpy ((char *) atomic->tmp, (char *) atomic->file); - strcat ((char *) atomic->tmp, TMP_NAME); - fd = mkstemp ((char *) atomic->tmp); - if (fd < 0) - return FcFalse; - f = fdopen (fd, "w"); - if (!f) - { - close (fd); - unlink ((char *) atomic->tmp); - return FcFalse; - } - ret = fprintf (f, "%ld\n", (long)getpid()); - if (ret <= 0) - { - fclose (f); - unlink ((char *) atomic->tmp); - return FcFalse; - } - if (fclose (f) == EOF) - { - unlink ((char *) atomic->tmp); - return FcFalse; - } - ret = link ((char *) atomic->tmp, (char *) atomic->lck); - (void) unlink ((char *) atomic->tmp); -#else - ret = mkdir ((char *) atomic->lck, 0600); -#endif - if (ret < 0) - { - /* - * If the file is around and old (> 10 minutes), - * assume the lock is stale. This assumes that any - * machines sharing the same filesystem will have clocks - * reasonably close to each other. - */ - if (FcStat (atomic->lck, &lck_stat) >= 0) - { - time_t now = time (0); - if ((long int) (now - lck_stat.st_mtime) > 10 * 60) - { -#ifdef HAVE_LINK - if (unlink ((char *) atomic->lck) == 0) - return FcAtomicLock (atomic); -#else - if (rmdir ((char *) atomic->lck) == 0) - return FcAtomicLock (atomic); -#endif - } - } - return FcFalse; - } - (void) unlink ((char *) atomic->new); - return FcTrue; -} - -FcChar8 * -FcAtomicNewFile (FcAtomic *atomic) -{ - return atomic->new; -} - -FcChar8 * -FcAtomicOrigFile (FcAtomic *atomic) -{ - return atomic->file; -} - -FcBool -FcAtomicReplaceOrig (FcAtomic *atomic) -{ -#ifdef _WIN32 - unlink (atomic->file); -#endif - if (rename ((char *) atomic->new, (char *) atomic->file) < 0) - return FcFalse; - return FcTrue; -} - -void -FcAtomicDeleteNew (FcAtomic *atomic) -{ - unlink ((char *) atomic->new); -} - -void -FcAtomicUnlock (FcAtomic *atomic) -{ -#ifdef HAVE_LINK - unlink ((char *) atomic->lck); -#else - rmdir ((char *) atomic->lck); -#endif -} - -void -FcAtomicDestroy (FcAtomic *atomic) -{ - FcMemFree (FC_MEM_ATOMIC, sizeof (FcAtomic) + - strlen ((char *) atomic->file) * 4 + 4 + - sizeof (NEW_NAME) + sizeof (LCK_NAME) + - sizeof (TMP_NAME)); - - free (atomic); -} -#define __fcatomic__ -#include "fcaliastail.h" -#undef __fcatomic__ +/* + * fontconfig/src/fcatomic.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +/* + * fcatomic.c + * + * Lock cache and configuration files for atomic update + * + * Uses only regular filesystem calls so it should + * work even in the absense of functioning file locking + * + * On Unix, four files are used: + * file - the data file accessed by other apps. + * new - a new version of the data file while it's being written + * lck - the lock file + * tmp - a temporary file made unique with mkstemp + * + * Here's how it works: + * Create 'tmp' and store our PID in it + * Attempt to link it to 'lck' + * Unlink 'tmp' + * If the link succeeded, the lock is held + * + * On Windows, where there are no links, no tmp file is used, and lck + * is a directory that's mkdir'ed. If the mkdir succeeds, the lock is + * held. + */ + +#include "fcint.h" +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +#undef mkdir +#define mkdir(path,mode) _mkdir(path) +#endif + +#define NEW_NAME ".NEW" +#define LCK_NAME ".LCK" +#define TMP_NAME ".TMP-XXXXXX" + +FcAtomic * +FcAtomicCreate (const FcChar8 *file) +{ + int file_len = strlen ((char *) file); + int new_len = file_len + sizeof (NEW_NAME); + int lck_len = file_len + sizeof (LCK_NAME); + int tmp_len = file_len + sizeof (TMP_NAME); + int total_len = (sizeof (FcAtomic) + + file_len + 1 + + new_len + 1 + + lck_len + 1 + + tmp_len + 1); + FcAtomic *atomic = malloc (total_len); + if (!atomic) + return 0; + FcMemAlloc (FC_MEM_ATOMIC, total_len); + + atomic->file = (FcChar8 *) (atomic + 1); + strcpy ((char *) atomic->file, (char *) file); + + atomic->new = atomic->file + file_len + 1; + strcpy ((char *) atomic->new, (char *) file); + strcat ((char *) atomic->new, NEW_NAME); + + atomic->lck = atomic->new + new_len + 1; + strcpy ((char *) atomic->lck, (char *) file); + strcat ((char *) atomic->lck, LCK_NAME); + + atomic->tmp = atomic->lck + lck_len + 1; + + return atomic; +} + +FcBool +FcAtomicLock (FcAtomic *atomic) +{ + int fd = -1; + FILE *f = 0; + int ret; + struct stat lck_stat; + +#ifdef HAVE_LINK + strcpy ((char *) atomic->tmp, (char *) atomic->file); + strcat ((char *) atomic->tmp, TMP_NAME); + fd = mkstemp ((char *) atomic->tmp); + if (fd < 0) + return FcFalse; + f = fdopen (fd, "w"); + if (!f) + { + close (fd); + unlink ((char *) atomic->tmp); + return FcFalse; + } + ret = fprintf (f, "%ld\n", (long)getpid()); + if (ret <= 0) + { + fclose (f); + unlink ((char *) atomic->tmp); + return FcFalse; + } + if (fclose (f) == EOF) + { + unlink ((char *) atomic->tmp); + return FcFalse; + } + ret = link ((char *) atomic->tmp, (char *) atomic->lck); + (void) unlink ((char *) atomic->tmp); +#else + ret = mkdir ((char *) atomic->lck, 0600); +#endif + if (ret < 0) + { + /* + * If the file is around and old (> 10 minutes), + * assume the lock is stale. This assumes that any + * machines sharing the same filesystem will have clocks + * reasonably close to each other. + */ + if (FcStat (atomic->lck, &lck_stat) >= 0) + { + time_t now = time (0); + if ((long int) (now - lck_stat.st_mtime) > 10 * 60) + { +#ifdef HAVE_LINK + if (unlink ((char *) atomic->lck) == 0) + return FcAtomicLock (atomic); +#else + if (rmdir ((char *) atomic->lck) == 0) + return FcAtomicLock (atomic); +#endif + } + } + return FcFalse; + } + (void) unlink ((char *) atomic->new); + return FcTrue; +} + +FcChar8 * +FcAtomicNewFile (FcAtomic *atomic) +{ + return atomic->new; +} + +FcChar8 * +FcAtomicOrigFile (FcAtomic *atomic) +{ + return atomic->file; +} + +FcBool +FcAtomicReplaceOrig (FcAtomic *atomic) +{ +#ifdef _WIN32 + unlink (atomic->file); +#endif + if (rename ((char *) atomic->new, (char *) atomic->file) < 0) + return FcFalse; + return FcTrue; +} + +void +FcAtomicDeleteNew (FcAtomic *atomic) +{ + unlink ((char *) atomic->new); +} + +void +FcAtomicUnlock (FcAtomic *atomic) +{ +#ifdef HAVE_LINK + unlink ((char *) atomic->lck); +#else + rmdir ((char *) atomic->lck); +#endif +} + +void +FcAtomicDestroy (FcAtomic *atomic) +{ + FcMemFree (FC_MEM_ATOMIC, sizeof (FcAtomic) + + strlen ((char *) atomic->file) * 4 + 4 + + sizeof (NEW_NAME) + sizeof (LCK_NAME) + + sizeof (TMP_NAME)); + + free (atomic); +} +#define __fcatomic__ +#include "fcaliastail.h" +#undef __fcatomic__ diff --git a/fontconfig/src/fcblanks.c b/fontconfig/src/fcblanks.c index eab2ecf78..a80a1344f 100644 --- a/fontconfig/src/fcblanks.c +++ b/fontconfig/src/fcblanks.c @@ -1,95 +1,95 @@ -/* - * fontconfig/src/fcblanks.c - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" - -FcBlanks * -FcBlanksCreate (void) -{ - FcBlanks *b; - - b = malloc (sizeof (FcBlanks)); - if (!b) - return 0; - FcMemAlloc (FC_MEM_BLANKS, sizeof (FcBlanks)); - b->nblank = 0; - b->sblank = 0; - b->blanks = 0; - return b; -} - -void -FcBlanksDestroy (FcBlanks *b) -{ - if (b->blanks) - { - FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32)); - free (b->blanks); - } - FcMemFree (FC_MEM_BLANKS, sizeof (FcBlanks)); - free (b); -} - -FcBool -FcBlanksAdd (FcBlanks *b, FcChar32 ucs4) -{ - FcChar32 *c; - int sblank; - - for (sblank = 0; sblank < b->nblank; sblank++) - if (b->blanks[sblank] == ucs4) - return FcTrue; - - if (b->nblank == b->sblank) - { - sblank = b->sblank + 32; - if (b->blanks) - c = (FcChar32 *) realloc (b->blanks, sblank * sizeof (FcChar32)); - else - c = (FcChar32 *) malloc (sblank * sizeof (FcChar32)); - if (!c) - return FcFalse; - if (b->sblank) - FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32)); - FcMemAlloc (FC_MEM_BLANKS, sblank * sizeof (FcChar32)); - b->sblank = sblank; - b->blanks = c; - } - b->blanks[b->nblank++] = ucs4; - return FcTrue; -} - -FcBool -FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4) -{ - int i; - - for (i = 0; i < b->nblank; i++) - if (b->blanks[i] == ucs4) - return FcTrue; - return FcFalse; -} -#define __fcblanks__ -#include "fcaliastail.h" -#undef __fcblanks__ +/* + * fontconfig/src/fcblanks.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" + +FcBlanks * +FcBlanksCreate (void) +{ + FcBlanks *b; + + b = malloc (sizeof (FcBlanks)); + if (!b) + return 0; + FcMemAlloc (FC_MEM_BLANKS, sizeof (FcBlanks)); + b->nblank = 0; + b->sblank = 0; + b->blanks = 0; + return b; +} + +void +FcBlanksDestroy (FcBlanks *b) +{ + if (b->blanks) + { + FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32)); + free (b->blanks); + } + FcMemFree (FC_MEM_BLANKS, sizeof (FcBlanks)); + free (b); +} + +FcBool +FcBlanksAdd (FcBlanks *b, FcChar32 ucs4) +{ + FcChar32 *c; + int sblank; + + for (sblank = 0; sblank < b->nblank; sblank++) + if (b->blanks[sblank] == ucs4) + return FcTrue; + + if (b->nblank == b->sblank) + { + sblank = b->sblank + 32; + if (b->blanks) + c = (FcChar32 *) realloc (b->blanks, sblank * sizeof (FcChar32)); + else + c = (FcChar32 *) malloc (sblank * sizeof (FcChar32)); + if (!c) + return FcFalse; + if (b->sblank) + FcMemFree (FC_MEM_BLANKS, b->sblank * sizeof (FcChar32)); + FcMemAlloc (FC_MEM_BLANKS, sblank * sizeof (FcChar32)); + b->sblank = sblank; + b->blanks = c; + } + b->blanks[b->nblank++] = ucs4; + return FcTrue; +} + +FcBool +FcBlanksIsMember (FcBlanks *b, FcChar32 ucs4) +{ + int i; + + for (i = 0; i < b->nblank; i++) + if (b->blanks[i] == ucs4) + return FcTrue; + return FcFalse; +} +#define __fcblanks__ +#include "fcaliastail.h" +#undef __fcblanks__ diff --git a/fontconfig/src/fccache.c b/fontconfig/src/fccache.c index b27e3d39e..392e66f80 100644 --- a/fontconfig/src/fccache.c +++ b/fontconfig/src/fccache.c @@ -1,1273 +1,1273 @@ -/* - * Copyright © 2000 Keith Packard - * Copyright © 2005 Patrick Lam - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include "fcarch.h" -#include -#include -#include -#include -#include -#include -#if defined(HAVE_MMAP) || defined(__CYGWIN__) -# include -# include -#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 - -#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<>(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 +#include +#include +#include +#include +#include +#if defined(HAVE_MMAP) || defined(__CYGWIN__) +# include +# include +#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 + +#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<>(32-s), w += x ) + +/* + * The core of the MD5 algorithm, this alters an existing MD5 hash to + * reflect the addition of 16 longwords of new data. MD5Update blocks + * the data and converts bytes into longwords for this routine. + */ +static void MD5Transform(FcChar32 buf[4], FcChar32 in[16]) +{ + register FcChar32 a, b, c, d; + + a = buf[0]; + b = buf[1]; + c = buf[2]; + d = buf[3]; + + MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7); + MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12); + MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17); + MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22); + MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7); + MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12); + MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17); + MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22); + MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7); + MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12); + MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17); + MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22); + MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7); + MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12); + MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17); + MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22); + + MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5); + MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9); + MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14); + MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20); + MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5); + MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9); + MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14); + MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20); + MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5); + MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9); + MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14); + MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20); + MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5); + MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9); + MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14); + MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20); + + MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4); + MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11); + MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16); + MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23); + MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4); + MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11); + MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16); + MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23); + MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4); + MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11); + MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16); + MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23); + MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4); + MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11); + MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16); + MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23); + + MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6); + MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10); + MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15); + MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21); + MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6); + MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10); + MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15); + MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21); + MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6); + MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10); + MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15); + MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21); + MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6); + MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10); + MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15); + MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21); + + buf[0] += a; + buf[1] += b; + buf[2] += c; + buf[3] += d; +} +#define __fccache__ +#include "fcaliastail.h" +#undef __fccache__ diff --git a/fontconfig/src/fccfg.c b/fontconfig/src/fccfg.c index d948ab8d5..09c59919d 100644 --- a/fontconfig/src/fccfg.c +++ b/fontconfig/src/fccfg.c @@ -1,2108 +1,2108 @@ -/* - * fontconfig/src/fccfg.c - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include -#include - -#if defined (_WIN32) && (defined (PIC) || defined (DLL_EXPORT)) -#define STRICT -#include -#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 - -static FcChar8 fontconfig_path[1000] = ""; - -# if (defined (PIC) || defined (DLL_EXPORT)) - -BOOL WINAPI -DllMain (HINSTANCE hinstDLL, - DWORD fdwReason, - LPVOID lpvReserved) -{ - FcChar8 *p; - - switch (fdwReason) { - case DLL_PROCESS_ATTACH: - if (!GetModuleFileName ((HMODULE) hinstDLL, fontconfig_path, - sizeof (fontconfig_path))) - break; - - /* If the fontconfig DLL is in a "bin" or "lib" subfolder, - * assume it's a Unix-style installation tree, and use - * "etc/fonts" in there as FONTCONFIG_PATH. Otherwise use the - * folder where the DLL is as FONTCONFIG_PATH. - */ - p = strrchr (fontconfig_path, '\\'); - if (p) - { - *p = '\0'; - p = strrchr (fontconfig_path, '\\'); - if (p && (FcStrCmpIgnoreCase (p + 1, "bin") == 0 || - FcStrCmpIgnoreCase (p + 1, "lib") == 0)) - *p = '\0'; - strcat (fontconfig_path, "\\etc\\fonts"); - } - else - fontconfig_path[0] = '\0'; - - break; - } - - return TRUE; -} - -# endif /* !PIC */ - -#undef FONTCONFIG_PATH -#define FONTCONFIG_PATH fontconfig_path - -#endif /* !_WIN32 */ - -#ifndef FONTCONFIG_FILE -#define FONTCONFIG_FILE "fonts.conf" -#endif - -static FcChar8 * -FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file) -{ - FcChar8 *path; - int size; - - if (!dir) - dir = (FcChar8 *) ""; - - size = strlen ((char *) dir) + 1 + strlen ((char *) file) + 1; - /* - * workaround valgrind warning because glibc takes advantage of how it knows memory is - * allocated to implement strlen by reading in groups of 4 - */ - size = (size + 3) & ~3; - - path = malloc (size); - if (!path) - return 0; - - strcpy ((char *) path, (const char *) dir); - /* make sure there's a single separator */ -#ifdef _WIN32 - if ((!path[0] || (path[strlen((char *) path)-1] != '/' && - path[strlen((char *) path)-1] != '\\')) && - !(file[0] == '/' || - file[0] == '\\' || - (isalpha (file[0]) && file[1] == ':' && (file[2] == '/' || file[2] == '\\')))) - strcat ((char *) path, "\\"); -#else - if ((!path[0] || path[strlen((char *) path)-1] != '/') && file[0] != '/') - strcat ((char *) path, "/"); -#endif - strcat ((char *) path, (char *) file); - - FcMemAlloc (FC_MEM_STRING, size); - if (access ((char *) path, R_OK) == 0) - return path; - - FcStrFree (path); - return 0; -} - -static FcChar8 ** -FcConfigGetPath (void) -{ - FcChar8 **path; - FcChar8 *env, *e, *colon; - FcChar8 *dir; - int npath; - int i; - - npath = 2; /* default dir + null */ - env = (FcChar8 *) getenv ("FONTCONFIG_PATH"); - if (env) - { - e = env; - npath++; - while (*e) - if (*e++ == FC_SEARCH_PATH_SEPARATOR) - npath++; - } - path = calloc (npath, sizeof (FcChar8 *)); - if (!path) - goto bail0; - i = 0; - - if (env) - { - e = env; - while (*e) - { - colon = (FcChar8 *) strchr ((char *) e, FC_SEARCH_PATH_SEPARATOR); - if (!colon) - colon = e + strlen ((char *) e); - path[i] = malloc (colon - e + 1); - if (!path[i]) - goto bail1; - strncpy ((char *) path[i], (const char *) e, colon - e); - path[i][colon - e] = '\0'; - if (*colon) - e = colon + 1; - else - e = colon; - i++; - } - } - -#ifdef _WIN32 - if (fontconfig_path[0] == '\0') - { - char *p; - if(!GetModuleFileName(NULL, fontconfig_path, sizeof(fontconfig_path))) - goto bail1; - p = strrchr (fontconfig_path, '\\'); - if (p) *p = '\0'; - strcat (fontconfig_path, "\\fonts"); - } -#endif - dir = (FcChar8 *) FONTCONFIG_PATH; - path[i] = malloc (strlen ((char *) dir) + 1); - if (!path[i]) - goto bail1; - strcpy ((char *) path[i], (const char *) dir); - return path; - -bail1: - for (i = 0; path[i]; i++) - free (path[i]); - free (path); -bail0: - return 0; -} - -static void -FcConfigFreePath (FcChar8 **path) -{ - FcChar8 **p; - - for (p = path; *p; p++) - free (*p); - free (path); -} - -static FcBool _FcConfigHomeEnabled = FcTrue; - -FcChar8 * -FcConfigHome (void) -{ - if (_FcConfigHomeEnabled) - { - char *home = getenv ("HOME"); - -#ifdef _WIN32 - if (home == NULL) - home = getenv ("USERPROFILE"); -#endif - - return (FcChar8 *) home; - } - return 0; -} - -FcBool -FcConfigEnableHome (FcBool enable) -{ - FcBool prev = _FcConfigHomeEnabled; - _FcConfigHomeEnabled = enable; - return prev; -} - -FcChar8 * -FcConfigFilename (const FcChar8 *url) -{ - FcChar8 *file, *dir, **path, **p; - - if (!url || !*url) - { - url = (FcChar8 *) getenv ("FONTCONFIG_FILE"); - if (!url) - url = (FcChar8 *) FONTCONFIG_FILE; - } - file = 0; - -#ifdef _WIN32 - if (isalpha (*url) && - url[1] == ':' && - (url[2] == '/' || url[2] == '\\')) - goto absolute_path; -#endif - - switch (*url) { - case '~': - dir = FcConfigHome (); - if (dir) - file = FcConfigFileExists (dir, url + 1); - else - file = 0; - break; -#ifdef _WIN32 - case '\\': - absolute_path: -#endif - case '/': - file = FcConfigFileExists (0, url); - break; - default: - path = FcConfigGetPath (); - if (!path) - return 0; - for (p = path; *p; p++) - { - file = FcConfigFileExists (*p, url); - if (file) - break; - } - FcConfigFreePath (path); - break; - } - return file; -} - -/* - * Manage the application-specific fonts - */ - -FcBool -FcConfigAppFontAddFile (FcConfig *config, - const FcChar8 *file) -{ - FcFontSet *set; - FcStrSet *subdirs; - FcStrList *sublist; - FcChar8 *subdir; - - if (!config) - { - config = FcConfigGetCurrent (); - if (!config) - return FcFalse; - } - - subdirs = FcStrSetCreate (); - if (!subdirs) - return FcFalse; - - set = FcConfigGetFonts (config, FcSetApplication); - if (!set) - { - set = FcFontSetCreate (); - if (!set) - { - FcStrSetDestroy (subdirs); - return FcFalse; - } - FcConfigSetFonts (config, set, FcSetApplication); - } - - if (!FcFileScanConfig (set, subdirs, config->blanks, file, config)) - { - FcStrSetDestroy (subdirs); - return FcFalse; - } - if ((sublist = FcStrListCreate (subdirs))) - { - while ((subdir = FcStrListNext (sublist))) - { - FcConfigAppFontAddDir (config, subdir); - } - FcStrListDone (sublist); - } - FcStrSetDestroy (subdirs); - return FcTrue; -} - -FcBool -FcConfigAppFontAddDir (FcConfig *config, - const FcChar8 *dir) -{ - FcFontSet *set; - FcStrSet *dirs; - - if (!config) - { - config = FcConfigGetCurrent (); - if (!config) - return FcFalse; - } - - dirs = FcStrSetCreate (); - if (!dirs) - return FcFalse; - - set = FcConfigGetFonts (config, FcSetApplication); - if (!set) - { - set = FcFontSetCreate (); - if (!set) - { - FcStrSetDestroy (dirs); - return FcFalse; - } - FcConfigSetFonts (config, set, FcSetApplication); - } - - FcStrSetAddFilename (dirs, dir); - - if (!FcConfigAddDirList (config, FcSetApplication, dirs)) - { - FcStrSetDestroy (dirs); - return FcFalse; - } - FcStrSetDestroy (dirs); - return FcTrue; -} - -void -FcConfigAppFontClear (FcConfig *config) -{ - if (!config) - { - config = FcConfigGetCurrent (); - if (!config) - return; - } - - FcConfigSetFonts (config, 0, FcSetApplication); -} - -/* - * Manage filename-based font source selectors - */ - -FcBool -FcConfigGlobAdd (FcConfig *config, - const FcChar8 *glob, - FcBool accept) -{ - FcStrSet *set = accept ? config->acceptGlobs : config->rejectGlobs; - - return FcStrSetAdd (set, glob); -} - -static FcBool -FcConfigGlobMatch (const FcChar8 *glob, - const FcChar8 *string) -{ - FcChar8 c; - - while ((c = *glob++)) - { - switch (c) { - case '*': - /* short circuit common case */ - if (!*glob) - return FcTrue; - /* short circuit another common case */ - if (strchr ((char *) glob, '*') == 0) - string += strlen ((char *) string) - strlen ((char *) glob); - while (*string) - { - if (FcConfigGlobMatch (glob, string)) - return FcTrue; - string++; - } - return FcFalse; - case '?': - if (*string++ == '\0') - return FcFalse; - break; - default: - if (*string++ != c) - return FcFalse; - break; - } - } - return *string == '\0'; -} - -static FcBool -FcConfigGlobsMatch (const FcStrSet *globs, - const FcChar8 *string) -{ - int i; - - for (i = 0; i < globs->num; i++) - if (FcConfigGlobMatch (globs->strs[i], string)) - return FcTrue; - return FcFalse; -} - -FcBool -FcConfigAcceptFilename (FcConfig *config, - const FcChar8 *filename) -{ - if (FcConfigGlobsMatch (config->acceptGlobs, filename)) - return FcTrue; - if (FcConfigGlobsMatch (config->rejectGlobs, filename)) - return FcFalse; - return FcTrue; -} - -/* - * Manage font-pattern based font source selectors - */ - -FcBool -FcConfigPatternsAdd (FcConfig *config, - FcPattern *pattern, - FcBool accept) -{ - FcFontSet *set = accept ? config->acceptPatterns : config->rejectPatterns; - - return FcFontSetAdd (set, pattern); -} - -static FcBool -FcConfigPatternsMatch (const FcFontSet *patterns, - const FcPattern *font) -{ - int i; - - for (i = 0; i < patterns->nfont; i++) - if (FcListPatternMatchAny (patterns->fonts[i], font)) - return FcTrue; - return FcFalse; -} - -FcBool -FcConfigAcceptFont (FcConfig *config, - const FcPattern *font) -{ - if (FcConfigPatternsMatch (config->acceptPatterns, font)) - return FcTrue; - if (FcConfigPatternsMatch (config->rejectPatterns, font)) - return FcFalse; - return FcTrue; -} -#define __fccfg__ -#include "fcaliastail.h" -#undef __fccfg__ +/* + * fontconfig/src/fccfg.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include +#include + +#if defined (_WIN32) && (defined (PIC) || defined (DLL_EXPORT)) +#define STRICT +#include +#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 + +static FcChar8 fontconfig_path[1000] = ""; + +# if (defined (PIC) || defined (DLL_EXPORT)) + +BOOL WINAPI +DllMain (HINSTANCE hinstDLL, + DWORD fdwReason, + LPVOID lpvReserved) +{ + FcChar8 *p; + + switch (fdwReason) { + case DLL_PROCESS_ATTACH: + if (!GetModuleFileName ((HMODULE) hinstDLL, fontconfig_path, + sizeof (fontconfig_path))) + break; + + /* If the fontconfig DLL is in a "bin" or "lib" subfolder, + * assume it's a Unix-style installation tree, and use + * "etc/fonts" in there as FONTCONFIG_PATH. Otherwise use the + * folder where the DLL is as FONTCONFIG_PATH. + */ + p = strrchr (fontconfig_path, '\\'); + if (p) + { + *p = '\0'; + p = strrchr (fontconfig_path, '\\'); + if (p && (FcStrCmpIgnoreCase (p + 1, "bin") == 0 || + FcStrCmpIgnoreCase (p + 1, "lib") == 0)) + *p = '\0'; + strcat (fontconfig_path, "\\etc\\fonts"); + } + else + fontconfig_path[0] = '\0'; + + break; + } + + return TRUE; +} + +# endif /* !PIC */ + +#undef FONTCONFIG_PATH +#define FONTCONFIG_PATH fontconfig_path + +#endif /* !_WIN32 */ + +#ifndef FONTCONFIG_FILE +#define FONTCONFIG_FILE "fonts.conf" +#endif + +static FcChar8 * +FcConfigFileExists (const FcChar8 *dir, const FcChar8 *file) +{ + FcChar8 *path; + int size; + + if (!dir) + dir = (FcChar8 *) ""; + + size = strlen ((char *) dir) + 1 + strlen ((char *) file) + 1; + /* + * workaround valgrind warning because glibc takes advantage of how it knows memory is + * allocated to implement strlen by reading in groups of 4 + */ + size = (size + 3) & ~3; + + path = malloc (size); + if (!path) + return 0; + + strcpy ((char *) path, (const char *) dir); + /* make sure there's a single separator */ +#ifdef _WIN32 + if ((!path[0] || (path[strlen((char *) path)-1] != '/' && + path[strlen((char *) path)-1] != '\\')) && + !(file[0] == '/' || + file[0] == '\\' || + (isalpha (file[0]) && file[1] == ':' && (file[2] == '/' || file[2] == '\\')))) + strcat ((char *) path, "\\"); +#else + if ((!path[0] || path[strlen((char *) path)-1] != '/') && file[0] != '/') + strcat ((char *) path, "/"); +#endif + strcat ((char *) path, (char *) file); + + FcMemAlloc (FC_MEM_STRING, size); + if (access ((char *) path, R_OK) == 0) + return path; + + FcStrFree (path); + return 0; +} + +static FcChar8 ** +FcConfigGetPath (void) +{ + FcChar8 **path; + FcChar8 *env, *e, *colon; + FcChar8 *dir; + int npath; + int i; + + npath = 2; /* default dir + null */ + env = (FcChar8 *) getenv ("FONTCONFIG_PATH"); + if (env) + { + e = env; + npath++; + while (*e) + if (*e++ == FC_SEARCH_PATH_SEPARATOR) + npath++; + } + path = calloc (npath, sizeof (FcChar8 *)); + if (!path) + goto bail0; + i = 0; + + if (env) + { + e = env; + while (*e) + { + colon = (FcChar8 *) strchr ((char *) e, FC_SEARCH_PATH_SEPARATOR); + if (!colon) + colon = e + strlen ((char *) e); + path[i] = malloc (colon - e + 1); + if (!path[i]) + goto bail1; + strncpy ((char *) path[i], (const char *) e, colon - e); + path[i][colon - e] = '\0'; + if (*colon) + e = colon + 1; + else + e = colon; + i++; + } + } + +#ifdef _WIN32 + if (fontconfig_path[0] == '\0') + { + char *p; + if(!GetModuleFileName(NULL, fontconfig_path, sizeof(fontconfig_path))) + goto bail1; + p = strrchr (fontconfig_path, '\\'); + if (p) *p = '\0'; + strcat (fontconfig_path, "\\fonts"); + } +#endif + dir = (FcChar8 *) FONTCONFIG_PATH; + path[i] = malloc (strlen ((char *) dir) + 1); + if (!path[i]) + goto bail1; + strcpy ((char *) path[i], (const char *) dir); + return path; + +bail1: + for (i = 0; path[i]; i++) + free (path[i]); + free (path); +bail0: + return 0; +} + +static void +FcConfigFreePath (FcChar8 **path) +{ + FcChar8 **p; + + for (p = path; *p; p++) + free (*p); + free (path); +} + +static FcBool _FcConfigHomeEnabled = FcTrue; + +FcChar8 * +FcConfigHome (void) +{ + if (_FcConfigHomeEnabled) + { + char *home = getenv ("HOME"); + +#ifdef _WIN32 + if (home == NULL) + home = getenv ("USERPROFILE"); +#endif + + return (FcChar8 *) home; + } + return 0; +} + +FcBool +FcConfigEnableHome (FcBool enable) +{ + FcBool prev = _FcConfigHomeEnabled; + _FcConfigHomeEnabled = enable; + return prev; +} + +FcChar8 * +FcConfigFilename (const FcChar8 *url) +{ + FcChar8 *file, *dir, **path, **p; + + if (!url || !*url) + { + url = (FcChar8 *) getenv ("FONTCONFIG_FILE"); + if (!url) + url = (FcChar8 *) FONTCONFIG_FILE; + } + file = 0; + +#ifdef _WIN32 + if (isalpha (*url) && + url[1] == ':' && + (url[2] == '/' || url[2] == '\\')) + goto absolute_path; +#endif + + switch (*url) { + case '~': + dir = FcConfigHome (); + if (dir) + file = FcConfigFileExists (dir, url + 1); + else + file = 0; + break; +#ifdef _WIN32 + case '\\': + absolute_path: +#endif + case '/': + file = FcConfigFileExists (0, url); + break; + default: + path = FcConfigGetPath (); + if (!path) + return 0; + for (p = path; *p; p++) + { + file = FcConfigFileExists (*p, url); + if (file) + break; + } + FcConfigFreePath (path); + break; + } + return file; +} + +/* + * Manage the application-specific fonts + */ + +FcBool +FcConfigAppFontAddFile (FcConfig *config, + const FcChar8 *file) +{ + FcFontSet *set; + FcStrSet *subdirs; + FcStrList *sublist; + FcChar8 *subdir; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + + subdirs = FcStrSetCreate (); + if (!subdirs) + return FcFalse; + + set = FcConfigGetFonts (config, FcSetApplication); + if (!set) + { + set = FcFontSetCreate (); + if (!set) + { + FcStrSetDestroy (subdirs); + return FcFalse; + } + FcConfigSetFonts (config, set, FcSetApplication); + } + + if (!FcFileScanConfig (set, subdirs, config->blanks, file, config)) + { + FcStrSetDestroy (subdirs); + return FcFalse; + } + if ((sublist = FcStrListCreate (subdirs))) + { + while ((subdir = FcStrListNext (sublist))) + { + FcConfigAppFontAddDir (config, subdir); + } + FcStrListDone (sublist); + } + FcStrSetDestroy (subdirs); + return FcTrue; +} + +FcBool +FcConfigAppFontAddDir (FcConfig *config, + const FcChar8 *dir) +{ + FcFontSet *set; + FcStrSet *dirs; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return FcFalse; + } + + dirs = FcStrSetCreate (); + if (!dirs) + return FcFalse; + + set = FcConfigGetFonts (config, FcSetApplication); + if (!set) + { + set = FcFontSetCreate (); + if (!set) + { + FcStrSetDestroy (dirs); + return FcFalse; + } + FcConfigSetFonts (config, set, FcSetApplication); + } + + FcStrSetAddFilename (dirs, dir); + + if (!FcConfigAddDirList (config, FcSetApplication, dirs)) + { + FcStrSetDestroy (dirs); + return FcFalse; + } + FcStrSetDestroy (dirs); + return FcTrue; +} + +void +FcConfigAppFontClear (FcConfig *config) +{ + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return; + } + + FcConfigSetFonts (config, 0, FcSetApplication); +} + +/* + * Manage filename-based font source selectors + */ + +FcBool +FcConfigGlobAdd (FcConfig *config, + const FcChar8 *glob, + FcBool accept) +{ + FcStrSet *set = accept ? config->acceptGlobs : config->rejectGlobs; + + return FcStrSetAdd (set, glob); +} + +static FcBool +FcConfigGlobMatch (const FcChar8 *glob, + const FcChar8 *string) +{ + FcChar8 c; + + while ((c = *glob++)) + { + switch (c) { + case '*': + /* short circuit common case */ + if (!*glob) + return FcTrue; + /* short circuit another common case */ + if (strchr ((char *) glob, '*') == 0) + string += strlen ((char *) string) - strlen ((char *) glob); + while (*string) + { + if (FcConfigGlobMatch (glob, string)) + return FcTrue; + string++; + } + return FcFalse; + case '?': + if (*string++ == '\0') + return FcFalse; + break; + default: + if (*string++ != c) + return FcFalse; + break; + } + } + return *string == '\0'; +} + +static FcBool +FcConfigGlobsMatch (const FcStrSet *globs, + const FcChar8 *string) +{ + int i; + + for (i = 0; i < globs->num; i++) + if (FcConfigGlobMatch (globs->strs[i], string)) + return FcTrue; + return FcFalse; +} + +FcBool +FcConfigAcceptFilename (FcConfig *config, + const FcChar8 *filename) +{ + if (FcConfigGlobsMatch (config->acceptGlobs, filename)) + return FcTrue; + if (FcConfigGlobsMatch (config->rejectGlobs, filename)) + return FcFalse; + return FcTrue; +} + +/* + * Manage font-pattern based font source selectors + */ + +FcBool +FcConfigPatternsAdd (FcConfig *config, + FcPattern *pattern, + FcBool accept) +{ + FcFontSet *set = accept ? config->acceptPatterns : config->rejectPatterns; + + return FcFontSetAdd (set, pattern); +} + +static FcBool +FcConfigPatternsMatch (const FcFontSet *patterns, + const FcPattern *font) +{ + int i; + + for (i = 0; i < patterns->nfont; i++) + if (FcListPatternMatchAny (patterns->fonts[i], font)) + return FcTrue; + return FcFalse; +} + +FcBool +FcConfigAcceptFont (FcConfig *config, + const FcPattern *font) +{ + if (FcConfigPatternsMatch (config->acceptPatterns, font)) + return FcTrue; + if (FcConfigPatternsMatch (config->rejectPatterns, font)) + return FcFalse; + return FcTrue; +} +#define __fccfg__ +#include "fcaliastail.h" +#undef __fccfg__ diff --git a/fontconfig/src/fccharset.c b/fontconfig/src/fccharset.c index 54e396bce..df1d2b538 100644 --- a/fontconfig/src/fccharset.c +++ b/fontconfig/src/fccharset.c @@ -1,1439 +1,1439 @@ -/* - * fontconfig/src/fccharset.c - * - * Copyright © 2001 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include - -/* #define CHECK */ - -FcCharSet * -FcCharSetCreate (void) -{ - FcCharSet *fcs; - - fcs = (FcCharSet *) malloc (sizeof (FcCharSet)); - if (!fcs) - return 0; - FcMemAlloc (FC_MEM_CHARSET, sizeof (FcCharSet)); - fcs->ref = 1; - fcs->num = 0; - fcs->leaves_offset = 0; - fcs->numbers_offset = 0; - return fcs; -} - -FcCharSet * -FcCharSetNew (void) -{ - return FcCharSetCreate (); -} - -void -FcCharSetDestroy (FcCharSet *fcs) -{ - int i; - - if (fcs->ref == FC_REF_CONSTANT) - { - FcCacheObjectDereference (fcs); - return; - } - if (--fcs->ref > 0) - return; - for (i = 0; i < fcs->num; i++) - { - FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); - free (FcCharSetLeaf (fcs, i)); - } - if (fcs->num) - { - /* the numbers here are estimates */ - FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (intptr_t)); - free (FcCharSetLeaves (fcs)); - FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (FcChar16)); - free (FcCharSetNumbers (fcs)); - } - FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); - free (fcs); -} - -/* - * Search for the leaf containing with the specified num. - * Return its index if it exists, otherwise return negative of - * the (position + 1) where it should be inserted - */ - - -static int -FcCharSetFindLeafForward (const FcCharSet *fcs, int start, FcChar16 num) -{ - FcChar16 *numbers = FcCharSetNumbers(fcs); - FcChar16 page; - int low = start; - int high = fcs->num - 1; - - if (!numbers) - return -1; - while (low <= high) - { - int mid = (low + high) >> 1; - page = numbers[mid]; - if (page == num) - return mid; - if (page < num) - low = mid + 1; - else - high = mid - 1; - } - if (high < 0 || (high < fcs->num && numbers[high] < num)) - high++; - return -(high + 1); -} - -/* - * Locate the leaf containing the specified char, return - * its index if it exists, otherwise return negative of - * the (position + 1) where it should be inserted - */ - -static int -FcCharSetFindLeafPos (const FcCharSet *fcs, FcChar32 ucs4) -{ - return FcCharSetFindLeafForward (fcs, 0, ucs4 >> 8); -} - -static FcCharLeaf * -FcCharSetFindLeaf (const FcCharSet *fcs, FcChar32 ucs4) -{ - int pos = FcCharSetFindLeafPos (fcs, ucs4); - if (pos >= 0) - return FcCharSetLeaf(fcs, pos); - return 0; -} - -#define FC_IS_ZERO_OR_POWER_OF_TWO(x) (!((x) & ((x)-1))) - -static FcBool -FcCharSetPutLeaf (FcCharSet *fcs, - FcChar32 ucs4, - FcCharLeaf *leaf, - int pos) -{ - intptr_t *leaves = FcCharSetLeaves (fcs); - FcChar16 *numbers = FcCharSetNumbers (fcs); - - ucs4 >>= 8; - if (ucs4 >= 0x10000) - return FcFalse; - - if (FC_IS_ZERO_OR_POWER_OF_TWO (fcs->num)) - { - if (!fcs->num) - { - unsigned int alloced = 8; - leaves = malloc (alloced * sizeof (*leaves)); - numbers = malloc (alloced * sizeof (*numbers)); - FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves)); - FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers)); - } - else - { - unsigned int alloced = fcs->num; - intptr_t *new_leaves, distance; - - FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*leaves)); - FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*numbers)); - - alloced *= 2; - new_leaves = realloc (leaves, alloced * sizeof (*leaves)); - numbers = realloc (numbers, alloced * sizeof (*numbers)); - - FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves)); - FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers)); - - distance = (intptr_t) new_leaves - (intptr_t) leaves; - if (new_leaves && distance) - { - int i; - for (i = 0; i < fcs->num; i++) - new_leaves[i] -= distance; - } - leaves = new_leaves; - } - - if (!leaves || !numbers) - return FcFalse; - - fcs->leaves_offset = FcPtrToOffset (fcs, leaves); - fcs->numbers_offset = FcPtrToOffset (fcs, numbers); - } - - memmove (leaves + pos + 1, leaves + pos, - (fcs->num - pos) * sizeof (*leaves)); - memmove (numbers + pos + 1, numbers + pos, - (fcs->num - pos) * sizeof (*numbers)); - numbers[pos] = (FcChar16) ucs4; - leaves[pos] = FcPtrToOffset (leaves, leaf); - fcs->num++; - return FcTrue; -} - -/* - * Locate the leaf containing the specified char, creating it - * if desired - */ - -FcCharLeaf * -FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4) -{ - int pos; - FcCharLeaf *leaf; - - pos = FcCharSetFindLeafPos (fcs, ucs4); - if (pos >= 0) - return FcCharSetLeaf(fcs, pos); - - leaf = calloc (1, sizeof (FcCharLeaf)); - if (!leaf) - return 0; - - pos = -pos - 1; - if (!FcCharSetPutLeaf (fcs, ucs4, leaf, pos)) - { - free (leaf); - return 0; - } - FcMemAlloc (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); - return leaf; -} - -static FcBool -FcCharSetInsertLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf) -{ - int pos; - - pos = FcCharSetFindLeafPos (fcs, ucs4); - if (pos >= 0) - { - FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); - free (FcCharSetLeaf (fcs, pos)); - FcCharSetLeaves(fcs)[pos] = FcPtrToOffset (FcCharSetLeaves(fcs), - leaf); - return FcTrue; - } - pos = -pos - 1; - return FcCharSetPutLeaf (fcs, ucs4, leaf, pos); -} - -FcBool -FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4) -{ - FcCharLeaf *leaf; - FcChar32 *b; - - if (fcs->ref == FC_REF_CONSTANT) - return FcFalse; - leaf = FcCharSetFindLeafCreate (fcs, ucs4); - if (!leaf) - return FcFalse; - b = &leaf->map[(ucs4 & 0xff) >> 5]; - *b |= (1 << (ucs4 & 0x1f)); - return FcTrue; -} - -FcBool -FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4) -{ - FcCharLeaf *leaf; - FcChar32 *b; - - if (fcs->ref == FC_REF_CONSTANT) - return FcFalse; - leaf = FcCharSetFindLeaf (fcs, ucs4); - if (!leaf) - return FcTrue; - b = &leaf->map[(ucs4 & 0xff) >> 5]; - *b &= ~(1 << (ucs4 & 0x1f)); - /* We don't bother removing the leaf if it's empty */ - return FcTrue; -} - -/* - * An iterator for the leaves of a charset - */ - -typedef struct _fcCharSetIter { - FcCharLeaf *leaf; - FcChar32 ucs4; - int pos; -} FcCharSetIter; - -/* - * Set iter->leaf to the leaf containing iter->ucs4 or higher - */ - -static void -FcCharSetIterSet (const FcCharSet *fcs, FcCharSetIter *iter) -{ - int pos = FcCharSetFindLeafPos (fcs, iter->ucs4); - - if (pos < 0) - { - pos = -pos - 1; - if (pos == fcs->num) - { - iter->ucs4 = ~0; - iter->leaf = 0; - return; - } - iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8; - } - iter->leaf = FcCharSetLeaf(fcs, pos); - iter->pos = pos; -} - -static void -FcCharSetIterNext (const FcCharSet *fcs, FcCharSetIter *iter) -{ - int pos = iter->pos + 1; - if (pos >= fcs->num) - { - iter->ucs4 = ~0; - iter->leaf = 0; - } - else - { - iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8; - iter->leaf = FcCharSetLeaf(fcs, pos); - iter->pos = pos; - } -} - - -static void -FcCharSetIterStart (const FcCharSet *fcs, FcCharSetIter *iter) -{ - iter->ucs4 = 0; - iter->pos = 0; - FcCharSetIterSet (fcs, iter); -} - -FcCharSet * -FcCharSetCopy (FcCharSet *src) -{ - if (src->ref != FC_REF_CONSTANT) - src->ref++; - else - FcCacheObjectReference (src); - return src; -} - -FcBool -FcCharSetEqual (const FcCharSet *a, const FcCharSet *b) -{ - FcCharSetIter ai, bi; - int i; - - if (a == b) - return FcTrue; - for (FcCharSetIterStart (a, &ai), FcCharSetIterStart (b, &bi); - ai.leaf && bi.leaf; - FcCharSetIterNext (a, &ai), FcCharSetIterNext (b, &bi)) - { - if (ai.ucs4 != bi.ucs4) - return FcFalse; - for (i = 0; i < 256/32; i++) - if (ai.leaf->map[i] != bi.leaf->map[i]) - return FcFalse; - } - return ai.leaf == bi.leaf; -} - -static FcBool -FcCharSetAddLeaf (FcCharSet *fcs, - FcChar32 ucs4, - FcCharLeaf *leaf) -{ - FcCharLeaf *new = FcCharSetFindLeafCreate (fcs, ucs4); - if (!new) - return FcFalse; - *new = *leaf; - return FcTrue; -} - -static FcCharSet * -FcCharSetOperate (const FcCharSet *a, - const FcCharSet *b, - FcBool (*overlap) (FcCharLeaf *result, - const FcCharLeaf *al, - const FcCharLeaf *bl), - FcBool aonly, - FcBool bonly) -{ - FcCharSet *fcs; - FcCharSetIter ai, bi; - - fcs = FcCharSetCreate (); - if (!fcs) - goto bail0; - FcCharSetIterStart (a, &ai); - FcCharSetIterStart (b, &bi); - while ((ai.leaf || (bonly && bi.leaf)) && (bi.leaf || (aonly && ai.leaf))) - { - if (ai.ucs4 < bi.ucs4) - { - if (aonly) - { - if (!FcCharSetAddLeaf (fcs, ai.ucs4, ai.leaf)) - goto bail1; - FcCharSetIterNext (a, &ai); - } - else - { - ai.ucs4 = bi.ucs4; - FcCharSetIterSet (a, &ai); - } - } - else if (bi.ucs4 < ai.ucs4 ) - { - if (bonly) - { - if (!FcCharSetAddLeaf (fcs, bi.ucs4, bi.leaf)) - goto bail1; - FcCharSetIterNext (b, &bi); - } - else - { - bi.ucs4 = ai.ucs4; - FcCharSetIterSet (b, &bi); - } - } - else - { - FcCharLeaf leaf; - - if ((*overlap) (&leaf, ai.leaf, bi.leaf)) - { - if (!FcCharSetAddLeaf (fcs, ai.ucs4, &leaf)) - goto bail1; - } - FcCharSetIterNext (a, &ai); - FcCharSetIterNext (b, &bi); - } - } - return fcs; -bail1: - FcCharSetDestroy (fcs); -bail0: - return 0; -} - -static FcBool -FcCharSetIntersectLeaf (FcCharLeaf *result, - const FcCharLeaf *al, - const FcCharLeaf *bl) -{ - int i; - FcBool nonempty = FcFalse; - - for (i = 0; i < 256/32; i++) - if ((result->map[i] = al->map[i] & bl->map[i])) - nonempty = FcTrue; - return nonempty; -} - -FcCharSet * -FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b) -{ - return FcCharSetOperate (a, b, FcCharSetIntersectLeaf, FcFalse, FcFalse); -} - -static FcBool -FcCharSetUnionLeaf (FcCharLeaf *result, - const FcCharLeaf *al, - const FcCharLeaf *bl) -{ - int i; - - for (i = 0; i < 256/32; i++) - result->map[i] = al->map[i] | bl->map[i]; - return FcTrue; -} - -FcCharSet * -FcCharSetUnion (const FcCharSet *a, const FcCharSet *b) -{ - return FcCharSetOperate (a, b, FcCharSetUnionLeaf, FcTrue, FcTrue); -} - -FcBool -FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed) -{ - int ai = 0, bi = 0; - FcChar16 an, bn; - - if (a->ref == FC_REF_CONSTANT) { - if (changed) - *changed = FcFalse; - return FcFalse; - } - - if (changed) { - *changed = !FcCharSetIsSubset(b, a); - if (!*changed) - return FcTrue; - } - - while (bi < b->num) - { - an = ai < a->num ? FcCharSetNumbers(a)[ai] : ~0; - bn = FcCharSetNumbers(b)[bi]; - - if (an < bn) - { - ai = FcCharSetFindLeafForward (a, ai + 1, bn); - if (ai < 0) - ai = -ai - 1; - } - else - { - FcCharLeaf *bl = FcCharSetLeaf(b, bi); - if (bn < an) - { - if (!FcCharSetAddLeaf (a, bn << 8, bl)) - return FcFalse; - } - else - { - FcCharLeaf *al = FcCharSetLeaf(a, ai); - FcCharSetUnionLeaf (al, al, bl); - } - - ai++; - bi++; - } - } - - return FcTrue; -} - -static FcBool -FcCharSetSubtractLeaf (FcCharLeaf *result, - const FcCharLeaf *al, - const FcCharLeaf *bl) -{ - int i; - FcBool nonempty = FcFalse; - - for (i = 0; i < 256/32; i++) - if ((result->map[i] = al->map[i] & ~bl->map[i])) - nonempty = FcTrue; - return nonempty; -} - -FcCharSet * -FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b) -{ - return FcCharSetOperate (a, b, FcCharSetSubtractLeaf, FcTrue, FcFalse); -} - -FcBool -FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4) -{ - FcCharLeaf *leaf = FcCharSetFindLeaf (fcs, ucs4); - if (!leaf) - return FcFalse; - return (leaf->map[(ucs4 & 0xff) >> 5] & (1 << (ucs4 & 0x1f))) != 0; -} - -static FcChar32 -FcCharSetPopCount (FcChar32 c1) -{ -#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) - return __builtin_popcount (c1); -#else - /* hackmem 169 */ - FcChar32 c2 = (c1 >> 1) & 033333333333; - c2 = c1 - c2 - ((c2 >> 1) & 033333333333); - return (((c2 + (c2 >> 3)) & 030707070707) % 077); -#endif -} - -FcChar32 -FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b) -{ - FcCharSetIter ai, bi; - FcChar32 count = 0; - - FcCharSetIterStart (a, &ai); - FcCharSetIterStart (b, &bi); - while (ai.leaf && bi.leaf) - { - if (ai.ucs4 == bi.ucs4) - { - FcChar32 *am = ai.leaf->map; - FcChar32 *bm = bi.leaf->map; - int i = 256/32; - while (i--) - count += FcCharSetPopCount (*am++ & *bm++); - FcCharSetIterNext (a, &ai); - } - else if (ai.ucs4 < bi.ucs4) - { - ai.ucs4 = bi.ucs4; - FcCharSetIterSet (a, &ai); - } - if (bi.ucs4 < ai.ucs4) - { - bi.ucs4 = ai.ucs4; - FcCharSetIterSet (b, &bi); - } - } - return count; -} - -FcChar32 -FcCharSetCount (const FcCharSet *a) -{ - FcCharSetIter ai; - FcChar32 count = 0; - - for (FcCharSetIterStart (a, &ai); ai.leaf; FcCharSetIterNext (a, &ai)) - { - int i = 256/32; - FcChar32 *am = ai.leaf->map; - - while (i--) - count += FcCharSetPopCount (*am++); - } - return count; -} - -FcChar32 -FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b) -{ - FcCharSetIter ai, bi; - FcChar32 count = 0; - - FcCharSetIterStart (a, &ai); - FcCharSetIterStart (b, &bi); - while (ai.leaf) - { - if (ai.ucs4 <= bi.ucs4) - { - FcChar32 *am = ai.leaf->map; - int i = 256/32; - if (ai.ucs4 == bi.ucs4) - { - FcChar32 *bm = bi.leaf->map; - while (i--) - count += FcCharSetPopCount (*am++ & ~*bm++); - } - else - { - while (i--) - count += FcCharSetPopCount (*am++); - } - FcCharSetIterNext (a, &ai); - } - else if (bi.leaf) - { - bi.ucs4 = ai.ucs4; - FcCharSetIterSet (b, &bi); - } - } - return count; -} - -/* - * return FcTrue iff a is a subset of b - */ -FcBool -FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b) -{ - int ai, bi; - FcChar16 an, bn; - - if (a == b) return FcTrue; - bi = 0; - ai = 0; - while (ai < a->num && bi < b->num) - { - an = FcCharSetNumbers(a)[ai]; - bn = FcCharSetNumbers(b)[bi]; - /* - * Check matching pages - */ - if (an == bn) - { - FcChar32 *am = FcCharSetLeaf(a, ai)->map; - FcChar32 *bm = FcCharSetLeaf(b, bi)->map; - - if (am != bm) - { - int i = 256/32; - /* - * Does am have any bits not in bm? - */ - while (i--) - if (*am++ & ~*bm++) - return FcFalse; - } - ai++; - bi++; - } - /* - * Does a have any pages not in b? - */ - else if (an < bn) - return FcFalse; - else - { - bi = FcCharSetFindLeafForward (b, bi + 1, an); - if (bi < 0) - bi = -bi - 1; - } - } - /* - * did we look at every page? - */ - return ai >= a->num; -} - -/* - * These two functions efficiently walk the entire charmap for - * other software (like pango) that want their own copy - */ - -FcChar32 -FcCharSetNextPage (const FcCharSet *a, - FcChar32 map[FC_CHARSET_MAP_SIZE], - FcChar32 *next) -{ - FcCharSetIter ai; - FcChar32 page; - - ai.ucs4 = *next; - FcCharSetIterSet (a, &ai); - if (!ai.leaf) - return FC_CHARSET_DONE; - - /* - * Save current information - */ - page = ai.ucs4; - memcpy (map, ai.leaf->map, sizeof (ai.leaf->map)); - /* - * Step to next page - */ - FcCharSetIterNext (a, &ai); - *next = ai.ucs4; - - return page; -} - -FcChar32 -FcCharSetFirstPage (const FcCharSet *a, - FcChar32 map[FC_CHARSET_MAP_SIZE], - FcChar32 *next) -{ - *next = 0; - return FcCharSetNextPage (a, map, next); -} - -/* - * old coverage API, rather hard to use correctly - */ - -FcChar32 -FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result) -{ - FcCharSetIter ai; - - ai.ucs4 = page; - FcCharSetIterSet (a, &ai); - if (!ai.leaf) - { - memset (result, '\0', 256 / 8); - page = 0; - } - else - { - memcpy (result, ai.leaf->map, sizeof (ai.leaf->map)); - FcCharSetIterNext (a, &ai); - page = ai.ucs4; - } - return page; -} - -/* - * ASCII representation of charsets. - * - * Each leaf is represented as 9 32-bit values, the code of the first character followed - * by 8 32 bit values for the leaf itself. Each value is encoded as 5 ASCII characters, - * only 85 different values are used to avoid control characters as well as the other - * characters used to encode font names. 85**5 > 2^32 so things work out, but - * it's not exactly human readable output. As a special case, 0 is encoded as a space - */ - -static const unsigned char charToValue[256] = { - /* "" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\b" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\020" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\030" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* " " */ 0xff, 0x00, 0xff, 0x01, 0x02, 0x03, 0x04, 0xff, - /* "(" */ 0x05, 0x06, 0x07, 0x08, 0xff, 0xff, 0x09, 0x0a, - /* "0" */ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, - /* "8" */ 0x13, 0x14, 0xff, 0x15, 0x16, 0xff, 0x17, 0x18, - /* "@" */ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, - /* "H" */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, - /* "P" */ 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, - /* "X" */ 0x31, 0x32, 0x33, 0x34, 0xff, 0x35, 0x36, 0xff, - /* "`" */ 0xff, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, - /* "h" */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, - /* "p" */ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, - /* "x" */ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0xff, - /* "\200" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\210" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\220" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\230" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\240" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\250" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\260" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\270" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\300" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\310" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\320" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\330" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\340" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\350" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\360" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - /* "\370" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, -}; - -static const FcChar8 valueToChar[0x55] = { - /* 0x00 */ '!', '#', '$', '%', '&', '(', ')', '*', - /* 0x08 */ '+', '.', '/', '0', '1', '2', '3', '4', - /* 0x10 */ '5', '6', '7', '8', '9', ';', '<', '>', - /* 0x18 */ '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', - /* 0x20 */ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', - /* 0x28 */ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', - /* 0x30 */ 'W', 'X', 'Y', 'Z', '[', ']', '^', 'a', - /* 0x38 */ 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', - /* 0x40 */ 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', - /* 0x48 */ 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', - /* 0x50 */ 'z', '{', '|', '}', '~', -}; - -static FcChar8 * -FcCharSetParseValue (FcChar8 *string, FcChar32 *value) -{ - int i; - FcChar32 v; - FcChar32 c; - - if (*string == ' ') - { - v = 0; - string++; - } - else - { - v = 0; - for (i = 0; i < 5; i++) - { - if (!(c = (FcChar32) (unsigned char) *string++)) - return 0; - c = charToValue[c]; - if (c == 0xff) - return 0; - v = v * 85 + c; - } - } - *value = v; - return string; -} - -static FcBool -FcCharSetUnparseValue (FcStrBuf *buf, FcChar32 value) -{ - int i; - if (value == 0) - { - return FcStrBufChar (buf, ' '); - } - else - { - FcChar8 string[6]; - FcChar8 *s = string + 5; - string[5] = '\0'; - for (i = 0; i < 5; i++) - { - *--s = valueToChar[value % 85]; - value /= 85; - } - for (i = 0; i < 5; i++) - if (!FcStrBufChar (buf, *s++)) - return FcFalse; - } - return FcTrue; -} - -FcCharSet * -FcNameParseCharSet (FcChar8 *string) -{ - FcCharSet *c; - FcChar32 ucs4; - FcCharLeaf *leaf; - FcCharLeaf temp; - FcChar32 bits; - int i; - - c = FcCharSetCreate (); - if (!c) - goto bail0; - while (*string) - { - string = FcCharSetParseValue (string, &ucs4); - if (!string) - goto bail1; - bits = 0; - for (i = 0; i < 256/32; i++) - { - string = FcCharSetParseValue (string, &temp.map[i]); - if (!string) - goto bail1; - bits |= temp.map[i]; - } - if (bits) - { - leaf = malloc (sizeof (FcCharLeaf)); - if (!leaf) - goto bail1; - *leaf = temp; - if (!FcCharSetInsertLeaf (c, ucs4, leaf)) - goto bail1; - } - } - return c; -bail1: - if (c->num) - { - FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcCharLeaf *)); - free (FcCharSetLeaves (c)); - } - if (c->num) - { - FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcChar16)); - free (FcCharSetNumbers (c)); - } - FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); - free (c); -bail0: - return NULL; -} - -FcBool -FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c) -{ - FcCharSetIter ci; - int i; -#ifdef CHECK - int len = buf->len; -#endif - - for (FcCharSetIterStart (c, &ci); - ci.leaf; - FcCharSetIterNext (c, &ci)) - { - if (!FcCharSetUnparseValue (buf, ci.ucs4)) - return FcFalse; - for (i = 0; i < 256/32; i++) - if (!FcCharSetUnparseValue (buf, ci.leaf->map[i])) - return FcFalse; - } -#ifdef CHECK - { - FcCharSet *check; - FcChar32 missing; - FcCharSetIter ci, checki; - - /* null terminate for parser */ - FcStrBufChar (buf, '\0'); - /* step back over null for life after test */ - buf->len--; - check = FcNameParseCharSet (buf->buf + len); - FcCharSetIterStart (c, &ci); - FcCharSetIterStart (check, &checki); - while (ci.leaf || checki.leaf) - { - if (ci.ucs4 < checki.ucs4) - { - printf ("Missing leaf node at 0x%x\n", ci.ucs4); - FcCharSetIterNext (c, &ci); - } - else if (checki.ucs4 < ci.ucs4) - { - printf ("Extra leaf node at 0x%x\n", checki.ucs4); - FcCharSetIterNext (check, &checki); - } - else - { - int i = 256/32; - FcChar32 *cm = ci.leaf->map; - FcChar32 *checkm = checki.leaf->map; - - for (i = 0; i < 256; i += 32) - { - if (*cm != *checkm) - printf ("Mismatching sets at 0x%08x: 0x%08x != 0x%08x\n", - ci.ucs4 + i, *cm, *checkm); - cm++; - checkm++; - } - FcCharSetIterNext (c, &ci); - FcCharSetIterNext (check, &checki); - } - } - if ((missing = FcCharSetSubtractCount (c, check))) - printf ("%d missing in reparsed result\n", missing); - if ((missing = FcCharSetSubtractCount (check, c))) - printf ("%d extra in reparsed result\n", missing); - FcCharSetDestroy (check); - } -#endif - - return FcTrue; -} - -typedef struct _FcCharLeafEnt FcCharLeafEnt; - -struct _FcCharLeafEnt { - FcCharLeafEnt *next; - FcChar32 hash; - FcCharLeaf leaf; -}; - -#define FC_CHAR_LEAF_BLOCK (4096 / sizeof (FcCharLeafEnt)) -#define FC_CHAR_LEAF_HASH_SIZE 257 - -typedef struct _FcCharSetEnt FcCharSetEnt; - -struct _FcCharSetEnt { - FcCharSetEnt *next; - FcChar32 hash; - FcCharSet set; -}; - -typedef struct _FcCharSetOrigEnt FcCharSetOrigEnt; - -struct _FcCharSetOrigEnt { - FcCharSetOrigEnt *next; - const FcCharSet *orig; - const FcCharSet *frozen; -}; - -#define FC_CHAR_SET_HASH_SIZE 67 - -struct _FcCharSetFreezer { - FcCharLeafEnt *leaf_hash_table[FC_CHAR_LEAF_HASH_SIZE]; - FcCharLeafEnt **leaf_blocks; - int leaf_block_count; - FcCharSetEnt *set_hash_table[FC_CHAR_SET_HASH_SIZE]; - FcCharSetOrigEnt *orig_hash_table[FC_CHAR_SET_HASH_SIZE]; - FcCharLeafEnt *current_block; - int leaf_remain; - int leaves_seen; - int charsets_seen; - int leaves_allocated; - int charsets_allocated; -}; - -static FcCharLeafEnt * -FcCharLeafEntCreate (FcCharSetFreezer *freezer) -{ - if (!freezer->leaf_remain) - { - FcCharLeafEnt **newBlocks; - - freezer->leaf_block_count++; - newBlocks = realloc (freezer->leaf_blocks, freezer->leaf_block_count * sizeof (FcCharLeafEnt *)); - if (!newBlocks) - return 0; - freezer->leaf_blocks = newBlocks; - freezer->current_block = freezer->leaf_blocks[freezer->leaf_block_count-1] = malloc (FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); - if (!freezer->current_block) - return 0; - FcMemAlloc (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); - freezer->leaf_remain = FC_CHAR_LEAF_BLOCK; - } - freezer->leaf_remain--; - freezer->leaves_allocated++; - return freezer->current_block++; -} - -static FcChar32 -FcCharLeafHash (FcCharLeaf *leaf) -{ - FcChar32 hash = 0; - int i; - - for (i = 0; i < 256/32; i++) - hash = ((hash << 1) | (hash >> 31)) ^ leaf->map[i]; - return hash; -} - -static FcCharLeaf * -FcCharSetFreezeLeaf (FcCharSetFreezer *freezer, FcCharLeaf *leaf) -{ - FcChar32 hash = FcCharLeafHash (leaf); - FcCharLeafEnt **bucket = &freezer->leaf_hash_table[hash % FC_CHAR_LEAF_HASH_SIZE]; - FcCharLeafEnt *ent; - - for (ent = *bucket; ent; ent = ent->next) - { - if (ent->hash == hash && !memcmp (&ent->leaf, leaf, sizeof (FcCharLeaf))) - return &ent->leaf; - } - - ent = FcCharLeafEntCreate(freezer); - if (!ent) - return 0; - ent->leaf = *leaf; - ent->hash = hash; - ent->next = *bucket; - *bucket = ent; - return &ent->leaf; -} - -static FcChar32 -FcCharSetHash (FcCharSet *fcs) -{ - FcChar32 hash = 0; - int i; - - /* hash in leaves */ - for (i = 0; i < fcs->num; i++) - hash = ((hash << 1) | (hash >> 31)) ^ FcCharLeafHash (FcCharSetLeaf(fcs,i)); - /* hash in numbers */ - for (i = 0; i < fcs->num; i++) - hash = ((hash << 1) | (hash >> 31)) ^ *FcCharSetNumbers(fcs); - return hash; -} - -static FcBool -FcCharSetFreezeOrig (FcCharSetFreezer *freezer, const FcCharSet *orig, const FcCharSet *frozen) -{ - FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE]; - FcCharSetOrigEnt *ent; - - ent = malloc (sizeof (FcCharSetOrigEnt)); - if (!ent) - return FcFalse; - ent->orig = orig; - ent->frozen = frozen; - ent->next = *bucket; - *bucket = ent; - return FcTrue; -} - -static FcCharSet * -FcCharSetFreezeBase (FcCharSetFreezer *freezer, FcCharSet *fcs, const FcCharSet *orig) -{ - FcChar32 hash = FcCharSetHash (fcs); - FcCharSetEnt **bucket = &freezer->set_hash_table[hash % FC_CHAR_SET_HASH_SIZE]; - FcCharSetEnt *ent; - int size; - int i; - - for (ent = *bucket; ent; ent = ent->next) - { - if (ent->hash == hash && - ent->set.num == fcs->num && - !memcmp (FcCharSetNumbers(&ent->set), - FcCharSetNumbers(fcs), - fcs->num * sizeof (FcChar16))) - { - FcBool ok = FcTrue; - int i; - - for (i = 0; i < fcs->num; i++) - if (FcCharSetLeaf(&ent->set, i) != FcCharSetLeaf(fcs, i)) - ok = FcFalse; - if (ok) - return &ent->set; - } - } - - size = (sizeof (FcCharSetEnt) + - fcs->num * sizeof (FcCharLeaf *) + - fcs->num * sizeof (FcChar16)); - ent = malloc (size); - if (!ent) - return 0; - FcMemAlloc (FC_MEM_CHARSET, size); - - freezer->charsets_allocated++; - - ent->set.ref = FC_REF_CONSTANT; - ent->set.num = fcs->num; - if (fcs->num) - { - intptr_t *ent_leaves; - - ent->set.leaves_offset = sizeof (ent->set); - ent->set.numbers_offset = (ent->set.leaves_offset + - fcs->num * sizeof (intptr_t)); - - ent_leaves = FcCharSetLeaves (&ent->set); - for (i = 0; i < fcs->num; i++) - ent_leaves[i] = FcPtrToOffset (ent_leaves, - FcCharSetLeaf (fcs, i)); - memcpy (FcCharSetNumbers (&ent->set), - FcCharSetNumbers (fcs), - fcs->num * sizeof (FcChar16)); - } - else - { - ent->set.leaves_offset = 0; - ent->set.numbers_offset = 0; - } - - ent->hash = hash; - ent->next = *bucket; - *bucket = ent; - - return &ent->set; -} - -static const FcCharSet * -FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig) -{ - FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE]; - FcCharSetOrigEnt *ent; - - for (ent = *bucket; ent; ent = ent->next) - if (ent->orig == orig) - return ent->frozen; - return NULL; -} - -const FcCharSet * -FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs) -{ - FcCharSet *b; - const FcCharSet *n = 0; - FcCharLeaf *l; - int i; - - b = FcCharSetCreate (); - if (!b) - goto bail0; - for (i = 0; i < fcs->num; i++) - { - l = FcCharSetFreezeLeaf (freezer, FcCharSetLeaf(fcs, i)); - if (!l) - goto bail1; - if (!FcCharSetInsertLeaf (b, FcCharSetNumbers(fcs)[i] << 8, l)) - goto bail1; - } - n = FcCharSetFreezeBase (freezer, b, fcs); - if (!FcCharSetFreezeOrig (freezer, fcs, n)) - { - n = NULL; - goto bail1; - } - freezer->charsets_seen++; - freezer->leaves_seen += fcs->num; -bail1: - if (b->num) - { - FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcCharLeaf *)); - free (FcCharSetLeaves (b)); - } - if (b->num) - { - FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcChar16)); - free (FcCharSetNumbers (b)); - } - FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); - free (b); -bail0: - return n; -} - -FcCharSetFreezer * -FcCharSetFreezerCreate (void) -{ - FcCharSetFreezer *freezer; - - freezer = calloc (1, sizeof (FcCharSetFreezer)); - return freezer; -} - -void -FcCharSetFreezerDestroy (FcCharSetFreezer *freezer) -{ - int i; - - if (FcDebug() & FC_DBG_CACHE) - { - printf ("\ncharsets %d -> %d leaves %d -> %d\n", - freezer->charsets_seen, freezer->charsets_allocated, - freezer->leaves_seen, freezer->leaves_allocated); - } - for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++) - { - FcCharSetEnt *ent, *next; - for (ent = freezer->set_hash_table[i]; ent; ent = next) - { - next = ent->next; - FcMemFree (FC_MEM_CHARSET, (sizeof (FcCharSetEnt) + - ent->set.num * sizeof (FcCharLeaf *) + - ent->set.num * sizeof (FcChar16))); - free (ent); - } - } - - for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++) - { - FcCharSetOrigEnt *ent, *next; - for (ent = freezer->orig_hash_table[i]; ent; ent = next) - { - next = ent->next; - free (ent); - } - } - - for (i = 0; i < freezer->leaf_block_count; i++) - { - free (freezer->leaf_blocks[i]); - FcMemFree (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); - } - - free (freezer->leaf_blocks); - free (freezer); -} - -FcBool -FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs) -{ - intptr_t *leaves; - FcChar16 *numbers; - int i; - - if (cs->ref != FC_REF_CONSTANT) - { - if (!serialize->cs_freezer) - { - serialize->cs_freezer = FcCharSetFreezerCreate (); - if (!serialize->cs_freezer) - return FcFalse; - } - if (FcCharSetFindFrozen (serialize->cs_freezer, cs)) - return FcTrue; - - cs = FcCharSetFreeze (serialize->cs_freezer, cs); - } - - leaves = FcCharSetLeaves (cs); - numbers = FcCharSetNumbers (cs); - - if (!FcSerializeAlloc (serialize, cs, sizeof (FcCharSet))) - return FcFalse; - if (!FcSerializeAlloc (serialize, leaves, cs->num * sizeof (intptr_t))) - return FcFalse; - if (!FcSerializeAlloc (serialize, numbers, cs->num * sizeof (FcChar16))) - return FcFalse; - for (i = 0; i < cs->num; i++) - if (!FcSerializeAlloc (serialize, FcCharSetLeaf(cs, i), - sizeof (FcCharLeaf))) - return FcFalse; - return FcTrue; -} - -FcCharSet * -FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs) -{ - FcCharSet *cs_serialized; - intptr_t *leaves, *leaves_serialized; - FcChar16 *numbers, *numbers_serialized; - FcCharLeaf *leaf, *leaf_serialized; - int i; - - if (cs->ref != FC_REF_CONSTANT && serialize->cs_freezer) - { - cs = FcCharSetFindFrozen (serialize->cs_freezer, cs); - if (!cs) - return NULL; - } - - cs_serialized = FcSerializePtr (serialize, cs); - if (!cs_serialized) - return NULL; - - cs_serialized->ref = FC_REF_CONSTANT; - cs_serialized->num = cs->num; - - if (cs->num) - { - leaves = FcCharSetLeaves (cs); - leaves_serialized = FcSerializePtr (serialize, leaves); - if (!leaves_serialized) - return NULL; - - cs_serialized->leaves_offset = FcPtrToOffset (cs_serialized, - leaves_serialized); - - numbers = FcCharSetNumbers (cs); - numbers_serialized = FcSerializePtr (serialize, numbers); - if (!numbers) - return NULL; - - cs_serialized->numbers_offset = FcPtrToOffset (cs_serialized, - numbers_serialized); - - for (i = 0; i < cs->num; i++) - { - leaf = FcCharSetLeaf (cs, i); - leaf_serialized = FcSerializePtr (serialize, leaf); - if (!leaf_serialized) - return NULL; - *leaf_serialized = *leaf; - leaves_serialized[i] = FcPtrToOffset (leaves_serialized, - leaf_serialized); - numbers_serialized[i] = numbers[i]; - } - } - else - { - cs_serialized->leaves_offset = 0; - cs_serialized->numbers_offset = 0; - } - - return cs_serialized; -} -#define __fccharset__ -#include "fcaliastail.h" -#undef __fccharset__ +/* + * fontconfig/src/fccharset.c + * + * Copyright © 2001 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include + +/* #define CHECK */ + +FcCharSet * +FcCharSetCreate (void) +{ + FcCharSet *fcs; + + fcs = (FcCharSet *) malloc (sizeof (FcCharSet)); + if (!fcs) + return 0; + FcMemAlloc (FC_MEM_CHARSET, sizeof (FcCharSet)); + fcs->ref = 1; + fcs->num = 0; + fcs->leaves_offset = 0; + fcs->numbers_offset = 0; + return fcs; +} + +FcCharSet * +FcCharSetNew (void) +{ + return FcCharSetCreate (); +} + +void +FcCharSetDestroy (FcCharSet *fcs) +{ + int i; + + if (fcs->ref == FC_REF_CONSTANT) + { + FcCacheObjectDereference (fcs); + return; + } + if (--fcs->ref > 0) + return; + for (i = 0; i < fcs->num; i++) + { + FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); + free (FcCharSetLeaf (fcs, i)); + } + if (fcs->num) + { + /* the numbers here are estimates */ + FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (intptr_t)); + free (FcCharSetLeaves (fcs)); + FcMemFree (FC_MEM_CHARSET, fcs->num * sizeof (FcChar16)); + free (FcCharSetNumbers (fcs)); + } + FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); + free (fcs); +} + +/* + * Search for the leaf containing with the specified num. + * Return its index if it exists, otherwise return negative of + * the (position + 1) where it should be inserted + */ + + +static int +FcCharSetFindLeafForward (const FcCharSet *fcs, int start, FcChar16 num) +{ + FcChar16 *numbers = FcCharSetNumbers(fcs); + FcChar16 page; + int low = start; + int high = fcs->num - 1; + + if (!numbers) + return -1; + while (low <= high) + { + int mid = (low + high) >> 1; + page = numbers[mid]; + if (page == num) + return mid; + if (page < num) + low = mid + 1; + else + high = mid - 1; + } + if (high < 0 || (high < fcs->num && numbers[high] < num)) + high++; + return -(high + 1); +} + +/* + * Locate the leaf containing the specified char, return + * its index if it exists, otherwise return negative of + * the (position + 1) where it should be inserted + */ + +static int +FcCharSetFindLeafPos (const FcCharSet *fcs, FcChar32 ucs4) +{ + return FcCharSetFindLeafForward (fcs, 0, ucs4 >> 8); +} + +static FcCharLeaf * +FcCharSetFindLeaf (const FcCharSet *fcs, FcChar32 ucs4) +{ + int pos = FcCharSetFindLeafPos (fcs, ucs4); + if (pos >= 0) + return FcCharSetLeaf(fcs, pos); + return 0; +} + +#define FC_IS_ZERO_OR_POWER_OF_TWO(x) (!((x) & ((x)-1))) + +static FcBool +FcCharSetPutLeaf (FcCharSet *fcs, + FcChar32 ucs4, + FcCharLeaf *leaf, + int pos) +{ + intptr_t *leaves = FcCharSetLeaves (fcs); + FcChar16 *numbers = FcCharSetNumbers (fcs); + + ucs4 >>= 8; + if (ucs4 >= 0x10000) + return FcFalse; + + if (FC_IS_ZERO_OR_POWER_OF_TWO (fcs->num)) + { + if (!fcs->num) + { + unsigned int alloced = 8; + leaves = malloc (alloced * sizeof (*leaves)); + numbers = malloc (alloced * sizeof (*numbers)); + FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves)); + FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers)); + } + else + { + unsigned int alloced = fcs->num; + intptr_t *new_leaves, distance; + + FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*leaves)); + FcMemFree (FC_MEM_CHARSET, alloced * sizeof (*numbers)); + + alloced *= 2; + new_leaves = realloc (leaves, alloced * sizeof (*leaves)); + numbers = realloc (numbers, alloced * sizeof (*numbers)); + + FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*leaves)); + FcMemAlloc (FC_MEM_CHARSET, alloced * sizeof (*numbers)); + + distance = (intptr_t) new_leaves - (intptr_t) leaves; + if (new_leaves && distance) + { + int i; + for (i = 0; i < fcs->num; i++) + new_leaves[i] -= distance; + } + leaves = new_leaves; + } + + if (!leaves || !numbers) + return FcFalse; + + fcs->leaves_offset = FcPtrToOffset (fcs, leaves); + fcs->numbers_offset = FcPtrToOffset (fcs, numbers); + } + + memmove (leaves + pos + 1, leaves + pos, + (fcs->num - pos) * sizeof (*leaves)); + memmove (numbers + pos + 1, numbers + pos, + (fcs->num - pos) * sizeof (*numbers)); + numbers[pos] = (FcChar16) ucs4; + leaves[pos] = FcPtrToOffset (leaves, leaf); + fcs->num++; + return FcTrue; +} + +/* + * Locate the leaf containing the specified char, creating it + * if desired + */ + +FcCharLeaf * +FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4) +{ + int pos; + FcCharLeaf *leaf; + + pos = FcCharSetFindLeafPos (fcs, ucs4); + if (pos >= 0) + return FcCharSetLeaf(fcs, pos); + + leaf = calloc (1, sizeof (FcCharLeaf)); + if (!leaf) + return 0; + + pos = -pos - 1; + if (!FcCharSetPutLeaf (fcs, ucs4, leaf, pos)) + { + free (leaf); + return 0; + } + FcMemAlloc (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); + return leaf; +} + +static FcBool +FcCharSetInsertLeaf (FcCharSet *fcs, FcChar32 ucs4, FcCharLeaf *leaf) +{ + int pos; + + pos = FcCharSetFindLeafPos (fcs, ucs4); + if (pos >= 0) + { + FcMemFree (FC_MEM_CHARLEAF, sizeof (FcCharLeaf)); + free (FcCharSetLeaf (fcs, pos)); + FcCharSetLeaves(fcs)[pos] = FcPtrToOffset (FcCharSetLeaves(fcs), + leaf); + return FcTrue; + } + pos = -pos - 1; + return FcCharSetPutLeaf (fcs, ucs4, leaf, pos); +} + +FcBool +FcCharSetAddChar (FcCharSet *fcs, FcChar32 ucs4) +{ + FcCharLeaf *leaf; + FcChar32 *b; + + if (fcs->ref == FC_REF_CONSTANT) + return FcFalse; + leaf = FcCharSetFindLeafCreate (fcs, ucs4); + if (!leaf) + return FcFalse; + b = &leaf->map[(ucs4 & 0xff) >> 5]; + *b |= (1 << (ucs4 & 0x1f)); + return FcTrue; +} + +FcBool +FcCharSetDelChar (FcCharSet *fcs, FcChar32 ucs4) +{ + FcCharLeaf *leaf; + FcChar32 *b; + + if (fcs->ref == FC_REF_CONSTANT) + return FcFalse; + leaf = FcCharSetFindLeaf (fcs, ucs4); + if (!leaf) + return FcTrue; + b = &leaf->map[(ucs4 & 0xff) >> 5]; + *b &= ~(1 << (ucs4 & 0x1f)); + /* We don't bother removing the leaf if it's empty */ + return FcTrue; +} + +/* + * An iterator for the leaves of a charset + */ + +typedef struct _fcCharSetIter { + FcCharLeaf *leaf; + FcChar32 ucs4; + int pos; +} FcCharSetIter; + +/* + * Set iter->leaf to the leaf containing iter->ucs4 or higher + */ + +static void +FcCharSetIterSet (const FcCharSet *fcs, FcCharSetIter *iter) +{ + int pos = FcCharSetFindLeafPos (fcs, iter->ucs4); + + if (pos < 0) + { + pos = -pos - 1; + if (pos == fcs->num) + { + iter->ucs4 = ~0; + iter->leaf = 0; + return; + } + iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8; + } + iter->leaf = FcCharSetLeaf(fcs, pos); + iter->pos = pos; +} + +static void +FcCharSetIterNext (const FcCharSet *fcs, FcCharSetIter *iter) +{ + int pos = iter->pos + 1; + if (pos >= fcs->num) + { + iter->ucs4 = ~0; + iter->leaf = 0; + } + else + { + iter->ucs4 = (FcChar32) FcCharSetNumbers(fcs)[pos] << 8; + iter->leaf = FcCharSetLeaf(fcs, pos); + iter->pos = pos; + } +} + + +static void +FcCharSetIterStart (const FcCharSet *fcs, FcCharSetIter *iter) +{ + iter->ucs4 = 0; + iter->pos = 0; + FcCharSetIterSet (fcs, iter); +} + +FcCharSet * +FcCharSetCopy (FcCharSet *src) +{ + if (src->ref != FC_REF_CONSTANT) + src->ref++; + else + FcCacheObjectReference (src); + return src; +} + +FcBool +FcCharSetEqual (const FcCharSet *a, const FcCharSet *b) +{ + FcCharSetIter ai, bi; + int i; + + if (a == b) + return FcTrue; + for (FcCharSetIterStart (a, &ai), FcCharSetIterStart (b, &bi); + ai.leaf && bi.leaf; + FcCharSetIterNext (a, &ai), FcCharSetIterNext (b, &bi)) + { + if (ai.ucs4 != bi.ucs4) + return FcFalse; + for (i = 0; i < 256/32; i++) + if (ai.leaf->map[i] != bi.leaf->map[i]) + return FcFalse; + } + return ai.leaf == bi.leaf; +} + +static FcBool +FcCharSetAddLeaf (FcCharSet *fcs, + FcChar32 ucs4, + FcCharLeaf *leaf) +{ + FcCharLeaf *new = FcCharSetFindLeafCreate (fcs, ucs4); + if (!new) + return FcFalse; + *new = *leaf; + return FcTrue; +} + +static FcCharSet * +FcCharSetOperate (const FcCharSet *a, + const FcCharSet *b, + FcBool (*overlap) (FcCharLeaf *result, + const FcCharLeaf *al, + const FcCharLeaf *bl), + FcBool aonly, + FcBool bonly) +{ + FcCharSet *fcs; + FcCharSetIter ai, bi; + + fcs = FcCharSetCreate (); + if (!fcs) + goto bail0; + FcCharSetIterStart (a, &ai); + FcCharSetIterStart (b, &bi); + while ((ai.leaf || (bonly && bi.leaf)) && (bi.leaf || (aonly && ai.leaf))) + { + if (ai.ucs4 < bi.ucs4) + { + if (aonly) + { + if (!FcCharSetAddLeaf (fcs, ai.ucs4, ai.leaf)) + goto bail1; + FcCharSetIterNext (a, &ai); + } + else + { + ai.ucs4 = bi.ucs4; + FcCharSetIterSet (a, &ai); + } + } + else if (bi.ucs4 < ai.ucs4 ) + { + if (bonly) + { + if (!FcCharSetAddLeaf (fcs, bi.ucs4, bi.leaf)) + goto bail1; + FcCharSetIterNext (b, &bi); + } + else + { + bi.ucs4 = ai.ucs4; + FcCharSetIterSet (b, &bi); + } + } + else + { + FcCharLeaf leaf; + + if ((*overlap) (&leaf, ai.leaf, bi.leaf)) + { + if (!FcCharSetAddLeaf (fcs, ai.ucs4, &leaf)) + goto bail1; + } + FcCharSetIterNext (a, &ai); + FcCharSetIterNext (b, &bi); + } + } + return fcs; +bail1: + FcCharSetDestroy (fcs); +bail0: + return 0; +} + +static FcBool +FcCharSetIntersectLeaf (FcCharLeaf *result, + const FcCharLeaf *al, + const FcCharLeaf *bl) +{ + int i; + FcBool nonempty = FcFalse; + + for (i = 0; i < 256/32; i++) + if ((result->map[i] = al->map[i] & bl->map[i])) + nonempty = FcTrue; + return nonempty; +} + +FcCharSet * +FcCharSetIntersect (const FcCharSet *a, const FcCharSet *b) +{ + return FcCharSetOperate (a, b, FcCharSetIntersectLeaf, FcFalse, FcFalse); +} + +static FcBool +FcCharSetUnionLeaf (FcCharLeaf *result, + const FcCharLeaf *al, + const FcCharLeaf *bl) +{ + int i; + + for (i = 0; i < 256/32; i++) + result->map[i] = al->map[i] | bl->map[i]; + return FcTrue; +} + +FcCharSet * +FcCharSetUnion (const FcCharSet *a, const FcCharSet *b) +{ + return FcCharSetOperate (a, b, FcCharSetUnionLeaf, FcTrue, FcTrue); +} + +FcBool +FcCharSetMerge (FcCharSet *a, const FcCharSet *b, FcBool *changed) +{ + int ai = 0, bi = 0; + FcChar16 an, bn; + + if (a->ref == FC_REF_CONSTANT) { + if (changed) + *changed = FcFalse; + return FcFalse; + } + + if (changed) { + *changed = !FcCharSetIsSubset(b, a); + if (!*changed) + return FcTrue; + } + + while (bi < b->num) + { + an = ai < a->num ? FcCharSetNumbers(a)[ai] : ~0; + bn = FcCharSetNumbers(b)[bi]; + + if (an < bn) + { + ai = FcCharSetFindLeafForward (a, ai + 1, bn); + if (ai < 0) + ai = -ai - 1; + } + else + { + FcCharLeaf *bl = FcCharSetLeaf(b, bi); + if (bn < an) + { + if (!FcCharSetAddLeaf (a, bn << 8, bl)) + return FcFalse; + } + else + { + FcCharLeaf *al = FcCharSetLeaf(a, ai); + FcCharSetUnionLeaf (al, al, bl); + } + + ai++; + bi++; + } + } + + return FcTrue; +} + +static FcBool +FcCharSetSubtractLeaf (FcCharLeaf *result, + const FcCharLeaf *al, + const FcCharLeaf *bl) +{ + int i; + FcBool nonempty = FcFalse; + + for (i = 0; i < 256/32; i++) + if ((result->map[i] = al->map[i] & ~bl->map[i])) + nonempty = FcTrue; + return nonempty; +} + +FcCharSet * +FcCharSetSubtract (const FcCharSet *a, const FcCharSet *b) +{ + return FcCharSetOperate (a, b, FcCharSetSubtractLeaf, FcTrue, FcFalse); +} + +FcBool +FcCharSetHasChar (const FcCharSet *fcs, FcChar32 ucs4) +{ + FcCharLeaf *leaf = FcCharSetFindLeaf (fcs, ucs4); + if (!leaf) + return FcFalse; + return (leaf->map[(ucs4 & 0xff) >> 5] & (1 << (ucs4 & 0x1f))) != 0; +} + +static FcChar32 +FcCharSetPopCount (FcChar32 c1) +{ +#if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) + return __builtin_popcount (c1); +#else + /* hackmem 169 */ + FcChar32 c2 = (c1 >> 1) & 033333333333; + c2 = c1 - c2 - ((c2 >> 1) & 033333333333); + return (((c2 + (c2 >> 3)) & 030707070707) % 077); +#endif +} + +FcChar32 +FcCharSetIntersectCount (const FcCharSet *a, const FcCharSet *b) +{ + FcCharSetIter ai, bi; + FcChar32 count = 0; + + FcCharSetIterStart (a, &ai); + FcCharSetIterStart (b, &bi); + while (ai.leaf && bi.leaf) + { + if (ai.ucs4 == bi.ucs4) + { + FcChar32 *am = ai.leaf->map; + FcChar32 *bm = bi.leaf->map; + int i = 256/32; + while (i--) + count += FcCharSetPopCount (*am++ & *bm++); + FcCharSetIterNext (a, &ai); + } + else if (ai.ucs4 < bi.ucs4) + { + ai.ucs4 = bi.ucs4; + FcCharSetIterSet (a, &ai); + } + if (bi.ucs4 < ai.ucs4) + { + bi.ucs4 = ai.ucs4; + FcCharSetIterSet (b, &bi); + } + } + return count; +} + +FcChar32 +FcCharSetCount (const FcCharSet *a) +{ + FcCharSetIter ai; + FcChar32 count = 0; + + for (FcCharSetIterStart (a, &ai); ai.leaf; FcCharSetIterNext (a, &ai)) + { + int i = 256/32; + FcChar32 *am = ai.leaf->map; + + while (i--) + count += FcCharSetPopCount (*am++); + } + return count; +} + +FcChar32 +FcCharSetSubtractCount (const FcCharSet *a, const FcCharSet *b) +{ + FcCharSetIter ai, bi; + FcChar32 count = 0; + + FcCharSetIterStart (a, &ai); + FcCharSetIterStart (b, &bi); + while (ai.leaf) + { + if (ai.ucs4 <= bi.ucs4) + { + FcChar32 *am = ai.leaf->map; + int i = 256/32; + if (ai.ucs4 == bi.ucs4) + { + FcChar32 *bm = bi.leaf->map; + while (i--) + count += FcCharSetPopCount (*am++ & ~*bm++); + } + else + { + while (i--) + count += FcCharSetPopCount (*am++); + } + FcCharSetIterNext (a, &ai); + } + else if (bi.leaf) + { + bi.ucs4 = ai.ucs4; + FcCharSetIterSet (b, &bi); + } + } + return count; +} + +/* + * return FcTrue iff a is a subset of b + */ +FcBool +FcCharSetIsSubset (const FcCharSet *a, const FcCharSet *b) +{ + int ai, bi; + FcChar16 an, bn; + + if (a == b) return FcTrue; + bi = 0; + ai = 0; + while (ai < a->num && bi < b->num) + { + an = FcCharSetNumbers(a)[ai]; + bn = FcCharSetNumbers(b)[bi]; + /* + * Check matching pages + */ + if (an == bn) + { + FcChar32 *am = FcCharSetLeaf(a, ai)->map; + FcChar32 *bm = FcCharSetLeaf(b, bi)->map; + + if (am != bm) + { + int i = 256/32; + /* + * Does am have any bits not in bm? + */ + while (i--) + if (*am++ & ~*bm++) + return FcFalse; + } + ai++; + bi++; + } + /* + * Does a have any pages not in b? + */ + else if (an < bn) + return FcFalse; + else + { + bi = FcCharSetFindLeafForward (b, bi + 1, an); + if (bi < 0) + bi = -bi - 1; + } + } + /* + * did we look at every page? + */ + return ai >= a->num; +} + +/* + * These two functions efficiently walk the entire charmap for + * other software (like pango) that want their own copy + */ + +FcChar32 +FcCharSetNextPage (const FcCharSet *a, + FcChar32 map[FC_CHARSET_MAP_SIZE], + FcChar32 *next) +{ + FcCharSetIter ai; + FcChar32 page; + + ai.ucs4 = *next; + FcCharSetIterSet (a, &ai); + if (!ai.leaf) + return FC_CHARSET_DONE; + + /* + * Save current information + */ + page = ai.ucs4; + memcpy (map, ai.leaf->map, sizeof (ai.leaf->map)); + /* + * Step to next page + */ + FcCharSetIterNext (a, &ai); + *next = ai.ucs4; + + return page; +} + +FcChar32 +FcCharSetFirstPage (const FcCharSet *a, + FcChar32 map[FC_CHARSET_MAP_SIZE], + FcChar32 *next) +{ + *next = 0; + return FcCharSetNextPage (a, map, next); +} + +/* + * old coverage API, rather hard to use correctly + */ + +FcChar32 +FcCharSetCoverage (const FcCharSet *a, FcChar32 page, FcChar32 *result) +{ + FcCharSetIter ai; + + ai.ucs4 = page; + FcCharSetIterSet (a, &ai); + if (!ai.leaf) + { + memset (result, '\0', 256 / 8); + page = 0; + } + else + { + memcpy (result, ai.leaf->map, sizeof (ai.leaf->map)); + FcCharSetIterNext (a, &ai); + page = ai.ucs4; + } + return page; +} + +/* + * ASCII representation of charsets. + * + * Each leaf is represented as 9 32-bit values, the code of the first character followed + * by 8 32 bit values for the leaf itself. Each value is encoded as 5 ASCII characters, + * only 85 different values are used to avoid control characters as well as the other + * characters used to encode font names. 85**5 > 2^32 so things work out, but + * it's not exactly human readable output. As a special case, 0 is encoded as a space + */ + +static const unsigned char charToValue[256] = { + /* "" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\b" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\020" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\030" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* " " */ 0xff, 0x00, 0xff, 0x01, 0x02, 0x03, 0x04, 0xff, + /* "(" */ 0x05, 0x06, 0x07, 0x08, 0xff, 0xff, 0x09, 0x0a, + /* "0" */ 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10, 0x11, 0x12, + /* "8" */ 0x13, 0x14, 0xff, 0x15, 0x16, 0xff, 0x17, 0x18, + /* "@" */ 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, + /* "H" */ 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, + /* "P" */ 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f, 0x30, + /* "X" */ 0x31, 0x32, 0x33, 0x34, 0xff, 0x35, 0x36, 0xff, + /* "`" */ 0xff, 0x37, 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, + /* "h" */ 0x3e, 0x3f, 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, + /* "p" */ 0x46, 0x47, 0x48, 0x49, 0x4a, 0x4b, 0x4c, 0x4d, + /* "x" */ 0x4e, 0x4f, 0x50, 0x51, 0x52, 0x53, 0x54, 0xff, + /* "\200" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\210" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\220" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\230" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\240" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\250" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\260" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\270" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\300" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\310" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\320" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\330" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\340" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\350" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\360" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + /* "\370" */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, +}; + +static const FcChar8 valueToChar[0x55] = { + /* 0x00 */ '!', '#', '$', '%', '&', '(', ')', '*', + /* 0x08 */ '+', '.', '/', '0', '1', '2', '3', '4', + /* 0x10 */ '5', '6', '7', '8', '9', ';', '<', '>', + /* 0x18 */ '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', + /* 0x20 */ 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + /* 0x28 */ 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + /* 0x30 */ 'W', 'X', 'Y', 'Z', '[', ']', '^', 'a', + /* 0x38 */ 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', + /* 0x40 */ 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', + /* 0x48 */ 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', + /* 0x50 */ 'z', '{', '|', '}', '~', +}; + +static FcChar8 * +FcCharSetParseValue (FcChar8 *string, FcChar32 *value) +{ + int i; + FcChar32 v; + FcChar32 c; + + if (*string == ' ') + { + v = 0; + string++; + } + else + { + v = 0; + for (i = 0; i < 5; i++) + { + if (!(c = (FcChar32) (unsigned char) *string++)) + return 0; + c = charToValue[c]; + if (c == 0xff) + return 0; + v = v * 85 + c; + } + } + *value = v; + return string; +} + +static FcBool +FcCharSetUnparseValue (FcStrBuf *buf, FcChar32 value) +{ + int i; + if (value == 0) + { + return FcStrBufChar (buf, ' '); + } + else + { + FcChar8 string[6]; + FcChar8 *s = string + 5; + string[5] = '\0'; + for (i = 0; i < 5; i++) + { + *--s = valueToChar[value % 85]; + value /= 85; + } + for (i = 0; i < 5; i++) + if (!FcStrBufChar (buf, *s++)) + return FcFalse; + } + return FcTrue; +} + +FcCharSet * +FcNameParseCharSet (FcChar8 *string) +{ + FcCharSet *c; + FcChar32 ucs4; + FcCharLeaf *leaf; + FcCharLeaf temp; + FcChar32 bits; + int i; + + c = FcCharSetCreate (); + if (!c) + goto bail0; + while (*string) + { + string = FcCharSetParseValue (string, &ucs4); + if (!string) + goto bail1; + bits = 0; + for (i = 0; i < 256/32; i++) + { + string = FcCharSetParseValue (string, &temp.map[i]); + if (!string) + goto bail1; + bits |= temp.map[i]; + } + if (bits) + { + leaf = malloc (sizeof (FcCharLeaf)); + if (!leaf) + goto bail1; + *leaf = temp; + if (!FcCharSetInsertLeaf (c, ucs4, leaf)) + goto bail1; + } + } + return c; +bail1: + if (c->num) + { + FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcCharLeaf *)); + free (FcCharSetLeaves (c)); + } + if (c->num) + { + FcMemFree (FC_MEM_CHARSET, c->num * sizeof (FcChar16)); + free (FcCharSetNumbers (c)); + } + FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); + free (c); +bail0: + return NULL; +} + +FcBool +FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c) +{ + FcCharSetIter ci; + int i; +#ifdef CHECK + int len = buf->len; +#endif + + for (FcCharSetIterStart (c, &ci); + ci.leaf; + FcCharSetIterNext (c, &ci)) + { + if (!FcCharSetUnparseValue (buf, ci.ucs4)) + return FcFalse; + for (i = 0; i < 256/32; i++) + if (!FcCharSetUnparseValue (buf, ci.leaf->map[i])) + return FcFalse; + } +#ifdef CHECK + { + FcCharSet *check; + FcChar32 missing; + FcCharSetIter ci, checki; + + /* null terminate for parser */ + FcStrBufChar (buf, '\0'); + /* step back over null for life after test */ + buf->len--; + check = FcNameParseCharSet (buf->buf + len); + FcCharSetIterStart (c, &ci); + FcCharSetIterStart (check, &checki); + while (ci.leaf || checki.leaf) + { + if (ci.ucs4 < checki.ucs4) + { + printf ("Missing leaf node at 0x%x\n", ci.ucs4); + FcCharSetIterNext (c, &ci); + } + else if (checki.ucs4 < ci.ucs4) + { + printf ("Extra leaf node at 0x%x\n", checki.ucs4); + FcCharSetIterNext (check, &checki); + } + else + { + int i = 256/32; + FcChar32 *cm = ci.leaf->map; + FcChar32 *checkm = checki.leaf->map; + + for (i = 0; i < 256; i += 32) + { + if (*cm != *checkm) + printf ("Mismatching sets at 0x%08x: 0x%08x != 0x%08x\n", + ci.ucs4 + i, *cm, *checkm); + cm++; + checkm++; + } + FcCharSetIterNext (c, &ci); + FcCharSetIterNext (check, &checki); + } + } + if ((missing = FcCharSetSubtractCount (c, check))) + printf ("%d missing in reparsed result\n", missing); + if ((missing = FcCharSetSubtractCount (check, c))) + printf ("%d extra in reparsed result\n", missing); + FcCharSetDestroy (check); + } +#endif + + return FcTrue; +} + +typedef struct _FcCharLeafEnt FcCharLeafEnt; + +struct _FcCharLeafEnt { + FcCharLeafEnt *next; + FcChar32 hash; + FcCharLeaf leaf; +}; + +#define FC_CHAR_LEAF_BLOCK (4096 / sizeof (FcCharLeafEnt)) +#define FC_CHAR_LEAF_HASH_SIZE 257 + +typedef struct _FcCharSetEnt FcCharSetEnt; + +struct _FcCharSetEnt { + FcCharSetEnt *next; + FcChar32 hash; + FcCharSet set; +}; + +typedef struct _FcCharSetOrigEnt FcCharSetOrigEnt; + +struct _FcCharSetOrigEnt { + FcCharSetOrigEnt *next; + const FcCharSet *orig; + const FcCharSet *frozen; +}; + +#define FC_CHAR_SET_HASH_SIZE 67 + +struct _FcCharSetFreezer { + FcCharLeafEnt *leaf_hash_table[FC_CHAR_LEAF_HASH_SIZE]; + FcCharLeafEnt **leaf_blocks; + int leaf_block_count; + FcCharSetEnt *set_hash_table[FC_CHAR_SET_HASH_SIZE]; + FcCharSetOrigEnt *orig_hash_table[FC_CHAR_SET_HASH_SIZE]; + FcCharLeafEnt *current_block; + int leaf_remain; + int leaves_seen; + int charsets_seen; + int leaves_allocated; + int charsets_allocated; +}; + +static FcCharLeafEnt * +FcCharLeafEntCreate (FcCharSetFreezer *freezer) +{ + if (!freezer->leaf_remain) + { + FcCharLeafEnt **newBlocks; + + freezer->leaf_block_count++; + newBlocks = realloc (freezer->leaf_blocks, freezer->leaf_block_count * sizeof (FcCharLeafEnt *)); + if (!newBlocks) + return 0; + freezer->leaf_blocks = newBlocks; + freezer->current_block = freezer->leaf_blocks[freezer->leaf_block_count-1] = malloc (FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); + if (!freezer->current_block) + return 0; + FcMemAlloc (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); + freezer->leaf_remain = FC_CHAR_LEAF_BLOCK; + } + freezer->leaf_remain--; + freezer->leaves_allocated++; + return freezer->current_block++; +} + +static FcChar32 +FcCharLeafHash (FcCharLeaf *leaf) +{ + FcChar32 hash = 0; + int i; + + for (i = 0; i < 256/32; i++) + hash = ((hash << 1) | (hash >> 31)) ^ leaf->map[i]; + return hash; +} + +static FcCharLeaf * +FcCharSetFreezeLeaf (FcCharSetFreezer *freezer, FcCharLeaf *leaf) +{ + FcChar32 hash = FcCharLeafHash (leaf); + FcCharLeafEnt **bucket = &freezer->leaf_hash_table[hash % FC_CHAR_LEAF_HASH_SIZE]; + FcCharLeafEnt *ent; + + for (ent = *bucket; ent; ent = ent->next) + { + if (ent->hash == hash && !memcmp (&ent->leaf, leaf, sizeof (FcCharLeaf))) + return &ent->leaf; + } + + ent = FcCharLeafEntCreate(freezer); + if (!ent) + return 0; + ent->leaf = *leaf; + ent->hash = hash; + ent->next = *bucket; + *bucket = ent; + return &ent->leaf; +} + +static FcChar32 +FcCharSetHash (FcCharSet *fcs) +{ + FcChar32 hash = 0; + int i; + + /* hash in leaves */ + for (i = 0; i < fcs->num; i++) + hash = ((hash << 1) | (hash >> 31)) ^ FcCharLeafHash (FcCharSetLeaf(fcs,i)); + /* hash in numbers */ + for (i = 0; i < fcs->num; i++) + hash = ((hash << 1) | (hash >> 31)) ^ *FcCharSetNumbers(fcs); + return hash; +} + +static FcBool +FcCharSetFreezeOrig (FcCharSetFreezer *freezer, const FcCharSet *orig, const FcCharSet *frozen) +{ + FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE]; + FcCharSetOrigEnt *ent; + + ent = malloc (sizeof (FcCharSetOrigEnt)); + if (!ent) + return FcFalse; + ent->orig = orig; + ent->frozen = frozen; + ent->next = *bucket; + *bucket = ent; + return FcTrue; +} + +static FcCharSet * +FcCharSetFreezeBase (FcCharSetFreezer *freezer, FcCharSet *fcs, const FcCharSet *orig) +{ + FcChar32 hash = FcCharSetHash (fcs); + FcCharSetEnt **bucket = &freezer->set_hash_table[hash % FC_CHAR_SET_HASH_SIZE]; + FcCharSetEnt *ent; + int size; + int i; + + for (ent = *bucket; ent; ent = ent->next) + { + if (ent->hash == hash && + ent->set.num == fcs->num && + !memcmp (FcCharSetNumbers(&ent->set), + FcCharSetNumbers(fcs), + fcs->num * sizeof (FcChar16))) + { + FcBool ok = FcTrue; + int i; + + for (i = 0; i < fcs->num; i++) + if (FcCharSetLeaf(&ent->set, i) != FcCharSetLeaf(fcs, i)) + ok = FcFalse; + if (ok) + return &ent->set; + } + } + + size = (sizeof (FcCharSetEnt) + + fcs->num * sizeof (FcCharLeaf *) + + fcs->num * sizeof (FcChar16)); + ent = malloc (size); + if (!ent) + return 0; + FcMemAlloc (FC_MEM_CHARSET, size); + + freezer->charsets_allocated++; + + ent->set.ref = FC_REF_CONSTANT; + ent->set.num = fcs->num; + if (fcs->num) + { + intptr_t *ent_leaves; + + ent->set.leaves_offset = sizeof (ent->set); + ent->set.numbers_offset = (ent->set.leaves_offset + + fcs->num * sizeof (intptr_t)); + + ent_leaves = FcCharSetLeaves (&ent->set); + for (i = 0; i < fcs->num; i++) + ent_leaves[i] = FcPtrToOffset (ent_leaves, + FcCharSetLeaf (fcs, i)); + memcpy (FcCharSetNumbers (&ent->set), + FcCharSetNumbers (fcs), + fcs->num * sizeof (FcChar16)); + } + else + { + ent->set.leaves_offset = 0; + ent->set.numbers_offset = 0; + } + + ent->hash = hash; + ent->next = *bucket; + *bucket = ent; + + return &ent->set; +} + +static const FcCharSet * +FcCharSetFindFrozen (FcCharSetFreezer *freezer, const FcCharSet *orig) +{ + FcCharSetOrigEnt **bucket = &freezer->orig_hash_table[((uintptr_t) orig) & FC_CHAR_SET_HASH_SIZE]; + FcCharSetOrigEnt *ent; + + for (ent = *bucket; ent; ent = ent->next) + if (ent->orig == orig) + return ent->frozen; + return NULL; +} + +const FcCharSet * +FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs) +{ + FcCharSet *b; + const FcCharSet *n = 0; + FcCharLeaf *l; + int i; + + b = FcCharSetCreate (); + if (!b) + goto bail0; + for (i = 0; i < fcs->num; i++) + { + l = FcCharSetFreezeLeaf (freezer, FcCharSetLeaf(fcs, i)); + if (!l) + goto bail1; + if (!FcCharSetInsertLeaf (b, FcCharSetNumbers(fcs)[i] << 8, l)) + goto bail1; + } + n = FcCharSetFreezeBase (freezer, b, fcs); + if (!FcCharSetFreezeOrig (freezer, fcs, n)) + { + n = NULL; + goto bail1; + } + freezer->charsets_seen++; + freezer->leaves_seen += fcs->num; +bail1: + if (b->num) + { + FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcCharLeaf *)); + free (FcCharSetLeaves (b)); + } + if (b->num) + { + FcMemFree (FC_MEM_CHARSET, b->num * sizeof (FcChar16)); + free (FcCharSetNumbers (b)); + } + FcMemFree (FC_MEM_CHARSET, sizeof (FcCharSet)); + free (b); +bail0: + return n; +} + +FcCharSetFreezer * +FcCharSetFreezerCreate (void) +{ + FcCharSetFreezer *freezer; + + freezer = calloc (1, sizeof (FcCharSetFreezer)); + return freezer; +} + +void +FcCharSetFreezerDestroy (FcCharSetFreezer *freezer) +{ + int i; + + if (FcDebug() & FC_DBG_CACHE) + { + printf ("\ncharsets %d -> %d leaves %d -> %d\n", + freezer->charsets_seen, freezer->charsets_allocated, + freezer->leaves_seen, freezer->leaves_allocated); + } + for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++) + { + FcCharSetEnt *ent, *next; + for (ent = freezer->set_hash_table[i]; ent; ent = next) + { + next = ent->next; + FcMemFree (FC_MEM_CHARSET, (sizeof (FcCharSetEnt) + + ent->set.num * sizeof (FcCharLeaf *) + + ent->set.num * sizeof (FcChar16))); + free (ent); + } + } + + for (i = 0; i < FC_CHAR_SET_HASH_SIZE; i++) + { + FcCharSetOrigEnt *ent, *next; + for (ent = freezer->orig_hash_table[i]; ent; ent = next) + { + next = ent->next; + free (ent); + } + } + + for (i = 0; i < freezer->leaf_block_count; i++) + { + free (freezer->leaf_blocks[i]); + FcMemFree (FC_MEM_CHARLEAF, FC_CHAR_LEAF_BLOCK * sizeof (FcCharLeafEnt)); + } + + free (freezer->leaf_blocks); + free (freezer); +} + +FcBool +FcCharSetSerializeAlloc (FcSerialize *serialize, const FcCharSet *cs) +{ + intptr_t *leaves; + FcChar16 *numbers; + int i; + + if (cs->ref != FC_REF_CONSTANT) + { + if (!serialize->cs_freezer) + { + serialize->cs_freezer = FcCharSetFreezerCreate (); + if (!serialize->cs_freezer) + return FcFalse; + } + if (FcCharSetFindFrozen (serialize->cs_freezer, cs)) + return FcTrue; + + cs = FcCharSetFreeze (serialize->cs_freezer, cs); + } + + leaves = FcCharSetLeaves (cs); + numbers = FcCharSetNumbers (cs); + + if (!FcSerializeAlloc (serialize, cs, sizeof (FcCharSet))) + return FcFalse; + if (!FcSerializeAlloc (serialize, leaves, cs->num * sizeof (intptr_t))) + return FcFalse; + if (!FcSerializeAlloc (serialize, numbers, cs->num * sizeof (FcChar16))) + return FcFalse; + for (i = 0; i < cs->num; i++) + if (!FcSerializeAlloc (serialize, FcCharSetLeaf(cs, i), + sizeof (FcCharLeaf))) + return FcFalse; + return FcTrue; +} + +FcCharSet * +FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs) +{ + FcCharSet *cs_serialized; + intptr_t *leaves, *leaves_serialized; + FcChar16 *numbers, *numbers_serialized; + FcCharLeaf *leaf, *leaf_serialized; + int i; + + if (cs->ref != FC_REF_CONSTANT && serialize->cs_freezer) + { + cs = FcCharSetFindFrozen (serialize->cs_freezer, cs); + if (!cs) + return NULL; + } + + cs_serialized = FcSerializePtr (serialize, cs); + if (!cs_serialized) + return NULL; + + cs_serialized->ref = FC_REF_CONSTANT; + cs_serialized->num = cs->num; + + if (cs->num) + { + leaves = FcCharSetLeaves (cs); + leaves_serialized = FcSerializePtr (serialize, leaves); + if (!leaves_serialized) + return NULL; + + cs_serialized->leaves_offset = FcPtrToOffset (cs_serialized, + leaves_serialized); + + numbers = FcCharSetNumbers (cs); + numbers_serialized = FcSerializePtr (serialize, numbers); + if (!numbers) + return NULL; + + cs_serialized->numbers_offset = FcPtrToOffset (cs_serialized, + numbers_serialized); + + for (i = 0; i < cs->num; i++) + { + leaf = FcCharSetLeaf (cs, i); + leaf_serialized = FcSerializePtr (serialize, leaf); + if (!leaf_serialized) + return NULL; + *leaf_serialized = *leaf; + leaves_serialized[i] = FcPtrToOffset (leaves_serialized, + leaf_serialized); + numbers_serialized[i] = numbers[i]; + } + } + else + { + cs_serialized->leaves_offset = 0; + cs_serialized->numbers_offset = 0; + } + + return cs_serialized; +} +#define __fccharset__ +#include "fcaliastail.h" +#undef __fccharset__ diff --git a/fontconfig/src/fcdbg.c b/fontconfig/src/fcdbg.c index b8cb079fc..cf2ff0870 100644 --- a/fontconfig/src/fcdbg.c +++ b/fontconfig/src/fcdbg.c @@ -1,406 +1,406 @@ -/* - * fontconfig/src/fcdbg.c - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include -#include - -void -FcValuePrint (const FcValue v) -{ - switch (v.type) { - case FcTypeVoid: - printf (" "); - break; - case FcTypeInteger: - printf (" %d(i)", v.u.i); - break; - case FcTypeDouble: - printf (" %g(f)", v.u.d); - break; - case FcTypeString: - printf (" \"%s\"", v.u.s); - break; - case FcTypeBool: - printf (" %s", v.u.b ? "FcTrue" : "FcFalse"); - break; - case FcTypeMatrix: - printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); - break; - case FcTypeCharSet: /* XXX */ - printf (" "); - FcCharSetPrint (v.u.c); - break; - case FcTypeLangSet: - printf (" "); - FcLangSetPrint (v.u.l); - break; - case FcTypeFTFace: - printf (" face"); - break; - } -} - -void -FcValueListPrint (FcValueListPtr l) -{ - for (; l != NULL; l = FcValueListNext(l)) - { - FcValuePrint (FcValueCanonicalize(&l->value)); - switch (l->binding) { - case FcValueBindingWeak: - printf ("(w)"); - break; - case FcValueBindingStrong: - printf ("(s)"); - break; - case FcValueBindingSame: - printf ("(=)"); - break; - } - } -} - -void -FcLangSetPrint (const FcLangSet *ls) -{ - FcStrBuf buf; - FcChar8 init_buf[1024]; - - FcStrBufInit (&buf, init_buf, sizeof (init_buf)); - if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0')) - printf ("%s", buf.buf); - else - printf ("langset (alloc error)"); - FcStrBufDestroy (&buf); -} - -void -FcCharSetPrint (const FcCharSet *c) -{ - int i, j; - intptr_t *leaves = FcCharSetLeaves (c); - FcChar16 *numbers = FcCharSetNumbers (c); - -#if 0 - printf ("CharSet 0x%x\n", (intptr_t) c); - printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves); - printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers); - - for (i = 0; i < c->num; i++) - { - printf ("Page %d: %04x +%d = 0x%x\n", - i, numbers[i], leaves[i], - (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf)); - } -#endif - - printf ("\n"); - for (i = 0; i < c->num; i++) - { - intptr_t leaf_offset = leaves[i]; - FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf); - - printf ("\t"); - printf ("%04x:", numbers[i]); - for (j = 0; j < 256/32; j++) - printf (" %08x", leaf->map[j]); - printf ("\n"); - } -} - -void -FcPatternPrint (const FcPattern *p) -{ - int i; - FcPatternElt *e; - - if (!p) - { - printf ("Null pattern\n"); - return; - } - printf ("Pattern has %d elts (size %d)\n", p->num, p->size); - for (i = 0; i < p->num; i++) - { - e = &FcPatternElts(p)[i]; - printf ("\t%s:", FcObjectName(e->object)); - FcValueListPrint (FcPatternEltValues(e)); - printf ("\n"); - } - printf ("\n"); -} - -void -FcOpPrint (FcOp op) -{ - switch (op) { - case FcOpInteger: printf ("Integer"); break; - case FcOpDouble: printf ("Double"); break; - case FcOpString: printf ("String"); break; - case FcOpMatrix: printf ("Matrix"); break; - case FcOpRange: printf ("Range"); break; - case FcOpBool: printf ("Bool"); break; - case FcOpCharSet: printf ("CharSet"); break; - case FcOpLangSet: printf ("LangSet"); break; - case FcOpField: printf ("Field"); break; - case FcOpConst: printf ("Const"); break; - case FcOpAssign: printf ("Assign"); break; - case FcOpAssignReplace: printf ("AssignReplace"); break; - case FcOpPrepend: printf ("Prepend"); break; - case FcOpPrependFirst: printf ("PrependFirst"); break; - case FcOpAppend: printf ("Append"); break; - case FcOpAppendLast: printf ("AppendLast"); break; - case FcOpQuest: printf ("Quest"); break; - case FcOpOr: printf ("Or"); break; - case FcOpAnd: printf ("And"); break; - case FcOpEqual: printf ("Equal"); break; - case FcOpNotEqual: printf ("NotEqual"); break; - case FcOpLess: printf ("Less"); break; - case FcOpLessEqual: printf ("LessEqual"); break; - case FcOpMore: printf ("More"); break; - case FcOpMoreEqual: printf ("MoreEqual"); break; - case FcOpContains: printf ("Contains"); break; - case FcOpNotContains: printf ("NotContains"); break; - case FcOpPlus: printf ("Plus"); break; - case FcOpMinus: printf ("Minus"); break; - case FcOpTimes: printf ("Times"); break; - case FcOpDivide: printf ("Divide"); break; - case FcOpNot: printf ("Not"); break; - case FcOpNil: printf ("Nil"); break; - case FcOpComma: printf ("Comma"); break; - case FcOpFloor: printf ("Floor"); break; - case FcOpCeil: printf ("Ceil"); break; - case FcOpRound: printf ("Round"); break; - case FcOpTrunc: printf ("Trunc"); break; - case FcOpListing: printf ("Listing"); break; - case FcOpInvalid: printf ("Invalid"); break; - } -} - -void -FcExprPrint (const FcExpr *expr) -{ - if (!expr) printf ("none"); - else switch (expr->op) { - case FcOpInteger: printf ("%d", expr->u.ival); break; - case FcOpDouble: printf ("%g", expr->u.dval); break; - case FcOpString: printf ("\"%s\"", expr->u.sval); break; - case FcOpMatrix: printf ("[%g %g %g %g]", - expr->u.mval->xx, - expr->u.mval->xy, - expr->u.mval->yx, - expr->u.mval->yy); break; - case FcOpRange: break; - case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break; - case FcOpCharSet: printf ("charset\n"); break; - case FcOpLangSet: - printf ("langset:"); - FcLangSetPrint(expr->u.lval); - printf ("\n"); - break; - case FcOpNil: printf ("nil\n"); break; - case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break; - case FcOpConst: printf ("%s", expr->u.constant); break; - case FcOpQuest: - FcExprPrint (expr->u.tree.left); - printf (" quest "); - FcExprPrint (expr->u.tree.right->u.tree.left); - printf (" colon "); - FcExprPrint (expr->u.tree.right->u.tree.right); - break; - case FcOpAssign: - case FcOpAssignReplace: - case FcOpPrependFirst: - case FcOpPrepend: - case FcOpAppend: - case FcOpAppendLast: - case FcOpOr: - case FcOpAnd: - case FcOpEqual: - case FcOpNotEqual: - case FcOpLess: - case FcOpLessEqual: - case FcOpMore: - case FcOpMoreEqual: - case FcOpContains: - case FcOpListing: - case FcOpNotContains: - case FcOpPlus: - case FcOpMinus: - case FcOpTimes: - case FcOpDivide: - case FcOpComma: - FcExprPrint (expr->u.tree.left); - printf (" "); - switch (expr->op) { - case FcOpAssign: printf ("Assign"); break; - case FcOpAssignReplace: printf ("AssignReplace"); break; - case FcOpPrependFirst: printf ("PrependFirst"); break; - case FcOpPrepend: printf ("Prepend"); break; - case FcOpAppend: printf ("Append"); break; - case FcOpAppendLast: printf ("AppendLast"); break; - case FcOpOr: printf ("Or"); break; - case FcOpAnd: printf ("And"); break; - case FcOpEqual: printf ("Equal"); break; - case FcOpNotEqual: printf ("NotEqual"); break; - case FcOpLess: printf ("Less"); break; - case FcOpLessEqual: printf ("LessEqual"); break; - case FcOpMore: printf ("More"); break; - case FcOpMoreEqual: printf ("MoreEqual"); break; - case FcOpContains: printf ("Contains"); break; - case FcOpListing: printf ("Listing"); break; - case FcOpNotContains: printf ("NotContains"); break; - case FcOpPlus: printf ("Plus"); break; - case FcOpMinus: printf ("Minus"); break; - case FcOpTimes: printf ("Times"); break; - case FcOpDivide: printf ("Divide"); break; - case FcOpComma: printf ("Comma"); break; - default: break; - } - printf (" "); - FcExprPrint (expr->u.tree.right); - break; - case FcOpNot: - printf ("Not "); - FcExprPrint (expr->u.tree.left); - break; - case FcOpFloor: - printf ("Floor "); - FcExprPrint (expr->u.tree.left); - break; - case FcOpCeil: - printf ("Ceil "); - FcExprPrint (expr->u.tree.left); - break; - case FcOpRound: - printf ("Round "); - FcExprPrint (expr->u.tree.left); - break; - case FcOpTrunc: - printf ("Trunc "); - FcExprPrint (expr->u.tree.left); - break; - case FcOpInvalid: printf ("Invalid"); break; - } -} - -void -FcTestPrint (const FcTest *test) -{ - switch (test->kind) { - case FcMatchPattern: - printf ("pattern "); - break; - case FcMatchFont: - printf ("font "); - break; - case FcMatchScan: - printf ("scan "); - break; - } - switch (test->qual) { - case FcQualAny: - printf ("any "); - break; - case FcQualAll: - printf ("all "); - break; - case FcQualFirst: - printf ("first "); - break; - case FcQualNotFirst: - printf ("not_first "); - break; - } - printf ("%s ", FcObjectName (test->object)); - FcOpPrint (test->op); - printf (" "); - FcExprPrint (test->expr); - printf ("\n"); -} - -void -FcEditPrint (const FcEdit *edit) -{ - printf ("Edit %s ", FcObjectName (edit->object)); - FcOpPrint (edit->op); - printf (" "); - FcExprPrint (edit->expr); -} - -void -FcSubstPrint (const FcSubst *subst) -{ - FcEdit *e; - FcTest *t; - - printf ("match\n"); - for (t = subst->test; t; t = t->next) - { - printf ("\t"); - FcTestPrint (t); - } - printf ("edit\n"); - for (e = subst->edit; e; e = e->next) - { - printf ("\t"); - FcEditPrint (e); - printf (";\n"); - } - printf ("\n"); -} - -void -FcFontSetPrint (const FcFontSet *s) -{ - int i; - - printf ("FontSet %d of %d\n", s->nfont, s->sfont); - for (i = 0; i < s->nfont; i++) - { - printf ("Font %d ", i); - FcPatternPrint (s->fonts[i]); - } -} - -int FcDebugVal; - -void -FcInitDebug (void) -{ - char *e; - - e = getenv ("FC_DEBUG"); - if (e) - { - printf ("FC_DEBUG=%s\n", e); - FcDebugVal = atoi (e); - if (FcDebugVal < 0) - FcDebugVal = 0; - } -} -#define __fcdbg__ -#include "fcaliastail.h" -#undef __fcdbg__ +/* + * fontconfig/src/fcdbg.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include +#include + +void +FcValuePrint (const FcValue v) +{ + switch (v.type) { + case FcTypeVoid: + printf (" "); + break; + case FcTypeInteger: + printf (" %d(i)", v.u.i); + break; + case FcTypeDouble: + printf (" %g(f)", v.u.d); + break; + case FcTypeString: + printf (" \"%s\"", v.u.s); + break; + case FcTypeBool: + printf (" %s", v.u.b ? "FcTrue" : "FcFalse"); + break; + case FcTypeMatrix: + printf (" (%f %f; %f %f)", v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); + break; + case FcTypeCharSet: /* XXX */ + printf (" "); + FcCharSetPrint (v.u.c); + break; + case FcTypeLangSet: + printf (" "); + FcLangSetPrint (v.u.l); + break; + case FcTypeFTFace: + printf (" face"); + break; + } +} + +void +FcValueListPrint (FcValueListPtr l) +{ + for (; l != NULL; l = FcValueListNext(l)) + { + FcValuePrint (FcValueCanonicalize(&l->value)); + switch (l->binding) { + case FcValueBindingWeak: + printf ("(w)"); + break; + case FcValueBindingStrong: + printf ("(s)"); + break; + case FcValueBindingSame: + printf ("(=)"); + break; + } + } +} + +void +FcLangSetPrint (const FcLangSet *ls) +{ + FcStrBuf buf; + FcChar8 init_buf[1024]; + + FcStrBufInit (&buf, init_buf, sizeof (init_buf)); + if (FcNameUnparseLangSet (&buf, ls) && FcStrBufChar (&buf,'\0')) + printf ("%s", buf.buf); + else + printf ("langset (alloc error)"); + FcStrBufDestroy (&buf); +} + +void +FcCharSetPrint (const FcCharSet *c) +{ + int i, j; + intptr_t *leaves = FcCharSetLeaves (c); + FcChar16 *numbers = FcCharSetNumbers (c); + +#if 0 + printf ("CharSet 0x%x\n", (intptr_t) c); + printf ("Leaves: +%d = 0x%x\n", c->leaves_offset, (intptr_t) leaves); + printf ("Numbers: +%d = 0x%x\n", c->numbers_offset, (intptr_t) numbers); + + for (i = 0; i < c->num; i++) + { + printf ("Page %d: %04x +%d = 0x%x\n", + i, numbers[i], leaves[i], + (intptr_t) FcOffsetToPtr (leaves, leaves[i], FcCharLeaf)); + } +#endif + + printf ("\n"); + for (i = 0; i < c->num; i++) + { + intptr_t leaf_offset = leaves[i]; + FcCharLeaf *leaf = FcOffsetToPtr (leaves, leaf_offset, FcCharLeaf); + + printf ("\t"); + printf ("%04x:", numbers[i]); + for (j = 0; j < 256/32; j++) + printf (" %08x", leaf->map[j]); + printf ("\n"); + } +} + +void +FcPatternPrint (const FcPattern *p) +{ + int i; + FcPatternElt *e; + + if (!p) + { + printf ("Null pattern\n"); + return; + } + printf ("Pattern has %d elts (size %d)\n", p->num, p->size); + for (i = 0; i < p->num; i++) + { + e = &FcPatternElts(p)[i]; + printf ("\t%s:", FcObjectName(e->object)); + FcValueListPrint (FcPatternEltValues(e)); + printf ("\n"); + } + printf ("\n"); +} + +void +FcOpPrint (FcOp op) +{ + switch (op) { + case FcOpInteger: printf ("Integer"); break; + case FcOpDouble: printf ("Double"); break; + case FcOpString: printf ("String"); break; + case FcOpMatrix: printf ("Matrix"); break; + case FcOpRange: printf ("Range"); break; + case FcOpBool: printf ("Bool"); break; + case FcOpCharSet: printf ("CharSet"); break; + case FcOpLangSet: printf ("LangSet"); break; + case FcOpField: printf ("Field"); break; + case FcOpConst: printf ("Const"); break; + case FcOpAssign: printf ("Assign"); break; + case FcOpAssignReplace: printf ("AssignReplace"); break; + case FcOpPrepend: printf ("Prepend"); break; + case FcOpPrependFirst: printf ("PrependFirst"); break; + case FcOpAppend: printf ("Append"); break; + case FcOpAppendLast: printf ("AppendLast"); break; + case FcOpQuest: printf ("Quest"); break; + case FcOpOr: printf ("Or"); break; + case FcOpAnd: printf ("And"); break; + case FcOpEqual: printf ("Equal"); break; + case FcOpNotEqual: printf ("NotEqual"); break; + case FcOpLess: printf ("Less"); break; + case FcOpLessEqual: printf ("LessEqual"); break; + case FcOpMore: printf ("More"); break; + case FcOpMoreEqual: printf ("MoreEqual"); break; + case FcOpContains: printf ("Contains"); break; + case FcOpNotContains: printf ("NotContains"); break; + case FcOpPlus: printf ("Plus"); break; + case FcOpMinus: printf ("Minus"); break; + case FcOpTimes: printf ("Times"); break; + case FcOpDivide: printf ("Divide"); break; + case FcOpNot: printf ("Not"); break; + case FcOpNil: printf ("Nil"); break; + case FcOpComma: printf ("Comma"); break; + case FcOpFloor: printf ("Floor"); break; + case FcOpCeil: printf ("Ceil"); break; + case FcOpRound: printf ("Round"); break; + case FcOpTrunc: printf ("Trunc"); break; + case FcOpListing: printf ("Listing"); break; + case FcOpInvalid: printf ("Invalid"); break; + } +} + +void +FcExprPrint (const FcExpr *expr) +{ + if (!expr) printf ("none"); + else switch (expr->op) { + case FcOpInteger: printf ("%d", expr->u.ival); break; + case FcOpDouble: printf ("%g", expr->u.dval); break; + case FcOpString: printf ("\"%s\"", expr->u.sval); break; + case FcOpMatrix: printf ("[%g %g %g %g]", + expr->u.mval->xx, + expr->u.mval->xy, + expr->u.mval->yx, + expr->u.mval->yy); break; + case FcOpRange: break; + case FcOpBool: printf ("%s", expr->u.bval ? "true" : "false"); break; + case FcOpCharSet: printf ("charset\n"); break; + case FcOpLangSet: + printf ("langset:"); + FcLangSetPrint(expr->u.lval); + printf ("\n"); + break; + case FcOpNil: printf ("nil\n"); break; + case FcOpField: printf ("%s", FcObjectName(expr->u.object)); break; + case FcOpConst: printf ("%s", expr->u.constant); break; + case FcOpQuest: + FcExprPrint (expr->u.tree.left); + printf (" quest "); + FcExprPrint (expr->u.tree.right->u.tree.left); + printf (" colon "); + FcExprPrint (expr->u.tree.right->u.tree.right); + break; + case FcOpAssign: + case FcOpAssignReplace: + case FcOpPrependFirst: + case FcOpPrepend: + case FcOpAppend: + case FcOpAppendLast: + case FcOpOr: + case FcOpAnd: + case FcOpEqual: + case FcOpNotEqual: + case FcOpLess: + case FcOpLessEqual: + case FcOpMore: + case FcOpMoreEqual: + case FcOpContains: + case FcOpListing: + case FcOpNotContains: + case FcOpPlus: + case FcOpMinus: + case FcOpTimes: + case FcOpDivide: + case FcOpComma: + FcExprPrint (expr->u.tree.left); + printf (" "); + switch (expr->op) { + case FcOpAssign: printf ("Assign"); break; + case FcOpAssignReplace: printf ("AssignReplace"); break; + case FcOpPrependFirst: printf ("PrependFirst"); break; + case FcOpPrepend: printf ("Prepend"); break; + case FcOpAppend: printf ("Append"); break; + case FcOpAppendLast: printf ("AppendLast"); break; + case FcOpOr: printf ("Or"); break; + case FcOpAnd: printf ("And"); break; + case FcOpEqual: printf ("Equal"); break; + case FcOpNotEqual: printf ("NotEqual"); break; + case FcOpLess: printf ("Less"); break; + case FcOpLessEqual: printf ("LessEqual"); break; + case FcOpMore: printf ("More"); break; + case FcOpMoreEqual: printf ("MoreEqual"); break; + case FcOpContains: printf ("Contains"); break; + case FcOpListing: printf ("Listing"); break; + case FcOpNotContains: printf ("NotContains"); break; + case FcOpPlus: printf ("Plus"); break; + case FcOpMinus: printf ("Minus"); break; + case FcOpTimes: printf ("Times"); break; + case FcOpDivide: printf ("Divide"); break; + case FcOpComma: printf ("Comma"); break; + default: break; + } + printf (" "); + FcExprPrint (expr->u.tree.right); + break; + case FcOpNot: + printf ("Not "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpFloor: + printf ("Floor "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpCeil: + printf ("Ceil "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpRound: + printf ("Round "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpTrunc: + printf ("Trunc "); + FcExprPrint (expr->u.tree.left); + break; + case FcOpInvalid: printf ("Invalid"); break; + } +} + +void +FcTestPrint (const FcTest *test) +{ + switch (test->kind) { + case FcMatchPattern: + printf ("pattern "); + break; + case FcMatchFont: + printf ("font "); + break; + case FcMatchScan: + printf ("scan "); + break; + } + switch (test->qual) { + case FcQualAny: + printf ("any "); + break; + case FcQualAll: + printf ("all "); + break; + case FcQualFirst: + printf ("first "); + break; + case FcQualNotFirst: + printf ("not_first "); + break; + } + printf ("%s ", FcObjectName (test->object)); + FcOpPrint (test->op); + printf (" "); + FcExprPrint (test->expr); + printf ("\n"); +} + +void +FcEditPrint (const FcEdit *edit) +{ + printf ("Edit %s ", FcObjectName (edit->object)); + FcOpPrint (edit->op); + printf (" "); + FcExprPrint (edit->expr); +} + +void +FcSubstPrint (const FcSubst *subst) +{ + FcEdit *e; + FcTest *t; + + printf ("match\n"); + for (t = subst->test; t; t = t->next) + { + printf ("\t"); + FcTestPrint (t); + } + printf ("edit\n"); + for (e = subst->edit; e; e = e->next) + { + printf ("\t"); + FcEditPrint (e); + printf (";\n"); + } + printf ("\n"); +} + +void +FcFontSetPrint (const FcFontSet *s) +{ + int i; + + printf ("FontSet %d of %d\n", s->nfont, s->sfont); + for (i = 0; i < s->nfont; i++) + { + printf ("Font %d ", i); + FcPatternPrint (s->fonts[i]); + } +} + +int FcDebugVal; + +void +FcInitDebug (void) +{ + char *e; + + e = getenv ("FC_DEBUG"); + if (e) + { + printf ("FC_DEBUG=%s\n", e); + FcDebugVal = atoi (e); + if (FcDebugVal < 0) + FcDebugVal = 0; + } +} +#define __fcdbg__ +#include "fcaliastail.h" +#undef __fcdbg__ diff --git a/fontconfig/src/fcdefault.c b/fontconfig/src/fcdefault.c index 92ab8f0e6..a9165facd 100644 --- a/fontconfig/src/fcdefault.c +++ b/fontconfig/src/fcdefault.c @@ -1,181 +1,181 @@ -/* - * fontconfig/src/fcdefault.c - * - * Copyright © 2001 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include - -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 + +static const struct { + FcObject field; + FcBool value; +} FcBoolDefaults[] = { + { FC_HINTING_OBJECT, FcTrue }, /* !FT_LOAD_NO_HINTING */ + { FC_VERTICAL_LAYOUT_OBJECT, FcFalse }, /* FC_LOAD_VERTICAL_LAYOUT */ + { FC_AUTOHINT_OBJECT, FcFalse }, /* FC_LOAD_FORCE_AUTOHINT */ + { FC_GLOBAL_ADVANCE_OBJECT, FcTrue }, /* !FC_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH */ + { FC_EMBEDDED_BITMAP_OBJECT, FcTrue }, /* !FC_LOAD_NO_BITMAP */ + { FC_DECORATIVE_OBJECT, FcFalse }, +}; + +#define NUM_FC_BOOL_DEFAULTS (int) (sizeof FcBoolDefaults / sizeof FcBoolDefaults[0]) + +FcChar8 * +FcGetDefaultLang (void) +{ + static char lang_local [128] = {0}; + char *ctype; + char *territory; + char *after; + int lang_len, territory_len; + + if (lang_local [0]) + return (FcChar8 *) lang_local; + + ctype = setlocale (LC_CTYPE, NULL); + + /* + * Check if setlocale (LC_ALL, "") has been called + */ + if (!ctype || !strcmp (ctype, "C")) + { + ctype = getenv ("LC_ALL"); + if (!ctype) + { + ctype = getenv ("LC_CTYPE"); + if (!ctype) + ctype = getenv ("LANG"); + } + } + + /* ignore missing or empty ctype */ + if (ctype && *ctype != '\0') + { + territory = strchr (ctype, '_'); + if (territory) + { + lang_len = territory - ctype; + territory = territory + 1; + after = strchr (territory, '.'); + if (!after) + { + after = strchr (territory, '@'); + if (!after) + after = territory + strlen (territory); + } + territory_len = after - territory; + if (lang_len + 1 + territory_len + 1 <= (int) sizeof (lang_local)) + { + strncpy (lang_local, ctype, lang_len); + lang_local[lang_len] = '-'; + strncpy (lang_local + lang_len + 1, territory, territory_len); + lang_local[lang_len + 1 + territory_len] = '\0'; + } + } + else + { + after = strchr (ctype, '.'); + if (!after) + { + after = strchr (ctype, '@'); + if (!after) + after = ctype + strlen (ctype); + } + lang_len = after - ctype; + if (lang_len + 1 <= (int) sizeof (lang_local)) + { + strncpy (lang_local, ctype, lang_len); + lang_local[lang_len] = '\0'; + } + } + } + + /* set default lang to en */ + if (!lang_local [0]) + strcpy (lang_local, "en"); + + return (FcChar8 *) lang_local; +} + +void +FcDefaultSubstitute (FcPattern *pattern) +{ + FcValue v; + int i; + + if (FcPatternObjectGet (pattern, FC_WEIGHT_OBJECT, 0, &v) == FcResultNoMatch ) + FcPatternObjectAddInteger (pattern, FC_WEIGHT_OBJECT, FC_WEIGHT_MEDIUM); + + if (FcPatternObjectGet (pattern, FC_SLANT_OBJECT, 0, &v) == FcResultNoMatch) + FcPatternObjectAddInteger (pattern, FC_SLANT_OBJECT, FC_SLANT_ROMAN); + + if (FcPatternObjectGet (pattern, FC_WIDTH_OBJECT, 0, &v) == FcResultNoMatch) + FcPatternObjectAddInteger (pattern, FC_WIDTH_OBJECT, FC_WIDTH_NORMAL); + + for (i = 0; i < NUM_FC_BOOL_DEFAULTS; i++) + if (FcPatternObjectGet (pattern, FcBoolDefaults[i].field, 0, &v) == FcResultNoMatch) + FcPatternObjectAddBool (pattern, FcBoolDefaults[i].field, FcBoolDefaults[i].value); + + if (FcPatternObjectGet (pattern, FC_PIXEL_SIZE_OBJECT, 0, &v) == FcResultNoMatch) + { + double dpi, size, scale; + + if (FcPatternObjectGetDouble (pattern, FC_SIZE_OBJECT, 0, &size) != FcResultMatch) + { + size = 12.0; + (void) FcPatternObjectDel (pattern, FC_SIZE_OBJECT); + FcPatternObjectAddDouble (pattern, FC_SIZE_OBJECT, size); + } + if (FcPatternObjectGetDouble (pattern, FC_SCALE_OBJECT, 0, &scale) != FcResultMatch) + { + scale = 1.0; + (void) FcPatternObjectDel (pattern, FC_SCALE_OBJECT); + FcPatternObjectAddDouble (pattern, FC_SCALE_OBJECT, scale); + } + size *= scale; + if (FcPatternObjectGetDouble (pattern, FC_DPI_OBJECT, 0, &dpi) != FcResultMatch) + { + dpi = 75.0; + (void) FcPatternObjectDel (pattern, FC_DPI_OBJECT); + FcPatternObjectAddDouble (pattern, FC_DPI_OBJECT, dpi); + } + size *= dpi / 72.0; + FcPatternObjectAddDouble (pattern, FC_PIXEL_SIZE_OBJECT, size); + } + + if (FcPatternObjectGet (pattern, FC_LANG_OBJECT, 0, &v) == FcResultNoMatch) + { + FcPatternObjectAddString (pattern, FC_LANG_OBJECT, FcGetDefaultLang ()); + } + if (FcPatternObjectGet (pattern, FC_FONTVERSION_OBJECT, 0, &v) == FcResultNoMatch) + { + FcPatternObjectAddInteger (pattern, FC_FONTVERSION_OBJECT, 0x7fffffff); + } + + if (FcPatternObjectGet (pattern, FC_HINT_STYLE_OBJECT, 0, &v) == FcResultNoMatch) + { + FcPatternObjectAddInteger (pattern, FC_HINT_STYLE_OBJECT, FC_HINT_FULL); + } +} +#define __fcdefault__ +#include "fcaliastail.h" +#undef __fcdefault__ diff --git a/fontconfig/src/fcdir.c b/fontconfig/src/fcdir.c index 7db7961a2..8a2b97625 100644 --- a/fontconfig/src/fcdir.c +++ b/fontconfig/src/fcdir.c @@ -1,325 +1,325 @@ -/* - * fontconfig/src/fcdir.c - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include - -FcBool -FcFileIsDir (const FcChar8 *file) -{ - struct stat statb; - - if (FcStat (file, &statb) != 0) - return FcFalse; - return S_ISDIR(statb.st_mode); -} - -static FcBool -FcFileScanFontConfig (FcFontSet *set, - FcBlanks *blanks, - const FcChar8 *file, - FcConfig *config) -{ - FcPattern *font; - FcBool ret = FcTrue; - int id; - int count = 0; - - id = 0; - do - { - font = 0; - /* - * Nothing in the cache, scan the file - */ - if (FcDebug () & FC_DBG_SCAN) - { - printf ("\tScanning file %s...", file); - fflush (stdout); - } - font = FcFreeTypeQuery (file, id, blanks, &count); - if (FcDebug () & FC_DBG_SCAN) - printf ("done\n"); - - /* - * Edit pattern with user-defined rules - */ - if (font && config && !FcConfigSubstitute (config, font, FcMatchScan)) - { - FcPatternDestroy (font); - font = NULL; - ret = FcFalse; - } - - /* - * Add the font - */ - if (font) - { - if (FcDebug() & FC_DBG_SCANV) - { - printf ("Final font pattern:\n"); - FcPatternPrint (font); - } - if (!FcFontSetAdd (set, font)) - { - FcPatternDestroy (font); - font = NULL; - ret = FcFalse; - } - } - else if (font) - FcPatternDestroy (font); - id++; - } while (font && ret && id < count); - return ret; -} - -FcBool -FcFileScanConfig (FcFontSet *set, - FcStrSet *dirs, - FcBlanks *blanks, - const FcChar8 *file, - FcConfig *config) -{ - if (FcFileIsDir (file)) - return FcStrSetAdd (dirs, file); - else - return FcFileScanFontConfig (set, blanks, file, config); -} - -FcBool -FcFileScan (FcFontSet *set, - FcStrSet *dirs, - FcFileCache *cache, /* XXX unused */ - FcBlanks *blanks, - const FcChar8 *file, - FcBool force) -{ - return FcFileScanConfig (set, dirs, blanks, file, FcConfigGetCurrent ()); -} - -/* - * Strcmp helper that takes pointers to pointers, copied from qsort(3) manpage - */ -static int -cmpstringp(const void *p1, const void *p2) -{ - return strcmp(* (char **) p1, * (char **) p2); -} - -FcBool -FcDirScanConfig (FcFontSet *set, - FcStrSet *dirs, - FcBlanks *blanks, - const FcChar8 *dir, - FcBool force, /* XXX unused */ - FcConfig *config) -{ - DIR *d; - struct dirent *e; - FcStrSet *files; - FcChar8 *file; - FcChar8 *base; - FcBool ret = FcTrue; - int i; - - if (!force) - return FcFalse; - - if (!set && !dirs) - return FcTrue; - - if (!blanks) - blanks = FcConfigGetBlanks (config); - - /* freed below */ - file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1); - if (!file) { - ret = FcFalse; - goto bail; - } - - strcpy ((char *) file, (char *) dir); - strcat ((char *) file, "/"); - base = file + strlen ((char *) file); - - if (FcDebug () & FC_DBG_SCAN) - printf ("\tScanning dir %s\n", dir); - - d = opendir ((char *) dir); - if (!d) - { - /* Don't complain about missing directories */ - if (errno != ENOENT) - ret = FcFalse; - goto bail; - } - - files = FcStrSetCreate (); - if (!files) - { - ret = FcFalse; - goto bail1; - } - while ((e = readdir (d))) - { - if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN) - { - strcpy ((char *) base, (char *) e->d_name); - if (!FcStrSetAdd (files, file)) { - ret = FcFalse; - goto bail2; - } - } - } - - /* - * Sort files to make things prettier - */ - qsort(files->strs, files->num, sizeof(FcChar8 *), cmpstringp); - - /* - * Scan file files to build font patterns - */ - for (i = 0; i < files->num; i++) - FcFileScanConfig (set, dirs, blanks, files->strs[i], config); - -bail2: - FcStrSetDestroy (files); -bail1: - closedir (d); -bail: - return ret; -} - -FcBool -FcDirScan (FcFontSet *set, - FcStrSet *dirs, - FcFileCache *cache, /* XXX unused */ - FcBlanks *blanks, - const FcChar8 *dir, - FcBool force /* XXX unused */) -{ - if (cache || !force) - return FcFalse; - - return FcDirScanConfig (set, dirs, blanks, dir, force, FcConfigGetCurrent ()); -} - -/* - * Scan the specified directory and construct a cache of its contents - */ -FcCache * -FcDirCacheScan (const FcChar8 *dir, FcConfig *config) -{ - FcStrSet *dirs; - FcBool ret = FcTrue; - FcFontSet *set; - FcCache *cache = NULL; - struct stat dir_stat; - - if (FcDebug () & FC_DBG_FONTSET) - printf ("cache scan dir %s\n", dir); - - if (FcStat (dir, &dir_stat) < 0) - { - if (errno != ENOENT) - ret = FcFalse; - goto bail; - } - - set = FcFontSetCreate(); - if (!set) - { - ret = FcFalse; - goto bail; - } - - dirs = FcStrSetCreate (); - if (!dirs) - { - ret = FcFalse; - goto bail1; - } - - /* - * Scan the dir - */ - if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config)) - { - ret = FcFalse; - goto bail2; - } - - /* - * Build the cache object - */ - cache = FcDirCacheBuild (set, dir, &dir_stat, dirs); - if (!cache) - { - ret = FcFalse; - goto bail2; - } - - /* - * Write out the cache file, ignoring any troubles - */ - FcDirCacheWrite (cache, config); - - bail2: - FcStrSetDestroy (dirs); - bail1: - FcFontSetDestroy (set); - bail: - return cache; -} - -/* - * Read (or construct) the cache for a directory - */ -FcCache * -FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config) -{ - FcCache *cache = NULL; - - /* Try to use existing cache file */ - if (!force) - cache = FcDirCacheLoad (dir, config, NULL); - - /* Not using existing cache file, construct new cache */ - if (!cache) - cache = FcDirCacheScan (dir, config); - - return cache; -} - -FcBool -FcDirSave (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir) -{ - return FcFalse; /* XXX deprecated */ -} -#define __fcdir__ -#include "fcaliastail.h" -#undef __fcdir__ +/* + * fontconfig/src/fcdir.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include + +FcBool +FcFileIsDir (const FcChar8 *file) +{ + struct stat statb; + + if (FcStat (file, &statb) != 0) + return FcFalse; + return S_ISDIR(statb.st_mode); +} + +static FcBool +FcFileScanFontConfig (FcFontSet *set, + FcBlanks *blanks, + const FcChar8 *file, + FcConfig *config) +{ + FcPattern *font; + FcBool ret = FcTrue; + int id; + int count = 0; + + id = 0; + do + { + font = 0; + /* + * Nothing in the cache, scan the file + */ + if (FcDebug () & FC_DBG_SCAN) + { + printf ("\tScanning file %s...", file); + fflush (stdout); + } + font = FcFreeTypeQuery (file, id, blanks, &count); + if (FcDebug () & FC_DBG_SCAN) + printf ("done\n"); + + /* + * Edit pattern with user-defined rules + */ + if (font && config && !FcConfigSubstitute (config, font, FcMatchScan)) + { + FcPatternDestroy (font); + font = NULL; + ret = FcFalse; + } + + /* + * Add the font + */ + if (font) + { + if (FcDebug() & FC_DBG_SCANV) + { + printf ("Final font pattern:\n"); + FcPatternPrint (font); + } + if (!FcFontSetAdd (set, font)) + { + FcPatternDestroy (font); + font = NULL; + ret = FcFalse; + } + } + else if (font) + FcPatternDestroy (font); + id++; + } while (font && ret && id < count); + return ret; +} + +FcBool +FcFileScanConfig (FcFontSet *set, + FcStrSet *dirs, + FcBlanks *blanks, + const FcChar8 *file, + FcConfig *config) +{ + if (FcFileIsDir (file)) + return FcStrSetAdd (dirs, file); + else + return FcFileScanFontConfig (set, blanks, file, config); +} + +FcBool +FcFileScan (FcFontSet *set, + FcStrSet *dirs, + FcFileCache *cache, /* XXX unused */ + FcBlanks *blanks, + const FcChar8 *file, + FcBool force) +{ + return FcFileScanConfig (set, dirs, blanks, file, FcConfigGetCurrent ()); +} + +/* + * Strcmp helper that takes pointers to pointers, copied from qsort(3) manpage + */ +static int +cmpstringp(const void *p1, const void *p2) +{ + return strcmp(* (char **) p1, * (char **) p2); +} + +FcBool +FcDirScanConfig (FcFontSet *set, + FcStrSet *dirs, + FcBlanks *blanks, + const FcChar8 *dir, + FcBool force, /* XXX unused */ + FcConfig *config) +{ + DIR *d; + struct dirent *e; + FcStrSet *files; + FcChar8 *file; + FcChar8 *base; + FcBool ret = FcTrue; + int i; + + if (!force) + return FcFalse; + + if (!set && !dirs) + return FcTrue; + + if (!blanks) + blanks = FcConfigGetBlanks (config); + + /* freed below */ + file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1); + if (!file) { + ret = FcFalse; + goto bail; + } + + strcpy ((char *) file, (char *) dir); + strcat ((char *) file, "/"); + base = file + strlen ((char *) file); + + if (FcDebug () & FC_DBG_SCAN) + printf ("\tScanning dir %s\n", dir); + + d = opendir ((char *) dir); + if (!d) + { + /* Don't complain about missing directories */ + if (errno != ENOENT) + ret = FcFalse; + goto bail; + } + + files = FcStrSetCreate (); + if (!files) + { + ret = FcFalse; + goto bail1; + } + while ((e = readdir (d))) + { + if (e->d_name[0] != '.' && strlen (e->d_name) < FC_MAX_FILE_LEN) + { + strcpy ((char *) base, (char *) e->d_name); + if (!FcStrSetAdd (files, file)) { + ret = FcFalse; + goto bail2; + } + } + } + + /* + * Sort files to make things prettier + */ + qsort(files->strs, files->num, sizeof(FcChar8 *), cmpstringp); + + /* + * Scan file files to build font patterns + */ + for (i = 0; i < files->num; i++) + FcFileScanConfig (set, dirs, blanks, files->strs[i], config); + +bail2: + FcStrSetDestroy (files); +bail1: + closedir (d); +bail: + return ret; +} + +FcBool +FcDirScan (FcFontSet *set, + FcStrSet *dirs, + FcFileCache *cache, /* XXX unused */ + FcBlanks *blanks, + const FcChar8 *dir, + FcBool force /* XXX unused */) +{ + if (cache || !force) + return FcFalse; + + return FcDirScanConfig (set, dirs, blanks, dir, force, FcConfigGetCurrent ()); +} + +/* + * Scan the specified directory and construct a cache of its contents + */ +FcCache * +FcDirCacheScan (const FcChar8 *dir, FcConfig *config) +{ + FcStrSet *dirs; + FcBool ret = FcTrue; + FcFontSet *set; + FcCache *cache = NULL; + struct stat dir_stat; + + if (FcDebug () & FC_DBG_FONTSET) + printf ("cache scan dir %s\n", dir); + + if (FcStat (dir, &dir_stat) < 0) + { + if (errno != ENOENT) + ret = FcFalse; + goto bail; + } + + set = FcFontSetCreate(); + if (!set) + { + ret = FcFalse; + goto bail; + } + + dirs = FcStrSetCreate (); + if (!dirs) + { + ret = FcFalse; + goto bail1; + } + + /* + * Scan the dir + */ + if (!FcDirScanConfig (set, dirs, NULL, dir, FcTrue, config)) + { + ret = FcFalse; + goto bail2; + } + + /* + * Build the cache object + */ + cache = FcDirCacheBuild (set, dir, &dir_stat, dirs); + if (!cache) + { + ret = FcFalse; + goto bail2; + } + + /* + * Write out the cache file, ignoring any troubles + */ + FcDirCacheWrite (cache, config); + + bail2: + FcStrSetDestroy (dirs); + bail1: + FcFontSetDestroy (set); + bail: + return cache; +} + +/* + * Read (or construct) the cache for a directory + */ +FcCache * +FcDirCacheRead (const FcChar8 *dir, FcBool force, FcConfig *config) +{ + FcCache *cache = NULL; + + /* Try to use existing cache file */ + if (!force) + cache = FcDirCacheLoad (dir, config, NULL); + + /* Not using existing cache file, construct new cache */ + if (!cache) + cache = FcDirCacheScan (dir, config); + + return cache; +} + +FcBool +FcDirSave (FcFontSet *set, FcStrSet * dirs, const FcChar8 *dir) +{ + return FcFalse; /* XXX deprecated */ +} +#define __fcdir__ +#include "fcaliastail.h" +#undef __fcdir__ diff --git a/fontconfig/src/fcformat.c b/fontconfig/src/fcformat.c index df184f704..d8518f458 100644 --- a/fontconfig/src/fcformat.c +++ b/fontconfig/src/fcformat.c @@ -1,1214 +1,1214 @@ -/* - * Copyright © 2008,2009 Red Hat, Inc. - * - * Red Hat Author(s): Behdad Esfahbod - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include -#include -#include - - -/* The language is documented in doc/fcformat.fncs - * These are the features implemented: - * - * simple %{elt} - * width %width{elt} - * index %{elt[idx]} - * name= %{elt=} - * :name= %{:elt} - * default %{elt:-word} - * count %{#elt} - * subexpr %{{expr}} - * filter-out %{-elt1,elt2,elt3{expr}} - * filter-in %{+elt1,elt2,elt3{expr}} - * conditional %{?elt1,elt2,!elt3{}{}} - * enumerate %{[]elt1,elt2{expr}} - * langset langset enumeration using the same syntax - * builtin %{=blt} - * convert %{elt|conv1|conv2|conv3} - * - * converters: - * basename FcStrBasename - * dirname FcStrDirname - * downcase FcStrDowncase - * shescape - * cescape - * xmlescape - * delete delete chars - * escape escape chars - * translate translate chars - * - * builtins: - * unparse FcNameUnparse - * fcmatch fc-match default - * fclist fc-list default - * fccat fc-cat default - * pkgkit PackageKit package tag format - * - * - * Some ideas for future syntax extensions: - * - * - verbose builtin that is like FcPatternPrint - * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}' - * - allow indexing in +, -, ? filtering? - * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation) - */ - - -#define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\"" -#define FCMATCH_FORMAT "%{file:-|basename}: \"%{family[0]:-}\" \"%{style[0]:-}\"" -#define FCLIST_FORMAT "%{?file{%{file}: }}%{-file{%{=unparse}}}" -#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}" - - -static void -message (const char *fmt, ...) -{ - va_list args; - va_start (args, fmt); - fprintf (stderr, "Fontconfig: Pattern format error: "); - vfprintf (stderr, fmt, args); - fprintf (stderr, ".\n"); - va_end (args); -} - - -typedef struct _FcFormatContext -{ - const FcChar8 *format_orig; - const FcChar8 *format; - int format_len; - FcChar8 *word; - FcBool word_allocated; -} FcFormatContext; - -static FcBool -FcFormatContextInit (FcFormatContext *c, - const FcChar8 *format, - FcChar8 *scratch, - int scratch_len) -{ - c->format_orig = c->format = format; - c->format_len = strlen ((const char *) format); - - if (c->format_len < scratch_len) - { - c->word = scratch; - c->word_allocated = FcFalse; - } - else - { - c->word = malloc (c->format_len + 1); - c->word_allocated = FcTrue; - } - - return c->word != NULL; -} - -static void -FcFormatContextDone (FcFormatContext *c) -{ - if (c && c->word_allocated) - { - free (c->word); - } -} - -static FcBool -consume_char (FcFormatContext *c, - FcChar8 term) -{ - if (*c->format != term) - return FcFalse; - - c->format++; - return FcTrue; -} - -static FcBool -expect_char (FcFormatContext *c, - FcChar8 term) -{ - FcBool res = consume_char (c, term); - if (!res) - { - if (c->format == c->format_orig + c->format_len) - message ("format ended while expecting '%c'", - term); - else - message ("expected '%c' at %d", - term, c->format - c->format_orig + 1); - } - return res; -} - -static FcBool -FcCharIsPunct (const FcChar8 c) -{ - if (c < '0') - return FcTrue; - if (c <= '9') - return FcFalse; - if (c < 'A') - return FcTrue; - if (c <= 'Z') - return FcFalse; - if (c < 'a') - return FcTrue; - if (c <= 'z') - return FcFalse; - if (c <= '~') - return FcTrue; - return FcFalse; -} - -static char escaped_char(const char ch) -{ - switch (ch) { - case 'a': return '\a'; - case 'b': return '\b'; - case 'f': return '\f'; - case 'n': return '\n'; - case 'r': return '\r'; - case 't': return '\t'; - case 'v': return '\v'; - default: return ch; - } -} - -static FcBool -read_word (FcFormatContext *c) -{ - FcChar8 *p; - - p = c->word; - - while (*c->format) - { - if (*c->format == '\\') - { - c->format++; - if (*c->format) - *p++ = escaped_char (*c->format++); - continue; - } - else if (FcCharIsPunct (*c->format)) - break; - - *p++ = *c->format++; - } - *p = '\0'; - - if (p == c->word) - { - message ("expected identifier at %d", - c->format - c->format_orig + 1); - return FcFalse; - } - - return FcTrue; -} - -static FcBool -read_chars (FcFormatContext *c, - FcChar8 term) -{ - FcChar8 *p; - - p = c->word; - - while (*c->format && *c->format != '}' && *c->format != term) - { - if (*c->format == '\\') - { - c->format++; - if (*c->format) - *p++ = escaped_char (*c->format++); - continue; - } - - *p++ = *c->format++; - } - *p = '\0'; - - if (p == c->word) - { - message ("expected character data at %d", - c->format - c->format_orig + 1); - return FcFalse; - } - - return FcTrue; -} - -static FcBool -FcPatternFormatToBuf (FcPattern *pat, - const FcChar8 *format, - FcStrBuf *buf); - -static FcBool -interpret_builtin (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - FcChar8 *new_str; - FcBool ret; - - if (!expect_char (c, '=') || - !read_word (c)) - return FcFalse; - - /* try simple builtins first */ - if (0) { } -#define BUILTIN(name, func) \ - else if (0 == strcmp ((const char *) c->word, name))\ - do { new_str = func (pat); ret = FcTrue; } while (0) - BUILTIN ("unparse", FcNameUnparse); - /* BUILTIN ("verbose", FcPatternPrint); XXX */ -#undef BUILTIN - else - ret = FcFalse; - - if (ret) - { - if (new_str) - { - FcStrBufString (buf, new_str); - free (new_str); - return FcTrue; - } - else - return FcFalse; - } - - /* now try our custom formats */ - if (0) { } -#define BUILTIN(name, format) \ - else if (0 == strcmp ((const char *) c->word, name))\ - ret = FcPatternFormatToBuf (pat, (const FcChar8 *) format, buf) - BUILTIN ("fccat", FCCAT_FORMAT); - BUILTIN ("fcmatch", FCMATCH_FORMAT); - BUILTIN ("fclist", FCLIST_FORMAT); - BUILTIN ("pkgkit", PKGKIT_FORMAT); -#undef BUILTIN - else - ret = FcFalse; - - if (!ret) - message ("unknown builtin \"%s\"", - c->word); - - return ret; -} - -static FcBool -interpret_expr (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf, - FcChar8 term); - -static FcBool -interpret_subexpr (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - return expect_char (c, '{') && - interpret_expr (c, pat, buf, '}') && - expect_char (c, '}'); -} - -static FcBool -maybe_interpret_subexpr (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - return (*c->format == '{') ? - interpret_subexpr (c, pat, buf) : - FcTrue; -} - -static FcBool -skip_subexpr (FcFormatContext *c); - -static FcBool -skip_percent (FcFormatContext *c) -{ - int width; - - if (!expect_char (c, '%')) - return FcFalse; - - /* skip an optional width specifier */ - width = strtol ((const char *) c->format, (char **) &c->format, 10); - - if (!expect_char (c, '{')) - return FcFalse; - - while(*c->format && *c->format != '}') - { - switch (*c->format) - { - case '\\': - c->format++; /* skip over '\\' */ - if (*c->format) - c->format++; - continue; - case '{': - if (!skip_subexpr (c)) - return FcFalse; - continue; - } - c->format++; - } - - return expect_char (c, '}'); -} - -static FcBool -skip_expr (FcFormatContext *c) -{ - while(*c->format && *c->format != '}') - { - switch (*c->format) - { - case '\\': - c->format++; /* skip over '\\' */ - if (*c->format) - c->format++; - continue; - case '%': - if (!skip_percent (c)) - return FcFalse; - continue; - } - c->format++; - } - - return FcTrue; -} - -static FcBool -skip_subexpr (FcFormatContext *c) -{ - return expect_char (c, '{') && - skip_expr (c) && - expect_char (c, '}'); -} - -static FcBool -maybe_skip_subexpr (FcFormatContext *c) -{ - return (*c->format == '{') ? - skip_subexpr (c) : - FcTrue; -} - -static FcBool -interpret_filter_in (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - FcObjectSet *os; - FcPattern *subpat; - - if (!expect_char (c, '+')) - return FcFalse; - - os = FcObjectSetCreate (); - if (!os) - return FcFalse; - - do - { - /* XXX binding */ - if (!read_word (c) || - !FcObjectSetAdd (os, (const char *) c->word)) - { - FcObjectSetDestroy (os); - return FcFalse; - } - } - while (consume_char (c, ',')); - - subpat = FcPatternFilter (pat, os); - FcObjectSetDestroy (os); - - if (!subpat || - !interpret_subexpr (c, subpat, buf)) - return FcFalse; - - FcPatternDestroy (subpat); - return FcTrue; -} - -static FcBool -interpret_filter_out (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - FcPattern *subpat; - - if (!expect_char (c, '-')) - return FcFalse; - - subpat = FcPatternDuplicate (pat); - if (!subpat) - return FcFalse; - - do - { - if (!read_word (c)) - { - FcPatternDestroy (subpat); - return FcFalse; - } - - FcPatternDel (subpat, (const char *) c->word); - } - while (consume_char (c, ',')); - - if (!interpret_subexpr (c, subpat, buf)) - return FcFalse; - - FcPatternDestroy (subpat); - return FcTrue; -} - -static FcBool -interpret_cond (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - FcBool pass; - - if (!expect_char (c, '?')) - return FcFalse; - - pass = FcTrue; - - do - { - FcBool negate; - FcValue v; - - negate = consume_char (c, '!'); - - if (!read_word (c)) - return FcFalse; - - pass = pass && - (negate ^ - (FcResultMatch == - FcPatternGet (pat, (const char *) c->word, 0, &v))); - } - while (consume_char (c, ',')); - - if (pass) - { - if (!interpret_subexpr (c, pat, buf) || - !maybe_skip_subexpr (c)) - return FcFalse; - } - else - { - if (!skip_subexpr (c) || - !maybe_interpret_subexpr (c, pat, buf)) - return FcFalse; - } - - return FcTrue; -} - -static FcBool -interpret_count (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - int count; - FcPatternElt *e; - FcChar8 buf_static[64]; - - if (!expect_char (c, '#')) - return FcFalse; - - if (!read_word (c)) - return FcFalse; - - count = 0; - e = FcPatternObjectFindElt (pat, - FcObjectFromName ((const char *) c->word)); - if (e) - { - FcValueListPtr l; - count++; - for (l = FcPatternEltValues(e); - l->next; - l = l->next) - count++; - } - - snprintf ((char *) buf_static, sizeof (buf_static), "%d", count); - FcStrBufString (buf, buf_static); - - return FcTrue; -} - -static FcBool -interpret_enumerate (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - FcObjectSet *os; - FcPattern *subpat; - const FcChar8 *format_save; - int idx; - FcBool ret, done; - FcStrList *lang_strs; - - if (!expect_char (c, '[') || - !expect_char (c, ']')) - return FcFalse; - - os = FcObjectSetCreate (); - if (!os) - return FcFalse; - - ret = FcTrue; - - do - { - if (!read_word (c) || - !FcObjectSetAdd (os, (const char *) c->word)) - { - FcObjectSetDestroy (os); - return FcFalse; - } - } - while (consume_char (c, ',')); - - /* If we have one element and it's of type FcLangSet, we want - * to enumerate the languages in it. */ - lang_strs = NULL; - if (os->nobject == 1) - { - FcLangSet *langset; - if (FcResultMatch == - FcPatternGetLangSet (pat, os->objects[0], 0, &langset)) - { - FcStrSet *ss; - if (!(ss = FcLangSetGetLangs (langset)) || - !(lang_strs = FcStrListCreate (ss))) - goto bail0; - } - } - - subpat = FcPatternDuplicate (pat); - if (!subpat) - goto bail0; - - format_save = c->format; - idx = 0; - do - { - int i; - - done = FcTrue; - - if (lang_strs) - { - FcChar8 *lang; - - FcPatternDel (subpat, os->objects[0]); - if ((lang = FcStrListNext (lang_strs))) - { - /* XXX binding? */ - FcPatternAddString (subpat, os->objects[0], lang); - done = FcFalse; - } - } - else - { - for (i = 0; i < os->nobject; i++) - { - FcValue v; - - /* XXX this can be optimized by accessing valuelist linked lists - * directly and remembering where we were. Most (all) value lists - * in normal uses are pretty short though (language tags are - * stored as a LangSet, not separate values.). */ - FcPatternDel (subpat, os->objects[i]); - if (FcResultMatch == - FcPatternGet (pat, os->objects[i], idx, &v)) - { - /* XXX binding */ - FcPatternAdd (subpat, os->objects[i], v, FcFalse); - done = FcFalse; - } - } - } - - if (!done) - { - c->format = format_save; - ret = interpret_subexpr (c, subpat, buf); - if (!ret) - goto bail; - } - - idx++; - } while (!done); - - if (c->format == format_save) - skip_subexpr (c); - -bail: - FcPatternDestroy (subpat); -bail0: - if (lang_strs) - FcStrListDone (lang_strs); - FcObjectSetDestroy (os); - - return ret; -} - -static FcBool -interpret_simple (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - FcPatternElt *e; - FcBool add_colon = FcFalse; - FcBool add_elt_name = FcFalse; - int idx; - FcChar8 *else_string; - - if (consume_char (c, ':')) - add_colon = FcTrue; - - if (!read_word (c)) - return FcFalse; - - idx = -1; - if (consume_char (c, '[')) - { - idx = strtol ((const char *) c->format, (char **) &c->format, 10); - if (idx < 0) - { - message ("expected non-negative number at %d", - c->format-1 - c->format_orig + 1); - return FcFalse; - } - if (!expect_char (c, ']')) - return FcFalse; - } - - if (consume_char (c, '=')) - add_elt_name = FcTrue; - - /* modifiers */ - else_string = NULL; - if (consume_char (c, ':')) - { - FcChar8 *orig; - /* divert the c->word for now */ - orig = c->word; - c->word = c->word + strlen ((const char *) c->word) + 1; - /* for now we just support 'default value' */ - if (!expect_char (c, '-') || - !read_chars (c, '|')) - { - c->word = orig; - return FcFalse; - } - else_string = c->word; - c->word = orig; - } - - e = FcPatternObjectFindElt (pat, - FcObjectFromName ((const char *) c->word)); - if (e || else_string) - { - FcValueListPtr l = NULL; - - if (add_colon) - FcStrBufChar (buf, ':'); - if (add_elt_name) - { - FcStrBufString (buf, c->word); - FcStrBufChar (buf, '='); - } - - if (e) - l = FcPatternEltValues(e); - - if (idx != -1) - { - while (l && idx > 0) - { - l = FcValueListNext(l); - idx--; - } - if (l && idx == 0) - { - if (!FcNameUnparseValue (buf, &l->value, '\0')) - return FcFalse; - } - else goto notfound; - } - else if (l) - { - FcNameUnparseValueList (buf, l, '\0'); - } - else - { - notfound: - if (else_string) - FcStrBufString (buf, else_string); - } - } - - return FcTrue; -} - -static FcBool -cescape (FcFormatContext *c, - const FcChar8 *str, - FcStrBuf *buf) -{ - /* XXX escape \n etc? */ - - while(*str) - { - switch (*str) - { - case '\\': - case '"': - FcStrBufChar (buf, '\\'); - break; - } - FcStrBufChar (buf, *str++); - } - return FcTrue; -} - -static FcBool -shescape (FcFormatContext *c, - const FcChar8 *str, - FcStrBuf *buf) -{ - FcStrBufChar (buf, '\''); - while(*str) - { - if (*str == '\'') - FcStrBufString (buf, (const FcChar8 *) "'\\''"); - else - FcStrBufChar (buf, *str); - str++; - } - FcStrBufChar (buf, '\''); - return FcTrue; -} - -static FcBool -xmlescape (FcFormatContext *c, - const FcChar8 *str, - FcStrBuf *buf) -{ - /* XXX escape \n etc? */ - - while(*str) - { - switch (*str) - { - case '&': FcStrBufString (buf, (const FcChar8 *) "&"); break; - case '<': FcStrBufString (buf, (const FcChar8 *) "<"); break; - case '>': FcStrBufString (buf, (const FcChar8 *) ">"); break; - default: FcStrBufChar (buf, *str); break; - } - str++; - } - return FcTrue; -} - -static FcBool -delete_chars (FcFormatContext *c, - const FcChar8 *str, - FcStrBuf *buf) -{ - /* XXX not UTF-8 aware */ - - if (!expect_char (c, '(') || - !read_chars (c, ')') || - !expect_char (c, ')')) - return FcFalse; - - while(*str) - { - FcChar8 *p; - - p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word); - if (p) - { - FcStrBufData (buf, str, p - str); - str = p + 1; - } - else - { - FcStrBufString (buf, str); - break; - } - - } - - return FcTrue; -} - -static FcBool -escape_chars (FcFormatContext *c, - const FcChar8 *str, - FcStrBuf *buf) -{ - /* XXX not UTF-8 aware */ - - if (!expect_char (c, '(') || - !read_chars (c, ')') || - !expect_char (c, ')')) - return FcFalse; - - while(*str) - { - FcChar8 *p; - - p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word); - if (p) - { - FcStrBufData (buf, str, p - str); - FcStrBufChar (buf, c->word[0]); - FcStrBufChar (buf, *p); - str = p + 1; - } - else - { - FcStrBufString (buf, str); - break; - } - - } - - return FcTrue; -} - -static FcBool -translate_chars (FcFormatContext *c, - const FcChar8 *str, - FcStrBuf *buf) -{ - char *from, *to, repeat; - int from_len, to_len; - - /* XXX not UTF-8 aware */ - - if (!expect_char (c, '(') || - !read_chars (c, ',') || - !expect_char (c, ',')) - return FcFalse; - - from = (char *) c->word; - from_len = strlen (from); - to = from + from_len + 1; - - /* hack: we temporarily divert c->word */ - c->word = (FcChar8 *) to; - if (!read_chars (c, ')')) - { - c->word = (FcChar8 *) from; - return FcFalse; - } - c->word = (FcChar8 *) from; - - to_len = strlen (to); - repeat = to[to_len - 1]; - - if (!expect_char (c, ')')) - return FcFalse; - - while(*str) - { - FcChar8 *p; - - p = (FcChar8 *) strpbrk ((const char *) str, (const char *) from); - if (p) - { - int i; - FcStrBufData (buf, str, p - str); - i = strchr (from, *p) - from; - FcStrBufChar (buf, i < to_len ? to[i] : repeat); - str = p + 1; - } - else - { - FcStrBufString (buf, str); - break; - } - - } - - return FcTrue; -} - -static FcBool -interpret_convert (FcFormatContext *c, - FcStrBuf *buf, - int start) -{ - const FcChar8 *str; - FcChar8 *new_str; - FcStrBuf new_buf; - FcChar8 buf_static[8192]; - FcBool ret; - - if (!expect_char (c, '|') || - !read_word (c)) - return FcFalse; - - /* prepare the buffer */ - FcStrBufChar (buf, '\0'); - if (buf->failed) - return FcFalse; - str = buf->buf + start; - buf->len = start; - - /* try simple converters first */ - if (0) { } -#define CONVERTER(name, func) \ - else if (0 == strcmp ((const char *) c->word, name))\ - do { new_str = func (str); ret = FcTrue; } while (0) - CONVERTER ("downcase", FcStrDowncase); - CONVERTER ("basename", FcStrBasename); - CONVERTER ("dirname", FcStrDirname); -#undef CONVERTER - else - ret = FcFalse; - - if (ret) - { - if (new_str) - { - FcStrBufString (buf, new_str); - free (new_str); - return FcTrue; - } - else - return FcFalse; - } - - FcStrBufInit (&new_buf, buf_static, sizeof (buf_static)); - - /* now try our custom converters */ - if (0) { } -#define CONVERTER(name, func) \ - else if (0 == strcmp ((const char *) c->word, name))\ - ret = func (c, str, &new_buf) - CONVERTER ("cescape", cescape); - CONVERTER ("shescape", shescape); - CONVERTER ("xmlescape", xmlescape); - CONVERTER ("delete", delete_chars); - CONVERTER ("escape", escape_chars); - CONVERTER ("translate", translate_chars); -#undef CONVERTER - else - ret = FcFalse; - - if (ret) - { - FcStrBufChar (&new_buf, '\0'); - FcStrBufString (buf, new_buf.buf); - } - else - message ("unknown converter \"%s\"", - c->word); - - FcStrBufDestroy (&new_buf); - - return ret; -} - -static FcBool -maybe_interpret_converts (FcFormatContext *c, - FcStrBuf *buf, - int start) -{ - while (*c->format == '|') - if (!interpret_convert (c, buf, start)) - return FcFalse; - - return FcTrue; -} - -static FcBool -align_to_width (FcStrBuf *buf, - int start, - int width) -{ - int len; - - if (buf->failed) - return FcFalse; - - len = buf->len - start; - if (len < -width) - { - /* left align */ - while (len++ < -width) - FcStrBufChar (buf, ' '); - } - else if (len < width) - { - int old_len; - old_len = len; - /* right align */ - while (len++ < width) - FcStrBufChar (buf, ' '); - if (buf->failed) - return FcFalse; - len = old_len; - memmove (buf->buf + buf->len - len, - buf->buf + buf->len - width, - len); - memset (buf->buf + buf->len - width, - ' ', - width - len); - } - - return !buf->failed; -} -static FcBool -interpret_percent (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf) -{ - int width, start; - FcBool ret; - - if (!expect_char (c, '%')) - return FcFalse; - - if (consume_char (c, '%')) /* "%%" */ - { - FcStrBufChar (buf, '%'); - return FcTrue; - } - - /* parse an optional width specifier */ - width = strtol ((const char *) c->format, (char **) &c->format, 10); - - if (!expect_char (c, '{')) - return FcFalse; - - start = buf->len; - - switch (*c->format) { - case '=': ret = interpret_builtin (c, pat, buf); break; - case '{': ret = interpret_subexpr (c, pat, buf); break; - case '+': ret = interpret_filter_in (c, pat, buf); break; - case '-': ret = interpret_filter_out (c, pat, buf); break; - case '?': ret = interpret_cond (c, pat, buf); break; - case '#': ret = interpret_count (c, pat, buf); break; - case '[': ret = interpret_enumerate (c, pat, buf); break; - default: ret = interpret_simple (c, pat, buf); break; - } - - return ret && - maybe_interpret_converts (c, buf, start) && - align_to_width (buf, start, width) && - expect_char (c, '}'); -} - -static FcBool -interpret_expr (FcFormatContext *c, - FcPattern *pat, - FcStrBuf *buf, - FcChar8 term) -{ - while (*c->format && *c->format != term) - { - switch (*c->format) - { - case '\\': - c->format++; /* skip over '\\' */ - if (*c->format) - FcStrBufChar (buf, escaped_char (*c->format++)); - continue; - case '%': - if (!interpret_percent (c, pat, buf)) - return FcFalse; - continue; - } - FcStrBufChar (buf, *c->format++); - } - return FcTrue; -} - -static FcBool -FcPatternFormatToBuf (FcPattern *pat, - const FcChar8 *format, - FcStrBuf *buf) -{ - FcFormatContext c; - FcChar8 word_static[1024]; - FcBool ret; - - if (!FcFormatContextInit (&c, format, word_static, sizeof (word_static))) - return FcFalse; - - ret = interpret_expr (&c, pat, buf, '\0'); - - FcFormatContextDone (&c); - - return ret; -} - -FcChar8 * -FcPatternFormat (FcPattern *pat, - const FcChar8 *format) -{ - FcStrBuf buf; - FcChar8 buf_static[8192 - 1024]; - FcBool ret; - - FcStrBufInit (&buf, buf_static, sizeof (buf_static)); - - ret = FcPatternFormatToBuf (pat, format, &buf); - - if (ret) - return FcStrBufDone (&buf); - else - { - FcStrBufDestroy (&buf); - return NULL; - } -} - -#define __fcformat__ -#include "fcaliastail.h" -#undef __fcformat__ +/* + * Copyright © 2008,2009 Red Hat, Inc. + * + * Red Hat Author(s): Behdad Esfahbod + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include +#include +#include + + +/* The language is documented in doc/fcformat.fncs + * These are the features implemented: + * + * simple %{elt} + * width %width{elt} + * index %{elt[idx]} + * name= %{elt=} + * :name= %{:elt} + * default %{elt:-word} + * count %{#elt} + * subexpr %{{expr}} + * filter-out %{-elt1,elt2,elt3{expr}} + * filter-in %{+elt1,elt2,elt3{expr}} + * conditional %{?elt1,elt2,!elt3{}{}} + * enumerate %{[]elt1,elt2{expr}} + * langset langset enumeration using the same syntax + * builtin %{=blt} + * convert %{elt|conv1|conv2|conv3} + * + * converters: + * basename FcStrBasename + * dirname FcStrDirname + * downcase FcStrDowncase + * shescape + * cescape + * xmlescape + * delete delete chars + * escape escape chars + * translate translate chars + * + * builtins: + * unparse FcNameUnparse + * fcmatch fc-match default + * fclist fc-list default + * fccat fc-cat default + * pkgkit PackageKit package tag format + * + * + * Some ideas for future syntax extensions: + * + * - verbose builtin that is like FcPatternPrint + * - allow indexing subexprs using '%{[idx]elt1,elt2{subexpr}}' + * - allow indexing in +, -, ? filtering? + * - conditional/filtering/deletion on binding (using '(w)'/'(s)'/'(=)' notation) + */ + + +#define FCCAT_FORMAT "\"%{file|basename|cescape}\" %{index} \"%{-file{%{=unparse|cescape}}}\"" +#define FCMATCH_FORMAT "%{file:-|basename}: \"%{family[0]:-}\" \"%{style[0]:-}\"" +#define FCLIST_FORMAT "%{?file{%{file}: }}%{-file{%{=unparse}}}" +#define PKGKIT_FORMAT "%{[]family{font(%{family|downcase|delete( )})\n}}%{[]lang{font(:lang=%{lang|downcase|translate(_,-)})\n}}" + + +static void +message (const char *fmt, ...) +{ + va_list args; + va_start (args, fmt); + fprintf (stderr, "Fontconfig: Pattern format error: "); + vfprintf (stderr, fmt, args); + fprintf (stderr, ".\n"); + va_end (args); +} + + +typedef struct _FcFormatContext +{ + const FcChar8 *format_orig; + const FcChar8 *format; + int format_len; + FcChar8 *word; + FcBool word_allocated; +} FcFormatContext; + +static FcBool +FcFormatContextInit (FcFormatContext *c, + const FcChar8 *format, + FcChar8 *scratch, + int scratch_len) +{ + c->format_orig = c->format = format; + c->format_len = strlen ((const char *) format); + + if (c->format_len < scratch_len) + { + c->word = scratch; + c->word_allocated = FcFalse; + } + else + { + c->word = malloc (c->format_len + 1); + c->word_allocated = FcTrue; + } + + return c->word != NULL; +} + +static void +FcFormatContextDone (FcFormatContext *c) +{ + if (c && c->word_allocated) + { + free (c->word); + } +} + +static FcBool +consume_char (FcFormatContext *c, + FcChar8 term) +{ + if (*c->format != term) + return FcFalse; + + c->format++; + return FcTrue; +} + +static FcBool +expect_char (FcFormatContext *c, + FcChar8 term) +{ + FcBool res = consume_char (c, term); + if (!res) + { + if (c->format == c->format_orig + c->format_len) + message ("format ended while expecting '%c'", + term); + else + message ("expected '%c' at %d", + term, c->format - c->format_orig + 1); + } + return res; +} + +static FcBool +FcCharIsPunct (const FcChar8 c) +{ + if (c < '0') + return FcTrue; + if (c <= '9') + return FcFalse; + if (c < 'A') + return FcTrue; + if (c <= 'Z') + return FcFalse; + if (c < 'a') + return FcTrue; + if (c <= 'z') + return FcFalse; + if (c <= '~') + return FcTrue; + return FcFalse; +} + +static char escaped_char(const char ch) +{ + switch (ch) { + case 'a': return '\a'; + case 'b': return '\b'; + case 'f': return '\f'; + case 'n': return '\n'; + case 'r': return '\r'; + case 't': return '\t'; + case 'v': return '\v'; + default: return ch; + } +} + +static FcBool +read_word (FcFormatContext *c) +{ + FcChar8 *p; + + p = c->word; + + while (*c->format) + { + if (*c->format == '\\') + { + c->format++; + if (*c->format) + *p++ = escaped_char (*c->format++); + continue; + } + else if (FcCharIsPunct (*c->format)) + break; + + *p++ = *c->format++; + } + *p = '\0'; + + if (p == c->word) + { + message ("expected identifier at %d", + c->format - c->format_orig + 1); + return FcFalse; + } + + return FcTrue; +} + +static FcBool +read_chars (FcFormatContext *c, + FcChar8 term) +{ + FcChar8 *p; + + p = c->word; + + while (*c->format && *c->format != '}' && *c->format != term) + { + if (*c->format == '\\') + { + c->format++; + if (*c->format) + *p++ = escaped_char (*c->format++); + continue; + } + + *p++ = *c->format++; + } + *p = '\0'; + + if (p == c->word) + { + message ("expected character data at %d", + c->format - c->format_orig + 1); + return FcFalse; + } + + return FcTrue; +} + +static FcBool +FcPatternFormatToBuf (FcPattern *pat, + const FcChar8 *format, + FcStrBuf *buf); + +static FcBool +interpret_builtin (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcChar8 *new_str; + FcBool ret; + + if (!expect_char (c, '=') || + !read_word (c)) + return FcFalse; + + /* try simple builtins first */ + if (0) { } +#define BUILTIN(name, func) \ + else if (0 == strcmp ((const char *) c->word, name))\ + do { new_str = func (pat); ret = FcTrue; } while (0) + BUILTIN ("unparse", FcNameUnparse); + /* BUILTIN ("verbose", FcPatternPrint); XXX */ +#undef BUILTIN + else + ret = FcFalse; + + if (ret) + { + if (new_str) + { + FcStrBufString (buf, new_str); + free (new_str); + return FcTrue; + } + else + return FcFalse; + } + + /* now try our custom formats */ + if (0) { } +#define BUILTIN(name, format) \ + else if (0 == strcmp ((const char *) c->word, name))\ + ret = FcPatternFormatToBuf (pat, (const FcChar8 *) format, buf) + BUILTIN ("fccat", FCCAT_FORMAT); + BUILTIN ("fcmatch", FCMATCH_FORMAT); + BUILTIN ("fclist", FCLIST_FORMAT); + BUILTIN ("pkgkit", PKGKIT_FORMAT); +#undef BUILTIN + else + ret = FcFalse; + + if (!ret) + message ("unknown builtin \"%s\"", + c->word); + + return ret; +} + +static FcBool +interpret_expr (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf, + FcChar8 term); + +static FcBool +interpret_subexpr (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + return expect_char (c, '{') && + interpret_expr (c, pat, buf, '}') && + expect_char (c, '}'); +} + +static FcBool +maybe_interpret_subexpr (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + return (*c->format == '{') ? + interpret_subexpr (c, pat, buf) : + FcTrue; +} + +static FcBool +skip_subexpr (FcFormatContext *c); + +static FcBool +skip_percent (FcFormatContext *c) +{ + int width; + + if (!expect_char (c, '%')) + return FcFalse; + + /* skip an optional width specifier */ + width = strtol ((const char *) c->format, (char **) &c->format, 10); + + if (!expect_char (c, '{')) + return FcFalse; + + while(*c->format && *c->format != '}') + { + switch (*c->format) + { + case '\\': + c->format++; /* skip over '\\' */ + if (*c->format) + c->format++; + continue; + case '{': + if (!skip_subexpr (c)) + return FcFalse; + continue; + } + c->format++; + } + + return expect_char (c, '}'); +} + +static FcBool +skip_expr (FcFormatContext *c) +{ + while(*c->format && *c->format != '}') + { + switch (*c->format) + { + case '\\': + c->format++; /* skip over '\\' */ + if (*c->format) + c->format++; + continue; + case '%': + if (!skip_percent (c)) + return FcFalse; + continue; + } + c->format++; + } + + return FcTrue; +} + +static FcBool +skip_subexpr (FcFormatContext *c) +{ + return expect_char (c, '{') && + skip_expr (c) && + expect_char (c, '}'); +} + +static FcBool +maybe_skip_subexpr (FcFormatContext *c) +{ + return (*c->format == '{') ? + skip_subexpr (c) : + FcTrue; +} + +static FcBool +interpret_filter_in (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcObjectSet *os; + FcPattern *subpat; + + if (!expect_char (c, '+')) + return FcFalse; + + os = FcObjectSetCreate (); + if (!os) + return FcFalse; + + do + { + /* XXX binding */ + if (!read_word (c) || + !FcObjectSetAdd (os, (const char *) c->word)) + { + FcObjectSetDestroy (os); + return FcFalse; + } + } + while (consume_char (c, ',')); + + subpat = FcPatternFilter (pat, os); + FcObjectSetDestroy (os); + + if (!subpat || + !interpret_subexpr (c, subpat, buf)) + return FcFalse; + + FcPatternDestroy (subpat); + return FcTrue; +} + +static FcBool +interpret_filter_out (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcPattern *subpat; + + if (!expect_char (c, '-')) + return FcFalse; + + subpat = FcPatternDuplicate (pat); + if (!subpat) + return FcFalse; + + do + { + if (!read_word (c)) + { + FcPatternDestroy (subpat); + return FcFalse; + } + + FcPatternDel (subpat, (const char *) c->word); + } + while (consume_char (c, ',')); + + if (!interpret_subexpr (c, subpat, buf)) + return FcFalse; + + FcPatternDestroy (subpat); + return FcTrue; +} + +static FcBool +interpret_cond (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcBool pass; + + if (!expect_char (c, '?')) + return FcFalse; + + pass = FcTrue; + + do + { + FcBool negate; + FcValue v; + + negate = consume_char (c, '!'); + + if (!read_word (c)) + return FcFalse; + + pass = pass && + (negate ^ + (FcResultMatch == + FcPatternGet (pat, (const char *) c->word, 0, &v))); + } + while (consume_char (c, ',')); + + if (pass) + { + if (!interpret_subexpr (c, pat, buf) || + !maybe_skip_subexpr (c)) + return FcFalse; + } + else + { + if (!skip_subexpr (c) || + !maybe_interpret_subexpr (c, pat, buf)) + return FcFalse; + } + + return FcTrue; +} + +static FcBool +interpret_count (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + int count; + FcPatternElt *e; + FcChar8 buf_static[64]; + + if (!expect_char (c, '#')) + return FcFalse; + + if (!read_word (c)) + return FcFalse; + + count = 0; + e = FcPatternObjectFindElt (pat, + FcObjectFromName ((const char *) c->word)); + if (e) + { + FcValueListPtr l; + count++; + for (l = FcPatternEltValues(e); + l->next; + l = l->next) + count++; + } + + snprintf ((char *) buf_static, sizeof (buf_static), "%d", count); + FcStrBufString (buf, buf_static); + + return FcTrue; +} + +static FcBool +interpret_enumerate (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcObjectSet *os; + FcPattern *subpat; + const FcChar8 *format_save; + int idx; + FcBool ret, done; + FcStrList *lang_strs; + + if (!expect_char (c, '[') || + !expect_char (c, ']')) + return FcFalse; + + os = FcObjectSetCreate (); + if (!os) + return FcFalse; + + ret = FcTrue; + + do + { + if (!read_word (c) || + !FcObjectSetAdd (os, (const char *) c->word)) + { + FcObjectSetDestroy (os); + return FcFalse; + } + } + while (consume_char (c, ',')); + + /* If we have one element and it's of type FcLangSet, we want + * to enumerate the languages in it. */ + lang_strs = NULL; + if (os->nobject == 1) + { + FcLangSet *langset; + if (FcResultMatch == + FcPatternGetLangSet (pat, os->objects[0], 0, &langset)) + { + FcStrSet *ss; + if (!(ss = FcLangSetGetLangs (langset)) || + !(lang_strs = FcStrListCreate (ss))) + goto bail0; + } + } + + subpat = FcPatternDuplicate (pat); + if (!subpat) + goto bail0; + + format_save = c->format; + idx = 0; + do + { + int i; + + done = FcTrue; + + if (lang_strs) + { + FcChar8 *lang; + + FcPatternDel (subpat, os->objects[0]); + if ((lang = FcStrListNext (lang_strs))) + { + /* XXX binding? */ + FcPatternAddString (subpat, os->objects[0], lang); + done = FcFalse; + } + } + else + { + for (i = 0; i < os->nobject; i++) + { + FcValue v; + + /* XXX this can be optimized by accessing valuelist linked lists + * directly and remembering where we were. Most (all) value lists + * in normal uses are pretty short though (language tags are + * stored as a LangSet, not separate values.). */ + FcPatternDel (subpat, os->objects[i]); + if (FcResultMatch == + FcPatternGet (pat, os->objects[i], idx, &v)) + { + /* XXX binding */ + FcPatternAdd (subpat, os->objects[i], v, FcFalse); + done = FcFalse; + } + } + } + + if (!done) + { + c->format = format_save; + ret = interpret_subexpr (c, subpat, buf); + if (!ret) + goto bail; + } + + idx++; + } while (!done); + + if (c->format == format_save) + skip_subexpr (c); + +bail: + FcPatternDestroy (subpat); +bail0: + if (lang_strs) + FcStrListDone (lang_strs); + FcObjectSetDestroy (os); + + return ret; +} + +static FcBool +interpret_simple (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + FcPatternElt *e; + FcBool add_colon = FcFalse; + FcBool add_elt_name = FcFalse; + int idx; + FcChar8 *else_string; + + if (consume_char (c, ':')) + add_colon = FcTrue; + + if (!read_word (c)) + return FcFalse; + + idx = -1; + if (consume_char (c, '[')) + { + idx = strtol ((const char *) c->format, (char **) &c->format, 10); + if (idx < 0) + { + message ("expected non-negative number at %d", + c->format-1 - c->format_orig + 1); + return FcFalse; + } + if (!expect_char (c, ']')) + return FcFalse; + } + + if (consume_char (c, '=')) + add_elt_name = FcTrue; + + /* modifiers */ + else_string = NULL; + if (consume_char (c, ':')) + { + FcChar8 *orig; + /* divert the c->word for now */ + orig = c->word; + c->word = c->word + strlen ((const char *) c->word) + 1; + /* for now we just support 'default value' */ + if (!expect_char (c, '-') || + !read_chars (c, '|')) + { + c->word = orig; + return FcFalse; + } + else_string = c->word; + c->word = orig; + } + + e = FcPatternObjectFindElt (pat, + FcObjectFromName ((const char *) c->word)); + if (e || else_string) + { + FcValueListPtr l = NULL; + + if (add_colon) + FcStrBufChar (buf, ':'); + if (add_elt_name) + { + FcStrBufString (buf, c->word); + FcStrBufChar (buf, '='); + } + + if (e) + l = FcPatternEltValues(e); + + if (idx != -1) + { + while (l && idx > 0) + { + l = FcValueListNext(l); + idx--; + } + if (l && idx == 0) + { + if (!FcNameUnparseValue (buf, &l->value, '\0')) + return FcFalse; + } + else goto notfound; + } + else if (l) + { + FcNameUnparseValueList (buf, l, '\0'); + } + else + { + notfound: + if (else_string) + FcStrBufString (buf, else_string); + } + } + + return FcTrue; +} + +static FcBool +cescape (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + /* XXX escape \n etc? */ + + while(*str) + { + switch (*str) + { + case '\\': + case '"': + FcStrBufChar (buf, '\\'); + break; + } + FcStrBufChar (buf, *str++); + } + return FcTrue; +} + +static FcBool +shescape (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + FcStrBufChar (buf, '\''); + while(*str) + { + if (*str == '\'') + FcStrBufString (buf, (const FcChar8 *) "'\\''"); + else + FcStrBufChar (buf, *str); + str++; + } + FcStrBufChar (buf, '\''); + return FcTrue; +} + +static FcBool +xmlescape (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + /* XXX escape \n etc? */ + + while(*str) + { + switch (*str) + { + case '&': FcStrBufString (buf, (const FcChar8 *) "&"); break; + case '<': FcStrBufString (buf, (const FcChar8 *) "<"); break; + case '>': FcStrBufString (buf, (const FcChar8 *) ">"); break; + default: FcStrBufChar (buf, *str); break; + } + str++; + } + return FcTrue; +} + +static FcBool +delete_chars (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + /* XXX not UTF-8 aware */ + + if (!expect_char (c, '(') || + !read_chars (c, ')') || + !expect_char (c, ')')) + return FcFalse; + + while(*str) + { + FcChar8 *p; + + p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word); + if (p) + { + FcStrBufData (buf, str, p - str); + str = p + 1; + } + else + { + FcStrBufString (buf, str); + break; + } + + } + + return FcTrue; +} + +static FcBool +escape_chars (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + /* XXX not UTF-8 aware */ + + if (!expect_char (c, '(') || + !read_chars (c, ')') || + !expect_char (c, ')')) + return FcFalse; + + while(*str) + { + FcChar8 *p; + + p = (FcChar8 *) strpbrk ((const char *) str, (const char *) c->word); + if (p) + { + FcStrBufData (buf, str, p - str); + FcStrBufChar (buf, c->word[0]); + FcStrBufChar (buf, *p); + str = p + 1; + } + else + { + FcStrBufString (buf, str); + break; + } + + } + + return FcTrue; +} + +static FcBool +translate_chars (FcFormatContext *c, + const FcChar8 *str, + FcStrBuf *buf) +{ + char *from, *to, repeat; + int from_len, to_len; + + /* XXX not UTF-8 aware */ + + if (!expect_char (c, '(') || + !read_chars (c, ',') || + !expect_char (c, ',')) + return FcFalse; + + from = (char *) c->word; + from_len = strlen (from); + to = from + from_len + 1; + + /* hack: we temporarily divert c->word */ + c->word = (FcChar8 *) to; + if (!read_chars (c, ')')) + { + c->word = (FcChar8 *) from; + return FcFalse; + } + c->word = (FcChar8 *) from; + + to_len = strlen (to); + repeat = to[to_len - 1]; + + if (!expect_char (c, ')')) + return FcFalse; + + while(*str) + { + FcChar8 *p; + + p = (FcChar8 *) strpbrk ((const char *) str, (const char *) from); + if (p) + { + int i; + FcStrBufData (buf, str, p - str); + i = strchr (from, *p) - from; + FcStrBufChar (buf, i < to_len ? to[i] : repeat); + str = p + 1; + } + else + { + FcStrBufString (buf, str); + break; + } + + } + + return FcTrue; +} + +static FcBool +interpret_convert (FcFormatContext *c, + FcStrBuf *buf, + int start) +{ + const FcChar8 *str; + FcChar8 *new_str; + FcStrBuf new_buf; + FcChar8 buf_static[8192]; + FcBool ret; + + if (!expect_char (c, '|') || + !read_word (c)) + return FcFalse; + + /* prepare the buffer */ + FcStrBufChar (buf, '\0'); + if (buf->failed) + return FcFalse; + str = buf->buf + start; + buf->len = start; + + /* try simple converters first */ + if (0) { } +#define CONVERTER(name, func) \ + else if (0 == strcmp ((const char *) c->word, name))\ + do { new_str = func (str); ret = FcTrue; } while (0) + CONVERTER ("downcase", FcStrDowncase); + CONVERTER ("basename", FcStrBasename); + CONVERTER ("dirname", FcStrDirname); +#undef CONVERTER + else + ret = FcFalse; + + if (ret) + { + if (new_str) + { + FcStrBufString (buf, new_str); + free (new_str); + return FcTrue; + } + else + return FcFalse; + } + + FcStrBufInit (&new_buf, buf_static, sizeof (buf_static)); + + /* now try our custom converters */ + if (0) { } +#define CONVERTER(name, func) \ + else if (0 == strcmp ((const char *) c->word, name))\ + ret = func (c, str, &new_buf) + CONVERTER ("cescape", cescape); + CONVERTER ("shescape", shescape); + CONVERTER ("xmlescape", xmlescape); + CONVERTER ("delete", delete_chars); + CONVERTER ("escape", escape_chars); + CONVERTER ("translate", translate_chars); +#undef CONVERTER + else + ret = FcFalse; + + if (ret) + { + FcStrBufChar (&new_buf, '\0'); + FcStrBufString (buf, new_buf.buf); + } + else + message ("unknown converter \"%s\"", + c->word); + + FcStrBufDestroy (&new_buf); + + return ret; +} + +static FcBool +maybe_interpret_converts (FcFormatContext *c, + FcStrBuf *buf, + int start) +{ + while (*c->format == '|') + if (!interpret_convert (c, buf, start)) + return FcFalse; + + return FcTrue; +} + +static FcBool +align_to_width (FcStrBuf *buf, + int start, + int width) +{ + int len; + + if (buf->failed) + return FcFalse; + + len = buf->len - start; + if (len < -width) + { + /* left align */ + while (len++ < -width) + FcStrBufChar (buf, ' '); + } + else if (len < width) + { + int old_len; + old_len = len; + /* right align */ + while (len++ < width) + FcStrBufChar (buf, ' '); + if (buf->failed) + return FcFalse; + len = old_len; + memmove (buf->buf + buf->len - len, + buf->buf + buf->len - width, + len); + memset (buf->buf + buf->len - width, + ' ', + width - len); + } + + return !buf->failed; +} +static FcBool +interpret_percent (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf) +{ + int width, start; + FcBool ret; + + if (!expect_char (c, '%')) + return FcFalse; + + if (consume_char (c, '%')) /* "%%" */ + { + FcStrBufChar (buf, '%'); + return FcTrue; + } + + /* parse an optional width specifier */ + width = strtol ((const char *) c->format, (char **) &c->format, 10); + + if (!expect_char (c, '{')) + return FcFalse; + + start = buf->len; + + switch (*c->format) { + case '=': ret = interpret_builtin (c, pat, buf); break; + case '{': ret = interpret_subexpr (c, pat, buf); break; + case '+': ret = interpret_filter_in (c, pat, buf); break; + case '-': ret = interpret_filter_out (c, pat, buf); break; + case '?': ret = interpret_cond (c, pat, buf); break; + case '#': ret = interpret_count (c, pat, buf); break; + case '[': ret = interpret_enumerate (c, pat, buf); break; + default: ret = interpret_simple (c, pat, buf); break; + } + + return ret && + maybe_interpret_converts (c, buf, start) && + align_to_width (buf, start, width) && + expect_char (c, '}'); +} + +static FcBool +interpret_expr (FcFormatContext *c, + FcPattern *pat, + FcStrBuf *buf, + FcChar8 term) +{ + while (*c->format && *c->format != term) + { + switch (*c->format) + { + case '\\': + c->format++; /* skip over '\\' */ + if (*c->format) + FcStrBufChar (buf, escaped_char (*c->format++)); + continue; + case '%': + if (!interpret_percent (c, pat, buf)) + return FcFalse; + continue; + } + FcStrBufChar (buf, *c->format++); + } + return FcTrue; +} + +static FcBool +FcPatternFormatToBuf (FcPattern *pat, + const FcChar8 *format, + FcStrBuf *buf) +{ + FcFormatContext c; + FcChar8 word_static[1024]; + FcBool ret; + + if (!FcFormatContextInit (&c, format, word_static, sizeof (word_static))) + return FcFalse; + + ret = interpret_expr (&c, pat, buf, '\0'); + + FcFormatContextDone (&c); + + return ret; +} + +FcChar8 * +FcPatternFormat (FcPattern *pat, + const FcChar8 *format) +{ + FcStrBuf buf; + FcChar8 buf_static[8192 - 1024]; + FcBool ret; + + FcStrBufInit (&buf, buf_static, sizeof (buf_static)); + + ret = FcPatternFormatToBuf (pat, format, &buf); + + if (ret) + return FcStrBufDone (&buf); + else + { + FcStrBufDestroy (&buf); + return NULL; + } +} + +#define __fcformat__ +#include "fcaliastail.h" +#undef __fcformat__ diff --git a/fontconfig/src/fcfreetype.c b/fontconfig/src/fcfreetype.c index 78a37b0a9..d37af2d0e 100644 --- a/fontconfig/src/fcfreetype.c +++ b/fontconfig/src/fcfreetype.c @@ -1,3005 +1,3005 @@ -/* - * fontconfig/src/fcfreetype.c - * - * Copyright © 2001 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -/* - Copyright © 2002-2003 by Juliusz Chroboczek - - Permission is hereby granted, free of charge, to any person obtaining a copy - of this software and associated documentation files (the "Software"), to deal - in the Software without restriction, including without limitation the rights - to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - copies of the Software, and to permit persons to whom the Software is - furnished to do so, subject to the following conditions: - - The above copyright notice and this permission notice shall be included in - all copies or substantial portions of the Software. - - THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - THE SOFTWARE. -*/ - -#include "fcint.h" -#include "fcftint.h" -#include -#include -#include -#include -#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 -#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) "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 +#include +#include +#include +#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 +#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) "num_fixed_sizes == 1) + { + BDF_PropertyRec prop; + int rc; + + rc = FT_Get_BDF_Property (face, "PIXEL_SIZE", &prop); + if (rc == 0 && prop.type == BDF_PROPERTY_TYPE_INTEGER) + return (double) prop.u.integer; + } +#endif +#if HAVE_FT_BITMAP_SIZE_Y_PPEM + return (double) face->available_sizes[i].y_ppem / 64.0; +#else + return (double) face->available_sizes[i].height; +#endif +} + +static FcBool +FcStringInPatternElement (FcPattern *pat, const char *elt, FcChar8 *string) +{ + int e; + FcChar8 *old; + for (e = 0; FcPatternGetString (pat, elt, e, &old) == FcResultMatch; e++) + if (!FcStrCmpIgnoreBlanksAndCase (old, string)) + { + return FcTrue; + } + return FcFalse; +} + +static const FT_UShort platform_order[] = { + TT_PLATFORM_MICROSOFT, + TT_PLATFORM_APPLE_UNICODE, + TT_PLATFORM_MACINTOSH, +}; +#define NUM_PLATFORM_ORDER (sizeof (platform_order) / sizeof (platform_order[0])) + +static const FT_UShort nameid_order[] = { +#ifdef TT_NAME_ID_WWS_FAMILY + TT_NAME_ID_WWS_FAMILY, +#endif + TT_NAME_ID_PREFERRED_FAMILY, + TT_NAME_ID_FONT_FAMILY, + TT_NAME_ID_MAC_FULL_NAME, + TT_NAME_ID_FULL_NAME, +#ifdef TT_NAME_ID_WWS_SUBFAMILY + TT_NAME_ID_WWS_SUBFAMILY, +#endif + TT_NAME_ID_PREFERRED_SUBFAMILY, + TT_NAME_ID_FONT_SUBFAMILY, + TT_NAME_ID_TRADEMARK, + TT_NAME_ID_MANUFACTURER, +}; + +#define NUM_NAMEID_ORDER (sizeof (nameid_order) / sizeof (nameid_order[0])) +FcPattern * +FcFreeTypeQueryFace (const FT_Face face, + const FcChar8 *file, + int id, + FcBlanks *blanks) +{ + FcPattern *pat; + int slant = -1; + int weight = -1; + int width = -1; + FcBool decorative = FcFalse; + int i; + FcCharSet *cs; + FcLangSet *ls; +#if 0 + FcChar8 *family = 0; +#endif + FcChar8 *complex_; + const FcChar8 *foundry = 0; + int spacing; + TT_OS2 *os2; +#if HAVE_FT_GET_PS_FONT_INFO + PS_FontInfoRec psfontinfo; +#endif +#if HAVE_FT_GET_BDF_PROPERTY + BDF_PropertyRec prop; +#endif + TT_Header *head; + const FcChar8 *exclusiveLang = 0; + FT_SfntName sname; + FT_UInt snamei, snamec; + + int nfamily = 0; + int nfamily_lang = 0; + int nstyle = 0; + int nstyle_lang = 0; + int nfullname = 0; + int nfullname_lang = 0; + int p, platform; + int n, nameid; + + FcChar8 *style = 0; + int st; + + pat = FcPatternCreate (); + if (!pat) + goto bail0; + + if (!FcPatternAddBool (pat, FC_OUTLINE, + (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0)) + goto bail1; + + if (!FcPatternAddBool (pat, FC_SCALABLE, + (face->face_flags & FT_FACE_FLAG_SCALABLE) != 0)) + goto bail1; + + + /* + * Get the OS/2 table + */ + os2 = (TT_OS2 *) FT_Get_Sfnt_Table (face, ft_sfnt_os2); + + /* + * Look first in the OS/2 table for the foundry, if + * not found here, the various notices will be searched for + * that information, either from the sfnt name tables or + * the Postscript FontInfo dictionary. Finally, the + * BDF properties will queried. + */ + + if (os2 && os2->version >= 0x0001 && os2->version != 0xffff) + foundry = FcVendorFoundry(os2->achVendID); + + if (FcDebug () & FC_DBG_SCANV) + printf ("\n"); + /* + * Grub through the name table looking for family + * and style names. FreeType makes quite a hash + * of them + */ + snamec = FT_Get_Sfnt_Name_Count (face); + for (p = 0; p <= NUM_PLATFORM_ORDER; p++) + { + if (p < NUM_PLATFORM_ORDER) + platform = platform_order[p]; + else + platform = 0xffff; + + /* + * Order nameids so preferred names appear first + * in the resulting list + */ + for (n = 0; n < NUM_NAMEID_ORDER; n++) + { + nameid = nameid_order[n]; + + for (snamei = 0; snamei < snamec; snamei++) + { + FcChar8 *utf8; + const FcChar8 *lang; + const char *elt = 0, *eltlang = 0; + int *np = 0, *nlangp = 0; + + if (FT_Get_Sfnt_Name (face, snamei, &sname) != 0) + continue; + if (sname.name_id != nameid) + continue; + + /* + * Sort platforms in preference order, accepting + * all other platforms last + */ + if (p < NUM_PLATFORM_ORDER) + { + if (sname.platform_id != platform) + continue; + } + else + { + int sp; + + for (sp = 0; sp < NUM_PLATFORM_ORDER; sp++) + if (sname.platform_id == platform_order[sp]) + break; + if (sp != NUM_PLATFORM_ORDER) + continue; + } + utf8 = FcSfntNameTranscode (&sname); + lang = FcSfntNameLanguage (&sname); + + if (!utf8) + continue; + + switch (sname.name_id) { +#ifdef TT_NAME_ID_WWS_FAMILY + case TT_NAME_ID_WWS_FAMILY: +#endif + case TT_NAME_ID_PREFERRED_FAMILY: + case TT_NAME_ID_FONT_FAMILY: +#if 0 + case TT_NAME_ID_PS_NAME: + case TT_NAME_ID_UNIQUE_ID: +#endif + if (FcDebug () & FC_DBG_SCANV) + printf ("found family (n %2d p %d e %d l 0x%04x) %s\n", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id, + utf8); + + elt = FC_FAMILY; + eltlang = FC_FAMILYLANG; + np = &nfamily; + nlangp = &nfamily_lang; + break; + case TT_NAME_ID_MAC_FULL_NAME: + case TT_NAME_ID_FULL_NAME: + if (FcDebug () & FC_DBG_SCANV) + printf ("found full (n %2d p %d e %d l 0x%04x) %s\n", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id, + utf8); + + elt = FC_FULLNAME; + eltlang = FC_FULLNAMELANG; + np = &nfullname; + nlangp = &nfullname_lang; + break; +#ifdef TT_NAME_ID_WWS_SUBFAMILY + case TT_NAME_ID_WWS_SUBFAMILY: +#endif + case TT_NAME_ID_PREFERRED_SUBFAMILY: + case TT_NAME_ID_FONT_SUBFAMILY: + if (FcDebug () & FC_DBG_SCANV) + printf ("found style (n %2d p %d e %d l 0x%04x) %s\n", + sname.name_id, sname.platform_id, + sname.encoding_id, sname.language_id, + utf8); + + elt = FC_STYLE; + eltlang = FC_STYLELANG; + np = &nstyle; + nlangp = &nstyle_lang; + break; + case TT_NAME_ID_TRADEMARK: + case TT_NAME_ID_MANUFACTURER: + /* If the foundry wasn't found in the OS/2 table, look here */ + if(!foundry) + foundry = FcNoticeFoundry((FT_String *) utf8); + break; + } + if (elt) + { + if (FcStringInPatternElement (pat, elt, utf8)) + { + free (utf8); + continue; + } + + /* add new element */ + if (!FcPatternAddString (pat, elt, utf8)) + { + free (utf8); + goto bail1; + } + free (utf8); + if (lang) + { + /* pad lang list with 'xx' to line up with elt */ + while (*nlangp < *np) + { + if (!FcPatternAddString (pat, eltlang, (FcChar8 *) "xx")) + goto bail1; + ++*nlangp; + } + if (!FcPatternAddString (pat, eltlang, lang)) + goto bail1; + ++*nlangp; + } + ++*np; + } + else + free (utf8); + } + } + } + + if (!nfamily && face->family_name && + FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->family_name, (FcChar8 *) "") != 0) + { + if (FcDebug () & FC_DBG_SCANV) + printf ("using FreeType family \"%s\"\n", face->family_name); + if (!FcPatternAddString (pat, FC_FAMILY, (FcChar8 *) face->family_name)) + goto bail1; + ++nfamily; + } + + if (!nstyle && face->style_name && + FcStrCmpIgnoreBlanksAndCase ((FcChar8 *) face->style_name, (FcChar8 *) "") != 0) + { + if (FcDebug () & FC_DBG_SCANV) + printf ("using FreeType style \"%s\"\n", face->style_name); + if (!FcPatternAddString (pat, FC_STYLE, (FcChar8 *) face->style_name)) + goto bail1; + ++nstyle; + } + + if (!nfamily) + { + FcChar8 *start, *end; + FcChar8 *family; + + start = (FcChar8 *) strrchr ((char *) file, '/'); + if (start) + start++; + else + start = (FcChar8 *) file; + end = (FcChar8 *) strrchr ((char *) start, '.'); + if (!end) + end = start + strlen ((char *) start); + /* freed below */ + family = malloc (end - start + 1); + strncpy ((char *) family, (char *) start, end - start); + family[end - start] = '\0'; + if (FcDebug () & FC_DBG_SCANV) + printf ("using filename for family %s\n", family); + if (!FcPatternAddString (pat, FC_FAMILY, family)) + { + free (family); + goto bail1; + } + free (family); + ++nfamily; + } + + if (!FcPatternAddString (pat, FC_FILE, file)) + goto bail1; + + if (!FcPatternAddInteger (pat, FC_INDEX, id)) + goto bail1; + +#if 0 + /* + * don't even try this -- CJK 'monospace' fonts are really + * dual width, and most other fonts don't bother to set + * the attribute. Sigh. + */ + if ((face->face_flags & FT_FACE_FLAG_FIXED_WIDTH) != 0) + if (!FcPatternAddInteger (pat, FC_SPACING, FC_MONO)) + goto bail1; +#endif + + /* + * Find the font revision (if available) + */ + head = (TT_Header *) FT_Get_Sfnt_Table (face, ft_sfnt_head); + if (head) + { + if (!FcPatternAddInteger (pat, FC_FONTVERSION, head->Font_Revision)) + goto bail1; + } + else + { + if (!FcPatternAddInteger (pat, FC_FONTVERSION, 0)) + goto bail1; + } + + if (os2 && os2->version >= 0x0001 && os2->version != 0xffff) + { + for (i = 0; i < NUM_CODE_PAGE_RANGE; i++) + { + FT_ULong bits; + int bit; + if (FcCodePageRange[i].bit < 32) + { + bits = os2->ulCodePageRange1; + bit = FcCodePageRange[i].bit; + } + else + { + bits = os2->ulCodePageRange2; + bit = FcCodePageRange[i].bit - 32; + } + if (bits & (1 << bit)) + { + /* + * If the font advertises support for multiple + * "exclusive" languages, then include support + * for any language found to have coverage + */ + if (exclusiveLang) + { + exclusiveLang = 0; + break; + } + exclusiveLang = FcCodePageRange[i].lang; + } + } + } + + if (os2 && os2->version != 0xffff) + { + if (os2->usWeightClass == 0) + ; + else if (os2->usWeightClass < 150) + weight = FC_WEIGHT_THIN; + else if (os2->usWeightClass < 250) + weight = FC_WEIGHT_EXTRALIGHT; + else if (os2->usWeightClass < 350) + weight = FC_WEIGHT_LIGHT; + else if (os2->usWeightClass < 450) + weight = FC_WEIGHT_REGULAR; + else if (os2->usWeightClass < 550) + weight = FC_WEIGHT_MEDIUM; + else if (os2->usWeightClass < 650) + weight = FC_WEIGHT_SEMIBOLD; + else if (os2->usWeightClass < 750) + weight = FC_WEIGHT_BOLD; + else if (os2->usWeightClass < 850) + weight = FC_WEIGHT_EXTRABOLD; + else if (os2->usWeightClass < 925) + weight = FC_WEIGHT_BLACK; + else if (os2->usWeightClass < 1000) + weight = FC_WEIGHT_EXTRABLACK; + if ((FcDebug() & FC_DBG_SCANV) && weight != -1) + printf ("\tos2 weight class %d maps to weight %d\n", + os2->usWeightClass, weight); + + switch (os2->usWidthClass) { + case 1: width = FC_WIDTH_ULTRACONDENSED; break; + case 2: width = FC_WIDTH_EXTRACONDENSED; break; + case 3: width = FC_WIDTH_CONDENSED; break; + case 4: width = FC_WIDTH_SEMICONDENSED; break; + case 5: width = FC_WIDTH_NORMAL; break; + case 6: width = FC_WIDTH_SEMIEXPANDED; break; + case 7: width = FC_WIDTH_EXPANDED; break; + case 8: width = FC_WIDTH_EXTRAEXPANDED; break; + case 9: width = FC_WIDTH_ULTRAEXPANDED; break; + } + if ((FcDebug() & FC_DBG_SCANV) && width != -1) + printf ("\tos2 width class %d maps to width %d\n", + os2->usWidthClass, width); + } + if (os2 && (complex_ = FcFontCapabilities(face))) + { + if (!FcPatternAddString (pat, FC_CAPABILITY, complex_)) + { + free (complex_); + goto bail1; + } + free (complex_); + } + + /* + * Type 1: Check for FontInfo dictionary information + * Code from g2@magestudios.net (Gerard Escalante) + */ + +#if HAVE_FT_GET_PS_FONT_INFO + if (FT_Get_PS_Font_Info(face, &psfontinfo) == 0) + { + if (weight == -1 && psfontinfo.weight) + { + weight = FcIsWeight ((FcChar8 *) psfontinfo.weight); + if (FcDebug() & FC_DBG_SCANV) + printf ("\tType1 weight %s maps to %d\n", + psfontinfo.weight, weight); + } + +#if 0 + /* + * Don't bother with italic_angle; FreeType already extracts that + * information for us and sticks it into style_flags + */ + if (psfontinfo.italic_angle) + slant = FC_SLANT_ITALIC; + else + slant = FC_SLANT_ROMAN; +#endif + + if(!foundry) + foundry = FcNoticeFoundry(psfontinfo.notice); + } +#endif /* HAVE_FT_GET_PS_FONT_INFO */ + +#if HAVE_FT_GET_BDF_PROPERTY + /* + * Finally, look for a FOUNDRY BDF property if no other + * mechanism has managed to locate a foundry + */ + + if (!foundry) + { + int rc; + rc = FT_Get_BDF_Property(face, "FOUNDRY", &prop); + if(rc == 0 && prop.type == BDF_PROPERTY_TYPE_ATOM) + foundry = (FcChar8 *) prop.u.atom; + } + + if (width == -1) + { + if (FT_Get_BDF_Property(face, "RELATIVE_SETWIDTH", &prop) == 0 && + (prop.type == BDF_PROPERTY_TYPE_INTEGER || + prop.type == BDF_PROPERTY_TYPE_CARDINAL)) + { + FT_Int32 value; + + if (prop.type == BDF_PROPERTY_TYPE_INTEGER) + value = prop.u.integer; + else + value = (FT_Int32) prop.u.cardinal; + switch ((value + 5) / 10) { + case 1: width = FC_WIDTH_ULTRACONDENSED; break; + case 2: width = FC_WIDTH_EXTRACONDENSED; break; + case 3: width = FC_WIDTH_CONDENSED; break; + case 4: width = FC_WIDTH_SEMICONDENSED; break; + case 5: width = FC_WIDTH_NORMAL; break; + case 6: width = FC_WIDTH_SEMIEXPANDED; break; + case 7: width = FC_WIDTH_EXPANDED; break; + case 8: width = FC_WIDTH_EXTRAEXPANDED; break; + case 9: width = FC_WIDTH_ULTRAEXPANDED; break; + } + } + if (width == -1 && + FT_Get_BDF_Property (face, "SETWIDTH_NAME", &prop) == 0 && + prop.type == BDF_PROPERTY_TYPE_ATOM) + { + width = FcIsWidth ((FcChar8 *) prop.u.atom); + if (FcDebug () & FC_DBG_SCANV) + printf ("\tsetwidth %s maps to %d\n", prop.u.atom, width); + } + } +#endif + + /* + * Look for weight, width and slant names in the style value + */ + for (st = 0; FcPatternGetString (pat, FC_STYLE, st, &style) == FcResultMatch; st++) + { + if (weight == -1) + { + weight = FcContainsWeight (style); + if (FcDebug() & FC_DBG_SCANV) + printf ("\tStyle %s maps to weight %d\n", style, weight); + } + if (width == -1) + { + width = FcContainsWidth (style); + if (FcDebug() & FC_DBG_SCANV) + printf ("\tStyle %s maps to width %d\n", style, width); + } + if (slant == -1) + { + slant = FcContainsSlant (style); + if (FcDebug() & FC_DBG_SCANV) + printf ("\tStyle %s maps to slant %d\n", style, slant); + } + if (decorative == FcFalse) + { + decorative = FcContainsDecorative (style) > 0; + if (FcDebug() & FC_DBG_SCANV) + printf ("\tStyle %s maps to decorative %d\n", style, decorative); + } + } + /* + * Pull default values from the FreeType flags if more + * specific values not found above + */ + if (slant == -1) + { + slant = FC_SLANT_ROMAN; + if (face->style_flags & FT_STYLE_FLAG_ITALIC) + slant = FC_SLANT_ITALIC; + } + + if (weight == -1) + { + weight = FC_WEIGHT_MEDIUM; + if (face->style_flags & FT_STYLE_FLAG_BOLD) + weight = FC_WEIGHT_BOLD; + } + + if (width == -1) + width = FC_WIDTH_NORMAL; + + if (foundry == 0) + foundry = (FcChar8 *) "unknown"; + + if (!FcPatternAddInteger (pat, FC_SLANT, slant)) + goto bail1; + + if (!FcPatternAddInteger (pat, FC_WEIGHT, weight)) + goto bail1; + + if (!FcPatternAddInteger (pat, FC_WIDTH, width)) + goto bail1; + + if (!FcPatternAddString (pat, FC_FOUNDRY, foundry)) + goto bail1; + + if (!FcPatternAddBool (pat, FC_DECORATIVE, decorative)) + goto bail1; + + /* + * Compute the unicode coverage for the font + */ + cs = FcFreeTypeCharSetAndSpacing (face, blanks, &spacing); + if (!cs) + goto bail1; + +#if HAVE_FT_GET_BDF_PROPERTY + /* For PCF fonts, override the computed spacing with the one from + the property */ + if(FT_Get_BDF_Property(face, "SPACING", &prop) == 0 && + prop.type == BDF_PROPERTY_TYPE_ATOM) { + if(!strcmp(prop.u.atom, "c") || !strcmp(prop.u.atom, "C")) + spacing = FC_CHARCELL; + else if(!strcmp(prop.u.atom, "m") || !strcmp(prop.u.atom, "M")) + spacing = FC_MONO; + else if(!strcmp(prop.u.atom, "p") || !strcmp(prop.u.atom, "P")) + spacing = FC_PROPORTIONAL; + } +#endif + + /* + * Skip over PCF fonts that have no encoded characters; they're + * usually just Unicode fonts transcoded to some legacy encoding + * FT forces us to approximate whether a font is a PCF font + * or not by whether it has any BDF properties. Try PIXEL_SIZE; + * I don't know how to get a list of BDF properties on the font. -PL + */ + if (FcCharSetCount (cs) == 0) + { +#if HAVE_FT_GET_BDF_PROPERTY + if(FT_Get_BDF_Property(face, "PIXEL_SIZE", &prop) == 0) + goto bail2; +#endif + } + + if (!FcPatternAddCharSet (pat, FC_CHARSET, cs)) + goto bail2; + + ls = FcFreeTypeLangSet (cs, exclusiveLang); + if (!ls) + goto bail2; + + if (!FcPatternAddLangSet (pat, FC_LANG, ls)) + { + FcLangSetDestroy (ls); + goto bail2; + } + + FcLangSetDestroy (ls); + + if (spacing != FC_PROPORTIONAL) + if (!FcPatternAddInteger (pat, FC_SPACING, spacing)) + goto bail2; + + if (!(face->face_flags & FT_FACE_FLAG_SCALABLE)) + { + for (i = 0; i < face->num_fixed_sizes; i++) + if (!FcPatternAddDouble (pat, FC_PIXEL_SIZE, + FcGetPixelSize (face, i))) + goto bail2; + if (!FcPatternAddBool (pat, FC_ANTIALIAS, FcFalse)) + goto bail2; + } +#if HAVE_FT_GET_X11_FONT_FORMAT + /* + * Use the (not well documented or supported) X-specific function + * from FreeType to figure out the font format + */ + { + const char *font_format = FT_Get_X11_Font_Format (face); + if (font_format) + FcPatternAddString (pat, FC_FONTFORMAT, (FcChar8 *) font_format); + } +#endif + + /* + * Drop our reference to the charset + */ + FcCharSetDestroy (cs); + + return pat; + +bail2: + FcCharSetDestroy (cs); +bail1: + FcPatternDestroy (pat); +bail0: + return NULL; +} + +FcPattern * +FcFreeTypeQuery(const FcChar8 *file, + int id, + FcBlanks *blanks, + int *count) +{ + FT_Face face; + FT_Library ftLibrary; + FcPattern *pat = NULL; + + if (FT_Init_FreeType (&ftLibrary)) + return NULL; + + if (FT_New_Face (ftLibrary, (char *) file, id, &face)) + goto bail; + + *count = face->num_faces; + + pat = FcFreeTypeQueryFace (face, file, id, blanks); + + FT_Done_Face (face); +bail: + FT_Done_FreeType (ftLibrary); + return pat; +} + +/* + * For our purposes, this approximation is sufficient + */ +#if !HAVE_FT_GET_NEXT_CHAR +#define FT_Get_Next_Char(face, ucs4, gi) ((ucs4) >= 0xffffff ? \ + (*(gi) = 0), 0 : \ + (*(gi) = 1), (ucs4) + 1) +#warning "No FT_Get_Next_Char: Please install freetype version 2.1.0 or newer" +#endif + +typedef struct _FcCharEnt { + FcChar16 bmp; + unsigned char encode; +} FcCharEnt; + +struct _FcCharMap { + const FcCharEnt *ent; + int nent; +}; + +typedef struct _FcFontDecode { + FT_Encoding encoding; + const FcCharMap *map; + FcChar32 max; +} FcFontDecode; + +static const FcCharEnt AppleRomanEnt[] = { + { 0x0020, 0x20 }, /* SPACE */ + { 0x0021, 0x21 }, /* EXCLAMATION MARK */ + { 0x0022, 0x22 }, /* QUOTATION MARK */ + { 0x0023, 0x23 }, /* NUMBER SIGN */ + { 0x0024, 0x24 }, /* DOLLAR SIGN */ + { 0x0025, 0x25 }, /* PERCENT SIGN */ + { 0x0026, 0x26 }, /* AMPERSAND */ + { 0x0027, 0x27 }, /* APOSTROPHE */ + { 0x0028, 0x28 }, /* LEFT PARENTHESIS */ + { 0x0029, 0x29 }, /* RIGHT PARENTHESIS */ + { 0x002A, 0x2A }, /* ASTERISK */ + { 0x002B, 0x2B }, /* PLUS SIGN */ + { 0x002C, 0x2C }, /* COMMA */ + { 0x002D, 0x2D }, /* HYPHEN-MINUS */ + { 0x002E, 0x2E }, /* FULL STOP */ + { 0x002F, 0x2F }, /* SOLIDUS */ + { 0x0030, 0x30 }, /* DIGIT ZERO */ + { 0x0031, 0x31 }, /* DIGIT ONE */ + { 0x0032, 0x32 }, /* DIGIT TWO */ + { 0x0033, 0x33 }, /* DIGIT THREE */ + { 0x0034, 0x34 }, /* DIGIT FOUR */ + { 0x0035, 0x35 }, /* DIGIT FIVE */ + { 0x0036, 0x36 }, /* DIGIT SIX */ + { 0x0037, 0x37 }, /* DIGIT SEVEN */ + { 0x0038, 0x38 }, /* DIGIT EIGHT */ + { 0x0039, 0x39 }, /* DIGIT NINE */ + { 0x003A, 0x3A }, /* COLON */ + { 0x003B, 0x3B }, /* SEMICOLON */ + { 0x003C, 0x3C }, /* LESS-THAN SIGN */ + { 0x003D, 0x3D }, /* EQUALS SIGN */ + { 0x003E, 0x3E }, /* GREATER-THAN SIGN */ + { 0x003F, 0x3F }, /* QUESTION MARK */ + { 0x0040, 0x40 }, /* COMMERCIAL AT */ + { 0x0041, 0x41 }, /* LATIN CAPITAL LETTER A */ + { 0x0042, 0x42 }, /* LATIN CAPITAL LETTER B */ + { 0x0043, 0x43 }, /* LATIN CAPITAL LETTER C */ + { 0x0044, 0x44 }, /* LATIN CAPITAL LETTER D */ + { 0x0045, 0x45 }, /* LATIN CAPITAL LETTER E */ + { 0x0046, 0x46 }, /* LATIN CAPITAL LETTER F */ + { 0x0047, 0x47 }, /* LATIN CAPITAL LETTER G */ + { 0x0048, 0x48 }, /* LATIN CAPITAL LETTER H */ + { 0x0049, 0x49 }, /* LATIN CAPITAL LETTER I */ + { 0x004A, 0x4A }, /* LATIN CAPITAL LETTER J */ + { 0x004B, 0x4B }, /* LATIN CAPITAL LETTER K */ + { 0x004C, 0x4C }, /* LATIN CAPITAL LETTER L */ + { 0x004D, 0x4D }, /* LATIN CAPITAL LETTER M */ + { 0x004E, 0x4E }, /* LATIN CAPITAL LETTER N */ + { 0x004F, 0x4F }, /* LATIN CAPITAL LETTER O */ + { 0x0050, 0x50 }, /* LATIN CAPITAL LETTER P */ + { 0x0051, 0x51 }, /* LATIN CAPITAL LETTER Q */ + { 0x0052, 0x52 }, /* LATIN CAPITAL LETTER R */ + { 0x0053, 0x53 }, /* LATIN CAPITAL LETTER S */ + { 0x0054, 0x54 }, /* LATIN CAPITAL LETTER T */ + { 0x0055, 0x55 }, /* LATIN CAPITAL LETTER U */ + { 0x0056, 0x56 }, /* LATIN CAPITAL LETTER V */ + { 0x0057, 0x57 }, /* LATIN CAPITAL LETTER W */ + { 0x0058, 0x58 }, /* LATIN CAPITAL LETTER X */ + { 0x0059, 0x59 }, /* LATIN CAPITAL LETTER Y */ + { 0x005A, 0x5A }, /* LATIN CAPITAL LETTER Z */ + { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET */ + { 0x005C, 0x5C }, /* REVERSE SOLIDUS */ + { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET */ + { 0x005E, 0x5E }, /* CIRCUMFLEX ACCENT */ + { 0x005F, 0x5F }, /* LOW LINE */ + { 0x0060, 0x60 }, /* GRAVE ACCENT */ + { 0x0061, 0x61 }, /* LATIN SMALL LETTER A */ + { 0x0062, 0x62 }, /* LATIN SMALL LETTER B */ + { 0x0063, 0x63 }, /* LATIN SMALL LETTER C */ + { 0x0064, 0x64 }, /* LATIN SMALL LETTER D */ + { 0x0065, 0x65 }, /* LATIN SMALL LETTER E */ + { 0x0066, 0x66 }, /* LATIN SMALL LETTER F */ + { 0x0067, 0x67 }, /* LATIN SMALL LETTER G */ + { 0x0068, 0x68 }, /* LATIN SMALL LETTER H */ + { 0x0069, 0x69 }, /* LATIN SMALL LETTER I */ + { 0x006A, 0x6A }, /* LATIN SMALL LETTER J */ + { 0x006B, 0x6B }, /* LATIN SMALL LETTER K */ + { 0x006C, 0x6C }, /* LATIN SMALL LETTER L */ + { 0x006D, 0x6D }, /* LATIN SMALL LETTER M */ + { 0x006E, 0x6E }, /* LATIN SMALL LETTER N */ + { 0x006F, 0x6F }, /* LATIN SMALL LETTER O */ + { 0x0070, 0x70 }, /* LATIN SMALL LETTER P */ + { 0x0071, 0x71 }, /* LATIN SMALL LETTER Q */ + { 0x0072, 0x72 }, /* LATIN SMALL LETTER R */ + { 0x0073, 0x73 }, /* LATIN SMALL LETTER S */ + { 0x0074, 0x74 }, /* LATIN SMALL LETTER T */ + { 0x0075, 0x75 }, /* LATIN SMALL LETTER U */ + { 0x0076, 0x76 }, /* LATIN SMALL LETTER V */ + { 0x0077, 0x77 }, /* LATIN SMALL LETTER W */ + { 0x0078, 0x78 }, /* LATIN SMALL LETTER X */ + { 0x0079, 0x79 }, /* LATIN SMALL LETTER Y */ + { 0x007A, 0x7A }, /* LATIN SMALL LETTER Z */ + { 0x007B, 0x7B }, /* LEFT CURLY BRACKET */ + { 0x007C, 0x7C }, /* VERTICAL LINE */ + { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET */ + { 0x007E, 0x7E }, /* TILDE */ + { 0x00A0, 0xCA }, /* NO-BREAK SPACE */ + { 0x00A1, 0xC1 }, /* INVERTED EXCLAMATION MARK */ + { 0x00A2, 0xA2 }, /* CENT SIGN */ + { 0x00A3, 0xA3 }, /* POUND SIGN */ + { 0x00A5, 0xB4 }, /* YEN SIGN */ + { 0x00A7, 0xA4 }, /* SECTION SIGN */ + { 0x00A8, 0xAC }, /* DIAERESIS */ + { 0x00A9, 0xA9 }, /* COPYRIGHT SIGN */ + { 0x00AA, 0xBB }, /* FEMININE ORDINAL INDICATOR */ + { 0x00AB, 0xC7 }, /* LEFT-POINTING DOUBLE ANGLE QUOTATION MARK */ + { 0x00AC, 0xC2 }, /* NOT SIGN */ + { 0x00AE, 0xA8 }, /* REGISTERED SIGN */ + { 0x00AF, 0xF8 }, /* MACRON */ + { 0x00B0, 0xA1 }, /* DEGREE SIGN */ + { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN */ + { 0x00B4, 0xAB }, /* ACUTE ACCENT */ + { 0x00B5, 0xB5 }, /* MICRO SIGN */ + { 0x00B6, 0xA6 }, /* PILCROW SIGN */ + { 0x00B7, 0xE1 }, /* MIDDLE DOT */ + { 0x00B8, 0xFC }, /* CEDILLA */ + { 0x00BA, 0xBC }, /* MASCULINE ORDINAL INDICATOR */ + { 0x00BB, 0xC8 }, /* RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK */ + { 0x00BF, 0xC0 }, /* INVERTED QUESTION MARK */ + { 0x00C0, 0xCB }, /* LATIN CAPITAL LETTER A WITH GRAVE */ + { 0x00C1, 0xE7 }, /* LATIN CAPITAL LETTER A WITH ACUTE */ + { 0x00C2, 0xE5 }, /* LATIN CAPITAL LETTER A WITH CIRCUMFLEX */ + { 0x00C3, 0xCC }, /* LATIN CAPITAL LETTER A WITH TILDE */ + { 0x00C4, 0x80 }, /* LATIN CAPITAL LETTER A WITH DIAERESIS */ + { 0x00C5, 0x81 }, /* LATIN CAPITAL LETTER A WITH RING ABOVE */ + { 0x00C6, 0xAE }, /* LATIN CAPITAL LETTER AE */ + { 0x00C7, 0x82 }, /* LATIN CAPITAL LETTER C WITH CEDILLA */ + { 0x00C8, 0xE9 }, /* LATIN CAPITAL LETTER E WITH GRAVE */ + { 0x00C9, 0x83 }, /* LATIN CAPITAL LETTER E WITH ACUTE */ + { 0x00CA, 0xE6 }, /* LATIN CAPITAL LETTER E WITH CIRCUMFLEX */ + { 0x00CB, 0xE8 }, /* LATIN CAPITAL LETTER E WITH DIAERESIS */ + { 0x00CC, 0xED }, /* LATIN CAPITAL LETTER I WITH GRAVE */ + { 0x00CD, 0xEA }, /* LATIN CAPITAL LETTER I WITH ACUTE */ + { 0x00CE, 0xEB }, /* LATIN CAPITAL LETTER I WITH CIRCUMFLEX */ + { 0x00CF, 0xEC }, /* LATIN CAPITAL LETTER I WITH DIAERESIS */ + { 0x00D1, 0x84 }, /* LATIN CAPITAL LETTER N WITH TILDE */ + { 0x00D2, 0xF1 }, /* LATIN CAPITAL LETTER O WITH GRAVE */ + { 0x00D3, 0xEE }, /* LATIN CAPITAL LETTER O WITH ACUTE */ + { 0x00D4, 0xEF }, /* LATIN CAPITAL LETTER O WITH CIRCUMFLEX */ + { 0x00D5, 0xCD }, /* LATIN CAPITAL LETTER O WITH TILDE */ + { 0x00D6, 0x85 }, /* LATIN CAPITAL LETTER O WITH DIAERESIS */ + { 0x00D8, 0xAF }, /* LATIN CAPITAL LETTER O WITH STROKE */ + { 0x00D9, 0xF4 }, /* LATIN CAPITAL LETTER U WITH GRAVE */ + { 0x00DA, 0xF2 }, /* LATIN CAPITAL LETTER U WITH ACUTE */ + { 0x00DB, 0xF3 }, /* LATIN CAPITAL LETTER U WITH CIRCUMFLEX */ + { 0x00DC, 0x86 }, /* LATIN CAPITAL LETTER U WITH DIAERESIS */ + { 0x00DF, 0xA7 }, /* LATIN SMALL LETTER SHARP S */ + { 0x00E0, 0x88 }, /* LATIN SMALL LETTER A WITH GRAVE */ + { 0x00E1, 0x87 }, /* LATIN SMALL LETTER A WITH ACUTE */ + { 0x00E2, 0x89 }, /* LATIN SMALL LETTER A WITH CIRCUMFLEX */ + { 0x00E3, 0x8B }, /* LATIN SMALL LETTER A WITH TILDE */ + { 0x00E4, 0x8A }, /* LATIN SMALL LETTER A WITH DIAERESIS */ + { 0x00E5, 0x8C }, /* LATIN SMALL LETTER A WITH RING ABOVE */ + { 0x00E6, 0xBE }, /* LATIN SMALL LETTER AE */ + { 0x00E7, 0x8D }, /* LATIN SMALL LETTER C WITH CEDILLA */ + { 0x00E8, 0x8F }, /* LATIN SMALL LETTER E WITH GRAVE */ + { 0x00E9, 0x8E }, /* LATIN SMALL LETTER E WITH ACUTE */ + { 0x00EA, 0x90 }, /* LATIN SMALL LETTER E WITH CIRCUMFLEX */ + { 0x00EB, 0x91 }, /* LATIN SMALL LETTER E WITH DIAERESIS */ + { 0x00EC, 0x93 }, /* LATIN SMALL LETTER I WITH GRAVE */ + { 0x00ED, 0x92 }, /* LATIN SMALL LETTER I WITH ACUTE */ + { 0x00EE, 0x94 }, /* LATIN SMALL LETTER I WITH CIRCUMFLEX */ + { 0x00EF, 0x95 }, /* LATIN SMALL LETTER I WITH DIAERESIS */ + { 0x00F1, 0x96 }, /* LATIN SMALL LETTER N WITH TILDE */ + { 0x00F2, 0x98 }, /* LATIN SMALL LETTER O WITH GRAVE */ + { 0x00F3, 0x97 }, /* LATIN SMALL LETTER O WITH ACUTE */ + { 0x00F4, 0x99 }, /* LATIN SMALL LETTER O WITH CIRCUMFLEX */ + { 0x00F5, 0x9B }, /* LATIN SMALL LETTER O WITH TILDE */ + { 0x00F6, 0x9A }, /* LATIN SMALL LETTER O WITH DIAERESIS */ + { 0x00F7, 0xD6 }, /* DIVISION SIGN */ + { 0x00F8, 0xBF }, /* LATIN SMALL LETTER O WITH STROKE */ + { 0x00F9, 0x9D }, /* LATIN SMALL LETTER U WITH GRAVE */ + { 0x00FA, 0x9C }, /* LATIN SMALL LETTER U WITH ACUTE */ + { 0x00FB, 0x9E }, /* LATIN SMALL LETTER U WITH CIRCUMFLEX */ + { 0x00FC, 0x9F }, /* LATIN SMALL LETTER U WITH DIAERESIS */ + { 0x00FF, 0xD8 }, /* LATIN SMALL LETTER Y WITH DIAERESIS */ + { 0x0131, 0xF5 }, /* LATIN SMALL LETTER DOTLESS I */ + { 0x0152, 0xCE }, /* LATIN CAPITAL LIGATURE OE */ + { 0x0153, 0xCF }, /* LATIN SMALL LIGATURE OE */ + { 0x0178, 0xD9 }, /* LATIN CAPITAL LETTER Y WITH DIAERESIS */ + { 0x0192, 0xC4 }, /* LATIN SMALL LETTER F WITH HOOK */ + { 0x02C6, 0xF6 }, /* MODIFIER LETTER CIRCUMFLEX ACCENT */ + { 0x02C7, 0xFF }, /* CARON */ + { 0x02D8, 0xF9 }, /* BREVE */ + { 0x02D9, 0xFA }, /* DOT ABOVE */ + { 0x02DA, 0xFB }, /* RING ABOVE */ + { 0x02DB, 0xFE }, /* OGONEK */ + { 0x02DC, 0xF7 }, /* SMALL TILDE */ + { 0x02DD, 0xFD }, /* DOUBLE ACUTE ACCENT */ + { 0x03A9, 0xBD }, /* GREEK CAPITAL LETTER OMEGA */ + { 0x03C0, 0xB9 }, /* GREEK SMALL LETTER PI */ + { 0x2013, 0xD0 }, /* EN DASH */ + { 0x2014, 0xD1 }, /* EM DASH */ + { 0x2018, 0xD4 }, /* LEFT SINGLE QUOTATION MARK */ + { 0x2019, 0xD5 }, /* RIGHT SINGLE QUOTATION MARK */ + { 0x201A, 0xE2 }, /* SINGLE LOW-9 QUOTATION MARK */ + { 0x201C, 0xD2 }, /* LEFT DOUBLE QUOTATION MARK */ + { 0x201D, 0xD3 }, /* RIGHT DOUBLE QUOTATION MARK */ + { 0x201E, 0xE3 }, /* DOUBLE LOW-9 QUOTATION MARK */ + { 0x2020, 0xA0 }, /* DAGGER */ + { 0x2021, 0xE0 }, /* DOUBLE DAGGER */ + { 0x2022, 0xA5 }, /* BULLET */ + { 0x2026, 0xC9 }, /* HORIZONTAL ELLIPSIS */ + { 0x2030, 0xE4 }, /* PER MILLE SIGN */ + { 0x2039, 0xDC }, /* SINGLE LEFT-POINTING ANGLE QUOTATION MARK */ + { 0x203A, 0xDD }, /* SINGLE RIGHT-POINTING ANGLE QUOTATION MARK */ + { 0x2044, 0xDA }, /* FRACTION SLASH */ + { 0x20AC, 0xDB }, /* EURO SIGN */ + { 0x2122, 0xAA }, /* TRADE MARK SIGN */ + { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL */ + { 0x2206, 0xC6 }, /* INCREMENT */ + { 0x220F, 0xB8 }, /* N-ARY PRODUCT */ + { 0x2211, 0xB7 }, /* N-ARY SUMMATION */ + { 0x221A, 0xC3 }, /* SQUARE ROOT */ + { 0x221E, 0xB0 }, /* INFINITY */ + { 0x222B, 0xBA }, /* INTEGRAL */ + { 0x2248, 0xC5 }, /* ALMOST EQUAL TO */ + { 0x2260, 0xAD }, /* NOT EQUAL TO */ + { 0x2264, 0xB2 }, /* LESS-THAN OR EQUAL TO */ + { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO */ + { 0x25CA, 0xD7 }, /* LOZENGE */ + { 0xF8FF, 0xF0 }, /* Apple logo */ + { 0xFB01, 0xDE }, /* LATIN SMALL LIGATURE FI */ + { 0xFB02, 0xDF }, /* LATIN SMALL LIGATURE FL */ +}; + +static const FcCharMap AppleRoman = { + AppleRomanEnt, + sizeof (AppleRomanEnt) / sizeof (AppleRomanEnt[0]) +}; + +static const FcCharEnt AdobeSymbolEnt[] = { + { 0x0020, 0x20 }, /* SPACE # space */ + { 0x0021, 0x21 }, /* EXCLAMATION MARK # exclam */ + { 0x0023, 0x23 }, /* NUMBER SIGN # numbersign */ + { 0x0025, 0x25 }, /* PERCENT SIGN # percent */ + { 0x0026, 0x26 }, /* AMPERSAND # ampersand */ + { 0x0028, 0x28 }, /* LEFT PARENTHESIS # parenleft */ + { 0x0029, 0x29 }, /* RIGHT PARENTHESIS # parenright */ + { 0x002B, 0x2B }, /* PLUS SIGN # plus */ + { 0x002C, 0x2C }, /* COMMA # comma */ + { 0x002E, 0x2E }, /* FULL STOP # period */ + { 0x002F, 0x2F }, /* SOLIDUS # slash */ + { 0x0030, 0x30 }, /* DIGIT ZERO # zero */ + { 0x0031, 0x31 }, /* DIGIT ONE # one */ + { 0x0032, 0x32 }, /* DIGIT TWO # two */ + { 0x0033, 0x33 }, /* DIGIT THREE # three */ + { 0x0034, 0x34 }, /* DIGIT FOUR # four */ + { 0x0035, 0x35 }, /* DIGIT FIVE # five */ + { 0x0036, 0x36 }, /* DIGIT SIX # six */ + { 0x0037, 0x37 }, /* DIGIT SEVEN # seven */ + { 0x0038, 0x38 }, /* DIGIT EIGHT # eight */ + { 0x0039, 0x39 }, /* DIGIT NINE # nine */ + { 0x003A, 0x3A }, /* COLON # colon */ + { 0x003B, 0x3B }, /* SEMICOLON # semicolon */ + { 0x003C, 0x3C }, /* LESS-THAN SIGN # less */ + { 0x003D, 0x3D }, /* EQUALS SIGN # equal */ + { 0x003E, 0x3E }, /* GREATER-THAN SIGN # greater */ + { 0x003F, 0x3F }, /* QUESTION MARK # question */ + { 0x005B, 0x5B }, /* LEFT SQUARE BRACKET # bracketleft */ + { 0x005D, 0x5D }, /* RIGHT SQUARE BRACKET # bracketright */ + { 0x005F, 0x5F }, /* LOW LINE # underscore */ + { 0x007B, 0x7B }, /* LEFT CURLY BRACKET # braceleft */ + { 0x007C, 0x7C }, /* VERTICAL LINE # bar */ + { 0x007D, 0x7D }, /* RIGHT CURLY BRACKET # braceright */ + { 0x00A0, 0x20 }, /* NO-BREAK SPACE # space */ + { 0x00AC, 0xD8 }, /* NOT SIGN # logicalnot */ + { 0x00B0, 0xB0 }, /* DEGREE SIGN # degree */ + { 0x00B1, 0xB1 }, /* PLUS-MINUS SIGN # plusminus */ + { 0x00B5, 0x6D }, /* MICRO SIGN # mu */ + { 0x00D7, 0xB4 }, /* MULTIPLICATION SIGN # multiply */ + { 0x00F7, 0xB8 }, /* DIVISION SIGN # divide */ + { 0x0192, 0xA6 }, /* LATIN SMALL LETTER F WITH HOOK # florin */ + { 0x0391, 0x41 }, /* GREEK CAPITAL LETTER ALPHA # Alpha */ + { 0x0392, 0x42 }, /* GREEK CAPITAL LETTER BETA # Beta */ + { 0x0393, 0x47 }, /* GREEK CAPITAL LETTER GAMMA # Gamma */ + { 0x0394, 0x44 }, /* GREEK CAPITAL LETTER DELTA # Delta */ + { 0x0395, 0x45 }, /* GREEK CAPITAL LETTER EPSILON # Epsilon */ + { 0x0396, 0x5A }, /* GREEK CAPITAL LETTER ZETA # Zeta */ + { 0x0397, 0x48 }, /* GREEK CAPITAL LETTER ETA # Eta */ + { 0x0398, 0x51 }, /* GREEK CAPITAL LETTER THETA # Theta */ + { 0x0399, 0x49 }, /* GREEK CAPITAL LETTER IOTA # Iota */ + { 0x039A, 0x4B }, /* GREEK CAPITAL LETTER KAPPA # Kappa */ + { 0x039B, 0x4C }, /* GREEK CAPITAL LETTER LAMDA # Lambda */ + { 0x039C, 0x4D }, /* GREEK CAPITAL LETTER MU # Mu */ + { 0x039D, 0x4E }, /* GREEK CAPITAL LETTER NU # Nu */ + { 0x039E, 0x58 }, /* GREEK CAPITAL LETTER XI # Xi */ + { 0x039F, 0x4F }, /* GREEK CAPITAL LETTER OMICRON # Omicron */ + { 0x03A0, 0x50 }, /* GREEK CAPITAL LETTER PI # Pi */ + { 0x03A1, 0x52 }, /* GREEK CAPITAL LETTER RHO # Rho */ + { 0x03A3, 0x53 }, /* GREEK CAPITAL LETTER SIGMA # Sigma */ + { 0x03A4, 0x54 }, /* GREEK CAPITAL LETTER TAU # Tau */ + { 0x03A5, 0x55 }, /* GREEK CAPITAL LETTER UPSILON # Upsilon */ + { 0x03A6, 0x46 }, /* GREEK CAPITAL LETTER PHI # Phi */ + { 0x03A7, 0x43 }, /* GREEK CAPITAL LETTER CHI # Chi */ + { 0x03A8, 0x59 }, /* GREEK CAPITAL LETTER PSI # Psi */ + { 0x03A9, 0x57 }, /* GREEK CAPITAL LETTER OMEGA # Omega */ + { 0x03B1, 0x61 }, /* GREEK SMALL LETTER ALPHA # alpha */ + { 0x03B2, 0x62 }, /* GREEK SMALL LETTER BETA # beta */ + { 0x03B3, 0x67 }, /* GREEK SMALL LETTER GAMMA # gamma */ + { 0x03B4, 0x64 }, /* GREEK SMALL LETTER DELTA # delta */ + { 0x03B5, 0x65 }, /* GREEK SMALL LETTER EPSILON # epsilon */ + { 0x03B6, 0x7A }, /* GREEK SMALL LETTER ZETA # zeta */ + { 0x03B7, 0x68 }, /* GREEK SMALL LETTER ETA # eta */ + { 0x03B8, 0x71 }, /* GREEK SMALL LETTER THETA # theta */ + { 0x03B9, 0x69 }, /* GREEK SMALL LETTER IOTA # iota */ + { 0x03BA, 0x6B }, /* GREEK SMALL LETTER KAPPA # kappa */ + { 0x03BB, 0x6C }, /* GREEK SMALL LETTER LAMDA # lambda */ + { 0x03BC, 0x6D }, /* GREEK SMALL LETTER MU # mu */ + { 0x03BD, 0x6E }, /* GREEK SMALL LETTER NU # nu */ + { 0x03BE, 0x78 }, /* GREEK SMALL LETTER XI # xi */ + { 0x03BF, 0x6F }, /* GREEK SMALL LETTER OMICRON # omicron */ + { 0x03C0, 0x70 }, /* GREEK SMALL LETTER PI # pi */ + { 0x03C1, 0x72 }, /* GREEK SMALL LETTER RHO # rho */ + { 0x03C2, 0x56 }, /* GREEK SMALL LETTER FINAL SIGMA # sigma1 */ + { 0x03C3, 0x73 }, /* GREEK SMALL LETTER SIGMA # sigma */ + { 0x03C4, 0x74 }, /* GREEK SMALL LETTER TAU # tau */ + { 0x03C5, 0x75 }, /* GREEK SMALL LETTER UPSILON # upsilon */ + { 0x03C6, 0x66 }, /* GREEK SMALL LETTER PHI # phi */ + { 0x03C7, 0x63 }, /* GREEK SMALL LETTER CHI # chi */ + { 0x03C8, 0x79 }, /* GREEK SMALL LETTER PSI # psi */ + { 0x03C9, 0x77 }, /* GREEK SMALL LETTER OMEGA # omega */ + { 0x03D1, 0x4A }, /* GREEK THETA SYMBOL # theta1 */ + { 0x03D2, 0xA1 }, /* GREEK UPSILON WITH HOOK SYMBOL # Upsilon1 */ + { 0x03D5, 0x6A }, /* GREEK PHI SYMBOL # phi1 */ + { 0x03D6, 0x76 }, /* GREEK PI SYMBOL # omega1 */ + { 0x2022, 0xB7 }, /* BULLET # bullet */ + { 0x2026, 0xBC }, /* HORIZONTAL ELLIPSIS # ellipsis */ + { 0x2032, 0xA2 }, /* PRIME # minute */ + { 0x2033, 0xB2 }, /* DOUBLE PRIME # second */ + { 0x2044, 0xA4 }, /* FRACTION SLASH # fraction */ + { 0x20AC, 0xA0 }, /* EURO SIGN # Euro */ + { 0x2111, 0xC1 }, /* BLACK-LETTER CAPITAL I # Ifraktur */ + { 0x2118, 0xC3 }, /* SCRIPT CAPITAL P # weierstrass */ + { 0x211C, 0xC2 }, /* BLACK-LETTER CAPITAL R # Rfraktur */ + { 0x2126, 0x57 }, /* OHM SIGN # Omega */ + { 0x2135, 0xC0 }, /* ALEF SYMBOL # aleph */ + { 0x2190, 0xAC }, /* LEFTWARDS ARROW # arrowleft */ + { 0x2191, 0xAD }, /* UPWARDS ARROW # arrowup */ + { 0x2192, 0xAE }, /* RIGHTWARDS ARROW # arrowright */ + { 0x2193, 0xAF }, /* DOWNWARDS ARROW # arrowdown */ + { 0x2194, 0xAB }, /* LEFT RIGHT ARROW # arrowboth */ + { 0x21B5, 0xBF }, /* DOWNWARDS ARROW WITH CORNER LEFTWARDS # carriagereturn */ + { 0x21D0, 0xDC }, /* LEFTWARDS DOUBLE ARROW # arrowdblleft */ + { 0x21D1, 0xDD }, /* UPWARDS DOUBLE ARROW # arrowdblup */ + { 0x21D2, 0xDE }, /* RIGHTWARDS DOUBLE ARROW # arrowdblright */ + { 0x21D3, 0xDF }, /* DOWNWARDS DOUBLE ARROW # arrowdbldown */ + { 0x21D4, 0xDB }, /* LEFT RIGHT DOUBLE ARROW # arrowdblboth */ + { 0x2200, 0x22 }, /* FOR ALL # universal */ + { 0x2202, 0xB6 }, /* PARTIAL DIFFERENTIAL # partialdiff */ + { 0x2203, 0x24 }, /* THERE EXISTS # existential */ + { 0x2205, 0xC6 }, /* EMPTY SET # emptyset */ + { 0x2206, 0x44 }, /* INCREMENT # Delta */ + { 0x2207, 0xD1 }, /* NABLA # gradient */ + { 0x2208, 0xCE }, /* ELEMENT OF # element */ + { 0x2209, 0xCF }, /* NOT AN ELEMENT OF # notelement */ + { 0x220B, 0x27 }, /* CONTAINS AS MEMBER # suchthat */ + { 0x220F, 0xD5 }, /* N-ARY PRODUCT # product */ + { 0x2211, 0xE5 }, /* N-ARY SUMMATION # summation */ + { 0x2212, 0x2D }, /* MINUS SIGN # minus */ + { 0x2215, 0xA4 }, /* DIVISION SLASH # fraction */ + { 0x2217, 0x2A }, /* ASTERISK OPERATOR # asteriskmath */ + { 0x221A, 0xD6 }, /* SQUARE ROOT # radical */ + { 0x221D, 0xB5 }, /* PROPORTIONAL TO # proportional */ + { 0x221E, 0xA5 }, /* INFINITY # infinity */ + { 0x2220, 0xD0 }, /* ANGLE # angle */ + { 0x2227, 0xD9 }, /* LOGICAL AND # logicaland */ + { 0x2228, 0xDA }, /* LOGICAL OR # logicalor */ + { 0x2229, 0xC7 }, /* INTERSECTION # intersection */ + { 0x222A, 0xC8 }, /* UNION # union */ + { 0x222B, 0xF2 }, /* INTEGRAL # integral */ + { 0x2234, 0x5C }, /* THEREFORE # therefore */ + { 0x223C, 0x7E }, /* TILDE OPERATOR # similar */ + { 0x2245, 0x40 }, /* APPROXIMATELY EQUAL TO # congruent */ + { 0x2248, 0xBB }, /* ALMOST EQUAL TO # approxequal */ + { 0x2260, 0xB9 }, /* NOT EQUAL TO # notequal */ + { 0x2261, 0xBA }, /* IDENTICAL TO # equivalence */ + { 0x2264, 0xA3 }, /* LESS-THAN OR EQUAL TO # lessequal */ + { 0x2265, 0xB3 }, /* GREATER-THAN OR EQUAL TO # greaterequal */ + { 0x2282, 0xCC }, /* SUBSET OF # propersubset */ + { 0x2283, 0xC9 }, /* SUPERSET OF # propersuperset */ + { 0x2284, 0xCB }, /* NOT A SUBSET OF # notsubset */ + { 0x2286, 0xCD }, /* SUBSET OF OR EQUAL TO # reflexsubset */ + { 0x2287, 0xCA }, /* SUPERSET OF OR EQUAL TO # reflexsuperset */ + { 0x2295, 0xC5 }, /* CIRCLED PLUS # circleplus */ + { 0x2297, 0xC4 }, /* CIRCLED TIMES # circlemultiply */ + { 0x22A5, 0x5E }, /* UP TACK # perpendicular */ + { 0x22C5, 0xD7 }, /* DOT OPERATOR # dotmath */ + { 0x2320, 0xF3 }, /* TOP HALF INTEGRAL # integraltp */ + { 0x2321, 0xF5 }, /* BOTTOM HALF INTEGRAL # integralbt */ + { 0x2329, 0xE1 }, /* LEFT-POINTING ANGLE BRACKET # angleleft */ + { 0x232A, 0xF1 }, /* RIGHT-POINTING ANGLE BRACKET # angleright */ + { 0x25CA, 0xE0 }, /* LOZENGE # lozenge */ + { 0x2660, 0xAA }, /* BLACK SPADE SUIT # spade */ + { 0x2663, 0xA7 }, /* BLACK CLUB SUIT # club */ + { 0x2665, 0xA9 }, /* BLACK HEART SUIT # heart */ + { 0x2666, 0xA8 }, /* BLACK DIAMOND SUIT # diamond */ + { 0xF6D9, 0xD3 }, /* COPYRIGHT SIGN SERIF # copyrightserif (CUS) */ + { 0xF6DA, 0xD2 }, /* REGISTERED SIGN SERIF # registerserif (CUS) */ + { 0xF6DB, 0xD4 }, /* TRADE MARK SIGN SERIF # trademarkserif (CUS) */ + { 0xF8E5, 0x60 }, /* RADICAL EXTENDER # radicalex (CUS) */ + { 0xF8E6, 0xBD }, /* VERTICAL ARROW EXTENDER # arrowvertex (CUS) */ + { 0xF8E7, 0xBE }, /* HORIZONTAL ARROW EXTENDER # arrowhorizex (CUS) */ + { 0xF8E8, 0xE2 }, /* REGISTERED SIGN SANS SERIF # registersans (CUS) */ + { 0xF8E9, 0xE3 }, /* COPYRIGHT SIGN SANS SERIF # copyrightsans (CUS) */ + { 0xF8EA, 0xE4 }, /* TRADE MARK SIGN SANS SERIF # trademarksans (CUS) */ + { 0xF8EB, 0xE6 }, /* LEFT PAREN TOP # parenlefttp (CUS) */ + { 0xF8EC, 0xE7 }, /* LEFT PAREN EXTENDER # parenleftex (CUS) */ + { 0xF8ED, 0xE8 }, /* LEFT PAREN BOTTOM # parenleftbt (CUS) */ + { 0xF8EE, 0xE9 }, /* LEFT SQUARE BRACKET TOP # bracketlefttp (CUS) */ + { 0xF8EF, 0xEA }, /* LEFT SQUARE BRACKET EXTENDER # bracketleftex (CUS) */ + { 0xF8F0, 0xEB }, /* LEFT SQUARE BRACKET BOTTOM # bracketleftbt (CUS) */ + { 0xF8F1, 0xEC }, /* LEFT CURLY BRACKET TOP # bracelefttp (CUS) */ + { 0xF8F2, 0xED }, /* LEFT CURLY BRACKET MID # braceleftmid (CUS) */ + { 0xF8F3, 0xEE }, /* LEFT CURLY BRACKET BOTTOM # braceleftbt (CUS) */ + { 0xF8F4, 0xEF }, /* CURLY BRACKET EXTENDER # braceex (CUS) */ + { 0xF8F5, 0xF4 }, /* INTEGRAL EXTENDER # integralex (CUS) */ + { 0xF8F6, 0xF6 }, /* RIGHT PAREN TOP # parenrighttp (CUS) */ + { 0xF8F7, 0xF7 }, /* RIGHT PAREN EXTENDER # parenrightex (CUS) */ + { 0xF8F8, 0xF8 }, /* RIGHT PAREN BOTTOM # parenrightbt (CUS) */ + { 0xF8F9, 0xF9 }, /* RIGHT SQUARE BRACKET TOP # bracketrighttp (CUS) */ + { 0xF8FA, 0xFA }, /* RIGHT SQUARE BRACKET EXTENDER # bracketrightex (CUS) */ + { 0xF8FB, 0xFB }, /* RIGHT SQUARE BRACKET BOTTOM # bracketrightbt (CUS) */ + { 0xF8FC, 0xFC }, /* RIGHT CURLY BRACKET TOP # bracerighttp (CUS) */ + { 0xF8FD, 0xFD }, /* RIGHT CURLY BRACKET MID # bracerightmid (CUS) */ + { 0xF8FE, 0xFE }, /* RIGHT CURLY BRACKET BOTTOM # bracerightbt (CUS) */ +}; + +static const FcCharMap AdobeSymbol = { + AdobeSymbolEnt, + sizeof (AdobeSymbolEnt) / sizeof (AdobeSymbolEnt[0]), +}; + +static const FcFontDecode fcFontDecoders[] = { + { ft_encoding_unicode, 0, (1 << 21) - 1 }, + { ft_encoding_symbol, &AdobeSymbol, (1 << 16) - 1 }, + { ft_encoding_apple_roman, &AppleRoman, (1 << 16) - 1 }, +}; + +#define NUM_DECODE (int) (sizeof (fcFontDecoders) / sizeof (fcFontDecoders[0])) + +static const FcChar32 prefer_unicode[] = { + 0x20ac, /* EURO SIGN */ +}; + +#define NUM_PREFER_UNICODE (int) (sizeof (prefer_unicode) / sizeof (prefer_unicode[0])) + +FcChar32 +FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map) +{ + int low, high, mid; + FcChar16 bmp; + + low = 0; + high = map->nent - 1; + if (ucs4 < map->ent[low].bmp || map->ent[high].bmp < ucs4) + return ~0; + while (low <= high) + { + mid = (high + low) >> 1; + bmp = map->ent[mid].bmp; + if (ucs4 == bmp) + return (FT_ULong) map->ent[mid].encode; + if (ucs4 < bmp) + high = mid - 1; + else + low = mid + 1; + } + return ~0; +} + +FcChar32 +FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map) +{ + int i; + + for (i = 0; i < map->nent; i++) + if (map->ent[i].encode == private) + return (FcChar32) map->ent[i].bmp; + return ~0; +} + +const FcCharMap * +FcFreeTypeGetPrivateMap (FT_Encoding encoding) +{ + int i; + + for (i = 0; i < NUM_DECODE; i++) + if (fcFontDecoders[i].encoding == encoding) + return fcFontDecoders[i].map; + return 0; +} + +#include "../fc-glyphname/fcglyphname.h" + +static FcChar32 +FcHashGlyphName (const FcChar8 *name) +{ + FcChar32 h = 0; + FcChar8 c; + + while ((c = *name++)) + { + h = ((h << 1) | (h >> 31)) ^ c; + } + return h; +} + +#if HAVE_FT_HAS_PS_GLYPH_NAMES +/* + * Use Type1 glyph names for fonts which have reliable names + * and which export an Adobe Custom mapping + */ +static FcBool +FcFreeTypeUseNames (FT_Face face) +{ + FT_Int map; + + if (!FT_Has_PS_Glyph_Names (face)) + return FcFalse; + for (map = 0; map < face->num_charmaps; map++) + if (face->charmaps[map]->encoding == ft_encoding_adobe_custom) + return FcTrue; + return FcFalse; +} + +static const FcChar8 * +FcUcs4ToGlyphName (FcChar32 ucs4) +{ + int i = (int) (ucs4 % FC_GLYPHNAME_HASH); + int r = 0; + FcGlyphId gn; + + while ((gn = _fc_ucs_to_name[i]) != -1) + { + if (_fc_glyph_names[gn].ucs == ucs4) + return _fc_glyph_names[gn].name; + if (!r) + { + r = (int) (ucs4 % FC_GLYPHNAME_REHASH); + if (!r) + r = 1; + } + i += r; + if (i >= FC_GLYPHNAME_HASH) + i -= FC_GLYPHNAME_HASH; + } + return 0; +} + +static FcChar32 +FcGlyphNameToUcs4 (FcChar8 *name) +{ + FcChar32 h = FcHashGlyphName (name); + int i = (int) (h % FC_GLYPHNAME_HASH); + int r = 0; + FcGlyphId gn; + + while ((gn = _fc_name_to_ucs[i]) != -1) + { + if (!strcmp ((char *) name, (char *) _fc_glyph_names[gn].name)) + return _fc_glyph_names[gn].ucs; + if (!r) + { + r = (int) (h % FC_GLYPHNAME_REHASH); + if (!r) + r = 1; + } + i += r; + if (i >= FC_GLYPHNAME_HASH) + i -= FC_GLYPHNAME_HASH; + } + return 0xffff; +} + +/* + * Work around a bug in some FreeType versions which fail + * to correctly bounds check glyph name buffers and overwrite + * the stack. As Postscript names have a limit of 127 characters, + * this should be sufficient. + */ + +#if FC_GLYPHNAME_MAXLEN < 127 +# define FC_GLYPHNAME_BUFLEN 127 +#else +# define FC_GLYPHNAME_BUFLEN FC_GLYPHNAME_MAXLEN +#endif + +/* + * Search through a font for a glyph by name. This is + * currently a linear search as there doesn't appear to be + * any defined order within the font + */ +static FT_UInt +FcFreeTypeGlyphNameIndex (FT_Face face, const FcChar8 *name) +{ + FT_UInt gindex; + FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2]; + + for (gindex = 0; gindex < (FT_UInt) face->num_glyphs; gindex++) + { + if (FT_Get_Glyph_Name (face, gindex, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0) + if (!strcmp ((char *) name, (char *) name_buf)) + return gindex; + } + return 0; +} +#endif + +/* + * Map a UCS4 glyph to a glyph index. Use all available encoding + * tables to try and find one that works. This information is expected + * to be cached by higher levels, so performance isn't critical + */ + +FT_UInt +FcFreeTypeCharIndex (FT_Face face, FcChar32 ucs4) +{ + int initial, offset, decode; + FT_UInt glyphindex; + FcChar32 charcode; + int p; + + initial = 0; + + if (!face) + return 0; + + /* + * Find the current encoding + */ + if (face->charmap) + { + for (; initial < NUM_DECODE; initial++) + if (fcFontDecoders[initial].encoding == face->charmap->encoding) + break; + if (initial == NUM_DECODE) + initial = 0; + } + for (p = 0; p < NUM_PREFER_UNICODE; p++) + if (ucs4 == prefer_unicode[p]) + { + initial = 0; + break; + } + /* + * Check each encoding for the glyph, starting with the current one + */ + for (offset = 0; offset < NUM_DECODE; offset++) + { + decode = (initial + offset) % NUM_DECODE; + if (!face->charmap || face->charmap->encoding != fcFontDecoders[decode].encoding) + if (FT_Select_Charmap (face, fcFontDecoders[decode].encoding) != 0) + continue; + if (fcFontDecoders[decode].map) + { + charcode = FcFreeTypeUcs4ToPrivate (ucs4, fcFontDecoders[decode].map); + if (charcode == ~0U) + continue; + } + else + charcode = ucs4; + glyphindex = FT_Get_Char_Index (face, (FT_ULong) charcode); + if (glyphindex) + return glyphindex; + } +#if HAVE_FT_HAS_PS_GLYPH_NAMES + /* + * Check postscript name table if present + */ + if (FcFreeTypeUseNames (face)) + { + const FcChar8 *name = FcUcs4ToGlyphName (ucs4); + if (name) + { + glyphindex = FcFreeTypeGlyphNameIndex (face, name); + if (glyphindex) + return glyphindex; + } + } +#endif + return 0; +} + +static FcBool +FcFreeTypeCheckGlyph (FT_Face face, FcChar32 ucs4, + FT_UInt glyph, FcBlanks *blanks, + FT_Pos *advance, + FcBool using_strike) +{ + FT_Int load_flags = FT_LOAD_IGNORE_GLOBAL_ADVANCE_WIDTH | FT_LOAD_NO_SCALE | FT_LOAD_NO_HINTING; + FT_GlyphSlot slot; + + if (using_strike) + load_flags &= ~FT_LOAD_NO_SCALE; + + /* + * When using scalable fonts, only report those glyphs + * which can be scaled; otherwise those fonts will + * only be available at some sizes, and never when + * transformed. Avoid this by simply reporting bitmap-only + * glyphs as missing + */ + if (face->face_flags & FT_FACE_FLAG_SCALABLE) + load_flags |= FT_LOAD_NO_BITMAP; + + if (FT_Load_Glyph (face, glyph, load_flags)) + return FcFalse; + + slot = face->glyph; + if (!glyph) + return FcFalse; + + *advance = slot->metrics.horiAdvance; + + switch (slot->format) { + case ft_glyph_format_bitmap: + /* + * Bitmaps are assumed to be reasonable; if + * this proves to be a rash assumption, this + * code can be easily modified + */ + return FcTrue; + case ft_glyph_format_outline: + /* + * Glyphs with contours are always OK + */ + if (slot->outline.n_contours != 0) + return FcTrue; + /* + * Glyphs with no contours are only OK if + * they're members of the Blanks set specified + * in the configuration. If blanks isn't set, + * then allow any glyph to be blank + */ + if (!blanks || FcBlanksIsMember (blanks, ucs4)) + return FcTrue; + /* fall through ... */ + default: + break; + } + return FcFalse; +} + +#define APPROXIMATELY_EQUAL(x,y) (FC_ABS ((x) - (y)) <= FC_MAX (FC_ABS (x), FC_ABS (y)) / 33) + +static FcCharSet * +FcFreeTypeCharSetAndSpacingForSize (FT_Face face, FcBlanks *blanks, int *spacing, FT_Int strike_index) +{ + FcChar32 page, off, ucs4; +#ifdef CHECK + FcChar32 font_max = 0; +#endif + FcCharSet *fcs; + FcCharLeaf *leaf; + const FcCharMap *map; + int o; + int i; + FT_UInt glyph; + FT_Pos advance, advance_one = 0, advance_two = 0; + FcBool has_advance = FcFalse, fixed_advance = FcTrue, dual_advance = FcFalse; + FcBool using_strike = FcFalse; + + fcs = FcCharSetCreate (); + if (!fcs) + goto bail0; + +#if HAVE_FT_SELECT_SIZE + if (strike_index >= 0) { + if (FT_Select_Size (face, strike_index) != FT_Err_Ok) + goto bail1; + using_strike = FcTrue; + } +#endif + +#ifdef CHECK + printf ("Family %s style %s\n", face->family_name, face->style_name); +#endif + for (o = 0; o < NUM_DECODE; o++) + { + if (FT_Select_Charmap (face, fcFontDecoders[o].encoding) != 0) + continue; + map = fcFontDecoders[o].map; + if (map) + { + /* + * Non-Unicode tables are easy; there's a list of all possible + * characters + */ + for (i = 0; i < map->nent; i++) + { + ucs4 = map->ent[i].bmp; + glyph = FT_Get_Char_Index (face, map->ent[i].encode); + if (glyph && + FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike)) + { + /* + * ignore glyphs with zero advance. They’re + * combining characters, and while their behaviour + * isn’t well defined for monospaced applications in + * Unicode, there are many fonts which include + * zero-width combining characters in otherwise + * monospaced fonts. + */ + if (advance) + { + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } + } + + leaf = FcCharSetFindLeafCreate (fcs, ucs4); + if (!leaf) + goto bail1; + leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f)); +#ifdef CHECK + if (ucs4 > font_max) + font_max = ucs4; +#endif + } + } + } + else + { + page = ~0; + leaf = NULL; + ucs4 = FT_Get_First_Char (face, &glyph); + while (glyph != 0) + { + if (FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike)) + { + if (advance) + { + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } + } + + if ((ucs4 >> 8) != page) + { + page = (ucs4 >> 8); + leaf = FcCharSetFindLeafCreate (fcs, ucs4); + if (!leaf) + goto bail1; + } + off = ucs4 & 0xff; + leaf->map[off >> 5] |= (1 << (off & 0x1f)); +#ifdef CHECK + if (ucs4 > font_max) + font_max = ucs4; +#endif + } + ucs4 = FT_Get_Next_Char (face, ucs4, &glyph); + } +#ifdef CHECK + for (ucs4 = 0; ucs4 < 0x10000; ucs4++) + { + FcBool FT_Has, FC_Has; + + FT_Has = FT_Get_Char_Index (face, ucs4) != 0; + FC_Has = FcCharSetHasChar (fcs, ucs4); + if (FT_Has != FC_Has) + { + printf ("0x%08x FT says %d FC says %d\n", ucs4, FT_Has, FC_Has); + } + } +#endif + } + } +#if HAVE_FT_HAS_PS_GLYPH_NAMES + /* + * Add mapping from PS glyph names if available + */ + if (FcFreeTypeUseNames (face)) + { + FcChar8 name_buf[FC_GLYPHNAME_BUFLEN + 2]; + + for (glyph = 0; glyph < (FT_UInt) face->num_glyphs; glyph++) + { + if (FT_Get_Glyph_Name (face, glyph, name_buf, FC_GLYPHNAME_BUFLEN+1) == 0) + { + ucs4 = FcGlyphNameToUcs4 (name_buf); + if (ucs4 != 0xffff && + FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike)) + { + if (advance) + { + if (!has_advance) + { + has_advance = FcTrue; + advance_one = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_one)) + { + if (fixed_advance) + { + dual_advance = FcTrue; + fixed_advance = FcFalse; + advance_two = advance; + } + else if (!APPROXIMATELY_EQUAL (advance, advance_two)) + dual_advance = FcFalse; + } + } + leaf = FcCharSetFindLeafCreate (fcs, ucs4); + if (!leaf) + goto bail1; + leaf->map[(ucs4 & 0xff) >> 5] |= (1 << (ucs4 & 0x1f)); +#ifdef CHECK + if (ucs4 > font_max) + font_max = ucs4; +#endif + } + } + } + } +#endif +#ifdef CHECK + printf ("%d glyphs %d encoded\n", (int) face->num_glyphs, FcCharSetCount (fcs)); + for (ucs4 = 0; ucs4 <= font_max; ucs4++) + { + FcBool has_char = (glyph = FcFreeTypeCharIndex (face, ucs4)) != 0; + FcBool has_bit = FcCharSetHasChar (fcs, ucs4); + + if (has_char && !has_bit) + { + if (!FcFreeTypeCheckGlyph (face, ucs4, glyph, blanks, &advance, using_strike)) + printf ("Bitmap missing broken char 0x%x\n", ucs4); + else + printf ("Bitmap missing char 0x%x\n", ucs4); + } + else if (!has_char && has_bit) + printf ("Bitmap extra char 0x%x\n", ucs4); + } +#endif + if (fixed_advance) + *spacing = FC_MONO; + else if (dual_advance && APPROXIMATELY_EQUAL (2 * FC_MIN (advance_one, advance_two), FC_MAX (advance_one, advance_two))) + *spacing = FC_DUAL; + else + *spacing = FC_PROPORTIONAL; + return fcs; +bail1: + FcCharSetDestroy (fcs); +bail0: + return 0; +} + +FcCharSet * +FcFreeTypeCharSetAndSpacing (FT_Face face, FcBlanks *blanks, int *spacing) +{ + FcCharSet *cs; + + cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, -1); + /* + * Check for bitmap-only ttf fonts that are missing the glyf table. + * In that case, pick a size and look for glyphs in that size instead + */ + if (FcCharSetCount (cs) == 0) + { + /* Check for non-scalable TT fonts */ + if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) && + face->num_fixed_sizes > 0 && + FT_Get_Sfnt_Table (face, ft_sfnt_head)) + { + FT_Int strike_index = 0; + int i; + + /* Select the face closest to 16 pixels tall */ + for (i = 1; i < face->num_fixed_sizes; i++) { + if (abs (face->available_sizes[i].height - 16) < + abs (face->available_sizes[strike_index].height - 16)) + strike_index = i; + } + FcCharSetDestroy (cs); + cs = FcFreeTypeCharSetAndSpacingForSize (face, blanks, spacing, strike_index); + } + } + return cs; +} + +FcCharSet * +FcFreeTypeCharSet (FT_Face face, FcBlanks *blanks) +{ + int spacing; + + return FcFreeTypeCharSetAndSpacing (face, blanks, &spacing); +} + + +#define TTAG_GPOS FT_MAKE_TAG( 'G', 'P', 'O', 'S' ) +#define TTAG_GSUB FT_MAKE_TAG( 'G', 'S', 'U', 'B' ) +#define TTAG_SILF FT_MAKE_TAG( 'S', 'i', 'l', 'f') + +#define OTLAYOUT_HEAD "otlayout:" +#define OTLAYOUT_HEAD_LEN 9 +#define OTLAYOUT_ID_LEN 4 +/* space + head + id */ +#define OTLAYOUT_LEN (1 + OTLAYOUT_HEAD_LEN + OTLAYOUT_ID_LEN) + +/* + * This is a bit generous; the registry has only lower case and space + * except for 'DFLT'. + */ +#define FcIsSpace(x) (040 == (x)) +#define FcIsValidScript(x) (FcIsLower(x) || FcIsUpper (x) || FcIsSpace(x)) + +static void +addtag(FcChar8 *complex_, FT_ULong tag) +{ + FcChar8 tagstring[OTLAYOUT_ID_LEN + 1]; + + tagstring[0] = (FcChar8)(tag >> 24), + tagstring[1] = (FcChar8)(tag >> 16), + tagstring[2] = (FcChar8)(tag >> 8), + tagstring[3] = (FcChar8)(tag); + tagstring[4] = '\0'; + + /* skip tags which aren't alphabetic, under the assumption that + * they're probably broken + */ + if (!FcIsValidScript(tagstring[0]) || + !FcIsValidScript(tagstring[1]) || + !FcIsValidScript(tagstring[2]) || + !FcIsValidScript(tagstring[3])) + return; + + if (*complex_ != '\0') + strcat ((char *) complex_, " "); + strcat ((char *) complex_, "otlayout:"); + strcat ((char *) complex_, (char *) tagstring); +} + +static int +compareulong (const void *a, const void *b) +{ + const FT_ULong *ua = (const FT_ULong *) a; + const FT_ULong *ub = (const FT_ULong *) b; + return *ua - *ub; +} + + +static int +GetScriptTags(FT_Face face, FT_ULong tabletag, FT_ULong **stags) +{ + FT_ULong cur_offset, new_offset, base_offset; + FT_Stream stream = face->stream; + FT_Error error; + FT_UShort n, p; + FT_Memory memory; + int script_count; + + if (!stream) + return 0; + + memory = stream->memory; + + if (( error = ftglue_face_goto_table( face, tabletag, stream ) )) + return 0; + + base_offset = ftglue_stream_pos ( stream ); + + /* skip version */ + + if ( ftglue_stream_seek ( stream, base_offset + 4L ) || ftglue_stream_frame_enter( stream, 2L ) ) + return 0; + + new_offset = GET_UShort() + base_offset; + + ftglue_stream_frame_exit( stream ); + + cur_offset = ftglue_stream_pos( stream ); + + if ( ftglue_stream_seek( stream, new_offset ) != FT_Err_Ok ) + return 0; + + base_offset = ftglue_stream_pos( stream ); + + if ( ftglue_stream_frame_enter( stream, 2L ) ) + return 0; + + script_count = GET_UShort (); + + ftglue_stream_frame_exit( stream ); + + *stags = malloc(script_count * sizeof (FT_ULong)); + if (!stags) + return 0; + + p = 0; + for ( n = 0; n < script_count; n++ ) + { + if ( ftglue_stream_frame_enter( stream, 6L ) ) + goto Fail; + + (*stags)[p] = GET_ULong (); + new_offset = GET_UShort () + base_offset; + + ftglue_stream_frame_exit( stream ); + + cur_offset = ftglue_stream_pos( stream ); + + error = ftglue_stream_seek( stream, new_offset ); + + if ( error == FT_Err_Ok ) + p++; + + (void)ftglue_stream_seek( stream, cur_offset ); + } + + if (!p) + goto Fail; + + /* sort the tag list before returning it */ + qsort(*stags, script_count, sizeof(FT_ULong), compareulong); + + return script_count; + +Fail: + free(*stags); + *stags = NULL; + return 0; +} + +static FcChar8 * +FcFontCapabilities(FT_Face face) +{ + FcBool issilgraphitefont = 0; + FT_Error err; + FT_ULong len = 0; + FT_ULong *gsubtags=NULL, *gpostags=NULL; + FT_UShort gsub_count=0, gpos_count=0; + FT_ULong maxsize; + FcChar8 *complex_ = NULL; + int indx1 = 0, indx2 = 0; + + err = FT_Load_Sfnt_Table(face, TTAG_SILF, 0, 0, &len); + issilgraphitefont = ( err == FT_Err_Ok); + + gpos_count = GetScriptTags(face, TTAG_GPOS, &gpostags); + gsub_count = GetScriptTags(face, TTAG_GSUB, &gsubtags); + + if (!issilgraphitefont && !gsub_count && !gpos_count) + goto bail; + + maxsize = (((FT_ULong) gpos_count + (FT_ULong) gsub_count) * OTLAYOUT_LEN + + (issilgraphitefont ? 13 : 0)); + complex_ = malloc (sizeof (FcChar8) * maxsize); + if (!complex_) + goto bail; + + complex_[0] = '\0'; + if (issilgraphitefont) + strcpy((char *) complex_, "ttable:Silf "); + + while ((indx1 < gsub_count) || (indx2 < gpos_count)) { + if (indx1 == gsub_count) { + addtag(complex_, gpostags[indx2]); + indx2++; + } else if ((indx2 == gpos_count) || (gsubtags[indx1] < gpostags[indx2])) { + addtag(complex_, gsubtags[indx1]); + indx1++; + } else if (gsubtags[indx1] == gpostags[indx2]) { + addtag(complex_, gsubtags[indx1]); + indx1++; + indx2++; + } else { + addtag(complex_, gpostags[indx2]); + indx2++; + } + } + if (FcDebug () & FC_DBG_SCANV) + printf("complex_ features in this font: %s\n", complex_); +bail: + free(gsubtags); + free(gpostags); + return complex_; +} + +#define __fcfreetype__ +#include "fcaliastail.h" +#include "fcftaliastail.h" +#undef __fcfreetype__ diff --git a/fontconfig/src/fcfs.c b/fontconfig/src/fcfs.c index e2ff0fafe..6625687c1 100644 --- a/fontconfig/src/fcfs.c +++ b/fontconfig/src/fcfs.c @@ -1,135 +1,135 @@ -/* - * fontconfig/src/fcfs.c - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include - -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 + +FcFontSet * +FcFontSetCreate (void) +{ + FcFontSet *s; + + s = (FcFontSet *) malloc (sizeof (FcFontSet)); + if (!s) + return 0; + FcMemAlloc (FC_MEM_FONTSET, sizeof (FcFontSet)); + s->nfont = 0; + s->sfont = 0; + s->fonts = 0; + return s; +} + +void +FcFontSetDestroy (FcFontSet *s) +{ + int i; + + for (i = 0; i < s->nfont; i++) + FcPatternDestroy (s->fonts[i]); + if (s->fonts) + { + FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *)); + free (s->fonts); + } + FcMemFree (FC_MEM_FONTSET, sizeof (FcFontSet)); + free (s); +} + +FcBool +FcFontSetAdd (FcFontSet *s, FcPattern *font) +{ + FcPattern **f; + int sfont; + + if (s->nfont == s->sfont) + { + sfont = s->sfont + 32; + if (s->fonts) + f = (FcPattern **) realloc (s->fonts, sfont * sizeof (FcPattern *)); + else + f = (FcPattern **) malloc (sfont * sizeof (FcPattern *)); + if (!f) + return FcFalse; + if (s->sfont) + FcMemFree (FC_MEM_FONTPTR, s->sfont * sizeof (FcPattern *)); + FcMemAlloc (FC_MEM_FONTPTR, sfont * sizeof (FcPattern *)); + s->sfont = sfont; + s->fonts = f; + } + s->fonts[s->nfont++] = font; + return FcTrue; +} + +FcBool +FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s) +{ + int i; + + if (!FcSerializeAlloc (serialize, s, sizeof (FcFontSet))) + return FcFalse; + if (!FcSerializeAlloc (serialize, s->fonts, s->nfont * sizeof (FcPattern *))) + return FcFalse; + for (i = 0; i < s->nfont; i++) + { + if (!FcPatternSerializeAlloc (serialize, s->fonts[i])) + return FcFalse; + } + return FcTrue; +} + +FcFontSet * +FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s) +{ + int i; + FcFontSet *s_serialize; + FcPattern **fonts_serialize; + FcPattern *p_serialize; + + s_serialize = FcSerializePtr (serialize, s); + if (!s_serialize) + return NULL; + *s_serialize = *s; + s_serialize->sfont = s_serialize->nfont; + + fonts_serialize = FcSerializePtr (serialize, s->fonts); + if (!fonts_serialize) + return NULL; + s_serialize->fonts = FcPtrToEncodedOffset (s_serialize, + fonts_serialize, FcPattern *); + + for (i = 0; i < s->nfont; i++) + { + p_serialize = FcPatternSerialize (serialize, s->fonts[i]); + if (!p_serialize) + return NULL; + fonts_serialize[i] = FcPtrToEncodedOffset (s_serialize, + p_serialize, + FcPattern); + } + + return s_serialize; +} +#define __fcfs__ +#include "fcaliastail.h" +#undef __fcfs__ diff --git a/fontconfig/src/fcftint.h b/fontconfig/src/fcftint.h index b0f9ff960..a317370e1 100644 --- a/fontconfig/src/fcftint.h +++ b/fontconfig/src/fcftint.h @@ -1,54 +1,54 @@ -/* - * Copyright © 2007 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that copyright - * notice and this permission notice appear in supporting documentation, and - * that the name of the copyright holders not be used in advertising or - * publicity pertaining to distribution of the software without specific, - * written prior permission. The copyright holders make no representations - * about the suitability of this software for any purpose. It is provided "as - * is" without express or implied warranty. - * - * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE - * OF THIS SOFTWARE. - */ - -#ifndef _FCFTINT_H_ -#define _FCFTINT_H_ - -#include - -#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) -#define FcPrivate __attribute__((__visibility__("hidden"))) -#define HAVE_GNUC_ATTRIBUTE 1 -#include "fcftalias.h" -#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) -#define FcPrivate __hidden -#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ -#define FcPrivate -#endif - -/* fcfreetype.c */ -FcPrivate FcBool -FcFreeTypeIsExclusiveLang (const FcChar8 *lang); - -FcPrivate FcBool -FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang); - -FcPrivate FcChar32 -FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map); - -FcPrivate FcChar32 -FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map); - -FcPrivate const FcCharMap * -FcFreeTypeGetPrivateMap (FT_Encoding encoding); - -#endif /* _FCFTINT_H_ */ +/* + * Copyright © 2007 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that copyright + * notice and this permission notice appear in supporting documentation, and + * that the name of the copyright holders not be used in advertising or + * publicity pertaining to distribution of the software without specific, + * written prior permission. The copyright holders make no representations + * about the suitability of this software for any purpose. It is provided "as + * is" without express or implied warranty. + * + * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE + * OF THIS SOFTWARE. + */ + +#ifndef _FCFTINT_H_ +#define _FCFTINT_H_ + +#include + +#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) +#define FcPrivate __attribute__((__visibility__("hidden"))) +#define HAVE_GNUC_ATTRIBUTE 1 +#include "fcftalias.h" +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) +#define FcPrivate __hidden +#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ +#define FcPrivate +#endif + +/* fcfreetype.c */ +FcPrivate FcBool +FcFreeTypeIsExclusiveLang (const FcChar8 *lang); + +FcPrivate FcBool +FcFreeTypeHasLang (FcPattern *pattern, const FcChar8 *lang); + +FcPrivate FcChar32 +FcFreeTypeUcs4ToPrivate (FcChar32 ucs4, const FcCharMap *map); + +FcPrivate FcChar32 +FcFreeTypePrivateToUcs4 (FcChar32 private, const FcCharMap *map); + +FcPrivate const FcCharMap * +FcFreeTypeGetPrivateMap (FT_Encoding encoding); + +#endif /* _FCFTINT_H_ */ diff --git a/fontconfig/src/fcinit.c b/fontconfig/src/fcinit.c index 45f0cd4a3..b7966b6db 100644 --- a/fontconfig/src/fcinit.c +++ b/fontconfig/src/fcinit.c @@ -1,289 +1,289 @@ -/* - * fontconfig/src/fcinit.c - * - * Copyright © 2001 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include - -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 elements found. Check configuration.\n"); - fprintf (stderr, - "Fontconfig warning: adding %s\n", - FC_CACHEDIR); - fprintf (stderr, - "Fontconfig warning: adding ~/.fontconfig\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 + +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 elements found. Check configuration.\n"); + fprintf (stderr, + "Fontconfig warning: adding %s\n", + FC_CACHEDIR); + fprintf (stderr, + "Fontconfig warning: adding ~/.fontconfig\n"); + if (!FcConfigAddCacheDir (config, (FcChar8 *) FC_CACHEDIR) || + !FcConfigAddCacheDir (config, (FcChar8 *) "~/.fontconfig")) + { + fprintf (stderr, + "Fontconfig error: out of memory"); + FcConfigDestroy (config); + return FcInitFallbackConfig (); + } + } + + return config; +} + +/* + * Load the configuration files and scan for available fonts + */ +FcConfig * +FcInitLoadConfigAndFonts (void) +{ + FcConfig *config = FcInitLoadConfig (); + + FcInitDebug (); + if (!config) + return 0; + if (!FcConfigBuildFonts (config)) + { + FcConfigDestroy (config); + return 0; + } + return config; +} + +/* + * Initialize the default library configuration + */ +FcBool +FcInit (void) +{ + FcConfig *config; + + if (_fcConfig) + return FcTrue; + config = FcInitLoadConfigAndFonts (); + if (!config) + return FcFalse; + FcConfigSetCurrent (config); + if (FcDebug() & FC_DBG_MEMORY) + FcMemReport (); + return FcTrue; +} + +/* + * Free all library-allocated data structures. + */ +void +FcFini (void) +{ + if (_fcConfig) + FcConfigDestroy (_fcConfig); + + FcPatternFini (); + FcCacheFini (); + if (FcDebug() & FC_DBG_MEMORY) + FcMemReport (); +} + +/* + * Reread the configuration and available font lists + */ +FcBool +FcInitReinitialize (void) +{ + FcConfig *config; + + config = FcInitLoadConfigAndFonts (); + if (!config) + return FcFalse; + FcConfigSetCurrent (config); + return FcTrue; +} + +FcBool +FcInitBringUptoDate (void) +{ + FcConfig *config = FcConfigGetCurrent (); + time_t now; + + /* + * rescanInterval == 0 disables automatic up to date + */ + if (config->rescanInterval == 0) + return FcTrue; + /* + * Check no more often than rescanInterval seconds + */ + now = time (0); + if (config->rescanTime + config->rescanInterval - now > 0) + return FcTrue; + /* + * If up to date, don't reload configuration + */ + if (FcConfigUptoDate (0)) + return FcTrue; + return FcInitReinitialize (); +} + +static struct { + char name[16]; + int alloc_count; + int alloc_mem; + int free_count; + int free_mem; +} FcInUse[FC_MEM_NUM] = { + { "charset" }, + { "charleaf" }, + { "fontset" }, + { "fontptr" }, + { "objectset" }, + { "objectptr" }, + { "matrix" }, + { "pattern" }, + { "patelt" }, + { "vallist" }, + { "substate" }, + { "string" }, + { "listbuck" }, + { "strset" }, + { "strlist" }, + { "config" }, + { "langset" }, + { "atomic" }, + { "blanks" }, + { "cache" }, + { "strbuf" }, + { "subst" }, + { "objecttype" }, + { "constant" }, + { "test" }, + { "expr" }, + { "vstack" }, + { "attr" }, + { "pstack" }, + { "staticstr" }, +}; + +static int FcAllocCount, FcAllocMem; +static int FcFreeCount, FcFreeMem; + +static int FcMemNotice = 1*1024*1024; + +static int FcAllocNotify, FcFreeNotify; + +void +FcMemReport (void) +{ + int i; + printf ("Fc Memory Usage:\n"); + printf ("\t Which Alloc Free Active\n"); + printf ("\t count bytes count bytes count bytes\n"); + for (i = 0; i < FC_MEM_NUM; i++) + printf ("%16.16s%8d%8d%8d%8d%8d%8d\n", + FcInUse[i].name, + FcInUse[i].alloc_count, FcInUse[i].alloc_mem, + FcInUse[i].free_count, FcInUse[i].free_mem, + FcInUse[i].alloc_count - FcInUse[i].free_count, + FcInUse[i].alloc_mem - FcInUse[i].free_mem); + printf ("%16.16s%8d%8d%8d%8d%8d%8d\n", + "Total", + FcAllocCount, FcAllocMem, + FcFreeCount, FcFreeMem, + FcAllocCount - FcFreeCount, + FcAllocMem - FcFreeMem); + FcAllocNotify = 0; + FcFreeNotify = 0; +} + +void +FcMemAlloc (int kind, int size) +{ + if (FcDebug() & FC_DBG_MEMORY) + { + FcInUse[kind].alloc_count++; + FcInUse[kind].alloc_mem += size; + FcAllocCount++; + FcAllocMem += size; + FcAllocNotify += size; + if (FcAllocNotify > FcMemNotice) + FcMemReport (); + } +} + +void +FcMemFree (int kind, int size) +{ + if (FcDebug() & FC_DBG_MEMORY) + { + FcInUse[kind].free_count++; + FcInUse[kind].free_mem += size; + FcFreeCount++; + FcFreeMem += size; + FcFreeNotify += size; + if (FcFreeNotify > FcMemNotice) + FcMemReport (); + } +} +#define __fcinit__ +#include "fcaliastail.h" +#undef __fcinit__ diff --git a/fontconfig/src/fcint.h b/fontconfig/src/fcint.h index 46be99eb8..83a7a435b 100644 --- a/fontconfig/src/fcint.h +++ b/fontconfig/src/fcint.h @@ -1,1039 +1,1039 @@ -/* - * fontconfig/src/fcint.h - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#ifndef _FCINT_H_ -#define _FCINT_H_ - -#ifdef HAVE_CONFIG_H -#include -#endif - -#include -#include -#ifdef HAVE_INTTYPES_H -#include -#elif defined(HAVE_STDINT_H) -#include -#else -#error missing C99 integer data types -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "fcdeprecate.h" - -#ifndef FC_CONFIG_PATH -#define FC_CONFIG_PATH "fonts.conf" -#endif - -#ifdef _WIN32 -#define FC_SEARCH_PATH_SEPARATOR ';' -#else -#define FC_SEARCH_PATH_SEPARATOR ':' -#endif - -#define FC_DBG_MATCH 1 -#define FC_DBG_MATCHV 2 -#define FC_DBG_EDIT 4 -#define FC_DBG_FONTSET 8 -#define FC_DBG_CACHE 16 -#define FC_DBG_CACHEV 32 -#define FC_DBG_PARSE 64 -#define FC_DBG_SCAN 128 -#define FC_DBG_SCANV 256 -#define FC_DBG_MEMORY 512 -#define FC_DBG_CONFIG 1024 -#define FC_DBG_LANGSET 2048 -#define FC_DBG_OBJTYPES 4096 - -#define FC_MEM_CHARSET 0 -#define FC_MEM_CHARLEAF 1 -#define FC_MEM_FONTSET 2 -#define FC_MEM_FONTPTR 3 -#define FC_MEM_OBJECTSET 4 -#define FC_MEM_OBJECTPTR 5 -#define FC_MEM_MATRIX 6 -#define FC_MEM_PATTERN 7 -#define FC_MEM_PATELT 8 -#define FC_MEM_VALLIST 9 -#define FC_MEM_SUBSTATE 10 -#define FC_MEM_STRING 11 -#define FC_MEM_LISTBUCK 12 -#define FC_MEM_STRSET 13 -#define FC_MEM_STRLIST 14 -#define FC_MEM_CONFIG 15 -#define FC_MEM_LANGSET 16 -#define FC_MEM_ATOMIC 17 -#define FC_MEM_BLANKS 18 -#define FC_MEM_CACHE 19 -#define FC_MEM_STRBUF 20 -#define FC_MEM_SUBST 21 -#define FC_MEM_OBJECTTYPE 22 -#define FC_MEM_CONSTANT 23 -#define FC_MEM_TEST 24 -#define FC_MEM_EXPR 25 -#define FC_MEM_VSTACK 26 -#define FC_MEM_ATTR 27 -#define FC_MEM_PSTACK 28 -#define FC_MEM_STATICSTR 29 - -#define FC_MEM_NUM 30 - -#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] -#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond)) -#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond)) - -#define FC_MIN(a,b) ((a) < (b) ? (a) : (b)) -#define FC_MAX(a,b) ((a) > (b) ? (a) : (b)) -#define FC_ABS(a) ((a) < 0 ? -(a) : (a)) - -/* slim_internal.h */ -#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) -#define FcPrivate __attribute__((__visibility__("hidden"))) -#define HAVE_GNUC_ATTRIBUTE 1 -#include "fcalias.h" -#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) -#define FcPrivate __hidden -#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ -#define FcPrivate -#endif - -typedef enum _FcValueBinding { - FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame -} FcValueBinding; - -/* - * Serialized data structures use only offsets instead of pointers - * A low bit of 1 indicates an offset. - */ - -/* Is the provided pointer actually an offset? */ -#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0) - -/* Encode offset in a pointer of type t */ -#define FcOffsetEncode(o,t) ((t *) ((o) | 1)) - -/* Decode a pointer into an offset */ -#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1) - -/* Compute pointer offset */ -#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b)) - -/* Given base address, offset and type, return a pointer */ -#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o))) - -/* Given base address, encoded offset and type, return a pointer */ -#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t) - -/* Given base address, pointer and type, return an encoded offset */ -#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t) - -/* Given a structure, offset member and type, return pointer */ -#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t) - -/* Given a structure, encoded offset member and type, return pointer to member */ -#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t) - -/* Given a structure, member and type, convert the member to a pointer */ -#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \ - FcEncodedOffsetMember (s,m,t) : \ - (s)->m) - -/* - * Serialized values may hold strings, charsets and langsets as pointers, - * unfortunately FcValue is an exposed type so we can't just always use - * offsets - */ -#define FcValueString(v) FcPointerMember(v,u.s,FcChar8) -#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet) -#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet) - -typedef struct _FcValueList *FcValueListPtr; - -typedef struct _FcValueList { - struct _FcValueList *next; - FcValue value; - FcValueBinding binding; -} FcValueList; - -#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList) - -typedef int FcObject; - -typedef struct _FcPatternElt *FcPatternEltPtr; - -/* - * Pattern elts are stuck in a structure connected to the pattern, - * so they get moved around when the pattern is resized. Hence, the - * values field must be a pointer/offset instead of just an offset - */ -typedef struct _FcPatternElt { - FcObject object; - FcValueList *values; -} FcPatternElt; - -#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList) - -struct _FcPattern { - int num; - int size; - intptr_t elts_offset; - int ref; -}; - -#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt) - -#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *) - -#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \ - FcEncodedOffsetToPtr(fs, \ - FcFontSetFonts(fs)[i], \ - FcPattern) : \ - fs->fonts[i]) - -typedef enum _FcOp { - FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet, - FcOpNil, - FcOpField, FcOpConst, - FcOpAssign, FcOpAssignReplace, - FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast, - FcOpQuest, - FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual, - FcOpContains, FcOpListing, FcOpNotContains, - FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual, - FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide, - FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc, - FcOpInvalid -} FcOp; - -typedef struct _FcExpr { - FcOp op; - union { - int ival; - double dval; - const FcChar8 *sval; - FcMatrix *mval; - FcBool bval; - FcCharSet *cval; - FcLangSet *lval; - FcObject object; - const FcChar8 *constant; - struct { - struct _FcExpr *left, *right; - } tree; - } u; -} FcExpr; - -typedef struct _FcExprPage FcExprPage; - -struct _FcExprPage { - FcExprPage *next_page; - FcExpr *next; - FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)]; - FcExpr end[]; -}; - -typedef enum _FcQual { - FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst -} FcQual; - -#define FcMatchDefault ((FcMatchKind) -1) - -typedef struct _FcTest { - struct _FcTest *next; - FcMatchKind kind; - FcQual qual; - FcObject object; - FcOp op; - FcExpr *expr; -} FcTest; - -typedef struct _FcEdit { - struct _FcEdit *next; - FcObject object; - FcOp op; - FcExpr *expr; - FcValueBinding binding; -} FcEdit; - -typedef struct _FcSubst { - struct _FcSubst *next; - FcTest *test; - FcEdit *edit; -} FcSubst; - -typedef struct _FcCharLeaf { - FcChar32 map[256/32]; -} FcCharLeaf; - -#define FC_REF_CONSTANT -1 - -struct _FcCharSet { - int ref; /* reference count */ - int num; /* size of leaves and numbers arrays */ - intptr_t leaves_offset; - intptr_t numbers_offset; -}; - -#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t) -#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \ - FcCharSetLeaves(c)[i], \ - FcCharLeaf)) -#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16) - -struct _FcStrSet { - int ref; /* reference count */ - int num; - int size; - FcChar8 **strs; -}; - -struct _FcStrList { - FcStrSet *set; - int n; -}; - -typedef struct _FcStrBuf { - FcChar8 *buf; - FcBool allocated; - FcBool failed; - int len; - int size; - FcChar8 buf_static[16 * sizeof (void *)]; -} FcStrBuf; - -struct _FcCache { - int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */ - int version; /* FC_CACHE_CONTENT_VERSION */ - intptr_t size; /* size of file */ - intptr_t dir; /* offset to dir name */ - intptr_t dirs; /* offset to subdirs */ - int dirs_count; /* number of subdir strings */ - intptr_t set; /* offset to font set */ - int mtime; /* low bits of directory mtime */ -}; - -#undef FcCacheDir -#undef FcCacheSubdir -#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8) -#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t) -#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet) -#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\ - FcCacheDirs(c)[i], \ - FcChar8) - -/* - * Used while constructing a directory cache object - */ - -#define FC_SERIALIZE_HASH_SIZE 8191 - -typedef union _FcAlign { - double d; - int i; - intptr_t ip; - FcBool b; - void *p; -} FcAlign; - -typedef struct _FcSerializeBucket { - struct _FcSerializeBucket *next; - const void *object; - intptr_t offset; -} FcSerializeBucket; - -typedef struct _FcCharSetFreezer FcCharSetFreezer; - -typedef struct _FcSerialize { - intptr_t size; - FcCharSetFreezer *cs_freezer; - void *linear; - FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE]; -} FcSerialize; - -/* - * To map adobe glyph names to unicode values, a precomputed hash - * table is used - */ - -typedef struct _FcGlyphName { - FcChar32 ucs; /* unicode value */ - FcChar8 name[1]; /* name extends beyond struct */ -} FcGlyphName; - -/* - * To perform case-insensitive string comparisons, a table - * is used which holds three different kinds of folding data. - * - * The first is a range of upper case values mapping to a range - * of their lower case equivalents. Within each range, the offset - * between upper and lower case is constant. - * - * The second is a range of upper case values which are interleaved - * with their lower case equivalents. - * - * The third is a set of raw unicode values mapping to a list - * of unicode values for comparison purposes. This allows conversion - * of ß to "ss" so that SS, ss and ß all match. A separate array - * holds the list of unicode values for each entry. - * - * These are packed into a single table. Using a binary search, - * the appropriate entry can be located. - */ - -#define FC_CASE_FOLD_RANGE 0 -#define FC_CASE_FOLD_EVEN_ODD 1 -#define FC_CASE_FOLD_FULL 2 - -typedef struct _FcCaseFold { - FcChar32 upper; - FcChar16 method : 2; - FcChar16 count : 14; - short offset; /* lower - upper for RANGE, table id for FULL */ -} FcCaseFold; - -#define FC_MAX_FILE_LEN 4096 - -#define FC_CACHE_MAGIC_MMAP 0xFC02FC04 -#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05 -#define FC_CACHE_CONTENT_VERSION 3 /* also check FC_CACHE_VERSION */ - -struct _FcAtomic { - FcChar8 *file; /* original file name */ - FcChar8 *new; /* temp file name -- write data here */ - FcChar8 *lck; /* lockfile name (used for locking) */ - FcChar8 *tmp; /* tmpfile name (used for locking) */ -}; - -struct _FcBlanks { - int nblank; - int sblank; - FcChar32 *blanks; -}; - -struct _FcConfig { - /* - * File names loaded from the configuration -- saved here as the - * cache file must be consulted before the directories are scanned, - * and those directives may occur in any order - */ - FcStrSet *configDirs; /* directories to scan for fonts */ - /* - * Set of allowed blank chars -- used to - * trim fonts of bogus glyphs - */ - FcBlanks *blanks; - /* - * List of directories containing fonts, - * built by recursively scanning the set - * of configured directories - */ - FcStrSet *fontDirs; - /* - * List of directories containing cache files. - */ - FcStrSet *cacheDirs; - /* - * Names of all of the configuration files used - * to create this configuration - */ - FcStrSet *configFiles; /* config files loaded */ - /* - * Substitution instructions for patterns and fonts; - * maxObjects is used to allocate appropriate intermediate storage - * while performing a whole set of substitutions - */ - FcSubst *substPattern; /* substitutions for patterns */ - FcSubst *substFont; /* substitutions for fonts */ - FcSubst *substScan; /* substitutions for scanned fonts */ - int maxObjects; /* maximum number of tests in all substs */ - /* - * List of patterns used to control font file selection - */ - FcStrSet *acceptGlobs; - FcStrSet *rejectGlobs; - FcFontSet *acceptPatterns; - FcFontSet *rejectPatterns; - /* - * The set of fonts loaded from the listed directories; the - * order within the set does not determine the font selection, - * except in the case of identical matches in which case earlier fonts - * match preferrentially - */ - FcFontSet *fonts[FcSetApplication + 1]; - /* - * Fontconfig can periodically rescan the system configuration - * and font directories. This rescanning occurs when font - * listing requests are made, but no more often than rescanInterval - * seconds apart. - */ - time_t rescanTime; /* last time information was scanned */ - int rescanInterval; /* interval between scans */ - - int ref; /* reference count */ - - FcExprPage *expr_pool; /* pool of FcExpr's */ -}; - -extern FcPrivate FcConfig *_fcConfig; - -typedef struct _FcFileTime { - time_t time; - FcBool set; -} FcFileTime; - -typedef struct _FcCharMap FcCharMap; - -typedef struct _FcRange FcRange; - -struct _FcRange { - FcChar32 begin; - FcChar32 end; -}; - -/* fcblanks.c */ - -/* fccache.c */ - -FcPrivate FcCache * -FcDirCacheScan (const FcChar8 *dir, FcConfig *config); - -FcPrivate FcCache * -FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs); - -FcPrivate FcBool -FcDirCacheWrite (FcCache *cache, FcConfig *config); - -FcPrivate void -FcCacheObjectReference (void *object); - -FcPrivate void -FcCacheObjectDereference (void *object); - -FcPrivate void -FcCacheFini (void); - -FcPrivate void -FcDirCacheReference (FcCache *cache, int nref); - -FcPrivate int -FcStat (const char *file, struct stat *statb); - -/* fccfg.c */ - -FcPrivate FcExpr * -FcConfigAllocExpr (FcConfig *config); - -FcPrivate FcBool -FcConfigAddConfigDir (FcConfig *config, - const FcChar8 *d); - -FcPrivate FcBool -FcConfigAddFontDir (FcConfig *config, - const FcChar8 *d); - -FcPrivate FcBool -FcConfigAddDir (FcConfig *config, - const FcChar8 *d); - -FcPrivate FcBool -FcConfigAddCacheDir (FcConfig *config, - const FcChar8 *d); - -FcPrivate FcBool -FcConfigAddConfigFile (FcConfig *config, - const FcChar8 *f); - -FcPrivate FcBool -FcConfigAddBlank (FcConfig *config, - FcChar32 blank); - -FcPrivate FcBool -FcConfigAddEdit (FcConfig *config, - FcTest *test, - FcEdit *edit, - FcMatchKind kind); - -FcPrivate void -FcConfigSetFonts (FcConfig *config, - FcFontSet *fonts, - FcSetName set); - -FcPrivate FcBool -FcConfigCompareValue (const FcValue *m, - FcOp op, - const FcValue *v); - -FcPrivate FcBool -FcConfigGlobAdd (FcConfig *config, - const FcChar8 *glob, - FcBool accept); - -FcPrivate FcBool -FcConfigAcceptFilename (FcConfig *config, - const FcChar8 *filename); - -FcPrivate FcBool -FcConfigPatternsAdd (FcConfig *config, - FcPattern *pattern, - FcBool accept); - -FcPrivate FcBool -FcConfigAcceptFont (FcConfig *config, - const FcPattern *font); - -FcPrivate FcFileTime -FcConfigModifiedTime (FcConfig *config); - -FcPrivate FcBool -FcConfigAddCache (FcConfig *config, FcCache *cache, - FcSetName set, FcStrSet *dirSet); - -/* fcserialize.c */ -FcPrivate intptr_t -FcAlignSize (intptr_t size); - -FcPrivate FcSerialize * -FcSerializeCreate (void); - -FcPrivate void -FcSerializeDestroy (FcSerialize *serialize); - -FcPrivate FcBool -FcSerializeAlloc (FcSerialize *serialize, const void *object, int size); - -FcPrivate intptr_t -FcSerializeReserve (FcSerialize *serialize, int size); - -FcPrivate intptr_t -FcSerializeOffset (FcSerialize *serialize, const void *object); - -FcPrivate void * -FcSerializePtr (FcSerialize *serialize, const void *object); - -FcPrivate FcBool -FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l); - -FcPrivate FcLangSet * -FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l); - -/* fccharset.c */ -FcPrivate void -FcLangCharSetPopulate (void); - -FcPrivate FcCharSetFreezer * -FcCharSetFreezerCreate (void); - -FcPrivate const FcCharSet * -FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs); - -FcPrivate void -FcCharSetFreezerDestroy (FcCharSetFreezer *freezer); - -FcPrivate FcBool -FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c); - -FcPrivate FcCharSet * -FcNameParseCharSet (FcChar8 *string); - -FcPrivate FcBool -FcNameUnparseValue (FcStrBuf *buf, - FcValue *v0, - FcChar8 *escape); - -FcPrivate FcBool -FcNameUnparseValueList (FcStrBuf *buf, - FcValueListPtr v, - FcChar8 *escape); - -FcPrivate FcCharLeaf * -FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4); - -FcPrivate FcBool -FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs); - -FcPrivate FcCharSet * -FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs); - -FcPrivate FcChar16 * -FcCharSetGetNumbers(const FcCharSet *c); - -/* fcdbg.c */ -FcPrivate void -FcValueListPrint (const FcValueListPtr l); - -FcPrivate void -FcLangSetPrint (const FcLangSet *ls); - -FcPrivate void -FcOpPrint (FcOp op); - -FcPrivate void -FcTestPrint (const FcTest *test); - -FcPrivate void -FcExprPrint (const FcExpr *expr); - -FcPrivate void -FcEditPrint (const FcEdit *edit); - -FcPrivate void -FcSubstPrint (const FcSubst *subst); - -FcPrivate void -FcCharSetPrint (const FcCharSet *c); - -extern FcPrivate int FcDebugVal; - -#define FcDebug() (FcDebugVal) - -FcPrivate void -FcInitDebug (void); - -/* fcdefault.c */ -FcPrivate FcChar8 * -FcGetDefaultLang (void); - -/* fcdir.c */ - -FcPrivate FcBool -FcFileScanConfig (FcFontSet *set, - FcStrSet *dirs, - FcBlanks *blanks, - const FcChar8 *file, - FcConfig *config); - -FcPrivate FcBool -FcDirScanConfig (FcFontSet *set, - FcStrSet *dirs, - FcBlanks *blanks, - const FcChar8 *dir, - FcBool force, - FcConfig *config); - -/* fcfont.c */ -FcPrivate int -FcFontDebug (void); - -/* fcfs.c */ - -FcPrivate FcBool -FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s); - -FcPrivate FcFontSet * -FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s); - -/* fcxml.c */ -FcPrivate void -FcTestDestroy (FcTest *test); - -FcPrivate void -FcEditDestroy (FcEdit *e); - -/* fcinit.c */ - -FcPrivate void -FcMemReport (void); - -FcPrivate void -FcMemAlloc (int kind, int size); - -FcPrivate void -FcMemFree (int kind, int size); - -/* fclang.c */ -FcPrivate FcLangSet * -FcFreeTypeLangSet (const FcCharSet *charset, - const FcChar8 *exclusiveLang); - -FcPrivate FcLangResult -FcLangCompare (const FcChar8 *s1, const FcChar8 *s2); - -FcPrivate FcLangSet * -FcLangSetPromote (const FcChar8 *lang); - -FcPrivate FcLangSet * -FcNameParseLangSet (const FcChar8 *string); - -FcPrivate FcBool -FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls); - -FcPrivate FcChar8 * -FcNameUnparseEscaped (FcPattern *pat, FcBool escape); - -/* fclist.c */ - -FcPrivate FcBool -FcListPatternMatchAny (const FcPattern *p, - const FcPattern *font); - -/* fcmatch.c */ - -/* fcname.c */ - -/* - * NOTE -- this ordering is part of the cache file format. - * It must also match the ordering in fcname.c - */ - -#define FC_FAMILY_OBJECT 1 -#define FC_FAMILYLANG_OBJECT 2 -#define FC_STYLE_OBJECT 3 -#define FC_STYLELANG_OBJECT 4 -#define FC_FULLNAME_OBJECT 5 -#define FC_FULLNAMELANG_OBJECT 6 -#define FC_SLANT_OBJECT 7 -#define FC_WEIGHT_OBJECT 8 -#define FC_WIDTH_OBJECT 9 -#define FC_SIZE_OBJECT 10 -#define FC_ASPECT_OBJECT 11 -#define FC_PIXEL_SIZE_OBJECT 12 -#define FC_SPACING_OBJECT 13 -#define FC_FOUNDRY_OBJECT 14 -#define FC_ANTIALIAS_OBJECT 15 -#define FC_HINT_STYLE_OBJECT 16 -#define FC_HINTING_OBJECT 17 -#define FC_VERTICAL_LAYOUT_OBJECT 18 -#define FC_AUTOHINT_OBJECT 19 -#define FC_GLOBAL_ADVANCE_OBJECT 20 -#define FC_FILE_OBJECT 21 -#define FC_INDEX_OBJECT 22 -#define FC_RASTERIZER_OBJECT 23 -#define FC_OUTLINE_OBJECT 24 -#define FC_SCALABLE_OBJECT 25 -#define FC_DPI_OBJECT 26 -#define FC_RGBA_OBJECT 27 -#define FC_SCALE_OBJECT 28 -#define FC_MINSPACE_OBJECT 29 -#define FC_CHAR_WIDTH_OBJECT 30 -#define FC_CHAR_HEIGHT_OBJECT 31 -#define FC_MATRIX_OBJECT 32 -#define FC_CHARSET_OBJECT 33 -#define FC_LANG_OBJECT 34 -#define FC_FONTVERSION_OBJECT 35 -#define FC_CAPABILITY_OBJECT 36 -#define FC_FONTFORMAT_OBJECT 37 -#define FC_EMBOLDEN_OBJECT 38 -#define FC_EMBEDDED_BITMAP_OBJECT 39 -#define FC_DECORATIVE_OBJECT 40 -#define FC_LCD_FILTER_OBJECT 41 -#define FC_MAX_BASE_OBJECT FC_LCD_FILTER_OBJECT - -FcPrivate FcBool -FcNameBool (const FcChar8 *v, FcBool *result); - -FcPrivate FcBool -FcObjectValidType (FcObject object, FcType type); - -FcPrivate FcObject -FcObjectFromName (const char * name); - -FcPrivate const char * -FcObjectName (FcObject object); - -FcPrivate FcObjectSet * -FcObjectGetSet (void); - -FcPrivate FcBool -FcObjectInit (void); - -FcPrivate void -FcObjectFini (void); - -#define FcObjectCompare(a, b) ((int) a - (int) b) - -/* fcpat.c */ - -FcPrivate FcValue -FcValueCanonicalize (const FcValue *v); - -FcPrivate void -FcValueListDestroy (FcValueListPtr l); - -FcPrivate FcPatternElt * -FcPatternObjectFindElt (const FcPattern *p, FcObject object); - -FcPrivate FcPatternElt * -FcPatternObjectInsertElt (FcPattern *p, FcObject object); - -FcPrivate FcBool -FcPatternObjectAddWithBinding (FcPattern *p, - FcObject object, - FcValue value, - FcValueBinding binding, - FcBool append); - -FcPrivate FcBool -FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append); - -FcPrivate FcBool -FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append); - -FcPrivate FcResult -FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v); - -FcPrivate FcBool -FcPatternObjectDel (FcPattern *p, FcObject object); - -FcPrivate FcBool -FcPatternObjectRemove (FcPattern *p, FcObject object, int id); - -FcPrivate FcBool -FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i); - -FcPrivate FcBool -FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d); - -FcPrivate FcBool -FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s); - -FcPrivate FcBool -FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s); - -FcPrivate FcBool -FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c); - -FcPrivate FcBool -FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b); - -FcPrivate FcBool -FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls); - -FcPrivate FcResult -FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i); - -FcPrivate FcResult -FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d); - -FcPrivate FcResult -FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s); - -FcPrivate FcResult -FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s); - -FcPrivate FcResult -FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c); - -FcPrivate FcResult -FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b); - -FcPrivate FcResult -FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls); - -FcPrivate void -FcPatternFini (void); - -FcPrivate FcBool -FcPatternAppend (FcPattern *p, FcPattern *s); - -FcPrivate const FcChar8 * -FcStrStaticName (const FcChar8 *name); - -FcPrivate FcChar32 -FcStringHash (const FcChar8 *s); - -FcPrivate FcBool -FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat); - -FcPrivate FcPattern * -FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat); - -FcPrivate FcBool -FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat); - -FcPrivate FcValueList * -FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat); - -/* fcrender.c */ - -/* fcmatrix.c */ - -extern FcPrivate const FcMatrix FcIdentityMatrix; - -FcPrivate void -FcMatrixFree (FcMatrix *mat); - -/* fcstr.c */ -FcPrivate void -FcStrSetSort (FcStrSet * set); - -FcPrivate void -FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size); - -FcPrivate void -FcStrBufDestroy (FcStrBuf *buf); - -FcPrivate FcChar8 * -FcStrBufDone (FcStrBuf *buf); - -FcPrivate FcChar8 * -FcStrBufDoneStatic (FcStrBuf *buf); - -FcPrivate FcBool -FcStrBufChar (FcStrBuf *buf, FcChar8 c); - -FcPrivate FcBool -FcStrBufString (FcStrBuf *buf, const FcChar8 *s); - -FcPrivate FcBool -FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len); - -FcPrivate int -FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); - -FcPrivate const FcChar8 * -FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); - -FcPrivate const FcChar8 * -FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); - -FcPrivate const FcChar8 * -FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2); - -FcPrivate FcBool -FcStrUsesHome (const FcChar8 *s); - -FcPrivate FcChar8 * -FcStrLastSlash (const FcChar8 *path); - -FcPrivate FcChar32 -FcStrHashIgnoreCase (const FcChar8 *s); - -FcPrivate FcChar8 * -FcStrCanonFilename (const FcChar8 *s); - -FcPrivate FcBool -FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str); - -FcPrivate FcChar8 * -FcStrSerialize (FcSerialize *serialize, const FcChar8 *str); - -#endif /* _FC_INT_H_ */ +/* + * fontconfig/src/fcint.h + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#ifndef _FCINT_H_ +#define _FCINT_H_ + +#ifdef HAVE_CONFIG_H +#include +#endif + +#include +#include +#ifdef HAVE_INTTYPES_H +#include +#elif defined(HAVE_STDINT_H) +#include +#else +#error missing C99 integer data types +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "fcdeprecate.h" + +#ifndef FC_CONFIG_PATH +#define FC_CONFIG_PATH "fonts.conf" +#endif + +#ifdef _WIN32 +#define FC_SEARCH_PATH_SEPARATOR ';' +#else +#define FC_SEARCH_PATH_SEPARATOR ':' +#endif + +#define FC_DBG_MATCH 1 +#define FC_DBG_MATCHV 2 +#define FC_DBG_EDIT 4 +#define FC_DBG_FONTSET 8 +#define FC_DBG_CACHE 16 +#define FC_DBG_CACHEV 32 +#define FC_DBG_PARSE 64 +#define FC_DBG_SCAN 128 +#define FC_DBG_SCANV 256 +#define FC_DBG_MEMORY 512 +#define FC_DBG_CONFIG 1024 +#define FC_DBG_LANGSET 2048 +#define FC_DBG_OBJTYPES 4096 + +#define FC_MEM_CHARSET 0 +#define FC_MEM_CHARLEAF 1 +#define FC_MEM_FONTSET 2 +#define FC_MEM_FONTPTR 3 +#define FC_MEM_OBJECTSET 4 +#define FC_MEM_OBJECTPTR 5 +#define FC_MEM_MATRIX 6 +#define FC_MEM_PATTERN 7 +#define FC_MEM_PATELT 8 +#define FC_MEM_VALLIST 9 +#define FC_MEM_SUBSTATE 10 +#define FC_MEM_STRING 11 +#define FC_MEM_LISTBUCK 12 +#define FC_MEM_STRSET 13 +#define FC_MEM_STRLIST 14 +#define FC_MEM_CONFIG 15 +#define FC_MEM_LANGSET 16 +#define FC_MEM_ATOMIC 17 +#define FC_MEM_BLANKS 18 +#define FC_MEM_CACHE 19 +#define FC_MEM_STRBUF 20 +#define FC_MEM_SUBST 21 +#define FC_MEM_OBJECTTYPE 22 +#define FC_MEM_CONSTANT 23 +#define FC_MEM_TEST 24 +#define FC_MEM_EXPR 25 +#define FC_MEM_VSTACK 26 +#define FC_MEM_ATTR 27 +#define FC_MEM_PSTACK 28 +#define FC_MEM_STATICSTR 29 + +#define FC_MEM_NUM 30 + +#define _FC_ASSERT_STATIC1(_line, _cond) typedef int _static_assert_on_line_##_line##_failed[(_cond)?1:-1] +#define _FC_ASSERT_STATIC0(_line, _cond) _FC_ASSERT_STATIC1 (_line, (_cond)) +#define FC_ASSERT_STATIC(_cond) _FC_ASSERT_STATIC0 (__LINE__, (_cond)) + +#define FC_MIN(a,b) ((a) < (b) ? (a) : (b)) +#define FC_MAX(a,b) ((a) > (b) ? (a) : (b)) +#define FC_ABS(a) ((a) < 0 ? -(a) : (a)) + +/* slim_internal.h */ +#if (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3)) && defined(__ELF__) && !defined(__sun) +#define FcPrivate __attribute__((__visibility__("hidden"))) +#define HAVE_GNUC_ATTRIBUTE 1 +#include "fcalias.h" +#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x550) +#define FcPrivate __hidden +#else /* not gcc >= 3.3 and not Sun Studio >= 8 */ +#define FcPrivate +#endif + +typedef enum _FcValueBinding { + FcValueBindingWeak, FcValueBindingStrong, FcValueBindingSame +} FcValueBinding; + +/* + * Serialized data structures use only offsets instead of pointers + * A low bit of 1 indicates an offset. + */ + +/* Is the provided pointer actually an offset? */ +#define FcIsEncodedOffset(p) ((((intptr_t) (p)) & 1) != 0) + +/* Encode offset in a pointer of type t */ +#define FcOffsetEncode(o,t) ((t *) ((o) | 1)) + +/* Decode a pointer into an offset */ +#define FcOffsetDecode(p) (((intptr_t) (p)) & ~1) + +/* Compute pointer offset */ +#define FcPtrToOffset(b,p) ((intptr_t) (p) - (intptr_t) (b)) + +/* Given base address, offset and type, return a pointer */ +#define FcOffsetToPtr(b,o,t) ((t *) ((intptr_t) (b) + (o))) + +/* Given base address, encoded offset and type, return a pointer */ +#define FcEncodedOffsetToPtr(b,p,t) FcOffsetToPtr(b,FcOffsetDecode(p),t) + +/* Given base address, pointer and type, return an encoded offset */ +#define FcPtrToEncodedOffset(b,p,t) FcOffsetEncode(FcPtrToOffset(b,p),t) + +/* Given a structure, offset member and type, return pointer */ +#define FcOffsetMember(s,m,t) FcOffsetToPtr(s,(s)->m,t) + +/* Given a structure, encoded offset member and type, return pointer to member */ +#define FcEncodedOffsetMember(s,m,t) FcOffsetToPtr(s,FcOffsetDecode((s)->m), t) + +/* Given a structure, member and type, convert the member to a pointer */ +#define FcPointerMember(s,m,t) (FcIsEncodedOffset((s)->m) ? \ + FcEncodedOffsetMember (s,m,t) : \ + (s)->m) + +/* + * Serialized values may hold strings, charsets and langsets as pointers, + * unfortunately FcValue is an exposed type so we can't just always use + * offsets + */ +#define FcValueString(v) FcPointerMember(v,u.s,FcChar8) +#define FcValueCharSet(v) FcPointerMember(v,u.c,const FcCharSet) +#define FcValueLangSet(v) FcPointerMember(v,u.l,const FcLangSet) + +typedef struct _FcValueList *FcValueListPtr; + +typedef struct _FcValueList { + struct _FcValueList *next; + FcValue value; + FcValueBinding binding; +} FcValueList; + +#define FcValueListNext(vl) FcPointerMember(vl,next,FcValueList) + +typedef int FcObject; + +typedef struct _FcPatternElt *FcPatternEltPtr; + +/* + * Pattern elts are stuck in a structure connected to the pattern, + * so they get moved around when the pattern is resized. Hence, the + * values field must be a pointer/offset instead of just an offset + */ +typedef struct _FcPatternElt { + FcObject object; + FcValueList *values; +} FcPatternElt; + +#define FcPatternEltValues(pe) FcPointerMember(pe,values,FcValueList) + +struct _FcPattern { + int num; + int size; + intptr_t elts_offset; + int ref; +}; + +#define FcPatternElts(p) FcOffsetMember(p,elts_offset,FcPatternElt) + +#define FcFontSetFonts(fs) FcPointerMember(fs,fonts,FcPattern *) + +#define FcFontSetFont(fs,i) (FcIsEncodedOffset((fs)->fonts) ? \ + FcEncodedOffsetToPtr(fs, \ + FcFontSetFonts(fs)[i], \ + FcPattern) : \ + fs->fonts[i]) + +typedef enum _FcOp { + FcOpInteger, FcOpDouble, FcOpString, FcOpMatrix, FcOpRange, FcOpBool, FcOpCharSet, FcOpLangSet, + FcOpNil, + FcOpField, FcOpConst, + FcOpAssign, FcOpAssignReplace, + FcOpPrependFirst, FcOpPrepend, FcOpAppend, FcOpAppendLast, + FcOpQuest, + FcOpOr, FcOpAnd, FcOpEqual, FcOpNotEqual, + FcOpContains, FcOpListing, FcOpNotContains, + FcOpLess, FcOpLessEqual, FcOpMore, FcOpMoreEqual, + FcOpPlus, FcOpMinus, FcOpTimes, FcOpDivide, + FcOpNot, FcOpComma, FcOpFloor, FcOpCeil, FcOpRound, FcOpTrunc, + FcOpInvalid +} FcOp; + +typedef struct _FcExpr { + FcOp op; + union { + int ival; + double dval; + const FcChar8 *sval; + FcMatrix *mval; + FcBool bval; + FcCharSet *cval; + FcLangSet *lval; + FcObject object; + const FcChar8 *constant; + struct { + struct _FcExpr *left, *right; + } tree; + } u; +} FcExpr; + +typedef struct _FcExprPage FcExprPage; + +struct _FcExprPage { + FcExprPage *next_page; + FcExpr *next; + FcExpr exprs[(1024 - 2/* two pointers */ - 2/* malloc overhead */) * sizeof (void *) / sizeof (FcExpr)]; + FcExpr end[]; +}; + +typedef enum _FcQual { + FcQualAny, FcQualAll, FcQualFirst, FcQualNotFirst +} FcQual; + +#define FcMatchDefault ((FcMatchKind) -1) + +typedef struct _FcTest { + struct _FcTest *next; + FcMatchKind kind; + FcQual qual; + FcObject object; + FcOp op; + FcExpr *expr; +} FcTest; + +typedef struct _FcEdit { + struct _FcEdit *next; + FcObject object; + FcOp op; + FcExpr *expr; + FcValueBinding binding; +} FcEdit; + +typedef struct _FcSubst { + struct _FcSubst *next; + FcTest *test; + FcEdit *edit; +} FcSubst; + +typedef struct _FcCharLeaf { + FcChar32 map[256/32]; +} FcCharLeaf; + +#define FC_REF_CONSTANT -1 + +struct _FcCharSet { + int ref; /* reference count */ + int num; /* size of leaves and numbers arrays */ + intptr_t leaves_offset; + intptr_t numbers_offset; +}; + +#define FcCharSetLeaves(c) FcOffsetMember(c,leaves_offset,intptr_t) +#define FcCharSetLeaf(c,i) (FcOffsetToPtr(FcCharSetLeaves(c), \ + FcCharSetLeaves(c)[i], \ + FcCharLeaf)) +#define FcCharSetNumbers(c) FcOffsetMember(c,numbers_offset,FcChar16) + +struct _FcStrSet { + int ref; /* reference count */ + int num; + int size; + FcChar8 **strs; +}; + +struct _FcStrList { + FcStrSet *set; + int n; +}; + +typedef struct _FcStrBuf { + FcChar8 *buf; + FcBool allocated; + FcBool failed; + int len; + int size; + FcChar8 buf_static[16 * sizeof (void *)]; +} FcStrBuf; + +struct _FcCache { + int magic; /* FC_CACHE_MAGIC_MMAP or FC_CACHE_ALLOC */ + int version; /* FC_CACHE_CONTENT_VERSION */ + intptr_t size; /* size of file */ + intptr_t dir; /* offset to dir name */ + intptr_t dirs; /* offset to subdirs */ + int dirs_count; /* number of subdir strings */ + intptr_t set; /* offset to font set */ + int mtime; /* low bits of directory mtime */ +}; + +#undef FcCacheDir +#undef FcCacheSubdir +#define FcCacheDir(c) FcOffsetMember(c,dir,FcChar8) +#define FcCacheDirs(c) FcOffsetMember(c,dirs,intptr_t) +#define FcCacheSet(c) FcOffsetMember(c,set,FcFontSet) +#define FcCacheSubdir(c,i) FcOffsetToPtr (FcCacheDirs(c),\ + FcCacheDirs(c)[i], \ + FcChar8) + +/* + * Used while constructing a directory cache object + */ + +#define FC_SERIALIZE_HASH_SIZE 8191 + +typedef union _FcAlign { + double d; + int i; + intptr_t ip; + FcBool b; + void *p; +} FcAlign; + +typedef struct _FcSerializeBucket { + struct _FcSerializeBucket *next; + const void *object; + intptr_t offset; +} FcSerializeBucket; + +typedef struct _FcCharSetFreezer FcCharSetFreezer; + +typedef struct _FcSerialize { + intptr_t size; + FcCharSetFreezer *cs_freezer; + void *linear; + FcSerializeBucket *buckets[FC_SERIALIZE_HASH_SIZE]; +} FcSerialize; + +/* + * To map adobe glyph names to unicode values, a precomputed hash + * table is used + */ + +typedef struct _FcGlyphName { + FcChar32 ucs; /* unicode value */ + FcChar8 name[1]; /* name extends beyond struct */ +} FcGlyphName; + +/* + * To perform case-insensitive string comparisons, a table + * is used which holds three different kinds of folding data. + * + * The first is a range of upper case values mapping to a range + * of their lower case equivalents. Within each range, the offset + * between upper and lower case is constant. + * + * The second is a range of upper case values which are interleaved + * with their lower case equivalents. + * + * The third is a set of raw unicode values mapping to a list + * of unicode values for comparison purposes. This allows conversion + * of ß to "ss" so that SS, ss and ß all match. A separate array + * holds the list of unicode values for each entry. + * + * These are packed into a single table. Using a binary search, + * the appropriate entry can be located. + */ + +#define FC_CASE_FOLD_RANGE 0 +#define FC_CASE_FOLD_EVEN_ODD 1 +#define FC_CASE_FOLD_FULL 2 + +typedef struct _FcCaseFold { + FcChar32 upper; + FcChar16 method : 2; + FcChar16 count : 14; + short offset; /* lower - upper for RANGE, table id for FULL */ +} FcCaseFold; + +#define FC_MAX_FILE_LEN 4096 + +#define FC_CACHE_MAGIC_MMAP 0xFC02FC04 +#define FC_CACHE_MAGIC_ALLOC 0xFC02FC05 +#define FC_CACHE_CONTENT_VERSION 3 /* also check FC_CACHE_VERSION */ + +struct _FcAtomic { + FcChar8 *file; /* original file name */ + FcChar8 *new; /* temp file name -- write data here */ + FcChar8 *lck; /* lockfile name (used for locking) */ + FcChar8 *tmp; /* tmpfile name (used for locking) */ +}; + +struct _FcBlanks { + int nblank; + int sblank; + FcChar32 *blanks; +}; + +struct _FcConfig { + /* + * File names loaded from the configuration -- saved here as the + * cache file must be consulted before the directories are scanned, + * and those directives may occur in any order + */ + FcStrSet *configDirs; /* directories to scan for fonts */ + /* + * Set of allowed blank chars -- used to + * trim fonts of bogus glyphs + */ + FcBlanks *blanks; + /* + * List of directories containing fonts, + * built by recursively scanning the set + * of configured directories + */ + FcStrSet *fontDirs; + /* + * List of directories containing cache files. + */ + FcStrSet *cacheDirs; + /* + * Names of all of the configuration files used + * to create this configuration + */ + FcStrSet *configFiles; /* config files loaded */ + /* + * Substitution instructions for patterns and fonts; + * maxObjects is used to allocate appropriate intermediate storage + * while performing a whole set of substitutions + */ + FcSubst *substPattern; /* substitutions for patterns */ + FcSubst *substFont; /* substitutions for fonts */ + FcSubst *substScan; /* substitutions for scanned fonts */ + int maxObjects; /* maximum number of tests in all substs */ + /* + * List of patterns used to control font file selection + */ + FcStrSet *acceptGlobs; + FcStrSet *rejectGlobs; + FcFontSet *acceptPatterns; + FcFontSet *rejectPatterns; + /* + * The set of fonts loaded from the listed directories; the + * order within the set does not determine the font selection, + * except in the case of identical matches in which case earlier fonts + * match preferrentially + */ + FcFontSet *fonts[FcSetApplication + 1]; + /* + * Fontconfig can periodically rescan the system configuration + * and font directories. This rescanning occurs when font + * listing requests are made, but no more often than rescanInterval + * seconds apart. + */ + time_t rescanTime; /* last time information was scanned */ + int rescanInterval; /* interval between scans */ + + int ref; /* reference count */ + + FcExprPage *expr_pool; /* pool of FcExpr's */ +}; + +extern FcPrivate FcConfig *_fcConfig; + +typedef struct _FcFileTime { + time_t time; + FcBool set; +} FcFileTime; + +typedef struct _FcCharMap FcCharMap; + +typedef struct _FcRange FcRange; + +struct _FcRange { + FcChar32 begin; + FcChar32 end; +}; + +/* fcblanks.c */ + +/* fccache.c */ + +FcPrivate FcCache * +FcDirCacheScan (const FcChar8 *dir, FcConfig *config); + +FcPrivate FcCache * +FcDirCacheBuild (FcFontSet *set, const FcChar8 *dir, struct stat *dir_stat, FcStrSet *dirs); + +FcPrivate FcBool +FcDirCacheWrite (FcCache *cache, FcConfig *config); + +FcPrivate void +FcCacheObjectReference (void *object); + +FcPrivate void +FcCacheObjectDereference (void *object); + +FcPrivate void +FcCacheFini (void); + +FcPrivate void +FcDirCacheReference (FcCache *cache, int nref); + +FcPrivate int +FcStat (const char *file, struct stat *statb); + +/* fccfg.c */ + +FcPrivate FcExpr * +FcConfigAllocExpr (FcConfig *config); + +FcPrivate FcBool +FcConfigAddConfigDir (FcConfig *config, + const FcChar8 *d); + +FcPrivate FcBool +FcConfigAddFontDir (FcConfig *config, + const FcChar8 *d); + +FcPrivate FcBool +FcConfigAddDir (FcConfig *config, + const FcChar8 *d); + +FcPrivate FcBool +FcConfigAddCacheDir (FcConfig *config, + const FcChar8 *d); + +FcPrivate FcBool +FcConfigAddConfigFile (FcConfig *config, + const FcChar8 *f); + +FcPrivate FcBool +FcConfigAddBlank (FcConfig *config, + FcChar32 blank); + +FcPrivate FcBool +FcConfigAddEdit (FcConfig *config, + FcTest *test, + FcEdit *edit, + FcMatchKind kind); + +FcPrivate void +FcConfigSetFonts (FcConfig *config, + FcFontSet *fonts, + FcSetName set); + +FcPrivate FcBool +FcConfigCompareValue (const FcValue *m, + FcOp op, + const FcValue *v); + +FcPrivate FcBool +FcConfigGlobAdd (FcConfig *config, + const FcChar8 *glob, + FcBool accept); + +FcPrivate FcBool +FcConfigAcceptFilename (FcConfig *config, + const FcChar8 *filename); + +FcPrivate FcBool +FcConfigPatternsAdd (FcConfig *config, + FcPattern *pattern, + FcBool accept); + +FcPrivate FcBool +FcConfigAcceptFont (FcConfig *config, + const FcPattern *font); + +FcPrivate FcFileTime +FcConfigModifiedTime (FcConfig *config); + +FcPrivate FcBool +FcConfigAddCache (FcConfig *config, FcCache *cache, + FcSetName set, FcStrSet *dirSet); + +/* fcserialize.c */ +FcPrivate intptr_t +FcAlignSize (intptr_t size); + +FcPrivate FcSerialize * +FcSerializeCreate (void); + +FcPrivate void +FcSerializeDestroy (FcSerialize *serialize); + +FcPrivate FcBool +FcSerializeAlloc (FcSerialize *serialize, const void *object, int size); + +FcPrivate intptr_t +FcSerializeReserve (FcSerialize *serialize, int size); + +FcPrivate intptr_t +FcSerializeOffset (FcSerialize *serialize, const void *object); + +FcPrivate void * +FcSerializePtr (FcSerialize *serialize, const void *object); + +FcPrivate FcBool +FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l); + +FcPrivate FcLangSet * +FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l); + +/* fccharset.c */ +FcPrivate void +FcLangCharSetPopulate (void); + +FcPrivate FcCharSetFreezer * +FcCharSetFreezerCreate (void); + +FcPrivate const FcCharSet * +FcCharSetFreeze (FcCharSetFreezer *freezer, const FcCharSet *fcs); + +FcPrivate void +FcCharSetFreezerDestroy (FcCharSetFreezer *freezer); + +FcPrivate FcBool +FcNameUnparseCharSet (FcStrBuf *buf, const FcCharSet *c); + +FcPrivate FcCharSet * +FcNameParseCharSet (FcChar8 *string); + +FcPrivate FcBool +FcNameUnparseValue (FcStrBuf *buf, + FcValue *v0, + FcChar8 *escape); + +FcPrivate FcBool +FcNameUnparseValueList (FcStrBuf *buf, + FcValueListPtr v, + FcChar8 *escape); + +FcPrivate FcCharLeaf * +FcCharSetFindLeafCreate (FcCharSet *fcs, FcChar32 ucs4); + +FcPrivate FcBool +FcCharSetSerializeAlloc(FcSerialize *serialize, const FcCharSet *cs); + +FcPrivate FcCharSet * +FcCharSetSerialize(FcSerialize *serialize, const FcCharSet *cs); + +FcPrivate FcChar16 * +FcCharSetGetNumbers(const FcCharSet *c); + +/* fcdbg.c */ +FcPrivate void +FcValueListPrint (const FcValueListPtr l); + +FcPrivate void +FcLangSetPrint (const FcLangSet *ls); + +FcPrivate void +FcOpPrint (FcOp op); + +FcPrivate void +FcTestPrint (const FcTest *test); + +FcPrivate void +FcExprPrint (const FcExpr *expr); + +FcPrivate void +FcEditPrint (const FcEdit *edit); + +FcPrivate void +FcSubstPrint (const FcSubst *subst); + +FcPrivate void +FcCharSetPrint (const FcCharSet *c); + +extern FcPrivate int FcDebugVal; + +#define FcDebug() (FcDebugVal) + +FcPrivate void +FcInitDebug (void); + +/* fcdefault.c */ +FcPrivate FcChar8 * +FcGetDefaultLang (void); + +/* fcdir.c */ + +FcPrivate FcBool +FcFileScanConfig (FcFontSet *set, + FcStrSet *dirs, + FcBlanks *blanks, + const FcChar8 *file, + FcConfig *config); + +FcPrivate FcBool +FcDirScanConfig (FcFontSet *set, + FcStrSet *dirs, + FcBlanks *blanks, + const FcChar8 *dir, + FcBool force, + FcConfig *config); + +/* fcfont.c */ +FcPrivate int +FcFontDebug (void); + +/* fcfs.c */ + +FcPrivate FcBool +FcFontSetSerializeAlloc (FcSerialize *serialize, const FcFontSet *s); + +FcPrivate FcFontSet * +FcFontSetSerialize (FcSerialize *serialize, const FcFontSet * s); + +/* fcxml.c */ +FcPrivate void +FcTestDestroy (FcTest *test); + +FcPrivate void +FcEditDestroy (FcEdit *e); + +/* fcinit.c */ + +FcPrivate void +FcMemReport (void); + +FcPrivate void +FcMemAlloc (int kind, int size); + +FcPrivate void +FcMemFree (int kind, int size); + +/* fclang.c */ +FcPrivate FcLangSet * +FcFreeTypeLangSet (const FcCharSet *charset, + const FcChar8 *exclusiveLang); + +FcPrivate FcLangResult +FcLangCompare (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate FcLangSet * +FcLangSetPromote (const FcChar8 *lang); + +FcPrivate FcLangSet * +FcNameParseLangSet (const FcChar8 *string); + +FcPrivate FcBool +FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls); + +FcPrivate FcChar8 * +FcNameUnparseEscaped (FcPattern *pat, FcBool escape); + +/* fclist.c */ + +FcPrivate FcBool +FcListPatternMatchAny (const FcPattern *p, + const FcPattern *font); + +/* fcmatch.c */ + +/* fcname.c */ + +/* + * NOTE -- this ordering is part of the cache file format. + * It must also match the ordering in fcname.c + */ + +#define FC_FAMILY_OBJECT 1 +#define FC_FAMILYLANG_OBJECT 2 +#define FC_STYLE_OBJECT 3 +#define FC_STYLELANG_OBJECT 4 +#define FC_FULLNAME_OBJECT 5 +#define FC_FULLNAMELANG_OBJECT 6 +#define FC_SLANT_OBJECT 7 +#define FC_WEIGHT_OBJECT 8 +#define FC_WIDTH_OBJECT 9 +#define FC_SIZE_OBJECT 10 +#define FC_ASPECT_OBJECT 11 +#define FC_PIXEL_SIZE_OBJECT 12 +#define FC_SPACING_OBJECT 13 +#define FC_FOUNDRY_OBJECT 14 +#define FC_ANTIALIAS_OBJECT 15 +#define FC_HINT_STYLE_OBJECT 16 +#define FC_HINTING_OBJECT 17 +#define FC_VERTICAL_LAYOUT_OBJECT 18 +#define FC_AUTOHINT_OBJECT 19 +#define FC_GLOBAL_ADVANCE_OBJECT 20 +#define FC_FILE_OBJECT 21 +#define FC_INDEX_OBJECT 22 +#define FC_RASTERIZER_OBJECT 23 +#define FC_OUTLINE_OBJECT 24 +#define FC_SCALABLE_OBJECT 25 +#define FC_DPI_OBJECT 26 +#define FC_RGBA_OBJECT 27 +#define FC_SCALE_OBJECT 28 +#define FC_MINSPACE_OBJECT 29 +#define FC_CHAR_WIDTH_OBJECT 30 +#define FC_CHAR_HEIGHT_OBJECT 31 +#define FC_MATRIX_OBJECT 32 +#define FC_CHARSET_OBJECT 33 +#define FC_LANG_OBJECT 34 +#define FC_FONTVERSION_OBJECT 35 +#define FC_CAPABILITY_OBJECT 36 +#define FC_FONTFORMAT_OBJECT 37 +#define FC_EMBOLDEN_OBJECT 38 +#define FC_EMBEDDED_BITMAP_OBJECT 39 +#define FC_DECORATIVE_OBJECT 40 +#define FC_LCD_FILTER_OBJECT 41 +#define FC_MAX_BASE_OBJECT FC_LCD_FILTER_OBJECT + +FcPrivate FcBool +FcNameBool (const FcChar8 *v, FcBool *result); + +FcPrivate FcBool +FcObjectValidType (FcObject object, FcType type); + +FcPrivate FcObject +FcObjectFromName (const char * name); + +FcPrivate const char * +FcObjectName (FcObject object); + +FcPrivate FcObjectSet * +FcObjectGetSet (void); + +FcPrivate FcBool +FcObjectInit (void); + +FcPrivate void +FcObjectFini (void); + +#define FcObjectCompare(a, b) ((int) a - (int) b) + +/* fcpat.c */ + +FcPrivate FcValue +FcValueCanonicalize (const FcValue *v); + +FcPrivate void +FcValueListDestroy (FcValueListPtr l); + +FcPrivate FcPatternElt * +FcPatternObjectFindElt (const FcPattern *p, FcObject object); + +FcPrivate FcPatternElt * +FcPatternObjectInsertElt (FcPattern *p, FcObject object); + +FcPrivate FcBool +FcPatternObjectAddWithBinding (FcPattern *p, + FcObject object, + FcValue value, + FcValueBinding binding, + FcBool append); + +FcPrivate FcBool +FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append); + +FcPrivate FcBool +FcPatternObjectAddWeak (FcPattern *p, FcObject object, FcValue value, FcBool append); + +FcPrivate FcResult +FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v); + +FcPrivate FcBool +FcPatternObjectDel (FcPattern *p, FcObject object); + +FcPrivate FcBool +FcPatternObjectRemove (FcPattern *p, FcObject object, int id); + +FcPrivate FcBool +FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i); + +FcPrivate FcBool +FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d); + +FcPrivate FcBool +FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s); + +FcPrivate FcBool +FcPatternObjectAddMatrix (FcPattern *p, FcObject object, const FcMatrix *s); + +FcPrivate FcBool +FcPatternObjectAddCharSet (FcPattern *p, FcObject object, const FcCharSet *c); + +FcPrivate FcBool +FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b); + +FcPrivate FcBool +FcPatternObjectAddLangSet (FcPattern *p, FcObject object, const FcLangSet *ls); + +FcPrivate FcResult +FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int n, int *i); + +FcPrivate FcResult +FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int n, double *d); + +FcPrivate FcResult +FcPatternObjectGetString (const FcPattern *p, FcObject object, int n, FcChar8 ** s); + +FcPrivate FcResult +FcPatternObjectGetMatrix (const FcPattern *p, FcObject object, int n, FcMatrix **s); + +FcPrivate FcResult +FcPatternObjectGetCharSet (const FcPattern *p, FcObject object, int n, FcCharSet **c); + +FcPrivate FcResult +FcPatternObjectGetBool (const FcPattern *p, FcObject object, int n, FcBool *b); + +FcPrivate FcResult +FcPatternObjectGetLangSet (const FcPattern *p, FcObject object, int n, FcLangSet **ls); + +FcPrivate void +FcPatternFini (void); + +FcPrivate FcBool +FcPatternAppend (FcPattern *p, FcPattern *s); + +FcPrivate const FcChar8 * +FcStrStaticName (const FcChar8 *name); + +FcPrivate FcChar32 +FcStringHash (const FcChar8 *s); + +FcPrivate FcBool +FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat); + +FcPrivate FcPattern * +FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat); + +FcPrivate FcBool +FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *pat); + +FcPrivate FcValueList * +FcValueListSerialize (FcSerialize *serialize, const FcValueList *pat); + +/* fcrender.c */ + +/* fcmatrix.c */ + +extern FcPrivate const FcMatrix FcIdentityMatrix; + +FcPrivate void +FcMatrixFree (FcMatrix *mat); + +/* fcstr.c */ +FcPrivate void +FcStrSetSort (FcStrSet * set); + +FcPrivate void +FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size); + +FcPrivate void +FcStrBufDestroy (FcStrBuf *buf); + +FcPrivate FcChar8 * +FcStrBufDone (FcStrBuf *buf); + +FcPrivate FcChar8 * +FcStrBufDoneStatic (FcStrBuf *buf); + +FcPrivate FcBool +FcStrBufChar (FcStrBuf *buf, FcChar8 c); + +FcPrivate FcBool +FcStrBufString (FcStrBuf *buf, const FcChar8 *s); + +FcPrivate FcBool +FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len); + +FcPrivate int +FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate const FcChar8 * +FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate const FcChar8 * +FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate const FcChar8 * +FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2); + +FcPrivate FcBool +FcStrUsesHome (const FcChar8 *s); + +FcPrivate FcChar8 * +FcStrLastSlash (const FcChar8 *path); + +FcPrivate FcChar32 +FcStrHashIgnoreCase (const FcChar8 *s); + +FcPrivate FcChar8 * +FcStrCanonFilename (const FcChar8 *s); + +FcPrivate FcBool +FcStrSerializeAlloc (FcSerialize *serialize, const FcChar8 *str); + +FcPrivate FcChar8 * +FcStrSerialize (FcSerialize *serialize, const FcChar8 *str); + +#endif /* _FC_INT_H_ */ diff --git a/fontconfig/src/fclang.c b/fontconfig/src/fclang.c index 6a9cf01d6..be42b58c4 100644 --- a/fontconfig/src/fclang.c +++ b/fontconfig/src/fclang.c @@ -1,886 +1,886 @@ -/* - * fontconfig/src/fclang.c - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include "fcftint.h" - -typedef struct { - const FcChar8 lang[8]; - const FcCharSet charset; -} FcLangCharSet; - -typedef struct { - int begin; - int end; -} FcLangCharSetRange; - -#include "../fc-lang/fclang.h" - -struct _FcLangSet { - FcStrSet *extra; - FcChar32 map_size; - FcChar32 map[NUM_LANG_SET_MAP]; -}; - -static void -FcLangSetBitSet (FcLangSet *ls, - unsigned int id) -{ - int bucket; - - id = fcLangCharSetIndices[id]; - bucket = id >> 5; - if (bucket >= ls->map_size) - return; /* shouldn't happen really */ - - ls->map[bucket] |= ((FcChar32) 1 << (id & 0x1f)); -} - -static FcBool -FcLangSetBitGet (const FcLangSet *ls, - unsigned int id) -{ - int bucket; - - id = fcLangCharSetIndices[id]; - bucket = id >> 5; - if (bucket >= ls->map_size) - return FcFalse; - - return ((ls->map[bucket] >> (id & 0x1f)) & 1) ? FcTrue : FcFalse; -} - -static void -FcLangSetBitReset (FcLangSet *ls, - unsigned int id) -{ - int bucket; - - id = fcLangCharSetIndices[id]; - bucket = id >> 5; - if (bucket >= ls->map_size) - return; /* shouldn't happen really */ - - ls->map[bucket] &= ~((FcChar32) 1 << (id & 0x1f)); -} - -FcLangSet * -FcFreeTypeLangSet (const FcCharSet *charset, - const FcChar8 *exclusiveLang) -{ - int i, j; - FcChar32 missing; - const FcCharSet *exclusiveCharset = 0; - FcLangSet *ls; - - if (exclusiveLang) - exclusiveCharset = FcLangGetCharSet (exclusiveLang); - ls = FcLangSetCreate (); - if (!ls) - return 0; - if (FcDebug() & FC_DBG_LANGSET) - { - printf ("font charset"); - FcCharSetPrint (charset); - printf ("\n"); - } - for (i = 0; i < NUM_LANG_CHAR_SET; i++) - { - if (FcDebug() & FC_DBG_LANGSET) - { - printf ("%s charset", fcLangCharSets[i].lang); - FcCharSetPrint (&fcLangCharSets[i].charset); - printf ("\n"); - } - - /* - * Check for Han charsets to make fonts - * which advertise support for a single language - * not support other Han languages - */ - if (exclusiveCharset && - FcFreeTypeIsExclusiveLang (fcLangCharSets[i].lang)) - { - if (fcLangCharSets[i].charset.num != exclusiveCharset->num) - continue; - - for (j = 0; j < fcLangCharSets[i].charset.num; j++) - if (FcCharSetLeaf(&fcLangCharSets[i].charset, j) != - FcCharSetLeaf(exclusiveCharset, j)) - continue; - } - missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset); - if (FcDebug() & FC_DBG_SCANV) - { - if (missing && missing < 10) - { - FcCharSet *missed = FcCharSetSubtract (&fcLangCharSets[i].charset, - charset); - FcChar32 ucs4; - FcChar32 map[FC_CHARSET_MAP_SIZE]; - FcChar32 next; - - printf ("\n%s(%u) ", fcLangCharSets[i].lang, missing); - printf ("{"); - for (ucs4 = FcCharSetFirstPage (missed, map, &next); - ucs4 != FC_CHARSET_DONE; - ucs4 = FcCharSetNextPage (missed, map, &next)) - { - int i, j; - for (i = 0; i < FC_CHARSET_MAP_SIZE; i++) - if (map[i]) - { - for (j = 0; j < 32; j++) - if (map[i] & (1 << j)) - printf (" %04x", ucs4 + i * 32 + j); - } - } - printf (" }\n\t"); - FcCharSetDestroy (missed); - } - else - printf ("%s(%u) ", fcLangCharSets[i].lang, missing); - } - if (!missing) - FcLangSetBitSet (ls, i); - } - - if (FcDebug() & FC_DBG_SCANV) - printf ("\n"); - - - return ls; -} - -#define FcLangEnd(c) ((c) == '-' || (c) == '\0') - -FcLangResult -FcLangCompare (const FcChar8 *s1, const FcChar8 *s2) -{ - FcChar8 c1, c2; - FcLangResult result = FcLangDifferentLang; - - for (;;) - { - c1 = *s1++; - c2 = *s2++; - - c1 = FcToLower (c1); - c2 = FcToLower (c2); - if (c1 != c2) - { - if (FcLangEnd (c1) && FcLangEnd (c2)) - result = FcLangDifferentTerritory; - return result; - } - else if (!c1) - return FcLangEqual; - else if (c1 == '-') - result = FcLangDifferentTerritory; - } -} - -/* - * Return FcTrue when super contains sub. - * - * super contains sub if super and sub have the same - * language and either the same country or one - * is missing the country - */ - -static FcBool -FcLangContains (const FcChar8 *super, const FcChar8 *sub) -{ - FcChar8 c1, c2; - - for (;;) - { - c1 = *super++; - c2 = *sub++; - - c1 = FcToLower (c1); - c2 = FcToLower (c2); - if (c1 != c2) - { - /* see if super has a country while sub is mising one */ - if (c1 == '-' && c2 == '\0') - return FcTrue; - /* see if sub has a country while super is mising one */ - if (c1 == '\0' && c2 == '-') - return FcTrue; - return FcFalse; - } - else if (!c1) - return FcTrue; - } -} - -const FcCharSet * -FcLangGetCharSet (const FcChar8 *lang) -{ - int i; - int country = -1; - - for (i = 0; i < NUM_LANG_CHAR_SET; i++) - { - switch (FcLangCompare (lang, fcLangCharSets[i].lang)) { - case FcLangEqual: - return &fcLangCharSets[i].charset; - case FcLangDifferentTerritory: - if (country == -1) - country = i; - case FcLangDifferentLang: - default: - break; - } - } - if (country == -1) - return 0; - return &fcLangCharSets[country].charset; -} - -FcStrSet * -FcGetLangs (void) -{ - FcStrSet *langs; - int i; - - langs = FcStrSetCreate(); - if (!langs) - return 0; - - for (i = 0; i < NUM_LANG_CHAR_SET; i++) - FcStrSetAdd (langs, fcLangCharSets[i].lang); - - return langs; -} - -FcLangSet * -FcLangSetCreate (void) -{ - FcLangSet *ls; - - ls = malloc (sizeof (FcLangSet)); - if (!ls) - return 0; - FcMemAlloc (FC_MEM_LANGSET, sizeof (FcLangSet)); - memset (ls->map, '\0', sizeof (ls->map)); - ls->map_size = NUM_LANG_SET_MAP; - ls->extra = 0; - return ls; -} - -void -FcLangSetDestroy (FcLangSet *ls) -{ - if (ls->extra) - FcStrSetDestroy (ls->extra); - FcMemFree (FC_MEM_LANGSET, sizeof (FcLangSet)); - free (ls); -} - -FcLangSet * -FcLangSetCopy (const FcLangSet *ls) -{ - FcLangSet *new; - - new = FcLangSetCreate (); - if (!new) - goto bail0; - memset (new->map, '\0', sizeof (new->map)); - memcpy (new->map, ls->map, FC_MIN (sizeof (new->map), ls->map_size * sizeof (ls->map[0]))); - if (ls->extra) - { - FcStrList *list; - FcChar8 *extra; - - new->extra = FcStrSetCreate (); - if (!new->extra) - goto bail1; - - list = FcStrListCreate (ls->extra); - if (!list) - goto bail1; - - while ((extra = FcStrListNext (list))) - if (!FcStrSetAdd (new->extra, extra)) - { - FcStrListDone (list); - goto bail1; - } - FcStrListDone (list); - } - return new; -bail1: - FcLangSetDestroy (new); -bail0: - return 0; -} - -static int -FcLangSetIndex (const FcChar8 *lang) -{ - int low, high, mid = 0; - int cmp = 0; - FcChar8 firstChar = FcToLower(lang[0]); - FcChar8 secondChar = firstChar ? FcToLower(lang[1]) : '\0'; - - if (firstChar < 'a') - { - low = 0; - high = fcLangCharSetRanges[0].begin; - } - else if(firstChar > 'z') - { - low = fcLangCharSetRanges[25].begin; - high = NUM_LANG_CHAR_SET - 1; - } - else - { - low = fcLangCharSetRanges[firstChar - 'a'].begin; - high = fcLangCharSetRanges[firstChar - 'a'].end; - /* no matches */ - if (low > high) - return -low; /* next entry after where it would be */ - } - - while (low <= high) - { - mid = (high + low) >> 1; - if(fcLangCharSets[mid].lang[0] != firstChar) - cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang, lang); - else - { /* fast path for resolving 2-letter languages (by far the most common) after - * finding the first char (probably already true because of the hash table) */ - cmp = fcLangCharSets[mid].lang[1] - secondChar; - if (cmp == 0 && - (fcLangCharSets[mid].lang[2] != '\0' || - lang[2] != '\0')) - { - cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang+2, - lang+2); - } - } - if (cmp == 0) - return mid; - if (cmp < 0) - low = mid + 1; - else - high = mid - 1; - } - if (cmp < 0) - mid++; - return -(mid + 1); -} - -FcBool -FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang) -{ - int id; - - id = FcLangSetIndex (lang); - if (id >= 0) - { - FcLangSetBitSet (ls, id); - return FcTrue; - } - if (!ls->extra) - { - ls->extra = FcStrSetCreate (); - if (!ls->extra) - return FcFalse; - } - return FcStrSetAdd (ls->extra, lang); -} - -FcBool -FcLangSetDel (FcLangSet *ls, const FcChar8 *lang) -{ - int id; - - id = FcLangSetIndex (lang); - if (id >= 0) - { - FcLangSetBitReset (ls, id); - } - else if (ls->extra) - { - FcStrSetDel (ls->extra, lang); - } - return FcTrue; -} - -FcLangResult -FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang) -{ - int id; - FcLangResult best, r; - int i; - - id = FcLangSetIndex (lang); - if (id < 0) - id = -id - 1; - else if (FcLangSetBitGet (ls, id)) - return FcLangEqual; - best = FcLangDifferentLang; - for (i = id - 1; i >= 0; i--) - { - r = FcLangCompare (lang, fcLangCharSets[i].lang); - if (r == FcLangDifferentLang) - break; - if (FcLangSetBitGet (ls, i) && r < best) - best = r; - } - for (i = id; i < NUM_LANG_CHAR_SET; i++) - { - r = FcLangCompare (lang, fcLangCharSets[i].lang); - if (r == FcLangDifferentLang) - break; - if (FcLangSetBitGet (ls, i) && r < best) - best = r; - } - if (ls->extra) - { - FcStrList *list = FcStrListCreate (ls->extra); - FcChar8 *extra; - - if (list) - { - while (best > FcLangEqual && (extra = FcStrListNext (list))) - { - r = FcLangCompare (lang, extra); - if (r < best) - best = r; - } - FcStrListDone (list); - } - } - return best; -} - -static FcLangResult -FcLangSetCompareStrSet (const FcLangSet *ls, FcStrSet *set) -{ - FcStrList *list = FcStrListCreate (set); - FcLangResult r, best = FcLangDifferentLang; - FcChar8 *extra; - - if (list) - { - while (best > FcLangEqual && (extra = FcStrListNext (list))) - { - r = FcLangSetHasLang (ls, extra); - if (r < best) - best = r; - } - FcStrListDone (list); - } - return best; -} - -FcLangResult -FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb) -{ - int i, j, count; - FcLangResult best, r; - - count = FC_MIN (lsa->map_size, lsb->map_size); - count = FC_MIN (NUM_LANG_SET_MAP, count); - for (i = 0; i < count; i++) - if (lsa->map[i] & lsb->map[i]) - return FcLangEqual; - best = FcLangDifferentLang; - for (j = 0; j < NUM_COUNTRY_SET; j++) - for (i = 0; i < count; i++) - if ((lsa->map[i] & fcLangCountrySets[j][i]) && - (lsb->map[i] & fcLangCountrySets[j][i])) - { - best = FcLangDifferentTerritory; - break; - } - if (lsa->extra) - { - r = FcLangSetCompareStrSet (lsb, lsa->extra); - if (r < best) - best = r; - } - if (best > FcLangEqual && lsb->extra) - { - r = FcLangSetCompareStrSet (lsa, lsb->extra); - if (r < best) - best = r; - } - return best; -} - -/* - * Used in computing values -- mustn't allocate any storage - * XXX Not thread-safe - */ -FcLangSet * -FcLangSetPromote (const FcChar8 *lang) -{ - static FcLangSet ls; - static FcStrSet strs; - static FcChar8 *str; - int id; - - memset (ls.map, '\0', sizeof (ls.map)); - ls.map_size = NUM_LANG_SET_MAP; - ls.extra = 0; - id = FcLangSetIndex (lang); - if (id > 0) - { - FcLangSetBitSet (&ls, id); - } - else - { - ls.extra = &strs; - strs.num = 1; - strs.size = 1; - strs.strs = &str; - strs.ref = 1; - str = (FcChar8 *) lang; - } - return &ls; -} - -FcChar32 -FcLangSetHash (const FcLangSet *ls) -{ - FcChar32 h = 0; - int i, count; - - count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP); - for (i = 0; i < count; i++) - h ^= ls->map[i]; - if (ls->extra) - h ^= ls->extra->num; - return h; -} - -FcLangSet * -FcNameParseLangSet (const FcChar8 *string) -{ - FcChar8 lang[32], c = 0; - int i; - FcLangSet *ls; - - ls = FcLangSetCreate (); - if (!ls) - goto bail0; - - for(;;) - { - for(i = 0; i < 31;i++) - { - c = *string++; - if(c == '\0' || c == '|') - break; /* end of this code */ - lang[i] = c; - } - lang[i] = '\0'; - if (!FcLangSetAdd (ls, lang)) - goto bail1; - if(c == '\0') - break; - } - return ls; -bail1: - FcLangSetDestroy (ls); -bail0: - return 0; -} - -FcBool -FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls) -{ - int i, bit, count; - FcChar32 bits; - FcBool first = FcTrue; - - count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP); - for (i = 0; i < count; i++) - { - if ((bits = ls->map[i])) - { - for (bit = 0; bit <= 31; bit++) - if (bits & (1 << bit)) - { - int id = (i << 5) | bit; - if (!first) - if (!FcStrBufChar (buf, '|')) - return FcFalse; - if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang)) - return FcFalse; - first = FcFalse; - } - } - } - if (ls->extra) - { - FcStrList *list = FcStrListCreate (ls->extra); - FcChar8 *extra; - - if (!list) - return FcFalse; - while ((extra = FcStrListNext (list))) - { - if (!first) - if (!FcStrBufChar (buf, '|')) - { - FcStrListDone (list); - return FcFalse; - } - if (!FcStrBufString (buf, extra)) - { - FcStrListDone (list); - return FcFalse; - } - first = FcFalse; - } - FcStrListDone (list); - } - return FcTrue; -} - -FcBool -FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb) -{ - int i, count; - - count = FC_MIN (lsa->map_size, lsb->map_size); - count = FC_MIN (NUM_LANG_SET_MAP, count); - for (i = 0; i < count; i++) - { - if (lsa->map[i] != lsb->map[i]) - return FcFalse; - } - if (!lsa->extra && !lsb->extra) - return FcTrue; - if (lsa->extra && lsb->extra) - return FcStrSetEqual (lsa->extra, lsb->extra); - return FcFalse; -} - -static FcBool -FcLangSetContainsLang (const FcLangSet *ls, const FcChar8 *lang) -{ - int id; - int i; - - id = FcLangSetIndex (lang); - if (id < 0) - id = -id - 1; - else if (FcLangSetBitGet (ls, id)) - return FcTrue; - /* - * search up and down among equal languages for a match - */ - for (i = id - 1; i >= 0; i--) - { - if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang) - break; - if (FcLangSetBitGet (ls, i) && - FcLangContains (fcLangCharSets[i].lang, lang)) - return FcTrue; - } - for (i = id; i < NUM_LANG_CHAR_SET; i++) - { - if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang) - break; - if (FcLangSetBitGet (ls, i) && - FcLangContains (fcLangCharSets[i].lang, lang)) - return FcTrue; - } - if (ls->extra) - { - FcStrList *list = FcStrListCreate (ls->extra); - FcChar8 *extra; - - if (list) - { - while ((extra = FcStrListNext (list))) - { - if (FcLangContains (extra, lang)) - break; - } - FcStrListDone (list); - if (extra) - return FcTrue; - } - } - return FcFalse; -} - -/* - * return FcTrue if lsa contains every language in lsb - */ -FcBool -FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb) -{ - int i, j, count; - FcChar32 missing; - - if (FcDebug() & FC_DBG_MATCHV) - { - printf ("FcLangSet "); FcLangSetPrint (lsa); - printf (" contains "); FcLangSetPrint (lsb); - printf ("\n"); - } - /* - * check bitmaps for missing language support - */ - count = FC_MIN (lsa->map_size, lsb->map_size); - count = FC_MIN (NUM_LANG_SET_MAP, count); - for (i = 0; i < count; i++) - { - missing = lsb->map[i] & ~lsa->map[i]; - if (missing) - { - for (j = 0; j < 32; j++) - if (missing & (1 << j)) - { - if (!FcLangSetContainsLang (lsa, - fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang)) - { - if (FcDebug() & FC_DBG_MATCHV) - printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i*32+j]].lang); - return FcFalse; - } - } - } - } - if (lsb->extra) - { - FcStrList *list = FcStrListCreate (lsb->extra); - FcChar8 *extra; - - if (list) - { - while ((extra = FcStrListNext (list))) - { - if (!FcLangSetContainsLang (lsa, extra)) - { - if (FcDebug() & FC_DBG_MATCHV) - printf ("\tMissing string %s\n", extra); - break; - } - } - FcStrListDone (list); - if (extra) - return FcFalse; - } - } - return FcTrue; -} - -FcBool -FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l) -{ - if (!FcSerializeAlloc (serialize, l, sizeof (FcLangSet))) - return FcFalse; - return FcTrue; -} - -FcLangSet * -FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l) -{ - FcLangSet *l_serialize = FcSerializePtr (serialize, l); - - if (!l_serialize) - return NULL; - memset (l_serialize->map, '\0', sizeof (l_serialize->map)); - memcpy (l_serialize->map, l->map, FC_MIN (sizeof (l_serialize->map), l->map_size * sizeof (l->map[0]))); - l_serialize->map_size = NUM_LANG_SET_MAP; - l_serialize->extra = NULL; /* We don't serialize ls->extra */ - return l_serialize; -} - -FcStrSet * -FcLangSetGetLangs (const FcLangSet *ls) -{ - FcStrSet *langs; - int i; - - langs = FcStrSetCreate(); - if (!langs) - return 0; - - for (i = 0; i < NUM_LANG_CHAR_SET; i++) - if (FcLangSetBitGet (ls, i)) - FcStrSetAdd (langs, fcLangCharSets[i].lang); - - if (ls->extra) - { - FcStrList *list = FcStrListCreate (ls->extra); - FcChar8 *extra; - - if (list) - { - while ((extra = FcStrListNext (list))) - FcStrSetAdd (langs, extra); - - FcStrListDone (list); - } - } - - return langs; -} - -static FcLangSet * -FcLangSetOperate(const FcLangSet *a, - const FcLangSet *b, - FcBool (*func) (FcLangSet *ls, - const FcChar8 *s)) -{ - FcLangSet *langset = FcLangSetCopy (a); - FcStrList *sl = FcStrListCreate (FcLangSetGetLangs (b)); - FcChar8 *str; - - while ((str = FcStrListNext (sl))) - { - func (langset, str); - } - FcStrListDone (sl); - - return langset; -} - -FcLangSet * -FcLangSetUnion (const FcLangSet *a, const FcLangSet *b) -{ - return FcLangSetOperate(a, b, FcLangSetAdd); -} - -FcLangSet * -FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b) -{ - return FcLangSetOperate(a, b, FcLangSetDel); -} - -#define __fclang__ -#include "fcaliastail.h" -#include "fcftaliastail.h" -#undef __fclang__ +/* + * fontconfig/src/fclang.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include "fcftint.h" + +typedef struct { + const FcChar8 lang[8]; + const FcCharSet charset; +} FcLangCharSet; + +typedef struct { + int begin; + int end; +} FcLangCharSetRange; + +#include "../fc-lang/fclang.h" + +struct _FcLangSet { + FcStrSet *extra; + FcChar32 map_size; + FcChar32 map[NUM_LANG_SET_MAP]; +}; + +static void +FcLangSetBitSet (FcLangSet *ls, + unsigned int id) +{ + int bucket; + + id = fcLangCharSetIndices[id]; + bucket = id >> 5; + if (bucket >= ls->map_size) + return; /* shouldn't happen really */ + + ls->map[bucket] |= ((FcChar32) 1 << (id & 0x1f)); +} + +static FcBool +FcLangSetBitGet (const FcLangSet *ls, + unsigned int id) +{ + int bucket; + + id = fcLangCharSetIndices[id]; + bucket = id >> 5; + if (bucket >= ls->map_size) + return FcFalse; + + return ((ls->map[bucket] >> (id & 0x1f)) & 1) ? FcTrue : FcFalse; +} + +static void +FcLangSetBitReset (FcLangSet *ls, + unsigned int id) +{ + int bucket; + + id = fcLangCharSetIndices[id]; + bucket = id >> 5; + if (bucket >= ls->map_size) + return; /* shouldn't happen really */ + + ls->map[bucket] &= ~((FcChar32) 1 << (id & 0x1f)); +} + +FcLangSet * +FcFreeTypeLangSet (const FcCharSet *charset, + const FcChar8 *exclusiveLang) +{ + int i, j; + FcChar32 missing; + const FcCharSet *exclusiveCharset = 0; + FcLangSet *ls; + + if (exclusiveLang) + exclusiveCharset = FcLangGetCharSet (exclusiveLang); + ls = FcLangSetCreate (); + if (!ls) + return 0; + if (FcDebug() & FC_DBG_LANGSET) + { + printf ("font charset"); + FcCharSetPrint (charset); + printf ("\n"); + } + for (i = 0; i < NUM_LANG_CHAR_SET; i++) + { + if (FcDebug() & FC_DBG_LANGSET) + { + printf ("%s charset", fcLangCharSets[i].lang); + FcCharSetPrint (&fcLangCharSets[i].charset); + printf ("\n"); + } + + /* + * Check for Han charsets to make fonts + * which advertise support for a single language + * not support other Han languages + */ + if (exclusiveCharset && + FcFreeTypeIsExclusiveLang (fcLangCharSets[i].lang)) + { + if (fcLangCharSets[i].charset.num != exclusiveCharset->num) + continue; + + for (j = 0; j < fcLangCharSets[i].charset.num; j++) + if (FcCharSetLeaf(&fcLangCharSets[i].charset, j) != + FcCharSetLeaf(exclusiveCharset, j)) + continue; + } + missing = FcCharSetSubtractCount (&fcLangCharSets[i].charset, charset); + if (FcDebug() & FC_DBG_SCANV) + { + if (missing && missing < 10) + { + FcCharSet *missed = FcCharSetSubtract (&fcLangCharSets[i].charset, + charset); + FcChar32 ucs4; + FcChar32 map[FC_CHARSET_MAP_SIZE]; + FcChar32 next; + + printf ("\n%s(%u) ", fcLangCharSets[i].lang, missing); + printf ("{"); + for (ucs4 = FcCharSetFirstPage (missed, map, &next); + ucs4 != FC_CHARSET_DONE; + ucs4 = FcCharSetNextPage (missed, map, &next)) + { + int i, j; + for (i = 0; i < FC_CHARSET_MAP_SIZE; i++) + if (map[i]) + { + for (j = 0; j < 32; j++) + if (map[i] & (1 << j)) + printf (" %04x", ucs4 + i * 32 + j); + } + } + printf (" }\n\t"); + FcCharSetDestroy (missed); + } + else + printf ("%s(%u) ", fcLangCharSets[i].lang, missing); + } + if (!missing) + FcLangSetBitSet (ls, i); + } + + if (FcDebug() & FC_DBG_SCANV) + printf ("\n"); + + + return ls; +} + +#define FcLangEnd(c) ((c) == '-' || (c) == '\0') + +FcLangResult +FcLangCompare (const FcChar8 *s1, const FcChar8 *s2) +{ + FcChar8 c1, c2; + FcLangResult result = FcLangDifferentLang; + + for (;;) + { + c1 = *s1++; + c2 = *s2++; + + c1 = FcToLower (c1); + c2 = FcToLower (c2); + if (c1 != c2) + { + if (FcLangEnd (c1) && FcLangEnd (c2)) + result = FcLangDifferentTerritory; + return result; + } + else if (!c1) + return FcLangEqual; + else if (c1 == '-') + result = FcLangDifferentTerritory; + } +} + +/* + * Return FcTrue when super contains sub. + * + * super contains sub if super and sub have the same + * language and either the same country or one + * is missing the country + */ + +static FcBool +FcLangContains (const FcChar8 *super, const FcChar8 *sub) +{ + FcChar8 c1, c2; + + for (;;) + { + c1 = *super++; + c2 = *sub++; + + c1 = FcToLower (c1); + c2 = FcToLower (c2); + if (c1 != c2) + { + /* see if super has a country while sub is mising one */ + if (c1 == '-' && c2 == '\0') + return FcTrue; + /* see if sub has a country while super is mising one */ + if (c1 == '\0' && c2 == '-') + return FcTrue; + return FcFalse; + } + else if (!c1) + return FcTrue; + } +} + +const FcCharSet * +FcLangGetCharSet (const FcChar8 *lang) +{ + int i; + int country = -1; + + for (i = 0; i < NUM_LANG_CHAR_SET; i++) + { + switch (FcLangCompare (lang, fcLangCharSets[i].lang)) { + case FcLangEqual: + return &fcLangCharSets[i].charset; + case FcLangDifferentTerritory: + if (country == -1) + country = i; + case FcLangDifferentLang: + default: + break; + } + } + if (country == -1) + return 0; + return &fcLangCharSets[country].charset; +} + +FcStrSet * +FcGetLangs (void) +{ + FcStrSet *langs; + int i; + + langs = FcStrSetCreate(); + if (!langs) + return 0; + + for (i = 0; i < NUM_LANG_CHAR_SET; i++) + FcStrSetAdd (langs, fcLangCharSets[i].lang); + + return langs; +} + +FcLangSet * +FcLangSetCreate (void) +{ + FcLangSet *ls; + + ls = malloc (sizeof (FcLangSet)); + if (!ls) + return 0; + FcMemAlloc (FC_MEM_LANGSET, sizeof (FcLangSet)); + memset (ls->map, '\0', sizeof (ls->map)); + ls->map_size = NUM_LANG_SET_MAP; + ls->extra = 0; + return ls; +} + +void +FcLangSetDestroy (FcLangSet *ls) +{ + if (ls->extra) + FcStrSetDestroy (ls->extra); + FcMemFree (FC_MEM_LANGSET, sizeof (FcLangSet)); + free (ls); +} + +FcLangSet * +FcLangSetCopy (const FcLangSet *ls) +{ + FcLangSet *new; + + new = FcLangSetCreate (); + if (!new) + goto bail0; + memset (new->map, '\0', sizeof (new->map)); + memcpy (new->map, ls->map, FC_MIN (sizeof (new->map), ls->map_size * sizeof (ls->map[0]))); + if (ls->extra) + { + FcStrList *list; + FcChar8 *extra; + + new->extra = FcStrSetCreate (); + if (!new->extra) + goto bail1; + + list = FcStrListCreate (ls->extra); + if (!list) + goto bail1; + + while ((extra = FcStrListNext (list))) + if (!FcStrSetAdd (new->extra, extra)) + { + FcStrListDone (list); + goto bail1; + } + FcStrListDone (list); + } + return new; +bail1: + FcLangSetDestroy (new); +bail0: + return 0; +} + +static int +FcLangSetIndex (const FcChar8 *lang) +{ + int low, high, mid = 0; + int cmp = 0; + FcChar8 firstChar = FcToLower(lang[0]); + FcChar8 secondChar = firstChar ? FcToLower(lang[1]) : '\0'; + + if (firstChar < 'a') + { + low = 0; + high = fcLangCharSetRanges[0].begin; + } + else if(firstChar > 'z') + { + low = fcLangCharSetRanges[25].begin; + high = NUM_LANG_CHAR_SET - 1; + } + else + { + low = fcLangCharSetRanges[firstChar - 'a'].begin; + high = fcLangCharSetRanges[firstChar - 'a'].end; + /* no matches */ + if (low > high) + return -low; /* next entry after where it would be */ + } + + while (low <= high) + { + mid = (high + low) >> 1; + if(fcLangCharSets[mid].lang[0] != firstChar) + cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang, lang); + else + { /* fast path for resolving 2-letter languages (by far the most common) after + * finding the first char (probably already true because of the hash table) */ + cmp = fcLangCharSets[mid].lang[1] - secondChar; + if (cmp == 0 && + (fcLangCharSets[mid].lang[2] != '\0' || + lang[2] != '\0')) + { + cmp = FcStrCmpIgnoreCase(fcLangCharSets[mid].lang+2, + lang+2); + } + } + if (cmp == 0) + return mid; + if (cmp < 0) + low = mid + 1; + else + high = mid - 1; + } + if (cmp < 0) + mid++; + return -(mid + 1); +} + +FcBool +FcLangSetAdd (FcLangSet *ls, const FcChar8 *lang) +{ + int id; + + id = FcLangSetIndex (lang); + if (id >= 0) + { + FcLangSetBitSet (ls, id); + return FcTrue; + } + if (!ls->extra) + { + ls->extra = FcStrSetCreate (); + if (!ls->extra) + return FcFalse; + } + return FcStrSetAdd (ls->extra, lang); +} + +FcBool +FcLangSetDel (FcLangSet *ls, const FcChar8 *lang) +{ + int id; + + id = FcLangSetIndex (lang); + if (id >= 0) + { + FcLangSetBitReset (ls, id); + } + else if (ls->extra) + { + FcStrSetDel (ls->extra, lang); + } + return FcTrue; +} + +FcLangResult +FcLangSetHasLang (const FcLangSet *ls, const FcChar8 *lang) +{ + int id; + FcLangResult best, r; + int i; + + id = FcLangSetIndex (lang); + if (id < 0) + id = -id - 1; + else if (FcLangSetBitGet (ls, id)) + return FcLangEqual; + best = FcLangDifferentLang; + for (i = id - 1; i >= 0; i--) + { + r = FcLangCompare (lang, fcLangCharSets[i].lang); + if (r == FcLangDifferentLang) + break; + if (FcLangSetBitGet (ls, i) && r < best) + best = r; + } + for (i = id; i < NUM_LANG_CHAR_SET; i++) + { + r = FcLangCompare (lang, fcLangCharSets[i].lang); + if (r == FcLangDifferentLang) + break; + if (FcLangSetBitGet (ls, i) && r < best) + best = r; + } + if (ls->extra) + { + FcStrList *list = FcStrListCreate (ls->extra); + FcChar8 *extra; + + if (list) + { + while (best > FcLangEqual && (extra = FcStrListNext (list))) + { + r = FcLangCompare (lang, extra); + if (r < best) + best = r; + } + FcStrListDone (list); + } + } + return best; +} + +static FcLangResult +FcLangSetCompareStrSet (const FcLangSet *ls, FcStrSet *set) +{ + FcStrList *list = FcStrListCreate (set); + FcLangResult r, best = FcLangDifferentLang; + FcChar8 *extra; + + if (list) + { + while (best > FcLangEqual && (extra = FcStrListNext (list))) + { + r = FcLangSetHasLang (ls, extra); + if (r < best) + best = r; + } + FcStrListDone (list); + } + return best; +} + +FcLangResult +FcLangSetCompare (const FcLangSet *lsa, const FcLangSet *lsb) +{ + int i, j, count; + FcLangResult best, r; + + count = FC_MIN (lsa->map_size, lsb->map_size); + count = FC_MIN (NUM_LANG_SET_MAP, count); + for (i = 0; i < count; i++) + if (lsa->map[i] & lsb->map[i]) + return FcLangEqual; + best = FcLangDifferentLang; + for (j = 0; j < NUM_COUNTRY_SET; j++) + for (i = 0; i < count; i++) + if ((lsa->map[i] & fcLangCountrySets[j][i]) && + (lsb->map[i] & fcLangCountrySets[j][i])) + { + best = FcLangDifferentTerritory; + break; + } + if (lsa->extra) + { + r = FcLangSetCompareStrSet (lsb, lsa->extra); + if (r < best) + best = r; + } + if (best > FcLangEqual && lsb->extra) + { + r = FcLangSetCompareStrSet (lsa, lsb->extra); + if (r < best) + best = r; + } + return best; +} + +/* + * Used in computing values -- mustn't allocate any storage + * XXX Not thread-safe + */ +FcLangSet * +FcLangSetPromote (const FcChar8 *lang) +{ + static FcLangSet ls; + static FcStrSet strs; + static FcChar8 *str; + int id; + + memset (ls.map, '\0', sizeof (ls.map)); + ls.map_size = NUM_LANG_SET_MAP; + ls.extra = 0; + id = FcLangSetIndex (lang); + if (id > 0) + { + FcLangSetBitSet (&ls, id); + } + else + { + ls.extra = &strs; + strs.num = 1; + strs.size = 1; + strs.strs = &str; + strs.ref = 1; + str = (FcChar8 *) lang; + } + return &ls; +} + +FcChar32 +FcLangSetHash (const FcLangSet *ls) +{ + FcChar32 h = 0; + int i, count; + + count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP); + for (i = 0; i < count; i++) + h ^= ls->map[i]; + if (ls->extra) + h ^= ls->extra->num; + return h; +} + +FcLangSet * +FcNameParseLangSet (const FcChar8 *string) +{ + FcChar8 lang[32], c = 0; + int i; + FcLangSet *ls; + + ls = FcLangSetCreate (); + if (!ls) + goto bail0; + + for(;;) + { + for(i = 0; i < 31;i++) + { + c = *string++; + if(c == '\0' || c == '|') + break; /* end of this code */ + lang[i] = c; + } + lang[i] = '\0'; + if (!FcLangSetAdd (ls, lang)) + goto bail1; + if(c == '\0') + break; + } + return ls; +bail1: + FcLangSetDestroy (ls); +bail0: + return 0; +} + +FcBool +FcNameUnparseLangSet (FcStrBuf *buf, const FcLangSet *ls) +{ + int i, bit, count; + FcChar32 bits; + FcBool first = FcTrue; + + count = FC_MIN (ls->map_size, NUM_LANG_SET_MAP); + for (i = 0; i < count; i++) + { + if ((bits = ls->map[i])) + { + for (bit = 0; bit <= 31; bit++) + if (bits & (1 << bit)) + { + int id = (i << 5) | bit; + if (!first) + if (!FcStrBufChar (buf, '|')) + return FcFalse; + if (!FcStrBufString (buf, fcLangCharSets[fcLangCharSetIndicesInv[id]].lang)) + return FcFalse; + first = FcFalse; + } + } + } + if (ls->extra) + { + FcStrList *list = FcStrListCreate (ls->extra); + FcChar8 *extra; + + if (!list) + return FcFalse; + while ((extra = FcStrListNext (list))) + { + if (!first) + if (!FcStrBufChar (buf, '|')) + { + FcStrListDone (list); + return FcFalse; + } + if (!FcStrBufString (buf, extra)) + { + FcStrListDone (list); + return FcFalse; + } + first = FcFalse; + } + FcStrListDone (list); + } + return FcTrue; +} + +FcBool +FcLangSetEqual (const FcLangSet *lsa, const FcLangSet *lsb) +{ + int i, count; + + count = FC_MIN (lsa->map_size, lsb->map_size); + count = FC_MIN (NUM_LANG_SET_MAP, count); + for (i = 0; i < count; i++) + { + if (lsa->map[i] != lsb->map[i]) + return FcFalse; + } + if (!lsa->extra && !lsb->extra) + return FcTrue; + if (lsa->extra && lsb->extra) + return FcStrSetEqual (lsa->extra, lsb->extra); + return FcFalse; +} + +static FcBool +FcLangSetContainsLang (const FcLangSet *ls, const FcChar8 *lang) +{ + int id; + int i; + + id = FcLangSetIndex (lang); + if (id < 0) + id = -id - 1; + else if (FcLangSetBitGet (ls, id)) + return FcTrue; + /* + * search up and down among equal languages for a match + */ + for (i = id - 1; i >= 0; i--) + { + if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang) + break; + if (FcLangSetBitGet (ls, i) && + FcLangContains (fcLangCharSets[i].lang, lang)) + return FcTrue; + } + for (i = id; i < NUM_LANG_CHAR_SET; i++) + { + if (FcLangCompare (fcLangCharSets[i].lang, lang) == FcLangDifferentLang) + break; + if (FcLangSetBitGet (ls, i) && + FcLangContains (fcLangCharSets[i].lang, lang)) + return FcTrue; + } + if (ls->extra) + { + FcStrList *list = FcStrListCreate (ls->extra); + FcChar8 *extra; + + if (list) + { + while ((extra = FcStrListNext (list))) + { + if (FcLangContains (extra, lang)) + break; + } + FcStrListDone (list); + if (extra) + return FcTrue; + } + } + return FcFalse; +} + +/* + * return FcTrue if lsa contains every language in lsb + */ +FcBool +FcLangSetContains (const FcLangSet *lsa, const FcLangSet *lsb) +{ + int i, j, count; + FcChar32 missing; + + if (FcDebug() & FC_DBG_MATCHV) + { + printf ("FcLangSet "); FcLangSetPrint (lsa); + printf (" contains "); FcLangSetPrint (lsb); + printf ("\n"); + } + /* + * check bitmaps for missing language support + */ + count = FC_MIN (lsa->map_size, lsb->map_size); + count = FC_MIN (NUM_LANG_SET_MAP, count); + for (i = 0; i < count; i++) + { + missing = lsb->map[i] & ~lsa->map[i]; + if (missing) + { + for (j = 0; j < 32; j++) + if (missing & (1 << j)) + { + if (!FcLangSetContainsLang (lsa, + fcLangCharSets[fcLangCharSetIndicesInv[i*32 + j]].lang)) + { + if (FcDebug() & FC_DBG_MATCHV) + printf ("\tMissing bitmap %s\n", fcLangCharSets[fcLangCharSetIndicesInv[i*32+j]].lang); + return FcFalse; + } + } + } + } + if (lsb->extra) + { + FcStrList *list = FcStrListCreate (lsb->extra); + FcChar8 *extra; + + if (list) + { + while ((extra = FcStrListNext (list))) + { + if (!FcLangSetContainsLang (lsa, extra)) + { + if (FcDebug() & FC_DBG_MATCHV) + printf ("\tMissing string %s\n", extra); + break; + } + } + FcStrListDone (list); + if (extra) + return FcFalse; + } + } + return FcTrue; +} + +FcBool +FcLangSetSerializeAlloc (FcSerialize *serialize, const FcLangSet *l) +{ + if (!FcSerializeAlloc (serialize, l, sizeof (FcLangSet))) + return FcFalse; + return FcTrue; +} + +FcLangSet * +FcLangSetSerialize(FcSerialize *serialize, const FcLangSet *l) +{ + FcLangSet *l_serialize = FcSerializePtr (serialize, l); + + if (!l_serialize) + return NULL; + memset (l_serialize->map, '\0', sizeof (l_serialize->map)); + memcpy (l_serialize->map, l->map, FC_MIN (sizeof (l_serialize->map), l->map_size * sizeof (l->map[0]))); + l_serialize->map_size = NUM_LANG_SET_MAP; + l_serialize->extra = NULL; /* We don't serialize ls->extra */ + return l_serialize; +} + +FcStrSet * +FcLangSetGetLangs (const FcLangSet *ls) +{ + FcStrSet *langs; + int i; + + langs = FcStrSetCreate(); + if (!langs) + return 0; + + for (i = 0; i < NUM_LANG_CHAR_SET; i++) + if (FcLangSetBitGet (ls, i)) + FcStrSetAdd (langs, fcLangCharSets[i].lang); + + if (ls->extra) + { + FcStrList *list = FcStrListCreate (ls->extra); + FcChar8 *extra; + + if (list) + { + while ((extra = FcStrListNext (list))) + FcStrSetAdd (langs, extra); + + FcStrListDone (list); + } + } + + return langs; +} + +static FcLangSet * +FcLangSetOperate(const FcLangSet *a, + const FcLangSet *b, + FcBool (*func) (FcLangSet *ls, + const FcChar8 *s)) +{ + FcLangSet *langset = FcLangSetCopy (a); + FcStrList *sl = FcStrListCreate (FcLangSetGetLangs (b)); + FcChar8 *str; + + while ((str = FcStrListNext (sl))) + { + func (langset, str); + } + FcStrListDone (sl); + + return langset; +} + +FcLangSet * +FcLangSetUnion (const FcLangSet *a, const FcLangSet *b) +{ + return FcLangSetOperate(a, b, FcLangSetAdd); +} + +FcLangSet * +FcLangSetSubtract (const FcLangSet *a, const FcLangSet *b) +{ + return FcLangSetOperate(a, b, FcLangSetDel); +} + +#define __fclang__ +#include "fcaliastail.h" +#include "fcftaliastail.h" +#undef __fclang__ diff --git a/fontconfig/src/fclist.c b/fontconfig/src/fclist.c index 0f9a1235c..9a84b5c7e 100644 --- a/fontconfig/src/fclist.c +++ b/fontconfig/src/fclist.c @@ -1,577 +1,577 @@ -/* - * fontconfig/src/fclist.c - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include - -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 + +FcObjectSet * +FcObjectSetCreate (void) +{ + FcObjectSet *os; + + os = (FcObjectSet *) malloc (sizeof (FcObjectSet)); + if (!os) + return 0; + FcMemAlloc (FC_MEM_OBJECTSET, sizeof (FcObjectSet)); + os->nobject = 0; + os->sobject = 0; + os->objects = 0; + return os; +} + +FcBool +FcObjectSetAdd (FcObjectSet *os, const char *object) +{ + int s; + const char **objects; + int high, low, mid, c; + + if (os->nobject == os->sobject) + { + s = os->sobject + 4; + if (os->objects) + objects = (const char **) realloc ((void *) os->objects, + s * sizeof (const char *)); + else + objects = (const char **) malloc (s * sizeof (const char *)); + if (!objects) + return FcFalse; + if (os->sobject) + FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *)); + FcMemAlloc (FC_MEM_OBJECTPTR, s * sizeof (const char *)); + os->objects = objects; + os->sobject = s; + } + high = os->nobject - 1; + low = 0; + mid = 0; + c = 1; + object = (char *)FcStrStaticName ((FcChar8 *)object); + while (low <= high) + { + mid = (low + high) >> 1; + c = os->objects[mid] - object; + if (c == 0) + return FcTrue; + if (c < 0) + low = mid + 1; + else + high = mid - 1; + } + if (c < 0) + mid++; + memmove (os->objects + mid + 1, os->objects + mid, + (os->nobject - mid) * sizeof (const char *)); + os->objects[mid] = object; + os->nobject++; + return FcTrue; +} + +void +FcObjectSetDestroy (FcObjectSet *os) +{ + if (os->objects) + { + FcMemFree (FC_MEM_OBJECTPTR, os->sobject * sizeof (const char *)); + free ((void *) os->objects); + } + FcMemFree (FC_MEM_OBJECTSET, sizeof (FcObjectSet)); + free (os); +} + +FcObjectSet * +FcObjectSetVaBuild (const char *first, va_list va) +{ + FcObjectSet *ret; + + FcObjectSetVapBuild (ret, first, va); + return ret; +} + +FcObjectSet * +FcObjectSetBuild (const char *first, ...) +{ + va_list va; + FcObjectSet *os; + + va_start (va, first); + FcObjectSetVapBuild (os, first, va); + va_end (va); + return os; +} + +/* + * Font must have a containing value for every value in the pattern + */ +static FcBool +FcListValueListMatchAny (FcValueListPtr patOrig, /* pattern */ + FcValueListPtr fntOrig) /* font */ +{ + FcValueListPtr pat, fnt; + + for (pat = patOrig; pat != NULL; pat = FcValueListNext(pat)) + { + for (fnt = fntOrig; fnt != NULL; fnt = FcValueListNext(fnt)) + { + /* + * make sure the font 'contains' the pattern. + * (OpListing is OpContains except for strings + * where it requires an exact match) + */ + if (FcConfigCompareValue (&fnt->value, + FcOpListing, + &pat->value)) + break; + } + if (fnt == NULL) + return FcFalse; + } + return FcTrue; +} + +static FcBool +FcListValueListEqual (FcValueListPtr v1orig, + FcValueListPtr v2orig) +{ + FcValueListPtr v1, v2; + + for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1)) + { + for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2)) + if (FcValueEqual (FcValueCanonicalize(&(v1)->value), + FcValueCanonicalize(&(v2)->value))) + break; + if (v2 == NULL) + return FcFalse; + } + for (v2 = v2orig; v2 != NULL; v2 = FcValueListNext(v2)) + { + for (v1 = v1orig; v1 != NULL; v1 = FcValueListNext(v1)) + if (FcValueEqual (FcValueCanonicalize(&v1->value), + FcValueCanonicalize(&v2->value))) + break; + if (v1 == NULL) + return FcFalse; + } + return FcTrue; +} + +static FcBool +FcListPatternEqual (FcPattern *p1, + FcPattern *p2, + FcObjectSet *os) +{ + int i; + FcPatternElt *e1, *e2; + + for (i = 0; i < os->nobject; i++) + { + e1 = FcPatternObjectFindElt (p1, FcObjectFromName (os->objects[i])); + e2 = FcPatternObjectFindElt (p2, FcObjectFromName (os->objects[i])); + if (!e1 && !e2) + continue; + if (!e1 || !e2) + return FcFalse; + if (!FcListValueListEqual (FcPatternEltValues(e1), + FcPatternEltValues(e2))) + return FcFalse; + } + return FcTrue; +} + +/* + * FcTrue iff all objects in "p" match "font" + */ + +FcBool +FcListPatternMatchAny (const FcPattern *p, + const FcPattern *font) +{ + int i; + + for (i = 0; i < p->num; i++) + { + FcPatternElt *pe = &FcPatternElts(p)[i]; + FcPatternElt *fe = FcPatternObjectFindElt (font, pe->object); + if (!fe) + return FcFalse; + if (!FcListValueListMatchAny (FcPatternEltValues(pe), /* pat elts */ + FcPatternEltValues(fe))) /* font elts */ + return FcFalse; + } + return FcTrue; +} + +static FcChar32 +FcListMatrixHash (const FcMatrix *m) +{ + int xx = (int) (m->xx * 100), + xy = (int) (m->xy * 100), + yx = (int) (m->yx * 100), + yy = (int) (m->yy * 100); + + return ((FcChar32) xx) ^ ((FcChar32) xy) ^ ((FcChar32) yx) ^ ((FcChar32) yy); +} + +static FcChar32 +FcListValueHash (FcValue *value) +{ + FcValue v = FcValueCanonicalize(value); + switch (v.type) { + case FcTypeVoid: + return 0; + case FcTypeInteger: + return (FcChar32) v.u.i; + case FcTypeDouble: + return (FcChar32) (int) v.u.d; + case FcTypeString: + return FcStrHashIgnoreCase (v.u.s); + case FcTypeBool: + return (FcChar32) v.u.b; + case FcTypeMatrix: + return FcListMatrixHash (v.u.m); + case FcTypeCharSet: + return FcCharSetCount (v.u.c); + case FcTypeFTFace: + return (long) v.u.f; + case FcTypeLangSet: + return FcLangSetHash (v.u.l); + } + return 0; +} + +static FcChar32 +FcListValueListHash (FcValueListPtr list) +{ + FcChar32 h = 0; + + while (list != NULL) + { + h = h ^ FcListValueHash (&list->value); + list = FcValueListNext(list); + } + return h; +} + +static FcChar32 +FcListPatternHash (FcPattern *font, + FcObjectSet *os) +{ + int n; + FcPatternElt *e; + FcChar32 h = 0; + + for (n = 0; n < os->nobject; n++) + { + e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[n])); + if (e) + h = h ^ FcListValueListHash (FcPatternEltValues(e)); + } + return h; +} + +typedef struct _FcListBucket { + struct _FcListBucket *next; + FcChar32 hash; + FcPattern *pattern; +} FcListBucket; + +#define FC_LIST_HASH_SIZE 4099 + +typedef struct _FcListHashTable { + int entries; + FcListBucket *buckets[FC_LIST_HASH_SIZE]; +} FcListHashTable; + +static void +FcListHashTableInit (FcListHashTable *table) +{ + table->entries = 0; + memset (table->buckets, '\0', sizeof (table->buckets)); +} + +static void +FcListHashTableCleanup (FcListHashTable *table) +{ + int i; + FcListBucket *bucket, *next; + + for (i = 0; i < FC_LIST_HASH_SIZE; i++) + { + for (bucket = table->buckets[i]; bucket; bucket = next) + { + next = bucket->next; + FcPatternDestroy (bucket->pattern); + FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket)); + free (bucket); + } + table->buckets[i] = 0; + } + table->entries = 0; +} + +static int +FcGetDefaultObjectLangIndex (FcPattern *font, FcObject object) +{ + FcChar8 *lang = FcGetDefaultLang (); + FcPatternElt *e = FcPatternObjectFindElt (font, object); + FcValueListPtr v; + FcValue value; + int idx = -1; + int i; + + if (e) + { + for (v = FcPatternEltValues(e), i = 0; v; v = FcValueListNext(v), ++i) + { + value = FcValueCanonicalize (&v->value); + + if (value.type == FcTypeString) + { + FcLangResult res = FcLangCompare (value.u.s, lang); + if (res == FcLangEqual) + return i; + + if (res == FcLangDifferentCountry && idx < 0) + idx = i; + } + } + } + + return (idx > 0) ? idx : 0; +} + +static FcBool +FcListAppend (FcListHashTable *table, + FcPattern *font, + FcObjectSet *os) +{ + int o; + FcPatternElt *e; + FcValueListPtr v; + FcChar32 hash; + FcListBucket **prev, *bucket; + int familyidx = -1; + int fullnameidx = -1; + int styleidx = -1; + int defidx = 0; + int idx; + + hash = FcListPatternHash (font, os); + for (prev = &table->buckets[hash % FC_LIST_HASH_SIZE]; + (bucket = *prev); prev = &(bucket->next)) + { + if (bucket->hash == hash && + FcListPatternEqual (bucket->pattern, font, os)) + return FcTrue; + } + bucket = (FcListBucket *) malloc (sizeof (FcListBucket)); + if (!bucket) + goto bail0; + FcMemAlloc (FC_MEM_LISTBUCK, sizeof (FcListBucket)); + bucket->next = 0; + bucket->hash = hash; + bucket->pattern = FcPatternCreate (); + if (!bucket->pattern) + goto bail1; + + for (o = 0; o < os->nobject; o++) + { + if (!strcmp (os->objects[o], FC_FAMILY) || !strcmp (os->objects[o], FC_FAMILYLANG)) + { + if (familyidx < 0) + familyidx = FcGetDefaultObjectLangIndex (font, FC_FAMILYLANG_OBJECT); + defidx = familyidx; + } + else if (!strcmp (os->objects[o], FC_FULLNAME) || !strcmp (os->objects[o], FC_FULLNAMELANG)) + { + if (fullnameidx < 0) + fullnameidx = FcGetDefaultObjectLangIndex (font, FC_FULLNAMELANG_OBJECT); + defidx = fullnameidx; + } + else if (!strcmp (os->objects[o], FC_STYLE) || !strcmp (os->objects[o], FC_STYLELANG)) + { + if (styleidx < 0) + styleidx = FcGetDefaultObjectLangIndex (font, FC_STYLELANG_OBJECT); + defidx = styleidx; + } + else + defidx = 0; + + e = FcPatternObjectFindElt (font, FcObjectFromName (os->objects[o])); + if (e) + { + for (v = FcPatternEltValues(e), idx = 0; v; + v = FcValueListNext(v), ++idx) + { + if (!FcPatternAdd (bucket->pattern, + os->objects[o], + FcValueCanonicalize(&v->value), defidx != idx)) + goto bail2; + } + } + } + *prev = bucket; + ++table->entries; + + return FcTrue; + +bail2: + FcPatternDestroy (bucket->pattern); +bail1: + FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket)); + free (bucket); +bail0: + return FcFalse; +} + +FcFontSet * +FcFontSetList (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcObjectSet *os) +{ + FcFontSet *ret; + FcFontSet *s; + int f; + int set; + FcListHashTable table; + int i; + FcListBucket *bucket; + int destroy_os = 0; + + if (!config) + { + if (!FcInitBringUptoDate ()) + goto bail0; + + config = FcConfigGetCurrent (); + if (!config) + goto bail0; + } + FcListHashTableInit (&table); + + if (!os) + { + os = FcObjectGetSet (); + destroy_os = 1; + } + + /* + * Walk all available fonts adding those that + * match to the hash table + */ + for (set = 0; set < nsets; set++) + { + s = sets[set]; + if (!s) + continue; + for (f = 0; f < s->nfont; f++) + if (FcListPatternMatchAny (p, /* pattern */ + s->fonts[f])) /* font */ + if (!FcListAppend (&table, s->fonts[f], os)) + goto bail1; + } +#if 0 + { + int max = 0; + int full = 0; + int ents = 0; + int len; + for (i = 0; i < FC_LIST_HASH_SIZE; i++) + { + if ((bucket = table.buckets[i])) + { + len = 0; + for (; bucket; bucket = bucket->next) + { + ents++; + len++; + } + if (len > max) + max = len; + full++; + } + } + printf ("used: %d max: %d avg: %g\n", full, max, + (double) ents / FC_LIST_HASH_SIZE); + } +#endif + /* + * Walk the hash table and build + * a font set + */ + ret = FcFontSetCreate (); + if (!ret) + goto bail0; + for (i = 0; i < FC_LIST_HASH_SIZE; i++) + while ((bucket = table.buckets[i])) + { + if (!FcFontSetAdd (ret, bucket->pattern)) + goto bail2; + table.buckets[i] = bucket->next; + FcMemFree (FC_MEM_LISTBUCK, sizeof (FcListBucket)); + free (bucket); + } + + return ret; + +bail2: + FcFontSetDestroy (ret); +bail1: + FcListHashTableCleanup (&table); +bail0: + if (destroy_os) + FcObjectSetDestroy (os); + return 0; +} + +FcFontSet * +FcFontList (FcConfig *config, + FcPattern *p, + FcObjectSet *os) +{ + FcFontSet *sets[2]; + int nsets; + + if (!config) + { + if (!FcInitBringUptoDate ()) + return 0; + + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + nsets = 0; + if (config->fonts[FcSetSystem]) + sets[nsets++] = config->fonts[FcSetSystem]; + if (config->fonts[FcSetApplication]) + sets[nsets++] = config->fonts[FcSetApplication]; + return FcFontSetList (config, sets, nsets, p, os); +} +#define __fclist__ +#include "fcaliastail.h" +#undef __fclist__ diff --git a/fontconfig/src/fcmatch.c b/fontconfig/src/fcmatch.c index c6bb11ef2..1b9162b46 100644 --- a/fontconfig/src/fcmatch.c +++ b/fontconfig/src/fcmatch.c @@ -1,840 +1,840 @@ -/* - * fontconfig/src/fcmatch.c - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include -#include -#include - -static double -FcCompareNumber (FcValue *value1, FcValue *value2) -{ - double v1, v2, v; - - switch (value1->type) { - case FcTypeInteger: - v1 = (double) value1->u.i; - break; - case FcTypeDouble: - v1 = value1->u.d; - break; - default: - return -1.0; - } - switch (value2->type) { - case FcTypeInteger: - v2 = (double) value2->u.i; - break; - case FcTypeDouble: - v2 = value2->u.d; - break; - default: - return -1.0; - } - v = v2 - v1; - if (v < 0) - v = -v; - return v; -} - -static double -FcCompareString (FcValue *v1, FcValue *v2) -{ - return (double) FcStrCmpIgnoreCase (FcValueString(v1), FcValueString(v2)) != 0; -} - -static double -FcCompareFamily (FcValue *v1, FcValue *v2) -{ - /* rely on the guarantee in FcPatternObjectAddWithBinding that - * families are always FcTypeString. */ - const FcChar8* v1_string = FcValueString(v1); - const FcChar8* v2_string = FcValueString(v2); - - if (FcToLower(*v1_string) != FcToLower(*v2_string) && - *v1_string != ' ' && *v2_string != ' ') - return 1.0; - - return (double) FcStrCmpIgnoreBlanksAndCase (v1_string, v2_string) != 0; -} - -static double -FcCompareLang (FcValue *v1, FcValue *v2) -{ - FcLangResult result; - FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2); - - switch (value1.type) { - case FcTypeLangSet: - switch (value2.type) { - case FcTypeLangSet: - result = FcLangSetCompare (value1.u.l, value2.u.l); - break; - case FcTypeString: - result = FcLangSetHasLang (value1.u.l, - value2.u.s); - break; - default: - return -1.0; - } - break; - case FcTypeString: - switch (value2.type) { - case FcTypeLangSet: - result = FcLangSetHasLang (value2.u.l, value1.u.s); - break; - case FcTypeString: - result = FcLangCompare (value1.u.s, - value2.u.s); - break; - default: - return -1.0; - } - break; - default: - return -1.0; - } - switch (result) { - case FcLangEqual: - return 0; - case FcLangDifferentCountry: - return 1; - case FcLangDifferentLang: - default: - return 2; - } -} - -static double -FcCompareBool (FcValue *v1, FcValue *v2) -{ - if (v2->type != FcTypeBool || v1->type != FcTypeBool) - return -1.0; - return (double) v2->u.b != v1->u.b; -} - -static double -FcCompareCharSet (FcValue *v1, FcValue *v2) -{ - return (double) FcCharSetSubtractCount (FcValueCharSet(v1), FcValueCharSet(v2)); -} - -static double -FcCompareSize (FcValue *value1, FcValue *value2) -{ - double v1, v2, v; - - switch (value1->type) { - case FcTypeInteger: - v1 = value1->u.i; - break; - case FcTypeDouble: - v1 = value1->u.d; - break; - default: - return -1; - } - switch (value2->type) { - case FcTypeInteger: - v2 = value2->u.i; - break; - case FcTypeDouble: - v2 = value2->u.d; - break; - default: - return -1; - } - if (v2 == 0) - return 0; - v = v2 - v1; - if (v < 0) - v = -v; - return v; -} - -typedef struct _FcMatcher { - FcObject object; - double (*compare) (FcValue *value1, FcValue *value2); - int strong, weak; -} FcMatcher; - -/* - * Order is significant, it defines the precedence of - * each value, earlier values are more significant than - * later values - */ -static const FcMatcher _FcMatchers [] = { - { FC_FOUNDRY_OBJECT, FcCompareString, 0, 0 }, -#define MATCH_FOUNDRY 0 - { FC_CHARSET_OBJECT, FcCompareCharSet, 1, 1 }, -#define MATCH_CHARSET 1 - { FC_FAMILY_OBJECT, FcCompareFamily, 2, 4 }, -#define MATCH_FAMILY 2 - { FC_LANG_OBJECT, FcCompareLang, 3, 3 }, -#define MATCH_LANG 3 -#define MATCH_LANG_INDEX 3 - { FC_SPACING_OBJECT, FcCompareNumber, 5, 5 }, -#define MATCH_SPACING 4 - { FC_PIXEL_SIZE_OBJECT, FcCompareSize, 6, 6 }, -#define MATCH_PIXEL_SIZE 5 - { FC_STYLE_OBJECT, FcCompareString, 7, 7 }, -#define MATCH_STYLE 6 - { FC_SLANT_OBJECT, FcCompareNumber, 8, 8 }, -#define MATCH_SLANT 7 - { FC_WEIGHT_OBJECT, FcCompareNumber, 9, 9 }, -#define MATCH_WEIGHT 8 - { FC_WIDTH_OBJECT, FcCompareNumber, 10, 10 }, -#define MATCH_WIDTH 9 - { FC_DECORATIVE_OBJECT, FcCompareBool, 11, 11 }, -#define MATCH_DECORATIVE 10 - { FC_ANTIALIAS_OBJECT, FcCompareBool, 12, 12 }, -#define MATCH_ANTIALIAS 11 - { FC_RASTERIZER_OBJECT, FcCompareString, 13, 13 }, -#define MATCH_RASTERIZER 12 - { FC_OUTLINE_OBJECT, FcCompareBool, 14, 14 }, -#define MATCH_OUTLINE 13 - { FC_FONTVERSION_OBJECT, FcCompareNumber, 15, 15 }, -#define MATCH_FONTVERSION 14 -}; - -#define NUM_MATCH_VALUES 16 - -static const FcMatcher* -FcObjectToMatcher (FcObject object) -{ - int i; - - i = -1; - switch (object) { - case FC_FOUNDRY_OBJECT: - i = MATCH_FOUNDRY; break; - case FC_FONTVERSION_OBJECT: - i = MATCH_FONTVERSION; break; - case FC_FAMILY_OBJECT: - i = MATCH_FAMILY; break; - case FC_CHARSET_OBJECT: - i = MATCH_CHARSET; break; - case FC_ANTIALIAS_OBJECT: - i = MATCH_ANTIALIAS; break; - case FC_LANG_OBJECT: - i = MATCH_LANG; break; - case FC_SPACING_OBJECT: - i = MATCH_SPACING; break; - case FC_STYLE_OBJECT: - i = MATCH_STYLE; break; - case FC_SLANT_OBJECT: - i = MATCH_SLANT; break; - case FC_PIXEL_SIZE_OBJECT: - i = MATCH_PIXEL_SIZE; break; - case FC_WIDTH_OBJECT: - i = MATCH_WIDTH; break; - case FC_WEIGHT_OBJECT: - i = MATCH_WEIGHT; break; - case FC_RASTERIZER_OBJECT: - i = MATCH_RASTERIZER; break; - case FC_OUTLINE_OBJECT: - i = MATCH_OUTLINE; break; - case FC_DECORATIVE_OBJECT: - i = MATCH_DECORATIVE; break; - } - - if (i < 0) - return NULL; - - return _FcMatchers+i; -} - -static FcBool -FcCompareValueList (FcObject object, - FcValueListPtr v1orig, /* pattern */ - FcValueListPtr v2orig, /* target */ - FcValue *bestValue, - double *value, - FcResult *result) -{ - FcValueListPtr v1, v2; - double v, best, bestStrong, bestWeak; - int j; - const FcMatcher *match = FcObjectToMatcher(object); - - if (!match) - { - if (bestValue) - *bestValue = FcValueCanonicalize(&v2orig->value); - return FcTrue; - } - - best = 1e99; - bestStrong = 1e99; - bestWeak = 1e99; - j = 1; - for (v1 = v1orig; v1; v1 = FcValueListNext(v1)) - { - for (v2 = v2orig; v2; v2 = FcValueListNext(v2)) - { - v = (match->compare) (&v1->value, &v2->value); - if (v < 0) - { - *result = FcResultTypeMismatch; - return FcFalse; - } - v = v * 1000 + j; - if (v < best) - { - if (bestValue) - *bestValue = FcValueCanonicalize(&v2->value); - best = v; - } - if (v1->binding == FcValueBindingStrong) - { - if (v < bestStrong) - bestStrong = v; - } - else - { - if (v < bestWeak) - bestWeak = v; - } - } - j++; - } - if (FcDebug () & FC_DBG_MATCHV) - { - printf (" %s: %g ", FcObjectName (object), best); - FcValueListPrint (v1orig); - printf (", "); - FcValueListPrint (v2orig); - printf ("\n"); - } - if (value) - { - int weak = match->weak; - int strong = match->strong; - if (weak == strong) - value[strong] += best; - else - { - value[weak] += bestWeak; - value[strong] += bestStrong; - } - } - return FcTrue; -} - -/* - * Return a value indicating the distance between the two lists of - * values - */ - -static FcBool -FcCompare (FcPattern *pat, - FcPattern *fnt, - double *value, - FcResult *result) -{ - int i, i1, i2; - - for (i = 0; i < NUM_MATCH_VALUES; i++) - value[i] = 0.0; - - i1 = 0; - i2 = 0; - while (i1 < pat->num && i2 < fnt->num) - { - FcPatternElt *elt_i1 = &FcPatternElts(pat)[i1]; - FcPatternElt *elt_i2 = &FcPatternElts(fnt)[i2]; - - i = FcObjectCompare(elt_i1->object, elt_i2->object); - if (i > 0) - i2++; - else if (i < 0) - i1++; - else - { - if (!FcCompareValueList (elt_i1->object, - FcPatternEltValues(elt_i1), - FcPatternEltValues(elt_i2), - 0, value, result)) - return FcFalse; - i1++; - i2++; - } - } - return FcTrue; -} - -FcPattern * -FcFontRenderPrepare (FcConfig *config, - FcPattern *pat, - FcPattern *font) -{ - FcPattern *new; - int i; - FcPatternElt *fe, *pe; - FcValue v; - FcResult result; - - new = FcPatternCreate (); - if (!new) - return 0; - for (i = 0; i < font->num; i++) - { - fe = &FcPatternElts(font)[i]; - pe = FcPatternObjectFindElt (pat, fe->object); - if (pe) - { - if (!FcCompareValueList (pe->object, FcPatternEltValues(pe), - FcPatternEltValues(fe), &v, 0, &result)) - { - FcPatternDestroy (new); - return 0; - } - } - else - v = FcValueCanonicalize(&FcPatternEltValues (fe)->value); - FcPatternObjectAdd (new, fe->object, v, FcFalse); - } - for (i = 0; i < pat->num; i++) - { - pe = &FcPatternElts(pat)[i]; - fe = FcPatternObjectFindElt (font, pe->object); - if (!fe) - { - v = FcValueCanonicalize(&FcPatternEltValues(pe)->value); - FcPatternObjectAdd (new, pe->object, v, FcTrue); - } - } - - FcConfigSubstituteWithPat (config, new, pat, FcMatchFont); - return new; -} - -static FcPattern * -FcFontSetMatchInternal (FcConfig *config, - FcFontSet **sets, - int nsets, - FcPattern *p, - FcResult *result) -{ - double score[NUM_MATCH_VALUES], bestscore[NUM_MATCH_VALUES]; - int f; - FcFontSet *s; - FcPattern *best; - int i; - int set; - - for (i = 0; i < NUM_MATCH_VALUES; i++) - bestscore[i] = 0; - best = 0; - if (FcDebug () & FC_DBG_MATCH) - { - printf ("Match "); - FcPatternPrint (p); - } - for (set = 0; set < nsets; set++) - { - s = sets[set]; - if (!s) - continue; - for (f = 0; f < s->nfont; f++) - { - if (FcDebug () & FC_DBG_MATCHV) - { - printf ("Font %d ", f); - FcPatternPrint (s->fonts[f]); - } - if (!FcCompare (p, s->fonts[f], score, result)) - return 0; - if (FcDebug () & FC_DBG_MATCHV) - { - printf ("Score"); - for (i = 0; i < NUM_MATCH_VALUES; i++) - { - printf (" %g", score[i]); - } - printf ("\n"); - } - for (i = 0; i < NUM_MATCH_VALUES; i++) - { - if (best && bestscore[i] < score[i]) - break; - if (!best || score[i] < bestscore[i]) - { - for (i = 0; i < NUM_MATCH_VALUES; i++) - bestscore[i] = score[i]; - best = s->fonts[f]; - break; - } - } - } - } - if (FcDebug () & FC_DBG_MATCH) - { - printf ("Best score"); - for (i = 0; i < NUM_MATCH_VALUES; i++) - printf (" %g", bestscore[i]); - printf ("\n"); - FcPatternPrint (best); - } - if (!best) - { - *result = FcResultNoMatch; - return 0; - } - return best; -} - -FcPattern * -FcFontSetMatch (FcConfig *config, - FcFontSet **sets, - int nsets, - FcPattern *p, - FcResult *result) -{ - FcPattern *best; - - if (!config) - { - config = FcConfigGetCurrent (); - if (!config) - return 0; - } - best = FcFontSetMatchInternal (config, sets, nsets, p, result); - if (best) - return FcFontRenderPrepare (config, p, best); - else - return NULL; -} - -FcPattern * -FcFontMatch (FcConfig *config, - FcPattern *p, - FcResult *result) -{ - FcFontSet *sets[2]; - int nsets; - FcPattern *best; - - if (!config) - { - config = FcConfigGetCurrent (); - if (!config) - return 0; - } - nsets = 0; - if (config->fonts[FcSetSystem]) - sets[nsets++] = config->fonts[FcSetSystem]; - if (config->fonts[FcSetApplication]) - sets[nsets++] = config->fonts[FcSetApplication]; - - best = FcFontSetMatchInternal (config, sets, nsets, p, result); - if (best) - return FcFontRenderPrepare (config, p, best); - else - return NULL; -} - -typedef struct _FcSortNode { - FcPattern *pattern; - double score[NUM_MATCH_VALUES]; -} FcSortNode; - -static int -FcSortCompare (const void *aa, const void *ab) -{ - FcSortNode *a = *(FcSortNode **) aa; - FcSortNode *b = *(FcSortNode **) ab; - double *as = &a->score[0]; - double *bs = &b->score[0]; - double ad = 0, bd = 0; - int i; - - i = NUM_MATCH_VALUES; - while (i-- && (ad = *as++) == (bd = *bs++)) - ; - return ad < bd ? -1 : ad > bd ? 1 : 0; -} - -static FcBool -FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool trim) -{ - FcBool ret = FcFalse; - FcCharSet *cs; - - cs = 0; - if (trim || csp) - { - cs = FcCharSetCreate (); - if (cs == NULL) - goto bail; - } - - while (nnode--) - { - FcSortNode *node = *n++; - FcBool adds_chars = FcFalse; - - /* - * Only fetch node charset if we'd need it - */ - if (cs) - { - FcCharSet *ncs; - - if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) != - FcResultMatch) - continue; - - if (!FcCharSetMerge (cs, ncs, &adds_chars)) - goto bail; - } - - /* - * If this font isn't a subset of the previous fonts, - * add it to the list - */ - if (!trim || adds_chars) - { - FcPatternReference (node->pattern); - if (FcDebug () & FC_DBG_MATCHV) - { - printf ("Add "); - FcPatternPrint (node->pattern); - } - if (!FcFontSetAdd (fs, node->pattern)) - { - FcPatternDestroy (node->pattern); - goto bail; - } - } - } - if (csp) - { - *csp = cs; - cs = 0; - } - - ret = FcTrue; - -bail: - if (cs) - FcCharSetDestroy (cs); - - return ret; -} - -void -FcFontSetSortDestroy (FcFontSet *fs) -{ - FcFontSetDestroy (fs); -} - -FcFontSet * -FcFontSetSort (FcConfig *config, - FcFontSet **sets, - int nsets, - FcPattern *p, - FcBool trim, - FcCharSet **csp, - FcResult *result) -{ - FcFontSet *ret; - FcFontSet *s; - FcSortNode *nodes; - FcSortNode **nodeps, **nodep; - int nnodes; - FcSortNode *new; - int set; - int f; - int i; - int nPatternLang; - FcBool *patternLangSat; - FcValue patternLang; - - if (FcDebug () & FC_DBG_MATCH) - { - printf ("Sort "); - FcPatternPrint (p); - } - nnodes = 0; - for (set = 0; set < nsets; set++) - { - s = sets[set]; - if (!s) - continue; - nnodes += s->nfont; - } - if (!nnodes) - goto bail0; - - for (nPatternLang = 0; - FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch; - nPatternLang++) - ; - - /* freed below */ - nodes = malloc (nnodes * sizeof (FcSortNode) + - nnodes * sizeof (FcSortNode *) + - nPatternLang * sizeof (FcBool)); - if (!nodes) - goto bail0; - nodeps = (FcSortNode **) (nodes + nnodes); - patternLangSat = (FcBool *) (nodeps + nnodes); - - new = nodes; - nodep = nodeps; - for (set = 0; set < nsets; set++) - { - s = sets[set]; - if (!s) - continue; - for (f = 0; f < s->nfont; f++) - { - if (FcDebug () & FC_DBG_MATCHV) - { - printf ("Font %d ", f); - FcPatternPrint (s->fonts[f]); - } - new->pattern = s->fonts[f]; - if (!FcCompare (p, new->pattern, new->score, result)) - goto bail1; - if (FcDebug () & FC_DBG_MATCHV) - { - printf ("Score"); - for (i = 0; i < NUM_MATCH_VALUES; i++) - { - printf (" %g", new->score[i]); - } - printf ("\n"); - } - *nodep = new; - new++; - nodep++; - } - } - - nnodes = new - nodes; - - qsort (nodeps, nnodes, sizeof (FcSortNode *), - FcSortCompare); - - for (i = 0; i < nPatternLang; i++) - patternLangSat[i] = FcFalse; - - for (f = 0; f < nnodes; f++) - { - FcBool satisfies = FcFalse; - /* - * If this node matches any language, go check - * which ones and satisfy those entries - */ - if (nodeps[f]->score[MATCH_LANG_INDEX] < 2000) - { - for (i = 0; i < nPatternLang; i++) - { - FcValue nodeLang; - - if (!patternLangSat[i] && - FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch && - FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch) - { - double compare = FcCompareLang (&patternLang, &nodeLang); - if (compare >= 0 && compare < 2) - { - if (FcDebug () & FC_DBG_MATCHV) - { - FcChar8 *family; - FcChar8 *style; - - if (FcPatternGetString (nodeps[f]->pattern, FC_FAMILY, 0, &family) == FcResultMatch && - FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch) - printf ("Font %s:%s matches language %d\n", family, style, i); - } - patternLangSat[i] = FcTrue; - satisfies = FcTrue; - break; - } - } - } - } - if (!satisfies) - nodeps[f]->score[MATCH_LANG_INDEX] = 10000.0; - } - - /* - * Re-sort once the language issues have been settled - */ - qsort (nodeps, nnodes, sizeof (FcSortNode *), - FcSortCompare); - - ret = FcFontSetCreate (); - if (!ret) - goto bail1; - - if (!FcSortWalk (nodeps, nnodes, ret, csp, trim)) - goto bail2; - - free (nodes); - - if (FcDebug() & FC_DBG_MATCH) - { - printf ("First font "); - FcPatternPrint (ret->fonts[0]); - } - return ret; - -bail2: - FcFontSetDestroy (ret); -bail1: - free (nodes); -bail0: - return 0; -} - -FcFontSet * -FcFontSort (FcConfig *config, - FcPattern *p, - FcBool trim, - FcCharSet **csp, - FcResult *result) -{ - FcFontSet *sets[2]; - int nsets; - - if (!config) - { - config = FcConfigGetCurrent (); - if (!config) - return 0; - } - nsets = 0; - if (config->fonts[FcSetSystem]) - sets[nsets++] = config->fonts[FcSetSystem]; - if (config->fonts[FcSetApplication]) - sets[nsets++] = config->fonts[FcSetApplication]; - return FcFontSetSort (config, sets, nsets, p, trim, csp, result); -} -#define __fcmatch__ -#include "fcaliastail.h" -#undef __fcmatch__ +/* + * fontconfig/src/fcmatch.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include +#include +#include + +static double +FcCompareNumber (FcValue *value1, FcValue *value2) +{ + double v1, v2, v; + + switch (value1->type) { + case FcTypeInteger: + v1 = (double) value1->u.i; + break; + case FcTypeDouble: + v1 = value1->u.d; + break; + default: + return -1.0; + } + switch (value2->type) { + case FcTypeInteger: + v2 = (double) value2->u.i; + break; + case FcTypeDouble: + v2 = value2->u.d; + break; + default: + return -1.0; + } + v = v2 - v1; + if (v < 0) + v = -v; + return v; +} + +static double +FcCompareString (FcValue *v1, FcValue *v2) +{ + return (double) FcStrCmpIgnoreCase (FcValueString(v1), FcValueString(v2)) != 0; +} + +static double +FcCompareFamily (FcValue *v1, FcValue *v2) +{ + /* rely on the guarantee in FcPatternObjectAddWithBinding that + * families are always FcTypeString. */ + const FcChar8* v1_string = FcValueString(v1); + const FcChar8* v2_string = FcValueString(v2); + + if (FcToLower(*v1_string) != FcToLower(*v2_string) && + *v1_string != ' ' && *v2_string != ' ') + return 1.0; + + return (double) FcStrCmpIgnoreBlanksAndCase (v1_string, v2_string) != 0; +} + +static double +FcCompareLang (FcValue *v1, FcValue *v2) +{ + FcLangResult result; + FcValue value1 = FcValueCanonicalize(v1), value2 = FcValueCanonicalize(v2); + + switch (value1.type) { + case FcTypeLangSet: + switch (value2.type) { + case FcTypeLangSet: + result = FcLangSetCompare (value1.u.l, value2.u.l); + break; + case FcTypeString: + result = FcLangSetHasLang (value1.u.l, + value2.u.s); + break; + default: + return -1.0; + } + break; + case FcTypeString: + switch (value2.type) { + case FcTypeLangSet: + result = FcLangSetHasLang (value2.u.l, value1.u.s); + break; + case FcTypeString: + result = FcLangCompare (value1.u.s, + value2.u.s); + break; + default: + return -1.0; + } + break; + default: + return -1.0; + } + switch (result) { + case FcLangEqual: + return 0; + case FcLangDifferentCountry: + return 1; + case FcLangDifferentLang: + default: + return 2; + } +} + +static double +FcCompareBool (FcValue *v1, FcValue *v2) +{ + if (v2->type != FcTypeBool || v1->type != FcTypeBool) + return -1.0; + return (double) v2->u.b != v1->u.b; +} + +static double +FcCompareCharSet (FcValue *v1, FcValue *v2) +{ + return (double) FcCharSetSubtractCount (FcValueCharSet(v1), FcValueCharSet(v2)); +} + +static double +FcCompareSize (FcValue *value1, FcValue *value2) +{ + double v1, v2, v; + + switch (value1->type) { + case FcTypeInteger: + v1 = value1->u.i; + break; + case FcTypeDouble: + v1 = value1->u.d; + break; + default: + return -1; + } + switch (value2->type) { + case FcTypeInteger: + v2 = value2->u.i; + break; + case FcTypeDouble: + v2 = value2->u.d; + break; + default: + return -1; + } + if (v2 == 0) + return 0; + v = v2 - v1; + if (v < 0) + v = -v; + return v; +} + +typedef struct _FcMatcher { + FcObject object; + double (*compare) (FcValue *value1, FcValue *value2); + int strong, weak; +} FcMatcher; + +/* + * Order is significant, it defines the precedence of + * each value, earlier values are more significant than + * later values + */ +static const FcMatcher _FcMatchers [] = { + { FC_FOUNDRY_OBJECT, FcCompareString, 0, 0 }, +#define MATCH_FOUNDRY 0 + { FC_CHARSET_OBJECT, FcCompareCharSet, 1, 1 }, +#define MATCH_CHARSET 1 + { FC_FAMILY_OBJECT, FcCompareFamily, 2, 4 }, +#define MATCH_FAMILY 2 + { FC_LANG_OBJECT, FcCompareLang, 3, 3 }, +#define MATCH_LANG 3 +#define MATCH_LANG_INDEX 3 + { FC_SPACING_OBJECT, FcCompareNumber, 5, 5 }, +#define MATCH_SPACING 4 + { FC_PIXEL_SIZE_OBJECT, FcCompareSize, 6, 6 }, +#define MATCH_PIXEL_SIZE 5 + { FC_STYLE_OBJECT, FcCompareString, 7, 7 }, +#define MATCH_STYLE 6 + { FC_SLANT_OBJECT, FcCompareNumber, 8, 8 }, +#define MATCH_SLANT 7 + { FC_WEIGHT_OBJECT, FcCompareNumber, 9, 9 }, +#define MATCH_WEIGHT 8 + { FC_WIDTH_OBJECT, FcCompareNumber, 10, 10 }, +#define MATCH_WIDTH 9 + { FC_DECORATIVE_OBJECT, FcCompareBool, 11, 11 }, +#define MATCH_DECORATIVE 10 + { FC_ANTIALIAS_OBJECT, FcCompareBool, 12, 12 }, +#define MATCH_ANTIALIAS 11 + { FC_RASTERIZER_OBJECT, FcCompareString, 13, 13 }, +#define MATCH_RASTERIZER 12 + { FC_OUTLINE_OBJECT, FcCompareBool, 14, 14 }, +#define MATCH_OUTLINE 13 + { FC_FONTVERSION_OBJECT, FcCompareNumber, 15, 15 }, +#define MATCH_FONTVERSION 14 +}; + +#define NUM_MATCH_VALUES 16 + +static const FcMatcher* +FcObjectToMatcher (FcObject object) +{ + int i; + + i = -1; + switch (object) { + case FC_FOUNDRY_OBJECT: + i = MATCH_FOUNDRY; break; + case FC_FONTVERSION_OBJECT: + i = MATCH_FONTVERSION; break; + case FC_FAMILY_OBJECT: + i = MATCH_FAMILY; break; + case FC_CHARSET_OBJECT: + i = MATCH_CHARSET; break; + case FC_ANTIALIAS_OBJECT: + i = MATCH_ANTIALIAS; break; + case FC_LANG_OBJECT: + i = MATCH_LANG; break; + case FC_SPACING_OBJECT: + i = MATCH_SPACING; break; + case FC_STYLE_OBJECT: + i = MATCH_STYLE; break; + case FC_SLANT_OBJECT: + i = MATCH_SLANT; break; + case FC_PIXEL_SIZE_OBJECT: + i = MATCH_PIXEL_SIZE; break; + case FC_WIDTH_OBJECT: + i = MATCH_WIDTH; break; + case FC_WEIGHT_OBJECT: + i = MATCH_WEIGHT; break; + case FC_RASTERIZER_OBJECT: + i = MATCH_RASTERIZER; break; + case FC_OUTLINE_OBJECT: + i = MATCH_OUTLINE; break; + case FC_DECORATIVE_OBJECT: + i = MATCH_DECORATIVE; break; + } + + if (i < 0) + return NULL; + + return _FcMatchers+i; +} + +static FcBool +FcCompareValueList (FcObject object, + FcValueListPtr v1orig, /* pattern */ + FcValueListPtr v2orig, /* target */ + FcValue *bestValue, + double *value, + FcResult *result) +{ + FcValueListPtr v1, v2; + double v, best, bestStrong, bestWeak; + int j; + const FcMatcher *match = FcObjectToMatcher(object); + + if (!match) + { + if (bestValue) + *bestValue = FcValueCanonicalize(&v2orig->value); + return FcTrue; + } + + best = 1e99; + bestStrong = 1e99; + bestWeak = 1e99; + j = 1; + for (v1 = v1orig; v1; v1 = FcValueListNext(v1)) + { + for (v2 = v2orig; v2; v2 = FcValueListNext(v2)) + { + v = (match->compare) (&v1->value, &v2->value); + if (v < 0) + { + *result = FcResultTypeMismatch; + return FcFalse; + } + v = v * 1000 + j; + if (v < best) + { + if (bestValue) + *bestValue = FcValueCanonicalize(&v2->value); + best = v; + } + if (v1->binding == FcValueBindingStrong) + { + if (v < bestStrong) + bestStrong = v; + } + else + { + if (v < bestWeak) + bestWeak = v; + } + } + j++; + } + if (FcDebug () & FC_DBG_MATCHV) + { + printf (" %s: %g ", FcObjectName (object), best); + FcValueListPrint (v1orig); + printf (", "); + FcValueListPrint (v2orig); + printf ("\n"); + } + if (value) + { + int weak = match->weak; + int strong = match->strong; + if (weak == strong) + value[strong] += best; + else + { + value[weak] += bestWeak; + value[strong] += bestStrong; + } + } + return FcTrue; +} + +/* + * Return a value indicating the distance between the two lists of + * values + */ + +static FcBool +FcCompare (FcPattern *pat, + FcPattern *fnt, + double *value, + FcResult *result) +{ + int i, i1, i2; + + for (i = 0; i < NUM_MATCH_VALUES; i++) + value[i] = 0.0; + + i1 = 0; + i2 = 0; + while (i1 < pat->num && i2 < fnt->num) + { + FcPatternElt *elt_i1 = &FcPatternElts(pat)[i1]; + FcPatternElt *elt_i2 = &FcPatternElts(fnt)[i2]; + + i = FcObjectCompare(elt_i1->object, elt_i2->object); + if (i > 0) + i2++; + else if (i < 0) + i1++; + else + { + if (!FcCompareValueList (elt_i1->object, + FcPatternEltValues(elt_i1), + FcPatternEltValues(elt_i2), + 0, value, result)) + return FcFalse; + i1++; + i2++; + } + } + return FcTrue; +} + +FcPattern * +FcFontRenderPrepare (FcConfig *config, + FcPattern *pat, + FcPattern *font) +{ + FcPattern *new; + int i; + FcPatternElt *fe, *pe; + FcValue v; + FcResult result; + + new = FcPatternCreate (); + if (!new) + return 0; + for (i = 0; i < font->num; i++) + { + fe = &FcPatternElts(font)[i]; + pe = FcPatternObjectFindElt (pat, fe->object); + if (pe) + { + if (!FcCompareValueList (pe->object, FcPatternEltValues(pe), + FcPatternEltValues(fe), &v, 0, &result)) + { + FcPatternDestroy (new); + return 0; + } + } + else + v = FcValueCanonicalize(&FcPatternEltValues (fe)->value); + FcPatternObjectAdd (new, fe->object, v, FcFalse); + } + for (i = 0; i < pat->num; i++) + { + pe = &FcPatternElts(pat)[i]; + fe = FcPatternObjectFindElt (font, pe->object); + if (!fe) + { + v = FcValueCanonicalize(&FcPatternEltValues(pe)->value); + FcPatternObjectAdd (new, pe->object, v, FcTrue); + } + } + + FcConfigSubstituteWithPat (config, new, pat, FcMatchFont); + return new; +} + +static FcPattern * +FcFontSetMatchInternal (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcResult *result) +{ + double score[NUM_MATCH_VALUES], bestscore[NUM_MATCH_VALUES]; + int f; + FcFontSet *s; + FcPattern *best; + int i; + int set; + + for (i = 0; i < NUM_MATCH_VALUES; i++) + bestscore[i] = 0; + best = 0; + if (FcDebug () & FC_DBG_MATCH) + { + printf ("Match "); + FcPatternPrint (p); + } + for (set = 0; set < nsets; set++) + { + s = sets[set]; + if (!s) + continue; + for (f = 0; f < s->nfont; f++) + { + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Font %d ", f); + FcPatternPrint (s->fonts[f]); + } + if (!FcCompare (p, s->fonts[f], score, result)) + return 0; + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Score"); + for (i = 0; i < NUM_MATCH_VALUES; i++) + { + printf (" %g", score[i]); + } + printf ("\n"); + } + for (i = 0; i < NUM_MATCH_VALUES; i++) + { + if (best && bestscore[i] < score[i]) + break; + if (!best || score[i] < bestscore[i]) + { + for (i = 0; i < NUM_MATCH_VALUES; i++) + bestscore[i] = score[i]; + best = s->fonts[f]; + break; + } + } + } + } + if (FcDebug () & FC_DBG_MATCH) + { + printf ("Best score"); + for (i = 0; i < NUM_MATCH_VALUES; i++) + printf (" %g", bestscore[i]); + printf ("\n"); + FcPatternPrint (best); + } + if (!best) + { + *result = FcResultNoMatch; + return 0; + } + return best; +} + +FcPattern * +FcFontSetMatch (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcResult *result) +{ + FcPattern *best; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + best = FcFontSetMatchInternal (config, sets, nsets, p, result); + if (best) + return FcFontRenderPrepare (config, p, best); + else + return NULL; +} + +FcPattern * +FcFontMatch (FcConfig *config, + FcPattern *p, + FcResult *result) +{ + FcFontSet *sets[2]; + int nsets; + FcPattern *best; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + nsets = 0; + if (config->fonts[FcSetSystem]) + sets[nsets++] = config->fonts[FcSetSystem]; + if (config->fonts[FcSetApplication]) + sets[nsets++] = config->fonts[FcSetApplication]; + + best = FcFontSetMatchInternal (config, sets, nsets, p, result); + if (best) + return FcFontRenderPrepare (config, p, best); + else + return NULL; +} + +typedef struct _FcSortNode { + FcPattern *pattern; + double score[NUM_MATCH_VALUES]; +} FcSortNode; + +static int +FcSortCompare (const void *aa, const void *ab) +{ + FcSortNode *a = *(FcSortNode **) aa; + FcSortNode *b = *(FcSortNode **) ab; + double *as = &a->score[0]; + double *bs = &b->score[0]; + double ad = 0, bd = 0; + int i; + + i = NUM_MATCH_VALUES; + while (i-- && (ad = *as++) == (bd = *bs++)) + ; + return ad < bd ? -1 : ad > bd ? 1 : 0; +} + +static FcBool +FcSortWalk (FcSortNode **n, int nnode, FcFontSet *fs, FcCharSet **csp, FcBool trim) +{ + FcBool ret = FcFalse; + FcCharSet *cs; + + cs = 0; + if (trim || csp) + { + cs = FcCharSetCreate (); + if (cs == NULL) + goto bail; + } + + while (nnode--) + { + FcSortNode *node = *n++; + FcBool adds_chars = FcFalse; + + /* + * Only fetch node charset if we'd need it + */ + if (cs) + { + FcCharSet *ncs; + + if (FcPatternGetCharSet (node->pattern, FC_CHARSET, 0, &ncs) != + FcResultMatch) + continue; + + if (!FcCharSetMerge (cs, ncs, &adds_chars)) + goto bail; + } + + /* + * If this font isn't a subset of the previous fonts, + * add it to the list + */ + if (!trim || adds_chars) + { + FcPatternReference (node->pattern); + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Add "); + FcPatternPrint (node->pattern); + } + if (!FcFontSetAdd (fs, node->pattern)) + { + FcPatternDestroy (node->pattern); + goto bail; + } + } + } + if (csp) + { + *csp = cs; + cs = 0; + } + + ret = FcTrue; + +bail: + if (cs) + FcCharSetDestroy (cs); + + return ret; +} + +void +FcFontSetSortDestroy (FcFontSet *fs) +{ + FcFontSetDestroy (fs); +} + +FcFontSet * +FcFontSetSort (FcConfig *config, + FcFontSet **sets, + int nsets, + FcPattern *p, + FcBool trim, + FcCharSet **csp, + FcResult *result) +{ + FcFontSet *ret; + FcFontSet *s; + FcSortNode *nodes; + FcSortNode **nodeps, **nodep; + int nnodes; + FcSortNode *new; + int set; + int f; + int i; + int nPatternLang; + FcBool *patternLangSat; + FcValue patternLang; + + if (FcDebug () & FC_DBG_MATCH) + { + printf ("Sort "); + FcPatternPrint (p); + } + nnodes = 0; + for (set = 0; set < nsets; set++) + { + s = sets[set]; + if (!s) + continue; + nnodes += s->nfont; + } + if (!nnodes) + goto bail0; + + for (nPatternLang = 0; + FcPatternGet (p, FC_LANG, nPatternLang, &patternLang) == FcResultMatch; + nPatternLang++) + ; + + /* freed below */ + nodes = malloc (nnodes * sizeof (FcSortNode) + + nnodes * sizeof (FcSortNode *) + + nPatternLang * sizeof (FcBool)); + if (!nodes) + goto bail0; + nodeps = (FcSortNode **) (nodes + nnodes); + patternLangSat = (FcBool *) (nodeps + nnodes); + + new = nodes; + nodep = nodeps; + for (set = 0; set < nsets; set++) + { + s = sets[set]; + if (!s) + continue; + for (f = 0; f < s->nfont; f++) + { + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Font %d ", f); + FcPatternPrint (s->fonts[f]); + } + new->pattern = s->fonts[f]; + if (!FcCompare (p, new->pattern, new->score, result)) + goto bail1; + if (FcDebug () & FC_DBG_MATCHV) + { + printf ("Score"); + for (i = 0; i < NUM_MATCH_VALUES; i++) + { + printf (" %g", new->score[i]); + } + printf ("\n"); + } + *nodep = new; + new++; + nodep++; + } + } + + nnodes = new - nodes; + + qsort (nodeps, nnodes, sizeof (FcSortNode *), + FcSortCompare); + + for (i = 0; i < nPatternLang; i++) + patternLangSat[i] = FcFalse; + + for (f = 0; f < nnodes; f++) + { + FcBool satisfies = FcFalse; + /* + * If this node matches any language, go check + * which ones and satisfy those entries + */ + if (nodeps[f]->score[MATCH_LANG_INDEX] < 2000) + { + for (i = 0; i < nPatternLang; i++) + { + FcValue nodeLang; + + if (!patternLangSat[i] && + FcPatternGet (p, FC_LANG, i, &patternLang) == FcResultMatch && + FcPatternGet (nodeps[f]->pattern, FC_LANG, 0, &nodeLang) == FcResultMatch) + { + double compare = FcCompareLang (&patternLang, &nodeLang); + if (compare >= 0 && compare < 2) + { + if (FcDebug () & FC_DBG_MATCHV) + { + FcChar8 *family; + FcChar8 *style; + + if (FcPatternGetString (nodeps[f]->pattern, FC_FAMILY, 0, &family) == FcResultMatch && + FcPatternGetString (nodeps[f]->pattern, FC_STYLE, 0, &style) == FcResultMatch) + printf ("Font %s:%s matches language %d\n", family, style, i); + } + patternLangSat[i] = FcTrue; + satisfies = FcTrue; + break; + } + } + } + } + if (!satisfies) + nodeps[f]->score[MATCH_LANG_INDEX] = 10000.0; + } + + /* + * Re-sort once the language issues have been settled + */ + qsort (nodeps, nnodes, sizeof (FcSortNode *), + FcSortCompare); + + ret = FcFontSetCreate (); + if (!ret) + goto bail1; + + if (!FcSortWalk (nodeps, nnodes, ret, csp, trim)) + goto bail2; + + free (nodes); + + if (FcDebug() & FC_DBG_MATCH) + { + printf ("First font "); + FcPatternPrint (ret->fonts[0]); + } + return ret; + +bail2: + FcFontSetDestroy (ret); +bail1: + free (nodes); +bail0: + return 0; +} + +FcFontSet * +FcFontSort (FcConfig *config, + FcPattern *p, + FcBool trim, + FcCharSet **csp, + FcResult *result) +{ + FcFontSet *sets[2]; + int nsets; + + if (!config) + { + config = FcConfigGetCurrent (); + if (!config) + return 0; + } + nsets = 0; + if (config->fonts[FcSetSystem]) + sets[nsets++] = config->fonts[FcSetSystem]; + if (config->fonts[FcSetApplication]) + sets[nsets++] = config->fonts[FcSetApplication]; + return FcFontSetSort (config, sets, nsets, p, trim, csp, result); +} +#define __fcmatch__ +#include "fcaliastail.h" +#undef __fcmatch__ diff --git a/fontconfig/src/fcmatrix.c b/fontconfig/src/fcmatrix.c index 2daa0044f..f0c613918 100644 --- a/fontconfig/src/fcmatrix.c +++ b/fontconfig/src/fcmatrix.c @@ -1,120 +1,120 @@ -/* - * fontconfig/src/fcmatrix.c - * - * Copyright © 2000 Tuomas J. Lukka - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of Tuomas Lukka not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. Tuomas Lukka makes no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * TUOMAS LUKKA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL TUOMAS LUKKA BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include -#include -#include - -const FcMatrix FcIdentityMatrix = { 1, 0, 0, 1 }; - -FcMatrix * -FcMatrixCopy (const FcMatrix *mat) -{ - FcMatrix *r; - if(!mat) - return 0; - r = (FcMatrix *) malloc (sizeof (*r) ); - if (!r) - return 0; - FcMemAlloc (FC_MEM_MATRIX, sizeof (FcMatrix)); - *r = *mat; - return r; -} - -void -FcMatrixFree (FcMatrix *mat) -{ - if (mat != &FcIdentityMatrix) - { - FcMemFree (FC_MEM_MATRIX, sizeof (FcMatrix)); - free (mat); - } -} - -FcBool -FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2) -{ - if(mat1 == mat2) return FcTrue; - if(mat1 == 0 || mat2 == 0) return FcFalse; - return mat1->xx == mat2->xx && - mat1->xy == mat2->xy && - mat1->yx == mat2->yx && - mat1->yy == mat2->yy; -} - -void -FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b) -{ - FcMatrix r; - - r.xx = a->xx * b->xx + a->xy * b->yx; - r.xy = a->xx * b->xy + a->xy * b->yy; - r.yx = a->yx * b->xx + a->yy * b->yx; - r.yy = a->yx * b->xy + a->yy * b->yy; - *result = r; -} - -void -FcMatrixRotate (FcMatrix *m, double c, double s) -{ - FcMatrix r; - - /* - * X Coordinate system is upside down, swap to make - * rotations counterclockwise - */ - r.xx = c; - r.xy = -s; - r.yx = s; - r.yy = c; - FcMatrixMultiply (m, &r, m); -} - -void -FcMatrixScale (FcMatrix *m, double sx, double sy) -{ - FcMatrix r; - - r.xx = sx; - r.xy = 0; - r.yx = 0; - r.yy = sy; - FcMatrixMultiply (m, &r, m); -} - -void -FcMatrixShear (FcMatrix *m, double sh, double sv) -{ - FcMatrix r; - - r.xx = 1; - r.xy = sh; - r.yx = sv; - r.yy = 1; - FcMatrixMultiply (m, &r, m); -} -#define __fcmatrix__ -#include "fcaliastail.h" -#undef __fcmatrix__ +/* + * fontconfig/src/fcmatrix.c + * + * Copyright © 2000 Tuomas J. Lukka + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of Tuomas Lukka not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. Tuomas Lukka makes no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * TUOMAS LUKKA DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL TUOMAS LUKKA BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include +#include +#include + +const FcMatrix FcIdentityMatrix = { 1, 0, 0, 1 }; + +FcMatrix * +FcMatrixCopy (const FcMatrix *mat) +{ + FcMatrix *r; + if(!mat) + return 0; + r = (FcMatrix *) malloc (sizeof (*r) ); + if (!r) + return 0; + FcMemAlloc (FC_MEM_MATRIX, sizeof (FcMatrix)); + *r = *mat; + return r; +} + +void +FcMatrixFree (FcMatrix *mat) +{ + if (mat != &FcIdentityMatrix) + { + FcMemFree (FC_MEM_MATRIX, sizeof (FcMatrix)); + free (mat); + } +} + +FcBool +FcMatrixEqual (const FcMatrix *mat1, const FcMatrix *mat2) +{ + if(mat1 == mat2) return FcTrue; + if(mat1 == 0 || mat2 == 0) return FcFalse; + return mat1->xx == mat2->xx && + mat1->xy == mat2->xy && + mat1->yx == mat2->yx && + mat1->yy == mat2->yy; +} + +void +FcMatrixMultiply (FcMatrix *result, const FcMatrix *a, const FcMatrix *b) +{ + FcMatrix r; + + r.xx = a->xx * b->xx + a->xy * b->yx; + r.xy = a->xx * b->xy + a->xy * b->yy; + r.yx = a->yx * b->xx + a->yy * b->yx; + r.yy = a->yx * b->xy + a->yy * b->yy; + *result = r; +} + +void +FcMatrixRotate (FcMatrix *m, double c, double s) +{ + FcMatrix r; + + /* + * X Coordinate system is upside down, swap to make + * rotations counterclockwise + */ + r.xx = c; + r.xy = -s; + r.yx = s; + r.yy = c; + FcMatrixMultiply (m, &r, m); +} + +void +FcMatrixScale (FcMatrix *m, double sx, double sy) +{ + FcMatrix r; + + r.xx = sx; + r.xy = 0; + r.yx = 0; + r.yy = sy; + FcMatrixMultiply (m, &r, m); +} + +void +FcMatrixShear (FcMatrix *m, double sh, double sv) +{ + FcMatrix r; + + r.xx = 1; + r.xy = sh; + r.yx = sv; + r.yy = 1; + FcMatrixMultiply (m, &r, m); +} +#define __fcmatrix__ +#include "fcaliastail.h" +#undef __fcmatrix__ diff --git a/fontconfig/src/fcname.c b/fontconfig/src/fcname.c index 98b50b457..d77eff6f7 100644 --- a/fontconfig/src/fcname.c +++ b/fontconfig/src/fcname.c @@ -1,902 +1,902 @@ -/* - * fontconfig/src/fcname.c - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include -#include -#include -#include - -/* - * Please do not change this list, it is used to initialize the object - * list in this order to match the FC_foo_OBJECT constants. Those - * constants are written into cache files. - */ - -static const FcObjectType _FcBaseObjectTypes[] = { - { FC_FAMILY, FcTypeString, }, /* 1 */ - { FC_FAMILYLANG, FcTypeString, }, - { FC_STYLE, FcTypeString, }, - { FC_STYLELANG, FcTypeString, }, - { FC_FULLNAME, FcTypeString, }, - { FC_FULLNAMELANG, FcTypeString, }, - { FC_SLANT, FcTypeInteger, }, - { FC_WEIGHT, FcTypeInteger, }, - { FC_WIDTH, FcTypeInteger, }, - { FC_SIZE, FcTypeDouble, }, - { FC_ASPECT, FcTypeDouble, }, - { FC_PIXEL_SIZE, FcTypeDouble, }, - { FC_SPACING, FcTypeInteger, }, - { FC_FOUNDRY, FcTypeString, }, - { FC_ANTIALIAS, FcTypeBool, }, - { FC_HINT_STYLE, FcTypeInteger, }, - { FC_HINTING, FcTypeBool, }, - { FC_VERTICAL_LAYOUT, FcTypeBool, }, - { FC_AUTOHINT, FcTypeBool, }, - { FC_GLOBAL_ADVANCE, FcTypeBool, }, - { FC_FILE, FcTypeString, }, - { FC_INDEX, FcTypeInteger, }, - { FC_RASTERIZER, FcTypeString, }, - { FC_OUTLINE, FcTypeBool, }, - { FC_SCALABLE, FcTypeBool, }, - { FC_DPI, FcTypeDouble }, - { FC_RGBA, FcTypeInteger, }, - { FC_SCALE, FcTypeDouble, }, - { FC_MINSPACE, FcTypeBool, }, - { FC_CHAR_WIDTH, FcTypeInteger }, - { FC_CHAR_HEIGHT, FcTypeInteger }, - { FC_MATRIX, FcTypeMatrix }, - { FC_CHARSET, FcTypeCharSet }, - { FC_LANG, FcTypeLangSet }, - { FC_FONTVERSION, FcTypeInteger }, - { FC_CAPABILITY, FcTypeString }, - { FC_FONTFORMAT, FcTypeString }, - { FC_EMBOLDEN, FcTypeBool }, - { FC_EMBEDDED_BITMAP, FcTypeBool }, - { FC_DECORATIVE, FcTypeBool }, - { FC_LCD_FILTER, FcTypeInteger }, /* 41 */ -}; - -#define NUM_OBJECT_TYPES (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0]) - -typedef struct _FcObjectTypeList FcObjectTypeList; - -struct _FcObjectTypeList { - const FcObjectTypeList *next; - const FcObjectType *types; - int ntypes; -}; - -static const FcObjectTypeList _FcBaseObjectTypesList = { - 0, - _FcBaseObjectTypes, - NUM_OBJECT_TYPES, -}; - -static const FcObjectTypeList *_FcObjectTypes = &_FcBaseObjectTypesList; - -#define OBJECT_HASH_SIZE 31 - -typedef struct _FcObjectBucket { - struct _FcObjectBucket *next; - FcChar32 hash; - FcObject id; -} FcObjectBucket; - -static FcObjectBucket *FcObjectBuckets[OBJECT_HASH_SIZE]; - -static FcObjectType *FcObjects = (FcObjectType *) _FcBaseObjectTypes; -static int FcObjectsNumber = NUM_OBJECT_TYPES; -static int FcObjectsSize = 0; -static FcBool FcObjectsInited; - -static FcObjectType * -FcObjectInsert (const char *name, FcType type) -{ - FcObjectType *o; - if (FcObjectsNumber >= FcObjectsSize) - { - int newsize = FcObjectsNumber * 2; - FcObjectType *newobjects; - - if (FcObjectsSize) - newobjects = realloc (FcObjects, newsize * sizeof (FcObjectType)); - else - { - newobjects = malloc (newsize * sizeof (FcObjectType)); - if (newobjects) - memcpy (newobjects, FcObjects, - FcObjectsNumber * sizeof (FcObjectType)); - } - if (!newobjects) - return NULL; - FcObjects = newobjects; - FcObjectsSize = newsize; - } - o = &FcObjects[FcObjectsNumber]; - o->object = name; - o->type = type; - ++FcObjectsNumber; - return o; -} - -static FcObject -FcObjectId (FcObjectType *o) -{ - return o - FcObjects + 1; -} - -static FcObjectType * -FcObjectFindByName (const char *object, FcBool insert) -{ - FcChar32 hash = FcStringHash ((const FcChar8 *) object); - FcObjectBucket **p; - FcObjectBucket *b; - FcObjectType *o; - - if (!FcObjectsInited) - FcObjectInit (); - for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) - { - o = FcObjects + b->id - 1; - if (b->hash == hash && !strcmp (object, (o->object))) - return o; - } - if (!insert) - return NULL; - /* - * Hook it into the hash chain - */ - b = malloc (sizeof(FcObjectBucket)); - if (!b) - return NULL; - object = (const char *) FcStrCopy ((FcChar8 *) object); - if (!object) { - free (b); - return NULL; - } - o = FcObjectInsert (object, -1); - b->next = NULL; - b->hash = hash; - b->id = FcObjectId (o); - *p = b; - return o; -} - -static FcObjectType * -FcObjectFindById (FcObject object) -{ - if (1 <= object && object <= FcObjectsNumber) - return FcObjects + object - 1; - return NULL; -} - -static FcBool -FcObjectHashInsert (const FcObjectType *object, FcBool copy) -{ - FcChar32 hash = FcStringHash ((const FcChar8 *) object->object); - FcObjectBucket **p; - FcObjectBucket *b; - FcObjectType *o; - - if (!FcObjectsInited) - FcObjectInit (); - for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) - { - o = FcObjects + b->id - 1; - if (b->hash == hash && !strcmp (object->object, o->object)) - return FcFalse; - } - /* - * Hook it into the hash chain - */ - b = malloc (sizeof(FcObjectBucket)); - if (!b) - return FcFalse; - if (copy) - { - o = FcObjectInsert (object->object, object->type); - if (!o) - { - free (b); - return FcFalse; - } - } - else - o = (FcObjectType *) object; - b->next = NULL; - b->hash = hash; - b->id = FcObjectId (o); - *p = b; - return FcTrue; -} - -static void -FcObjectHashRemove (const FcObjectType *object, FcBool cleanobj) -{ - FcChar32 hash = FcStringHash ((const FcChar8 *) object->object); - FcObjectBucket **p; - FcObjectBucket *b; - FcObjectType *o; - - if (!FcObjectsInited) - FcObjectInit (); - for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) - { - o = FcObjects + b->id - 1; - if (b->hash == hash && !strcmp (object->object, o->object)) - { - *p = b->next; - free (b); - if (cleanobj) - { - /* Clean up object array */ - o->object = NULL; - o->type = -1; - while (FcObjects[FcObjectsNumber-1].object == NULL) - --FcObjectsNumber; - } - break; - } - } -} - -FcBool -FcNameRegisterObjectTypes (const FcObjectType *types, int ntypes) -{ - int i; - - for (i = 0; i < ntypes; i++) - if (!FcObjectHashInsert (&types[i], FcTrue)) - return FcFalse; - return FcTrue; -} - -FcBool -FcNameUnregisterObjectTypes (const FcObjectType *types, int ntypes) -{ - int i; - - for (i = 0; i < ntypes; i++) - FcObjectHashRemove (&types[i], FcTrue); - return FcTrue; -} - -const FcObjectType * -FcNameGetObjectType (const char *object) -{ - return FcObjectFindByName (object, FcFalse); -} - -FcBool -FcObjectValidType (FcObject object, FcType type) -{ - FcObjectType *t = FcObjectFindById (object); - - if (t) { - switch (t->type) { - case -1: - return FcTrue; - case FcTypeDouble: - case FcTypeInteger: - if (type == FcTypeDouble || type == FcTypeInteger) - return FcTrue; - break; - case FcTypeLangSet: - if (type == FcTypeLangSet || type == FcTypeString) - return FcTrue; - break; - default: - if (type == t->type) - return FcTrue; - break; - } - return FcFalse; - } - return FcTrue; -} - -FcObject -FcObjectFromName (const char * name) -{ - FcObjectType *o = FcObjectFindByName (name, FcTrue); - - if (o) - return FcObjectId (o); - return 0; -} - -FcObjectSet * -FcObjectGetSet (void) -{ - int i; - FcObjectSet *os = NULL; - - - os = FcObjectSetCreate (); - for (i = 0; i < FcObjectsNumber; i++) - FcObjectSetAdd (os, FcObjects[i].object); - - return os; -} - -FcBool -FcObjectInit (void) -{ - int i; - - if (FcObjectsInited) - return FcTrue; - - FcObjectsInited = FcTrue; - for (i = 0; i < NUM_OBJECT_TYPES; i++) - if (!FcObjectHashInsert (&_FcBaseObjectTypes[i], FcFalse)) - return FcFalse; - return FcTrue; -} - -void -FcObjectFini (void) -{ - int i; - FcObjectBucket *b, *next; - - for (i = 0; i < OBJECT_HASH_SIZE; i++) - { - for (b = FcObjectBuckets[i]; b; b = next) - { - next = b->next; - free (b); - } - FcObjectBuckets[i] = 0; - } - for (i = 0; i < FcObjectsNumber; i++) - if (FcObjects[i].type == -1) - free ((void*) FcObjects[i].object); - if (FcObjects != _FcBaseObjectTypes) - free (FcObjects); - FcObjects = (FcObjectType *) _FcBaseObjectTypes; - FcObjectsNumber = NUM_OBJECT_TYPES; - FcObjectsSize = 0; - FcObjectsInited = FcFalse; -} - -const char * -FcObjectName (FcObject object) -{ - FcObjectType *o = FcObjectFindById (object); - - if (o) - return o->object; - return NULL; -} - -static const FcConstant _FcBaseConstants[] = { - { (FcChar8 *) "thin", "weight", FC_WEIGHT_THIN, }, - { (FcChar8 *) "extralight", "weight", FC_WEIGHT_EXTRALIGHT, }, - { (FcChar8 *) "ultralight", "weight", FC_WEIGHT_EXTRALIGHT, }, - { (FcChar8 *) "light", "weight", FC_WEIGHT_LIGHT, }, - { (FcChar8 *) "book", "weight", FC_WEIGHT_BOOK, }, - { (FcChar8 *) "regular", "weight", FC_WEIGHT_REGULAR, }, - { (FcChar8 *) "medium", "weight", FC_WEIGHT_MEDIUM, }, - { (FcChar8 *) "demibold", "weight", FC_WEIGHT_DEMIBOLD, }, - { (FcChar8 *) "semibold", "weight", FC_WEIGHT_DEMIBOLD, }, - { (FcChar8 *) "bold", "weight", FC_WEIGHT_BOLD, }, - { (FcChar8 *) "extrabold", "weight", FC_WEIGHT_EXTRABOLD, }, - { (FcChar8 *) "ultrabold", "weight", FC_WEIGHT_EXTRABOLD, }, - { (FcChar8 *) "black", "weight", FC_WEIGHT_BLACK, }, - { (FcChar8 *) "heavy", "weight", FC_WEIGHT_HEAVY, }, - - { (FcChar8 *) "roman", "slant", FC_SLANT_ROMAN, }, - { (FcChar8 *) "italic", "slant", FC_SLANT_ITALIC, }, - { (FcChar8 *) "oblique", "slant", FC_SLANT_OBLIQUE, }, - - { (FcChar8 *) "ultracondensed", "width", FC_WIDTH_ULTRACONDENSED }, - { (FcChar8 *) "extracondensed", "width", FC_WIDTH_EXTRACONDENSED }, - { (FcChar8 *) "condensed", "width", FC_WIDTH_CONDENSED }, - { (FcChar8 *) "semicondensed", "width", FC_WIDTH_SEMICONDENSED }, - { (FcChar8 *) "normal", "width", FC_WIDTH_NORMAL }, - { (FcChar8 *) "semiexpanded", "width", FC_WIDTH_SEMIEXPANDED }, - { (FcChar8 *) "expanded", "width", FC_WIDTH_EXPANDED }, - { (FcChar8 *) "extraexpanded", "width", FC_WIDTH_EXTRAEXPANDED }, - { (FcChar8 *) "ultraexpanded", "width", FC_WIDTH_ULTRAEXPANDED }, - - { (FcChar8 *) "proportional", "spacing", FC_PROPORTIONAL, }, - { (FcChar8 *) "dual", "spacing", FC_DUAL, }, - { (FcChar8 *) "mono", "spacing", FC_MONO, }, - { (FcChar8 *) "charcell", "spacing", FC_CHARCELL, }, - - { (FcChar8 *) "unknown", "rgba", FC_RGBA_UNKNOWN }, - { (FcChar8 *) "rgb", "rgba", FC_RGBA_RGB, }, - { (FcChar8 *) "bgr", "rgba", FC_RGBA_BGR, }, - { (FcChar8 *) "vrgb", "rgba", FC_RGBA_VRGB }, - { (FcChar8 *) "vbgr", "rgba", FC_RGBA_VBGR }, - { (FcChar8 *) "none", "rgba", FC_RGBA_NONE }, - - { (FcChar8 *) "hintnone", "hintstyle", FC_HINT_NONE }, - { (FcChar8 *) "hintslight", "hintstyle", FC_HINT_SLIGHT }, - { (FcChar8 *) "hintmedium", "hintstyle", FC_HINT_MEDIUM }, - { (FcChar8 *) "hintfull", "hintstyle", FC_HINT_FULL }, - - { (FcChar8 *) "antialias", "antialias", FcTrue }, - { (FcChar8 *) "hinting", "hinting", FcTrue }, - { (FcChar8 *) "verticallayout", "verticallayout", FcTrue }, - { (FcChar8 *) "autohint", "autohint", FcTrue }, - { (FcChar8 *) "globaladvance", "globaladvance", FcTrue }, - { (FcChar8 *) "outline", "outline", FcTrue }, - { (FcChar8 *) "scalable", "scalable", FcTrue }, - { (FcChar8 *) "minspace", "minspace", FcTrue }, - { (FcChar8 *) "embolden", "embolden", FcTrue }, - { (FcChar8 *) "embeddedbitmap", "embeddedbitmap", FcTrue }, - { (FcChar8 *) "decorative", "decorative", FcTrue }, - { (FcChar8 *) "lcdnone", "lcdfilter", FC_LCD_NONE }, - { (FcChar8 *) "lcddefault", "lcdfilter", FC_LCD_DEFAULT }, - { (FcChar8 *) "lcdlight", "lcdfilter", FC_LCD_LIGHT }, - { (FcChar8 *) "lcdlegacy", "lcdfilter", FC_LCD_LEGACY }, -}; - -#define NUM_FC_CONSTANTS (sizeof _FcBaseConstants/sizeof _FcBaseConstants[0]) - -typedef struct _FcConstantList FcConstantList; - -struct _FcConstantList { - const FcConstantList *next; - const FcConstant *consts; - int nconsts; -}; - -static const FcConstantList _FcBaseConstantList = { - 0, - _FcBaseConstants, - NUM_FC_CONSTANTS -}; - -static const FcConstantList *_FcConstants = &_FcBaseConstantList; - -FcBool -FcNameRegisterConstants (const FcConstant *consts, int nconsts) -{ - FcConstantList *l; - - l = (FcConstantList *) malloc (sizeof (FcConstantList)); - if (!l) - return FcFalse; - FcMemAlloc (FC_MEM_CONSTANT, sizeof (FcConstantList)); - l->consts = consts; - l->nconsts = nconsts; - l->next = _FcConstants; - _FcConstants = l; - return FcTrue; -} - -FcBool -FcNameUnregisterConstants (const FcConstant *consts, int nconsts) -{ - const FcConstantList *l, **prev; - - for (prev = &_FcConstants; - (l = *prev); - prev = (const FcConstantList **) &(l->next)) - { - if (l->consts == consts && l->nconsts == nconsts) - { - *prev = l->next; - FcMemFree (FC_MEM_CONSTANT, sizeof (FcConstantList)); - free ((void *) l); - return FcTrue; - } - } - return FcFalse; -} - -const FcConstant * -FcNameGetConstant (FcChar8 *string) -{ - const FcConstantList *l; - int i; - - for (l = _FcConstants; l; l = l->next) - { - for (i = 0; i < l->nconsts; i++) - if (!FcStrCmpIgnoreCase (string, l->consts[i].name)) - return &l->consts[i]; - } - return 0; -} - -FcBool -FcNameConstant (FcChar8 *string, int *result) -{ - const FcConstant *c; - - if ((c = FcNameGetConstant(string))) - { - *result = c->value; - return FcTrue; - } - return FcFalse; -} - -FcBool -FcNameBool (const FcChar8 *v, FcBool *result) -{ - char c0, c1; - - c0 = *v; - c0 = FcToLower (c0); - if (c0 == 't' || c0 == 'y' || c0 == '1') - { - *result = FcTrue; - return FcTrue; - } - if (c0 == 'f' || c0 == 'n' || c0 == '0') - { - *result = FcFalse; - return FcTrue; - } - if (c0 == 'o') - { - c1 = v[1]; - c1 = FcToLower (c1); - if (c1 == 'n') - { - *result = FcTrue; - return FcTrue; - } - if (c1 == 'f') - { - *result = FcFalse; - return FcTrue; - } - } - return FcFalse; -} - -static FcValue -FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m) -{ - FcValue v; - - v.type = type; - switch (v.type) { - case FcTypeInteger: - if (!FcNameConstant (string, &v.u.i)) - v.u.i = atoi ((char *) string); - break; - case FcTypeString: - v.u.s = FcStrStaticName(string); - if (!v.u.s) - v.type = FcTypeVoid; - break; - case FcTypeBool: - if (!FcNameBool (string, &v.u.b)) - v.u.b = FcFalse; - break; - case FcTypeDouble: - v.u.d = strtod ((char *) string, 0); - break; - case FcTypeMatrix: - v.u.m = m; - sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy); - break; - case FcTypeCharSet: - v.u.c = FcNameParseCharSet (string); - if (!v.u.c) - v.type = FcTypeVoid; - break; - case FcTypeLangSet: - v.u.l = FcNameParseLangSet (string); - if (!v.u.l) - v.type = FcTypeVoid; - break; - default: - break; - } - return v; -} - -static const FcChar8 * -FcNameFindNext (const FcChar8 *cur, const char *delim, FcChar8 *save, FcChar8 *last) -{ - FcChar8 c; - - while ((c = *cur)) - { - if (c == '\\') - { - ++cur; - if (!(c = *cur)) - break; - } - else if (strchr (delim, c)) - break; - ++cur; - *save++ = c; - } - *save = 0; - *last = *cur; - if (*cur) - cur++; - return cur; -} - -FcPattern * -FcNameParse (const FcChar8 *name) -{ - FcChar8 *save; - FcPattern *pat; - double d; - FcChar8 *e; - FcChar8 delim; - FcValue v; - FcMatrix m; - const FcObjectType *t; - const FcConstant *c; - - /* freed below */ - save = malloc (strlen ((char *) name) + 1); - if (!save) - goto bail0; - pat = FcPatternCreate (); - if (!pat) - goto bail1; - - for (;;) - { - name = FcNameFindNext (name, "-,:", save, &delim); - if (save[0]) - { - if (!FcPatternAddString (pat, FC_FAMILY, save)) - goto bail2; - } - if (delim != ',') - break; - } - if (delim == '-') - { - for (;;) - { - name = FcNameFindNext (name, "-,:", save, &delim); - d = strtod ((char *) save, (char **) &e); - if (e != save) - { - if (!FcPatternAddDouble (pat, FC_SIZE, d)) - goto bail2; - } - if (delim != ',') - break; - } - } - while (delim == ':') - { - name = FcNameFindNext (name, "=_:", save, &delim); - if (save[0]) - { - if (delim == '=' || delim == '_') - { - t = FcNameGetObjectType ((char *) save); - for (;;) - { - name = FcNameFindNext (name, ":,", save, &delim); - if (t) - { - v = FcNameConvert (t->type, save, &m); - if (!FcPatternAdd (pat, t->object, v, FcTrue)) - { - switch (v.type) { - case FcTypeCharSet: - FcCharSetDestroy ((FcCharSet *) v.u.c); - break; - case FcTypeLangSet: - FcLangSetDestroy ((FcLangSet *) v.u.l); - break; - default: - break; - } - goto bail2; - } - switch (v.type) { - case FcTypeCharSet: - FcCharSetDestroy ((FcCharSet *) v.u.c); - break; - case FcTypeLangSet: - FcLangSetDestroy ((FcLangSet *) v.u.l); - break; - default: - break; - } - } - if (delim != ',') - break; - } - } - else - { - if ((c = FcNameGetConstant (save))) - { - t = FcNameGetObjectType ((char *) c->object); - switch (t->type) { - case FcTypeInteger: - case FcTypeDouble: - if (!FcPatternAddInteger (pat, c->object, c->value)) - goto bail2; - break; - case FcTypeBool: - if (!FcPatternAddBool (pat, c->object, c->value)) - goto bail2; - break; - default: - break; - } - } - } - } - } - - free (save); - return pat; - -bail2: - FcPatternDestroy (pat); -bail1: - free (save); -bail0: - return 0; -} -static FcBool -FcNameUnparseString (FcStrBuf *buf, - const FcChar8 *string, - const FcChar8 *escape) -{ - FcChar8 c; - while ((c = *string++)) - { - if (escape && strchr ((char *) escape, (char) c)) - { - if (!FcStrBufChar (buf, escape[0])) - return FcFalse; - } - if (!FcStrBufChar (buf, c)) - return FcFalse; - } - return FcTrue; -} - -FcBool -FcNameUnparseValue (FcStrBuf *buf, - FcValue *v0, - FcChar8 *escape) -{ - FcChar8 temp[1024]; - FcValue v = FcValueCanonicalize(v0); - - switch (v.type) { - case FcTypeVoid: - return FcTrue; - case FcTypeInteger: - sprintf ((char *) temp, "%d", v.u.i); - return FcNameUnparseString (buf, temp, 0); - case FcTypeDouble: - sprintf ((char *) temp, "%g", v.u.d); - return FcNameUnparseString (buf, temp, 0); - case FcTypeString: - return FcNameUnparseString (buf, v.u.s, escape); - case FcTypeBool: - return FcNameUnparseString (buf, v.u.b ? (FcChar8 *) "True" : (FcChar8 *) "False", 0); - case FcTypeMatrix: - sprintf ((char *) temp, "%g %g %g %g", - v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); - return FcNameUnparseString (buf, temp, 0); - case FcTypeCharSet: - return FcNameUnparseCharSet (buf, v.u.c); - case FcTypeLangSet: - return FcNameUnparseLangSet (buf, v.u.l); - case FcTypeFTFace: - return FcTrue; - } - return FcFalse; -} - -FcBool -FcNameUnparseValueList (FcStrBuf *buf, - FcValueListPtr v, - FcChar8 *escape) -{ - while (v) - { - if (!FcNameUnparseValue (buf, &v->value, escape)) - return FcFalse; - if ((v = FcValueListNext(v)) != NULL) - if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0)) - return FcFalse; - } - return FcTrue; -} - -#define FC_ESCAPE_FIXED "\\-:," -#define FC_ESCAPE_VARIABLE "\\=_:," - -FcChar8 * -FcNameUnparse (FcPattern *pat) -{ - return FcNameUnparseEscaped (pat, FcTrue); -} - -FcChar8 * -FcNameUnparseEscaped (FcPattern *pat, FcBool escape) -{ - FcStrBuf buf; - FcChar8 buf_static[8192]; - int i; - FcPatternElt *e; - const FcObjectTypeList *l; - const FcObjectType *o; - - FcStrBufInit (&buf, buf_static, sizeof (buf_static)); - e = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT); - if (e) - { - if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0)) - goto bail0; - } - e = FcPatternObjectFindElt (pat, FC_SIZE_OBJECT); - if (e) - { - if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0)) - goto bail0; - if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0)) - goto bail0; - } - for (l = _FcObjectTypes; l; l = l->next) - { - for (i = 0; i < l->ntypes; i++) - { - o = &l->types[i]; - if (!strcmp (o->object, FC_FAMILY) || - !strcmp (o->object, FC_SIZE)) - continue; - - e = FcPatternObjectFindElt (pat, FcObjectFromName (o->object)); - if (e) - { - if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0)) - goto bail0; - if (!FcNameUnparseString (&buf, (FcChar8 *) o->object, escape ? (FcChar8 *) FC_ESCAPE_VARIABLE : 0)) - goto bail0; - if (!FcNameUnparseString (&buf, (FcChar8 *) "=", 0)) - goto bail0; - if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? - (FcChar8 *) FC_ESCAPE_VARIABLE : 0)) - goto bail0; - } - } - } - return FcStrBufDone (&buf); -bail0: - FcStrBufDestroy (&buf); - return 0; -} -#define __fcname__ -#include "fcaliastail.h" -#undef __fcname__ +/* + * fontconfig/src/fcname.c + * + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include +#include +#include +#include + +/* + * Please do not change this list, it is used to initialize the object + * list in this order to match the FC_foo_OBJECT constants. Those + * constants are written into cache files. + */ + +static const FcObjectType _FcBaseObjectTypes[] = { + { FC_FAMILY, FcTypeString, }, /* 1 */ + { FC_FAMILYLANG, FcTypeString, }, + { FC_STYLE, FcTypeString, }, + { FC_STYLELANG, FcTypeString, }, + { FC_FULLNAME, FcTypeString, }, + { FC_FULLNAMELANG, FcTypeString, }, + { FC_SLANT, FcTypeInteger, }, + { FC_WEIGHT, FcTypeInteger, }, + { FC_WIDTH, FcTypeInteger, }, + { FC_SIZE, FcTypeDouble, }, + { FC_ASPECT, FcTypeDouble, }, + { FC_PIXEL_SIZE, FcTypeDouble, }, + { FC_SPACING, FcTypeInteger, }, + { FC_FOUNDRY, FcTypeString, }, + { FC_ANTIALIAS, FcTypeBool, }, + { FC_HINT_STYLE, FcTypeInteger, }, + { FC_HINTING, FcTypeBool, }, + { FC_VERTICAL_LAYOUT, FcTypeBool, }, + { FC_AUTOHINT, FcTypeBool, }, + { FC_GLOBAL_ADVANCE, FcTypeBool, }, + { FC_FILE, FcTypeString, }, + { FC_INDEX, FcTypeInteger, }, + { FC_RASTERIZER, FcTypeString, }, + { FC_OUTLINE, FcTypeBool, }, + { FC_SCALABLE, FcTypeBool, }, + { FC_DPI, FcTypeDouble }, + { FC_RGBA, FcTypeInteger, }, + { FC_SCALE, FcTypeDouble, }, + { FC_MINSPACE, FcTypeBool, }, + { FC_CHAR_WIDTH, FcTypeInteger }, + { FC_CHAR_HEIGHT, FcTypeInteger }, + { FC_MATRIX, FcTypeMatrix }, + { FC_CHARSET, FcTypeCharSet }, + { FC_LANG, FcTypeLangSet }, + { FC_FONTVERSION, FcTypeInteger }, + { FC_CAPABILITY, FcTypeString }, + { FC_FONTFORMAT, FcTypeString }, + { FC_EMBOLDEN, FcTypeBool }, + { FC_EMBEDDED_BITMAP, FcTypeBool }, + { FC_DECORATIVE, FcTypeBool }, + { FC_LCD_FILTER, FcTypeInteger }, /* 41 */ +}; + +#define NUM_OBJECT_TYPES (sizeof _FcBaseObjectTypes / sizeof _FcBaseObjectTypes[0]) + +typedef struct _FcObjectTypeList FcObjectTypeList; + +struct _FcObjectTypeList { + const FcObjectTypeList *next; + const FcObjectType *types; + int ntypes; +}; + +static const FcObjectTypeList _FcBaseObjectTypesList = { + 0, + _FcBaseObjectTypes, + NUM_OBJECT_TYPES, +}; + +static const FcObjectTypeList *_FcObjectTypes = &_FcBaseObjectTypesList; + +#define OBJECT_HASH_SIZE 31 + +typedef struct _FcObjectBucket { + struct _FcObjectBucket *next; + FcChar32 hash; + FcObject id; +} FcObjectBucket; + +static FcObjectBucket *FcObjectBuckets[OBJECT_HASH_SIZE]; + +static FcObjectType *FcObjects = (FcObjectType *) _FcBaseObjectTypes; +static int FcObjectsNumber = NUM_OBJECT_TYPES; +static int FcObjectsSize = 0; +static FcBool FcObjectsInited; + +static FcObjectType * +FcObjectInsert (const char *name, FcType type) +{ + FcObjectType *o; + if (FcObjectsNumber >= FcObjectsSize) + { + int newsize = FcObjectsNumber * 2; + FcObjectType *newobjects; + + if (FcObjectsSize) + newobjects = realloc (FcObjects, newsize * sizeof (FcObjectType)); + else + { + newobjects = malloc (newsize * sizeof (FcObjectType)); + if (newobjects) + memcpy (newobjects, FcObjects, + FcObjectsNumber * sizeof (FcObjectType)); + } + if (!newobjects) + return NULL; + FcObjects = newobjects; + FcObjectsSize = newsize; + } + o = &FcObjects[FcObjectsNumber]; + o->object = name; + o->type = type; + ++FcObjectsNumber; + return o; +} + +static FcObject +FcObjectId (FcObjectType *o) +{ + return o - FcObjects + 1; +} + +static FcObjectType * +FcObjectFindByName (const char *object, FcBool insert) +{ + FcChar32 hash = FcStringHash ((const FcChar8 *) object); + FcObjectBucket **p; + FcObjectBucket *b; + FcObjectType *o; + + if (!FcObjectsInited) + FcObjectInit (); + for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + { + o = FcObjects + b->id - 1; + if (b->hash == hash && !strcmp (object, (o->object))) + return o; + } + if (!insert) + return NULL; + /* + * Hook it into the hash chain + */ + b = malloc (sizeof(FcObjectBucket)); + if (!b) + return NULL; + object = (const char *) FcStrCopy ((FcChar8 *) object); + if (!object) { + free (b); + return NULL; + } + o = FcObjectInsert (object, -1); + b->next = NULL; + b->hash = hash; + b->id = FcObjectId (o); + *p = b; + return o; +} + +static FcObjectType * +FcObjectFindById (FcObject object) +{ + if (1 <= object && object <= FcObjectsNumber) + return FcObjects + object - 1; + return NULL; +} + +static FcBool +FcObjectHashInsert (const FcObjectType *object, FcBool copy) +{ + FcChar32 hash = FcStringHash ((const FcChar8 *) object->object); + FcObjectBucket **p; + FcObjectBucket *b; + FcObjectType *o; + + if (!FcObjectsInited) + FcObjectInit (); + for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + { + o = FcObjects + b->id - 1; + if (b->hash == hash && !strcmp (object->object, o->object)) + return FcFalse; + } + /* + * Hook it into the hash chain + */ + b = malloc (sizeof(FcObjectBucket)); + if (!b) + return FcFalse; + if (copy) + { + o = FcObjectInsert (object->object, object->type); + if (!o) + { + free (b); + return FcFalse; + } + } + else + o = (FcObjectType *) object; + b->next = NULL; + b->hash = hash; + b->id = FcObjectId (o); + *p = b; + return FcTrue; +} + +static void +FcObjectHashRemove (const FcObjectType *object, FcBool cleanobj) +{ + FcChar32 hash = FcStringHash ((const FcChar8 *) object->object); + FcObjectBucket **p; + FcObjectBucket *b; + FcObjectType *o; + + if (!FcObjectsInited) + FcObjectInit (); + for (p = &FcObjectBuckets[hash%OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + { + o = FcObjects + b->id - 1; + if (b->hash == hash && !strcmp (object->object, o->object)) + { + *p = b->next; + free (b); + if (cleanobj) + { + /* Clean up object array */ + o->object = NULL; + o->type = -1; + while (FcObjects[FcObjectsNumber-1].object == NULL) + --FcObjectsNumber; + } + break; + } + } +} + +FcBool +FcNameRegisterObjectTypes (const FcObjectType *types, int ntypes) +{ + int i; + + for (i = 0; i < ntypes; i++) + if (!FcObjectHashInsert (&types[i], FcTrue)) + return FcFalse; + return FcTrue; +} + +FcBool +FcNameUnregisterObjectTypes (const FcObjectType *types, int ntypes) +{ + int i; + + for (i = 0; i < ntypes; i++) + FcObjectHashRemove (&types[i], FcTrue); + return FcTrue; +} + +const FcObjectType * +FcNameGetObjectType (const char *object) +{ + return FcObjectFindByName (object, FcFalse); +} + +FcBool +FcObjectValidType (FcObject object, FcType type) +{ + FcObjectType *t = FcObjectFindById (object); + + if (t) { + switch (t->type) { + case -1: + return FcTrue; + case FcTypeDouble: + case FcTypeInteger: + if (type == FcTypeDouble || type == FcTypeInteger) + return FcTrue; + break; + case FcTypeLangSet: + if (type == FcTypeLangSet || type == FcTypeString) + return FcTrue; + break; + default: + if (type == t->type) + return FcTrue; + break; + } + return FcFalse; + } + return FcTrue; +} + +FcObject +FcObjectFromName (const char * name) +{ + FcObjectType *o = FcObjectFindByName (name, FcTrue); + + if (o) + return FcObjectId (o); + return 0; +} + +FcObjectSet * +FcObjectGetSet (void) +{ + int i; + FcObjectSet *os = NULL; + + + os = FcObjectSetCreate (); + for (i = 0; i < FcObjectsNumber; i++) + FcObjectSetAdd (os, FcObjects[i].object); + + return os; +} + +FcBool +FcObjectInit (void) +{ + int i; + + if (FcObjectsInited) + return FcTrue; + + FcObjectsInited = FcTrue; + for (i = 0; i < NUM_OBJECT_TYPES; i++) + if (!FcObjectHashInsert (&_FcBaseObjectTypes[i], FcFalse)) + return FcFalse; + return FcTrue; +} + +void +FcObjectFini (void) +{ + int i; + FcObjectBucket *b, *next; + + for (i = 0; i < OBJECT_HASH_SIZE; i++) + { + for (b = FcObjectBuckets[i]; b; b = next) + { + next = b->next; + free (b); + } + FcObjectBuckets[i] = 0; + } + for (i = 0; i < FcObjectsNumber; i++) + if (FcObjects[i].type == -1) + free ((void*) FcObjects[i].object); + if (FcObjects != _FcBaseObjectTypes) + free (FcObjects); + FcObjects = (FcObjectType *) _FcBaseObjectTypes; + FcObjectsNumber = NUM_OBJECT_TYPES; + FcObjectsSize = 0; + FcObjectsInited = FcFalse; +} + +const char * +FcObjectName (FcObject object) +{ + FcObjectType *o = FcObjectFindById (object); + + if (o) + return o->object; + return NULL; +} + +static const FcConstant _FcBaseConstants[] = { + { (FcChar8 *) "thin", "weight", FC_WEIGHT_THIN, }, + { (FcChar8 *) "extralight", "weight", FC_WEIGHT_EXTRALIGHT, }, + { (FcChar8 *) "ultralight", "weight", FC_WEIGHT_EXTRALIGHT, }, + { (FcChar8 *) "light", "weight", FC_WEIGHT_LIGHT, }, + { (FcChar8 *) "book", "weight", FC_WEIGHT_BOOK, }, + { (FcChar8 *) "regular", "weight", FC_WEIGHT_REGULAR, }, + { (FcChar8 *) "medium", "weight", FC_WEIGHT_MEDIUM, }, + { (FcChar8 *) "demibold", "weight", FC_WEIGHT_DEMIBOLD, }, + { (FcChar8 *) "semibold", "weight", FC_WEIGHT_DEMIBOLD, }, + { (FcChar8 *) "bold", "weight", FC_WEIGHT_BOLD, }, + { (FcChar8 *) "extrabold", "weight", FC_WEIGHT_EXTRABOLD, }, + { (FcChar8 *) "ultrabold", "weight", FC_WEIGHT_EXTRABOLD, }, + { (FcChar8 *) "black", "weight", FC_WEIGHT_BLACK, }, + { (FcChar8 *) "heavy", "weight", FC_WEIGHT_HEAVY, }, + + { (FcChar8 *) "roman", "slant", FC_SLANT_ROMAN, }, + { (FcChar8 *) "italic", "slant", FC_SLANT_ITALIC, }, + { (FcChar8 *) "oblique", "slant", FC_SLANT_OBLIQUE, }, + + { (FcChar8 *) "ultracondensed", "width", FC_WIDTH_ULTRACONDENSED }, + { (FcChar8 *) "extracondensed", "width", FC_WIDTH_EXTRACONDENSED }, + { (FcChar8 *) "condensed", "width", FC_WIDTH_CONDENSED }, + { (FcChar8 *) "semicondensed", "width", FC_WIDTH_SEMICONDENSED }, + { (FcChar8 *) "normal", "width", FC_WIDTH_NORMAL }, + { (FcChar8 *) "semiexpanded", "width", FC_WIDTH_SEMIEXPANDED }, + { (FcChar8 *) "expanded", "width", FC_WIDTH_EXPANDED }, + { (FcChar8 *) "extraexpanded", "width", FC_WIDTH_EXTRAEXPANDED }, + { (FcChar8 *) "ultraexpanded", "width", FC_WIDTH_ULTRAEXPANDED }, + + { (FcChar8 *) "proportional", "spacing", FC_PROPORTIONAL, }, + { (FcChar8 *) "dual", "spacing", FC_DUAL, }, + { (FcChar8 *) "mono", "spacing", FC_MONO, }, + { (FcChar8 *) "charcell", "spacing", FC_CHARCELL, }, + + { (FcChar8 *) "unknown", "rgba", FC_RGBA_UNKNOWN }, + { (FcChar8 *) "rgb", "rgba", FC_RGBA_RGB, }, + { (FcChar8 *) "bgr", "rgba", FC_RGBA_BGR, }, + { (FcChar8 *) "vrgb", "rgba", FC_RGBA_VRGB }, + { (FcChar8 *) "vbgr", "rgba", FC_RGBA_VBGR }, + { (FcChar8 *) "none", "rgba", FC_RGBA_NONE }, + + { (FcChar8 *) "hintnone", "hintstyle", FC_HINT_NONE }, + { (FcChar8 *) "hintslight", "hintstyle", FC_HINT_SLIGHT }, + { (FcChar8 *) "hintmedium", "hintstyle", FC_HINT_MEDIUM }, + { (FcChar8 *) "hintfull", "hintstyle", FC_HINT_FULL }, + + { (FcChar8 *) "antialias", "antialias", FcTrue }, + { (FcChar8 *) "hinting", "hinting", FcTrue }, + { (FcChar8 *) "verticallayout", "verticallayout", FcTrue }, + { (FcChar8 *) "autohint", "autohint", FcTrue }, + { (FcChar8 *) "globaladvance", "globaladvance", FcTrue }, + { (FcChar8 *) "outline", "outline", FcTrue }, + { (FcChar8 *) "scalable", "scalable", FcTrue }, + { (FcChar8 *) "minspace", "minspace", FcTrue }, + { (FcChar8 *) "embolden", "embolden", FcTrue }, + { (FcChar8 *) "embeddedbitmap", "embeddedbitmap", FcTrue }, + { (FcChar8 *) "decorative", "decorative", FcTrue }, + { (FcChar8 *) "lcdnone", "lcdfilter", FC_LCD_NONE }, + { (FcChar8 *) "lcddefault", "lcdfilter", FC_LCD_DEFAULT }, + { (FcChar8 *) "lcdlight", "lcdfilter", FC_LCD_LIGHT }, + { (FcChar8 *) "lcdlegacy", "lcdfilter", FC_LCD_LEGACY }, +}; + +#define NUM_FC_CONSTANTS (sizeof _FcBaseConstants/sizeof _FcBaseConstants[0]) + +typedef struct _FcConstantList FcConstantList; + +struct _FcConstantList { + const FcConstantList *next; + const FcConstant *consts; + int nconsts; +}; + +static const FcConstantList _FcBaseConstantList = { + 0, + _FcBaseConstants, + NUM_FC_CONSTANTS +}; + +static const FcConstantList *_FcConstants = &_FcBaseConstantList; + +FcBool +FcNameRegisterConstants (const FcConstant *consts, int nconsts) +{ + FcConstantList *l; + + l = (FcConstantList *) malloc (sizeof (FcConstantList)); + if (!l) + return FcFalse; + FcMemAlloc (FC_MEM_CONSTANT, sizeof (FcConstantList)); + l->consts = consts; + l->nconsts = nconsts; + l->next = _FcConstants; + _FcConstants = l; + return FcTrue; +} + +FcBool +FcNameUnregisterConstants (const FcConstant *consts, int nconsts) +{ + const FcConstantList *l, **prev; + + for (prev = &_FcConstants; + (l = *prev); + prev = (const FcConstantList **) &(l->next)) + { + if (l->consts == consts && l->nconsts == nconsts) + { + *prev = l->next; + FcMemFree (FC_MEM_CONSTANT, sizeof (FcConstantList)); + free ((void *) l); + return FcTrue; + } + } + return FcFalse; +} + +const FcConstant * +FcNameGetConstant (FcChar8 *string) +{ + const FcConstantList *l; + int i; + + for (l = _FcConstants; l; l = l->next) + { + for (i = 0; i < l->nconsts; i++) + if (!FcStrCmpIgnoreCase (string, l->consts[i].name)) + return &l->consts[i]; + } + return 0; +} + +FcBool +FcNameConstant (FcChar8 *string, int *result) +{ + const FcConstant *c; + + if ((c = FcNameGetConstant(string))) + { + *result = c->value; + return FcTrue; + } + return FcFalse; +} + +FcBool +FcNameBool (const FcChar8 *v, FcBool *result) +{ + char c0, c1; + + c0 = *v; + c0 = FcToLower (c0); + if (c0 == 't' || c0 == 'y' || c0 == '1') + { + *result = FcTrue; + return FcTrue; + } + if (c0 == 'f' || c0 == 'n' || c0 == '0') + { + *result = FcFalse; + return FcTrue; + } + if (c0 == 'o') + { + c1 = v[1]; + c1 = FcToLower (c1); + if (c1 == 'n') + { + *result = FcTrue; + return FcTrue; + } + if (c1 == 'f') + { + *result = FcFalse; + return FcTrue; + } + } + return FcFalse; +} + +static FcValue +FcNameConvert (FcType type, FcChar8 *string, FcMatrix *m) +{ + FcValue v; + + v.type = type; + switch (v.type) { + case FcTypeInteger: + if (!FcNameConstant (string, &v.u.i)) + v.u.i = atoi ((char *) string); + break; + case FcTypeString: + v.u.s = FcStrStaticName(string); + if (!v.u.s) + v.type = FcTypeVoid; + break; + case FcTypeBool: + if (!FcNameBool (string, &v.u.b)) + v.u.b = FcFalse; + break; + case FcTypeDouble: + v.u.d = strtod ((char *) string, 0); + break; + case FcTypeMatrix: + v.u.m = m; + sscanf ((char *) string, "%lg %lg %lg %lg", &m->xx, &m->xy, &m->yx, &m->yy); + break; + case FcTypeCharSet: + v.u.c = FcNameParseCharSet (string); + if (!v.u.c) + v.type = FcTypeVoid; + break; + case FcTypeLangSet: + v.u.l = FcNameParseLangSet (string); + if (!v.u.l) + v.type = FcTypeVoid; + break; + default: + break; + } + return v; +} + +static const FcChar8 * +FcNameFindNext (const FcChar8 *cur, const char *delim, FcChar8 *save, FcChar8 *last) +{ + FcChar8 c; + + while ((c = *cur)) + { + if (c == '\\') + { + ++cur; + if (!(c = *cur)) + break; + } + else if (strchr (delim, c)) + break; + ++cur; + *save++ = c; + } + *save = 0; + *last = *cur; + if (*cur) + cur++; + return cur; +} + +FcPattern * +FcNameParse (const FcChar8 *name) +{ + FcChar8 *save; + FcPattern *pat; + double d; + FcChar8 *e; + FcChar8 delim; + FcValue v; + FcMatrix m; + const FcObjectType *t; + const FcConstant *c; + + /* freed below */ + save = malloc (strlen ((char *) name) + 1); + if (!save) + goto bail0; + pat = FcPatternCreate (); + if (!pat) + goto bail1; + + for (;;) + { + name = FcNameFindNext (name, "-,:", save, &delim); + if (save[0]) + { + if (!FcPatternAddString (pat, FC_FAMILY, save)) + goto bail2; + } + if (delim != ',') + break; + } + if (delim == '-') + { + for (;;) + { + name = FcNameFindNext (name, "-,:", save, &delim); + d = strtod ((char *) save, (char **) &e); + if (e != save) + { + if (!FcPatternAddDouble (pat, FC_SIZE, d)) + goto bail2; + } + if (delim != ',') + break; + } + } + while (delim == ':') + { + name = FcNameFindNext (name, "=_:", save, &delim); + if (save[0]) + { + if (delim == '=' || delim == '_') + { + t = FcNameGetObjectType ((char *) save); + for (;;) + { + name = FcNameFindNext (name, ":,", save, &delim); + if (t) + { + v = FcNameConvert (t->type, save, &m); + if (!FcPatternAdd (pat, t->object, v, FcTrue)) + { + switch (v.type) { + case FcTypeCharSet: + FcCharSetDestroy ((FcCharSet *) v.u.c); + break; + case FcTypeLangSet: + FcLangSetDestroy ((FcLangSet *) v.u.l); + break; + default: + break; + } + goto bail2; + } + switch (v.type) { + case FcTypeCharSet: + FcCharSetDestroy ((FcCharSet *) v.u.c); + break; + case FcTypeLangSet: + FcLangSetDestroy ((FcLangSet *) v.u.l); + break; + default: + break; + } + } + if (delim != ',') + break; + } + } + else + { + if ((c = FcNameGetConstant (save))) + { + t = FcNameGetObjectType ((char *) c->object); + switch (t->type) { + case FcTypeInteger: + case FcTypeDouble: + if (!FcPatternAddInteger (pat, c->object, c->value)) + goto bail2; + break; + case FcTypeBool: + if (!FcPatternAddBool (pat, c->object, c->value)) + goto bail2; + break; + default: + break; + } + } + } + } + } + + free (save); + return pat; + +bail2: + FcPatternDestroy (pat); +bail1: + free (save); +bail0: + return 0; +} +static FcBool +FcNameUnparseString (FcStrBuf *buf, + const FcChar8 *string, + const FcChar8 *escape) +{ + FcChar8 c; + while ((c = *string++)) + { + if (escape && strchr ((char *) escape, (char) c)) + { + if (!FcStrBufChar (buf, escape[0])) + return FcFalse; + } + if (!FcStrBufChar (buf, c)) + return FcFalse; + } + return FcTrue; +} + +FcBool +FcNameUnparseValue (FcStrBuf *buf, + FcValue *v0, + FcChar8 *escape) +{ + FcChar8 temp[1024]; + FcValue v = FcValueCanonicalize(v0); + + switch (v.type) { + case FcTypeVoid: + return FcTrue; + case FcTypeInteger: + sprintf ((char *) temp, "%d", v.u.i); + return FcNameUnparseString (buf, temp, 0); + case FcTypeDouble: + sprintf ((char *) temp, "%g", v.u.d); + return FcNameUnparseString (buf, temp, 0); + case FcTypeString: + return FcNameUnparseString (buf, v.u.s, escape); + case FcTypeBool: + return FcNameUnparseString (buf, v.u.b ? (FcChar8 *) "True" : (FcChar8 *) "False", 0); + case FcTypeMatrix: + sprintf ((char *) temp, "%g %g %g %g", + v.u.m->xx, v.u.m->xy, v.u.m->yx, v.u.m->yy); + return FcNameUnparseString (buf, temp, 0); + case FcTypeCharSet: + return FcNameUnparseCharSet (buf, v.u.c); + case FcTypeLangSet: + return FcNameUnparseLangSet (buf, v.u.l); + case FcTypeFTFace: + return FcTrue; + } + return FcFalse; +} + +FcBool +FcNameUnparseValueList (FcStrBuf *buf, + FcValueListPtr v, + FcChar8 *escape) +{ + while (v) + { + if (!FcNameUnparseValue (buf, &v->value, escape)) + return FcFalse; + if ((v = FcValueListNext(v)) != NULL) + if (!FcNameUnparseString (buf, (FcChar8 *) ",", 0)) + return FcFalse; + } + return FcTrue; +} + +#define FC_ESCAPE_FIXED "\\-:," +#define FC_ESCAPE_VARIABLE "\\=_:," + +FcChar8 * +FcNameUnparse (FcPattern *pat) +{ + return FcNameUnparseEscaped (pat, FcTrue); +} + +FcChar8 * +FcNameUnparseEscaped (FcPattern *pat, FcBool escape) +{ + FcStrBuf buf; + FcChar8 buf_static[8192]; + int i; + FcPatternElt *e; + const FcObjectTypeList *l; + const FcObjectType *o; + + FcStrBufInit (&buf, buf_static, sizeof (buf_static)); + e = FcPatternObjectFindElt (pat, FC_FAMILY_OBJECT); + if (e) + { + if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0)) + goto bail0; + } + e = FcPatternObjectFindElt (pat, FC_SIZE_OBJECT); + if (e) + { + if (!FcNameUnparseString (&buf, (FcChar8 *) "-", 0)) + goto bail0; + if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? (FcChar8 *) FC_ESCAPE_FIXED : 0)) + goto bail0; + } + for (l = _FcObjectTypes; l; l = l->next) + { + for (i = 0; i < l->ntypes; i++) + { + o = &l->types[i]; + if (!strcmp (o->object, FC_FAMILY) || + !strcmp (o->object, FC_SIZE)) + continue; + + e = FcPatternObjectFindElt (pat, FcObjectFromName (o->object)); + if (e) + { + if (!FcNameUnparseString (&buf, (FcChar8 *) ":", 0)) + goto bail0; + if (!FcNameUnparseString (&buf, (FcChar8 *) o->object, escape ? (FcChar8 *) FC_ESCAPE_VARIABLE : 0)) + goto bail0; + if (!FcNameUnparseString (&buf, (FcChar8 *) "=", 0)) + goto bail0; + if (!FcNameUnparseValueList (&buf, FcPatternEltValues(e), escape ? + (FcChar8 *) FC_ESCAPE_VARIABLE : 0)) + goto bail0; + } + } + } + return FcStrBufDone (&buf); +bail0: + FcStrBufDestroy (&buf); + return 0; +} +#define __fcname__ +#include "fcaliastail.h" +#undef __fcname__ diff --git a/fontconfig/src/fcpat.c b/fontconfig/src/fcpat.c index 0d2402043..8f63659df 100644 --- a/fontconfig/src/fcpat.c +++ b/fontconfig/src/fcpat.c @@ -1,1267 +1,1267 @@ -/* - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include "fcftint.h" -#include -#include -#include - -static FcBool -FcHashOwnsName(const FcChar8 *name); - -FcPattern * -FcPatternCreate (void) -{ - FcPattern *p; - - p = (FcPattern *) malloc (sizeof (FcPattern)); - if (!p) - return 0; - FcMemAlloc (FC_MEM_PATTERN, sizeof (FcPattern)); - p->num = 0; - p->size = 0; - p->elts_offset = FcPtrToOffset (p, NULL); - p->ref = 1; - return p; -} - -void -FcValueDestroy (FcValue v) -{ - switch (v.type) { - case FcTypeString: - if (!FcHashOwnsName(v.u.s)) - FcStrFree ((FcChar8 *) v.u.s); - break; - case FcTypeMatrix: - FcMatrixFree ((FcMatrix *) v.u.m); - break; - case FcTypeCharSet: - FcCharSetDestroy ((FcCharSet *) v.u.c); - break; - case FcTypeLangSet: - FcLangSetDestroy ((FcLangSet *) v.u.l); - break; - default: - break; - } -} - -FcValue -FcValueCanonicalize (const FcValue *v) -{ - FcValue new; - - switch (v->type) - { - case FcTypeString: - new.u.s = FcValueString(v); - new.type = FcTypeString; - break; - case FcTypeCharSet: - new.u.c = FcValueCharSet(v); - new.type = FcTypeCharSet; - break; - case FcTypeLangSet: - new.u.l = FcValueLangSet(v); - new.type = FcTypeLangSet; - break; - default: - new = *v; - break; - } - return new; -} - -FcValue -FcValueSave (FcValue v) -{ - switch (v.type) { - case FcTypeString: - v.u.s = FcStrStaticName (v.u.s); - if (!v.u.s) - v.type = FcTypeVoid; - break; - case FcTypeMatrix: - v.u.m = FcMatrixCopy (v.u.m); - if (!v.u.m) - v.type = FcTypeVoid; - break; - case FcTypeCharSet: - v.u.c = FcCharSetCopy ((FcCharSet *) v.u.c); - if (!v.u.c) - v.type = FcTypeVoid; - break; - case FcTypeLangSet: - v.u.l = FcLangSetCopy (v.u.l); - if (!v.u.l) - v.type = FcTypeVoid; - break; - default: - break; - } - return v; -} - -void -FcValueListDestroy (FcValueListPtr l) -{ - FcValueListPtr next; - for (; l; l = next) - { - switch (l->value.type) { - case FcTypeString: - if (!FcHashOwnsName((FcChar8 *)l->value.u.s)) - FcStrFree ((FcChar8 *)l->value.u.s); - break; - case FcTypeMatrix: - FcMatrixFree ((FcMatrix *)l->value.u.m); - break; - case FcTypeCharSet: - FcCharSetDestroy - ((FcCharSet *) (l->value.u.c)); - break; - case FcTypeLangSet: - FcLangSetDestroy - ((FcLangSet *) (l->value.u.l)); - break; - default: - break; - } - next = FcValueListNext(l); - FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList)); - free(l); - } -} - -FcBool -FcValueEqual (FcValue va, FcValue vb) -{ - if (va.type != vb.type) - { - if (va.type == FcTypeInteger) - { - va.type = FcTypeDouble; - va.u.d = va.u.i; - } - if (vb.type == FcTypeInteger) - { - vb.type = FcTypeDouble; - vb.u.d = vb.u.i; - } - if (va.type != vb.type) - return FcFalse; - } - switch (va.type) { - case FcTypeVoid: - return FcTrue; - case FcTypeInteger: - return va.u.i == vb.u.i; - case FcTypeDouble: - return va.u.d == vb.u.d; - case FcTypeString: - return FcStrCmpIgnoreCase (va.u.s, vb.u.s) == 0; - case FcTypeBool: - return va.u.b == vb.u.b; - case FcTypeMatrix: - return FcMatrixEqual (va.u.m, vb.u.m); - case FcTypeCharSet: - return FcCharSetEqual (va.u.c, vb.u.c); - case FcTypeFTFace: - return va.u.f == vb.u.f; - case FcTypeLangSet: - return FcLangSetEqual (va.u.l, vb.u.l); - } - return FcFalse; -} - -static FcChar32 -FcDoubleHash (double d) -{ - if (d < 0) - d = -d; - if (d > 0xffffffff) - d = 0xffffffff; - return (FcChar32) d; -} - -FcChar32 -FcStringHash (const FcChar8 *s) -{ - FcChar8 c; - FcChar32 h = 0; - - if (s) - while ((c = *s++)) - h = ((h << 1) | (h >> 31)) ^ c; - return h; -} - -static FcChar32 -FcValueHash (const FcValue *v) -{ - switch (v->type) { - case FcTypeVoid: - return 0; - case FcTypeInteger: - return (FcChar32) v->u.i; - case FcTypeDouble: - return FcDoubleHash (v->u.d); - case FcTypeString: - return FcStringHash (FcValueString(v)); - case FcTypeBool: - return (FcChar32) v->u.b; - case FcTypeMatrix: - return (FcDoubleHash (v->u.m->xx) ^ - FcDoubleHash (v->u.m->xy) ^ - FcDoubleHash (v->u.m->yx) ^ - FcDoubleHash (v->u.m->yy)); - case FcTypeCharSet: - return (FcChar32) FcValueCharSet(v)->num; - case FcTypeFTFace: - return FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->family_name) ^ - FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->style_name); - case FcTypeLangSet: - return FcLangSetHash (FcValueLangSet(v)); - } - return FcFalse; -} - -static FcBool -FcValueListEqual (FcValueListPtr la, FcValueListPtr lb) -{ - if (la == lb) - return FcTrue; - - while (la && lb) - { - if (!FcValueEqual (la->value, lb->value)) - return FcFalse; - la = FcValueListNext(la); - lb = FcValueListNext(lb); - } - if (la || lb) - return FcFalse; - return FcTrue; -} - -static FcChar32 -FcValueListHash (FcValueListPtr l) -{ - FcChar32 hash = 0; - - for (; l; l = FcValueListNext(l)) - { - hash = ((hash << 1) | (hash >> 31)) ^ FcValueHash (&l->value); - } - return hash; -} - -void -FcPatternDestroy (FcPattern *p) -{ - int i; - FcPatternElt *elts; - - if (p->ref == FC_REF_CONSTANT) - { - FcCacheObjectDereference (p); - return; - } - - if (--p->ref > 0) - return; - - elts = FcPatternElts (p); - for (i = 0; i < p->num; i++) - FcValueListDestroy (FcPatternEltValues(&elts[i])); - - FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt)); - free (elts); - FcMemFree (FC_MEM_PATTERN, sizeof (FcPattern)); - free (p); -} - -static int -FcPatternObjectPosition (const FcPattern *p, FcObject object) -{ - int low, high, mid, c; - FcPatternElt *elts = FcPatternElts(p); - - low = 0; - high = p->num - 1; - c = 1; - mid = 0; - while (low <= high) - { - mid = (low + high) >> 1; - c = elts[mid].object - object; - if (c == 0) - return mid; - if (c < 0) - low = mid + 1; - else - high = mid - 1; - } - if (c < 0) - mid++; - return -(mid + 1); -} - -FcPatternElt * -FcPatternObjectFindElt (const FcPattern *p, FcObject object) -{ - int i = FcPatternObjectPosition (p, object); - if (i < 0) - return 0; - return &FcPatternElts(p)[i]; -} - -FcPatternElt * -FcPatternObjectInsertElt (FcPattern *p, FcObject object) -{ - int i; - FcPatternElt *e; - - i = FcPatternObjectPosition (p, object); - if (i < 0) - { - i = -i - 1; - - /* reallocate array */ - if (p->num + 1 >= p->size) - { - int s = p->size + 16; - if (p->size) - { - FcPatternElt *e0 = FcPatternElts(p); - e = (FcPatternElt *) realloc (e0, s * sizeof (FcPatternElt)); - if (!e) /* maybe it was mmapped */ - { - e = malloc(s * sizeof (FcPatternElt)); - if (e) - memcpy(e, e0, p->num * sizeof (FcPatternElt)); - } - } - else - e = (FcPatternElt *) malloc (s * sizeof (FcPatternElt)); - if (!e) - return FcFalse; - p->elts_offset = FcPtrToOffset (p, e); - if (p->size) - FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt)); - FcMemAlloc (FC_MEM_PATELT, s * sizeof (FcPatternElt)); - while (p->size < s) - { - e[p->size].object = 0; - e[p->size].values = NULL; - p->size++; - } - } - - e = FcPatternElts(p); - /* move elts up */ - memmove (e + i + 1, - e + i, - sizeof (FcPatternElt) * - (p->num - i)); - - /* bump count */ - p->num++; - - e[i].object = object; - e[i].values = NULL; - } - - return FcPatternElts(p) + i; -} - -FcBool -FcPatternEqual (const FcPattern *pa, const FcPattern *pb) -{ - int i; - FcPatternElt *pae, *pbe; - - if (pa == pb) - return FcTrue; - - if (pa->num != pb->num) - return FcFalse; - pae = FcPatternElts(pa); - pbe = FcPatternElts(pb); - for (i = 0; i < pa->num; i++) - { - if (pae[i].object != pbe[i].object) - return FcFalse; - if (!FcValueListEqual (FcPatternEltValues(&pae[i]), - FcPatternEltValues(&pbe[i]))) - return FcFalse; - } - return FcTrue; -} - -FcChar32 -FcPatternHash (const FcPattern *p) -{ - int i; - FcChar32 h = 0; - FcPatternElt *pe = FcPatternElts(p); - - for (i = 0; i < p->num; i++) - { - h = (((h << 1) | (h >> 31)) ^ - pe[i].object ^ - FcValueListHash (FcPatternEltValues(&pe[i]))); - } - return h; -} - -FcBool -FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObjectSet *os) -{ - FcPatternElt *ea, *eb; - int i; - - for (i = 0; i < os->nobject; i++) - { - FcObject object = FcObjectFromName (os->objects[i]); - ea = FcPatternObjectFindElt (pai, object); - eb = FcPatternObjectFindElt (pbi, object); - if (ea) - { - if (!eb) - return FcFalse; - if (!FcValueListEqual (FcPatternEltValues(ea), FcPatternEltValues(eb))) - return FcFalse; - } - else - { - if (eb) - return FcFalse; - } - } - return FcTrue; -} - -FcBool -FcPatternObjectAddWithBinding (FcPattern *p, - FcObject object, - FcValue value, - FcValueBinding binding, - FcBool append) -{ - FcPatternElt *e; - FcValueListPtr new, *prev; - - if (p->ref == FC_REF_CONSTANT) - goto bail0; - - new = malloc (sizeof (FcValueList)); - if (!new) - goto bail0; - - memset(new, 0, sizeof (FcValueList)); - FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList)); - value = FcValueSave (value); - if (value.type == FcTypeVoid) - goto bail1; - - /* - * Make sure the stored type is valid for built-in objects - */ - if (!FcObjectValidType (object, value.type)) - { - if (FcDebug() & FC_DBG_OBJTYPES) - { - printf ("FcPattern object %s does not accept value ", - FcObjectName (object)); - FcValuePrint (value); - } - goto bail1; - } - - new->value = value; - new->binding = binding; - new->next = NULL; - - e = FcPatternObjectInsertElt (p, object); - if (!e) - goto bail2; - - if (append) - { - for (prev = &e->values; *prev; prev = &(*prev)->next) - ; - *prev = new; - } - else - { - new->next = e->values; - e->values = new; - } - - return FcTrue; - -bail2: - FcValueDestroy (value); -bail1: - FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList)); - free (new); -bail0: - return FcFalse; -} - -FcBool -FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append) -{ - return FcPatternObjectAddWithBinding (p, object, - value, FcValueBindingStrong, append); -} - -FcBool -FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append) -{ - return FcPatternObjectAddWithBinding (p, FcObjectFromName (object), - value, FcValueBindingStrong, append); -} - -FcBool -FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append) -{ - return FcPatternObjectAddWithBinding (p, FcObjectFromName (object), - value, FcValueBindingWeak, append); -} - -FcBool -FcPatternObjectDel (FcPattern *p, FcObject object) -{ - FcPatternElt *e; - - e = FcPatternObjectFindElt (p, object); - if (!e) - return FcFalse; - - /* destroy value */ - FcValueListDestroy (e->values); - - /* shuffle existing ones down */ - memmove (e, e+1, - (FcPatternElts(p) + p->num - (e + 1)) * - sizeof (FcPatternElt)); - p->num--; - e = FcPatternElts(p) + p->num; - e->object = 0; - e->values = NULL; - return FcTrue; -} - -FcBool -FcPatternDel (FcPattern *p, const char *object) -{ - return FcPatternObjectDel (p, FcObjectFromName (object)); -} - -FcBool -FcPatternRemove (FcPattern *p, const char *object, int id) -{ - FcPatternElt *e; - FcValueListPtr *prev, l; - - e = FcPatternObjectFindElt (p, FcObjectFromName (object)); - if (!e) - return FcFalse; - for (prev = &e->values; (l = *prev); prev = &l->next) - { - if (!id) - { - *prev = l->next; - l->next = NULL; - FcValueListDestroy (l); - if (!e->values) - FcPatternDel (p, object); - return FcTrue; - } - id--; - } - return FcFalse; -} - -FcBool -FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i) -{ - FcValue v; - - v.type = FcTypeInteger; - v.u.i = i; - return FcPatternObjectAdd (p, object, v, FcTrue); -} - -FcBool -FcPatternAddInteger (FcPattern *p, const char *object, int i) -{ - return FcPatternObjectAddInteger (p, FcObjectFromName (object), i); -} - -FcBool -FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d) -{ - FcValue v; - - v.type = FcTypeDouble; - v.u.d = d; - return FcPatternObjectAdd (p, object, v, FcTrue); -} - - -FcBool -FcPatternAddDouble (FcPattern *p, const char *object, double d) -{ - return FcPatternObjectAddDouble (p, FcObjectFromName (object), d); -} - -FcBool -FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s) -{ - FcValue v; - - if (!s) - { - v.type = FcTypeVoid; - v.u.s = 0; - return FcPatternObjectAdd (p, object, v, FcTrue); - } - - v.type = FcTypeString; - v.u.s = FcStrStaticName(s); - return FcPatternObjectAdd (p, object, v, FcTrue); -} - -FcBool -FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s) -{ - return FcPatternObjectAddString (p, FcObjectFromName (object), s); -} - -FcBool -FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s) -{ - FcValue v; - - v.type = FcTypeMatrix; - v.u.m = s; - return FcPatternAdd (p, object, v, FcTrue); -} - - -FcBool -FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b) -{ - FcValue v; - - v.type = FcTypeBool; - v.u.b = b; - return FcPatternObjectAdd (p, object, v, FcTrue); -} - -FcBool -FcPatternAddBool (FcPattern *p, const char *object, FcBool b) -{ - return FcPatternObjectAddBool (p, FcObjectFromName (object), b); -} - -FcBool -FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c) -{ - FcValue v; - - v.type = FcTypeCharSet; - v.u.c = (FcCharSet *)c; - return FcPatternAdd (p, object, v, FcTrue); -} - -FcBool -FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f) -{ - FcValue v; - - v.type = FcTypeFTFace; - v.u.f = (void *) f; - return FcPatternAdd (p, object, v, FcTrue); -} - -FcBool -FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls) -{ - FcValue v; - - v.type = FcTypeLangSet; - v.u.l = (FcLangSet *)ls; - return FcPatternAdd (p, object, v, FcTrue); -} - -FcResult -FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v) -{ - FcPatternElt *e; - FcValueListPtr l; - - e = FcPatternObjectFindElt (p, object); - if (!e) - return FcResultNoMatch; - for (l = FcPatternEltValues(e); l; l = FcValueListNext(l)) - { - if (!id) - { - *v = FcValueCanonicalize(&l->value); - return FcResultMatch; - } - id--; - } - return FcResultNoId; -} - -FcResult -FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v) -{ - return FcPatternObjectGet (p, FcObjectFromName (object), id, v); -} - -FcResult -FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int id, int *i) -{ - FcValue v; - FcResult r; - - r = FcPatternObjectGet (p, object, id, &v); - if (r != FcResultMatch) - return r; - switch (v.type) { - case FcTypeDouble: - *i = (int) v.u.d; - break; - case FcTypeInteger: - *i = v.u.i; - break; - default: - return FcResultTypeMismatch; - } - return FcResultMatch; -} - -FcResult -FcPatternGetInteger (const FcPattern *p, const char *object, int id, int *i) -{ - return FcPatternObjectGetInteger (p, FcObjectFromName (object), id, i); -} - - -FcResult -FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int id, double *d) -{ - FcValue v; - FcResult r; - - r = FcPatternObjectGet (p, object, id, &v); - if (r != FcResultMatch) - return r; - switch (v.type) { - case FcTypeDouble: - *d = v.u.d; - break; - case FcTypeInteger: - *d = (double) v.u.i; - break; - default: - return FcResultTypeMismatch; - } - return FcResultMatch; -} - -FcResult -FcPatternGetDouble (const FcPattern *p, const char *object, int id, double *d) -{ - return FcPatternObjectGetDouble (p, FcObjectFromName (object), id, d); -} - -FcResult -FcPatternObjectGetString (const FcPattern *p, FcObject object, int id, FcChar8 ** s) -{ - FcValue v; - FcResult r; - - r = FcPatternObjectGet (p, object, id, &v); - if (r != FcResultMatch) - return r; - if (v.type != FcTypeString) - return FcResultTypeMismatch; - - *s = (FcChar8 *) v.u.s; - return FcResultMatch; -} - -FcResult -FcPatternGetString (const FcPattern *p, const char *object, int id, FcChar8 ** s) -{ - return FcPatternObjectGetString (p, FcObjectFromName (object), id, s); -} - -FcResult -FcPatternGetMatrix(const FcPattern *p, const char *object, int id, FcMatrix **m) -{ - FcValue v; - FcResult r; - - r = FcPatternGet (p, object, id, &v); - if (r != FcResultMatch) - return r; - if (v.type != FcTypeMatrix) - return FcResultTypeMismatch; - *m = (FcMatrix *)v.u.m; - return FcResultMatch; -} - - -FcResult -FcPatternGetBool(const FcPattern *p, const char *object, int id, FcBool *b) -{ - FcValue v; - FcResult r; - - r = FcPatternGet (p, object, id, &v); - if (r != FcResultMatch) - return r; - if (v.type != FcTypeBool) - return FcResultTypeMismatch; - *b = v.u.b; - return FcResultMatch; -} - -FcResult -FcPatternGetCharSet(const FcPattern *p, const char *object, int id, FcCharSet **c) -{ - FcValue v; - FcResult r; - - r = FcPatternGet (p, object, id, &v); - if (r != FcResultMatch) - return r; - if (v.type != FcTypeCharSet) - return FcResultTypeMismatch; - *c = (FcCharSet *)v.u.c; - return FcResultMatch; -} - -FcResult -FcPatternGetFTFace(const FcPattern *p, const char *object, int id, FT_Face *f) -{ - FcValue v; - FcResult r; - - r = FcPatternGet (p, object, id, &v); - if (r != FcResultMatch) - return r; - if (v.type != FcTypeFTFace) - return FcResultTypeMismatch; - *f = (FT_Face) v.u.f; - return FcResultMatch; -} - -FcResult -FcPatternGetLangSet(const FcPattern *p, const char *object, int id, FcLangSet **ls) -{ - FcValue v; - FcResult r; - - r = FcPatternGet (p, object, id, &v); - if (r != FcResultMatch) - return r; - if (v.type != FcTypeLangSet) - return FcResultTypeMismatch; - *ls = (FcLangSet *)v.u.l; - return FcResultMatch; -} - -FcPattern * -FcPatternDuplicate (const FcPattern *orig) -{ - FcPattern *new; - FcPatternElt *e; - int i; - FcValueListPtr l; - - new = FcPatternCreate (); - if (!new) - goto bail0; - - e = FcPatternElts(orig); - - for (i = 0; i < orig->num; i++) - { - for (l = FcPatternEltValues(e + i); l; l = FcValueListNext(l)) - { - if (!FcPatternObjectAddWithBinding (new, e[i].object, - FcValueCanonicalize(&l->value), - l->binding, - FcTrue)) - goto bail1; - - } - } - - return new; - -bail1: - FcPatternDestroy (new); -bail0: - return 0; -} - -void -FcPatternReference (FcPattern *p) -{ - if (p->ref != FC_REF_CONSTANT) - p->ref++; - else - FcCacheObjectReference (p); -} - -FcPattern * -FcPatternVaBuild (FcPattern *p, va_list va) -{ - FcPattern *ret; - - FcPatternVapBuild (ret, p, va); - return ret; -} - -FcPattern * -FcPatternBuild (FcPattern *p, ...) -{ - va_list va; - - va_start (va, p); - FcPatternVapBuild (p, p, va); - va_end (va); - return p; -} - -/* - * Add all of the elements in 's' to 'p' - */ -FcBool -FcPatternAppend (FcPattern *p, FcPattern *s) -{ - int i; - FcPatternElt *e; - FcValueListPtr v; - - for (i = 0; i < s->num; i++) - { - e = FcPatternElts(s)+i; - for (v = FcPatternEltValues(e); v; v = FcValueListNext(v)) - { - if (!FcPatternObjectAddWithBinding (p, e->object, - FcValueCanonicalize(&v->value), - v->binding, FcTrue)) - return FcFalse; - } - } - return FcTrue; -} - -FcPattern * -FcPatternFilter (FcPattern *p, const FcObjectSet *os) -{ - int i; - FcPattern *ret; - FcPatternElt *e; - FcValueListPtr v; - - if (!os) - return FcPatternDuplicate (p); - - ret = FcPatternCreate (); - if (!ret) - return NULL; - - for (i = 0; i < os->nobject; i++) - { - FcObject object = FcObjectFromName (os->objects[i]); - e = FcPatternObjectFindElt (p, object); - if (e) - { - for (v = FcPatternEltValues(e); v; v = FcValueListNext(v)) - { - if (!FcPatternObjectAddWithBinding (ret, e->object, - FcValueCanonicalize(&v->value), - v->binding, FcTrue)) - goto bail0; - } - } - } - return ret; - -bail0: - FcPatternDestroy (ret); - return NULL; -} - -#define OBJECT_HASH_SIZE 31 -static struct objectBucket { - struct objectBucket *next; - FcChar32 hash; -} *FcObjectBuckets[OBJECT_HASH_SIZE]; - -static FcBool -FcHashOwnsName (const FcChar8 *name) -{ - FcChar32 hash = FcStringHash (name); - struct objectBucket **p; - struct objectBucket *b; - - for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) - if (b->hash == hash && ((char *)name == (char *) (b + 1))) - return FcTrue; - return FcFalse; -} - -const FcChar8 * -FcStrStaticName (const FcChar8 *name) -{ - FcChar32 hash = FcStringHash (name); - struct objectBucket **p; - struct objectBucket *b; - int size; - - for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) - if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1))) - return (FcChar8 *) (b + 1); - size = sizeof (struct objectBucket) + strlen ((char *)name) + 1; - /* - * workaround valgrind warning because glibc takes advantage of how it knows memory is - * allocated to implement strlen by reading in groups of 4 - */ - size = (size + 3) & ~3; - b = malloc (size); - FcMemAlloc (FC_MEM_STATICSTR, size); - if (!b) - return NULL; - b->next = 0; - b->hash = hash; - strcpy ((char *) (b + 1), (char *)name); - *p = b; - return (FcChar8 *) (b + 1); -} - -static void -FcStrStaticNameFini (void) -{ - int i, size; - struct objectBucket *b, *next; - char *name; - - for (i = 0; i < OBJECT_HASH_SIZE; i++) - { - for (b = FcObjectBuckets[i]; b; b = next) - { - next = b->next; - name = (char *) (b + 1); - size = sizeof (struct objectBucket) + strlen (name) + 1; - FcMemFree (FC_MEM_STATICSTR, size + sizeof (int)); - free (b); - } - FcObjectBuckets[i] = 0; - } -} - -void -FcPatternFini (void) -{ - FcStrStaticNameFini (); - FcObjectFini (); -} - -FcBool -FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat) -{ - int i; - FcPatternElt *elts = FcPatternElts(pat); - - if (!FcSerializeAlloc (serialize, pat, sizeof (FcPattern))) - return FcFalse; - if (!FcSerializeAlloc (serialize, elts, pat->num * sizeof (FcPatternElt))) - return FcFalse; - for (i = 0; i < pat->num; i++) - if (!FcValueListSerializeAlloc (serialize, FcPatternEltValues(elts+i))) - return FcFalse; - return FcTrue; -} - -FcPattern * -FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat) -{ - FcPattern *pat_serialized; - FcPatternElt *elts = FcPatternElts (pat); - FcPatternElt *elts_serialized; - FcValueList *values_serialized; - int i; - - pat_serialized = FcSerializePtr (serialize, pat); - if (!pat_serialized) - return NULL; - *pat_serialized = *pat; - pat_serialized->size = pat->num; - pat_serialized->ref = FC_REF_CONSTANT; - - elts_serialized = FcSerializePtr (serialize, elts); - if (!elts_serialized) - return NULL; - - pat_serialized->elts_offset = FcPtrToOffset (pat_serialized, - elts_serialized); - - for (i = 0; i < pat->num; i++) - { - values_serialized = FcValueListSerialize (serialize, FcPatternEltValues (elts+i)); - if (!values_serialized) - return NULL; - elts_serialized[i].object = elts[i].object; - elts_serialized[i].values = FcPtrToEncodedOffset (&elts_serialized[i], - values_serialized, - FcValueList); - } - if (FcDebug() & FC_DBG_CACHEV) { - printf ("Raw pattern:\n"); - FcPatternPrint (pat); - printf ("Serialized pattern:\n"); - FcPatternPrint (pat_serialized); - printf ("\n"); - } - return pat_serialized; -} - -FcBool -FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *vl) -{ - while (vl) - { - if (!FcSerializeAlloc (serialize, vl, sizeof (FcValueList))) - return FcFalse; - switch (vl->value.type) { - case FcTypeString: - if (!FcStrSerializeAlloc (serialize, vl->value.u.s)) - return FcFalse; - break; - case FcTypeCharSet: - if (!FcCharSetSerializeAlloc (serialize, vl->value.u.c)) - return FcFalse; - break; - case FcTypeLangSet: - if (!FcLangSetSerializeAlloc (serialize, vl->value.u.l)) - return FcFalse; - break; - default: - break; - } - vl = vl->next; - } - return FcTrue; -} - -FcValueList * -FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl) -{ - FcValueList *vl_serialized; - FcChar8 *s_serialized; - FcCharSet *c_serialized; - FcLangSet *l_serialized; - FcValueList *head_serialized = NULL; - FcValueList *prev_serialized = NULL; - - while (vl) - { - vl_serialized = FcSerializePtr (serialize, vl); - if (!vl_serialized) - return NULL; - - if (prev_serialized) - prev_serialized->next = FcPtrToEncodedOffset (prev_serialized, - vl_serialized, - FcValueList); - else - head_serialized = vl_serialized; - - vl_serialized->next = NULL; - vl_serialized->value.type = vl->value.type; - switch (vl->value.type) { - case FcTypeInteger: - vl_serialized->value.u.i = vl->value.u.i; - break; - case FcTypeDouble: - vl_serialized->value.u.d = vl->value.u.d; - break; - case FcTypeString: - s_serialized = FcStrSerialize (serialize, vl->value.u.s); - if (!s_serialized) - return NULL; - vl_serialized->value.u.s = FcPtrToEncodedOffset (&vl_serialized->value, - s_serialized, - FcChar8); - break; - case FcTypeBool: - vl_serialized->value.u.b = vl->value.u.b; - break; - case FcTypeMatrix: - /* can't happen */ - break; - case FcTypeCharSet: - c_serialized = FcCharSetSerialize (serialize, vl->value.u.c); - if (!c_serialized) - return NULL; - vl_serialized->value.u.c = FcPtrToEncodedOffset (&vl_serialized->value, - c_serialized, - FcCharSet); - break; - case FcTypeFTFace: - /* can't happen */ - break; - case FcTypeLangSet: - l_serialized = FcLangSetSerialize (serialize, vl->value.u.l); - if (!l_serialized) - return NULL; - vl_serialized->value.u.l = FcPtrToEncodedOffset (&vl_serialized->value, - l_serialized, - FcLangSet); - break; - default: - break; - } - prev_serialized = vl_serialized; - vl = vl->next; - } - return head_serialized; -} -#define __fcpat__ -#include "fcaliastail.h" -#include "fcftaliastail.h" -#undef __fcpat__ +/* + * Copyright © 2000 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include "fcftint.h" +#include +#include +#include + +static FcBool +FcHashOwnsName(const FcChar8 *name); + +FcPattern * +FcPatternCreate (void) +{ + FcPattern *p; + + p = (FcPattern *) malloc (sizeof (FcPattern)); + if (!p) + return 0; + FcMemAlloc (FC_MEM_PATTERN, sizeof (FcPattern)); + p->num = 0; + p->size = 0; + p->elts_offset = FcPtrToOffset (p, NULL); + p->ref = 1; + return p; +} + +void +FcValueDestroy (FcValue v) +{ + switch (v.type) { + case FcTypeString: + if (!FcHashOwnsName(v.u.s)) + FcStrFree ((FcChar8 *) v.u.s); + break; + case FcTypeMatrix: + FcMatrixFree ((FcMatrix *) v.u.m); + break; + case FcTypeCharSet: + FcCharSetDestroy ((FcCharSet *) v.u.c); + break; + case FcTypeLangSet: + FcLangSetDestroy ((FcLangSet *) v.u.l); + break; + default: + break; + } +} + +FcValue +FcValueCanonicalize (const FcValue *v) +{ + FcValue new; + + switch (v->type) + { + case FcTypeString: + new.u.s = FcValueString(v); + new.type = FcTypeString; + break; + case FcTypeCharSet: + new.u.c = FcValueCharSet(v); + new.type = FcTypeCharSet; + break; + case FcTypeLangSet: + new.u.l = FcValueLangSet(v); + new.type = FcTypeLangSet; + break; + default: + new = *v; + break; + } + return new; +} + +FcValue +FcValueSave (FcValue v) +{ + switch (v.type) { + case FcTypeString: + v.u.s = FcStrStaticName (v.u.s); + if (!v.u.s) + v.type = FcTypeVoid; + break; + case FcTypeMatrix: + v.u.m = FcMatrixCopy (v.u.m); + if (!v.u.m) + v.type = FcTypeVoid; + break; + case FcTypeCharSet: + v.u.c = FcCharSetCopy ((FcCharSet *) v.u.c); + if (!v.u.c) + v.type = FcTypeVoid; + break; + case FcTypeLangSet: + v.u.l = FcLangSetCopy (v.u.l); + if (!v.u.l) + v.type = FcTypeVoid; + break; + default: + break; + } + return v; +} + +void +FcValueListDestroy (FcValueListPtr l) +{ + FcValueListPtr next; + for (; l; l = next) + { + switch (l->value.type) { + case FcTypeString: + if (!FcHashOwnsName((FcChar8 *)l->value.u.s)) + FcStrFree ((FcChar8 *)l->value.u.s); + break; + case FcTypeMatrix: + FcMatrixFree ((FcMatrix *)l->value.u.m); + break; + case FcTypeCharSet: + FcCharSetDestroy + ((FcCharSet *) (l->value.u.c)); + break; + case FcTypeLangSet: + FcLangSetDestroy + ((FcLangSet *) (l->value.u.l)); + break; + default: + break; + } + next = FcValueListNext(l); + FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList)); + free(l); + } +} + +FcBool +FcValueEqual (FcValue va, FcValue vb) +{ + if (va.type != vb.type) + { + if (va.type == FcTypeInteger) + { + va.type = FcTypeDouble; + va.u.d = va.u.i; + } + if (vb.type == FcTypeInteger) + { + vb.type = FcTypeDouble; + vb.u.d = vb.u.i; + } + if (va.type != vb.type) + return FcFalse; + } + switch (va.type) { + case FcTypeVoid: + return FcTrue; + case FcTypeInteger: + return va.u.i == vb.u.i; + case FcTypeDouble: + return va.u.d == vb.u.d; + case FcTypeString: + return FcStrCmpIgnoreCase (va.u.s, vb.u.s) == 0; + case FcTypeBool: + return va.u.b == vb.u.b; + case FcTypeMatrix: + return FcMatrixEqual (va.u.m, vb.u.m); + case FcTypeCharSet: + return FcCharSetEqual (va.u.c, vb.u.c); + case FcTypeFTFace: + return va.u.f == vb.u.f; + case FcTypeLangSet: + return FcLangSetEqual (va.u.l, vb.u.l); + } + return FcFalse; +} + +static FcChar32 +FcDoubleHash (double d) +{ + if (d < 0) + d = -d; + if (d > 0xffffffff) + d = 0xffffffff; + return (FcChar32) d; +} + +FcChar32 +FcStringHash (const FcChar8 *s) +{ + FcChar8 c; + FcChar32 h = 0; + + if (s) + while ((c = *s++)) + h = ((h << 1) | (h >> 31)) ^ c; + return h; +} + +static FcChar32 +FcValueHash (const FcValue *v) +{ + switch (v->type) { + case FcTypeVoid: + return 0; + case FcTypeInteger: + return (FcChar32) v->u.i; + case FcTypeDouble: + return FcDoubleHash (v->u.d); + case FcTypeString: + return FcStringHash (FcValueString(v)); + case FcTypeBool: + return (FcChar32) v->u.b; + case FcTypeMatrix: + return (FcDoubleHash (v->u.m->xx) ^ + FcDoubleHash (v->u.m->xy) ^ + FcDoubleHash (v->u.m->yx) ^ + FcDoubleHash (v->u.m->yy)); + case FcTypeCharSet: + return (FcChar32) FcValueCharSet(v)->num; + case FcTypeFTFace: + return FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->family_name) ^ + FcStringHash ((const FcChar8 *) ((FT_Face) v->u.f)->style_name); + case FcTypeLangSet: + return FcLangSetHash (FcValueLangSet(v)); + } + return FcFalse; +} + +static FcBool +FcValueListEqual (FcValueListPtr la, FcValueListPtr lb) +{ + if (la == lb) + return FcTrue; + + while (la && lb) + { + if (!FcValueEqual (la->value, lb->value)) + return FcFalse; + la = FcValueListNext(la); + lb = FcValueListNext(lb); + } + if (la || lb) + return FcFalse; + return FcTrue; +} + +static FcChar32 +FcValueListHash (FcValueListPtr l) +{ + FcChar32 hash = 0; + + for (; l; l = FcValueListNext(l)) + { + hash = ((hash << 1) | (hash >> 31)) ^ FcValueHash (&l->value); + } + return hash; +} + +void +FcPatternDestroy (FcPattern *p) +{ + int i; + FcPatternElt *elts; + + if (p->ref == FC_REF_CONSTANT) + { + FcCacheObjectDereference (p); + return; + } + + if (--p->ref > 0) + return; + + elts = FcPatternElts (p); + for (i = 0; i < p->num; i++) + FcValueListDestroy (FcPatternEltValues(&elts[i])); + + FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt)); + free (elts); + FcMemFree (FC_MEM_PATTERN, sizeof (FcPattern)); + free (p); +} + +static int +FcPatternObjectPosition (const FcPattern *p, FcObject object) +{ + int low, high, mid, c; + FcPatternElt *elts = FcPatternElts(p); + + low = 0; + high = p->num - 1; + c = 1; + mid = 0; + while (low <= high) + { + mid = (low + high) >> 1; + c = elts[mid].object - object; + if (c == 0) + return mid; + if (c < 0) + low = mid + 1; + else + high = mid - 1; + } + if (c < 0) + mid++; + return -(mid + 1); +} + +FcPatternElt * +FcPatternObjectFindElt (const FcPattern *p, FcObject object) +{ + int i = FcPatternObjectPosition (p, object); + if (i < 0) + return 0; + return &FcPatternElts(p)[i]; +} + +FcPatternElt * +FcPatternObjectInsertElt (FcPattern *p, FcObject object) +{ + int i; + FcPatternElt *e; + + i = FcPatternObjectPosition (p, object); + if (i < 0) + { + i = -i - 1; + + /* reallocate array */ + if (p->num + 1 >= p->size) + { + int s = p->size + 16; + if (p->size) + { + FcPatternElt *e0 = FcPatternElts(p); + e = (FcPatternElt *) realloc (e0, s * sizeof (FcPatternElt)); + if (!e) /* maybe it was mmapped */ + { + e = malloc(s * sizeof (FcPatternElt)); + if (e) + memcpy(e, e0, p->num * sizeof (FcPatternElt)); + } + } + else + e = (FcPatternElt *) malloc (s * sizeof (FcPatternElt)); + if (!e) + return FcFalse; + p->elts_offset = FcPtrToOffset (p, e); + if (p->size) + FcMemFree (FC_MEM_PATELT, p->size * sizeof (FcPatternElt)); + FcMemAlloc (FC_MEM_PATELT, s * sizeof (FcPatternElt)); + while (p->size < s) + { + e[p->size].object = 0; + e[p->size].values = NULL; + p->size++; + } + } + + e = FcPatternElts(p); + /* move elts up */ + memmove (e + i + 1, + e + i, + sizeof (FcPatternElt) * + (p->num - i)); + + /* bump count */ + p->num++; + + e[i].object = object; + e[i].values = NULL; + } + + return FcPatternElts(p) + i; +} + +FcBool +FcPatternEqual (const FcPattern *pa, const FcPattern *pb) +{ + int i; + FcPatternElt *pae, *pbe; + + if (pa == pb) + return FcTrue; + + if (pa->num != pb->num) + return FcFalse; + pae = FcPatternElts(pa); + pbe = FcPatternElts(pb); + for (i = 0; i < pa->num; i++) + { + if (pae[i].object != pbe[i].object) + return FcFalse; + if (!FcValueListEqual (FcPatternEltValues(&pae[i]), + FcPatternEltValues(&pbe[i]))) + return FcFalse; + } + return FcTrue; +} + +FcChar32 +FcPatternHash (const FcPattern *p) +{ + int i; + FcChar32 h = 0; + FcPatternElt *pe = FcPatternElts(p); + + for (i = 0; i < p->num; i++) + { + h = (((h << 1) | (h >> 31)) ^ + pe[i].object ^ + FcValueListHash (FcPatternEltValues(&pe[i]))); + } + return h; +} + +FcBool +FcPatternEqualSubset (const FcPattern *pai, const FcPattern *pbi, const FcObjectSet *os) +{ + FcPatternElt *ea, *eb; + int i; + + for (i = 0; i < os->nobject; i++) + { + FcObject object = FcObjectFromName (os->objects[i]); + ea = FcPatternObjectFindElt (pai, object); + eb = FcPatternObjectFindElt (pbi, object); + if (ea) + { + if (!eb) + return FcFalse; + if (!FcValueListEqual (FcPatternEltValues(ea), FcPatternEltValues(eb))) + return FcFalse; + } + else + { + if (eb) + return FcFalse; + } + } + return FcTrue; +} + +FcBool +FcPatternObjectAddWithBinding (FcPattern *p, + FcObject object, + FcValue value, + FcValueBinding binding, + FcBool append) +{ + FcPatternElt *e; + FcValueListPtr new, *prev; + + if (p->ref == FC_REF_CONSTANT) + goto bail0; + + new = malloc (sizeof (FcValueList)); + if (!new) + goto bail0; + + memset(new, 0, sizeof (FcValueList)); + FcMemAlloc (FC_MEM_VALLIST, sizeof (FcValueList)); + value = FcValueSave (value); + if (value.type == FcTypeVoid) + goto bail1; + + /* + * Make sure the stored type is valid for built-in objects + */ + if (!FcObjectValidType (object, value.type)) + { + if (FcDebug() & FC_DBG_OBJTYPES) + { + printf ("FcPattern object %s does not accept value ", + FcObjectName (object)); + FcValuePrint (value); + } + goto bail1; + } + + new->value = value; + new->binding = binding; + new->next = NULL; + + e = FcPatternObjectInsertElt (p, object); + if (!e) + goto bail2; + + if (append) + { + for (prev = &e->values; *prev; prev = &(*prev)->next) + ; + *prev = new; + } + else + { + new->next = e->values; + e->values = new; + } + + return FcTrue; + +bail2: + FcValueDestroy (value); +bail1: + FcMemFree (FC_MEM_VALLIST, sizeof (FcValueList)); + free (new); +bail0: + return FcFalse; +} + +FcBool +FcPatternObjectAdd (FcPattern *p, FcObject object, FcValue value, FcBool append) +{ + return FcPatternObjectAddWithBinding (p, object, + value, FcValueBindingStrong, append); +} + +FcBool +FcPatternAdd (FcPattern *p, const char *object, FcValue value, FcBool append) +{ + return FcPatternObjectAddWithBinding (p, FcObjectFromName (object), + value, FcValueBindingStrong, append); +} + +FcBool +FcPatternAddWeak (FcPattern *p, const char *object, FcValue value, FcBool append) +{ + return FcPatternObjectAddWithBinding (p, FcObjectFromName (object), + value, FcValueBindingWeak, append); +} + +FcBool +FcPatternObjectDel (FcPattern *p, FcObject object) +{ + FcPatternElt *e; + + e = FcPatternObjectFindElt (p, object); + if (!e) + return FcFalse; + + /* destroy value */ + FcValueListDestroy (e->values); + + /* shuffle existing ones down */ + memmove (e, e+1, + (FcPatternElts(p) + p->num - (e + 1)) * + sizeof (FcPatternElt)); + p->num--; + e = FcPatternElts(p) + p->num; + e->object = 0; + e->values = NULL; + return FcTrue; +} + +FcBool +FcPatternDel (FcPattern *p, const char *object) +{ + return FcPatternObjectDel (p, FcObjectFromName (object)); +} + +FcBool +FcPatternRemove (FcPattern *p, const char *object, int id) +{ + FcPatternElt *e; + FcValueListPtr *prev, l; + + e = FcPatternObjectFindElt (p, FcObjectFromName (object)); + if (!e) + return FcFalse; + for (prev = &e->values; (l = *prev); prev = &l->next) + { + if (!id) + { + *prev = l->next; + l->next = NULL; + FcValueListDestroy (l); + if (!e->values) + FcPatternDel (p, object); + return FcTrue; + } + id--; + } + return FcFalse; +} + +FcBool +FcPatternObjectAddInteger (FcPattern *p, FcObject object, int i) +{ + FcValue v; + + v.type = FcTypeInteger; + v.u.i = i; + return FcPatternObjectAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddInteger (FcPattern *p, const char *object, int i) +{ + return FcPatternObjectAddInteger (p, FcObjectFromName (object), i); +} + +FcBool +FcPatternObjectAddDouble (FcPattern *p, FcObject object, double d) +{ + FcValue v; + + v.type = FcTypeDouble; + v.u.d = d; + return FcPatternObjectAdd (p, object, v, FcTrue); +} + + +FcBool +FcPatternAddDouble (FcPattern *p, const char *object, double d) +{ + return FcPatternObjectAddDouble (p, FcObjectFromName (object), d); +} + +FcBool +FcPatternObjectAddString (FcPattern *p, FcObject object, const FcChar8 *s) +{ + FcValue v; + + if (!s) + { + v.type = FcTypeVoid; + v.u.s = 0; + return FcPatternObjectAdd (p, object, v, FcTrue); + } + + v.type = FcTypeString; + v.u.s = FcStrStaticName(s); + return FcPatternObjectAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddString (FcPattern *p, const char *object, const FcChar8 *s) +{ + return FcPatternObjectAddString (p, FcObjectFromName (object), s); +} + +FcBool +FcPatternAddMatrix (FcPattern *p, const char *object, const FcMatrix *s) +{ + FcValue v; + + v.type = FcTypeMatrix; + v.u.m = s; + return FcPatternAdd (p, object, v, FcTrue); +} + + +FcBool +FcPatternObjectAddBool (FcPattern *p, FcObject object, FcBool b) +{ + FcValue v; + + v.type = FcTypeBool; + v.u.b = b; + return FcPatternObjectAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddBool (FcPattern *p, const char *object, FcBool b) +{ + return FcPatternObjectAddBool (p, FcObjectFromName (object), b); +} + +FcBool +FcPatternAddCharSet (FcPattern *p, const char *object, const FcCharSet *c) +{ + FcValue v; + + v.type = FcTypeCharSet; + v.u.c = (FcCharSet *)c; + return FcPatternAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f) +{ + FcValue v; + + v.type = FcTypeFTFace; + v.u.f = (void *) f; + return FcPatternAdd (p, object, v, FcTrue); +} + +FcBool +FcPatternAddLangSet (FcPattern *p, const char *object, const FcLangSet *ls) +{ + FcValue v; + + v.type = FcTypeLangSet; + v.u.l = (FcLangSet *)ls; + return FcPatternAdd (p, object, v, FcTrue); +} + +FcResult +FcPatternObjectGet (const FcPattern *p, FcObject object, int id, FcValue *v) +{ + FcPatternElt *e; + FcValueListPtr l; + + e = FcPatternObjectFindElt (p, object); + if (!e) + return FcResultNoMatch; + for (l = FcPatternEltValues(e); l; l = FcValueListNext(l)) + { + if (!id) + { + *v = FcValueCanonicalize(&l->value); + return FcResultMatch; + } + id--; + } + return FcResultNoId; +} + +FcResult +FcPatternGet (const FcPattern *p, const char *object, int id, FcValue *v) +{ + return FcPatternObjectGet (p, FcObjectFromName (object), id, v); +} + +FcResult +FcPatternObjectGetInteger (const FcPattern *p, FcObject object, int id, int *i) +{ + FcValue v; + FcResult r; + + r = FcPatternObjectGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + switch (v.type) { + case FcTypeDouble: + *i = (int) v.u.d; + break; + case FcTypeInteger: + *i = v.u.i; + break; + default: + return FcResultTypeMismatch; + } + return FcResultMatch; +} + +FcResult +FcPatternGetInteger (const FcPattern *p, const char *object, int id, int *i) +{ + return FcPatternObjectGetInteger (p, FcObjectFromName (object), id, i); +} + + +FcResult +FcPatternObjectGetDouble (const FcPattern *p, FcObject object, int id, double *d) +{ + FcValue v; + FcResult r; + + r = FcPatternObjectGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + switch (v.type) { + case FcTypeDouble: + *d = v.u.d; + break; + case FcTypeInteger: + *d = (double) v.u.i; + break; + default: + return FcResultTypeMismatch; + } + return FcResultMatch; +} + +FcResult +FcPatternGetDouble (const FcPattern *p, const char *object, int id, double *d) +{ + return FcPatternObjectGetDouble (p, FcObjectFromName (object), id, d); +} + +FcResult +FcPatternObjectGetString (const FcPattern *p, FcObject object, int id, FcChar8 ** s) +{ + FcValue v; + FcResult r; + + r = FcPatternObjectGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeString) + return FcResultTypeMismatch; + + *s = (FcChar8 *) v.u.s; + return FcResultMatch; +} + +FcResult +FcPatternGetString (const FcPattern *p, const char *object, int id, FcChar8 ** s) +{ + return FcPatternObjectGetString (p, FcObjectFromName (object), id, s); +} + +FcResult +FcPatternGetMatrix(const FcPattern *p, const char *object, int id, FcMatrix **m) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeMatrix) + return FcResultTypeMismatch; + *m = (FcMatrix *)v.u.m; + return FcResultMatch; +} + + +FcResult +FcPatternGetBool(const FcPattern *p, const char *object, int id, FcBool *b) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeBool) + return FcResultTypeMismatch; + *b = v.u.b; + return FcResultMatch; +} + +FcResult +FcPatternGetCharSet(const FcPattern *p, const char *object, int id, FcCharSet **c) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeCharSet) + return FcResultTypeMismatch; + *c = (FcCharSet *)v.u.c; + return FcResultMatch; +} + +FcResult +FcPatternGetFTFace(const FcPattern *p, const char *object, int id, FT_Face *f) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeFTFace) + return FcResultTypeMismatch; + *f = (FT_Face) v.u.f; + return FcResultMatch; +} + +FcResult +FcPatternGetLangSet(const FcPattern *p, const char *object, int id, FcLangSet **ls) +{ + FcValue v; + FcResult r; + + r = FcPatternGet (p, object, id, &v); + if (r != FcResultMatch) + return r; + if (v.type != FcTypeLangSet) + return FcResultTypeMismatch; + *ls = (FcLangSet *)v.u.l; + return FcResultMatch; +} + +FcPattern * +FcPatternDuplicate (const FcPattern *orig) +{ + FcPattern *new; + FcPatternElt *e; + int i; + FcValueListPtr l; + + new = FcPatternCreate (); + if (!new) + goto bail0; + + e = FcPatternElts(orig); + + for (i = 0; i < orig->num; i++) + { + for (l = FcPatternEltValues(e + i); l; l = FcValueListNext(l)) + { + if (!FcPatternObjectAddWithBinding (new, e[i].object, + FcValueCanonicalize(&l->value), + l->binding, + FcTrue)) + goto bail1; + + } + } + + return new; + +bail1: + FcPatternDestroy (new); +bail0: + return 0; +} + +void +FcPatternReference (FcPattern *p) +{ + if (p->ref != FC_REF_CONSTANT) + p->ref++; + else + FcCacheObjectReference (p); +} + +FcPattern * +FcPatternVaBuild (FcPattern *p, va_list va) +{ + FcPattern *ret; + + FcPatternVapBuild (ret, p, va); + return ret; +} + +FcPattern * +FcPatternBuild (FcPattern *p, ...) +{ + va_list va; + + va_start (va, p); + FcPatternVapBuild (p, p, va); + va_end (va); + return p; +} + +/* + * Add all of the elements in 's' to 'p' + */ +FcBool +FcPatternAppend (FcPattern *p, FcPattern *s) +{ + int i; + FcPatternElt *e; + FcValueListPtr v; + + for (i = 0; i < s->num; i++) + { + e = FcPatternElts(s)+i; + for (v = FcPatternEltValues(e); v; v = FcValueListNext(v)) + { + if (!FcPatternObjectAddWithBinding (p, e->object, + FcValueCanonicalize(&v->value), + v->binding, FcTrue)) + return FcFalse; + } + } + return FcTrue; +} + +FcPattern * +FcPatternFilter (FcPattern *p, const FcObjectSet *os) +{ + int i; + FcPattern *ret; + FcPatternElt *e; + FcValueListPtr v; + + if (!os) + return FcPatternDuplicate (p); + + ret = FcPatternCreate (); + if (!ret) + return NULL; + + for (i = 0; i < os->nobject; i++) + { + FcObject object = FcObjectFromName (os->objects[i]); + e = FcPatternObjectFindElt (p, object); + if (e) + { + for (v = FcPatternEltValues(e); v; v = FcValueListNext(v)) + { + if (!FcPatternObjectAddWithBinding (ret, e->object, + FcValueCanonicalize(&v->value), + v->binding, FcTrue)) + goto bail0; + } + } + } + return ret; + +bail0: + FcPatternDestroy (ret); + return NULL; +} + +#define OBJECT_HASH_SIZE 31 +static struct objectBucket { + struct objectBucket *next; + FcChar32 hash; +} *FcObjectBuckets[OBJECT_HASH_SIZE]; + +static FcBool +FcHashOwnsName (const FcChar8 *name) +{ + FcChar32 hash = FcStringHash (name); + struct objectBucket **p; + struct objectBucket *b; + + for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + if (b->hash == hash && ((char *)name == (char *) (b + 1))) + return FcTrue; + return FcFalse; +} + +const FcChar8 * +FcStrStaticName (const FcChar8 *name) +{ + FcChar32 hash = FcStringHash (name); + struct objectBucket **p; + struct objectBucket *b; + int size; + + for (p = &FcObjectBuckets[hash % OBJECT_HASH_SIZE]; (b = *p); p = &(b->next)) + if (b->hash == hash && !strcmp ((char *)name, (char *) (b + 1))) + return (FcChar8 *) (b + 1); + size = sizeof (struct objectBucket) + strlen ((char *)name) + 1; + /* + * workaround valgrind warning because glibc takes advantage of how it knows memory is + * allocated to implement strlen by reading in groups of 4 + */ + size = (size + 3) & ~3; + b = malloc (size); + FcMemAlloc (FC_MEM_STATICSTR, size); + if (!b) + return NULL; + b->next = 0; + b->hash = hash; + strcpy ((char *) (b + 1), (char *)name); + *p = b; + return (FcChar8 *) (b + 1); +} + +static void +FcStrStaticNameFini (void) +{ + int i, size; + struct objectBucket *b, *next; + char *name; + + for (i = 0; i < OBJECT_HASH_SIZE; i++) + { + for (b = FcObjectBuckets[i]; b; b = next) + { + next = b->next; + name = (char *) (b + 1); + size = sizeof (struct objectBucket) + strlen (name) + 1; + FcMemFree (FC_MEM_STATICSTR, size + sizeof (int)); + free (b); + } + FcObjectBuckets[i] = 0; + } +} + +void +FcPatternFini (void) +{ + FcStrStaticNameFini (); + FcObjectFini (); +} + +FcBool +FcPatternSerializeAlloc (FcSerialize *serialize, const FcPattern *pat) +{ + int i; + FcPatternElt *elts = FcPatternElts(pat); + + if (!FcSerializeAlloc (serialize, pat, sizeof (FcPattern))) + return FcFalse; + if (!FcSerializeAlloc (serialize, elts, pat->num * sizeof (FcPatternElt))) + return FcFalse; + for (i = 0; i < pat->num; i++) + if (!FcValueListSerializeAlloc (serialize, FcPatternEltValues(elts+i))) + return FcFalse; + return FcTrue; +} + +FcPattern * +FcPatternSerialize (FcSerialize *serialize, const FcPattern *pat) +{ + FcPattern *pat_serialized; + FcPatternElt *elts = FcPatternElts (pat); + FcPatternElt *elts_serialized; + FcValueList *values_serialized; + int i; + + pat_serialized = FcSerializePtr (serialize, pat); + if (!pat_serialized) + return NULL; + *pat_serialized = *pat; + pat_serialized->size = pat->num; + pat_serialized->ref = FC_REF_CONSTANT; + + elts_serialized = FcSerializePtr (serialize, elts); + if (!elts_serialized) + return NULL; + + pat_serialized->elts_offset = FcPtrToOffset (pat_serialized, + elts_serialized); + + for (i = 0; i < pat->num; i++) + { + values_serialized = FcValueListSerialize (serialize, FcPatternEltValues (elts+i)); + if (!values_serialized) + return NULL; + elts_serialized[i].object = elts[i].object; + elts_serialized[i].values = FcPtrToEncodedOffset (&elts_serialized[i], + values_serialized, + FcValueList); + } + if (FcDebug() & FC_DBG_CACHEV) { + printf ("Raw pattern:\n"); + FcPatternPrint (pat); + printf ("Serialized pattern:\n"); + FcPatternPrint (pat_serialized); + printf ("\n"); + } + return pat_serialized; +} + +FcBool +FcValueListSerializeAlloc (FcSerialize *serialize, const FcValueList *vl) +{ + while (vl) + { + if (!FcSerializeAlloc (serialize, vl, sizeof (FcValueList))) + return FcFalse; + switch (vl->value.type) { + case FcTypeString: + if (!FcStrSerializeAlloc (serialize, vl->value.u.s)) + return FcFalse; + break; + case FcTypeCharSet: + if (!FcCharSetSerializeAlloc (serialize, vl->value.u.c)) + return FcFalse; + break; + case FcTypeLangSet: + if (!FcLangSetSerializeAlloc (serialize, vl->value.u.l)) + return FcFalse; + break; + default: + break; + } + vl = vl->next; + } + return FcTrue; +} + +FcValueList * +FcValueListSerialize (FcSerialize *serialize, const FcValueList *vl) +{ + FcValueList *vl_serialized; + FcChar8 *s_serialized; + FcCharSet *c_serialized; + FcLangSet *l_serialized; + FcValueList *head_serialized = NULL; + FcValueList *prev_serialized = NULL; + + while (vl) + { + vl_serialized = FcSerializePtr (serialize, vl); + if (!vl_serialized) + return NULL; + + if (prev_serialized) + prev_serialized->next = FcPtrToEncodedOffset (prev_serialized, + vl_serialized, + FcValueList); + else + head_serialized = vl_serialized; + + vl_serialized->next = NULL; + vl_serialized->value.type = vl->value.type; + switch (vl->value.type) { + case FcTypeInteger: + vl_serialized->value.u.i = vl->value.u.i; + break; + case FcTypeDouble: + vl_serialized->value.u.d = vl->value.u.d; + break; + case FcTypeString: + s_serialized = FcStrSerialize (serialize, vl->value.u.s); + if (!s_serialized) + return NULL; + vl_serialized->value.u.s = FcPtrToEncodedOffset (&vl_serialized->value, + s_serialized, + FcChar8); + break; + case FcTypeBool: + vl_serialized->value.u.b = vl->value.u.b; + break; + case FcTypeMatrix: + /* can't happen */ + break; + case FcTypeCharSet: + c_serialized = FcCharSetSerialize (serialize, vl->value.u.c); + if (!c_serialized) + return NULL; + vl_serialized->value.u.c = FcPtrToEncodedOffset (&vl_serialized->value, + c_serialized, + FcCharSet); + break; + case FcTypeFTFace: + /* can't happen */ + break; + case FcTypeLangSet: + l_serialized = FcLangSetSerialize (serialize, vl->value.u.l); + if (!l_serialized) + return NULL; + vl_serialized->value.u.l = FcPtrToEncodedOffset (&vl_serialized->value, + l_serialized, + FcLangSet); + break; + default: + break; + } + prev_serialized = vl_serialized; + vl = vl->next; + } + return head_serialized; +} +#define __fcpat__ +#include "fcaliastail.h" +#include "fcftaliastail.h" +#undef __fcpat__ diff --git a/fontconfig/src/fcstr.c b/fontconfig/src/fcstr.c index 6aee5d288..8b94ecba5 100644 --- a/fontconfig/src/fcstr.c +++ b/fontconfig/src/fcstr.c @@ -1,1198 +1,1198 @@ -/* - * fontconfig/src/fcstr.c - * - * Copyright © 2000 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include -#include -#include -#ifdef _WIN32 -#include -#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 +#include +#include +#ifdef _WIN32 +#include +#endif + +FcChar8 * +FcStrCopy (const FcChar8 *s) +{ + int len; + FcChar8 *r; + + if (!s) + return 0; + len = strlen ((char *) s) + 1; + r = (FcChar8 *) malloc (len); + if (!r) + return 0; + FcMemAlloc (FC_MEM_STRING, len); + memcpy (r, s, len); + return r; +} + +FcChar8 * +FcStrPlus (const FcChar8 *s1, const FcChar8 *s2) +{ + int l = strlen ((char *)s1) + strlen ((char *) s2) + 1; + FcChar8 *s = malloc (l); + + if (!s) + return 0; + FcMemAlloc (FC_MEM_STRING, l); + strcpy ((char *) s, (char *) s1); + strcat ((char *) s, (char *) s2); + return s; +} + +void +FcStrFree (FcChar8 *s) +{ + FcMemFree (FC_MEM_STRING, strlen ((char *) s) + 1); + free (s); +} + + +#include "../fc-case/fccase.h" + +#define FcCaseFoldUpperCount(cf) \ + ((cf)->method == FC_CASE_FOLD_FULL ? 1 : (cf)->count) + +#define FC_STR_CANON_BUF_LEN 1024 + +typedef struct _FcCaseWalker { + const FcChar8 *read; + const FcChar8 *src; + FcChar8 utf8[FC_MAX_CASE_FOLD_CHARS + 1]; +} FcCaseWalker; + +static void +FcStrCaseWalkerInit (const FcChar8 *src, FcCaseWalker *w) +{ + w->src = src; + w->read = 0; +} + +static FcChar8 +FcStrCaseWalkerLong (FcCaseWalker *w, FcChar8 r) +{ + FcChar32 ucs4; + int slen; + int len = strlen((char*)w->src); + + slen = FcUtf8ToUcs4 (w->src - 1, &ucs4, len + 1); + if (slen <= 0) + return r; + if (FC_MIN_FOLD_CHAR <= ucs4 && ucs4 <= FC_MAX_FOLD_CHAR) + { + int min = 0; + int max = FC_NUM_CASE_FOLD; + + while (min <= max) + { + int mid = (min + max) >> 1; + FcChar32 low = fcCaseFold[mid].upper; + FcChar32 high = low + FcCaseFoldUpperCount (&fcCaseFold[mid]); + + if (high <= ucs4) + min = mid + 1; + else if (ucs4 < low) + max = mid - 1; + else + { + const FcCaseFold *fold = &fcCaseFold[mid]; + int dlen; + + switch (fold->method) { + case FC_CASE_FOLD_EVEN_ODD: + if ((ucs4 & 1) != (fold->upper & 1)) + return r; + /* fall through ... */ + default: + dlen = FcUcs4ToUtf8 (ucs4 + fold->offset, w->utf8); + break; + case FC_CASE_FOLD_FULL: + dlen = fold->count; + memcpy (w->utf8, fcCaseFoldChars + fold->offset, dlen); + break; + } + + /* consume rest of src utf-8 bytes */ + w->src += slen - 1; + + /* read from temp buffer */ + w->utf8[dlen] = '\0'; + w->read = w->utf8; + return *w->read++; + } + } + } + return r; +} + +static FcChar8 +FcStrCaseWalkerNext (FcCaseWalker *w) +{ + FcChar8 r; + + if (w->read) + { + if ((r = *w->read++)) + return r; + w->read = 0; + } + r = *w->src++; + + if ((r & 0xc0) == 0xc0) + return FcStrCaseWalkerLong (w, r); + if ('A' <= r && r <= 'Z') + r = r - 'A' + 'a'; + return r; +} + +static FcChar8 +FcStrCaseWalkerNextIgnoreBlanks (FcCaseWalker *w) +{ + FcChar8 r; + + if (w->read) + { + if ((r = *w->read++)) + return r; + w->read = 0; + } + do + { + r = *w->src++; + } while (r == ' '); + + if ((r & 0xc0) == 0xc0) + return FcStrCaseWalkerLong (w, r); + if ('A' <= r && r <= 'Z') + r = r - 'A' + 'a'; + return r; +} + +FcChar8 * +FcStrDowncase (const FcChar8 *s) +{ + FcCaseWalker w; + int len = 0; + FcChar8 *dst, *d; + + FcStrCaseWalkerInit (s, &w); + while (FcStrCaseWalkerNext (&w)) + len++; + d = dst = malloc (len + 1); + if (!d) + return 0; + FcMemAlloc (FC_MEM_STRING, len + 1); + FcStrCaseWalkerInit (s, &w); + while ((*d++ = FcStrCaseWalkerNext (&w))); + return dst; +} + +int +FcStrCmpIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + + if (s1 == s2) return 0; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + for (;;) + { + c1 = FcStrCaseWalkerNext (&w1); + c2 = FcStrCaseWalkerNext (&w2); + if (!c1 || (c1 != c2)) + break; + } + return (int) c1 - (int) c2; +} + +int +FcStrCmpIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + + if (s1 == s2) return 0; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + for (;;) + { + c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1); + c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2); + if (!c1 || (c1 != c2)) + break; + } + return (int) c1 - (int) c2; +} + +int +FcStrCmp (const FcChar8 *s1, const FcChar8 *s2) +{ + FcChar8 c1, c2; + + if (s1 == s2) + return 0; + for (;;) + { + c1 = *s1++; + c2 = *s2++; + if (!c1 || c1 != c2) + break; + } + return (int) c1 - (int) c2; +} + +/* + * Return a hash value for a string + */ + +FcChar32 +FcStrHashIgnoreCase (const FcChar8 *s) +{ + FcChar32 h = 0; + FcCaseWalker w; + FcChar8 c; + + FcStrCaseWalkerInit (s, &w); + while ((c = FcStrCaseWalkerNext (&w))) + h = ((h << 3) ^ (h >> 3)) ^ c; + return h; +} + +/* + * Is the head of s1 equal to s2? + */ + +static FcBool +FcStrIsAtIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + for (;;) + { + c1 = FcStrCaseWalkerNextIgnoreBlanks (&w1); + c2 = FcStrCaseWalkerNextIgnoreBlanks (&w2); + if (!c1 || (c1 != c2)) + break; + } + return c1 == c2 || !c2; +} + +/* + * Does s1 contain an instance of s2 (ignoring blanks and case)? + */ + +const FcChar8 * +FcStrContainsIgnoreBlanksAndCase (const FcChar8 *s1, const FcChar8 *s2) +{ + while (*s1) + { + if (FcStrIsAtIgnoreBlanksAndCase (s1, s2)) + return s1; + s1++; + } + return 0; +} + +static FcBool +FcCharIsPunct (const FcChar8 c) +{ + if (c < '0') + return FcTrue; + if (c <= '9') + return FcFalse; + if (c < 'A') + return FcTrue; + if (c <= 'Z') + return FcFalse; + if (c < 'a') + return FcTrue; + if (c <= 'z') + return FcFalse; + if (c <= '~') + return FcTrue; + return FcFalse; +} + +/* + * Is the head of s1 equal to s2? + */ + +static FcBool +FcStrIsAtIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + for (;;) + { + c1 = FcStrCaseWalkerNext (&w1); + c2 = FcStrCaseWalkerNext (&w2); + if (!c1 || (c1 != c2)) + break; + } + return c1 == c2 || !c2; +} + +/* + * Does s1 contain an instance of s2 (ignoring blanks and case)? + */ + +const FcChar8 * +FcStrContainsIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) +{ + while (*s1) + { + if (FcStrIsAtIgnoreCase (s1, s2)) + return s1; + s1++; + } + return 0; +} + +/* + * Does s1 contain an instance of s2 on a word boundary (ignoring case)? + */ + +const FcChar8 * +FcStrContainsWord (const FcChar8 *s1, const FcChar8 *s2) +{ + FcBool wordStart = FcTrue; + int s1len = strlen ((char *) s1); + int s2len = strlen ((char *) s2); + + while (s1len >= s2len) + { + if (wordStart && + FcStrIsAtIgnoreCase (s1, s2) && + (s1len == s2len || FcCharIsPunct (s1[s2len]))) + { + return s1; + } + wordStart = FcFalse; + if (FcCharIsPunct (*s1)) + wordStart = FcTrue; + s1++; + s1len--; + } + return 0; +} + +const FcChar8 * +FcStrStrIgnoreCase (const FcChar8 *s1, const FcChar8 *s2) +{ + FcCaseWalker w1, w2; + FcChar8 c1, c2; + const FcChar8 *cur; + + if (!s1 || !s2) + return 0; + + if (s1 == s2) + return s1; + + FcStrCaseWalkerInit (s1, &w1); + FcStrCaseWalkerInit (s2, &w2); + + c2 = FcStrCaseWalkerNext (&w2); + + for (;;) + { + cur = w1.src; + c1 = FcStrCaseWalkerNext (&w1); + if (!c1) + break; + if (c1 == c2) + { + FcCaseWalker w1t = w1; + FcCaseWalker w2t = w2; + FcChar8 c1t, c2t; + + for (;;) + { + c1t = FcStrCaseWalkerNext (&w1t); + c2t = FcStrCaseWalkerNext (&w2t); + + if (!c2t) + return cur; + if (c2t != c1t) + break; + } + } + } + return 0; +} + +const FcChar8 * +FcStrStr (const FcChar8 *s1, const FcChar8 *s2) +{ + FcChar8 c1, c2; + const FcChar8 * p = s1; + const FcChar8 * b = s2; + + if (!s1 || !s2) + return 0; + + if (s1 == s2) + return s1; + +again: + c2 = *s2++; + + if (!c2) + return 0; + + for (;;) + { + p = s1; + c1 = *s1++; + if (!c1 || c1 == c2) + break; + } + + if (c1 != c2) + return 0; + + for (;;) + { + c1 = *s1; + c2 = *s2; + if (c1 && c2 && c1 != c2) + { + s1 = p + 1; + s2 = b; + goto again; + } + if (!c2) + return p; + if (!c1) + return 0; + ++ s1; + ++ s2; + } + /* never reached. */ +} + +int +FcUtf8ToUcs4 (const FcChar8 *src_orig, + FcChar32 *dst, + int len) +{ + const FcChar8 *src = src_orig; + FcChar8 s; + int extra; + FcChar32 result; + + if (len == 0) + return 0; + + s = *src++; + len--; + + if (!(s & 0x80)) + { + result = s; + extra = 0; + } + else if (!(s & 0x40)) + { + return -1; + } + else if (!(s & 0x20)) + { + result = s & 0x1f; + extra = 1; + } + else if (!(s & 0x10)) + { + result = s & 0xf; + extra = 2; + } + else if (!(s & 0x08)) + { + result = s & 0x07; + extra = 3; + } + else if (!(s & 0x04)) + { + result = s & 0x03; + extra = 4; + } + else if ( ! (s & 0x02)) + { + result = s & 0x01; + extra = 5; + } + else + { + return -1; + } + if (extra > len) + return -1; + + while (extra--) + { + result <<= 6; + s = *src++; + + if ((s & 0xc0) != 0x80) + return -1; + + result |= s & 0x3f; + } + *dst = result; + return src - src_orig; +} + +FcBool +FcUtf8Len (const FcChar8 *string, + int len, + int *nchar, + int *wchar) +{ + int n; + int clen; + FcChar32 c; + FcChar32 max; + + n = 0; + max = 0; + while (len) + { + clen = FcUtf8ToUcs4 (string, &c, len); + if (clen <= 0) /* malformed UTF8 string */ + return FcFalse; + if (c > max) + max = c; + string += clen; + len -= clen; + n++; + } + *nchar = n; + if (max >= 0x10000) + *wchar = 4; + else if (max > 0x100) + *wchar = 2; + else + *wchar = 1; + return FcTrue; +} + +int +FcUcs4ToUtf8 (FcChar32 ucs4, + FcChar8 dest[FC_UTF8_MAX_LEN]) +{ + int bits; + FcChar8 *d = dest; + + if (ucs4 < 0x80) { *d++= ucs4; bits= -6; } + else if (ucs4 < 0x800) { *d++= ((ucs4 >> 6) & 0x1F) | 0xC0; bits= 0; } + else if (ucs4 < 0x10000) { *d++= ((ucs4 >> 12) & 0x0F) | 0xE0; bits= 6; } + else if (ucs4 < 0x200000) { *d++= ((ucs4 >> 18) & 0x07) | 0xF0; bits= 12; } + else if (ucs4 < 0x4000000) { *d++= ((ucs4 >> 24) & 0x03) | 0xF8; bits= 18; } + else if (ucs4 < 0x80000000) { *d++= ((ucs4 >> 30) & 0x01) | 0xFC; bits= 24; } + else return 0; + + for ( ; bits >= 0; bits-= 6) { + *d++= ((ucs4 >> bits) & 0x3F) | 0x80; + } + return d - dest; +} + +#define GetUtf16(src,endian) \ + ((FcChar16) ((src)[endian == FcEndianBig ? 0 : 1] << 8) | \ + (FcChar16) ((src)[endian == FcEndianBig ? 1 : 0])) + +int +FcUtf16ToUcs4 (const FcChar8 *src_orig, + FcEndian endian, + FcChar32 *dst, + int len) /* in bytes */ +{ + const FcChar8 *src = src_orig; + FcChar16 a, b; + FcChar32 result; + + if (len < 2) + return 0; + + a = GetUtf16 (src, endian); src += 2; len -= 2; + + /* + * Check for surrogate + */ + if ((a & 0xfc00) == 0xd800) + { + if (len < 2) + return 0; + b = GetUtf16 (src, endian); src += 2; len -= 2; + /* + * Check for invalid surrogate sequence + */ + if ((b & 0xfc00) != 0xdc00) + return 0; + result = ((((FcChar32) a & 0x3ff) << 10) | + ((FcChar32) b & 0x3ff)) + 0x10000; + } + else + result = a; + *dst = result; + return src - src_orig; +} + +FcBool +FcUtf16Len (const FcChar8 *string, + FcEndian endian, + int len, /* in bytes */ + int *nchar, + int *wchar) +{ + int n; + int clen; + FcChar32 c; + FcChar32 max; + + n = 0; + max = 0; + while (len) + { + clen = FcUtf16ToUcs4 (string, endian, &c, len); + if (clen <= 0) /* malformed UTF8 string */ + return FcFalse; + if (c > max) + max = c; + string += clen; + len -= clen; + n++; + } + *nchar = n; + if (max >= 0x10000) + *wchar = 4; + else if (max > 0x100) + *wchar = 2; + else + *wchar = 1; + return FcTrue; +} + +void +FcStrBufInit (FcStrBuf *buf, FcChar8 *init, int size) +{ + if (init) + { + buf->buf = init; + buf->size = size; + } else + { + buf->buf = buf->buf_static; + buf->size = sizeof (buf->buf_static); + } + buf->allocated = FcFalse; + buf->failed = FcFalse; + buf->len = 0; +} + +void +FcStrBufDestroy (FcStrBuf *buf) +{ + if (buf->allocated) + { + FcMemFree (FC_MEM_STRBUF, buf->size); + free (buf->buf); + FcStrBufInit (buf, 0, 0); + } +} + +FcChar8 * +FcStrBufDone (FcStrBuf *buf) +{ + FcChar8 *ret; + + if (buf->failed) + ret = NULL; + else + ret = malloc (buf->len + 1); + if (ret) + { + FcMemAlloc (FC_MEM_STRING, buf->len + 1); + memcpy (ret, buf->buf, buf->len); + ret[buf->len] = '\0'; + } + FcStrBufDestroy (buf); + return ret; +} + +FcChar8 * +FcStrBufDoneStatic (FcStrBuf *buf) +{ + FcStrBufChar (buf, '\0'); + + if (buf->failed) + return NULL; + + return buf->buf; +} + +FcBool +FcStrBufChar (FcStrBuf *buf, FcChar8 c) +{ + if (buf->len == buf->size) + { + FcChar8 *new; + int size; + + if (buf->failed) + return FcFalse; + + if (buf->allocated) + { + size = buf->size * 2; + new = realloc (buf->buf, size); + } + else + { + size = buf->size + 64; + new = malloc (size); + if (new) + { + buf->allocated = FcTrue; + memcpy (new, buf->buf, buf->len); + } + } + if (!new) + { + buf->failed = FcTrue; + return FcFalse; + } + if (buf->size) + FcMemFree (FC_MEM_STRBUF, buf->size); + FcMemAlloc (FC_MEM_STRBUF, size); + buf->size = size; + buf->buf = new; + } + buf->buf[buf->len++] = c; + return FcTrue; +} + +FcBool +FcStrBufString (FcStrBuf *buf, const FcChar8 *s) +{ + FcChar8 c; + while ((c = *s++)) + if (!FcStrBufChar (buf, c)) + return FcFalse; + return FcTrue; +} + +FcBool +FcStrBufData (FcStrBuf *buf, const FcChar8 *s, int len) +{ + while (len-- > 0) + if (!FcStrBufChar (buf, *s++)) + return FcFalse; + return FcTrue; +} + +FcBool +FcStrUsesHome (const FcChar8 *s) +{ + return *s == '~'; +} + +FcChar8 * +FcStrCopyFilename (const FcChar8 *s) +{ + FcChar8 *new; + + if (*s == '~') + { + FcChar8 *home = FcConfigHome (); + FcChar8 *full; + int size; + if (!home) + return 0; + size = strlen ((char *) home) + strlen ((char *) s); + full = (FcChar8 *) malloc (size); + if (!full) + return 0; + strcpy ((char *) full, (char *) home); + strcat ((char *) full, (char *) s + 1); + new = FcStrCanonFilename (full); + free (full); + } + else + new = FcStrCanonFilename (s); + return new; +} + +FcChar8 * +FcStrLastSlash (const FcChar8 *path) +{ + FcChar8 *slash; + + slash = (FcChar8 *) strrchr ((const char *) path, '/'); +#ifdef _WIN32 + { + FcChar8 *backslash; + + backslash = (FcChar8 *) strrchr ((const char *) path, '\\'); + if (!slash || (backslash && backslash > slash)) + slash = backslash; + } +#endif + + return slash; +} + +FcChar8 * +FcStrDirname (const FcChar8 *file) +{ + FcChar8 *slash; + FcChar8 *dir; + + slash = FcStrLastSlash (file); + if (!slash) + return FcStrCopy ((FcChar8 *) "."); + dir = malloc ((slash - file) + 1); + if (!dir) + return 0; + FcMemAlloc (FC_MEM_STRING, (slash - file) + 1); + strncpy ((char *) dir, (const char *) file, slash - file); + dir[slash - file] = '\0'; + return dir; +} + +FcChar8 * +FcStrBasename (const FcChar8 *file) +{ + FcChar8 *slash; + + slash = FcStrLastSlash (file); + if (!slash) + return FcStrCopy (file); + return FcStrCopy (slash + 1); +} + +static FcChar8 * +FcStrCanonAbsoluteFilename (const FcChar8 *s) +{ + FcChar8 *file; + FcChar8 *f; + const FcChar8 *slash; + int size; + + size = strlen ((char *) s) + 1; + file = malloc (size); + if (!file) + return NULL; + FcMemAlloc (FC_MEM_STRING, size); + slash = NULL; + f = file; + for (;;) { + if (*s == '/' || *s == '\0') + { + if (slash) + { + switch (s - slash) { + case 1: + f -= 1; /* squash // and trim final / from file */ + break; + case 2: + if (!strncmp ((char *) slash, "/.", 2)) + { + f -= 2; /* trim /. from file */ + } + break; + case 3: + if (!strncmp ((char *) slash, "/..", 3)) + { + f -= 3; /* trim /.. from file */ + while (f > file) { + if (*--f == '/') + break; + } + } + break; + } + } + slash = s; + } + if (!(*f++ = *s++)) + break; + } + return file; +} + +#ifdef _WIN32 +/* + * Convert '\\' to '/' , remove double '/' + */ +static void +FcConvertDosPath (char *str) +{ + size_t len = strlen (str); + char *p = str; + char *dest = str; + char *end = str + len; + char last = 0; + + if (*p == '\\') + { + *p = '/'; + p++; + dest++; + } + while (p < end) + { + if (*p == '\\') + *p = '/'; + + if (*p != '/' + || last != '/') + { + *dest++ = *p; + } + + last = *p; + p++; + } + + *dest = 0; +} +#endif + +FcChar8 * +FcStrCanonFilename (const FcChar8 *s) +{ +#ifdef _WIN32 + FcChar8 full[FC_MAX_FILE_LEN + 2]; + int size = GetFullPathName (s, sizeof (full) -1, + full, NULL); + + if (size == 0) + perror ("GetFullPathName"); + + FcConvertDosPath (full); + return FcStrCanonAbsoluteFilename (full); +#else + if (s[0] == '/') + return FcStrCanonAbsoluteFilename (s); + else + { + FcChar8 *full; + FcChar8 *file; + + FcChar8 cwd[FC_MAX_FILE_LEN + 2]; + if (getcwd ((char *) cwd, FC_MAX_FILE_LEN) == NULL) + return NULL; + strcat ((char *) cwd, "/"); + full = FcStrPlus (cwd, s); + file = FcStrCanonAbsoluteFilename (full); + FcStrFree (full); + return file; + } +#endif +} + + +FcStrSet * +FcStrSetCreate (void) +{ + FcStrSet *set = malloc (sizeof (FcStrSet)); + if (!set) + return 0; + FcMemAlloc (FC_MEM_STRSET, sizeof (FcStrSet)); + set->ref = 1; + set->num = 0; + set->size = 0; + set->strs = 0; + return set; +} + +static FcBool +_FcStrSetAppend (FcStrSet *set, FcChar8 *s) +{ + if (FcStrSetMember (set, s)) + { + FcStrFree (s); + return FcTrue; + } + if (set->num == set->size) + { + FcChar8 **strs = malloc ((set->size + 2) * sizeof (FcChar8 *)); + + if (!strs) + return FcFalse; + FcMemAlloc (FC_MEM_STRSET, (set->size + 2) * sizeof (FcChar8 *)); + if (set->num) + memcpy (strs, set->strs, set->num * sizeof (FcChar8 *)); + if (set->strs) + { + FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *)); + free (set->strs); + } + set->size = set->size + 1; + set->strs = strs; + } + set->strs[set->num++] = s; + set->strs[set->num] = 0; + return FcTrue; +} + +FcBool +FcStrSetMember (FcStrSet *set, const FcChar8 *s) +{ + int i; + + for (i = 0; i < set->num; i++) + if (!FcStrCmp (set->strs[i], s)) + return FcTrue; + return FcFalse; +} + +FcBool +FcStrSetEqual (FcStrSet *sa, FcStrSet *sb) +{ + int i; + if (sa->num != sb->num) + return FcFalse; + for (i = 0; i < sa->num; i++) + if (!FcStrSetMember (sb, sa->strs[i])) + return FcFalse; + return FcTrue; +} + +FcBool +FcStrSetAdd (FcStrSet *set, const FcChar8 *s) +{ + FcChar8 *new = FcStrCopy (s); + if (!new) + return FcFalse; + if (!_FcStrSetAppend (set, new)) + { + FcStrFree (new); + return FcFalse; + } + return FcTrue; +} + +FcBool +FcStrSetAddFilename (FcStrSet *set, const FcChar8 *s) +{ + FcChar8 *new = FcStrCopyFilename (s); + if (!new) + return FcFalse; + if (!_FcStrSetAppend (set, new)) + { + FcStrFree (new); + return FcFalse; + } + return FcTrue; +} + +FcBool +FcStrSetDel (FcStrSet *set, const FcChar8 *s) +{ + int i; + + for (i = 0; i < set->num; i++) + if (!FcStrCmp (set->strs[i], s)) + { + FcStrFree (set->strs[i]); + /* + * copy remaining string pointers and trailing + * NULL + */ + memmove (&set->strs[i], &set->strs[i+1], + (set->num - i) * sizeof (FcChar8 *)); + set->num--; + return FcTrue; + } + return FcFalse; +} + +void +FcStrSetDestroy (FcStrSet *set) +{ + if (--set->ref == 0) + { + int i; + + for (i = 0; i < set->num; i++) + FcStrFree (set->strs[i]); + if (set->strs) + { + FcMemFree (FC_MEM_STRSET, (set->size + 1) * sizeof (FcChar8 *)); + free (set->strs); + } + FcMemFree (FC_MEM_STRSET, sizeof (FcStrSet)); + free (set); + } +} + +FcStrList * +FcStrListCreate (FcStrSet *set) +{ + FcStrList *list; + + list = malloc (sizeof (FcStrList)); + if (!list) + return 0; + FcMemAlloc (FC_MEM_STRLIST, sizeof (FcStrList)); + list->set = set; + set->ref++; + list->n = 0; + return list; +} + +FcChar8 * +FcStrListNext (FcStrList *list) +{ + if (list->n >= list->set->num) + return 0; + return list->set->strs[list->n++]; +} + +void +FcStrListDone (FcStrList *list) +{ + FcStrSetDestroy (list->set); + FcMemFree (FC_MEM_STRLIST, sizeof (FcStrList)); + free (list); +} + +#define __fcstr__ +#include "fcaliastail.h" +#undef __fcstr__ diff --git a/fontconfig/src/fcxml.c b/fontconfig/src/fcxml.c index 5c4e9bf24..e0bb72874 100644 --- a/fontconfig/src/fcxml.c +++ b/fontconfig/src/fcxml.c @@ -1,2807 +1,2807 @@ -/* - * fontconfig/src/fcxml.c - * - * Copyright © 2002 Keith Packard - * - * Permission to use, copy, modify, distribute, and sell this software and its - * documentation for any purpose is hereby granted without fee, provided that - * the above copyright notice appear in all copies and that both that - * copyright notice and this permission notice appear in supporting - * documentation, and that the name of the author(s) not be used in - * advertising or publicity pertaining to distribution of the software without - * specific, written prior permission. The authors make no - * representations about the suitability of this software for any purpose. It - * is provided "as is" without express or implied warranty. - * - * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, - * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO - * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR - * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, - * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER - * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR - * PERFORMANCE OF THIS SOFTWARE. - */ - -#include "fcint.h" -#include -#include -#include - -#ifdef ENABLE_LIBXML2 - -#include - -#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 -#else -#include -#endif - -#endif /* ENABLE_LIBXML2 */ - -#ifdef _WIN32 -#include -#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 - -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, - " cannot edit user-defined object \"%s\"", - FcObjectName(edit->object)); - } - break; - default: - FcConfigMessage (parse, FcSevereWarning, "invalid match element"); - break; - } - FcVStackPopAndDestroy (parse); - } - if (!FcConfigAddEdit (parse->config, test, edit, kind)) - FcConfigMessage (parse, FcSevereError, "out of memory"); -} - -static void -FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element) -{ - FcVStack *vstack; - - while ((vstack = FcVStackPeek (parse))) - { - switch (vstack->tag) { - case FcVStackGlob: - if (!FcConfigGlobAdd (parse->config, - vstack->u.string, - element == FcElementAcceptfont)) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - } - break; - case FcVStackPattern: - if (!FcConfigPatternsAdd (parse->config, - vstack->u.pattern, - element == FcElementAcceptfont)) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - } - else - vstack->tag = FcVStackNone; - break; - default: - FcConfigMessage (parse, FcSevereWarning, "bad font selector"); - break; - } - FcVStackPopAndDestroy (parse); - } -} - - -static FcValue -FcPopValue (FcConfigParse *parse) -{ - FcVStack *vstack = FcVStackPeek (parse); - FcValue value; - - value.type = FcTypeVoid; - - if (!vstack) - return value; - - switch (vstack->tag) { - case FcVStackString: - value.u.s = FcStrStaticName (vstack->u.string); - if (value.u.s) - value.type = FcTypeString; - break; - case FcVStackConstant: - if (FcNameConstant (vstack->u.string, &value.u.i)) - value.type = FcTypeInteger; - break; - case FcVStackInteger: - value.u.i = vstack->u.integer; - value.type = FcTypeInteger; - break; - case FcVStackDouble: - value.u.d = vstack->u._double; - value.type = FcTypeInteger; - break; - case FcVStackMatrix: - value.u.m = FcMatrixCopy (vstack->u.matrix); - if (value.u.m) - value.type = FcTypeMatrix; - break; - case FcVStackBool: - value.u.b = vstack->u.bool_; - value.type = FcTypeBool; - break; - case FcVStackCharSet: - value.u.c = FcCharSetCopy (vstack->u.charset); - if (value.u.c) - value.type = FcTypeCharSet; - break; - case FcVStackLangSet: - value.u.l = FcLangSetCopy (vstack->u.langset); - if (value.u.l) - value.type = FcTypeLangSet; - break; - default: - FcConfigMessage (parse, FcSevereWarning, "unknown pattern element %d", - vstack->tag); - break; - } - FcVStackPopAndDestroy (parse); - - return value; -} - -static void -FcParsePatelt (FcConfigParse *parse) -{ - FcValue value; - FcPattern *pattern = FcPatternCreate (); - const char *name; - - if (!pattern) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - return; - } - - name = (char *) FcConfigGetAttribute (parse, "name"); - if (!name) - { - FcConfigMessage (parse, FcSevereWarning, "missing pattern element name"); - FcPatternDestroy (pattern); - return; - } - - for (;;) - { - value = FcPopValue (parse); - if (value.type == FcTypeVoid) - break; - if (!FcPatternAdd (pattern, name, value, FcTrue)) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - FcValueDestroy(value); - break; - } - FcValueDestroy(value); - } - - FcVStackPushPattern (parse, pattern); -} - -static void -FcParsePattern (FcConfigParse *parse) -{ - FcVStack *vstack; - FcPattern *pattern = FcPatternCreate (); - - if (!pattern) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - return; - } - - while ((vstack = FcVStackPeek (parse))) - { - switch (vstack->tag) { - case FcVStackPattern: - if (!FcPatternAppend (pattern, vstack->u.pattern)) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - FcPatternDestroy (pattern); - return; - } - break; - default: - FcConfigMessage (parse, FcSevereWarning, "unknown pattern element"); - break; - } - FcVStackPopAndDestroy (parse); - } - - FcVStackPushPattern (parse, pattern); -} - -static void -FcEndElement(void *userData, const XML_Char *name) -{ - FcConfigParse *parse = userData; - FcChar8 *data; -#ifdef _WIN32 - FcChar8 buffer[1000]; -#endif - - if (!parse->pstack) - return; - switch (parse->pstack->element) { - case FcElementNone: - break; - case FcElementFontconfig: - break; - case FcElementDir: - data = FcStrBufDoneStatic (&parse->pstack->str); - if (!data) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - break; - } -#ifdef _WIN32 - if (strcmp (data, "CUSTOMFONTDIR") == 0) - { - char *p; - data = buffer; - if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20)) - { - FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed"); - break; - } - /* - * Must use the multi-byte aware function to search - * for backslash because East Asian double-byte code - * pages have characters with backslash as the second - * byte. - */ - p = _mbsrchr (data, '\\'); - if (p) *p = '\0'; - strcat (data, "\\fonts"); - } - else if (strcmp (data, "APPSHAREFONTDIR") == 0) - { - char *p; - data = buffer; - if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20)) - { - FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed"); - break; - } - p = _mbsrchr (data, '\\'); - if (p) *p = '\0'; - strcat (data, "\\..\\share\\fonts"); - } - else if (strcmp (data, "WINDOWSFONTDIR") == 0) - { - int rc; - data = buffer; -#if _WIN32_WINNT >= 0x0500 - rc = GetSystemWindowsDirectory (buffer, sizeof (buffer) - 20); -#else - rc = GetWindowsDirectory (buffer, sizeof (buffer) - 20); -#endif - if (rc == 0 || rc > sizeof (buffer) - 20) - { - FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed"); - break; - } - if (data [strlen (data) - 1] != '\\') - strcat (data, "\\"); - strcat (data, "fonts"); - } -#endif - if (strlen ((char *) data) == 0) - FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored"); - else if (!FcStrUsesHome (data) || FcConfigHome ()) - { - if (!FcConfigAddDir (parse->config, data)) - FcConfigMessage (parse, FcSevereError, "out of memory; cannot add directory %s", data); - } - FcStrBufDestroy (&parse->pstack->str); - break; - case FcElementCacheDir: - data = FcStrBufDone (&parse->pstack->str); - if (!data) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - break; - } -#ifdef _WIN32 - if (strcmp (data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0) - { - int rc; - FcStrFree (data); - data = malloc (1000); - if (!data) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - break; - } - FcMemAlloc (FC_MEM_STRING, 1000); - rc = GetTempPath (800, data); - if (rc == 0 || rc > 800) - { - FcConfigMessage (parse, FcSevereError, "GetTempPath failed"); - FcStrFree (data); - break; - } - if (data [strlen (data) - 1] != '\\') - strcat (data, "\\"); - strcat (data, "fontconfig\\cache"); - } -#endif - if (!FcStrUsesHome (data) || FcConfigHome ()) - { - if (!FcConfigAddCacheDir (parse->config, data)) - FcConfigMessage (parse, FcSevereError, "out of memory; cannot add cache directory %s", data); - } - FcStrFree (data); - break; - - case FcElementCache: - data = FcStrBufDoneStatic (&parse->pstack->str); - if (!data) - { - FcConfigMessage (parse, FcSevereError, "out of memory"); - break; - } - /* discard this data; no longer used */ - FcStrBufDestroy (&parse->pstack->str); - break; - case FcElementInclude: - FcParseInclude (parse); - break; - case FcElementConfig: - break; - case FcElementMatch: - FcParseMatch (parse); - break; - case FcElementAlias: - FcParseAlias (parse); - break; - - case FcElementBlank: - FcParseBlank (parse); - break; - case FcElementRescan: - FcParseRescan (parse); - break; - - case FcElementPrefer: - FcParseFamilies (parse, FcVStackPrefer); - break; - case FcElementAccept: - FcParseFamilies (parse, FcVStackAccept); - break; - case FcElementDefault: - FcParseFamilies (parse, FcVStackDefault); - break; - case FcElementFamily: - FcParseFamily (parse); - break; - - case FcElementTest: - FcParseTest (parse); - break; - case FcElementEdit: - FcParseEdit (parse); - break; - - case FcElementInt: - FcParseInt (parse); - break; - case FcElementDouble: - FcParseDouble (parse); - break; - case FcElementString: - FcParseString (parse, FcVStackString); - break; - case FcElementMatrix: - FcParseMatrix (parse); - break; - case FcElementRange: - FcParseRange (parse); - break; - case FcElementBool: - FcParseBool (parse); - break; - case FcElementCharSet: - FcParseCharSet (parse); - break; - case FcElementLangSet: - FcParseLangSet (parse); - break; - case FcElementSelectfont: - break; - case FcElementAcceptfont: - case FcElementRejectfont: - FcParseAcceptRejectFont (parse, parse->pstack->element); - break; - case FcElementGlob: - FcParseString (parse, FcVStackGlob); - break; - case FcElementPattern: - FcParsePattern (parse); - break; - case FcElementPatelt: - FcParsePatelt (parse); - break; - case FcElementName: - FcParseString (parse, FcVStackField); - break; - case FcElementConst: - FcParseString (parse, FcVStackConstant); - break; - case FcElementOr: - FcParseBinary (parse, FcOpOr); - break; - case FcElementAnd: - FcParseBinary (parse, FcOpAnd); - break; - case FcElementEq: - FcParseBinary (parse, FcOpEqual); - break; - case FcElementNotEq: - FcParseBinary (parse, FcOpNotEqual); - break; - case FcElementLess: - FcParseBinary (parse, FcOpLess); - break; - case FcElementLessEq: - FcParseBinary (parse, FcOpLessEqual); - break; - case FcElementMore: - FcParseBinary (parse, FcOpMore); - break; - case FcElementMoreEq: - FcParseBinary (parse, FcOpMoreEqual); - break; - case FcElementContains: - FcParseBinary (parse, FcOpContains); - break; - case FcElementNotContains: - FcParseBinary (parse, FcOpNotContains); - break; - case FcElementPlus: - FcParseBinary (parse, FcOpPlus); - break; - case FcElementMinus: - FcParseBinary (parse, FcOpMinus); - break; - case FcElementTimes: - FcParseBinary (parse, FcOpTimes); - break; - case FcElementDivide: - FcParseBinary (parse, FcOpDivide); - break; - case FcElementNot: - FcParseUnary (parse, FcOpNot); - break; - case FcElementIf: - FcParseBinary (parse, FcOpQuest); - break; - case FcElementFloor: - FcParseUnary (parse, FcOpFloor); - break; - case FcElementCeil: - FcParseUnary (parse, FcOpCeil); - break; - case FcElementRound: - FcParseUnary (parse, FcOpRound); - break; - case FcElementTrunc: - FcParseUnary (parse, FcOpTrunc); - break; - case FcElementUnknown: - break; - } - (void) FcPStackPop (parse); -} - -static void -FcCharacterData (void *userData, const XML_Char *s, int len) -{ - FcConfigParse *parse = userData; - - if (!parse->pstack) - return; - if (!FcStrBufData (&parse->pstack->str, (FcChar8 *) s, len)) - FcConfigMessage (parse, FcSevereError, "out of memory"); -} - -static void -FcStartDoctypeDecl (void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid, - int has_internal_subset) -{ - FcConfigParse *parse = userData; - - if (strcmp ((char *) doctypeName, "fontconfig") != 0) - FcConfigMessage (parse, FcSevereError, "invalid doctype \"%s\"", doctypeName); -} - -#ifdef ENABLE_LIBXML2 - -static void -FcInternalSubsetDecl (void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid) -{ - FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 1); -} - -static void -FcExternalSubsetDecl (void *userData, - const XML_Char *doctypeName, - const XML_Char *sysid, - const XML_Char *pubid) -{ - FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 0); -} - -#else /* ENABLE_LIBXML2 */ - -static void -FcEndDoctypeDecl (void *userData) -{ -} - -#endif /* ENABLE_LIBXML2 */ - -static int -FcSortCmpStr (const void *a, const void *b) -{ - const FcChar8 *as = *((FcChar8 **) a); - const FcChar8 *bs = *((FcChar8 **) b); - return FcStrCmp (as, bs); -} - -static FcBool -FcConfigParseAndLoadDir (FcConfig *config, - const FcChar8 *name, - const FcChar8 *dir, - FcBool complain) -{ - DIR *d; - struct dirent *e; - FcBool ret = FcTrue; - FcChar8 *file; - FcChar8 *base; - FcStrSet *files; - - d = opendir ((char *) dir); - if (!d) - { - if (complain) - FcConfigMessage (0, FcSevereError, "Cannot open config dir \"%s\"", - name); - ret = FcFalse; - goto bail0; - } - /* freed below */ - file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1); - if (!file) - { - ret = FcFalse; - goto bail1; - } - - strcpy ((char *) file, (char *) dir); - strcat ((char *) file, "/"); - base = file + strlen ((char *) file); - - files = FcStrSetCreate (); - if (!files) - { - ret = FcFalse; - goto bail2; - } - - if (FcDebug () & FC_DBG_CONFIG) - printf ("\tScanning config dir %s\n", dir); - - while (ret && (e = readdir (d))) - { - int d_len; -#define TAIL ".conf" -#define TAIL_LEN 5 - /* - * Add all files of the form [0-9]*.conf - */ - if ('0' <= e->d_name[0] && e->d_name[0] <= '9' && - (d_len = strlen (e->d_name)) < FC_MAX_FILE_LEN && - d_len > TAIL_LEN && - strcmp (e->d_name + d_len - TAIL_LEN, TAIL) == 0) - { - strcpy ((char *) base, (char *) e->d_name); - if (!FcStrSetAdd (files, file)) - { - ret = FcFalse; - goto bail3; - } - } - } - if (ret) - { - int i; - qsort (files->strs, files->num, sizeof (FcChar8 *), - (int (*)(const void *, const void *)) FcSortCmpStr); - for (i = 0; ret && i < files->num; i++) - ret = FcConfigParseAndLoad (config, files->strs[i], complain); - } -bail3: - FcStrSetDestroy (files); -bail2: - free (file); -bail1: - closedir (d); -bail0: - return ret || !complain; -} - -FcBool -FcConfigParseAndLoad (FcConfig *config, - const FcChar8 *name, - FcBool complain) -{ - - XML_Parser p; - FcChar8 *filename; - int fd; - int len; - FcConfigParse parse; - FcBool error = FcTrue; - -#ifdef ENABLE_LIBXML2 - xmlSAXHandler sax; - char buf[BUFSIZ]; -#else - void *buf; -#endif - - filename = FcConfigFilename (name); - if (!filename) - goto bail0; - - if (FcStrSetMember (config->configFiles, filename)) - { - FcStrFree (filename); - return FcTrue; - } - - if (!FcStrSetAdd (config->configFiles, filename)) - { - FcStrFree (filename); - goto bail0; - } - - if (FcFileIsDir (filename)) - { - FcBool ret = FcConfigParseAndLoadDir (config, name, filename, complain); - FcStrFree (filename); - return ret; - } - - if (FcDebug () & FC_DBG_CONFIG) - printf ("\tLoading config file %s\n", filename); - - fd = open ((char *) filename, O_RDONLY); - if (fd == -1) { - FcStrFree (filename); - goto bail0; - } - -#ifdef ENABLE_LIBXML2 - memset(&sax, 0, sizeof(sax)); - - sax.internalSubset = FcInternalSubsetDecl; - sax.externalSubset = FcExternalSubsetDecl; - sax.startElement = FcStartElement; - sax.endElement = FcEndElement; - sax.characters = FcCharacterData; - - p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, (const char *) filename); -#else - p = XML_ParserCreate ("UTF-8"); -#endif - FcStrFree (filename); - - if (!p) - goto bail1; - - if (!FcConfigInit (&parse, name, config, p)) - goto bail2; - -#ifndef ENABLE_LIBXML2 - - XML_SetUserData (p, &parse); - - XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl); - XML_SetElementHandler (p, FcStartElement, FcEndElement); - XML_SetCharacterDataHandler (p, FcCharacterData); - -#endif /* ENABLE_LIBXML2 */ - - do { -#ifndef ENABLE_LIBXML2 - buf = XML_GetBuffer (p, BUFSIZ); - if (!buf) - { - FcConfigMessage (&parse, FcSevereError, "cannot get parse buffer"); - goto bail3; - } -#endif - len = read (fd, buf, BUFSIZ); - if (len < 0) - { - FcConfigMessage (&parse, FcSevereError, "failed reading config file"); - goto bail3; - } - -#ifdef ENABLE_LIBXML2 - if (xmlParseChunk (p, buf, len, len == 0)) -#else - if (!XML_ParseBuffer (p, len, len == 0)) -#endif - { - FcConfigMessage (&parse, FcSevereError, "%s", - XML_ErrorString (XML_GetErrorCode (p))); - goto bail3; - } - } while (len != 0); - error = parse.error; -bail3: - FcConfigCleanup (&parse); -bail2: - XML_ParserFree (p); -bail1: - close (fd); - fd = -1; -bail0: - if (error && complain) - { - if (name) - FcConfigMessage (0, FcSevereError, "Cannot load config file \"%s\"", name); - else - FcConfigMessage (0, FcSevereError, "Cannot load default config file"); - return FcFalse; - } - return FcTrue; -} -#define __fcxml__ -#include "fcaliastail.h" -#undef __fcxml__ +/* + * fontconfig/src/fcxml.c + * + * Copyright © 2002 Keith Packard + * + * Permission to use, copy, modify, distribute, and sell this software and its + * documentation for any purpose is hereby granted without fee, provided that + * the above copyright notice appear in all copies and that both that + * copyright notice and this permission notice appear in supporting + * documentation, and that the name of the author(s) not be used in + * advertising or publicity pertaining to distribution of the software without + * specific, written prior permission. The authors make no + * representations about the suitability of this software for any purpose. It + * is provided "as is" without express or implied warranty. + * + * THE AUTHOR(S) DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, + * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO + * EVENT SHALL THE AUTHOR(S) BE LIABLE FOR ANY SPECIAL, INDIRECT OR + * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, + * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER + * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + * PERFORMANCE OF THIS SOFTWARE. + */ + +#include "fcint.h" +#include +#include +#include + +#ifdef ENABLE_LIBXML2 + +#include + +#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 +#else +#include +#endif + +#endif /* ENABLE_LIBXML2 */ + +#ifdef _WIN32 +#include +#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 + +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, + " cannot edit user-defined object \"%s\"", + FcObjectName(edit->object)); + } + break; + default: + FcConfigMessage (parse, FcSevereWarning, "invalid match element"); + break; + } + FcVStackPopAndDestroy (parse); + } + if (!FcConfigAddEdit (parse->config, test, edit, kind)) + FcConfigMessage (parse, FcSevereError, "out of memory"); +} + +static void +FcParseAcceptRejectFont (FcConfigParse *parse, FcElement element) +{ + FcVStack *vstack; + + while ((vstack = FcVStackPeek (parse))) + { + switch (vstack->tag) { + case FcVStackGlob: + if (!FcConfigGlobAdd (parse->config, + vstack->u.string, + element == FcElementAcceptfont)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + } + break; + case FcVStackPattern: + if (!FcConfigPatternsAdd (parse->config, + vstack->u.pattern, + element == FcElementAcceptfont)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + } + else + vstack->tag = FcVStackNone; + break; + default: + FcConfigMessage (parse, FcSevereWarning, "bad font selector"); + break; + } + FcVStackPopAndDestroy (parse); + } +} + + +static FcValue +FcPopValue (FcConfigParse *parse) +{ + FcVStack *vstack = FcVStackPeek (parse); + FcValue value; + + value.type = FcTypeVoid; + + if (!vstack) + return value; + + switch (vstack->tag) { + case FcVStackString: + value.u.s = FcStrStaticName (vstack->u.string); + if (value.u.s) + value.type = FcTypeString; + break; + case FcVStackConstant: + if (FcNameConstant (vstack->u.string, &value.u.i)) + value.type = FcTypeInteger; + break; + case FcVStackInteger: + value.u.i = vstack->u.integer; + value.type = FcTypeInteger; + break; + case FcVStackDouble: + value.u.d = vstack->u._double; + value.type = FcTypeInteger; + break; + case FcVStackMatrix: + value.u.m = FcMatrixCopy (vstack->u.matrix); + if (value.u.m) + value.type = FcTypeMatrix; + break; + case FcVStackBool: + value.u.b = vstack->u.bool_; + value.type = FcTypeBool; + break; + case FcVStackCharSet: + value.u.c = FcCharSetCopy (vstack->u.charset); + if (value.u.c) + value.type = FcTypeCharSet; + break; + case FcVStackLangSet: + value.u.l = FcLangSetCopy (vstack->u.langset); + if (value.u.l) + value.type = FcTypeLangSet; + break; + default: + FcConfigMessage (parse, FcSevereWarning, "unknown pattern element %d", + vstack->tag); + break; + } + FcVStackPopAndDestroy (parse); + + return value; +} + +static void +FcParsePatelt (FcConfigParse *parse) +{ + FcValue value; + FcPattern *pattern = FcPatternCreate (); + const char *name; + + if (!pattern) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + + name = (char *) FcConfigGetAttribute (parse, "name"); + if (!name) + { + FcConfigMessage (parse, FcSevereWarning, "missing pattern element name"); + FcPatternDestroy (pattern); + return; + } + + for (;;) + { + value = FcPopValue (parse); + if (value.type == FcTypeVoid) + break; + if (!FcPatternAdd (pattern, name, value, FcTrue)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + FcValueDestroy(value); + break; + } + FcValueDestroy(value); + } + + FcVStackPushPattern (parse, pattern); +} + +static void +FcParsePattern (FcConfigParse *parse) +{ + FcVStack *vstack; + FcPattern *pattern = FcPatternCreate (); + + if (!pattern) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + return; + } + + while ((vstack = FcVStackPeek (parse))) + { + switch (vstack->tag) { + case FcVStackPattern: + if (!FcPatternAppend (pattern, vstack->u.pattern)) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + FcPatternDestroy (pattern); + return; + } + break; + default: + FcConfigMessage (parse, FcSevereWarning, "unknown pattern element"); + break; + } + FcVStackPopAndDestroy (parse); + } + + FcVStackPushPattern (parse, pattern); +} + +static void +FcEndElement(void *userData, const XML_Char *name) +{ + FcConfigParse *parse = userData; + FcChar8 *data; +#ifdef _WIN32 + FcChar8 buffer[1000]; +#endif + + if (!parse->pstack) + return; + switch (parse->pstack->element) { + case FcElementNone: + break; + case FcElementFontconfig: + break; + case FcElementDir: + data = FcStrBufDoneStatic (&parse->pstack->str); + if (!data) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + break; + } +#ifdef _WIN32 + if (strcmp (data, "CUSTOMFONTDIR") == 0) + { + char *p; + data = buffer; + if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20)) + { + FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed"); + break; + } + /* + * Must use the multi-byte aware function to search + * for backslash because East Asian double-byte code + * pages have characters with backslash as the second + * byte. + */ + p = _mbsrchr (data, '\\'); + if (p) *p = '\0'; + strcat (data, "\\fonts"); + } + else if (strcmp (data, "APPSHAREFONTDIR") == 0) + { + char *p; + data = buffer; + if (!GetModuleFileName (NULL, buffer, sizeof (buffer) - 20)) + { + FcConfigMessage (parse, FcSevereError, "GetModuleFileName failed"); + break; + } + p = _mbsrchr (data, '\\'); + if (p) *p = '\0'; + strcat (data, "\\..\\share\\fonts"); + } + else if (strcmp (data, "WINDOWSFONTDIR") == 0) + { + int rc; + data = buffer; +#if _WIN32_WINNT >= 0x0500 + rc = GetSystemWindowsDirectory (buffer, sizeof (buffer) - 20); +#else + rc = GetWindowsDirectory (buffer, sizeof (buffer) - 20); +#endif + if (rc == 0 || rc > sizeof (buffer) - 20) + { + FcConfigMessage (parse, FcSevereError, "GetSystemWindowsDirectory failed"); + break; + } + if (data [strlen (data) - 1] != '\\') + strcat (data, "\\"); + strcat (data, "fonts"); + } +#endif + if (strlen ((char *) data) == 0) + FcConfigMessage (parse, FcSevereWarning, "empty font directory name ignored"); + else if (!FcStrUsesHome (data) || FcConfigHome ()) + { + if (!FcConfigAddDir (parse->config, data)) + FcConfigMessage (parse, FcSevereError, "out of memory; cannot add directory %s", data); + } + FcStrBufDestroy (&parse->pstack->str); + break; + case FcElementCacheDir: + data = FcStrBufDone (&parse->pstack->str); + if (!data) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + break; + } +#ifdef _WIN32 + if (strcmp (data, "WINDOWSTEMPDIR_FONTCONFIG_CACHE") == 0) + { + int rc; + FcStrFree (data); + data = malloc (1000); + if (!data) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + break; + } + FcMemAlloc (FC_MEM_STRING, 1000); + rc = GetTempPath (800, data); + if (rc == 0 || rc > 800) + { + FcConfigMessage (parse, FcSevereError, "GetTempPath failed"); + FcStrFree (data); + break; + } + if (data [strlen (data) - 1] != '\\') + strcat (data, "\\"); + strcat (data, "fontconfig\\cache"); + } +#endif + if (!FcStrUsesHome (data) || FcConfigHome ()) + { + if (!FcConfigAddCacheDir (parse->config, data)) + FcConfigMessage (parse, FcSevereError, "out of memory; cannot add cache directory %s", data); + } + FcStrFree (data); + break; + + case FcElementCache: + data = FcStrBufDoneStatic (&parse->pstack->str); + if (!data) + { + FcConfigMessage (parse, FcSevereError, "out of memory"); + break; + } + /* discard this data; no longer used */ + FcStrBufDestroy (&parse->pstack->str); + break; + case FcElementInclude: + FcParseInclude (parse); + break; + case FcElementConfig: + break; + case FcElementMatch: + FcParseMatch (parse); + break; + case FcElementAlias: + FcParseAlias (parse); + break; + + case FcElementBlank: + FcParseBlank (parse); + break; + case FcElementRescan: + FcParseRescan (parse); + break; + + case FcElementPrefer: + FcParseFamilies (parse, FcVStackPrefer); + break; + case FcElementAccept: + FcParseFamilies (parse, FcVStackAccept); + break; + case FcElementDefault: + FcParseFamilies (parse, FcVStackDefault); + break; + case FcElementFamily: + FcParseFamily (parse); + break; + + case FcElementTest: + FcParseTest (parse); + break; + case FcElementEdit: + FcParseEdit (parse); + break; + + case FcElementInt: + FcParseInt (parse); + break; + case FcElementDouble: + FcParseDouble (parse); + break; + case FcElementString: + FcParseString (parse, FcVStackString); + break; + case FcElementMatrix: + FcParseMatrix (parse); + break; + case FcElementRange: + FcParseRange (parse); + break; + case FcElementBool: + FcParseBool (parse); + break; + case FcElementCharSet: + FcParseCharSet (parse); + break; + case FcElementLangSet: + FcParseLangSet (parse); + break; + case FcElementSelectfont: + break; + case FcElementAcceptfont: + case FcElementRejectfont: + FcParseAcceptRejectFont (parse, parse->pstack->element); + break; + case FcElementGlob: + FcParseString (parse, FcVStackGlob); + break; + case FcElementPattern: + FcParsePattern (parse); + break; + case FcElementPatelt: + FcParsePatelt (parse); + break; + case FcElementName: + FcParseString (parse, FcVStackField); + break; + case FcElementConst: + FcParseString (parse, FcVStackConstant); + break; + case FcElementOr: + FcParseBinary (parse, FcOpOr); + break; + case FcElementAnd: + FcParseBinary (parse, FcOpAnd); + break; + case FcElementEq: + FcParseBinary (parse, FcOpEqual); + break; + case FcElementNotEq: + FcParseBinary (parse, FcOpNotEqual); + break; + case FcElementLess: + FcParseBinary (parse, FcOpLess); + break; + case FcElementLessEq: + FcParseBinary (parse, FcOpLessEqual); + break; + case FcElementMore: + FcParseBinary (parse, FcOpMore); + break; + case FcElementMoreEq: + FcParseBinary (parse, FcOpMoreEqual); + break; + case FcElementContains: + FcParseBinary (parse, FcOpContains); + break; + case FcElementNotContains: + FcParseBinary (parse, FcOpNotContains); + break; + case FcElementPlus: + FcParseBinary (parse, FcOpPlus); + break; + case FcElementMinus: + FcParseBinary (parse, FcOpMinus); + break; + case FcElementTimes: + FcParseBinary (parse, FcOpTimes); + break; + case FcElementDivide: + FcParseBinary (parse, FcOpDivide); + break; + case FcElementNot: + FcParseUnary (parse, FcOpNot); + break; + case FcElementIf: + FcParseBinary (parse, FcOpQuest); + break; + case FcElementFloor: + FcParseUnary (parse, FcOpFloor); + break; + case FcElementCeil: + FcParseUnary (parse, FcOpCeil); + break; + case FcElementRound: + FcParseUnary (parse, FcOpRound); + break; + case FcElementTrunc: + FcParseUnary (parse, FcOpTrunc); + break; + case FcElementUnknown: + break; + } + (void) FcPStackPop (parse); +} + +static void +FcCharacterData (void *userData, const XML_Char *s, int len) +{ + FcConfigParse *parse = userData; + + if (!parse->pstack) + return; + if (!FcStrBufData (&parse->pstack->str, (FcChar8 *) s, len)) + FcConfigMessage (parse, FcSevereError, "out of memory"); +} + +static void +FcStartDoctypeDecl (void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid, + int has_internal_subset) +{ + FcConfigParse *parse = userData; + + if (strcmp ((char *) doctypeName, "fontconfig") != 0) + FcConfigMessage (parse, FcSevereError, "invalid doctype \"%s\"", doctypeName); +} + +#ifdef ENABLE_LIBXML2 + +static void +FcInternalSubsetDecl (void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid) +{ + FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 1); +} + +static void +FcExternalSubsetDecl (void *userData, + const XML_Char *doctypeName, + const XML_Char *sysid, + const XML_Char *pubid) +{ + FcStartDoctypeDecl (userData, doctypeName, sysid, pubid, 0); +} + +#else /* ENABLE_LIBXML2 */ + +static void +FcEndDoctypeDecl (void *userData) +{ +} + +#endif /* ENABLE_LIBXML2 */ + +static int +FcSortCmpStr (const void *a, const void *b) +{ + const FcChar8 *as = *((FcChar8 **) a); + const FcChar8 *bs = *((FcChar8 **) b); + return FcStrCmp (as, bs); +} + +static FcBool +FcConfigParseAndLoadDir (FcConfig *config, + const FcChar8 *name, + const FcChar8 *dir, + FcBool complain) +{ + DIR *d; + struct dirent *e; + FcBool ret = FcTrue; + FcChar8 *file; + FcChar8 *base; + FcStrSet *files; + + d = opendir ((char *) dir); + if (!d) + { + if (complain) + FcConfigMessage (0, FcSevereError, "Cannot open config dir \"%s\"", + name); + ret = FcFalse; + goto bail0; + } + /* freed below */ + file = (FcChar8 *) malloc (strlen ((char *) dir) + 1 + FC_MAX_FILE_LEN + 1); + if (!file) + { + ret = FcFalse; + goto bail1; + } + + strcpy ((char *) file, (char *) dir); + strcat ((char *) file, "/"); + base = file + strlen ((char *) file); + + files = FcStrSetCreate (); + if (!files) + { + ret = FcFalse; + goto bail2; + } + + if (FcDebug () & FC_DBG_CONFIG) + printf ("\tScanning config dir %s\n", dir); + + while (ret && (e = readdir (d))) + { + int d_len; +#define TAIL ".conf" +#define TAIL_LEN 5 + /* + * Add all files of the form [0-9]*.conf + */ + if ('0' <= e->d_name[0] && e->d_name[0] <= '9' && + (d_len = strlen (e->d_name)) < FC_MAX_FILE_LEN && + d_len > TAIL_LEN && + strcmp (e->d_name + d_len - TAIL_LEN, TAIL) == 0) + { + strcpy ((char *) base, (char *) e->d_name); + if (!FcStrSetAdd (files, file)) + { + ret = FcFalse; + goto bail3; + } + } + } + if (ret) + { + int i; + qsort (files->strs, files->num, sizeof (FcChar8 *), + (int (*)(const void *, const void *)) FcSortCmpStr); + for (i = 0; ret && i < files->num; i++) + ret = FcConfigParseAndLoad (config, files->strs[i], complain); + } +bail3: + FcStrSetDestroy (files); +bail2: + free (file); +bail1: + closedir (d); +bail0: + return ret || !complain; +} + +FcBool +FcConfigParseAndLoad (FcConfig *config, + const FcChar8 *name, + FcBool complain) +{ + + XML_Parser p; + FcChar8 *filename; + int fd; + int len; + FcConfigParse parse; + FcBool error = FcTrue; + +#ifdef ENABLE_LIBXML2 + xmlSAXHandler sax; + char buf[BUFSIZ]; +#else + void *buf; +#endif + + filename = FcConfigFilename (name); + if (!filename) + goto bail0; + + if (FcStrSetMember (config->configFiles, filename)) + { + FcStrFree (filename); + return FcTrue; + } + + if (!FcStrSetAdd (config->configFiles, filename)) + { + FcStrFree (filename); + goto bail0; + } + + if (FcFileIsDir (filename)) + { + FcBool ret = FcConfigParseAndLoadDir (config, name, filename, complain); + FcStrFree (filename); + return ret; + } + + if (FcDebug () & FC_DBG_CONFIG) + printf ("\tLoading config file %s\n", filename); + + fd = open ((char *) filename, O_RDONLY); + if (fd == -1) { + FcStrFree (filename); + goto bail0; + } + +#ifdef ENABLE_LIBXML2 + memset(&sax, 0, sizeof(sax)); + + sax.internalSubset = FcInternalSubsetDecl; + sax.externalSubset = FcExternalSubsetDecl; + sax.startElement = FcStartElement; + sax.endElement = FcEndElement; + sax.characters = FcCharacterData; + + p = xmlCreatePushParserCtxt (&sax, &parse, NULL, 0, (const char *) filename); +#else + p = XML_ParserCreate ("UTF-8"); +#endif + FcStrFree (filename); + + if (!p) + goto bail1; + + if (!FcConfigInit (&parse, name, config, p)) + goto bail2; + +#ifndef ENABLE_LIBXML2 + + XML_SetUserData (p, &parse); + + XML_SetDoctypeDeclHandler (p, FcStartDoctypeDecl, FcEndDoctypeDecl); + XML_SetElementHandler (p, FcStartElement, FcEndElement); + XML_SetCharacterDataHandler (p, FcCharacterData); + +#endif /* ENABLE_LIBXML2 */ + + do { +#ifndef ENABLE_LIBXML2 + buf = XML_GetBuffer (p, BUFSIZ); + if (!buf) + { + FcConfigMessage (&parse, FcSevereError, "cannot get parse buffer"); + goto bail3; + } +#endif + len = read (fd, buf, BUFSIZ); + if (len < 0) + { + FcConfigMessage (&parse, FcSevereError, "failed reading config file"); + goto bail3; + } + +#ifdef ENABLE_LIBXML2 + if (xmlParseChunk (p, buf, len, len == 0)) +#else + if (!XML_ParseBuffer (p, len, len == 0)) +#endif + { + FcConfigMessage (&parse, FcSevereError, "%s", + XML_ErrorString (XML_GetErrorCode (p))); + goto bail3; + } + } while (len != 0); + error = parse.error; +bail3: + FcConfigCleanup (&parse); +bail2: + XML_ParserFree (p); +bail1: + close (fd); + fd = -1; +bail0: + if (error && complain) + { + if (name) + FcConfigMessage (0, FcSevereError, "Cannot load config file \"%s\"", name); + else + FcConfigMessage (0, FcSevereError, "Cannot load default config file"); + return FcFalse; + } + return FcTrue; +} +#define __fcxml__ +#include "fcaliastail.h" +#undef __fcxml__ diff --git a/fontconfig/src/ftglue.c b/fontconfig/src/ftglue.c index 91cb532b9..d5af810b4 100644 --- a/fontconfig/src/ftglue.c +++ b/fontconfig/src/ftglue.c @@ -1,261 +1,261 @@ -/* ftglue.c: Glue code for compiling the OpenType code from - * FreeType 1 using only the public API of FreeType 2 - * - * By David Turner, The FreeType Project (www.freetype.org) - * - * This code is explicitely put in the public domain - * - * See ftglue.h for more information. - */ - -#include "ftglue.h" - -#if 0 -#include -#define LOG(x) ftglue_log x - -static void -ftglue_log( const char* format, ... ) -{ - va_list ap; - - va_start( ap, format ); - vfprintf( stderr, format, ap ); - va_end( ap ); -} - -#else -#define LOG(x) do {} while (0) -#endif - -/* only used internally */ -static FT_Pointer -ftglue_qalloc( FT_Memory memory, - FT_ULong size, - FT_Error *perror ) -{ - FT_Error error = 0; - FT_Pointer block = NULL; - - if ( size > 0 ) - { - block = memory->alloc( memory, size ); - if ( !block ) - error = FT_Err_Out_Of_Memory; - } - - *perror = error; - return block; -} - -#undef QALLOC /* just in case */ -#define QALLOC(ptr,size) ( (ptr) = ftglue_qalloc( memory, (size), &error ), error != 0 ) -#define FREE(_ptr) \ - do { \ - if ( (_ptr) ) \ - { \ - ftglue_free( memory, _ptr ); \ - _ptr = NULL; \ - } \ - } while (0) - - -static void -ftglue_free( FT_Memory memory, - FT_Pointer block ) -{ - if ( block ) - memory->free( memory, block ); -} - -FTGLUE_APIDEF( FT_Long ) -ftglue_stream_pos( FT_Stream stream ) -{ - LOG(( "ftglue:stream:pos() -> %ld\n", stream->pos )); - return stream->pos; -} - - -FTGLUE_APIDEF( FT_Error ) -ftglue_stream_seek( FT_Stream stream, - FT_Long pos ) -{ - FT_Error error = 0; - - stream->pos = pos; - if ( stream->read ) - { - if ( stream->read( stream, pos, 0, 0 ) ) - error = FT_Err_Invalid_Stream_Operation; - } - else if ( pos > stream->size ) - error = FT_Err_Invalid_Stream_Operation; - - LOG(( "ftglue:stream:seek(%ld) -> %d\n", pos, error )); - return error; -} - - -FTGLUE_APIDEF( FT_Error ) -ftglue_stream_frame_enter( FT_Stream stream, - FT_ULong count ) -{ - FT_Error error = FT_Err_Ok; - FT_ULong read_bytes; - - if ( stream->read ) - { - /* allocate the frame in memory */ - FT_Memory memory = stream->memory; - - - if ( QALLOC( stream->base, count ) ) - goto Exit; - - /* read it */ - read_bytes = stream->read( stream, stream->pos, - stream->base, count ); - if ( read_bytes < count ) - { - FREE( stream->base ); - error = FT_Err_Invalid_Stream_Operation; - } - stream->cursor = stream->base; - stream->limit = stream->cursor + count; - stream->pos += read_bytes; - } - else - { - /* check current and new position */ - if ( stream->pos >= stream->size || - stream->pos + count > stream->size ) - { - error = FT_Err_Invalid_Stream_Operation; - goto Exit; - } - - /* set cursor */ - stream->cursor = stream->base + stream->pos; - stream->limit = stream->cursor + count; - stream->pos += count; - } - -Exit: - LOG(( "ftglue:stream:frame_enter(%ld) -> %d\n", count, error )); - return error; -} - - -FTGLUE_APIDEF( void ) -ftglue_stream_frame_exit( FT_Stream stream ) -{ - if ( stream->read ) - { - FT_Memory memory = stream->memory; - - FREE( stream->base ); - } - stream->cursor = 0; - stream->limit = 0; - - LOG(( "ftglue:stream:frame_exit()\n" )); -} - - -FTGLUE_APIDEF( FT_Error ) -ftglue_face_goto_table( FT_Face face, - FT_ULong the_tag, - FT_Stream stream ) -{ - FT_Error error; - - LOG(( "ftglue_face_goto_table( %p, %c%c%c%c, %p )\n", - face, - (int)((the_tag >> 24) & 0xFF), - (int)((the_tag >> 16) & 0xFF), - (int)((the_tag >> 8) & 0xFF), - (int)(the_tag & 0xFF), - stream )); - - if ( !FT_IS_SFNT(face) ) - { - LOG(( "not a SFNT face !!\n" )); - error = FT_Err_Invalid_Face_Handle; - } - else - { - /* parse the directory table directly, without using - * FreeType's built-in data structures - */ - FT_ULong offset = 0, sig; - FT_UInt count, nn; - - if ( FILE_Seek( 0 ) || ACCESS_Frame( 4 ) ) - goto Exit; - - sig = GET_Tag4(); - - FORGET_Frame(); - - if ( sig == FT_MAKE_TAG( 't', 't', 'c', 'f' ) ) - { - /* deal with TrueType collections */ - - LOG(( ">> This is a TrueType Collection\n" )); - - if ( FILE_Seek( 12 + face->face_index*4 ) || - ACCESS_Frame( 4 ) ) - goto Exit; - - offset = GET_ULong(); - - FORGET_Frame(); - } - - LOG(( "TrueType offset = %ld\n", offset )); - - if ( FILE_Seek( offset+4 ) || - ACCESS_Frame( 2 ) ) - goto Exit; - - count = GET_UShort(); - - FORGET_Frame(); - - if ( FILE_Seek( offset+12 ) || - ACCESS_Frame( count*16 ) ) - goto Exit; - - for ( nn = 0; nn < count; nn++ ) - { - FT_ULong tag = GET_ULong(); - FT_ULong checksum = GET_ULong(); - FT_ULong start = GET_ULong(); - FT_ULong size = GET_ULong(); - - FT_UNUSED(checksum); - FT_UNUSED(size); - - if ( tag == the_tag ) - { - LOG(( "TrueType table (start: %ld) (size: %ld)\n", start, size )); - error = ftglue_stream_seek( stream, start ); - goto FoundIt; - } - } - error = FT_Err_Table_Missing; - - FoundIt: - FORGET_Frame(); - } - -Exit: - LOG(( "TrueType error=%d\n", error )); - - return error; -} - -#undef QALLOC -#define __ftglue__ -#include "fcaliastail.h" -#undef __ftglue__ +/* ftglue.c: Glue code for compiling the OpenType code from + * FreeType 1 using only the public API of FreeType 2 + * + * By David Turner, The FreeType Project (www.freetype.org) + * + * This code is explicitely put in the public domain + * + * See ftglue.h for more information. + */ + +#include "ftglue.h" + +#if 0 +#include +#define LOG(x) ftglue_log x + +static void +ftglue_log( const char* format, ... ) +{ + va_list ap; + + va_start( ap, format ); + vfprintf( stderr, format, ap ); + va_end( ap ); +} + +#else +#define LOG(x) do {} while (0) +#endif + +/* only used internally */ +static FT_Pointer +ftglue_qalloc( FT_Memory memory, + FT_ULong size, + FT_Error *perror ) +{ + FT_Error error = 0; + FT_Pointer block = NULL; + + if ( size > 0 ) + { + block = memory->alloc( memory, size ); + if ( !block ) + error = FT_Err_Out_Of_Memory; + } + + *perror = error; + return block; +} + +#undef QALLOC /* just in case */ +#define QALLOC(ptr,size) ( (ptr) = ftglue_qalloc( memory, (size), &error ), error != 0 ) +#define FREE(_ptr) \ + do { \ + if ( (_ptr) ) \ + { \ + ftglue_free( memory, _ptr ); \ + _ptr = NULL; \ + } \ + } while (0) + + +static void +ftglue_free( FT_Memory memory, + FT_Pointer block ) +{ + if ( block ) + memory->free( memory, block ); +} + +FTGLUE_APIDEF( FT_Long ) +ftglue_stream_pos( FT_Stream stream ) +{ + LOG(( "ftglue:stream:pos() -> %ld\n", stream->pos )); + return stream->pos; +} + + +FTGLUE_APIDEF( FT_Error ) +ftglue_stream_seek( FT_Stream stream, + FT_Long pos ) +{ + FT_Error error = 0; + + stream->pos = pos; + if ( stream->read ) + { + if ( stream->read( stream, pos, 0, 0 ) ) + error = FT_Err_Invalid_Stream_Operation; + } + else if ( pos > stream->size ) + error = FT_Err_Invalid_Stream_Operation; + + LOG(( "ftglue:stream:seek(%ld) -> %d\n", pos, error )); + return error; +} + + +FTGLUE_APIDEF( FT_Error ) +ftglue_stream_frame_enter( FT_Stream stream, + FT_ULong count ) +{ + FT_Error error = FT_Err_Ok; + FT_ULong read_bytes; + + if ( stream->read ) + { + /* allocate the frame in memory */ + FT_Memory memory = stream->memory; + + + if ( QALLOC( stream->base, count ) ) + goto Exit; + + /* read it */ + read_bytes = stream->read( stream, stream->pos, + stream->base, count ); + if ( read_bytes < count ) + { + FREE( stream->base ); + error = FT_Err_Invalid_Stream_Operation; + } + stream->cursor = stream->base; + stream->limit = stream->cursor + count; + stream->pos += read_bytes; + } + else + { + /* check current and new position */ + if ( stream->pos >= stream->size || + stream->pos + count > stream->size ) + { + error = FT_Err_Invalid_Stream_Operation; + goto Exit; + } + + /* set cursor */ + stream->cursor = stream->base + stream->pos; + stream->limit = stream->cursor + count; + stream->pos += count; + } + +Exit: + LOG(( "ftglue:stream:frame_enter(%ld) -> %d\n", count, error )); + return error; +} + + +FTGLUE_APIDEF( void ) +ftglue_stream_frame_exit( FT_Stream stream ) +{ + if ( stream->read ) + { + FT_Memory memory = stream->memory; + + FREE( stream->base ); + } + stream->cursor = 0; + stream->limit = 0; + + LOG(( "ftglue:stream:frame_exit()\n" )); +} + + +FTGLUE_APIDEF( FT_Error ) +ftglue_face_goto_table( FT_Face face, + FT_ULong the_tag, + FT_Stream stream ) +{ + FT_Error error; + + LOG(( "ftglue_face_goto_table( %p, %c%c%c%c, %p )\n", + face, + (int)((the_tag >> 24) & 0xFF), + (int)((the_tag >> 16) & 0xFF), + (int)((the_tag >> 8) & 0xFF), + (int)(the_tag & 0xFF), + stream )); + + if ( !FT_IS_SFNT(face) ) + { + LOG(( "not a SFNT face !!\n" )); + error = FT_Err_Invalid_Face_Handle; + } + else + { + /* parse the directory table directly, without using + * FreeType's built-in data structures + */ + FT_ULong offset = 0, sig; + FT_UInt count, nn; + + if ( FILE_Seek( 0 ) || ACCESS_Frame( 4 ) ) + goto Exit; + + sig = GET_Tag4(); + + FORGET_Frame(); + + if ( sig == FT_MAKE_TAG( 't', 't', 'c', 'f' ) ) + { + /* deal with TrueType collections */ + + LOG(( ">> This is a TrueType Collection\n" )); + + if ( FILE_Seek( 12 + face->face_index*4 ) || + ACCESS_Frame( 4 ) ) + goto Exit; + + offset = GET_ULong(); + + FORGET_Frame(); + } + + LOG(( "TrueType offset = %ld\n", offset )); + + if ( FILE_Seek( offset+4 ) || + ACCESS_Frame( 2 ) ) + goto Exit; + + count = GET_UShort(); + + FORGET_Frame(); + + if ( FILE_Seek( offset+12 ) || + ACCESS_Frame( count*16 ) ) + goto Exit; + + for ( nn = 0; nn < count; nn++ ) + { + FT_ULong tag = GET_ULong(); + FT_ULong checksum = GET_ULong(); + FT_ULong start = GET_ULong(); + FT_ULong size = GET_ULong(); + + FT_UNUSED(checksum); + FT_UNUSED(size); + + if ( tag == the_tag ) + { + LOG(( "TrueType table (start: %ld) (size: %ld)\n", start, size )); + error = ftglue_stream_seek( stream, start ); + goto FoundIt; + } + } + error = FT_Err_Table_Missing; + + FoundIt: + FORGET_Frame(); + } + +Exit: + LOG(( "TrueType error=%d\n", error )); + + return error; +} + +#undef QALLOC +#define __ftglue__ +#include "fcaliastail.h" +#undef __ftglue__ -- cgit v1.2.3